Давно я не писал статеек для своего блога. Но получив недавно письмо от благодарного читателя — понял, что читатели у меня есть и моя работа всё таки нужна 😉
В этом посте речь пойдёт про такую замечательную технологию как Bitcoin Lightning Network (в переводе «сеть-молния», или «лайтнинг сеть»). Это дополнительный «слой» для сети Биткойн, который захватывает меня не меньше, чем Bitcoin. С помощью этой сети, которая также пересылает биткойны, можно отправлять миллионные и миллиардные доли биткойна за комиссии, не превышающие сотые доли процента. Но что не менее важно — не надо ждать подтверждений сети, чтобы быть уверенным, что платёж вами получен окончательно! И это всё работает прямо сейчас! Я часто тестирую кошельки этой технологии, и практически полностью перешёл на оплату многих покупок именно в этой сети.
Для начала я хочу описать простым языком — как это работает. Затем напишу пост о конкретных кошельках, как платить и где что можно купить.
Итак, представьте себе стол, на нём две чашки, между ними прокинута трубочка и у ней есть насосик. Одна чашка у вас, другая, скажем, у Васи. Но ваша чашка наполнена до краёв водой, а у Васи пуста. И да — чашки одинаковые по ёмкости. Итак — это пример «канала» для сети Lightning Network. Вода здесь символизирует биткойн и любую дробную его часть.
Ваша чашка — это средства на вашей стороне, а чашка Васи — его средства. Поскольку в нашем примере у вас есть вода, а у Васи нет, то вы имеете канал со средствами на вашей стороне. И инициатором открытия канала были вы — то есть вы нашли незнакомого Васю, решили с ним открыть канал, а поскольку биткойн на дороге не валяется, то как правило инициатор открытия канала для начала кладёт свои средства в канал. И после этого вы можете платить Васе или кому либо ещё через Васю.
Итак, канал открыт. На стороне Васи воды нет — он платить вам не может. А вы можете и можете заплатить любое количество, которое есть в вашей чашке: хоть каплю, хоть чайную ложку и более. Для оплаты вы просто переливаете водичку по трубочке в чашку Васи.
Предположим, что мы перелили столовую ложку Васе. У нас убыло, а него прибыло. После он может заплатить в вашу сторону, любое количество до столовой ложки. А вы, что немаловажно, можете принять до одной столовой ложки. Но не более и думаю понятно, почему.
Вот, собственно и всё, что нужно представлять себе, как работает канал в Lightning. Теперь немного усложним — предположим, вы хотите заплатить Пете, но у вас только есть канал с Васей. В Lightning вы можете сделать несколько вариантов для оплаты:
- Можно создать отдельный канал с Петей, то есть взять одну новую чашку, Петя также ставит на своей стороне чашку, вы наливаете водичку (можно половину чашки), а у Пети будет пустая чашка и он может принять от вас платёж. Это не очень удобно, так как вам нужна новая порция воды, а вы, например, имеете уже нужное количество в чашке канала с Васей.
- Можно заплатить через Васю, если у Васи уже есть канал с Петей и в чашке у Васи для Пети есть нужное количество водички.
Вариант 2 называется маршрутизацией. И он сейчас уже работает. И работает хорошо в сети Lightning. Он предпочтительный, так как вам не надо открывать канал с Петей, если можно заплатить через Васю.
Тут стоит упомянуть, что открытие канала занимает какое-то время, пока платёж пополнения канала не наберёт 3-5 подтверждений сети биткойна (обычно до часа). Поэтому, если у вас есть уже открытый канал с другим узлом, лучше использовать его, чтобы не тратить час и средства на новый канал.
Итак, продолжем. В варианте, когда мы платим Пете через Васю, Вася скорее всего возьмёт какую-то комиссию (а может и не взять, если он добрый). Это мотивация для него, так как для пересылки мы используем средства Васи в другой его чашке. Но есть разница с комиссиями — в сети Биткойн они постоянны и не зависят от суммы платежа, а в сети Lightning строятся на основе суммы и базовой величины, но обычно они не превышают 0.01-0.02% от суммы. Если сумма платежа очень маленькая, то процент может вырасти за счёт базовой величины, которая берётся всегда. Все комиссии определяются каждым узлом сети отдельно его владельцами.
Ещё у канала есть две фазы — открытие и закрытие. Открыть канал — это поставить чашки и налить в одну из них водичку. Закрытие — это каждая из сторон вытаскивает трубочку между чашками и каждый сливает водичку из своей чашки — у каждого своя водичка — это свои средства, оставшиеся после работы канала. И что ещё принято в Lightning — канал можно оставлять открытым очень долго — месяцы и годы. Пока он открыт — вы можете «гонять» водичку между чашками туда-сюда. Причём, как я уже описал выше, не обязательно вы должны расплачиваться только с той стороной, которая имеет чашку на противоположной стороне. Вы можете платить другим людям, которые находятся через несколько человек, если по пути в нужном направлении у каждого есть чашка с нужным объёмом воды для вашего платежа.
Открытие и закрытие канала, которое происходит редко — это отдельные транзакции в сети биткойна. Причём очень короткие. Есть заблуждение у людей, которые слышали ранее о технологии Lightning, но не знакомы с ней детельно. Они думают, что закрытие канала создаёт большую транзакцию, если вы платили через канал разным сторонам. Мол раз мы платили, скажем десятерым контрагентам — то закрытие канала формирует финальную транзакцию для десятерых получаетелей. Нет! Помните, что у нас канал имеет только одну чашку у вас, и другую на другой стороне? Вот только эти две стороны и «расчитываются» между собой, и не важно, сколько платежей вы платили через этот канал — прямо или косвенно.
Из всего описанного следует, что платежи в Lightning сети — это списания средств с одной стороны, и приписывание средств с другой. Я приводил пример с чашками, но можно весь процесс представить несколько иначе. Например, представим полоску. В ней есть один бегунок. Слева вы, справа Вася. Когда вы открываете канал и кладёте средства — бегунок находится в самом правом положении. Всё, что от левого края (где вы) до бегунка — ваши средства, а всё что от правого края до бегунка — средства Васи. В таком случае платёжи — это просто смещения бегунка влево-вправо на величину платежа.
Как это всё работает изнутри и могут ли вас обмануть незнакомые люди, с которыми вы создали канал? Нет, по крайней мере уязвимостей в протоколе не найдено. Он не требует доверия. Может возникнуть вопрос — зачем тогда нужен биткойн с его майнингом, который сжигает кучу электричества? Платежи Lightning не будут работать без Биткойна, потому что безопасность и надёжность платежей всё равно опирается на модель Биткойна. А именно — когда вы открываете или закрываете канал — здесь то и происходит «опора» на сеть биткойна с его майнингом. Сеть биткойна и его экосистема — это гарант того, что ваши каналы существуют и средства могут быть возвращены назад.
Как это всё работает? Я читал документацию, скажу, что для меня понять это оказалось сложнее, чем работает биткойн, но общие принципы мне понятны. Вам могу сказать простыми словами, что каждый платёж в сети Lightning — это многоходовая комбинация подписи транзакций, часть из которых (из транзакций) создаётся как страховка от мошенничества и хранится на случай обмана вас другой стороны. Софт, пересылая мизерный платёж в канале, за кулисами, делает около 3-4 транзакций с каждой стороны, часть которых он посылает противоположной стороне как гарантию от обмана другой стороны. Также там есть обмен секретными ключами, которые использовались в предыдущем платеже. Обманом может быть следующее: когда вы и Вася переливаете друг другу водичку, старые операции устаревают, но подписанные транзакции о старых операциях есть у каждой стороны. И у обеих сторон должна быть страховка, что старые транзакции не будут пущены в сеть при закрытии канала, так как тогда какая-то сторона потеряет часть средств, а другая сторона наживётся. Вот образный пример: вы открыли канал, налили водичку. Затем вы делаете первый платёж и переливаете Васе две столовые ложки. Вася становится обладателем двух столовых ложек. Пока канал открыт — внешний мир, за исключением вас и Васи, не знает о количестве воды в каждой чашке. Он узнает только после закрытия канала через те транзакции, которые есть у каждой стороны после каждого платежа друг другу (только в норме они не посылаются в сеть биткойна, а хранятся «запазухой» всё время до закрытия канала). Итак, Вася имеет две столовые ложки. Во время этого платежа ваш софт и софт Васи обменялись транзакциями на случай закрытия канала вами или Васей. В сети каждый может закрыть канал в любое время, даже когда Вася отошёл, или что ещё хуже — он исчез. Поэтому даже после первого платежа у вас будет готовая транзакция, которая может быть отправлена в сеть вами, где вы забираете почти всю чашку, за исключением двух столовых ложек. И Васей, где он заберёт эти две ложки. Но вот Вася решил заплатить через ваш канал, вам или кому либо ещё, столову ложку (из двух). Это вторая операция и она также формирует 3-4 транзакции у каждой стороны, за сценой, в софте кошельков. Но! Старые транзакции существуют у каждого. В первой транзакции Вася владел двумя ложками, а во второй — только одной. А вдруг он решит закрыть канал и отправит в сеть биткойна старую транзакцию «вот мои две ложки из этого канала!»? Ему ведь это могло бы быть выгодно — лучше получить две ложки, чем одну после второго платежа. Чтобы такого не было, каждый следующий платёж формирует страховочные транзакции от посылки предыдущих, причём противоположная сторона получает «секретные ключи» предыдущей сессии другой стороны. Ключи постоянно создаются новые для каждого платежа. И каждая сторона держит в секрете, пока не делается следующий платёж. Тогда создаются новые ключи, а старые отдаются. И если одна сторона пытается обмануть другую и послать старые балансы, где можно «наварить» больше «бабла», чем есть — другая сторона, которая постоянно должна «мониторить» биткойн, видя, что её пытаются обмануть — имеет штрафную транзакцию, которая тут же забирает все средства другой стороны из канала. То есть если Вася попытается обмануть и, имея одну ложку в чашке, вдруг говорит всем, что у него две ложки (которые действительно были в первом платеже) — наш софт тут же отправляет финальную транзакцию, подписанную Васей, где все его средства, включая наши, отправляются к нам, а не к нему. И он теряет одну ложку. Благодаря такой технике, лучше от греха подальше, каждой стороне выгодно стирать из памяти у себя все старые транзакции, чтобы случайно не отправить старый статус. Ведь иначе её накажут на все средства. Есть другие страховочные транзакции, уже не на все средства. Например, когда другая сторона вдруг пропадает, а вы решаете закрыть канал.
Что ещё надо знать о каналах? Закрытие канала существует в двух вариантах: кооперативное и некооперативное. Когда Вася сидит рядом и согласен в нужный вам момент закрыть канал — это будет кооперативное закрытие. Оно быстрое, и если обе стороны в онлайне — тогда тут же каждый получает свои причитающиеся биткойны. Если Вася ушёл куда-то и его нет, а вам надо закрыть канал, то это будет некооперативное закрытие. Оно длится дольше, и средства из канала получаются дольше, скажем день-два. В некоторых случаях может быть и неделя, но это если есть «зависшие платежи». Но в любом случае Lightning даёт вам возможность закрыть канал, даже если Вася пропал навсегда.
Давайте подведём итоги:
- Канал — это соединение точка-точка, а платежи в нём — обновление балансов на каждой стороне — тут прибыло, там убыло. Всё это работает только между двумя сторонами и не нагружает сеть биткойна.
- Через канал нельзя отправить больше, чем есть средств в канале у стороны отправителя.
- Есть ограничения — из-за потенциального мошенничества каждая из сторон должна «мониторить» сеть биткойна на предмет закрытия канала со старым балансом, где вы можете получить меньше, чем вам причитается. С одной стороны это ограничивает мобильные кошельки (мобильник не может всё время контролировать в онлайне сеть — просто сядет батарея). Но есть и хорошие новости — эту функцию контроля можно доверять сторонним сервисам, что и делается. Поэтому Lightning уже сейчас хорошо работает на мобильных устройствах.
- Из пункта 3 следует простое правило — если вы только платите, но не получаете, то вам не обязательно постоянно мониторить сеть биткойна от мошенничества с другой стороны. Всё что может сделать противоположная сторона — послать старую транзакцию, где ваш баланс был больше, чем сейчас (вы же только платите и каждая следующая оплата только снижает ваш баланс в канале). Поэтому, если вы только платите, можно не контролировать сеть, а если другая сторона пошлёт старую трнакзакцию для закрытия канала — вы только выйграете (а та сторона на ту сумму проиграет). Если же вы имеете кошелёк, который ещё и получает платежи, вам или стороннему сервису, который постоянно в онлайн, нужно контролировать биткойн сеть. Такие кошельки есть и успешно работают.
- В сеть биткойна записывается только две транзакции: открытие и закрытие канала. Сам канал может быть открыт месяцами.
- Комиссии очень мизерные, определяются каждой стороной и могут быть вообще нулевыми. А всё потому, что они не пишутся в блокчейн.
- Платёжи проходят мгновенно — доли секунды или считанные секунды. После средства переведены окончательно, и не могут быть потрачены дважды.
- Как и с биткойном — всё необходимое для получения и отправки платежей может быть запущено вами, без посредников. Никаких документов, сканов паспортов, не надо открывать счёт, не надо иметь телефон и email. Вы просто запускаете ноду и всё. Или просто ставите мобильное приложение.
- Для получения платежей нужно, чтобы выполнялись два простых условия: был открыт канал, и чтобы на противоположной стороне канала был положительный баланс в канале (была водичка в чашке). В таком случае вы можете принять сумму до того количества, что есть на другой стороне. Ну и если там нет средств, то вам достаточно потратить средства со своей стороны, чтобы начать принимать платежи.
Из последнего правила вытекает следующее. Если вы решили запустить интернет магазин и принимать Lightning платежи, вам надо иметь канал, где есть средства на противоположной стороне канала. Этого можно достичь разными способами. Самый простой и одновременно не всегда простой — надо, чтобы кто-то создал на вас канал, положив в него свои биткойны. Не так давно это было крайне сложно, но сейчас у сервиса Bitrefill появилась услуга Thor — им можно заплатить $2-3 отличным от Lightning способом (или даже им, например за вас кто-то может заплатить), а они откроют на вас канал в 30 раз больше суммы платежа (то есть они берут 3-4% от суммы канала). С одной стороны — это может показаться много. Но если вы будете не только получать, но и тратить биткойны через Lightning — сумма этой комиссии для вас быстро снизится за счёт многократной перекачки платежей «туда-сюда». Я надеюсь, скоро появится больше подобных сервисов, возможно, даже бесплатных. Ведь сторона, открывшая на вас канал, может зарабатывать на комиссиях перевода в вашу сторону.
В следующей статье я расскажу о конкретных применениях Lightning сети. Расскажу о лимитах платежей и о потенциальных возможностях.
Thanks for the explanation!
didn’t know that Vasia is Bob in English!