Поднимаем ноду Lightning Network на Linux

Поднимаем ноду Lightning Network на Linux

Канал «О криптовалютах👌»

В этом гайде мы будет поднимать ноду на Ubuntu 17.04, но шаги, описанные ниже, должны работать на большинстве дистрибутивов на основе Debian.

Данный гайд является дополнением к статье «Почему пользоваться Lightning Network не только удобно, но и прибыльно?».

1. Установить Golang и зависимости

Если вы еще этого не сделали, установите Go с помощью apt:

sudo apt-get install golang-1.10-go

Или запустите билд из этого источника.

Создайте папку, в которой будут храниться все приложения Go:

mkdir ~/go

Проведите экспорт путей:

echo "export GOPATH=~/go" >> ~/.bashrc

echo "export PATH=$GOPATH/bin:/usr/lib/go-1.10/bin:$PATH" >> ~/.bashrc

source ~/.bashrc

Убедитесь, что Go установлен правильно, и путь распознан:

go version

На выходе вы должны получить: go version go1.10 linux/amd64

2. Установите LND

После установки Go, запустите серию команд для установки LND из источника:

git clone https://github.com/lightningnetwork/lnd $GOPATH/src/github.com/lightningnetwork/lnd

cd $GOPATH/src/github.com/lightningnetwork/lnd

make && make install

Чтобы обновить LND в будущем, выполните следующие команды:

cd $GOPATH/src/github.com/lightningnetwork/lnd

git pull

make && make install

3. Настройте LND

Этот шаг нужен, чтобы создать свою собственную конфигурацию Lightning Network. Начните с создания файла конфигурации:

mkdir ~/.lnd && cd ~/.lnd

touch lnd.conf

Откройте файл конфигурации в выбранном вами редакторе и добавьте следующие строки:

debuglevel=info

listen=your.ip.add.ress

externalip=your.ip.add.ress

alias=A name for your node

color=#000000

maxpendingchannels=5

bitcoin.mainnet=1

bitcoin.active=1

bitcoin.node=bitcoind

bitcoind.rpcuser=bitcoind_rpc_user_string

bitcoind.rpcpass=bitcoind_rpc_password_string

bitcoind.zmqpubrawblock=tcp://127.0.0.1:18501

bitcoind.zmqpubrawtx=tcp://127.0.0.1:18502

Убедитесь, что listen, externalip, bitcoind.rpcuser и bitcoind.rpcpass соответствуют вашей среде.

4. Настроить bitcoind

Если вы этого еще не сделали, сначала установите bitcoind (на этот шаг может потребоваться более суток).

Кроме того, вы можете скомпилировать его из источника с поддержкой ZeroMQ (статья написана для Raspberry Pi3, но может работать на большинстве дистрибутивов на основе debian).

Как только ваша полная нода биткоина оказалась настроена, убедитесь, что ~/.bitcoin/bitcoin.conf содержит эту минимальную конфигурацию:

server=1

listen=1

daemon=1

txindex=1

rpcuser=bitcoind_rpc_user_string

rpcpassword=bitcoind_rpc_password_string

zmqpubrawblock=tcp://127.0.0.1:18501

zmqpubrawtx=tcp://127.0.0.1:18502

Запустите свою ноду!

5. Сделать LND доступным из внешнего мира

Для того, чтобы сделать свою ноду доступной, необходимо разрешить трафик TCP и UDP на порт 9735:

sudo iptables -A INPUT -p tcp --dport 9735 -j ACCEPT

sudo iptables -A INPUT -p udp --dport 9735 -j ACCEPT

Сохраните настройки:

sudo iptables-save

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

Так выглядит интерфейс роутера в моем случае, но каждый маршрутизатор отличается тем, что вам придется разобраться в этом самостоятельно. Скорее всего, придется найти настройки переадресации портов для виртуального сервера в WAN.

6. Настроить LND как сервис

Этот шаг является довольно сложным, поскольку безопаснее всего будет зашифровать ваш LN-кошелек паролем. Таким образом, lnd не может быть запущен автоматически после перезапуска системы, для этого потребуется ваше участие.

Если вы хотите управлять системой в фоновом режиме, можно написать сценарий службы для демона с помощью Systemd.

cd /lib/systemd/system

sudo wget https://gist.githubusercontent.com/mariodian/f766645710c1f6922c429f751869e744/raw/56c82bae3bdf727d82db6f82ba22e717623510f9/lnd.service

Обязательно измените переменные следующего сценария в соответствии с вашей средой: ExecStart, ExecStop, PIDFile, User, Group:

sudo systemctl enable lnd

Теперь создаем скрипт, который запустит демона и заполнит пароль для LN-кошелька:

mkdir ~/bin

cd ~/bin

wget https://gist.githubusercontent.com/mariodian/a6362f8a6deb15e929e9ad0b56287969/raw/90c2943a5958e57fb22b59848fcd9035b253e355/lnd.sh

chmod u+x lnd.sh

7. Создать сертификат (необязательно)

Важно создать собственный сертификат, если вы планируете удаленно подключаться к своей ноде (например, если вы используете сторонний сервер).

Для этого вам нужно будет добавить запись DNS / IP вашего сервера.

Примечание: если ваш интернет-провайдер предоставляет вам статический IP-адрес, вы можете перейти прямо в часть создания сертификата.В противном случае вам придется создать динамическую запись DNS (запросите данные у провайдера).

Для создания сертификата выполните следующие команды:

cd ~/.lnd

openssl ecparam -genkey -name prime256v1 -out tls.key

