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

История Lightning: от мозгового шторма до бета-версии

Lightning Network, оверлейная сеть Биткоина для дешевых и мгновенных транзакций, создавалась много лет. Это история о периоде от формирования ее концепции, вплоть до сегодняшних дней.

Первые размышления

Самые ранние истоки Lightning Network тянутся к самому Биткоину.

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

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

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

код

Черновой проект кода платежного канала, включенного в Биткоин 0.1. Источник: Гитхаб

Хотя этот код был черновым, Сатоши Накамото более подробно рассказал о том, как платежные каналы могут работать в частном общении с тогдашним разработчиком bitcoinj Майком Хирном.

Несколько лет спустя, в 2013 году, Хирн опубликовал объяснение Сатоши Накамото о платежных каналах в списке рассылки по разработке Биткоина:

Объясянение

Объяснение Сатоши Накамото того, как могут работать платежные каналы, описанное Майком Хирном. Источник: список рассылки по разработке Биткоина.

Первые платежные каналы

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

Решение этой проблемы впервые было предложено летом 2011 года, после ухода Сатоши Накамото из проекта Биткоин. Пользователь форума Bitcointalk «hashcoin» описал двухуровневый платежный канал, который требовал от пользователей обмена несколькими частично подписанными транзакциями с мультиподписью и транзакциями с таймлоками (временными блокировками средств), которые зависели друг от друга, чтобы быть действительными. Если один участник исчезнет, ​​другой может потребовать все средства в платежном канале по прошествии некоторого времени. Однако недостатком этой конструкции было то, что каналы «hashcoin» могли работать только в одном направлении. «Алиса» могла платить «Бобу» произвольное количество раз, но Боб не мог платить Алисе по одному и тому же каналу.

Идея, похожая на идею «hashcoin», всплыла в начале 2013 года, и на этот раз она вышла за пределы теоретической сферы. В апреле того же года Джереми Спилман описал концепцию платежного канала в списке рассылки по разработке Биткоина. Он даже закодировал proof of concept (PoC) (с англ. доказательство концепции). Этот проект, в свою очередь, был скорректирован Майком Хирном, после чего будущий участник Bitcoin Core, соучредитель Blockstream и разработчик Chaincode Labs Мэтт Коралло к середине 2013 года превратил концепцию в рабочий код bitcoinj.

Еще через год, в 2014 году, Алекс Аксельрод (теперь инженер Lightning Labs) первым предложил двунаправленный платежный канал. Алиса могла платить Бобу произвольное количество раз, а Боб, используя уменьшение таймлоков, мог платить Алисе в рамках одного и того же канала, хотя и ограниченное количество раз. Однако, в отличие от однонаправленных платежных каналов, это решение никогда не было реализовано в коде.

Первые концепции платежной сети

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

Корне Плой (теперь разработчик Lightning на нидерландской биткоин-бирже BL3P) также работал над платежным уровнем для Биткоина, который он впервые предложил в качестве грубой идеи в 2011 году.

 Хмари

Ранняя иллюстрация проекта платежного уровня Плоя, который впоследствии превратился в предшественника Lightning Network Amiko Pay. Источник: Корне Плой.

Благодаря предложениям, внесенным разработчиком Bitcoin Core и будущим техническим директором Blockstream Грегори Максвеллом, а также изобретателем Ripple Райаном Фуггером (среди прочих), эта идея с годами превратилась в слияние Биткоина и оригинальной технологии Ripple, в результате чего появилась система, названая Плоем Amiko Pay. Однако более ранние проекты Amiko Pay не использовали платежные каналы и, следовательно, внушали доверие к системе, однако: если б один пользователь вдруг отказался рассчитаться с другим пользователем, у последнего не было бы возможности обратиться за помощью.

Летом 2012 года математик и будущий соучредитель Bitcoin eBassy TLV Мени Розенфельд первым предложил платежную сеть, в которой использовались платежные каналы. На форуме Bitcointalk Розенфельд описал систему, в которой Боб (из приведенного выше примера) был заменен на платежного оператора, клиентами которого являются Элис и Кэрол. Платежный оператор, в свою очередь, мог также иметь каналы с другими платежными операторами, с большим количеством клиентов, превращая сеть платежных каналов в разветвленную систему.

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

Это решение всплывало пару раз на протяжении многих лет. Участник Bitcoin Core Питер Тодд, например, опубликовал концепцию в списке рассылки по разработке Биткоина в 2014 году. Между тем платежная система BitPay в начале 2015 года опубликовала официальный документ (Белую книгу) по аналогичным межканальным платежам («Импульс»). Также примерно в то же время подобное решение фактически внедрялось шведским стартапом Strawpay, под названием Stroem (или Ström), — но ни один из этих этапов разработки так и не принес значимых результатов.

Лого

