В этой статье я постараюсь дать краткие и простые пояснения о работе “сети Молния” в Биткойне (английское название – Lightning Network) и попробую развеять некоторые мифы про неё.
В мире, где работает Lightning: вначале был и есть обычный биткойн – его называют on-chain bitcoin – это название, чтобы не путать биткойн в “молнии” с биткойном обычным, который существовал до молнии. On-chain – переводится как “на цепи”. Это тот самый биткойн, где получатель должен ждать хотя бы одного подтверждения, чтобы считать платёж принятым и безотзывным. Когда появилась Lightning Network, в этом отпала необходимость, так как платежи в ней ходят за секунды и доли секунды и пройдя до получателя, платёж сразу становится безотзывным. Ещё один термин, который нам пригодится – “сатоши”. Сатоши – это наименьшая неделимая частица биткойна. В одном биткойне – ровно 100 миллионов сатоши (100,000,000). Сатоши во множественном числе пишется как satoshis, кратко – sats. Им в сети молния оперируют для удобства, потому что сам биткойн по себе уже очень дорогой, и чтобы подчеркнуть, что он хорошо делится и не надо зацикливаться на целом биткойне, сообщество использует в своих расчётах именно сатоши – так удобнее. Простая арифметика – 0.01 биткойна – это миллион сатоши (помните ведь – их в нём сто миллионов, значит одна сотая – один миллион). Поэтому ориентируясь на простую цифру 0.01 BTC = 1,000,000 sats, можно легко в уме переводить дробные доли биткойна в сатоши (если меньше сотых биткойна – значит уже меньше миллиона и т.д..)
Если вы хотите примерно понять, на каких принципах построена молния, то вот вам простая аналогия.
Представьте, что на столе у вас две кружки одинакового размера – одна по вашу сторону, другая – по другую сторону (та уже не ваша – она противоположной стороны). Между ними гибкая трубочка с моторчиком для перекачки. Это – простая аналогия канала.
Вначале кружка может быть полная с вашей стороны, и пустая с другой. В таком случае говорят, что инициатор открытия канала – вы, а канал – исходящий (относительно вас). Если полная с другой, а с вашей пустая – инициатором является другая сторона и говорят, что канал входящий.
Итак, возьмём первый пример – канал открыли вы. С вашей стороны вода – символ биткойна и его частей. Вода в вашей кружке – ваш биткойн, а на другой стороне – пустая кружка такого же размера (это важно) – там пусто и другая сторона пока ничего не имеет. Вы решили заплатить чуть чуть куда-то. Для простоты я пока опишу способ, что платите именно вы противоположной стороне. Для оплаты вы перекачиваете столько капель, сколько необходимо заплатить другой стороне. Что произошло после? В кружке противоположной стороны появилась сумма средств, а у вас ровно на столько же убавилось. При этом в вашей кружке освободилось ровно столько, сколько вы отправили – это значит в понятиях молнии, что вы можете столько же “получить” снова, не больше. Перелить через край кружки нельзя, так как в начале одна из кружек была заполнена до краёв, а другая пустая и такого же объёма, как ваша. Поэтому вода может циркулировать туда сюда и никогда не перельётся – это раз. И пока стоят кружки – канал открыт. В любой момент времени каждая из сторон может закрыть канал, тогда обе стороны забирают кружки со стола и сколько каждая сторона имеет в кружке – это её биткойны. Обман исключён на техническом уровне и здесь я его пока рассматривать не буду.
Итак, качаем водичку туда сюда – это отправка и приём сатошей. Если есть место в нашей кружке – мы можем принять столько с другой стороны, если у нас есть вода – значит можем отправить столько, сколько есть воды. Как нетрудно догадаться – если у нас кончилась вода – значит на другой стороне кружка полная до краёв, а мы больше не можем посылать (мы исчерпали наши средства), но зато можем принять любые суммы до объёма нашей кружки, не больше и так далее.
В примере выше мы рассмотрели пример, когда вначале была кружка полная у нас. В терминах Lightning Network это значит, что инициатором открытия канала были мы (именно мы поставили полную кружку “со средствами”). Тот, кто ставит кружку – создаёт транзакцию в on-chain биткойне и, соответственно, платит комиссию в биткойн сети. Также, внутри протокола молнии, инициатор заплатит ещё и за закрытие канала (а как же иначе, когда вначале только у инициатора есть средства – ведь с его стороны кружка полная, и, кстати, уже эти комиссии будут браться из его кружки). Чтобы иметь средства за закрытие канала – эти средства заранее “бронируются” и не могут быть перекачаны на другую сторону. Еще к этому бронируется 1% от объёма кружки (размера канала) с каждой стороны сумма бронирования, которая возвращается при закрытии канала (“убирание кружек со стола”), но которая используется как гарантия от обмана. Тут вы можете спросить – а как 1% может бронироваться с каждой стороны, если вначале одна из кружек пуста полностью? Верно, в начале всё так, но как только идут первые платежи в сторону пустой кружки, так те средства в размере до 1% постепенно переходят в бронь.
Для чего нужен этот 1% с каждой стороны? Это используется как гарантия и как штрафные санкции от обмана на уровне протокола. По сути, вам всё это не нужно особо понимать, просто знайте, что сеть молнии – сеть без доверия к третьей стороне (то есть к тому, кто сидит с другой стороны стола со своей кружкой, вы в принципе не должны доверять). Вы не знаете, кто там – мошенник или честный человек. Чтобы сделать обман не выгодным, в протоколе придумали хитрую технологию наказания через средства в канале. Конечно вы, как пользователь кошелька – честный и пушистый, но ведь хакеры могут написать свою версию кошелька с целью обмана.
В чём может заключаться обман? В Lightning Network взаимоотношения между двумя сторонами внешнему миру не видны. Есть только транзакция открытия канала (кружки ставят на стол) и транзакция закрытия канала (убирают со стола кружки). Пока кружки стоят на столе – сколько транзакций в перекачивании водички – знают только две стороны. Это может длится день, месяц, может год или годы. За это время владельцы кружек могут отключать свои кошельки, снова включать и так далее. Но, когда закрывается канал, “миру” (точнее просто майнерам) предъявляется криптографическое доказательство об окончательном балансе каждой стороны. И вот тут может быть обман – может случится так, что вы поставили полную кружку вначале, заплатили, потом заплатили второй раз, а на третий раз та сторона заплатила вам и все средства почти вернулись обратно к вам. И вот тут возникает соблазн у второй стороны закрыть канал и сделать вид, что третьей транзакции не было – мол “мне заплатили пару раз и теперь мой баланс такой-то” и забрать те средства, которые у неё были после второй транзакции. В суд тут не пойдёшь, бегать по интернету и искать виновника – дело бесполезное. Тут на уровне протокола существует многоходовая криптографическая схема на несколько шагов вперёд, чтобы защитить обе стороны от обмана (как шахматная партия). Каждый раз, когда произодится перекачка водички туда сюда, за сценой, ваш кошелёк и кошелёк другой стороны подписывают несколько видов транзакций и обмениваются крипто-ключами. И всё это делается для однократной перекачки средств. Каждая новая транзакция (перекачка водички) опирается на предыдущую транзакцию и создаёт охранные меры для другой стороны, чтобы та была уверена, что вы её не обманите. Эти транзакции они хранят у себя “за пазухой”, и обычно, никуда не передают. Но если противоположная сторона решила закрыть канал и “смухлевать” (то есть кинуть закрывающую транзакцию с балансом, который уже был изменён не в вашу пользу) – тут ваш кошелёк в определённое временное окно может увидеть эту транзакцию в сети биткойна и кинуть заранее подписанную противположной стороной “анти-мухлёжную” транзакцию, которая забирает все средства противоположной стороны в вашу пользу. Провести платёж в сети без создания охранных транзакций для другой стороны нельзя, поэтому у другой стороны всегда есть “Туз”, выданный ей вашим кошельком, если ваш кошелёк попытается их обмануть. И тут можно вспомнить про 1% в начале абзаца. Этот 1% нужен, чтобы другая сторона могла бы отдать вам хотя бы 1%, если она пыталась обмануть вас на меньшую сумму, но если на той стороне было больше – забираются все её средства! Это очень действенный способ избегать обмана, без судов.
Тут стоит заметить, что, конечно, для обычного пользователя всё это протекает “за сценой”. Все эти штуки реализованы на уровне протокола и исполняются программным обеспечением кошелька пользователя. В раннее время, когда сеть только только запускалась, бывали сбои и кошельки пользователей могли непреднамеренно закрыть канал, кинув устаревшую транзакцию. В этом случае они теряли средства в канале, хотя не являлись мошенниками. Но время идёт, и программное обеспечение улучшается и такие ошибки становятся редкостью (хотя и не исключаются вовсе). Сейчас вероятность столкнутся с этим очень мала – скорее всего вы с этим не столкнётесь. Но с чем точно можете столкнутся – это с отсутствием бэкапов.
Бэкап – это резервная копия. В обычном биткойне достаточно было записать фразу сид (seed – ключевая фраза из 12/24 слов, мастер ключ), сохранить её на бумаге, и получать биткойн без опаски, что его можно потерять. Но, к сожалению, пока в мире Lightning очень важно заботится о бэкапе в виде файлов, которые постоянно меняются с каждым платежом. Сейчас даже достатоточно сохранять копию файла, обновлённую раз после любого открытия и закрытия канала, но всё равно это нужно делать. Потеряв такой файл вместе с порчей устройства, на котором работал кошелёк – вы можете лишится средств, которые были в канале с вашей стороны, даже при том, что у вас есть записанный сид кошелька. Но время идёт, и разработчики уже придумали способы отказаться от постоянного бэкапа файлов кошельков. Для этого необходимо время и доработка протокола и процесс уже идёт!
Итак, я пока подведу итог этой статьи. Я не всё рассказал о молнии, чтобы можно было понимать её работу на начальном уровне. Но вы уже, надеюсь, поняли её основной способ передачи ценности биткойна. Сейчас вы знаете, как передаются сатоши на простом уровне – от узла к другому узлу. Этот способ уже может работать, когда противоположная сторона – магазин, а вы – покупатель. В этом случае вы можете платить магазину без комиссий. При передаче средств к ближайшему узлу – комиссии 0%. По другому в данном случае быть не может, потому что если плательщик вы, а получатель – другая сторона канала, то платить комиссии просто не кому – магазин заинтересован получить от вас ровно ту сумму, которую вы перекачаете в его кружку (если бы он хотел комиссию – её проще сразу учесть и выставить счёт на сумму с учётом комиссии). А сами вы с себя брать комиссии тоже не будете, так как в этом нет никакого смысла. В следующей статье я рассмотрю уже более сложный пример, который работает почти всегда в реальной жизни, если вы платите продавцу, с которым у вас нет канала.
Напоследок развею несколько предрассудков о сети Lightning (на них часто ссылаются критики, которые не разбираются в технологии)
- Миф: “При закрытии канала создаётся огромная транзакция, в которой есть все платежи, что были в канале“. Это вовсе не так. Транзакция открытия – как правило два вход и два выхода. Транзакция закрытия (если канал закрыт кооперативно) – как правило один вход и два выхода. Выходы закрывающей транзакции отражают балансы двух сторон. В редких случаях в закрывающей транзакции может быть больше выходов – это случается, когда в каналы были подвисшие платежи, которые либо дошли до получателя, либо нет, но по ним в любом случае у противоположной стороны есть “спор” – на это требуется время и спор позже разрешается, но при этом в транзакциях появляются отдельные суммы по спорным платежам, но это никак не отражает все транзакции в канале.
- Миф: “Исчерпанный канал приходится закрывать и открывать новый, чтобы платить“. На самом деле так делать совсем не обязательно и даже не нужно. Кошельки могут хранить много каналов, и если какой либо канал исчерпался с вашей стороны (вы платили, платили и средства кончились) – этот канал может послужить вам для принятия средств (в следующей статье расскажу про маршрутизацию – она позволяет эффективно использовать один канал, чтобы платить куда угодно кому угодно)
- Кто-то может подумать, что раз канал открыт, то это как с интернет соединением – нужно быть в онлайн, чтобы он был открыт. Это вовсе не так. Открытие канала – это чисто протокольный момент, фиксируемый биткойн транзакцией. А дальше канал начинает жить своей жизнью – вы запускаете кошелёк, он коннектится к узлам, с которым у него каналы и тут же договоривается с ними о его очередной активности. А как он отключается от сети – канал просто становится временно не активным (но не закрытым). Таким образом, канал может быть открытым год и более!
- Миф: Через Lightning Network можно передавать только маленькие суммы (обычно говорят про 100-300 долларов), а большие не пройдут. На самом деле это было на раннем этапе запуска сети молния (2018 год и может быть немного 2019). И тут всё очень зависит, с кем у вас открыт канал (тут снова тема касается маршрутизации платежей). Сейчас эта проблема сведена к минимуму. А большие суммы могут проходить благодаря большим wumbo-каналам, а также технологиям MPP & AMP. Но об этом расскажу в других статьях про Lightning.
Отличная статейка. Спасибо, добрый, умный, человек. Изучаем тему.
Светлана, спасибо большое! Кстати справа (если смотреть на компьютере) или в самом конце (на телефоне) есть панелька, где вы можете попробовать Lightning в действии! Там можно отправить от 1 до 30 руб. автору блога, то есть мне :))