Как запустить собственный узел Lightning Network

Как запустить собственный узел Lightning Network

Как запустить собственный узел Lightning Network cryptowiki.ru

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

Многие сторонники Lightning с нетерпением ждали релиза версии v1.0. Дополнительные стимулы использовать новую версию появились после того, как компания Blockstream запустила онлайн магазин, принимающий только платежи с помощью Lightning . Ниже представлена инструкция по созданию собственного узла Биткоина, способного отправлять и принимать транзакции в сети платежных каналов Lightning.

Основная задача

Цель данного руководства – пройти весь путь, начав его с полного отсутствия узла Биткоина, и закончив запуском полнофункционального валидационного узла – и все это менее чем за 24 часа. Основное время уйдет на синхронизацию блокчейна Биткоина, поэтому рекомендуем начать этот процесс перед тем, как вы отправитесь спать, и закончить, когда проснетесь.

Подразумевается, что вам известно, как настроить сервер на облачном сервисе Digital Ocean (или любом другом), использующий утилиту Docker. От вас не требуется понимания внутренних процессов – просто копируйте и вставляйте команды — однако мы бы порекомендовали прочитать все изложенное ниже.

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

Если у вас отсутствует полностью синхронизированный узел Биткоина, разделите выполнение данной инструкции на две части:

1. Перед тем как лечь спать: Разверните сервер Linux и начните синхронизировать свой полный узел в сети Биткоина.

2. Когда проснетесь: настройте узел Lightning, пополните его биткоинами и совершите первую транзакцию!

Часть I: создание узла Биткоина

Запуск Docker

Для начала запустим сервер Linux. При наличии учетной записи в Digital Ocean это очень просто:

Создаем дроплет, для этого необходимо более 200 ГБ дискового пространства. В течение 24 часов это будет стоить приблизительно 2.9 доллара.

В верхней части клиента Digital Ocean имеется табличка с надписью «One-click apps», при помощи которой можно развернуть дроплет с предварительно установленным Docker. Отметив все правые таблички, добавим ssh-ключ и нажмем на кнопку «Create» («Создать»).

Соединившись со своим новым сервером через SSH, мы можем приступить к синхронизации узла Биткоина. Имеется возможность выбора из нескольких реализаций, и основное внимание следует уделить файлам lnd и btcdseem: по сути, мы будем использовать демоны bitcoind и lightningd. Возможно, это не самый лучший выбор, с другой стороны, при желании использовать разные библиотеки совсем не сложно.

Начало синхронизации блокчейна Биткоина

Клонируем репозиторий в ~

[email protected]:~# git clone https://github.com/dougvk/lightning-node.git

Создаем docker-образ bitcoind

[email protected]:~# cd lightning-node

[email protected]:~/lightning-node# docker build . -t dougvk/bitcoind

Запускаем узел bitcoind

[email protected]:~# mkdir -p /scratch/bitcoin/mainnet/bitcoind

[email protected]:~# docker run —name bitcoind_mainnet -d -v /scratch/bitcoin/mainnet/bitcoind:/data -p 8333:8333 -p 9735:9735 dougvk/bitcoind:latest

Для проверки процесса синхронизации запускаем команду

[email protected]:~# docker logs bitcoind_mainnet —tail «10»

Здесь нам необходимо настроить процесс демона bitcoind (версия 0.15.1), функционирующего в локальной закрытой сети docker. Данные блокчейна сохраняются в /scratch, и мы задействуем порты, необходимые для того, чтобы узлы bitcoin и lightning услышали пиры по портам 8333 и 9735 соответственно. Порты RPC скрываем, чтобы они не демонстрировались публично.

После запуска данной команды для синхронизации понадобится примерно 12 часов и около 170ГБ дискового пространства. Когда наступит утро, синхронизация полностью завершится.

Далее нам нужно настроить инструмент командной строки Биткоина:

Создаем путь bitcoin-cli к интерфейсу с узлом

[email protected]:~# cat /usr/local/bin/bitcoin-cli

#!/usr/bin/env bash

docker run —rm —network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/data dougvk/bitcoind:latest bitcoin-cli «[email protected]»

[email protected]:~# chmod +x /usr/local/bin/bitcoin-cli

[email protected]:~# bitcoin-cli getinfo {

«deprecation-warning»: «WARNING: getinfo is deprecated and will be fully removed in 0.16. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo before upgrading to 0.16»,

«version»: 150100,

«protocolversion»: 70015,

«walletversion»: 139900,

«balance»: 0.00038800,

«blocks»: 505216,

«timeoffset»: -1,

«connections»: 15,

«proxy»: «»,