Логотип ныне несуществующего стартапа в области микроплатежей Strawpay. Источник: Интернет-архив.

Относительно ранняя попытка создания «не требующей доверия» сети платежных каналов была предпринята Алексом Аксельродом. Решение Аксельрода, впервые описанное в wiki draft в 2013 году и нацеленное на внедрение в качестве proof of concept (доказательства концепции) в течение 2014 года, во многом помогло решить проблему на теоретическом уровне. Основная проблема заключалась в том, что на практике это все равно было бы довольно неуклюжим. Например, если платеж потерпит неудачу где-либо по маршруту транзакции, у пользователя не будет другого выхода, кроме как ждать, пока средства не будут освобождены через таймлоки платежного канала, что потенциально может занять месяцы.

Между тем, к 2015 году Amiko Pay развилась до такой степени, что потенциально могла работать «без доверия». Однако его проект потребовал бы относительно далеко идущих изменений в протоколе Биткоина, вплоть до того, что потребовался бы откат определенных типов транзакций. Хотя технически это возможно, не было очевидно, будут ли приняты такие изменения в протоколе Биткоина.

Позже в том же году исследователи из технического университета в Цюрихе (ETH Zurich), доктор Кристиан Деккер (теперь в Blockstream) и Роджер Ваттенхофер предложили еще один проект оверлейной сети в своем официальном документе (Белой книге) «Быстрая и масштабируемая платежная сеть с дуплексными каналами микроплатежей в биткоине». Их решение сильно зависело от таймлоков как своего рода «прибора обратного отсчета» для действительности платежного канала, что сочеталось с криптографическим приемом, называемым «деревом аннулирования», для просроченных балансов канала.

Решение Аксельрода, более поздние версии Amiko Pay и дуплексные каналы микроплатежей (DMCs) были в чем-то похожи на Lightning Network и могли бы работать сами по себе, идя на различные компромиссы. Если бы Lightning Network не была изобретена, любое из этих решений могло бы вместо этого стать основой базового уровня масштабирования Биткоина.

Но, конечно же, сеть Lightning была изобретена.

Сеть Lightning Network

После многих лет эволюции платежных каналов и сетей все кусочки головоломки, наконец, сложились в начале 2015 года.

Таддеус «Тадж» Драйя — технический директор платформы для торговли смарт-контрактами Mirror — и Джозеф Пун написали официальный документ (Белую книгу) под названием «Сеть Lightning Network для Биткоина: масштабируемые мгновенные платежи вне блокчейна», впервые опубликованный в феврале того же года.

Это стало переломным моментом.

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

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

Кроме того, Lightning Network использует хешированные контракты с таймлоками (временной блокировкой) (HTLC). Эта концепция обычно приписывается Теру Нолану и изначально была разработана для транзакций между блокчейнами; например, для обмена биткоинов и лайткоины «не требуя доверия». Вместо этого в Lightning Network это решение используется для связывания платежей между платежными каналами.

Пун и Драйя впервые публично представили свою идею на семинаре разработчиков Биткоина в Сан-Франциско в феврале 2015 года.

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

Сразу после этого второго повторения конференции в Гонконге Грегори Максвелл предложил дорожную карту масштабирования в списке рассылки по разработке Биткоина. Эта дорожная карта на ведущем месте включала сеть Lightning Network. Она получила поддержку большинства технического сообщества Биткоина и стал де-факто дорожной картой для проекта Bitcoin Core.

Если ожидание Lightning Network еще не было достаточно большим, то сейчас оно определенно появилось.

Проекты по внедрению

Белая книга сети Lightning Network — это длинный и сложный документ, охватывающий высокотехнологичные концепции; в 2015 году мало у кого было время и умение его прочитать и понять. Но общее понимание значительно возросло, когда об этой Белой книге узнал давний разработчик ядра Linux Расти Рассел. В серии публикаций, опубликованных в начале 2015 года, Рассел «перевел» это предложение для более широкой (но все же достаточно технической) аудитории.

Затем, в мае 2015 года, компания Blockstream, занимающаяся разработкой блокчейнов, наняла Рассела для разработки проекта по практическому внедрению Lightning на языке программирования C: c-lightning. Этот важный шаг к реализации оказался решающим. Концепция, которая была предложена всего пару месяцев назад, теперь находилась в процессе реализации разработчиком мирового уровня. Позже к Расселу присоединился Кристиан Деккер из Blockstream, в то время как другие разработчики, в том числе Корне Плой, в течение следующих нескольких лет также будут вносить свой вклад в данный проект с открытым исходным кодом.

Вскоре после того, как Рассел начал работать над c-lightning, Blockstream перестала быть единственной компанией, реализовавшей проект по внедрению Lightning. К лету 2015 года ACINQ, небольшая технологическая компания, занимающаяся Биткоином, которая изначально планировала разработать аппаратные кошельки на основе смарт-карт, также решила попробовать свои силы в многообещающей технологии. Парижский стартап позже объявит, что разработал собственный проект по внедрению протокола Lightning на языке программирования Scala под названием eclair.

Іграшки

Из анонса ACINQ об eclair. Источник: medium.com

Еще через пару месяцев в разработке находилась третья реализация. К январю 2016 года оба автора официального документа Lightning Network, Пун и Дрийя, вместе с Элизабет Старк и Олаолувой «Лаолу» Осунтокун основали совершенно новую компанию для разработки Lightning: Lightning Labs. Lightning Labs возглавит разработку lnd, проекта по внедрению Lightning на языке программирования Google Go (также известном как «golang»), который они уже начали разрабатывать еще до основания компании.

Примерно через год после основания компании, в конце 2016 года, Дрийя покинул Lightning Labs, чтобы вместо этого присоединиться к Инициативе цифровой валюты медиалаборатории Массачусетского технологического института, той же организации, в которой работают ведущий разработчик Bitcoin Core Владимир ван дер Лаан и несколько других участников Bitcoin Core. В Массачусетском технологическом институте Дрийя продолжал работать над проектом по внедрению Lightning, который он запустил в Lightning Labs и переименовал в lit; и lnd, и lit существуют сегодня. Lit отличается от lnd и других проектов по внедрению тем, что является кошельком и узлом, заключенными в одно целое; сегодня lit также поддерживает несколько монет одновременно с помощью опции конфигурации.

Кроме того, блокчейн-компания Bitfury, наиболее известная своим майнинговым пулом и оборудованием для майнинга, разветвила проект lnd на еще одну версию программного обеспечения. Уникальность этого форка заключается в том, что он пошел на компромиссы в проектировании, чтобы не требовалось исправления гибкости в сети Биткоина — подробнее об этом позже. Bitfury также внесла свой вклад в области маршрутизации транзакций, особенно в виде протокола под названием «Flare». (Однако разработка форка Bitfury lnd, похоже, на данный момент застопорилась.)

Кроме того, в 2016 году крупный поставщик кошельков Blockchain объявил, что разработал упрощенную версию Lightning Network под названием «thunder». Этот проект предполагал относительно большие компромиссы по сравнению с типичными проектами по внедрению Lightning, в первую очередь потому, что он требовал доверия к контрагентам в сети. Сделав этот компромисс, он смог запустить альфа-версию своего проекта уже весной 2016 года, задолго до какой-либо другой команды разработчиков. (Хотя в будущем thunder также может стать совместим с Lightning Network, разработка это проекта, похоже, пока также застопорилась.)

Через несколько дней после конференции «Масштабирование Биткоина - Милан», третьего проведения такой конференции, организованной в конце 2016 года, участники большинства проектов по внедрению Lightning собрались на то, что стало называться первым саммитом Lightning. Здесь они обсудили, как сделать все различные проекты по внедрению совместимыми, что в результате чего появилась спецификация протокола Lightning Network, получившая название «BOLT» (акроним от Basis of Lightning Technology, в переводе — основа технологии Lightning). В то время как Белая книга Lightning Network был теоретическим предложением, BOLT стал практической основой сети Lightning Network, какой мы ее знаем сегодня.

Изменения протокола

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

Первыми из них были новые таймлоки (временные блокировки), которые сделают  платежные каналы устойчивыми к ошибке гибкости, характерной для Биткоина. Однако эта проблема уже находилась в процессе решения еще до публикации официального документа Lightning Network и была окончательно решена в 2015 году, когда в протоколе Биткоина был реализован новый тип временной блокировки, разработанный и предложенный Питером Тоддом: CheckLockTimeVerify (CLTV).

Позже разработчики Bitcoin Core поняли, что Lightning Network будет работать еще лучше с относительными таймлоками. Они позволяют пользователям блокировать биткоины на определенный момент времени после подтверждения другой транзакции. В контексте Lightning пользователи могут держать свои платежные каналы открытыми на неопределенный срок, тогда как таймлоки CLTV требуют, чтобы они периодически закрывали свои каналы. Софтфорк для реализации относительных таймлоков, называемый CheckSequenceVerify (CSV), был разработан участниками Bitcoin Core BtcDrak, Эриком Ломброзо и Марком Фриденбахом и активирован в сети Биткоина летом 2016 года.

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

На момент публикации технического описания Lightning Network гибкость считалась большой проблемой. Несмотря на то , что в, то время готовился проект софтфорка, чтобы соответствующие коррективы, разработчики не были уверены, что это сработает, и думали, что вместо этого может потребоваться хардфорк. Затем, к концу 2015 года, участники Bitcoin Core поняли, что такое средство исправления гибкости как SegregatedWitness (SegWit), бывшее частью проекта «Elements» от Blockstream, может быть развернуто на Биткоине в качестве обратно совместимого софтфорка.

