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

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



Историю Lightning Network можно проследить почти с момента появления самого биткоина.

Первым кусочком пазла Lightning Network стала концепция так называемых платёжных каналов. Платёжные каналы — это, по существу, балансы биткоина между двумя пользователями, о которых не должен знать остальной мир. Важно отметить, что эти балансы могут быть обновлены без каких-либо транзакций в блокчейне: баланс одного пользователя должен увеличиться, а другого — уменьшиться на ту же сумму. Это позволяет обоим участникам совершать транзакции между собой, не обременяя сеть лишними данными.

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

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

Примерный код платёжного канала, включённый в Bitcoin 0.1. Источник: GitHub

В приватной переписке с будущим биткоин-разработчиком Майком Хирном Сатоши Накамото рассказал подробности того, как могут работать платёжные каналы. В 2013 году в рассылке для биткоин-разработчиков Хирн опубликовал объяснения принципа работы платёжных каналов от Сатоши Накамото.

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

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

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

В начале 2013 года появилась похожая идея, и на этот раз ей удалось вырваться из теоретической сферы. В апреле концепцию платёжного канала в рассылке биткоина представил Джереми Спилман. Он даже подготовил правила и нормы для доказательств концепции. Эта разработка в свою очередь была изменена Майком Хирном, а в 2013 году будущий участник Bitcoin Core, соучредитель Blockstream и разработчик Chaincode Labs Мэтт Коралло превратил концепцию в рабочий код для биткоина.

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

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

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

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

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

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

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

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

На протяжении многих лет о решении Розенфельда вспоминали всего пару раз. Например, докладчик Bitcoin Core Питер Тодд опубликовал эту концепцию в рассылке для разработчиков биткоина в 2014 году. Платёжный процессор BitPay опубликовал white paper по аналогичным межканальным платежам (Impulse) в начале 2015 года. Тогда же подобное решение под названием Stroem планировал запустить шведский стартап Strawpay. Однако в действительности ни одна из этих итераций не была реализована значимым образом.

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

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

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

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

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

Однако появилась Lightning Network.

Lightning Network

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

Тадеуш «Тадж» Дрижа, технический директор торговой платформы для смарт-контрактов Mirror, и Джозеф Пун написали white paper под названием «Lightning Network для биткоина: масштабируемые мгновенные платежи вне блокчейна», впервые опубликованный в феврале того же года.

Их детище полностью изменило ход игры.

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

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

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

Пун и Дрижа впервые представили свою идею на биткоин-семинаре в Сан-Франциско в феврале 2015 года:

Весной и летом 2015 года проблема масштабирования биткоина и размер блоков стали поводом для публичного конфликта. В разгар кризисной атмосферы в конце 2015 года была организована серия из двух конференций: Scaling Bitcoin Montreal в сентябре и Scaling Bitcoin Hong Kong в декабре. В Монреале Пун и Дрижа представили идею Lightning Network, затем в Гонконге они устроили вторую, более глубокую презентацию.

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

Реализацию Lightning Network стали ждать с огромным нетерпением.

Реализации

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

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

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

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

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

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

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

После третьей конференции Scaling Bitcoin Milan в конце 2016 года участники большинства реализаций Lightning собрались на первый Lightning Summit. Здесь они обсудили вопрос о том, как сделать различные реализации совместимыми, и в результате спецификация протокола Lightning Network получила название BOLT (Basis of Lightning Technology). Если white paper LN стал теоретическим предложением, то BOLT — реальной основой сети Lightning Network, какой мы знаем её сегодня.

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

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

Первыми изменениями были новые временные замки, которые сделали платёжные каналы устойчивыми к ошибкам, связанным с приспосабливаемостью биткоина. Решение этой проблемы шло полным ходом ещё до публикации white paper, и она была окончательно решена в 2015 году, когда в протоколе биткоина реализовали новый тип временных замков, предложенный Питером Тоддом, — CheckLockTimeVerify (CLTV).

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

Однако самым большим изменением протокола, которое требовала LN (по крайней мере для продвинутых пользователей), было исправление приспосабливаемости биткоина к любым транзакциям.

Во время публикации white paper от LN приспосабливаемость считалась большой проблемой. Несмотря на то, что тогда шла подготовка софтфорка, разработчики не были уверены, что он поможет, и не исключали, что потребуется хардфорк. К концу 2015 года участники Bitcoin Core поняли, что SegWit — исправление приспосабливаемости, которое было частью Elements Project от Blockstream, — может быть развёрнуто и для биткоина как обратно совместимый софтфорк.

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

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

Даже когда SegWit ещё не был введён в протокол биткоина (и не было полной уверенности, что это произойдёт), разработки Lightning Network продолжались.

Испытания были начаты в специально разработанной тестовой сети биткоина. Точнее, Lightning Network запускалась в специальной версии тестовой сети SegNet 4 (в четвёртой версии тестовой сети для SegWit, которая была развёрнута в мае 2016 года).

К октябрю 2016 года прототип c-lightning от команды разработчиков Blockstream стал пригодным для использования. С помощью ранней итерации LN под названием Lightning First Strike Кристиан Декер «купил» картину с кошками у Рассела, используя условные биткоины тестовой сети.

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

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

Альфа-стадия в свою очередь привела к росту числа разработчиков, создающих приложения поверх lnd и других реализаций Lightning. Их приложения, условно названные Lapps, включали настольные и мобильные кошельки, платформы микрокредитования, азартные игры, программы для анализа и многое другое, хотя в большинстве случаев они всё ещё предназначались для тестовой сети биткоина.

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

Более того, к концу 2017 года некоторые пользователи начали фактически использовать LN в сети биткоина для транзакций с реальными деньгами, в некоторых случаях даже в обход рекомендаций разработчиков. Количество каналов LN увеличилось, и к декабрю разработчик Алекс Босуорт оплатил свой телефонный счёт через платёжный канал LN, настроенный для платёжного процессора Bitrefill, и это была одна из первых покупок за реальные деньги в сети LN.

Ещё через месяц компания Blockstream, c-lightning которой всё ещё была в бета-версии, открыла интернет-магазин, где можно купить реальные продукты с помощью биткоинов (хотя и с явным предупреждением о рисках). А в феврале 2018 года, закрывая альфа-стадию LN, легендарный Ласло Ханич объявил, что купил пиццу (а что же ещё?) с использованием сети LN.

Ласло Ханич наслаждается своей пиццей

Бета-версия

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

В середине марта 2018 года lnd компании Lightning Labs стала первой реализацией LN в бета-версии. (Тогда же компания объявила о привлечении $2,5 млн. от крупных инвесторов, таких как CEO Twitter Джек Дорси.) Lightning Labs представила реализацию LN как готовую ​​для использования в сети биткоина — хотя с оговоркой о том, что продукт прежде всего предназначен для технически продвинутых пользователей.

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

Реализация Blockstream c-lightning ещё не выпускалась в бета-версии, хотя команда разработчиков сообщила Bitcoin Magazine, что вскоре это должно произойти. Кроме того, недавно компания представила семь новых Lapps (приложений LN), и это также подчёркивает её прогресс.

Хотя люди уже использовали ПО LN в альфа-версии, бета-фаза дополнительно привлекла новых желающих испытать и использовать эти реализации. На момент подготовки статьи более 1000 узлов Lightning Network уже открыли почти 5000 платёжных каналов, в совокупности удерживая более 10 биткоинов (более $71 000 на момент подготовки материала). Сотни новых узлов ежедневно выходят в интернет, в то время как формируется и сеть LN для лайткоина, которая в будущем может стать совместимой с сетью биткоина.

Сеть Lightning Network во время подготовки данного поста. Источник: lnmainnet.gaben.win

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


Report Page