«difficulty»: 2227847638503.628,

«testnet»: false,

«keypoololdest»: 1516416352,

«keypoolsize»: 1999,

«paytxfee»: 0.00050000,

«relayfee»: 0.00500000,

«errors»: «» }

Что делает указанный выше скрипт:

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

После создания скрипта, осуществляем его тестовый запуск.

Часть II: Настраиваем Lightning

Разворачиваем узел Lightning в основной сети

Убедившись, что узел биткоина сохраняет синхронизацию c сетью (просто удостоверьтесь, что высота блока соответствует последней высоте блока, к примеру, на blockchain.info), разворачиваем узел lightning. Процесс аналогичен демону bitcoind, только быстрее (около 2 минут).

Запускаем узел lightningd в основной сети

[email protected]:~# mkdir -p /scratch/bitcoin/mainnet/clightning

[email protected]:~# docker run —rm —name lightning —network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/root/.bitcoin -v /scratch/bitcoin/mainnet/clightning:/root/.lightning —entrypoint /usr/bin/lightningd cdecker/lightningd:master —network=bitcoin —log-level=debug

Проверка вывода записей журнала

lightningd(1): Hello world from 03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c aka SLICKERGOPHER #03e71e (version v0.5.2-2016-11-21-1414-g5eceaa7)!

lightningd(1): Adding block
00000000000000000055234efac33e0ea30cc8e84ded7997f9e434534fd6f1bb

lightningd(1): Adding block
0000000000000000006fcfbab65ccb4634a800c5b12913b8379e6704b42db663

lightningd(1): Adding block
0000000000000000003f350dcff4fa5b1df61355cd80e9b06be55654d6384518

lightningd(1): Adding block 0000000000000000003b414eadfe9751909bdced866c0fa65b3f0156ebe7168e

lightningd(1): Adding block 000000000000000000377f67b9630130f914d142eb27b286cd81364aa7459d1e

lightningd(1): Adding block 000000000000000000739bd7336736f4a050dc22032e611e7cd747750db71c87

lightningd(1): Adding block 0000000000000000002de8afbb90006588e639cc0f55eb740bc2b76746eff050

lightningd(1): Adding block 0000000000000000007ad87ace5ddec90c0afd371d67cfd45ca3ad01f9b78cf1

lightningd(1): Adding block 00000000000000000014cf80dabf7e6d0b8dec51bc9914311401a9605f6b3606

Помните, что мы запускаем узел lightning на том же самом сетевом интерфейсе docker, что и Биткоин. Поэтому клиенты RPC могут общаться друг с другом. Этот же трюк используем с инструментом командной строки lightning:

Создаем путь lightning-cli к интерфейсу с узлом

#!/usr/bin/env bash

docker run —rm -v /scratch/bitcoin/mainnet/clightning:/root/.lightning —entrypoint /usr/bin/lightning-cli cdecker/lightningd:master «[email protected]»

[email protected]:~# chmod +x /usr/local/bin/lightning-cli

[email protected]:~# lightning-cli getinfo

{ «id» : «03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c», «port» : 9735, «address» :

[ ], «version» : «v0.5.2-2016-11-21-1414-g5eceaa7», «blockheight» : 505236 }

Поздравляем! Вы развернули полный узел lightning! Осталось соединить его с другими узлами и открыть платежные каналы. Теперь нам предстоит сложная, но одновременно и самая плодотворная часть.

Пополняем узел Lightning биткоинами

Чтобы получить стикеры на 20 долларов, нам необходимо отправить в узел lightning 0.003 BTC (примерно 30 долларов). Помните, что все это пока очень ново и проблематично. Отправляйте только то, что вы согласны потерять. Чтобы получить монеты, необходимо сгенерировать адрес кошелька.

Создаем адрес кошелька узла lightning

[email protected]:~# lightning-cli newaddr

{ «address» : «3Dx1XCcBsTtUQmWW6KD8PfMx6fB9saejYM» }

Ждем 6 подтверждений, затем проверяем баланс

[email protected]:~# lightning-cli listfunds

{ «outputs» :

[

{ «txid» : «[HIDDEN]», «output» : 0, «value» : 300000 } ] }

На подтверждение платежа уйдет около 60 минут, и вот, наконец, наши 300 000 сатоши отправляются в путь!

Соединение с другими узлами

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

Далее присоединяемся к узлу и открываем платежный канал.

Примечание: полезно использовать документацию на GitHub.

Находим на сайте узел, например, SLEEPYARK

Как запустить собственный узел Lightning Network cryptowiki.ru

[email protected]:~# lightning-cli connect 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 104.198.32.198 9735

{ «id» : «02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432» }

