Author

Topic: Как создать переносной плагин LN (Read 208 times)

hero member
Activity: 1218
Merit: 858
Зарезервировано.
hero member
Activity: 1218
Merit: 858
Руководство как создать собственный переносной плагин Lightning node!

Хочу представить вашему вниманию перевод статьи "How to build your own portable plug-in Lightning node!" автора grubles


Фото взято из блога https://hackernoon.com/how-to-build-your-own-portable-plug-in-lightning-node-c4093a4b10fb

Разделы:

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

Организация отправки пакетов

Сборка c-lightning и bitcoin-cli

Установка Lightning Charge

Установка nanopos для создания торговой точки (point-of-sale)

*  *  *

Inverse Path USB Armory (в дальнейшем сокращенно, Armory) - это уникальное устройство среди популярной в настоящее время категории аппаратного обеспечения с поддержкой SoC, в которую входят Raspberry Pi и Rock64. Как и другие системы, она относительно слаба с точки зрения вычислительных возможностей. Однако его уникальность проистекает из его компактного размера и его компонентов. The Armory не требует отдельного питания или сетевой розетки; для работы ему нужен только USB-порт. Inverse Path USB Armory получает питание через USB-порт, а также таким же образом связывается со своим хост-устройством - через эмулируемое соединение Ethernet. Armory использует процессор NXP i.MX53 ARM® Cortex™ -A8, работающий на частоте 800 МГц. Он также включает в себя 512 МБ оперативной памяти DDR3 и слот для карт памяти microSD.

Плата USB Armory была создана Inverse Path с целью помощи в разработке различных приложений безопасности.

Возможность эмуляции произвольных USB-устройств в сочетании со скоростью SoC i.MX53, функциями безопасности, гибкой и полностью настраиваемой операционной средой делает USB-хранилище идеальной платформой для всех видов персональных приложений безопасности.

Открытость и минимальный дизайн для оборудования Inverse Path USB Armory облегчает проверку и значительно ограничивает потенциальные возможности и масштаб атак по цепочке поставок. Инфо от: https://inversepath.com/usbarmory


*  *  *

Хороший вариант использования, который пользуется преимуществами форм-фактора, питания через USB и эмулируемого Ethernet-через-USB, представляет собой портативный кошелек Bitcoin Lightning. С этой конфигурацией пользователи могут настроить устройство, которое запускает c-lightning и хранит свои закрытые ключи на портативной платформе, которая легко подключается к существующему оборудованию, такому как Raspberry Pis, которое запускает bitcoind. Также, есть другой вариант, если у пользователя есть ноутбук, на котором работает полноценная BTC нода. Armory можно просто подключить к ноутбуку, а затем пользователь может осуществлять транзакции через сеть Lightning и запускать приложения на основе Lightning (LApps).

Другой вариант использования для устройства - это добавления вычислительной мощности на устройства с низкими вычислительными характеристиками, такими как старый ноутбук или Raspberry Pi. Таким образом, Armory действует как своего рода сопроцессор для Lightning!


Armory подключен к Rock64, фото взято из блога https://hackernoon.com/how-to-build-your-own-portable-plug-in-lightning-node-c4093a4b10fb

Требования:

Inverse Path USB Armory

карта microSD емкостью 4 ГБ или более с установленным официальным базовым образом Debian

Хост-устройство USB (ноутбук, стационарный компьютер или RPi-подобное устройство)

Bitcoind работает в вашей локальной сети или в другом месте с учетными данными для доступа к RPC

*  *  *

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

Все, что нужно Lightningd для связи с удаленной bitcoind - это bitcoin-cli, что значительно сокращает время, необходимое для сборки Armory. Перекрестное взаимодействие возможно, но это выходит за рамки данного руководства. Чтобы собрать только bitcoin-cli, необходимо извлечь код BTC из его репозитория на Github. Но, прежде чем это можно будет сделать, на главном устройстве должна быть включена пересылка пакетов (устройство, к которому подключен Inverse Path USB Armory).

Создание сети:

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

Windows:

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

MacOS:

Инструкции для MacOS можно найти здесь.

Linux:

Примечание: на Ubuntu 16.04, сетевой менеджер не мешает. Однако на конфигурациях других дистрибутивов может.

Инструкции для Linux:

Включить маскировку для исходящих соединений:
Code:
# iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o wlan0 -j MASQUERADE

Включить переадресацию IP:
Code:
# echo 1 > /proc/sys/net/ipv4/ip_forward

*  *  *

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

Теперь заходим по ssh на Armory с учетными данными базового образа Debian установленными по умолчанию (логином и паролем являются usbarmory)
Code:

Пингуем публичный адрес, чтобы увидеть, маршрутизируется ли ваш Armory правильно:
Code:
$ ping 8.8.8.8

В случае успеха, вы получите такие отклики:
Code:
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:

Code:
$ sudo apt update && sudo apt -y upgrade

Как только это будет завершено, перезагрузите Armory после обновления ядра:
Code:
$ sudo reboot

Теперь начинайте установку инструментов сборки и зависимостей, необходимых для компиляции bitcoin-cli и c-lightning:
Code:
$ 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 на Гитхабе:
Code:
$ git clone https://github.com/ElementsProject/lightning.git

Перейдите в локальный репозиторий:
Code:
$ cd lightning

Затем начинайте сборку:
Code:
$ make

После этого перейдите в домашний каталог пользователя usbarmory:
Code:
$ cd ~/