После долгой борьбы софтфорк Segregated Witness, наконец, был активирован летом 2017 года, что также проложило путь для Lightning Network относительно Биткоина.

Альфа-версия

Несмотря на то, что Segregated Witness еще не был развернут на протоколе Биткоина (и не было полной уверенности, что он когда-либо будет), разработка Lightning Network шла полным ходом.

Это началось в тестовой сети, копии сети Биткоина, специально разработанной для целей тестирования. Или, точнее, в данном случае Lightning Network начала со специальной версии тестовой сети, получившей название «SegNet 4» (это была четвертая тестовая сеть для SegWit), запущенной в мае 2016 года.

Менее чем через шесть месяцев после развертывания SegNet 4, в октябре 2016 года, команда разработчиков Blockstream усовершенствовала свой прототип c-lightning до такой степени, что его можно было использовать. В ходе так называемого «Первого удара Молнии» (молния - англ. lightning) Деккер «купил» у Рассела изображение кота, используя биткоины тестовой сети в ранней версии Lightning Network.

Коти

Изображение кота, которое Кристиан Деккер «купил» у Расти Рассела. Источник:: Blockstream.com

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

Эта альфа-фаза, в свою очередь, привела к росту числа разработчиков, создающих программы (англ. applications или apps) на основе lnd и других проектов по внедрению Lightning. Эти «Lapps», как стали называть эти проекты, варьировались от компьютерных (для настольных ПК) и мобильных кошельков до платформ для ведения блогов с микроплатежами, сайтов с азартными играми, программ анализа и многого другого, хотя в большинстве случаев они по-прежнему были предназначены для тестовой сети Биткоина.

Летом 2017 года Segregated Witness, наконец, было активировано, и фундамент для Lightning Network для Биткоина был заложен. С тех пор Blockstream потребовалось около трех месяцев, чтобы объявить о своей первой транзакции в сети Биткоина. Чуть позже, в ноябре, Lightning Labs совершила свою первую транзакцию Lightning между блокчейнами: от Биткоина до Лайткоина. А в декабре команды разработчиков из Blockstream, Lightning Labs и ACINQ объявили об успешном проведении тестов на функциональную совместимость (интероперабельность).

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

Еще через месяц Blockstream — пока проект по внедрению c-lightning все еще находился в стадии бета-тестирования — открыла интернет-магазин, в котором настоящие продукты можно было купить за настоящие биткоины, хотя и с четким предупреждением о связанных с этим рисках. А в феврале 2018 года, в почти поэтическом завершении альфа-стадии Lightning, легенда Биткоина Лазло Хейниц, известный как «Биткоин-пицца», объявил, что он купил пиццу (конечно!) через Lightning Network.

Ласло Ханеч

Лазло Хейниц наслаждается своей пиццей. Источник: http://eclipse.heliacal.net/~solar/bitcoin/lightning-pizza/

Бета-версия

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

В середине марта 2018 года lnd от Lightning Labs стало первым проектом по внедрению Lightning, выпущенным в бета-версии. Объявив об этом одновременно с раундом начальных инвестиций на сумму $2,5 млн, в котором участвовали известные инвесторы, такие как генеральный директор Twitter Джек Дорси, Lightning Labs сочла проект по внедрению Lightning, который она возглавляла, готовым к использованию в основной сети Биткоина, хотя в первую очередь для технически образованных пользователей.

За этим объявлением 28 марта последовал твит от ACINQ, в котором сообщалось, что eclair также был выпущен в бета-версии и, таким образом, считается готовым к использованию в основной сети. Стартап добавил, что их кошелек Android Lightning будет выпущен вскоре.

Проект по внедрению c-lightning от Blockstream еще не был выпущен в бета-версии, хотя команда разработчиков сообщила журналу Bitcoin Magazine, что вскоре это может произойти. Тем не менее, компания-разработчик блокчейна, добавившаяся к постоянно растущему списку, представила семь совершенно новых Lapps в последнюю неделю марта, подчеркнув прогресс компании на фронте Lightning.

Хотя люди уже использовали программное обеспечение Lightning даже в альфа-версии, бета-фаза только еще больше стимулировала этот рост. На момент публикации этой статьи более 1000 узлов Lightning открыли почти 5000 платежных каналов, в совокупности содержащих более 10 биткоинов. Сотни новых узлов подключаются к сети каждый день, и даже формируется сеть Lightning для Litecoin, которая в будущем может быть интероперабельной с сетью Биткоина.

Шаринг

Графическое изображение сети Lightning Network на момент публикации. Источник: lnmainnet.gaben.win

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

Скорее всего, на них ответит только дальнейшее принятие.

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