Обмениваемся сообщениями с узлом

[email protected]:~# lightning-cli getpeers

{ «peers» :

[

{ «state» : «GOSSIPING», «peerid» : «02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432», «netaddr» :

[ «104.198.32.198:9735» ], «connected» : true, «owner» : «lightning_gossipd» } ] }

Устанавливаем разумную комиссию

[email protected]:~# bitcoin-cli settxfee 0.005

Открываем и находим канал lightning 2 уровня

[email protected]:~# lightning-cli fundchannel 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 200000

{ «tx»: «020000000001018bfe9f8ad414a2ba6cabe3ff91901dd9b4a51e40dede0439a5fcdcca1b
d6a7a800000000171600149d3b1cdf27cc5d1d1cbaf74b24621ea979b11168ffffffff02465e01000000000
01600141679b360311df963d881d7560fe08a615583fda4400d0300000000002200205c5b2b6b7bf08e
157b66144644ed69cb0fc3b356285c80b63e31def60937925e02483045022100e6a8ef79cf4109cddb8
de45167a962ce918e1f148a8fcf2dcfe8c74dec8aecdb02207d58a824152985b974fdf0e55acc04bc7b14
061fda3528119f1d1aceab20b335012103dd126550f1c399bc5d0aa210c0a9725d4d31fe0f3e711298f8
0765058703d27300000000» }

Проверяем txid

[email protected]:~# lightning-cli listfunds

{ «outputs» :

[

{«txid»:»c48cbca7bc1569514e9b52dc7d4df01ae3372503cb204b82f7b2d7e3fb742b7c»,
«output» : 0, «value»: 89670 } ] }

Сайт для вычисления правильного размера комиссий.

Дождавшись 6 подтверждений транзакции для открытия канала Lightning, можно переходить к финалу тестирования – оплате стикеров Blockstream. Переходим в магазин, добавляем стикеры в корзину и переходим на страницу оплаты.

Как запустить собственный узел Lightning Network cryptowiki.ru

Эта длинная цепочка символов называется адресом BOLT11 . Чтобы раскодировать процесс, копируем и вставляем наш адрес в команду.

Вы увидите все подробности своего заказа (в нашем случае, заказа с Blockstream). Одно из закодированных полей содержит информацию о получателе платежа – это ID узла Lightning, на который мы пытаемся отправить платеж. Этот ID можно использовать для вычисления стоимости маршрутизации платежа к узлу, а затем отправить платеж!

Находим маршрут к узлу

[email protected]:~# lightning-cli getroute 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 200000000 0

{ «route» :

[

{ «id» : «02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432», «channel» : «505231:2001:1», «msatoshi» : 200000000, «delay» : 9 } ] }

Платим на адрес BOLT11

[email protected]:~# lightning-cli pay lnbc1712393610p1pdx8n8mp
p5c72tc40vzyf9deqm5lzn76404heejady02l494ykke3vm3x44y8qdy2gfkx7cmtwd68yetpd5azqv339cunvgz
42dzzqen0wgsyymr0vd4hxarjv4sk6gznv96x2mrvd96x2grnw35kx6m9wgs8sgp5ypskuepqf35kw6r5de5ku
eeqwd6xjcmtv4ezq7pqxvcqpggq86huylgdcd4st0d8thgdlw67tefjkhrnssyf8zk2s9cu37hdanwm6q96llg5zgjc
kwe7jamsmxnp4vy4q7vyulv57d9yg0wm7df0cpgwgu2m

{ «preimage» : «79f88fe9765997d2005e012ff32bc5dceeb99b111b81aa5087b815f2e4cdc59a» }

Проверяем остаток в канале

[email protected]:~# lightning-cli getpeers

{ «peers» :

[

{ «state» : «CHANNELD_NORMAL», «netaddr» : [ «104.198.32.198:9735» ], «peerid» : «02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432», «connected» : true, «owner» : «lightning_channeld», «channel» : «505231:2001:1», «msatoshi_to_us» : 28760639, «msatoshi_total» : 200000000 }]}

Здесь необходимо отметить одну вещь. Платеж отправляется не в блокчейн Биткоина. Он все еще существует в платежном канале сети Lightning. Однако, благодаря природе протокола Lightning, Blockstream не подвергается риску неисполнения платежа.

Теперь остается дождаться наших стикеров. Blockstream здесь выступает в роли ужасной третьей стороны… надеемся, что они выполнят свою часть обязательств, ведь, к сожалению, реальный мир не настолько безопасен, как криптовалютный.

Источник: bits.media

Оцените автора
( Пока оценок нет )
КриптоВики
Добавить комментарий