Загрузите архив исходного кода Bitcoin Core 0.18.0 (примечание: на момент написания оригинала статьи последняя версия ядра была 0.16.0, я для вашего удобства внес правки на последнюю версию 0.18.0), SHA256SUMS.asc и импортируйте ключ GPG сборщика Ядра для проверки хэшей. Наконец, распакуйте архив:
Code:
$ wget https://bitcoincore.org/bin/bitcoin-core-0.18.0/bitcoin-0.18.0.tar.gz
$ wget https://bitcoincore.org/bin/bitcoin-core-0.18.0/SHA256SUMS.asc
$ gpg --recv-key 90C8019E36C2E964
$ gpg --verify SHA256SUMS.asc
$ sha256sum -c --ignore-missing SHA256SUMS.asc
# should output an "OK"
$ tar zxvf bitcoin-0.18.0.tar.gz

Превосходно!

Теперь, приступайте к сборке bitcoin-cli.

*  *  *

Сборка bitcoin-cli:

Перейдите в каталог исходного кода Bitcoin и запустите процесс установки:
Code:
$ cd bitcoin-0.18.0/
$ ./autogen.sh

Во время работы autogen.sh, может произойти поток предупреждающих сообщений о языковых локалях. Это можно исправить, установив языковую локаль:
Code:
$ sudo dpkg-reconfigure locales
# Select something like en_US.UTF-8 and hit Ok

Продолжение процесса установки:
Code:
$ CFLAGS="-march=native" ./configure --disable-wallet

- march=native сообщает нашему компилятору gcc, чтобы автоматически обнаруживал процессор Armory и включал оптимизацию, специфичную для этого процессора. Это помогает выжать дополнительное увеличение производительности процессора ARM, что важно, потому что этот процессор относительно медленный.

bitcoind не устанавливается, поэтому libdb не нужен. Выберите --disable-wallet для установки без поддержки кошелька (с-lightning будет кошельком в этой конфигурации).

Теперь, собираем bitcoin-cli:
Code:
$ make src/bitcoin-cli

Наконец, скопируйте недавно собранный бинарный файл bitcoin-cli в /usr/local/bin:
Code:
$ sudo cp src/bitcoin-cli /usr/local/bin
$ whereis bitcoin-cli
# Should return "/usr/local/bin/bitcoin-cli"

Подключение Armory к bitcoind через RPC:

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

На USB-хосте или другом устройстве, на котором запущен bitcoind, укажите следующие элементы в bitcoin.conf:
Code:
rpcuser=
rpcpassword=
rpcallowip=

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

В bitcoin.conf:
Code:
rpcuser=
rpcpassword=
rpcconnect=

Можете заменить IP-адрес 10.0.0.2 для bitcoind, который может находиться под наблюдением 3-х лиц (например на 192.168.0.254)

Попытка запросить bitcoind из Armory:
Code:
$ bitcoin-cli -getinfo

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

Потрясающе!

*  *  *

Запуск c-lightning:

Теперь, когда все собрано, настроено и подключено к сети правильно, c-lightning можно запустить.

Запустите сеанс tmux, а затем запустите lightning:
Code:
$ tmux
$ ./lightning/lightningd/lightningd --network testnet --log-level debug
$ ./lightning/cli/lightning-cli getinfo

Примечание: выберите --network bitcoin вместо --network testnet, если вы #безрассудны. (В этом случае вы будете совершать платежи не в тестнете, а в сети Биткоина)

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

lightning-cli теперь может использоваться для генерации новых адресов для ввода/вывода Биткойнов, а также для открытия/закрытия каналов Lightning Network!

Lightning charge:

LApps-это приложения созданные в Lightning, которые задействуют мгновенные платежи, проводимые Lightning network. Недавно выпущенные LApps включают те, которые перечислены здесь в блоге Blockstream: https://blockstream.com/2018/03/29/blockstreams-week-of-lapps-ends.html (Статьи о приложениях LApps на русском: ссылка 1, ссылка 2)

Чтобы запустить эти приложения LApps, Lightning Charge должен быть установлен на Armory.

Lightning Charge-это система обработки микроплатежей, написанная на node.js. Она предоставляет функциональность c-lightning через свой REST API, к которому можно получить доступ через библиотеки JavaScript и PHP. Ссылки: оригинальная на англ., не оригинальная на русском

Lightning Charge требует c-lightning и nodejs. Установите их сейчас:
Code:
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs

На момент написания статьи Debian стабильно работал с версией node.js 8.x, на момент совершения перевода на гитхабе есть информация, что 12.x версия node.js поддерживается, поэтому можете устанавливать сразу её, прописав 12.x в вышеуказанном коде вместо 8.x. Работоспособность не тестировал, но считаю это сделать правильным, чтобы работали последние версии приложений LApps.

Ошибки разрешений могут возникнуть из-за предоставленного nodesource.com комплекта nodejs. Чтобы обойти это, выполните следующие действия:
Code:
$ mkdir ~/.npm-global
$ npm config set prefix '~/.npm-global'

Добавьте следующее в ~/.profile:
Code:
$ export PATH=~/.npm-global/bin:$PATH

Наконец:
Code:
$ source ~/.profile

Далее просто используйте npm для установки Lightning Charge и запустите charged:
Code:
$ npm install -g lightning-charge
$ charged --api-token

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


Установка nanopos LApp, чтобы превратить ваш модуль Lightning в микро торговую точку (point-of-sale):

nanopos легко устанавливается с npm:
Code:
$ npm install -g nanopos

Отредактируйте файл items.yaml с продуктами для продажи, укажите валюту с помощью --currency, а затем запустите nanopos:
Code:
$ nanopos -t --items-path items.yaml --currency USD

Заголовок отображаемой страницы может быть изменен с помощью --title, и есть ассортимент тем, доступных на bootswatch.com что может быть выбрано с -m.

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


Фото взято из блога
https://hackernoon.com/how-to-build-your-own-portable-plug-in-lightning-node-c4093a4b10fb

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

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

Спасибо за чтение!
автор оригинальной статьи: -grubles
Jump to: