Каналы состояния
Последнее обновление страницы: 26 февраля 2026 г.
Каналы состояний позволяют участникам безопасно совершать транзакции вне сети, сводя взаимодействие с основной сетью Ethereum к минимуму. Участники канала могут проводить произвольное количество оффчейн-транзакций, отправляя только две ончейн-транзакции для открытия и закрытия канала. Это обеспечивает чрезвычайно высокую пропускную способность транзакций и приводит к снижению затрат для пользователей.
Предварительные условия
Вам следует прочитать и понять наши страницы о масштабировании Ethereum и уровне 2.
Что такое каналы?
Публичные блокчейны, такие как Ethereum, сталкиваются с проблемами масштабируемости из-за своей распределенной архитектуры: ончейн-транзакции должны выполняться всеми узлами. Узлы должны иметь возможность обрабатывать объем транзакций в блоке, используя скромное оборудование, что накладывает ограничение на пропускную способность транзакций для сохранения децентрализации сети. Каналы блокчейна решают эту проблему, позволяя пользователям взаимодействовать оффчейн, при этом полагаясь на безопасность основной цепи для окончательного расчета.
Каналы — это простые одноранговые протоколы, которые позволяют двум сторонам совершать множество транзакций между собой, а затем публиковать в блокчейне только окончательные результаты. Канал использует криптографию, чтобы доказать, что генерируемые им сводные данные действительно являются результатом действительного набора промежуточных транзакций. Смарт-контракт с мультиподписью (multisig) гарантирует, что транзакции подписаны надлежащими сторонами.
С помощью каналов изменения состояния выполняются и проверяются заинтересованными сторонами, что минимизирует вычисления на уровне исполнения Ethereum. Это уменьшает перегрузку в сети Ethereum, а также увеличивает скорость обработки транзакций для пользователей.
Каждый канал управляется смарт-контрактом с мультиподписью, работающим в сети Ethereum. Чтобы открыть канал, участники развертывают его контракт ончейн и вносят в него средства. Обе стороны совместно подписывают обновление состояния для инициализации состояния канала, после чего они могут быстро и свободно совершать транзакции оффчейн.
Чтобы закрыть канал, участники отправляют последнее согласованное состояние канала ончейн. После этого смарт-контракт распределяет заблокированные средства в соответствии с балансом каждого участника в конечном состоянии канала.
Одноранговые каналы особенно полезны в ситуациях, когда заранее определенные участники хотят совершать транзакции с высокой частотой без видимых накладных расходов. Каналы блокчейна делятся на две категории: платежные каналы и каналы состояний.
Платежные каналы
Платежный канал лучше всего можно описать как "двусторонний реестр", который совместно ведут два пользователя. Начальный баланс реестра — это сумма депозитов, заблокированных в ончейн-контракте на этапе открытия канала. Переводы в платежном канале могут выполняться мгновенно и без участия самого блокчейна, за исключением первоначального одноразового ончейн-создания и последующего закрытия канала.
Обновления баланса реестра (т. е. состояния платежного канала) требуют одобрения всех сторон канала. Обновление канала, подписанное всеми его участниками, считается окончательным, так же как транзакция в сети Ethereum.
Платежные каналы были одним из первых решений для масштабирования, разработанных для минимизации дорогостоящей ончейн-активности при простых взаимодействиях пользователей (например, переводах ETH, атомарных свопах, микроплатежах). Участники канала могут совершать неограниченное количество мгновенных транзакций без комиссии между собой, пока общая сумма их переводов не превышает депонированные токены.
Каналы состояний
Помимо поддержки оффчейн-платежей, платежные каналы оказались неэффективными для обработки общей логики перехода состояний. Каналы состояний были созданы для решения этой проблемы и использования каналов для масштабирования вычислений общего назначения.
Каналы состояний по-прежнему имеют много общего с платежными каналами. Например, пользователи взаимодействуют путем обмена криптографически подписанными сообщениями (транзакциями), которые также должны быть подписаны другими участниками канала. Если предлагаемое обновление состояния не подписано всеми участниками, оно считается недействительным.
Однако, помимо хранения балансов пользователей, канал также отслеживает текущее состояние хранилища контракта (т. е. значения переменных контракта).
Это позволяет выполнять смарт-контракт оффчейн между двумя пользователями. В этом сценарии обновления внутреннего состояния смарт-контракта требуют одобрения только от участников, создавших канал.
Хотя это решает описанную ранее проблему масштабируемости, это имеет последствия для безопасности. В сети Ethereum достоверность переходов состояния обеспечивается протоколом консенсуса сети. Это делает невозможным предложение неверного обновления состояния смарт-контракта или изменение его выполнения.
Каналы состояний не имеют таких же гарантий безопасности. В некоторой степени канал состояния является миниатюрной версией основной сети. При ограниченном наборе участников, обеспечивающих соблюдение правил, возрастает вероятность вредоносного поведения (например, предложения недействительных обновлений состояния). Каналы состояний получают свою безопасность от системы арбитража споров, основанной на .
Как работают каналы состояний
По сути, активность в канале состояний — это сеанс взаимодействий с участием пользователей и системы блокчейна. Пользователи в основном общаются друг с другом оффчейн и взаимодействуют с базовым блокчейном только для открытия, закрытия канала или урегулирования потенциальных споров между участниками.
В следующем разделе описывается основной рабочий процесс канала состояний:
Открытие канала
Открытие канала требует от участников внесения средств в смарт-контракт в основной сети. Депозит также функционирует как виртуальная вкладка, поэтому участвующие субъекты могут свободно совершать транзакции без необходимости немедленного расчета платежей. Только когда канал финализируется ончейн, стороны рассчитываются друг с другом и выводят то, что осталось от их вклада.
Этот депозит также служит залогом, гарантирующим честное поведение каждого участника. Если вкладчики будут признаны виновными в злонамеренных действиях на этапе разрешения спора, контракт сократит их депозит.
Участники канала должны подписать начальное состояние, с которым они все согласны. Это служит генезисом канала состояний, после чего пользователи могут начать проводить транзакции.
Использование канала
После инициализации состояния канала участники взаимодействуют, подписывая транзакции и отправляя их друг другу на утверждение. Участники инициируют обновления состояния с помощью этих транзакций и подписывают обновления состояния от других. Каждая транзакция содержит:
-
Поле nonce, которое служит уникальным идентификатором транзакций и предотвращает повторные атаки. Оно также определяет порядок, в котором происходили обновления состояния (что важно для разрешения споров).
-
Старое состояние канала
-
Новое состояние канала
-
Транзакция, которая вызывает переход состояния (например, Алиса отправляет 5 ETH Бобу).
Обновления состояния в канале не транслируются ончейн, как это обычно бывает, когда пользователи взаимодействуют в основной сети, что соответствует цели каналов состояний по минимизации ончейн-следа. Пока участники соглашаются с обновлениями состояния, они так же окончательны, как и транзакция Ethereum. Участникам нужно полагаться на консенсус основной сети только в случае возникновения спора.
Закрытие канала
Закрытие канала состояний требует отправки окончательного, согласованного состояния канала в ончейн-смарт-контракт. Детали, указанные в обновлении состояния, включают количество ходов каждого участника и список одобренных транзакций.
После проверки того, что обновление состояния является действительным (т. е. оно подписано всеми сторонами), смарт-контракт финализирует канал и распределяет заблокированные средства в соответствии с результатом канала. Платежи, совершенные оффчейн, применяются к состоянию Ethereum, и каждый участник получает свою оставшуюся часть заблокированных средств.
Описанный выше сценарий представляет то, что происходит в «счастливом» случае. Иногда пользователи могут не прийти к соглашению и не завершить канал («печальный» случай). Любое из следующих утверждений может быть верным для данной ситуации:
-
Участники выходят из сети и не могут предложить переходы состояния.
-
Участники отказываются совместно подписывать действительные обновления состояния.
-
Участники пытаются завершить канал, предлагая старое обновление состояния для ончейн-контракта.
-
Участники предлагают недействительные переходы состояний для подписания другими.
Всякий раз, когда между участниками канала нарушается консенсус, последним вариантом является опора на консенсус основной сети для принудительного установления окончательного, действительного состояния канала. В этом случае закрытие канала состояний требует разрешения споров ончейн.
Разрешение споров
Обычно стороны в канале заранее договариваются о закрытии канала и совместно подписывают последнее изменение состояния, которое они отправляют в смарт-контракт. После того как обновление будет одобрено ончейн, выполнение оффчейн-смарт-контракта завершается, и участники выходят из канала со своими деньгами.
Однако одна из сторон может подать ончейн-запрос на прекращение выполнения смарт-контракта и завершение канала, не дожидаясь одобрения контрагента. Если возникает любая из описанных ранее ситуаций нарушения консенсуса, любая из сторон может запустить ончейн-контракт для закрытия канала и распределения средств. Это обеспечивает недоверительность, гарантируя, что честные стороны могут вывести свои депозиты в любой момент, независимо от действий другой стороны.
Чтобы обработать выход из канала, пользователь должен отправить последнее действительное обновление состояния приложения в ончейн-контракт. Если это подтверждается (т. е. имеет подпись всех сторон), то средства перераспределяются в их пользу.
Однако при выполнении запросов на выход от одного пользователя существует задержка. Если запрос на завершение канала был одобрен единогласно, то ончейн-транзакция выхода выполняется немедленно.
Задержка вступает в игру при выходе одного пользователя из-за возможности мошеннических действий. Например, участник канала может попытаться завершить канал в Ethereum, отправив старое обновление состояния ончейн.
В качестве контрмеры каналы состояний позволяют честным пользователям оспаривать недействительные обновления состояния, отправляя последнее действительное состояние канала ончейн. Каналы состояний спроектированы таким образом, что более новые, согласованные обновления состояния имеют приоритет над более старыми обновлениями.
Как только один из участников запускает ончейн-систему разрешения споров, другая сторона должна ответить в течение определенного времени (называемого окном оспаривания). Это позволяет пользователям оспаривать транзакцию выхода, особенно если другая сторона применяет устаревшее обновление.
В любом случае, у пользователей канала всегда есть сильные гарантии окончательности: если переход состояния, которым они владеют, был подписан всеми участниками и является самым последним обновлением, то он имеет такую же окончательность, как и обычная ончейн-транзакция. Им все еще приходится оспаривать другую сторону ончейн, но единственным возможным исходом является финализация последнего действительного состояния, которым они владеют.
Как каналы состояний взаимодействуют с Ethereum?
Хотя они существуют как оффчейн-протоколы, у каналов состояний есть ончейн-компонент: смарт-контракт, развернутый в Ethereum при открытии канала. Этот контракт контролирует активы, внесенные в канал, проверяет обновления состояния и разрешает споры между участниками.
Каналы состояний не публикуют данные о транзакциях или обязательства по состоянию в основной сети, в отличие от решений для масштабирования уровня 2. Однако они более тесно связаны с основной сетью, чем, скажем, сайдчейны, что делает их несколько безопаснее.
Каналы состояний полагаются на основной протокол Ethereum в следующих аспектах:
1. Живучесть
Ончейн-контракт, развертываемый при открытии канала, отвечает за функциональность канала. Если контракт работает в Ethereum, то канал всегда доступен для использования. И наоборот, сайдчейн всегда может выйти из строя, даже если основная сеть работает, что подвергает риску средства пользователей.
2. Безопасность
В некоторой степени каналы состояний полагаются на Ethereum для обеспечения безопасности и защиты пользователей от злонамеренных участников. Как обсуждается в последующих разделах, каналы используют механизм доказательства мошенничества, который позволяет пользователям оспаривать попытки завершить канал с недействительным или устаревшим обновлением.
В этом случае честная сторона предоставляет последнее действительное состояние канала в качестве доказательства мошенничества в ончейн-контракт для проверки. Доказательства мошенничества позволяют взаимно недоверяющим сторонам проводить оффчейн-транзакции, не рискуя при этом своими средствами.
3. Финальность
Обновления состояния, коллективно подписанные пользователями канала, считаются равносильными ончейн-транзакциям. Тем не менее, вся деятельность внутри канала достигает истинной окончательности только тогда, когда канал закрывается в Ethereum.
В оптимистичном случае обе стороны могут сотрудничать, подписать окончательное обновление состояния и отправить его ончейн для закрытия канала, после чего средства распределяются в соответствии с окончательным состоянием канала. В пессимистичном случае, когда кто-то пытается обмануть, публикуя неверное обновление состояния ончейн, его транзакция не будет завершена до истечения окна оспаривания.
Виртуальные каналы состояний
Наивной реализацией канала состояний было бы развертывание нового контракта, когда два пользователя хотят выполнить приложение оффчейн. Это не только нецелесообразно, но и сводит на нет экономическую эффективность каналов состояний (затраты на ончейн-транзакции могут быстро возрасти).
Для решения этой проблемы были созданы «виртуальные каналы». В отличие от обычных каналов, которые требуют ончейн-транзакций для открытия и закрытия, виртуальный канал можно открыть, выполнить и завершить без взаимодействия с основной цепью. С помощью этого метода даже возможно разрешать споры оффчейн.
Эта система опирается на существование так называемых «реестровых каналов», которые были профинансированы ончейн. Виртуальные каналы между двумя сторонами могут быть построены на основе существующего реестрового канала, при этом владелец(ы) реестрового канала выступают в качестве посредника.
Пользователи в каждом виртуальном канале взаимодействуют через новый экземпляр контракта, при этом реестровый канал может поддерживать несколько экземпляров контрактов. Состояние реестрового канала также содержит более одного состояния хранилища контракта, что позволяет параллельно выполнять приложения оффчейн между разными пользователями.
Как и в обычных каналах, пользователи обмениваются обновлениями состояния для продвижения конечного автомата. Если не возникает спор, к посреднику нужно обращаться только при открытии или закрытии канала.
Виртуальные платежные каналы
Виртуальные платежные каналы работают по той же идее, что и виртуальные каналы состояний: участники, подключенные к одной сети, могут передавать сообщения без необходимости открывать новый канал ончейн. В виртуальных платежных каналах переводы средств маршрутизируются через одного или нескольких посредников с гарантиями того, что только предполагаемый получатель может получить переведенные средства.
Применения каналов состояний
Платежи
Ранние каналы блокчейна были простыми протоколами, которые позволяли двум участникам проводить быстрые, недорогие переводы оффчейн, не платя высоких комиссий за транзакции в основной сети. Сегодня платежные каналы по-прежнему полезны для приложений, предназначенных для обмена и внесения эфира и токенов.
Платежи на основе каналов имеют следующие преимущества:
-
Пропускная способность: количество оффчейн-транзакций в канале не связано с пропускной способностью Ethereum, на которую влияют различные факторы, особенно размер и время блока. Выполняя транзакции оффчейн, каналы блокчейна могут достигать более высокой пропускной способности.
-
Конфиденциальность: поскольку каналы существуют оффчейн, детали взаимодействия между участниками не записываются в публичный блокчейн Ethereum. Пользователям канала нужно взаимодействовать ончейн только при финансировании и закрытии каналов или при разрешении споров. Таким образом, каналы полезны для людей, которые желают большей конфиденциальности транзакций.
-
Задержка: оффчейн-транзакции, проводимые между участниками канала, могут быть урегулированы мгновенно, если обе стороны сотрудничают, что сокращает задержки. В отличие от этого, отправка транзакции в основной сети требует ожидания, пока узлы обработают транзакцию, создадут новый блок с транзакцией и достигнут консенсуса. Пользователям также может потребоваться дождаться большего количества подтверждений блока, прежде чем считать транзакцию завершенной.
-
Стоимость: каналы состояний особенно полезны в ситуациях, когда набор участников будет обмениваться множеством обновлений состояния в течение длительного периода. Единственные понесенные затраты — это открытие и закрытие смарт-контракта канала состояний; каждое изменение состояния между открытием и закрытием канала будет дешевле предыдущего, поскольку стоимость расчета распределяется соответствующим образом.
Внедрение каналов состояний в решениях уровня 2, таких как ролл-апы, может сделать их еще более привлекательными для платежей. Хотя каналы предлагают дешевые платежи, затраты на настройку ончейн-контракта в основной сети на этапе открытия могут быть высокими, особенно когда плата за газ резко возрастает. Ролл-апы на основе Ethereum предлагают более низкие комиссии за транзакции (opens in a new tab) и могут снизить накладные расходы для участников канала за счет снижения платы за установку.
Микротранзакции
Микротранзакции — это платежи на небольшую сумму (например, меньше доли доллара), которые предприятия не могут обрабатывать без убытков. Эти организации должны платить поставщикам платежных услуг, что они не могут делать, если маржа по платежам клиентов слишком низка для получения прибыли.
Платежные каналы решают эту проблему, снижая накладные расходы, связанные с микротранзакциями. Например, поставщик интернет-услуг (ISP) может открыть платежный канал с клиентом, что позволит ему осуществлять небольшие платежи каждый раз, когда он пользуется услугой.
Помимо затрат на открытие и закрытие канала, участники не несут дополнительных расходов на микротранзакции (нет платы за газ). Это взаимовыгодная ситуация, поскольку клиенты получают больше гибкости в том, сколько они платят за услуги, а предприятия не теряют прибыльные микротранзакции.
Децентрализованные приложения
Как и платежные каналы, каналы состояний могут производить условные платежи в соответствии с конечными состояниями конечного автомата. Каналы состояний также могут поддерживать произвольную логику перехода состояний, что делает их полезными для выполнения общих приложений оффчейн.
Каналы состояний часто ограничиваются простыми пошаговыми приложениями, так как это упрощает управление средствами, внесенными в ончейн-контракт. Кроме того, при ограниченном количестве сторон, обновляющих состояние оффчейн-приложения с определенными интервалами, наказание нечестного поведения становится относительно простым.
Эффективность приложения канала состояний также зависит от его конструкции. Например, разработчик может развернуть контракт канала приложения ончейн один раз и позволить другим игрокам повторно использовать приложение, не обращаясь к ончейну. В этом случае исходный канал приложения служит в качестве реестрового канала, поддерживающего несколько виртуальных каналов, каждый из которых запускает новый экземпляр смарт-контракта приложения оффчейн.
Потенциальным вариантом использования приложений с каналами состояний являются простые игры для двух игроков, в которых средства распределяются в зависимости от исхода игры. Преимущество здесь в том, что игрокам не нужно доверять друг другу (недоверительность), а ончейн-контракт, а не игроки, контролирует распределение средств и урегулирование споров (децентрализация).
Другие возможные варианты использования приложений с каналами состояний включают владение именами ENS, реестры NFT и многое другое.
Атомарные переводы
Ранние платежные каналы были ограничены переводами между двумя сторонами, что ограничивало их удобство использования. Однако появление виртуальных каналов позволило людям направлять переводы через посредников (т. е. несколько p2p-каналов) без необходимости открывать новый канал ончейн.
Часто описываемые как "многопроходные переводы", маршрутизируемые платежи являются атомарными (т. е. либо все части транзакции выполняются успешно, либо она полностью отменяется). Атомарные переводы используют Hashed Timelock Contracts (HTLC) (opens in a new tab), чтобы гарантировать, что платеж будет выполнен только при соблюдении определенных условий, тем самым снижая риск контрагента.
Недостатки использования каналов состояний
Предположения о живучести
Для обеспечения эффективности каналы состояний устанавливают временные ограничения на возможность участников канала реагировать на споры. Это правило предполагает, что участники всегда будут в сети, чтобы отслеживать активность канала и при необходимости оспаривать вызовы.
В действительности пользователи могут отключаться от сети по независящим от них причинам (например, плохое интернет-соединение, механическая поломка и т. д.). Если честный пользователь отключается от сети, злоумышленник может воспользоваться ситуацией, представив старые промежуточные состояния в арбитражный контракт и украв вложенные средства.
Некоторые каналы используют "сторожевые башни" — сущности, ответственные за отслеживание ончейн-событий споров от имени других и принятие необходимых мер, таких как оповещение заинтересованных сторон. Однако это может увеличить расходы на использование канала состояний.
Недоступность данных
Как объяснялось ранее, оспаривание недействительного спора требует представления последнего действительного состояния канала состояний. Это еще одно правило, основанное на предположении, что пользователи имеют доступ к последнему состоянию канала.
Хотя ожидание того, что пользователи канала будут хранить копии состояния оффчейн-приложения, является разумным, эти данные могут быть утеряны из-за ошибки или механического сбоя. Если у пользователя нет резервной копии данных, он может только надеяться, что другая сторона не завершит недействительный запрос на выход, используя имеющиеся у нее старые переходы состояний.
Пользователям Ethereum не приходится сталкиваться с этой проблемой, поскольку сеть обеспечивает соблюдение правил доступности данных. Данные транзакций хранятся и распространяются всеми узлами и доступны для загрузки пользователями по мере необходимости.
Проблемы с ликвидностью
Для создания канала блокчейна участникам необходимо заблокировать средства в ончейн-смарт-контракте на время существования канала. Это снижает ликвидность пользователей канала, а также ограничивает каналы теми, кто может позволить себе держать средства заблокированными в основной сети.
Однако реестровые каналы, управляемые оффчейн-поставщиком услуг (OSP), могут уменьшить проблемы с ликвидностью для пользователей. Два участника, подключенные к реестровому каналу, могут создать виртуальный канал, который они могут открыть и завершить полностью оффчейн в любое время.
Оффчейн-поставщики услуг также могут открывать каналы с несколькими участниками, что делает их полезными для маршрутизации платежей. Конечно, пользователи должны платить OSP за их услуги, что для некоторых может быть нежелательно.
Атаки вредительства (Griefing attacks)
Атаки вредительства (Griefing attacks) являются общей чертой систем, основанных на доказательствах мошенничества. Атака вредительства не приносит прямой выгоды атакующему, но причиняет вред (т. е. ущерб) жертве, отсюда и название.
Доказательство мошенничества подвержено атакам вредительства, потому что честная сторона должна отвечать на каждый спор, даже недействительный, иначе она рискует потерять свои средства. Злоумышленник может решить многократно публиковать устаревшие переходы состояний ончейн, заставляя честную сторону отвечать действительным состоянием. Стоимость этих ончейн-транзакций может быстро возрасти, в результате чего честные стороны понесут убытки.
Предопределенные наборы участников
По своей конструкции количество участников, составляющих канал состояний, остается неизменным в течение всего срока его существования. Это связано с тем, что обновление набора участников усложнит работу канала, особенно при его финансировании или урегулировании споров. Добавление или удаление участников также потребует дополнительной ончейн-активности, что увеличивает накладные расходы для пользователей.
Хотя это упрощает рассуждения о каналах состояний, это ограничивает полезность их конструкций для разработчиков приложений. Это отчасти объясняет, почему от каналов состояний отказались в пользу других решений для масштабирования, таких как ролл-апы.
Параллельная обработка транзакций
Участники канала состояний отправляют обновления состояния по очереди, поэтому они лучше всего подходят для "пошаговых приложений" (например, шахматной партии на двоих). Это устраняет необходимость одновременной обработки обновлений состояния и сокращает работу, которую должен выполнять ончейн-контракт для наказания тех, кто публикует устаревшие обновления. Однако побочным эффектом этой конструкции является то, что транзакции зависят друг от друга, что увеличивает задержку и ухудшает общее впечатление пользователя.
Некоторые каналы состояний решают эту проблему, используя "полнодуплексную" конструкцию, которая разделяет оффчейн-состояние на два однонаправленных "симплексных" состояния, что позволяет одновременно обновлять состояния. Такие конструкции улучшают пропускную способность оффчейн и уменьшают задержки транзакций.
Использование каналов состояний
Несколько проектов предоставляют реализации каналов состояния, которые вы можете интегрировать в свои децентрализованные приложения:
- Connext (opens in a new tab)
- Kchannels (opens in a new tab)
- Perun (opens in a new tab)
- Raiden (opens in a new tab)
- Statechannels.org (opens in a new tab)
Дополнительные материалы
Каналы состояния
- Разбираемся в решениях масштабирования уровня 2 в Ethereum: каналы состояний, Plasma и Truebit (opens in a new tab)_ — Джош Старк, 12 февраля 2018 г._
- Каналы состояний — объяснение (opens in a new tab)_ — 6 ноября 2015 г., Джефф Коулман_
- Основы каналов состояний (opens in a new tab) District0x
- Каналы состояний блокчейна: современное состояние (opens in a new tab)
Знаете ресурс сообщества, который вам пригодился? Измените эту страницу и добавьте его!