Bitcoin lightning network что это
Lightning Network и приблизительная оценка его эффективности
Подавляющее число людей, достаточно подкованных, чтобы понимать что такое криптовалюты, проблемы с производительностью блокчейна bitcoin и lightning network, все еще наивно полагают, что эта технология способна решить все проблемы в одночасье, и позволит масштабировать блокчейн чуть ли не до бесконечности.
Постараюсь развеять эти заблуждения.
Классический блокчейн в чистом виде, где каждый узел пропускает через себя все транзакции, не способен, на текущем уровне технологий, хранить и обрабатывать большое количество транзакций. Даже если не ограничивать размер блока хранения транзакций лимитом (в bitcoin — это 1мб + 3мб от сайдчейна segwit), скорость обработки транзакций ограничена возможностями конечных узлов (я не говорю про SPV кошельки, которые полностью доверяют проверку транзакций полным нодам), сейчас это считанные сотни миллионов транзакций в сутки (250 миллионов транзакций полностью проверяются при первоначальной загрузке блокчейна при новой установке bitcoin-qt, на современной машине это происходит за приимерно 12 часов, при отличном интернет соединении и ssd-диске, на слабой машине intel celeron — загрузка затягивается на 3 суток) — сейчас это порядка 5-6 тысяч транзакций в секунду (например тесты блокчейна bitshares инфраструктуры graphene показывают 2500 tps но при использовании серверного железа с большим количеством процессоров, с другой стороны теоретический максимум 150т tps).
Задача проверки транзакций линейно масштабируется, если распределить нагрузку на несколько компьютеров, но это так же линейно повышает стоимость оборудования от нагрузки на всю сеть, что само собой неудобно, если вы пожелаете поднять свой сервис, принимающий средства от пользователей и не готовый доверять какому то другому сервису.
Это очевидно — блокчейну нужны технологии, позволяющие масштабировать его производительность нелинейно.
Сайдчейны — лучшее, что было предложено за последнее время в криптоэкономике, и в то же время потенциально губительное для той составляющей криптовалют, за которую ее полюбили — независимость от единой точки отказа и централизации контроля над финансами пользователей.
Сайдчейны, которые хранят дополнительную информацию в своем хранилище
Отличным примером такого сайдчейна является — segwit, это обновление-костыль, позволяющее расширить возможности блокчейна bitcoin (и его форки) без необходимости кардинально ломать совместимость со старыми клиентами. Главный способ, с помощью которого segwit позволяет увеличить количество транзакций в блоке, без его расширения, это вынести часть информации о транзакциях в отдельное хранилище. Т.е. каждая транзакция оставляет след в блокчейне.
Заметного увеличения производительность блокчейна это не даст, средние прогнозы — 2-2.5 кратное увеличение, а теоретический максимум — в 4 раза больше транзакций, если все они будут multisig p2sh (например клиринг LN).
Если сравнивать segwit с обычным увеличением размера блока до 4мб — то это ничем не отличается, даже чуть выше нагрузка на процессор получается. Но segwit принес с собой и другие технологии, а так же совместимость с легаси клиентами. Это вынужденная мера от которой трудно отказаться.
Самый простой и эффективный сайдчейн — это обычный банк (или некоторые биржи)
… со счетом в криптовалюте — вы переводите монеты на свой счет в банке и сможете переводить между клиентами этого банка свои монеты, не размещая транзакции в публичном блокчейне (для некоторых криптовалютных бирж — это перевод кодом). Само собой, банк хранит в своем формате эти транзакции, для себя и для фин-мониторинга. Понятно, что при попытке сделать перевод в другой банк, появится блокчейн-транзакция, но, банки могут договориться между собой о совершении этих переводов по своим правилам, например с использованием государства как гаранта, что сделки будут исполнены.
Таким образом транзакции могут вообще никогда не попасть в блокчейн, тем самым полностью его разгрузив.
Недостатки обычных банков элементарны — требуется полное доверие банку, плюс нет никаких гарантий, что монеты, которые вы перевели им ‘на хранение’ останутся без использования, мало того это обычная практика, использовать вложения пользователей для собственных нужд. Это очень гнилая практика, и именно она является следствием регулярных крахов банковских систем, ведь в случае кризиса, банки просто не могут исполнить свои обязательства и выдать уже потраченные деньги своим клиентом.
Более продвинутая технология — lightning network
… когда вместо того, чтобы слепо доверять банку свои деньги, можно договориться об двухстороннем залоге, когда пара пользователей (один из которых не обязательно банк), блокируют в блокчейне специальной транзакцией (контрактом), одинаковые суммы с таким расчетом, что разница в балансах будет показывать взаимные долговые обязательства. И самое главное, на таких договоренностях можно построить сеть связанных обязательствами пользователей, которые будут отвечать своими заблокированными балансами за прохождение транзакций по ним.
Перевод по сети между участниками представляет из себя одновременное изменение взаимных долговых обязательств на сумму перевода, тех участников, находящихся в сети между отправителем и получателем. Эти изменения никак не отражаются в блокчейне, но если количество переводов в одну сторону в сумме превысят объем заблокированных средств, потребуется клиринг — выравнивание балансов каким либо способом, например использованием петлей в сети LN, либо отправкой необходимых средств через блокчейн.
Отсюда видим, что единственная стратегия, при которой LN позволяет бесконечно масштабировать количество обрабатываемых транзакций — это если пользователи будут слать монеты друг другу с нулевым суммарным средним изменением балансов. Очевидно, что такое возможно только если сеть вырождается в одну центральную ноду, у которой все клиенты — пользователи блокчейна, но при этом нет необходимости хранить и доверять свои средства ему.
Надежно, эффективно и централизованно, ведь в такой схеме возможен отказ в переводе монет по любым предлогом, например блокировать все переводы от людей, не исполняющих требования финмониторинга. Или, например, если внезапно ваша страна попала под санкции одной из крупнейших экономических зон — Евросоюза/США/Китая/. ваши залоги могут быть заблокированы по решению суда, или, когда банк пожделает возложить на вас свои риски потери средств, когда транзакции являлись обменом на товары или услуги, являющиеся запрещенными и которые государство смогло отобрать в свою пользу.
Это будет не так страшно, если LN не будет единственно доступным способом использования блокчейна, но опасность существует, о чем я писал раньше, если количество транзакций в блоке останутся лимитированы 1 или 2 мб.
На сколько сильно позволит lighting network расширить производительность переводов?
Исходя из основной особенности LN, вместо совокупного количества транзакций, необходимо рассматривать количество блокчейн и клиринговых транзакций, которые могут понадобиться на одного пользователя за определенный период, так как пользователи могут друг другу слать последовательно одну и ту же сумму в любых количествах, без комиссий, если между ними нет промежуточных нод.
Во-первых, каждый новый пользователь сети, должен будет сделать как минимум одно пополнение своего кошелька, и это должна быть блокчейн транзакция. Пользователи сети LN могут быть только с ненулевым балансом.
Во-вторых, для подключения к сети LN необходима открывающая транзакция, блокирующая балансы у входной ноды и пользователя.
В-третьих, но не обязательно, это закрывающая транзакция для выхода пользователя из сети LN, например для переключения к другой ноде сети, с целью оптимизации комиссий.
В-четвертых, самый большой объем транзакций — это клиринг, выравнивание балансов на счетах нод LN. Каждый крупный перевод по сети увеличивает шанс появления такой транзакции, причем у каждой промежуточной ноды в сети. Причем возможна ситуация, что очередная транзакция одного пользователя потребует каждой ноде в сети выпустить клиринговую, если сеть выстроена не эффективно (отсутствуют циклы). Чем больше величина залогов между узлами LN, тем реже понадобится клиринг. Крупные ноды смогут и будут оптимизировать свои расходы таким образом, чтобы минимизировать или вообще исключить клиринг через блокчейн, но обычный пользователи этого сделать не смогут. Даже в лучшем случае, активные пользователи будут блокировать только небольшую долю от среднего пополнения (например выплата зарплаты раз в месяц или получение вознаграждения за работу) а значит в течении периода между получением средств, им понадобятся клиринговые транзакции. Получается в идеальном случае один пользователь будет делать 1 блокчейн транзакцию в месяц.
Четвертый пункт вносит наибольшее количество транзакций, и можно оценить, как много таких активных пользователей смогут использовать блокчейн.
Количество транзакций в блокчейне с 1мб лимитом без segwit — 262т. в сутки или 7883т. в месяц. Умножаем на 2.5 коэффициент, который будет доступен благодаря segwit, получим 19 миллионов транзакций.
Итог — 19 миллионов активных пользователей, это максимум, сколько себя сможет вместить 1мб блок legacy bitcoin.
И никакие разовые расширения лимита блока до 2 или до 8 мб заметно это число не изменят. 19 миллионов человек или 190 миллионов — это катастрофически мало. Будущее криптовалют — миллиарды активных пользователей.
Конечно, очевидно, что в ближайшем будущем, 1-3 года, типичный активный пользователь bitcoin не получает зарплату ежемесячно, и траты его так же не регулярны, это значит оценка 1 клиринг в месяц может быть ошибочной, но для ее оценки необходим серьезный анализ блокчейна, и это не та работа, которую можно сделать в рамках написания простой статьи.
Если в течении этого времени, не найти технического и организационного решения, для увеличения лимита на размер блока, пользователи сети будут вынуждены уйти от использования и хранения своих средств под собственным контролем на локальных кошельках, в онлайн-кошельки и банки. И сделать это их заставит повышающаяся стоимость блокчейн переводов.
Что такое Lightning Network? (руководство для начинающих)
Что такое Lightning Network?
Lightning Network (англ. — сеть-молния) — техническое решение, разрабатываемое в качестве протокола второго слоя блокчейн-сетей. Развернутый поверх биткоина LN использует передовые смарт-контракты для достижения более высокой пропускной способности транзакций, сохраняя при этом peer-to-peer характер протокола биткоина.
Решение было впервые представлено на конференции Scaling Bitcoin в Монреале в сентябре 2015 года.
Для чего нужна технология Lightning Network?
Главной целью Lightning Network является масштабирование и более быстрая работа блокчейн-сетей, в частности, осуществление моментальных микроплатежей с более низкими, чем при обычных транзакциях, комиссиями.
Если говорить просто, Lightning Network позволяет пользователям проводить транзакции напрямую между собой, не записывая информацию в публичный блокчейн. Таким образом решаются сразу две задачи: более быстрые и дешевые транзакции, а также сокращение объема данных блокчейна. Кроме того, эта технология способствует большей анонимности пользователей.
Как Lightning Network работает с технической точки зрения?
Журнал ForkLog публиковал многочисленные материалы о технической стороне работы Lightning Network, в которых собрана достаточно подробная информация по этому вопросу.
Ниже представлена базовая информация, необходимая для понимания этого процесса.
Ключевым принципом работы Lightning Network является использование платежных каналов, в которые помещаются средства, переводимые между участниками. Платежный канал представляет собой кошелек с функцией мультиподписи (multisig), в котором хранится определенное количество биткоинов. Монеты могут предоставить как обе стороны, так и только одна из них.
Канал открывается посредством обычной биткоин-транзакции, то есть в этом случае данные об этой транзакции записываются в блокчейн (также данные записываются в блокчейн при закрытии канала). Однако в дальнейшем все транзакции, осуществляемые внутри канала, происходят напрямую между участниками без записи данных в блокчейн.
Платежный канал по своей сути является аналогом сейфа, в который кладутся деньги, доступные в дальнейшем определенному кругу лиц. Но, если для открытия сейфа необходимо знать комбинацию цифр, то в нашем случае используются приватные ключи.
Все это немного сложно. Можно на конкретном примере?
Самый простой пример использования технологии LN: любимая кофейня Анатолия объявила, что начала принимать в качестве оплаты биткоины. Но платить каждый раз за чашку кофе, создавая для этого отдельную транзакцию, может быть слишком накладно из-за связанных с этим комиссий, кроме того, для подтверждения транзакции требуется определенное время.
Именно здесь и приходит на помощь LN. Анатолий открывает платежный канал между собой и кофейней и кладет на него, предположим, 0.01 BTC, которые собирается потратить в дальнейшем на заказ кофе. При создании канала на балансе Анатолия отображается 0.01 BTC, на балансе кофейни – 0 BTC.
Допустим, чашка кофе стоит 0.0005 BTC. После первого заказа на балансе Анатолия будет отображаться уже 0.0095 BTC, на балансе кофейни — 0.0005 BTC. Таким образом Анатолий может заказывать кофе до тех пор, пока его баланс не обнулится или он не примет решение о закрытии канала. При каждой транзакции Анатолий и кофейня подписывают обновленный смарт-контракт, отображающий, какое количество монет в канале принадлежит каждой стороне. Как уже было сказано, эти данные в блокчейн не записываются — вместо этого каждая сторона хранит свою копию смарт-контракта.
Необходимо ли открывать новый платежный канал для каждой новой стороны транзакции?
Нет, сеть Lightning Network, как говорит само ее название, устроена по сетевому принципу. Это означает, что Элис может не иметь открытого платежного канала с Дэйвом, но может быть связана с ним через Кэрол или Боба или даже через нескольких участников. То есть, пользователи могут обмениваться транзакциями с любыми другими пользователями, которые подключены к их сети платежных каналов через узлы (ноды).
Финансовый стимул в открытии таких связующих нод состоит в получении небольших комиссий, получаемых каждый раз, когда транзакция происходит при помощи одного из подключенных к ней каналов.
Благодаря использованию смарт-контрактов архитектура сети Lightning Network не требует доверия сторон. Таким образом средства всегда доходят до своих получателей через посредников или возвращаются отправителю, если непрямой путь к получателю по каким-то причинам невозможен.
На приведенном ниже графике Боб и Кэрол выступают в роли нод. Ноды в сети Lightning Network можно сравнить с майнерами в основной сети биткоина – как и майнеры, они обрабатывают транзакции и точно так же не контролируют средства, которые помогают перемещать. Боб не может украсть монеты Элис, поскольку получит входящий платеж только в том случае, если отправит аналогичную сумму получателю.
Какие еще возможности предлагают платежные каналы?
Упомянутая выше ситуация, когда Анатолий открывает платежный канал с кофейней, означает открытие так называемого однонаправленного канала, то есть средства расходует только один участник. Дополнительно возможно открытие двунаправленных платежных каналов, когда обе стороны платят друг другу, а также ситуации, когда при помощи смарт-контрактов задаются определенные условия для осуществления транзакции.
Это лишь базовые примеры возможностей Lightning Network — в действительности сценариев применения технологии намного больше, и многие из них уже был описаны в наших предыдущих материалах.
Кто отвечает за разработку Lightning Network?
Как и в случае с биткоином и рядом других криптовалют, разработка Lightning Network децентрализована, а код самого протокола доступен в открытом доступе. Следовательно, говорить о какой-либо одной «официальной» версии LN не приходится. В то же время есть ряд известных компаний и проектов, которые предлагают собственные имплементации технологии, и в данном случае решение, какую из них использовать, остается за конечным пользователем.
Среди таковых можно назвать компании Lightning Labs, Blockstream, ACINQ, Bitfury и несколько других проектов.
Звучит красиво. В чем недостатки?
Прежде всего, Lightning Network все еще находится в экспериментальной стадии. Крупные и значимые транзакции в данный момент лучше доверить основной сети биткоина.
Важно помнить, что в данный момент p2p-природа протокола означает, что для открытия канала и совершения платежей необходимо, чтобы обе стороны находились онлайн. То есть офлайн-платежи, когда можно просто отправить какое-то количество монет на известный адрес, и получатель увидит их, когда войдет в сеть, в этом случае невозможны.
Кроме того, пока нет четкого ответа касательно безопасности платежей. Все происходит поверх биткоина и следовательно моделью безопасности биткоина, которую обеспечивают майнеры, Lightning Network не пользуется
Также часто высказываются опасения о возможной централизации сети. Например, в середине января 2019 года более 64% емкости сети контролировал всего один игрок.
В каком состоянии находится сеть Lightning Network сегодня?
Разработка протокола микротранзакций Lightning Network велась на протяжении нескольких последних лет, но только март 2018, когда Lightning Labs представил первую бета-версию клиента lnd, можно считать датой его официального запуска. Кроме того, в прошлом году был выпущен кошелек Eclair от французского стартапа ACINQ, а также состоялся бета-релиз c-lightning — имплементации Lightning Network от Blockstream.
Еще одним важным событием стал релиз Casa Node — физической Lightning-ноды от американского стартапа Casa, которая существенным образом снижает порог доступа к технологии, делая использование Lightning Network предельно простым для пользователей, не обладающих обширными техническими навыками.
Также Lightning Network все чаще используется для оплаты реальных товаров и услуг. Настоящим пионером в этом отношении стал шведский стартап Bitrefill, еще в марте 2018 года объявивший о возможности использования протокола для пополнения телефонных счетов и покупки подарочных ваучеров и сертификатов.
В январе 2019 Bitrefill также представил сервис Thor — услугу по открытию пустого канала в Lightning Network от собственной ноды стартапа. Собственная нода, к которой могут подключиться пользователи, есть и у ForkLog.
Чего можно ждать в будущем?
Lightning Network — по-прежнему очень молодая технология, однако ей действительно пророчат большое будущее. Неуклонно растет емкость в сети, недавно превысив отметку в 700 BTC, число нод приближается к 6500, а число открытых каналов превысило уже 28 000.
Кроме того, технология открывает дорогу принципиально новым решениям вроде кроссплатформенных атомарных свопов, то есть моментальному прямому обмену монет одной сети на монеты другой без участия посредников в лице бирж и других обменных платформ. Так, еще в 2017 году в сети Lightning Network состоялась первая атомарная транзакция между биткоином и Litecoin.
Также можно ожидать скорой поддержки технологии в ряде платежных приложений. Пионером в этом направлении может стать Cash App, разрабатываемый компанией Square. Дополнительно о планах по внедрению Lightning Network объявили разработчики ориентированной на приватность пользователей криптовалюты Beam.
Как работают платежные каналы и lightning network в Биткоине
Платежные каналы и основные сведения о них
Что такое платежный канал?
Платежный канал — это метод проведения множества платежей без добавления транзакции в блокчейн. При этом участники канала взаимодействуют только друг с другом. Наличие дополнительных валидаторов или третьих доверенных сторон не требуется.
Преимущества платежного канала
Какие же преимущества дает платежный канал перед обычными транзакциями?
В рамках уже открытого платежного канала участники получают возможность проведения мгновенных платежей. Сторона-получатель выполняет быструю независимую проверку и принимает платеж. В базовом варианте комиссий нет. Соответственно, микроплатежи имеют место быть. Именно из-за этой особенности платежные каналы также называют micropayment channels.
Еще одно интересное преимущество состоит в том, что взаимодействие участников канала можно вести приватно. Соответственно, детали каждого микроплатежа остануться в тайне от всех остальных, хотя сам факт использования платежного канала между конкретными Биткоин адресами будет известен всем.
Особенности платежного канала
Нельзя сказать, что у платежных каналов есть серьезные недостатки по сравнению с обычными транзакциями, но есть некоторые характерные особенности.
Платежный канал нужно открыть и, соответственно, рано или поздно закрыть. Это выполняется отдельными on-chain транзакциями. Для них неизбежна оплата комиссии и требуется ожидание подтверждения. Для открывающей транзакции лучше дожидаться полного подтверждения.
Внутри конкретного канала платежи доступны только в рамках предопределенной суммы. Ее задают сами участники, замораживая нужную сумму с помощью специального Биткоин скрипта.
Платежные каналы могут быть однонаправленными и двунаправленными, mono-directional или bi-directional соответственно. Это зависит от самой методики реализации канала.
Период существования канала и максимальное количество платежей могут быть ограничены, а могут и не быть таковыми. Это зависит от методики. Соответственно, каналы могут быть закрыты по наступлению определенного времени или досрочно. Причем закрыть канал можно по обоюдному согласию участников или по желанию одного из них, но с некоторыми особенностями.
В упрощенном варианте работу платежного канала можно изобразить на такой схеме.
Есть Биткоин сеть. Есть два пользователя: Алиса и Боб. У них есть Биткоин кошельки с дополнительным модулем для работы платежного канала по определенной методике. Эти модули обмениваются данными для проведения платежей непосредственно.
Чья идея?
Впервые идею платежных каналов описал сам Сатоши Накамото в личном письме одному из активных разработчиков протокола много лет назад. Тогда еще в Биткоине не было принято достаточно важных обновлений, позволяющих проектировать надежные платежные каналы. Однако позже это стало возможно и в 2013 году вернулись к этой воистину перспективной идее.
О методах реализации платежных каналов
Мы рассмотрим четыре основных.
Spillman-style payment channels — это максимально простой вариант одностороннего канала с ограниченным временем существования и неограниченным количеством платежей.
Позже было принято еще одно усовершенствование протокола Биткоин и стали возможны CLTV-style payment channels, которые представляют собой усовершенствованный предыдущий метод.
Poon-Dryja payment channels — это метод двунаправленных каналов с неограниченным временем работы. Они требуют еще нескольких обновлений протокола Биткоина, которые недавно были приняты. Кроме того, эти каналы используются при проектировании lightning network.
Decker-Wattenhofer duplex payment channels — это вариант использования двух однонаправленных каналов одновременно, усовершенствуя их свойства за счет формирования не последовательной цепочки заменяемых транзакций, а целого дерева заменяемых транзакций. Кроме того, в таких каналах может быть больше двух участников.
Мы детальнее остановимся на первых двух методах, но для начала повторим некоторые особенности работы протокола Биткоин.
Кое-что из протокола Биткоина
nLockTime — это поле в теле каждой транзакции, которое содержит временную метку или номер блока. До наступления этого времени или высоты блокчейна валидаторы не имеют права включать транзакцию в блок.
nSequence — это поле в каждом входе транзакции, которое содержит значение времени, в течение которого подтверждение этой транзакции невозможно. Причем время рассчитывается относительно того, когда был подтвержден выход, который тратит этот вход.
MultiSignature дает возможность задавать такие условия на выходе транзакции, по которым необходимо предоставить несколько электронных подписей. Эти подписи будут проверяться определенными открытыми ключами.
Spillman-style payment channels
Итак, Spillman-style payment channels — это метод создания mono-directional платежных каналов, где есть роль отправителя и роль получателя. Время работы такого канала устанавливается отправителем произвольно, при этом получатель может досрочно закрыть канал.
Давайте разберем основные шаги работы такого канала на схеме.
Для удобства восприятия представим, что есть некоторый сервис, который торгует доступом к глобальной сети через wi-fi точку доступа, и некоторый клиент, который хочет получить доступ в сеть на сутки. Услуга будет стоить один биткоин. Очевидно, что клиент не доверяет сервису на такую сумму и хочет оплачивать трафик посекундно.
Тогда они решают открыть платежный канал на сутки с суммой в один биткоин. Сервис генерирует новую пару ключей для электронной подписи и передает открытый ключ клиенту. Клиент в свою очередь генерирует новую пару ключей и использует свой открытый ключ и открытый ключ сервиса для формирования multisignature адреса 2-из-2. Далее, клиент формирует транзакцию номер один, в которой он отправляет один биткоин на multisignature адрес, подписывает ее, но не распространяет в Биткоин сеть, поскольку сервис может подставить клиента и отказаться подписывать любые транзакции для дальнейшей передачи одного биткоина.
Поэтому клиент формирует транзакцию номер два, где монеты с multisignature адреса отправляются на адрес, который он контролирует сам. Причем устанавливает поле nLockTime так, чтобы транзакция могла быть подтверждена через сутки. Эту транзакцию он не подписывает, а отправляет сервису. В свою очередь сервис соглашается с тем, что клиент может забрать монету целиком себе, но не раньше, чем через сутки, и подписывает транзакцию своим ключом. Подпись он передает клиенту, клиент ее проверяет. Теперь он имеет возможность до-подписать транзакцию своим ключем и гарантированно забрать монету обратно, если сервис решит отказать в обслуживании.
Следующим шагом клиент распространяет транзакцию номер один в Биткоин сеть или передает ее сервису для распространения, если у него самого соединения нет. После подтверждения первой транзакции платежный канал считается открытым.
В данном случае транзакция номер один называется funding transaction, а вторая — refunding transaction.
Каким же образом выполняется взаимодействие при расчетах в рамках платежного канала? Давайте рассмотрим следующую схему.
Для отправки первого платежа клиент запрашивает Биткоин адрес сервиса, который тот контролирует самостоятельно. Далее, клиент формирует транзакцию номер три, в которой монета с multisignature адреса распределяется между двумя выходами: первый — это платеж на адрес сервиса за одну секунду работы точки доступа, а второй — это сдача на собственный адрес клиента. Клиент подписывает транзакцию номер три своим ключом и передает сервису. Сервис проверяет правильность транзакции и подписи, после чего принимает платеж, потому что он может до-подписать эту транзакцию своим личным ключом и гарантированно получить оплату первой секунды трафика, если сделает это в течение суток. Но если сервис намерен дальше предоставлять обслуживание клиенту и получать оплату в рамках канала, то он просто сохраняет транзакцию номер три локально до закрытия канала.
Для отправки всех последующих платежей клиент изменяет выходные значения транзакции номер три, соответственно, пере-подписывает ее и передает сервису уже только саму подпись и сумму изменения. Сервис также проверяет полученные данные и сохраняет уже новую версию транзакции номер три, т. к. в этой версии он получает уже больше монет.
Как же выполняется закрытие канала?
На схеме видно, что сервис должен успеть опубликовать в Биткоин сеть последнюю версию транзакции номер три до завершения времени работы канала. В противном случае отправитель может смухлевать, до-подписать и обнародовать транзакцию номер два, где заберет всю сумму на свой адрес.
Стоит отметить, что клиент может обнародовать refund transaction в любое время работы канала. Сервис посчитал бы такое поведение мухлежом. Поэтому он постоянно следит за появлением этой транзакции в сети и в случае обнаружения разрывает договор с клиентом, досрочно закрывая канал путем публикации последней версии транзакции номер три.
CLTV-style payment channels
Давайте теперь рассмотрим улучшенную версию этого метода, а именно CLTV-style payment channels.
Этот метод платежных каналов стал применим после того, как было проведено softfork обновление Биткоина с добавлением нового скриптового кода — OP_CHECKLOCKTIMEVERIF. Особенность его состоит в том, что теперь в выходе транзакции можно задать такие правила, по которым монеты могут быть потрачены только в транзакции с установленным параметром nLockTime не меньше заданного. На деле это означает, что помимо прочих условий, монеты могут быть потрачены только спустя определенный промежуток времени. Теперь, с использованием скриптовых операций ветвления условий, а именно IF-ELSE, можно задать разные условия траты в зависимости от времени. Преимущество этих платежных каналов, по сравнению с предыдущими, заключается в том, что не нужно создавать refund транзакцию. Вместо этого можно прописать двойное условие траты монет в выходном скрипте funding транзакции. То есть до наступления времени закрытия канала монеты можно потратить по правилам multisignature, а после закрытия будет достаточно одной подписи.
Как же применяются платежные каналы?
Тут есть два варианта: либо в чистом виде для осуществления регулярных платежей между заранее установленными сторонами, либо формирование lightning network за счет коммутации каналов между собой. Коммутация означает возможность проведения платежа между пользователями, которые не открыли платежный канал друг с другом, но имеют открытые каналы с другими участниками сети. Тогда ценность будет передаваться через цепочку каналов посторонних участников, если такая существует.
В случае с lightning network есть дополнительные сложности и особенности. Это выработка общепринятого формата коммутации каналов и протокола общения узлов. Важно, чтобы кошельки от одних разработчиков могли работать с кошельками от других. Еще одной сложностью является вопрос маршрутизации в этой сети. Задача такая, что нужно найти наиболее короткий путь передачи ценности с учетом того, что в каждом канале есть ограничения на сумму перевода в каждую сторону.
Особенности работы сети
На следующей схеме давайте рассмотрим особенности функционирования Биткоин сети и lightning network.
В Биткоин сети узлы обмениваются данными о транзакциях и блоках, а также сетевыми адресами друг друга. При этом достигается консенсус и формируется общая база данных. Кроме полных узлов, в сети Биткоина существуют облегченные узлы, которые получают только необходимую для них информацию, без обработки и хранения всей истории.
В сети lightning узлы не обмениваются готовыми транзакциями и не достигают консенсуса. Но для них также важно обновлять информацию о состоянии друг друга и обмениваться сообщениями для поддержания работы внутри платежных каналов. Стоит отметить, что сеть lightning также не будет однородной, в том смысле, что будут узлы с большей и меньшей нагрузкой, а также узлы с непостоянной активностью. Скорее всего, в сети будут существовать хабы, узлы с большим количеством открытых платежных каналов, и они должны будут справляться с большой нагрузкой. А обычные пользователи будут открывать в лучшем случае один или два платежных канала, причем с одним из таких хабов.
Так будет происходить, потому что для открытия каждого платежного канала нужно заморозить определенное количество монет, тогда принимать и отправлять платежи возможно только в рамках ограниченной суммы. Если обычный пользователь разделит свои монеты на несколько частей и откроет несколько каналов, то фактически он получит очень малое окно для платежа в каждом из каналов по сравнению с изначальной суммой. В то же время хабами будут выступать крупные организации, например разработчики кошельков, централизованные биржи или популярные мерчанты. Они могут себе позволить поддержание большого числа каналов, открытых на крупные суммы и продолжительные промежутки времени, не уходя в оффлайн.
Актуальные вопросы
Рассмотрим часто задаваемые вопросы по теме платежных каналов и lightning network.
— Насколько платежи в каналах надежны по сравнению с обычными Биткоин транзакциями?
По надежности платежи в каналах можно сравнить с обычными, т. е. монеты не отберут, а платеж не отменят. Но существует ряд особенностей вроде необходимости своевременного открытия и закрытия каналов, ограничения на сумму внутри канала, необходимости постоянной синхронизации с Биткоин сетью, вероятности заморозки монет на некоторое время.
— Ограничена ли пропускная способность в каналах и lightning network?
Дело в том, что ограничения никакого нет, но могут быть задержки, связанные с обработкой канала, разведыванием сети и построением маршрута, которые зависят от производительности конкретных участников. Кроме того, узлы могут непредсказуемо уходить в оффлайн, что может иметь определенные ограничения в осуществлении платежей другими участниками.
— Должны ли участники канала доверять друг другу?
Нет, механизм платежных каналов предусматривает защиту от любых злонамеренных действий взаимодействующих сторон.
— Какая польза от каналов человеку, который хочет отправить только один платеж?
Если человек хочет избавиться от последних монет и больше не планирует принимать и отправлять платежи, то ему нет смысла открывать канал, нужно отправить обычную on-chain транзакцию. Во всех остальных случаях открытие канала будет полезным.
Этой теме также посвящена одна из лекций онлайн-курса по Blockchain “Off-chain payment channels”.