Частные PoA сети на базе Parity Ethereum — часть 2: настройка и запуск
30 май, 2019
Предыдущие части
Частные PoA сети на базе Parity Ethereum — часть 1: общие тезисы и особенности установки
Настройка частной PoA сети из двух узлов
В wiki parity есть пошаговая инструкция по настройки частной PoA сети из двух узлов. Если обобщить, то настройка узла сводится к следующему:
- создание файла первичной спецификации частной сети (genesis);
- создание файлов первичной конфигурации узлов (путь к genesis, путь к каталогу хранения данных blockchain, номера портов, настройка сети, etc…);
- запуск узлов с заданными конфигурационными файлами;
- создание аккаунтов (через REST-запросы к запущенным на предыдущем шаге узлам);
- дополнение спецификации частной сети данными об аккаунтах;
- дополнение файлов конфигурации узлов данными об аккаунтах.
Отмечу, что узел, сконфигурированный по схеме Ctrl+C/Ctrl+V из данной инструкции является незащищенным: как минимум следует заблокировать websockets и ограничить доступ по RPC из внешней сети.
Я хотел бы остановиться на особенностях настройки, в частности на отличиях в конфигурировании частной сети с помощью клиента geth. Во-первых, у узла parity нет этапа инициализации: путь к genesis указывается в конфигурационном файле узла и инициализация выполняется при запуске автоматически. Во-вторых, parity умеет создавать аккаунты, адреса которых однозначно определяются некоторой фразой, т.е. при создании топологии сети можно назначить символьные имена узлам, и для этих имен parity выполнит генерацию постоянных адресов (т.е. в результате повторной генерации будут получены те же адреса). В-третьих, узел parity может быть запущен с единственным параметром командной строки: файлом конфигурации. Это весьма удобно, т.к. нет необходимости конструировать длинные строки запуска с несколькими десятками аргументов.
Тестирование работоспособности частной PoA сети
Тестирование и отладку локальной частной сети (узлы работают на одном физическом сервере) удобно выполнять в docker контейнере с предустановленным для выполнения CLI ПО. Полагаем, что узлы частной сети сконфигурированы и готовы к запуску. Запуск узла выполняется командой:
parity --config node.cfg
После запуска к консолям узлов можно подключиться с помощью команды:
geth attach http://addr:port
Тем не менее просто выполнить запуск недостаточно. Для валидации транзакций и передачи blockchain данных требуется на одном из узлов добавить адрес партнера, другими словами выполнить связывание узлов.
Узлы связываются одним из следующих способов: через конфигурационный файл, через консоль geth, через REST-запрос или через так называемый bootnode. В официальной инструкции используется REST-запрос, поэтому предлагается остановиться на этом способе. Успешное связывание сопровождается соответствующей строкой на каждом из узлов: 1/25 peers…
, где 1 - число активных партнеров, 25 - максимально возможное число партнеров.
Запуск узлов на удаленных серверах сопровождается некоторыми особенностями в части сетевых настроек. Например, если сервер находится за NAT, то необходимо задать параметр запуска --nat "extip:78.47.192.226"
, в котором указать IP вашего маршрутизатора. При этом сетевой порт доступа к узлу, указанный в секции [network]
конфигурационного файла, должен быть доступен для входящего подключения на вашем маршрутизаторе.
Я подготовил набор helper-скриптов, упрощающих запуск узлов в частной сети. Скрипты можно скачать из репозитория. В каталоге parity.local
присутствуют:
patchaccounts.sh
- скрипт, выполняющий все этапы настройки частной сети из официальной инструкции, используя genesis шаблонdemo-spec.json
и шаблоны конфигурационных файлов узловnode0.toml
иnode1.toml
; в результате выполнения скрипта в каталогеpatched
сохраняются genesis и конфигурационные файлы узлов, необходимые и достаточные для запуска частной сети;bindpeers.sh
- скрипт, выполняющий связывание узлов; входным аргументом является адрес enode:// партнера; в случае связывания в локальной сети указывать адрес не требуется;start.node*
- скрипты запуска узлов частной сети;attach.node*
- скрипты подключения JS-консоли geth к узлам частной сети;reinit.sh
- скрипт удаления blockchain данных из локальной файловой системы;trace_tx.sh
- скрипт отладки транзакции через REST-запрос; входным аргументом является hash заданной транзакции.
Эти скрипты существенно упрощают развертывание частной сети. Основная автоматизация рутинных действий достигается при отладке, например, смарт-контракта, когда требуется регулярные перезапуск узлов, очистка данных blockchain и подключение к консоли geth.
Читать далее: Частные PoA сети на базе Parity Ethereum — часть 3: смарт-контракт CRUD приложения.