Что такое лайтинг нетворк
Как работает Lightning Network и в чем преимущества протокола
Lightning Network — это сеть вне цепи, которая дает биткоину новые преимущества. Сеть Lightning запущена и набирает обороты с начала 2018 года, а разработка велась с 2016 компанией Blockstream.
Читайте в статье
Транзакция вне цепи — любая транзакция биткоина, которая не использует
основную сеть и, таким образом, не платит комиссию за транзакции майнерам. Покупка и продажа на биржах, например, происходит вне блокчейна. Однако вывод с биржи на биткоин-адрес происходит уже в блокчейне.
Все транзакции, которые происходят в сети Lightning, будут оффчейн-транзакциями, транзакциями вне цепи.
Как работает Lightning Network
У молниеносных транзакций есть три составляющие:
Вход в сеть Lightning осуществляется через открытие платежного канала. Для этого требуется транзакция в блокчейне (тот, в который всегда записываются транзакции). Канал оплаты позволяет отправлять биткоины между двумя сторонами (это не новая разработка). Говоря еще проще, представьте, что вы пользуетесь Яндекс.Деньгами или Paypal. Вы можете отправить деньги на другой аккаунт внутри системы быстро и без комиссий. Ограничение только в том, сколько денег у вас на счету. Чтобы войти или выйти в платежный сервис, тоже нужно совершить банковскую транзакцию (со своей карты или банкомата вносите деньги на аккаунт). Аналогично, для Lightning — чтобы открыть или закрыть платежный канал, нужно выполнить транзакцию биткоинов.
Хэш-контракты временной блокировки (HTLC) — это смарт-контракты, которые гарантируют, что получателю переведут средства при выполнении некоторых криптографических условий. Это делается для безопасности.
Сеть Lightning использует серию HTLC с одним и тем же секретным хэшем. Этот процесс можно повторять столько раз, сколько необходимо.
Ниже шаг за шагом отражается, как HTLC работает с четырьмя сторонами: A (покупатель), B, C (пиры между сторонами) и D (торговец):
Простыми словами, пиры передают деньги последовательно, от А к D. Посредники получают небольшое вознаграждение.
Если все участники связаны, эти транзакции происходят за пределами блокчейна биткоина. В идеале, программное обеспечение пользователей будет отслеживать каждый шаг автоматически. Все получают деньги автоматически. Сеть Lightning является почти атомной по своей природе, а это означает, что либо каждый получает деньги, либо никто не получает деньги.
В Lightning Network используется токен?
В отличие от RSK, Lightning Network использует реальные биткоины и смарт-контракты, чтобы участники могли собирать множество транзакций в одну, окончательную, которая и отправится в блокчейн. Lightning — это протокол «второго уровня», который работает поверх сети Bitcoin.
Пример: A и B часто обедают вместе. A и B по очереди платят за обед долларами. Тот, кто не платит за обед, возвращает долг в биткоинах. За несколько недель они осуществили много переводов друг другу. Lightning позволяет не платить транзакционные сборы каждую неделю. Вместо этого A и B оплачивают сбор только за свой первый и последний обед — открывают и закрывают канал, а транзакции между копятся, чтобы затем сразу общей транзакцией попасть в сеть.
Обычная биткоин-транзакция транслируется во все фулноды в мире. Майнеры берут эти транзакции и соединяют их в блоки. Каждая транзакция записывается в блокчейн. А транзакции Lightning не транслируются на каждую ноду. Вместо этого ноды лайтининг сохраняют транзакции секретными (не записывают на блокчейн), за исключением трех случаев:
Это анонимно?
Сеть Lightning будет, вероятно, иметь первоклассную конфиденциальность.
Это более анонимно, чем стандартные биткоин-транзакции.
Преимущества Lightning
Сеть будет платить пользователям за обеспечение ликвидности. Это будет как банковский счет, который выплачивает проценты по депозиту.
Вы можете зарабатывать деньги, запустив Lightning Node! Некоторые люди предсказывают, что прибыль будет высокой, пока Lightning Network находится в зачаточном состоянии. Обратите внимание, что прибыль операторов равна комиссионным вознаграждениям за использование сети Lightning.
Чтобы использовать сеть, вы должны забирать серию «микрозаймов» от каждого «хопа» (промежуточного пира, через которого проходят платежи). Чем больше связей и ликвидности в сети Lightning, тем меньше требуется хопов.
Стоимость транзакции Lightning — это функция нескольких переменных:
Чтобы использовать Lightning Network, нужно загрузите кошелек Lightning. В январе 2018 года большинство действий проводится на Testnet (копии основной сети биткоина, которая используется для тестирования новых разработок и кода).
Через какое-то время все больше и больше кошельков будут интегрировать Lightning. Даже кошельки, которые вы используете сейчас, должны в конечном счете реализовать технологию.
Пока есть проект «Zap» — это название кошелька Lightning, который почти готов для использования в сети. Его код на Github.
Такая транзакция всегда будет значительно дешевле, чем обычная биткоин-транзакция. Некоторые Lightning-транзакции имеют даже отрицательные сборы, платят за использование новой технологии!
Вознаграждение не выплачивается майнерам. Вместо этого плата уходит другим пользователям в сети Lightning, которые временно дают свои средства в заем, как микрокредит на несколько дней. Гонорары устанавливаются пользователями сети. Программное обеспечение будет автоматически искать самый дешевый маршрут через сеть Lightning. Если маршрута не существует, программное обеспечение создаст маршрут, открыв новый платежный канал (который требует платы за транзакцию в блокчейн биткоина).
Чем больше биткоинов в Lightning Network, тем ниже будет плата (поскольку реже придется открывать платежный канал). Фактически, самыми большими расходами сети Lightning являются транзакционные сборы за вход и выход из сети.
Биржи, скорее всего, будут централизованными операторами Lightning Node. Также ПО позволит выбирать настраиваемые маршруты через сеть. Это позволит пользователям выбирать больше приватных маршрутов и частные ноды, которые могут быть дороже.
Наименьшая часть биткоина — сатоши (0,00000001 BTC). Сеть Lightning позволяет осуществлять платежи даже меньше, чем сатоши. Микроплатежи в перспективе позволят платить за видео в секунду, новость на сайте, работу в минуту и т. д.
Lightning Network позволит людям совершать транзакции за один раз.
Существует компромисс между децентрализацией и пропускной способностью (количеством транзакций, которые обрабатываются на блокчейне).
Как правило, блокчейну трудно масштабироваться, то есть увеличивать обработку данных о пользователях и транзакциях. Дебаты об этом идут уже много лет, и многие согласны, что в настоящее время Lightning — одно из оптимальных решений.
Надстройки сети, такие как Lightning Network, позволяют пользоваться безопасностью децентрализованного блокчейна без необходимости увеличивать размер блока.
Как и в любой экспериментальной технологии, только время покажет все
уязвимости. В настоящий момент сеть теоретически безопасна в использовании.
Белая бумага Lightning Network содержит прочную теоретическую основу. Иногда, однако, в коде находятся ошибки.
Но все равно, храните небольшие суммы в платежном канале. Если вы запускаете ноду, лучше разместить несколько разных каналов с небольшим количеством биткоинов. Дело в том, что за ошибки ПО и попытку опубликовать старую транзакцию, подозрение в мошенничестве сеть забирает всю сумму в качестве штрафа.
Кошельки Lightning для биткоина
Lightning Wallet
Это приложение имеет автономный кошелек SPV Bitcoin с полностью функциональным встроенным узлом Lightning. Он позволяет отправлять и получать регулярные транзакции в сети, а также оффчейн-платежи.
Lightning Wallet — полностью автономное приложение, то есть ключи не передаются на сервер, а хранятся на устройстве.
Это первый кошелек Lightning, который предлагает защиту от потери данных вне сети: в случае чрезвычайных ситуаций, таких как потеря телефона, вам понадобится только мнемоническая фраза, чтобы восстановить как биткоин-баланс, так и баланс на цепи Lightning.
Обязательно сохраните мнемоническую фразу, когда создаете новый кошелек.
После создания кошелька на блокчейне можно открывать каналы оплаты вне сети и использовать их для отправки платежей через сеть Lightning.
При принудительном закрытии платежного канала (без разрешения другой стороны) баланс вернется на кошелек через 144 блока (примерно сутки).
Также через кошелек можно получать комиссии за обработку транзакций.
Официальный сайт: http://lightning-wallet.com/
Кошелек Zap
Zap — бесплатный кошелек Lightning Network, с понятным и удобным интерфейсом на Electron + React + Redux. Разрабатывался при консультациях с Lightning Labs. Автор кошелька распространяет его с открытым исходным кодом.
Сегодня доступен для macOS, Windows и Linux. В разработке приложение для мобильных.
Через Zap можно подключаться к пирам, открывать каналы, проводить платежи. Инструкция от создателя на видео:
Официальный сайт: https://zap.jackmallers.com/
Eclair Wallet
Eclair Wallet создан специально для поддержки Lightning. Он может использоваться как обычный кошелек для хранения биткоинов и подключаться к сети Lightning для дешевых и мгновенных платежей.
Это программное обеспечение основано на eclair и соответствует стандарту Lightning Network.
Доступен на Google Play только для Android-устройств. Доступны только исходящие каналы: вы можете оплачивать LN, но не можете получать или пересылать платежи. Для полного функционала LN нужна полная нода — Eclair Node.
Официальный сайт: https://acinq.co/
HTLC.me
Это сайт, фактически не является кошельком, хотя иногда продвигается под таким названием.
При использовании этого сайта вы обращаетесь на горячий кошелек создателей, то есть они имеют доступ ко всем средствам. Правда, при переходе используются BTC из тестнета (недействительные на бирже или при покупках).
Через интерфейс приложения можно создать свой «узел» и «магазин».
Проблема масштабируемости блокчейна, на котором базируется биткоин, с ростом популярности первой криптовалюты становится все острее. Пока она решается посредством платформ второго уровня, и Lightning Network один из ведущих протоколов-надстроек над платформой первого уровня. Использование Lightning Network позволяет проводить транзакции фактически мгновенно, как например, сообщения в личном чате между двумя пользователями. Кроме того, снижается комиссия и появляется возможность переводить средства в небольших объемах.
Предположим, что вы решили расплачиваться за продукты в ближайшем магазине посредством криптовалют (в Сальвадоре – это уже возможно). Однако – это вряд ли принесет выгоду, т.к. сумма платежа будет небольшой, а комиссия наверняка превысит стоимость приобретаемого товара, да и ожидание подтверждения платежа может затянуться более чем на 10 минут.
Используя протокол Lightning Network клиент получает возможность создать двусторонний канал с магазином и приобретать товары практически мгновенно, при небольшой комиссии. Для чего покупатель и продавец перечисляют ранее оговоренную сумму в криптовалюте на мульти-адрес.
На платформе первого уровня фиксируется открытие канала. Так продавцу гарантируется получение монет если канал будет закрыт.
После развертывания канала – криптопуть в магазин открыт. Предположим, что общая сумма покупки составила 0,0003 BTC. Для произведения оплаты, необходимо списать указанную сумму с баланса покупателя и начислить ее на баланс продавца. После проведения транзакции, новый отчет заверяется сторонами.
Пока криптовалюта остается на балансе магазина, покупатель может приобретать товар. При этом можно совершать бесконечное число сделок в канале, т.к. они не требуют подтверждения, потому что действия происходят вне основного блокчейна.
Как быть человеку в том же Сальвадоре, если он все хочет покупать посредством ВТС? Открывать двусторонние каналы с каждым потенциальным продавцом? Нет, для этих целей можно использовать уже созданные каналы, генерируя своего рода цепочку. Данную методику можно сравнить с теорией о шести рукопожатиях, в которых друга от друга находятся все жители планеты. Многоканальные транзакции базируются на тех же принципах.
В Lightning Network (LN) транзакция ищет кратчайший путь от отправителя к получателю через ноды (посредников). Нагрузка на основную платформу снижается, но вместе с тем снижается и уровень безопасности операций.
Посредником может стать любой пользователь, и мошенники конечно тоже. Держатели нод сами определяют размер комиссии, которая как правило существенно ниже комиссий в платформе первого уровня. Во избежание неприятностей, при выборе нод, следует справиться о количестве средств на его балансе. Если их немного, то лучше поискать другого посредника.
Пользователь может закрыть канал в любое время. Процедура простая – отправляется отчет, заверенный обеими сторонами, который проверяется и вносится в реестр основного блокчейна. Т.е. даже если в канале проведены миллионы платежей, на главной платформе будет зафиксировано лишь две записи – об открытии и закрытии канала.
Lightning Network (в дословном переводе — сеть-молния) была презентована на конференции в Монреале осенью 2015 года. С тех пор количество пользователей увеличилось в сотни раз и в этом немалая заслуга платформ второго уровня ведущая из которых LN.
Секрет растущей популярности LN прост:
Скорость проведения операций в каналах значительно увеличивается;
LN – децентрализованная платформа. Которая контролируется самими пользователями. Код протокола находится в открытом доступе. Так что переводы на крупные суммы лучше осуществлять через основную платформу. Еще из недостатков можно выделить невозможность проведения офлайн платежей, отправитель и получатель должны быть в онлайне.
Согласно отчету компании, State of Lightning только за август текущего года количество пользователей LN выросло на 20%. А по прогнозам к 2030 году число клиентов платформы превысит 700 млн. человек. А общее количество транзакций Lightning к концу текущего десятилетия превысит 364 трлн.
Присоединяйтесь к нашим информационным ресурсам:
Lightning network in depth, part 1: payment channels
Lightning network это децентрализованная оф-чейн технология, позволяющая проводить десятки тысяч транзакий в секунду, как это позволяет делать, к примеру, Visa. На данный момент Биткоин — самая популярная в мире криптовалюта, не приспособлена для отправки более чем
7 транзакций в секунду, а высокие комисси и долгое время подтверждения сводят на нет возможность отправки микротранзакций. Lightning network решает обе эти проблемы.
Table of contents
Introduction
Lightning network представляет из себя сеть платежных каналов, являющихся обычными мультисиг кошельками. Чтобы открыть канал, стороны создают мультисиг кошелек и отправляют на него средства. Полученная сумма становится балансом канала и все дальнейшие транзакции между участниками канала проводятся вне блокчейна. Канал в любое время может быть закрыт любой из сторон, в таком случае последняя офф-чейн транзакция, определяющая баланс канала, отправится в сеть, делая все предыдущие транзакции невалидными, так как они все тратят один и тот же ‘выход’. Таким образом нам нужна всего лишь одна транзакция для открытия канала и еще одна для его закрытия, а все промежуточные транзакции проводятся моментально, без записи в блокчейн.
Сеть таких каналов позволит отправлять вам транзакции другому участнику сети, даже если вы не связаны с ним напрямую. Достаточно чтобы от вас к нему возможно было проложить ‘путь’, состоящий из цепочки каналов, причем вы не обязаны доверять никому из участников этой цепи, благодаря особым ‘смарт-контрактам’ (HTLC hash-time-lock-contract), гарантирующим безопасную доставку ваших средств.
Чтобы разобраться в том, как работает лайтнинг нужно сначала понять как работают платежные каналы, а также HTLC контракты, на работу которых он пологается. Это довольно объемные темы, поэтому мы разобьем эту статью на 2 части и начнем с объяснения механизма работы платежных каналов.
Payment channels
Как мы уже говорили выше, платежный канал между двумя участниками сети представляет из себя обычный мультисиг кошелек. Первую транзакцию, закрепляющую баланс канала (нашего мультисиг кошелька), мы будем называть ‘открывающей’ (funding transaction или же anchor transaction). Эта транзакция должна быть отправлена в сеть и замайнена, чтобы канал был создан.
Далее стороны обмениваются подписанными обоюдно коммит-транзакциями (commitment transaction), которые изменяют изначальный баланс канала. Эти транзакции валидны и могут быть отправлены в сеть, но вместо этого держутся вне сети, ожидая момента закрытия канала. Таким образом, состояние баланса канала может меняться тысячи раз в секунду, ограниченное только тем, как быстро стороны могут создавать, подписывать и передавать друг другу коммит-транзакции.
Каждый раз, обмениваясь новой коммит-транзакцией, стороны инвалидируют предыдущее состояние канала и таким образом только самая новая коммит-транзакция может быть ‘выполнена’. Это сделано для того, чтобы стороны не попытались сжульничать, отправив в блокчейн одно из предыдущих состояний канала, которое им более выгодно. Далее я рассмотрю несколько механизмов, которые позволяют это реализовать.
Наконец, канал может быть закрыт как по обоюдному согласию — с помощью отправки в блокчейн ‘закрывающей’ транзакции (settlement transaction), так и по инициативе только одной и сторон — с помощью отправки в блокчейн последней коммит-транзакции. Таким образом мы предотвращаем случай, когда одна из сторон уходит в оффлайн и средства второй оказываются ‘заперты’ на канале.
На протяжении всего существования канала только две транзакции отправляются в сеть и записываются в блокчейн (открывающая и закрывающая). Между ними стороны могут обмениваться любым количеством коммит-транзакций, которые никогда не попадут в блокчейн.
Simple payment channel example
Перед тем как перейти к более сложным реализациям, рассмотрим на примере работу простого одностороннего канала. В этом примере сделаем допущение, что обе стороны честные, чтобы не усложнять объяснений. Далее рассмотрим механизмы, позволяющие предотвратить любую попытку сжульничать.
В этом примере у нас есть 2 участника — Эмма и Фабиан. Фабиан предоставляет услуги видео стримингового сервиса, оплачиваемого через канал с помощью микроплатежей — одна секунда видео стоит 0.00001 BTC, что составляет 0.036 BTC за час. Эмма — обычный пользователь, который хочет посмотреть какое-нибудь видео.
Эмма и Фабиан используют специальную программу, позволяющую работать и с платежным каналом и с видео. Эмма запускает эту программу в браузере, Фабиан на своем сервере. Программа имеет в себе функционал обычного биткоин-кошелька, умеет создавать и подписывать транзакции. Весь механизм работы платежного канала скрыт от пользователя, все что они видят — это как видео оплачивается каждую секунду.
Теперь рассмотрим как это будет работать. Для создания канала Эмма и Фабиан должны создать мультисиг адресс с условием два из двух. Со стороны пользователя, программа создает P2SH адрес (мультисиг кошелек) и просит пополнить его на сумму за 1 час просмотра. Эмма заносит на него 0.036 BTC и эта транзакция становится ‘открывающей’.
Как только ‘открывающая’ транзакция подтверждена и канал открыт, начинается стриминг видео. На 1ой секунде пользовательская сторона создает и подписывает коммит-транзакцию, изменяющую баланс канала: 0.00001 BTC Фабиану и 0.03599 Эмме. Транзакция использует выход открывающей транзакции в 0.36 и содержит 2 новых, описанных только что. Программа на стороне сервиса получает эту транзакцию и также ее подписывает, после чего отправляет назад вместе с 1ой секундой видео. Теперь у сторон есть подписанная обеими сторонами коммит-транзакция, представляющая последнее состояние канала, которую они могут при необходимости отправить в сеть.
На 2ой секунде создается очередная коммит-транзакция, использующая тот же выход, что и предыдущая, а новые выходы теперь 0.00002 Фабиану и 0.03598 Эмме. Эта транзакция представляет собой платеж за 2 скаченные секунды видео. Далее она отправляется на вторую сторону и тд.
Допустим, Эмма посмотрела 10 минут видео и ей надоело, она остановила просмотр. За это время было отправлено и подписано 600 коммит-транзакций (600 секунд просмотра). Последняя из них имеет 2 выхода: 0.03 Эмме и 0.006 Фабиану. Эмма закрывает канал, отправляя эту коммит-транзакцию в сеть, делая ее ‘закрывающей’. Таким образом в блокчейн попали только 2 транзакции.
Trustless channels
Конечно, в этом примере все работает, но только если обе стороны честны. Несложно придумать сценарий, где одна из сторон может сжульничать, получив преимущество или же канал не будет работать корректно:
Using timelocks
Одним из решений этих проблем является использование таймеров в коммит-транзакциях (transaction-level timelocks (nLocktime)). Чтобы иметь гарантию, что ее средства не застрянут на канале, вместе с открывающей транзакцией Эмма создает транзакцию возврата средств (refund transaction), использующую выходы ее открывающей транзакции. Сначала она отправляет Фабиану эту транзакцию и как только он подписывает ее и возвращает, Эмма отправляет в сеть открывающую транзакцию, создавая канал.
Транзакция возврата средств становится 1ой коммит-транзакцией и её таймер устанавливает верхнюю границу жизни канала. Допустим, Эмма поставит таймер на 30 дней (4320 блоков). Все следующие коммит-транзакции будут иметь более короткий таймер, чтобы их можно было отправить в сеть раньше.
Теперь Эмма может спокойно открывать канал, зная, что если Фабиан исчезнет, через 30 дней она сможет вернуть свои средства (если бы это был двунаправленный канал и Фабиан вводил какие-то средства, со своей стороны он мог бы точно также создать транзакцию возврата).
Каждая новая коммит-транзакция будет иметь какой-то таймер, а именно более короткий, чем у её предшественника, чтобы таким образом самая последняя коммит-транзакция могла быть отправлена в сеть первой и инвалидировать предыдущие, защищая обе стороны от недобросовестного использования более ранних коммит-транзакций. Если все пройдет хорошо, то Эмма и Фабиан могут просто отправить обычную закрывающую транзакцию, так что коммит-транзакции в таком случае используются только при уходе в офлайн одной из сторон.
Например, если 1ая коммит-транзакция имеет таймер на 4320 блоков, тогда вторая может иметь таймер на 4319 блоков и тд. Транзакция #600 в таком случае может быть отправлена в сеть на 600 блоков раньше, чем транзакция #1 станет валидна.
Думаю, вы уже заметили, что этот метод хоть и помогает предотвратить использование более ранних коммит-транзакций с целью обмана, но тем не менее имеет 2 серьезных недостатка.
Таймер 1ой коммит-транзакции ограничивает время жизни канала.
Если поставить таймер на большое время (допустим год), то можно будет использовать канал очень долго, не открывая его заново, однако в случае исчезновения одной из сторон, второй придется ждать все оставшееся время, чтобы вывести средства с канала, отправив в сеть последнюю коммит-транзакцию.
Таймер 1ой коммит-транзакции ограничивает количество транзакций, которые можно отправить в канал.
Для нашего примера с таймером в 4320 блоков, на канал можно будет отправить не больше чем 4320 транзакций, так как каждая новая коммит-транзакция уменьшает таймер на 1 блок. Более того, используя интервал в 1 блок (10 минут), мы заставляем участников канала следить за тем, чтобы не проспать нужный блок и вовремя отправить последнюю коммит-транзакцию, если что-то пошло не так. Конечно можно увеличить интервал, но в таком случае лимит по транзакциям на канале уменьшится еще сильнее.
Таким образом с помощью таймера мы можем инвалидировать более ранние коммит-транзакции, а также гарантировать безопасное закрытие канала любой из сторон: если обе стороны согласны с последним состоянием канала, они просто могут отправить в сеть закрывающую транзакцию (по сути последнюю коммит-транзакцию) без какого-либо таймера и закрыть канал, а если одна из сторон исчезла, то вторая просто должна дождаться истечения таймера последней коммит-транзакции, чтобы отправить ее в сеть.
Asymmetric Revocable Commitments
Еще одним способом решения описанных ранее проблем доверия в канале является аннулирование более ранних коммит-транзакций. На самом деле, аннулирование это не совсем то слово, ведь в биткоине как только транзакция замайнена и подтверждена, ее нельзя никак отменить. Поэтому можно сконструировать ее таким образом, чтобы было невыгодно ее использовать. Это можно сделать дав каждой стороне по ключу отмены (revocation key).
В этот раз канал решили создать Хитеши и Ирэн. Они оба отправили на канал по 5 биткоинов, которые составляют начальный баланс канала. Теперь, вместо стандартной коммит-транзакции которую они оба должны подписать, Хитеши и Ирэн создают 2 разные ассиметричные коммит-транзакции.
У Хитеши есть коммит-транзакция с 2мя выходами, подписанная Ирэн. Первый выход выплачивает 5 биткоинов Ирэн моментально, а второй выход выплачивает 5 биткоинов Хитеши, но с задержкой в 1000 блоков. Выгляит это так:
В то же время у Ирэн также есть коммит-транзакция с 2мя выходами, подписанная Хитеши. Первый выход выплачивает 5 биткоинов Хитеши моментально, а второй выход выплачивает Ирэн 5 биткоинов с задержкой в 1000 блоков.
Таким образом у каждого есть коммит-транзакция, подписанная другой стороной. В любое время Хитеши или Ирэн могут подписать свою коммит-транзакцию и отправить ее в сеть, однако в таком случае другая сторона получит деньги моментально, а отправителю придется ждать 1000 блоков, что не очень выгодно, однако этого, очевидно, все еще мало, чтобы заставить обе стороны играть честно.
И теперь настало время ввести последний штрих — наш ключ отмены, который поволит наказать сторону, попытавшуюся сжульничать, забрав ее деньги.
Каждая из коммит-транзакций имеет один ‘отложенный’ выход. Сделаем так, чтобы потратить его мог либо отправитель с задержкой в 1000 блоков, либо 2ой участник канала, если у него есть ключ отмены. Таким образом когда Хитеши создает коммит-транзакцию для подписи Ирэной, он создает второй выход на себя с задержкой в 1000 блоков либо Ирэне, если она предъявит ключ отмены. Хитеши будет держать этот ключ в секрете и отправит Ирэн только когда захочет обновить состояние канала новой коммит-транзакцией. Выглядеть такая транзакция будет так:
Разберем пример того, как это работает. Допустим Ирэн хочет отправить Хитеши 2 биткоина. Для этого им нужно обновить состояние канала, создав новую коммит-транзакцию. Они оба создают ассиметричные коммит-транзакции и перед тем, как их подписать, они обмениваются ключами отмены от предыдущих коммит транзакций, таким образом ‘аннулируя’ их. В данном случае Хитеши заинтересован в самом последнем состоянии баланса канала, однако для Ирэн предыдущее состояние более выгодно. Она могла бы попытаться отправить в сеть свою предыдущую коммит-транзакцию, но ключ отмены от нее уже у Хитеши и если он заметит, что она отправлена, у него будет 1000 блоков на то, чтобы забрать весь баланс канала (да, ‘отмена’ не произойдет автоматически, Хитеши должен заметить, что Ирэн отправила в сеть свою коммит-транзакцию, и воспользоваться ключом).
Таким образом реализация каналов с помощью ассиметричных отменяемых коммит-транзакций намного более эффективна так как не ограничивает ни время жизни канала, ни количество транзакций, которое можно на него отправить.
Conclusion
На этом мы заканчиваем первую статью. Думаю, вам понадобится некоторое время, чтобы все переварить, так что если есть вопросы — задавайте в комментарии. В следующей части мы разберем работу HTLC контрактов и наконец покажем как работает Lightning Network.