BTC

BTC

Подписаться на канал CryptoNews

Lightning может решить проблему масштабируемости Биткойна — Часть 1.

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

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

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

Изначально такой замысел был важен для реализации задуманной Накамото полностью децентрализованной платёжной сети. Но, как сказал специалист по компьютерным наукам из Университета Пердью Педро Морено-Санчес, когда сеть становится более популярной, это создаёт большую проблему. «Мы достигли стадии, когда дальнейший рост нецелесообразен», – сказал он.

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

Фактически проект Lightning потенциально может сделать намного больше. Ожидается, что платежи Lightning будут более быстрыми, дешёвыми и конфиденциальными, чем обычные платежи Биткойна. Сторонники рассматривают Lightning как новый, второй уровень программного комплекса Биткойна. Они надеются, что Lightning увеличит привлекательность Биткойна, точно так же как веб помог обрести популярность интернету.

Ключевые идеи Lightning выдвинули в whitepaper за 2015 г. Джозеф Пун и Таддеус Драйджа, но понадобилось три года, чтобы превратить их предложения в полноценный рабочий код. Сегодня три разных компании – стартапы из Сан-Франциско Blockstream и Lightning Labs и парижский стартап ACINQ – работают над параллельной реализацией технологии Lightning. В декабре трио опубликовало версию 1.0 спецификации Lightning, и теперь компании спешат сделать их ПО готовым для использования широкой публикой.

Так что же ждёт Биткойн после запуска Lightning? Важно сначала понять, как Lightning использует криптографические элементы сети Биткойна для совершения безопасных платежей вне блокчейна (вам повезло – мы это объясним). После этого мы рассмотрим возможные ключевые преимущества и недостатки, которые будет иметь новая сеть после её широкого внедрения.

Основная идея Lightning: связать платёжные каналы

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

С точки зрения Lightning старомодная сеть Биткойна становится криптографической опорой для этих платёжных каналов. Транзакции платёжных обязательств (commitment transaction) фактически представляют собой хитроумно форматированные биткойн-транзакции, которые пока не отправлены в сеть Биткойна. У пользователя всегда есть опция «обналички» путём передачи текущей транзакции обязательств в блокчейн и получения денег, на которые он имеет право.

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

Поэтому сеть Lightning предоставляет криптографически защищённый метод связывания платёжных каналов. Если у Алисы есть платёжный канал с Бобом, а у Боба – с Кэрол, то Алиса может заплатить Кэрол, переслав деньги Бобу и попросить его перенаправить деньги Кэрол. Важно, что протокол Lightning гарантирует, что Боб не может похитить деньги, когда они проходят через его руки.

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

Как работают платёжные каналы

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

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

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

В Биткойне есть язык сценариев, позволяющий задавать в транзакциях условия расходования выходов любой сложности. Допустим, у Алисы есть ещё один друг, Чарли. Она может создать транзакцию Биткойна с выходом, говорящим: «Эти три биткойна можно потратить только с помощью подписей Боба и Чарли одновременно». Чтобы разблокировать эти средства, Боб и Чарли должны договориться о создании единственной транзакции Биткойна, подписанной обоими приватными ключами.

Если с этим разобрались, то вот как работает платёжный канал. Допустим, Алиса и Боб хотят открыть платёжный канал с 10 биткойнами – 5 от Алисы и 5 от Боба. Алиса и Боб создают транзакцию Биткойна, берущую 5 биткойнов у Алисы и 5 у Боба. У транзакции есть один выход с условием двух подписей: чтобы потратить 10 биткойнов, транзакцию должны подписать и Алиса, и Боб.

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

Затем – и это важный шаг – они отправляют в сеть только первую транзакцию. Таким образом, 10 биткойнов фактически оказываются на общем счёте, совместно контролируемом Алисой и Бобом. Если кто-то из них захочет вернуть свои биткойны, они могут отправить в сеть вторую транзакцию. Но пока никто из них этого не сделал, канал остаётся открытым, и Алиса и Боб могут пересылать друг другу биткойны, не отправляя ничего в блокчейн.

Если Алиса хочет отправить Бобу 1 биткойн, она создаёт новую транзакцию обязательств. Вместо того чтобы возвращать Алисе и Бобу по 5 биткойнов, в новой транзакции обязательств говорится: «4 биткойна Алисе, 6 биткойнов Бобу».

Алиса подписывает эту транзакцию обязательств и передаёт её Бобу, который подписывает её и возвращает. Алиса и Боб удаляют свои копии предыдущей транзакции обязательств (дававшей Алисе и Бобу по 5 биткойнов). Теперь Бобу «принадлежит» 6 биткойнов, а Алисе – 4 биткойна, причём в блокчейн ничего не передаётся.

Алиса и Боб могут повторять этот процесс неограниченное количество раз. Допустим, Боб захочет заплатить Алисе 3 биткойна. Он создаёт новую транзакцию, говорящую: «7 биткойнов Алисе, 3 биткойна Бобу», подписывает и отправляет её Алисе. Она подписывает её и возвращает. Они удаляют свои копии предыдущей транзакции, и теперь Алисе фактически принадлежит 7 из 10 биткойнов канала. Опять же, в блокчейн ничего не передаётся.

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

Как Lightning отменяет старые транзакции обязательств

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

Поэтому, если текущая транзакция обязательств говорит: «4 биткойна Алисе, 6 биткойнов Бобу», – Бобу есть смысл беспокоиться о том, что Алиса могла сохранить копию предыдущей транзакции обязательств: «5 биткойнов Алисе, 5 биткойнов Бобу». Если она отправит в блокчейн эту устаревшую транзакцию, то фактически украдёт у Боба 1 биткойн.

Для предотвращения подобного протокол Lightning структурирует транзакции обязательств так, что любой, кто отправит устаревшую транзакцию, заплатит суровый штраф. Фактически Алиса и Боб получают немного отличающиеся версии каждой транзакции обязательств. Обе версии отправляют каждой стороне одинаковое количество монет (в нашем примере – 5 биткойнов Алисе и 5 Бобу). Но в копии Алисы к 5 биткойнам Алисы добавляются одни строки, а в копии Боба к 5 биткойнам Боба добавляются другие строки.

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

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

Всё это возможно благодаря упоминавшемуся языку сценариев Биткойна. Он позволяет задавать сложные правила, такие как: «Эти биткойны могут быть получены с помощью подписи Алисы после добавления в блокчейн 1000 блоков или мгновенно с помощью подписи ключа R».

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

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

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

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

Как Lightning связывает платёжные каналы

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

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

Таким образом, допустим, у Алисы открыты платёжные каналы с Бобом и Бетани, у Боба – с Чарли и Конни, у Чарли – с Дональдом, Дэйзи и Дагом и т. д. Если Алиса хочет заплатить Дэйзи, она просит Боба и Чарли помочь – и предлагает компенсировать им беспокойство. Она отправляет биткойны Бобу по их взаимному платёжному каналу. Боб отправляет то же количество биткойнов Чарли (минус комиссия по договорённости), который, в свою очередь, отправляет биткойны Дэйзи.

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

Это работает следующим образом. Дэйзи выбирает случайное значение, которое мы назовём P (от «pre-image» – прототип), и пропускает его через необратимую 

хеш-функцию, получая хешированное значение, которое мы назовём H. Затем Дэйзи отправляет H Чарли, который передаёт его по цепочке Бобу, а тот передаёт его Алисе.

Теперь Алиса и Боб подписывают криптографический контракт (HTLC), говорящий, что Алиса заплатит Бобу, если Боб способен предоставить значение, хешем которого является H. Хеш-функции необратимы, поэтому Боб сможет выполнить это требование только в том случае, если Дэйзи или Чарли сообщит ему P.

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

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

В этой последовательности никто не рискует остаться с носом. Алиса знает, что Дэйзи никому не раскроет P, пока не будет завершена полная платёжная цепочка, – иначе Дэйзи не получит свой платёж. Поэтому Алиса может безопасно подписать контракт с Бобом. Контракт Боба с Алисой гарантирует, что он получит свои деньги, если узнает P, что позволяет ему уверенно дать такое же обещание Чарли. Затем Чарли, в свою очередь, может с уверенностью пообещать заплатить Дэйзи в обмен на P.

И после того как все эти контракты заключены, они выполняются блокчейном.

Хешированные контракты блокировки по времени выполняются блокчейном

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

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

Этот третий выход может быть погашен двумя разными способами, запрограммированными на языке сценариев Биткойна. Он может быть обналичен Бобом, если он предоставит значение, хешем которого является H, или же он может быть обналичен Алисой – но только по прошествии нескольких дней.

Как только Боб сообщит Алисе P, они могут закрыть контракт, заменив транзакцию обязательств с тремя выходами новой транзакцией обязательств с двумя выходами, отражающей новый баланс канала.

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

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

Таким образом, платёжная цепочка не состоялась – Дэйзи не получит платёж от Алисы. Но Боб и Чарли, возможно, предпочтут не закрывать свой канал, то есть не передавать транзакцию обязательств в блокчейн. Они могут отменить свой контракт, просто создав новую транзакцию обязательств, отменяющую выход HTLC и зачисляющую биткойны Бобу. Тот факт, что контракт Чарли с Бобом действует на день дольше, чем контракт Чарли с Дэйзи, гарантирует, что у Боба и Чарли будет для этого достаточно времени.

На этом мы заканчиваем первую часть статьи о том, как сеть Lightning поможет разрешить проблему масштабируемости Биткойна. Подписывайтесь на БитНовости, чтобы не пропустить продолжение.

Подписывайтесь на наш канал CryptoNews, чтобы всегда быть в кусре последних событий из крипто мира!

Report Page