Каналы состояния (State Channels) — это простые одноранговые протоколы, которые позволяют двум или более сторонам совершать множество транзакций между собой, и только потом публиковать окончательные результаты в базовом блокчейне, поверх которого они развернуты (например: Ethereum или Bitcoin). Канал состояния использует криптографический алгоритм, чтобы продемонстрировать, что генерируемые им сводные данные являются результатом действительного набора промежуточных транзакций. Смарт -контракт с мультиподписью гарантирует, что транзакции подписаны действительными сторонами.
С помощью каналов состояния, изменения выполняются и проверяются заинтересованными сторонами, сводя к минимуму вычисления на уровне исполнения базового блокчейна, что значительно уменьшает нагрузку на базовый блокчейн L1, а также увеличивается скорость обработки транзакций и снижается комиссия для конечных пользователей. Именно благодаря тому, что каналы состояния работают поверх других блокчейнов и их задачей является масштабирование базовой сети, архитектурно они относятся к решениям второго уровня (Layer 2).
Как работают каналы состояния?
Активность в канале состояния — это сеанс взаимодействия с участием пользователей и блокчейн-системы. Пользователи совершают транзакций друг с другом вне сети и взаимодействуют с базовым блокчейном только для открытия канала, закрытия канала или разрешения потенциальных споров между участниками.
Есть несколько типов рабочих процессов в каналах состояния:
1. Открытие канала состояния
Для открытия канала участники должны внести средства в смарт-контракт в базовой сети, поверх которой развернуто решение масштабирования. Депозит также функционирует как виртуальная вкладка, поэтому участвующие участники могут свободно совершать транзакции без необходимости немедленного расчета платежей. Только когда канал будет закрыт в базовом блокчейне, стороны урегулируют конечный результат и заберут то, что принадлежит каждому из них.
2. Использование канала состояния
После инициализации канала состояния, одноранговые узлы взаимодействуют, подписывая транзакции и отправляя их друг другу на утверждение. Участники инициируют обновления состояния с помощью этих транзакций и подписывают обновления состояния от других. Каждая транзакция включает в себя следующее:
- Одноразовый номер (Nonce), который действует как уникальный идентификатор транзакции и предотвращает возможные атаки повторного использования. Он также определяет порядок, в котором происходили транзакции (что важно для разрешения споров).
- Старое состояние канала.
- Новое состояние канала.
- Транзакцию, которая запускает переход состояния (например, отправка актива одного пользователя другому).
Обновления канала состояния не передаются в базовую сеть, как это обычно бывает, когда пользователи взаимодействуют в основной сети, что соответствует цели каналов состояния минимизировать влияние на базовый блокчейн. Пока участники соглашаются на обновления состояния, они являются такими же окончательными, как и транзакция в основной сети. В случае возникновения спора участникам нужно полагаться только на консенсус основной сети.
3. Закрытие канала состояния
Для закрытия канала состояния требуется передать окончательное, согласованное состояние канала в смарт-контракт в основной сети. Подробности, упомянутые в обновлении состояния, включают количество транзакций каждого участника и список одобренных транзакций.
После проверки данных обновления состояния (т. е. подпись всеми сторонами), смарт-контракт завершает работу этого канала и распределяет заблокированные средства в соответствии с результатами канала. Платежи, осуществляемые за пределами основной сети, применяются к состоянию базового блокчейна, и каждый участник получает оставшуюся часть заблокированных средств.
4. Разрешение споров
Обычно стороны в канале состояния заранее договариваются о закрытии канала и совместно подписывают последний переход состояния, который они отправляют в смарт-контракт в базовом блокчейне. Как только обновление будет одобрено в сети, выполнение смарт-контракта в канале состояния заканчивается, и участники покидают канал со своими активами.
Однако одна сторона может отправить внутрисетевой запрос на завершение выполнения смарт-контракта и завершение работы канала, не дожидаясь одобрения своего партнера. Если произойдет какая-либо из описанных ранее ситуаций, нарушающих консенсус, любая из сторон может активировать внутрисетевой контракт, чтобы закрыть канал и распределить средства. Это обеспечивает надежность, гарантируя, что честные стороны могут выйти из своих депозитов в любой момент, независимо от действий другой стороны.
Чтобы обработать выход из канала, пользователь должен отправить последнее действительное обновление состояния приложения в контракт базового блокчейна. Если это подтверждается и стоят подписи всех сторон, то средства перераспределяются в их пользу.
Однако существует задержка при выполнении однопользовательских запросов на выход. Если запрос на завершение канала был одобрен единогласно, то транзакция выхода из канала состояния выполняется немедленно. Задержка проявляется при однопользовательских выходах из-за возможности мошеннических действий. Например, участник канала может попытаться завершить канал, отправив в сеть более старое обновление состояния.
В качестве контрмеры каналы состояния позволяют честным пользователям оспаривать недействительные обновления состояния, отправляя в базовый блокчейн самое последнее действительное состояние канала. Каналы состояний устроены таким образом, что новые, согласованные обновления состояний превосходят старые обновления состояний.
Как только одноранговый узел запускает систему разрешения споров, другая сторона должна ответить в течение определенного периода времени. Это позволяет пользователям оспорить выходную транзакцию, особенно если другая сторона применяет устаревшее обновление.
Недостатки каналов состояния
- Недоступность данных. Оспаривание недействительного спора требует представления последнего действительного состояния канала. Это еще одно правило, основанное на предположении, что пользователи имеют доступ к последнему состоянию канала.
- Ликвидность. Чтобы создать канал блокчейна, участникам необходимо заблокировать средства в смарт-контракте на протяжении всего жизненного цикла канала. Это снижает ликвидность пользователей каналов, а также ограничивает каналы теми, кто может позволить себе хранить средства заблокированными в базовом блокчейне.
- Грифинговые атаки. Это обычная черта систем, основанных на доказательствах мошенничества. Грифинговая атака не приносит прямой выгоды злоумышленнику, но причиняет вред жертве. Попросту, даже если все транзакции верны, пользователь может замедлить процесс закрытия канала путем оспаривания обновления состояния.
Примеры протоколов
Не смотря на то, что каналы состояния не считают достаточно распространенными решениями масштабирования, существует немало проектов, которые строят такие решения. Рассмотрим некоторые из них:
- Lightning Network — протокол, выступающий решением второго слоя для блокчейна Bitcoin. Позволяет обеспечить более высокую пропускную способность, конфиденциальность транзакций и низкие транзакционные издержки.
- Connext — модульный протокол для безопасной передачи активов и данных между блокчейнами. Разработчики могут использовать Connext для создания кроссчейн-приложений (xApps) — приложений, которые одновременно взаимодействуют с несколькими блокчейнами или накопительными пакетами.
- Kchannels — платформа платежных каналов для блокчейна Ethereum. Он не требует хранения и сводит к минимуму доверие, а его основной упор делается на отличный UX и мгновенную завершенность вне сети.
- Perun — оффчейн-фреймворк, который поддерживает платежи в реальном времени, а также сложную бизнес-логику и совместимость между блокчейнами.