Как работает Lightning Network. Часть 1. Построение двунаправленного платежного канала

Пожалуй, Lightning Network — наиболее ожидаемая технологическая новинка для Биткойна. Предполагается, что эта платежная система, идея которой была придложена год назад, позволит почти бесплатно выполнять огромное количество транзакций вне блокчейна Биткойна, и для этого не придется жертвовать безопасностью.

Как минимум три компании — основанная авторами идеи LN Джозефом Пуном (Joseph Poon) и Тэджем Дрийа (Tadge Dryja) Lightning, а также Blockstream и Blockchain.info — в настоящее время работают над реализацией этой технологии. Однако, кроме вовлеченных в это разработчиков мало кто понимает, как вся эта магия вообще работает. Мы предлагаем своим читателям восполнить этот пробел в своих знаниях.

Чтобы как следует понять концепцию, нужно последовательно изучить все строительные блоки, которы она включает. Для начала давайте разберемся, какие элементы задействованы в создании двунаправленного платежного канала — первой важной составляющей Lightning Network.

Элемент 1: неподтвержденные транзакции

В своей основе биткойн-протокол состоит из транзакций, которые ссылаются на прошлые транзакции и, возможно, на будущие. Каждая транзакция содержит входы с адресами отправителей биткойнов, и выходы с адресами их получателей. Кроме того, входы должны включать требования, которые создатель транзакции должен удовлетворить, чтобы транзакция была успешно выполнена, — иначе говоря, он должен подтвердить, что имеет право распоряжаться биткойнами, хранящимися по соответствующим адресам. Для выходов текущей (и, соответственно, входов следующей) транзакции указываются новые требования.

В первом приближении можно сказать, что Lightning Network основана на обычных биткойн-транзакциях, только эти транзакции не передаются в биткойн-сеть (по крайней мере, сразу). Вместо этого они сохраняются на локальных узлах пользователей, но могут быть отправлены в сеть в любой момент.

Черным цветом обозначена подтвержденная транзакция. Синяя транзакция может быть отправлена в сеть Алисой, но только в том случае, если подтверждена предыдущая транзакция. Красная транзакция может быть отправлена в сеть Бобом — с тем же условием: если подтверждена предыдущая транзакция. В данном примере Алиса может в любой момент подписать и транслировать в сеть свою неподтвержденную транзакцию, отправив 2 биткойна Бобу, и лишь после этого Боб сможет подписать свою транзакцию, отправляющую 1 биткойн Кэрол.

Элемент 2: механизм защиты от двойной траты

Второй элемент Lightning Network не нуждается в подробных объяснениях, потому что это смысл существования самого Биткойна: защита от двойной траты. Если две транзакции (или, скорее, два входа) ссылаются на один и тот же выход, только одна из них может быть подтверждена майнерами. Важно понимать, что конфликтовать могут даже неподтвержденные транзакции — еще до подтверждения одной из них.

В данном примере Алиса должна выбрать транзакцию, которую она хочет подписать и отправить в сеть. Получить подтвеждения для обеих транзакций она не может.

Элемент 3: мультиподпись

Третий элемент Lightning Network также прост: это адреса с мультиподписями. Так называют биткойн-адреса, для разблокирования которых необходимо несколько закрытых ключей. Условия разблокирования могут быть самыми разными, например 2 ключа из 3, 15 из 15 и т. д. В Lightning Network часто используются мультиподписи по схеме “2 из 2”, т. е., чтобы потратить биткойны, хранящиеся по такому адресу, необходимы две подписи, сгенерированные с помощью двух закрытых ключей.

Алиса и Боб создали адрес с мультиподписью, ключ к которому есть и у Алисы, и у Боба. Если кто-либо из них попытается потратить биткойны в одиночку, ничего не выйдет. Имейте в виду, что после добавления подписи к транзакции изменить содержимое транзакции невозможно. Криптографическая подпись — это что-то среднее между транзакцией и печатью (а на самом деле это длинная уникальная строка чисел).

Элемент 4: временные блокировки

Четвертый элемент Lightning Network — это временные блокировки. Они позволяют блокировать биткойны в выходе, чтобы их можно было потратить (включить в следующий вход) лишь спустя какое-то время.

Временные блокировки бывают двух видов: абсолютные, или CheckLockTimeVerify (CLTV), и относительные, или CheckSequenceVerify (CSV). Блокировка CLTV блокирует биткойны до какого-то (более-менее) конкретного момента в будущем: до фактического времени или определенного блока. В CSV вместо этого используется относительное время. Как только выход с CSV записан в блокчейн, должно быть сгенерировано определенное количество блоков, прежде чем эти биткойны можно будет потратить.

В Lightning Network блокировка CSV (обозначенная на рисунке часами) часто используется как задержка.

Элемент 5: хеши и секреты

Криптографические примитивы относятся к фундаментальным блокам самого Биткойна, но в Lightning Network они используются иначе.

Если коротко, то “значение” или “секрет” — это длинная уникальная строка чисел, которую практически невозможно угадать даже на очень мощных компьютерах. Этот секрет можно “хешировать” — преобразовать в другую строку чисел, или “хеш”. Хитрость в том, что любой, кто знает значение, может с легкостью получить его хеш, но обратное невозможно: хеширование — однонаправленная операция.

Этот трюк можно использовать в самом Биткойне — опять же, для блокировки биткойнов. Например, можно включить хеш в выход транзакции с требованием, что любой, кто хочет потратить его, должен указать во входе соответствующее хешу значение.

В этой статье секрет изображается как цветной ключ, а соответствующий хеш — как замок такого же цвета.

Первая задача: двунаправленные платежные каналы

Идея платежных каналов обсуждалась еще до Lightning Network. Безусловно, обычные платежные каналы полезны, но ограничены: они однонаправленны. Ключевая особенность Lightning Network — это двунаправленные платежные каналы “без доверия”.

Открытие канала

Чтобы создать двунаправленный платежный канал, стороны должны сначала согласовать открывающую транзакцию. Эта транзакция определяет объем депозитов, которые должна внести каждая сторона.

Допустим, Алиса хочет отправить Бобу один биткойн. Алиса и Боб собираются платить друг другу часто, поэтому они решают открыть двунаправленный платежный канал (пожалуй, целый биткойн — это многовато для платежного канала, потому что он больше подходит для микроплатежей, но в этом нет ничего невозможного).

Чтобы открыть канал, Алиса и Боб отправляют на адрес с мультиподписью “2 из 2” по 5 биткойнов. Это и есть “открывающая транзакция”. Биткойны по этому адресу можно потратить, только если транзакцию подпишут и Алиса, и Боб.

Кроме того, Алиса и Боб создают секрет (строку чисел) и получают ее хеш.

Далее Алиса немедленно создает из открывающей транзакции новую транзакцию. Это так называемая “транзакция-обязательство” (commitment transaction). С ее помощью Алиса отправляет 4 биткойна себе, а оставшиеся 6 — на второй адрес с мультиподписью. Этот адрес немного необычен. Боб может разблокировать его самостоятельно, но только через 1000 блоков, потому что это адрес с CSV-блокировкой. Или же его может разблокировать Алиса, но только указав секрет, хеш от которого сообщил ей Боб (разумеется, Алиса понятия не имеет, каков этот секрет — она знает только его хеш, — так что она пока не может воспользоваться этой возможностью).

Алиса подписывает транзакцию-обязательство, но не транслирует ее в сеть! Вместо этого она отправляет ее Бобу.

Тем временем Боб делает то же самое, но с обратными параметрами: создает транзакцию-обязательство, отправляя 6 биткойнов себе, а 4 — на новый адрес с мультиподписью. Алиса может разблокировать этот адрес через 1000 блоков, а Боб — с помощью секрета Алисы.

Боб подписывает свою транзакцию-обязательство и отправляет ее Алисе.

После обмена обязательствами и хешами секретов Алиса и Боб подписывают и отправляют в биткойн-сеть открывающую транзакцию, которая записывается в блокчейн. После этого канал можно считать открытым.

Теперь и Алиса, и Боб могут подписать и отправить в биткойн-сеть обязательства, которые они получили друг от друга. Если Алиса сделает это, Боб немедленно получит 6 биткойнов. Если это сделает Боб, Алиса получит 4 биткойна. В любом случае тот, кто подпишет и отправит в биткойн-сеть соответствующую транзакцию, должен будет подождать 1000 блоков, чтобы разблокировать адрес с мультиподписью и получить доступ к остальным биткойнам.

Однако в действительности ни одна из сторон не подписывает и не транслирует в сеть свою транзакцию, и это самое важное в платежном канале.

Обновление канала

Немного позже Боб хочет вернуть Алисе 1 биткойн. Им нужно обновить состояние канала, и для этого они делают две вещи.

Прежде всего, они повторяют изложенный выше процесс (за исключением открывающей транзакции — она уже записана в блокчейн). В этот раз Алиса и Боб отписывают себе по 5 биткойнов, а оставшиеся 5 отправляют на адреса с мультиподписью. Требования к этим адресам похожи, но использовать они должны новые секреты. Это означает, что Алиса и Боб сообщают друг другу новые хеши. Они подписывают свои транзакции-обязательства и отправляют их друг другу.

Далее Алиса и Боб передают друг другу свои секреты из первого сценария.

После этого Алиса и Боб могут подписать и отправить в сеть полученные транзакции-обязательства. Тот, кто сделает это, сможет получить свои 5 биткойнов через 1000 блоков, а вторая сторона — немедленно.

Но что мешает Бобу вместо этого отправить в сеть старую транзакцию-обязательство? Казалось бы, в этом случае он должен получить 6 биткойнов…

Конечно же, сделать это мешает ему его первый секрет, который он только что передал Алисе. Боб больше не может использовать старую транзакцию-обязательство, потому что Алисе известен его первый секрет. Если бы Боб подписал и отправил в сеть старое обязательство, он немедленно отправил бы 4 биткойна Алисе, а сам смог бы получить свои 6 биткойнов лишь через 1000 блоков. Тем временем Алиса сама смогла бы получить эти 6 биткойнов, потому что ей известен секрет Боба! Ну а поскольку Бобу известен секрет Алисы, это работает и в обратном направлении: если Алиса попытается отправить в сеть свое старое обязательство, Боб сможет забрать все биткойны из данного канала.

Это означает, что Алиса и Боб экономически заинтересованы в том, чтобы соблюдать правила и транслировать в сеть только транзакции с актуальным состоянием канала.

Теперь эту схему двунаправленного платежного канала нужно расширить, чтобы можно было совершать платежи по сети. Об этом читайте в следующей статье.

Источник: cryptor.net/kriptovalyuty/kak-rabotaet-lightning-network-chast-1-postroenie-dvunapravlennogo-platezhnogo-kanala