Как создать собственный портативный узел (ноду) Lightning в виде подключаемого модуля!
Lightning Network

Как создать собственный портативный узел (ноду) Lightning в виде подключаемого модуля!

Grubles

Это гостевой пост энтузиаста Lightning @notgrubles, который впервые был опубликован  в его блоге.

Разделы

●      Введение/ требования

●      Настройка проброса пакетов

●      Создание c-lightning и bitcoin-cli

●      Установка Lightning Charge

●      Установка платежных терминалов nanopos USB Armory от компании Inverse Path– уникальное устройство в ставшей популярной категории аппаратного обеспечения на основе «системы на кристалле» (СнК/SoC), куда входят Raspberry Pi и Rock64. Как и другие системы, это устройство сравнительно маломощно с точки зрения вычислительных возможностей. При этом оно уникально своим компактным форм-фактором и составляющими. Для работы Armory не требует ни блока питания, ни настенной розетки – только USB-порт. Armory сам питается через USB и взаимодействует с хостом тем же образом —  через эмулированное Ethernet-соединение. Armory использует процессор NXP i.MX53 ARM® Cortex™-A8 с частотой 800 МГц. Он также оснащен 512 Мбайт оперативной памяти DDR3 и разъемом для карт памяти microSD.

«USB armory была создана компанией Inverse Path для того, чтобы поддерживать разработку различных приложений для обеспечения безопасности. Способность эмулировать произвольные USB-устройства в комбинации с оснащенной процессором i.MX53 СнК, функции обеспечения безопасности и гибкая и полностью настраиваемая операционная среда делают USB armory идеальной платформой для самых разных типов приложений для обеспечения личной безопасности. Прозрачность открытого и минималистичного дизайна аппаратного обеспечения USB armory повышает контролируемость и в значительной мере ограничивает потенциальную возможность и масштабы атак на цепочку поставок.» Источник: https://inversepath.com/usbarmory

Кошелек Bitcoin Lightning – пример использования преимуществ форм-фактора, подачи питания через USB-порт и эмулированного Ethernet-соединения через USB-порт. Эта конфигурация позволяет пользователям установить на устройстве c-lightning и хранить свои закрытые ключи на портативной платформе, которая легко подключается к существующему аппаратному оборудованию, например, Raspberry Pi с установленным bitcoind. Или другой сценарий – пользователь с ноутбуком, на котором установлена полная нода. Armory просто подключается, после чего пользователь может проводить транзакции по сети Lightning и запускать приложения на Lightning (LApps). Еще один сценарий для этой конфигурации – повышение вычислительной мощности маломощного устройства, например, старый ноутбук или Raspberry Pi. Это делает Armory своего рода сопроцессором для Lightning!

Требования:

●      USB Armory от Inverse Path

●      карточка microSD 4Гб или больше с установленным официальным Debian-образом

●      USB-хост (ноутбук, рабочая станция или устройство, подобное RPi)

●      bitcoind, запущенный в локальной сети или еще где-то, с параметрами доступа для RPC

Подготовка Armory к установке

Все, что необходимо lightningd для связи с удаленным bitcoind – это bitcoin-cli, что в разы сокращает время, необходимое для произведения компоновки на Armory. Перекрестная компиляция возможна, но это выходит за рамки настоящего руководства. Чтобы скомпилировать bitcoin-cli нужно взять код Bitcoin в репозитории GitHub, но до этого на хосте  (на устройстве, к которому подключена Armory)  нужно включить проброс пакетов

Сетевая конфигурация

Armory (если использовать официальный  Debian-образ), в подключенном и загруженном виде создает виртуальный интерфейс, эмулирующий Ethernet-соединение. После установки правильной конфигурации Armory и ее USB-хост могут взаимодействовать друг с другом, как будто находясь в одной и той же локальной сети (что, в принципе, соответствует истине). Решение разрешить пересылку пакетов Armory принимается USB-хостом; при выдаче разрешения Armory получает возможность открыть каналы сети Lightning к другим узлам за пределами локальной сети. Пересылка пакетов также обязательна для установки системы и зависимостей сборки.

Windows: Инструкции по включению передачи пакетов (также известные под названием Connection Sharing) для Windows 7, 8 и 10 здесь.

MacOS: Инструкции для MacOS здесь.

