Изображение
История лайтинг 1

Понимание Lightning Network, часть 1: построение двунаправленного платежного канала для Биткоина

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

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

По крайней мере три компании — Lightning Пуна и Драйи, Blockstream и Blockstream — работают над проектами развития этой технологии. Но мало кто за пределами этого небольшого технологического фронта полностью понимает, как «будущее микроплатежей» должно расширить возможности Биткоина.

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

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

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

Модуль #1: Неподтвержденные транзакции

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

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

Неподтвержденные транзакции

Модуль #2: Защита от двойной траты

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

Здесь важно помнить, что даже неподтвержденные транзакции могут быть конфликтующими, а это означает, что только одна из них может быть подтверждена в конечном счете.

Двойная трата

Модуль #3: Мультиподпись

Третий компоновочный блок Lightning Network также прост: адреса с мультиподписью (или P2SH-адреса).

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

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

Мультиподпись

Модуль #4: таймлоки

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

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

таймлок

Модуль #5: Хеш-значения и секретные ключи

Пятый и последний компоновочный блок - криптография - является самым фундаментальным компоновочным блоком самого Биткоина. Но в Lightning Network это применяется по-новому.

«Числовое значение» или «секретный ключ» - это длинная и уникальная строка чисел, которую практически невозможно угадать даже для компьютера с бесконечными попытками. С помощью специального вычисления это числовое значение (или секретный ключ) может быть «хешировано» в другую строку чисел, «хеш». И вот в чем трюк: любой, кто знает  числовое значение, может легко воспроизвести хеш. Но это не работает наоборот; это улица с односторонним движением.

Этот трюк можно использовать в самом Биткоине, опять же, чтобы «запереть биткоины». (На самом деле, именно так и работает Биткоин). Например, хеш может быть включен в выходные данные и будет необходимо, чтобы последующие входные данные включали соответствующее хеш-значение, чтобы  можно было осуществлять траты.

Секрет

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

Еще до того, как была представлена сеть Lightning Network, уже некоторое время существовала концепция платежных каналов. Типичные платежные каналы полезны для определенных целей, но также ограничены: они однонаправленные. Элис может провести в пользу Бобу несколько транзакций вне блокчейна, но Боб вообще ничего не может перечислить Элис через тот же канал.

В качестве ключевой функции Lightning Network Пун и Драйя предложили «не требующие доверия» двунаправленные платежные каналы.

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

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

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

Чтобы открыть канал, Элис и Боб отправляют по пять биткоинов на адрес с мультиподписью 2-из-2. Это «открывающая транзакция». Биткоины можно потратить с этого адреса только в том случае, если Элис и Боб подпишут последующую транзакцию.

Кроме того, Элис и Боб создают секретный ключ (строку чисел) и обмениваются хешем.

Элис теперь немедленно создает последующую транзакцию из открывающей транзакции. Это «транзакция-обязательство». С транзакцией-обязательством Элис отправляет четыре биткоина себе и шесть биткоинов на второй адрес с мультиподписью. Этот второй адрес с мультиподписью немного странный. Его может разблокировать Боб самостоятельно, но только после того, как после его включения в блокчейн будет добыто 1000 дополнительных блоков; он включает CSV-таймлок. Или Элис может открыть его сама, но только если она также включит секретный ключ, для которого Боб только что дал ей хеш. (Конечно, Элис понятия не имеет, что это за секретный ключ — она знает только хеш — поэтому она никак не может воспользоваться этой опцией прямо сейчас).

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

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

Боб подписывает эту половину и отдает ее Элис.

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

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

Би-транзакции

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

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

Чуть позже Боб хочет вернуть Элис один биткоин. Они хотят обновить состояние канала, чтобы снова сделать баланс пять-пять. Для этого Элис и Боб делают две вещи.

Во-первых, оба повторяют процесс, как описано выше (за исключением того, что транзакция открытия уже записана в блокчейне; эта часть пропускается). На этот раз и Элис, и Боб приписывают себе по пять биткоинов, и оба приписывают пять биткоинов странным адресам с мультиподписью. Условия для этих адресов с мультиподписью аналогичны, за исключением того, что они требуют новых секретных ключей: и Элис, и Боб предоставляют друг другу новые хеши. Они оба подписывают свою новую полудействительную транзакцию-обязательство и передают ее друг другу.

Во-вторых, Элис и Боб передают друг другу свои первые секретные ключи, использованные в первой настройке.

В этот момент снова и Элис, и Боб могли подписать и передать новую «полудействительную» транзакцию-обязательство, которую они только что получили. Их контрагент получит сразу пять биткоинов, а вещателю придется ждать 1000 блоков. Таким образом, канал обновляется.

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

Боба останавливает, конечно же, его первый секретный ключ, который он теперь передал Элис.

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

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

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

Би-транзакции 2

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