openssl req -new -sha256 \

           -key tls.key \

           -subj "/CN=localhost/O=lnd" \

           -reqexts SAN \

           -config <(cat /etc/ssl/openssl.cnf \

               <(printf "\n[SAN]\nsubjectAltName=\

                    DNS:localhost,\

                    DNS:your.dynamic.dns,\

                    IP:your.server.ip.address\

                ")) \

           -out csr.csr

openssl req -in csr.csr -text -noout

openssl req -x509 -sha256 -days 36500 \

           -key tls.key \

           -in csr.csr -out tls.cert \

           -extensions SAN \

           -config <(cat /etc/ssl/openssl.cnf \

               <(printf "\n[SAN]\nsubjectAltName=\

                    DNS:localhost,\

                    DNS:your.dynamic.dns,\

                    IP:your.server.ip.address\

                "))

openssl x509 -in tls.cert -text -noout

Не забудьте изменить DNS и IP в соответствии с вашей сетью!

Вышеупомянутая команда создаст 3 файла: csr.csr, tls.cert и tls.key

Чтобы подключиться к узлу удаленно, вам нужно будет скопировать tls.cert на клиентскую машину и указать файл из LN-кошелька, такого как Zap.

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

8. Запуск LND

Не запускайте LND с указанным выше скриптом, потому что сначала вам нужно будет создать LN-кошелек! Вместо этого запустите LND стандартной служебной командой:

sudo service lnd start &

Затем создайте кошелек и следуйте инструкциям на экране:

lncli create

Вам нужно будет установить пароль кошелька и записать мнемоническую фразу кошелька! Только после этого остановите созданного демона:

sudo service lnd stop

Теперь, когда вы создали кошелек, можете использовать вышеуказанный скрипт start / stop для запуска LND и разблокировки кошелька (вам будет предложено ввести пароль):

~/bin/lnd.sh start

Аналогично, вы можете остановить lnd:

~/bin/lnd.sh stop

8. Отправьте биткоины в LN-кошелек

Вам придется профинансировать свой LN-кошелек, прежде чем вы сможете начать использовать сеть. Обратите внимание, что использование Lightning на сегодняшний день сопряжено с высокими рискам, поэтому используйте только те средства, которые допустимо потерять!

Создайте новый адрес:

lncli newaddress p2wkh

Отправьте биткоин на адрес и ждите подтверждения сети (обычно около 10 минут).

Проверьте баланс кошелька:

lncli walletbalance

Переходите к следующему шагу, только если confirmed_balance имеет ненулевое значение (то есть отправленные средства успешно пришли).

9. Откройте канал

Перейдите Lightning Network Search and Analysis Engine и выберите случайный узел, чтобы открыть канал:

lncli connect <channel pubkey>@<channel ip address>:<channel port>

lncli openchannel <channel pubkey> --local_amt=<amt in satoshi that you commit to>

Или откройте канал с моим узлом:

lncli connect 02927ab17049257f50d909d760bebc80ccc267edfcc1346430a04de9e569b1e190@lnd.freedomnode.com:9735

lncli openchannel 02927ab17049257f50d909d760bebc80ccc267edfcc1346430a04de9e569b1e190 --local_amt=1000000

Если вы получите «ошибку подключения», это может означать, что либо мой узел отключен, либо не получилось произвести открытие начального узла.

Вы можете проверить возможные ошибки с помощью этой команды:

tail -f ~/.lnd/logs/bitcoin/mainnet/lnd.log

В случае ошибок DNS SEED вам необходимо вручную установить соединения с хорошо связанными узлами:

lncli connect 031feee8045899c658eec2b6f2f6da6e4bdd7baabdc61bdc017761577342fbd011@76.184.81.28:9735

lncli connect 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b@167.99.50.31:9735

lncli connect 0207481a19a3f51a48f134e95afa67cfeffdb38a99b5ad3494a320c4918aaaf579@163.172.174.151:9735

Подождите немного и попробуйте снова открыть канал.

Открытие канала необходимо сначала подтвердить в основной сети биткоина. Ожидаемые к подключению узлы можно посмотреть с помощью команды:

lncli pendingchannels

10. Проведите платеж

Чтобы сделать быструю пробную оплату, перейдите к Y'alls и нажмите на значок Lightning, чтобы создать запрос на оплату.

Скопируйте адрес платежа и вернитесь на консоль. В моем случае это:

lncli sendpayment --pay_req=lnbc1u1pd2efjspp5hg6yv309s8x6wdktsrgjtxskvdp792f9zrp7mv9mwrqp4ce89gksdz22fjkzepqg9e8g6trd3jn5gzjw4hxu6twvusyc6t8dp6xu6t8dp6zqnn9w3mk7untypzxzetdducqzysgsmwrsalmqymptmtl02u7kznlv5ga5cvdgz2d0wzpqjfeqq7t6yseklqevy9xdh6nm2kym95zv6fvsmdypqw480t4x2msplpsdlfvqgpe05x29

Оплата должна быть обработана в течение секунды или около того. Отправка платежа в LN через lncli выглядит следующим образом:

Вы также можете указать сумму самостоятельно:

lncli sendpayment --pay_req=<payment request> --amt=<amount in satoshi>

Вывод

Как вы можете видеть, для обычного пользователя Linux не так сложно настроить и использовать Lightning Network. Однако, сказать, что Lightning Network все еще предстоит пройти долгий путь, прежде чем сеть станет хотя бы также широко использоваться как обычные платежи в биткоинах — не сказать ничего.

Данный гайд является дополнением к статье «Почему пользоваться Lightning Network не только удобно, но и прибыльно?», которая содержит практические советы по увеличению доходности ноды.

Мы очень рады, если для вас это было полезно!

С уважением, команда канала «О криптовалютах👌».

Создано с помощью Tgraph.io