Linux: Внимание: на Ubuntu 16.04 Network Manager (сетевой диспетчер) не мешал. При этом может оказаться, что конфигурации других дистрибутивов будут вести себя иначе. Выдержка из инструкций для Linux:

Включить преобразование для исходящих подключений:

# iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o wlan0 -j MASQUERADE

Включить проброс IP-пакетов:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Подключить Armory, посмотреть, не мигает ли белым LED. Если да, это значит, что Armory работает. Мигающий ритм LED учащается во время использования Armory.

Подключиться к Armory по ssh, используя учетные данные образа базы данных Debian по умолчанию (имя пользователя и пароль – usbarmory)

$ ssh usbarmory@10.0.0.1

Отправить тестовый опрос на открытый адрес, чтобы проверить корректность маршрутизации Armory:

$ ping 8.8.8.8

Если все правильно, вы получите следующие ответы:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=46.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=48.0 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=48.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=60 time=71.5 ms

Замечательно!

Как скомпилировать c-lightning

$ sudo apt update && sudo apt -y upgrade

Когда этот процесс закончится, перезагрузить Armory на случай, если произошло обновление ядра:

$ sudo reboot

Теперь надо начать установку системы и зависимостей сборки, необходимых для компиляции bitcoin-cli и c-lightning:

$ sudo apt-get install -y \ autoconf automake build-essential git libtool libgmp-dev \ libsqlite3-dev python python3 net-tools libsodium-dev \ pkg-config libssl-dev libevent-dev \ libboost-system-dev libboost-filesystem-dev \ libboost-chrono-dev libboost-program-options-dev \ libboost-test-dev libboost-thread-dev tmux curl

Клонировать репозиторий c-lightning:

$ git clone https://github.com/ElementsProject/lightning.git

Зайти в локальный репозиторий:

$ cd lightning

Затем начать сборку:

$ make

Когда этот процесс закончится, зайти в корневой каталог пользователя usbarmory:

$ cd ~/

Загрузить архив исходного кода Bitcoin Core 0.16.0 SHA256SUMS.asc и импортировать ключ gpg специалиста по обслуживанию, чтобы проверить хеши. И наконец, распаковать архив:

$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0.tar.gz $ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/SHA256SUMS.asc $ gpg --recv-key 90C8019E36C2E964 $ gpg --verify SHA256SUMS.asc $ sha256sum -c --ignore-missing SHA256SUMS.asc

результат должен быть «ОК»

$ tar zxvf bitcoin-0.16.0.tar.gz </code>

Отлично!

Теперь приступаем к созданию bitcoin-cli.

Как скомпилироватьbitcoin-cli

Зайти в каталог исходного кода Bitcoin и начать процесс построения :

$ cd bitcoin-0.16.0/

$ ./autogen.sh

Во время работыutogen.sh может нахлынуть поток предупреждений. Эту ситуацию можно исправить, указав регион:

$ sudo dpkg-reconfigure locales

# Указать что-нибудь вроде en_US.UTF-8 и нажать Ok

Продолжить сборку:

$ CFLAGS="-march=native" ./configure --disable-wallet

-march=native велит нашему компилятору, gcc, автоматически найти процессор Armory и настроить оптимальные параметры для этого конкретного процессора. Это помогает выжать все до последней капли из повышенной мощности процессора ARM, что важно, потому что этот процессор достаточно медленный. Сборка bitcoind не происходит, так что libdb не нужен. Укажите --disable-wallet, чтобы проводить компиляцию без поддержки кошелька (в этой конфигурации кошельком будет c-lightning).

Теперь компилируем bitcoin-cli.

$ make src/bitcoin-cli

И наконец, скопировать только что собранную бинарную библиотеку bitcoin-cli в /usr/local/bin:

$ sudo cp src/bitcoin-cli /usr/local/bin $ whereis bitcoin-cli

Ответ должен быть “/usr/local/bin/bitcoin-cli”

</code>

Как подключить Armory к bitcoind через RPC

c-lightning использует bitcoin-cli для пересылки необработанных транзакций на bitcoind в разных целях, например, чтобы открывать, принужденно закрывать или взаимно закрывать каналы. Так как c-lightning запущена на Armory, ей также необходима bitcoin-cli. При этом bitcoin-cli должен иметь возможность взаимодействовать с bitcoind, так что надо создать и добавить соответствующие элементы в bitcoin.conf хоста Armory и USB-хоста:

на USB-хосте или на другом устройстве с запущенным bitcoind в bitcoin.conf указать следующие элементы:

rpcuser=ваше_имя_пользователя rpcpassword= вашпарольнонеэтот rpcallowip= IP-адрес Armory

Сохранить эти изменения, затем создать bitcoin.conf Armory и добавить следующие элементы:

$ nano ~/.bitcoin/bitcoin.conf

В bitcoin.conf:

rpcuser= предыдущее имя пользователя rpcpassword= предыдущий пароль rpcconnect= IP-адрес USB-хоста (10.0.0.2)

Заменить 10.0.0.2 на IP-адрес, по которому может слушать bitcoind (например, 192.168.0.254).

Попробовать отправить запрос к bitcoind от Armory:

$ bitcoin-cli -getinfo

Если все прошло успешно, поступит ответ с соответствующей информацией (высота, сложность блока и т.д.) Прекрасно!

Как работать с c-lightning

Все собрали, сконфигурировали, сеть тоже работает – теперь можно запустить c-lightning.

Начните сессию tmux, затем запустите lightningd:

$ tmux $ ./lightning/lightningd/lightningd --network testnet --log-level debug $ ./lightning/cli/lightning-cli getinfo

Внимание: если хотите действовать #безрассудно (#reckless), можно вместо этого указать параметр –network bitcoin.

Если lightningd начинает выдавать “Adding block number” (идет добавление номера блока), а getinfo lightning-cli выдает высоту текущего блока (наряду с другой информацией), это значит, что Armory установлена правильно!

Теперь lightning-cli можно использовать, чтобы генерировать новые адреса для перевода/снятия bitcoin, и открытия/закрытия каналов сети Lightning!

Lightning Charge

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

Они требуют установки Lightning Charge.

Lightning Charge – это система обработки микроплатежей, написанная на node.js. Она демонстрирует функциональность c-lightning через свой REST API, который можно получить через библиотеки JavaScript и PHP. Источник: https://blockstream.com/2018/01/16/lightning-charge/

Lightning Charge необходимы c-lightning и nodejs. Как их установить:

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - $ sudo apt-get install -y nodejs

Могут возникнуть ошибки с разрешениями из-за пакета Nodejs, предоставляемого nodesource.com. Чтобы это обойти, надо сделать следующее:

$ mkdir ~/.npm-global $ npm config set prefix '~/.npm-global'

В ~/.profile добавить :

$ export PATH=~/.npm-global/bin:$PATH

И, наконец:

$ source ~/.profile

После этого просто использовать npm, чтобы установить Lightning Charge, и запустить charged:

$ npm install -g lightning-charge $ charged --api-token</code>

charged будет работать на порту по умолчанию 9112!

Установить LApp, чтобы сделать из вашего модуля Lightning платежный микротерминал

nanopos легко устанавливается при помощи npm:

$ npm install -g nanopos

Отредактировать файл items.yaml, внеся в него наименования на продажу, указать денежные единицы при помощи –currency, после чего запустить nanopos:

$ nanopos -t <charge API token> --items-path items.yaml --currency USD

Название отображенной страницы можно изменить при помощи --title; на bootswatch.com есть целый ассортимент тем, которые можно выбрать при помощи -m.

Теперь c-lightning, charged и LApp nanopos все работают на портативном Armory!

После выполнения транзакций просто отключить Armory и отсоединить его для транспортировки. Когда будете готовы опять выполнять транзакции, заново подключите его, войдите по ssh и опять запустите c-lightning. Это все можно сконфигурировать, чтобы использовать bitcoind running на VPS или аналогичном общедоступном хосте, чтобы еще больше повысить портативность (нужен только Armory, а не сопутствующая рабочая станция/ноутбук/хост c bitcoind).

Armory также может работать в «автономном режиме», что не требует соединения с источником  питания для USB-хоста (при этом она все равно питается через USB). Это позволяет создать другие пользовательские сценарии, например, значительно более портативную конфигурацию, работающую на аккумуляторе и оснащенную WiFi!

Спасибо за внимание!

-grubles

If you have specific preferences, please, mark the topic(s) you would like to read: