Payment Channel, или платёжный канал, позволяет менять распределение совместно заблокированных биткоинов с помощью договорённостей с цифровыми подписями. Подпись подтверждает согласие с новым распределением; каждое изменение не обязательно вносить в блокчейн — публичную запись транзакций Биткоина. Участники сохраняют возможность закрыть канал и провести расчёт в блокчейне. Здесь описан обычный двусторонний канал Lightning с отзывом: прежнюю договорённость можно отозвать, а за её последующее использование применить штраф. Другие конструкции могут иметь иные правила.
Представьте две стороны, которые пересматривают свои права на совместно заблокированную сумму. Каждому платежу не нужна отдельная транзакция Bitcoin в блоке. Вместо этого стороны обмениваются подписями для нового состояния. Это не просто таблица, которой приходится доверять: у них есть транзакции, позволяющие обеспечить расчёт по согласованным условиям. [1] [2]
Транзакция финансирования помещает биткоины в канал. Её выход — сумма с правилами о том, кто может её потратить; подтверждение означает включение транзакции в блок. В обычном канале Lightning этот выход требует подписей обеих сторон: 2-of-2. Ещё до публикации транзакции финансирования участники должны иметь действительный способ одностороннего закрытия. Обычно они ждут подтверждений финансирования. При определённых условиях zero-conf позволяет пользоваться каналом без ожидания подтверждения. Получатель тогда больше полагается на финансирующую сторону: транзакция ещё не подтверждена и может быть заменена конфликтующей. [2] [3]
Commitment-транзакцию подписывают заранее, чтобы провести расчёт по текущему согласованному распределению. Узел здесь — программа, управляющая каналом и его обновлениями. У каждой стороны своя версия commitment-транзакции. При обновлении узлы согласованно обмениваются подписями и секретами отзыва через commitment_signed и revoke_and_ack. Новая договорённость не делает старую подписанную транзакцию недействительной по консенсусу Bitcoin. Поэтому защита от публикации отозванного состояния должна быть заложена в условиях расходования выходов. [2] [3]
В обычном канале с отзывом сторона, публикующая свой commitment, ждёт to_self_delay, прежде чем потратить собственные средства. Задержка отсчитывается в блоках от подтверждения commitment-транзакции. Если состояние отозвано, другая сторона может применить ключ отзыва для защитного расходования соответствующих выходов. Нужно вовремя отреагировать и добиться подтверждения транзакции. Watchtower — сервис, который следит за цепочкой и с помощью заранее подготовленных данных может отреагировать на публикацию отозванного состояния. Но этот сервис не гарантирует успеха и не заменяет резервную копию. [3] [4]
Sat — сокращение от satoshi, наименьшей единицы биткоина в блокчейне. Ёмкость — общая сумма в канале, а не баланс каждого участника. Допустим, канал содержит 100000 sat: Алисе принадлежат 70000 sat, а Бобу — 30000 sat. Если Алиса платит Бобу 10000 sat, новый баланс составляет 60000 sat и 40000 sat. Для простоты не учитываем комиссии и резервы. Ёмкость не изменилась, но Алиса может меньше отправить и больше принять. Реальные ограничения также зависят от резервов и незавершённых платежей. [6]
Lightning ищет маршрут через несколько соединённых каналов. HTLC — условный платёж: чтобы получить средства, нужно раскрыть секретное значение, preimage, хеш которого — цифровой отпечаток — совпадает с известным заранее. Временные условия дают путь расчёта и тогда, когда платёж не завершается. Посредникам нужна ликвидность — средства, которые можно отправить в нужном направлении; за проведение платежа они могут брать комиссию. Прямой канал к каждому продавцу не нужен, но сама связь не гарантирует пригодного маршрута для любой суммы. [2] [4]
При закрытии по взаимному согласию, cooperative close, участники согласуют транзакцию закрытия, распределение средств и комиссию. Оба подписывают её и публикуют в блокчейне. Обычно это проще одностороннего расчёта, но не обязательно бесплатно или мгновенно. Транзакции всё равно нужны подтверждение и комиссия, соответствующая условиям сети. [2] [4]
Одностороннее закрытие, force close, позволяет опубликовать собственный актуальный commitment без нового согласия партнёра. Средства не обязательно можно потратить сразу: действуют задержки и возможное урегулирование HTLC. Могут потребоваться дополнительные транзакции и комиссии. Аварийный выход есть, но его сроки и стоимость зависят от состояния канала и условий блокчейна. [3] [4]
Seed Phrase — это резервные слова, из которых кошелёк восстанавливает ключи. Сами по себе они не восстановят последнее состояние открытого канала, поэтому следуйте процедуре своего кошелька. Например, LND, программа для работы узла Lightning, использует эти слова вместе со Static Channel Backup (SCB). Эта статическая копия хранит данные для связи с партнёрами и запроса на закрытие каналов; она не восстанавливает каналы для дальнейших платежей. Восстановление таким способом зависит и от того, ответят ли партнёры. Файл channel.db, напротив, содержит базу данных каналов, и его старая копия может хранить опасно устаревшее состояние. Никогда не вводите свои настоящие резервные слова на чужом сайте для «ремонта» канала. [5]
Выясните, кто хранит ключи, кто следит за каналами и как восстановить доступ после потери устройства. Кастодиальный означает, что ключи хранит поставщик услуги. Баланс Lightning у кастодиального сервиса не обязательно означает собственный канал. При самостоятельном хранении вы отвечаете за копии, доступность и реакцию на проблемы. Каналы сокращают записи в блокчейне, но не устраняют все эксплуатационные обязанности и расходы на расчёт. [4] [5]
Для полной картины прочитайте эту статью вместе с Lightning Network, HTLC, Ликвидность Lightning, Lightning Watchtower. На эту статью также ссылаются Подтверждение, Двойная трата, Timelock, HTLC.