Konstantin Narkhov
Pheix 0.8.96
@condemnedcell
konstantinnarkhov.pro

Частные PoA сети на базе Parity Ethereum — часть 1: общие тезисы и особенности установки

27 май, 2019


Введение в Parity Ethereum

В сети Ethereum на каждом узле выполняется  Ethereum Virtual Machine (сокр. EVM). Для взаимодействия с EVM используется ethereum-клиент (сокр. CLI). Если говорить строго, то CLI запускает EVM и обеспечивает взаимодействие с ней. Таким образом CLI является базовым ПО, обеспечивающим работоспособность узла в сети ethereum. Проще говоря, для запуска узла ethereum вам потребуется запустить CLI.

Существует официальные и сторонние (неофициальные) ethereum-клиенты. Parity является неофициалным клиентом. Это мульти функциональный в смысле развертывания узла клиент, позволяющий запустить облегченный (light), архивный (archive) и полный (full) узел.

В рамках этого доклада нам будет интересно следующее свойство клиента parity: встроенный алгоритм Aura, реализующий консенсус Proof-of-Authority (сокр. PoA). PoA - оптимальный вариант для использования в частных сетях: в сети назначаются узлы, которым делегируются права валидации блока. Таким образом снимается необходимость непрерывного майнинга (трата вычислительных ресурсов) в случае Proof-of-Work или отслеживание и распределение балансов в случае Proof-of-Stake.

В официальном ethereum клиенте geth реализован собственный PoA-алгоритм Clique. В докладе будет представлено сравнение Aura и Clique в части быстродействия и потребления ресурсов. Сравнение алгоритмов в части реализации и функционирования представлено в статье.


Установка parity, работа в docker, использование совместно с консолью geth

Наиболее простой и быстрый способ запуска частной сети ethereum - это использование docker. На узлах д.б. запущен docker-контейнер с предустановленным для выполнения CLI ПО:

Для доступа к узлу по RPC потребуется только проброс сети из контейнера. Таким образом установка узла сводится к установке некоторого стабильного дистрибутива linux с docker. Если вы собираетесь запускать узел на VPS, то, возможно, ваш виртуальный сервер не обладает достаточным количеством ресурсов, и использование docker окажется накладным. Поэтому придется собирать все необходимое ПО вручную из исходных текстов. Процесс долгий и требующий базовых знаний bash, make и git. Сразу хочу предостеречь вас от попытки сэкономить время и установить часть ПО из пакетов, доступных в официальных репозиториях вашего дистрибутива (например, в Debian и Ubuntu доступны go, rust, z3). В результате вы получите устаревшие версии, совместно с которыми вам придется собирать устаревшую версию solidity или parity. Я действую просто: узнаю текущие стабильные версии и устанавливаю их вручную.

Для удобства я подготовил docker контейнер для развертывания частных ethereum сетей. Вы можете скачать и запустить его, собрать собственный контейнер, используя мой Dockerfile, или на основании инструкций из моего Dockerfile собрать все ПО вручную для своего дистрибутива linux без docker (потребуются навык создания собственных docker контейнеров, понимание структуры и синтаксиса Dockerfile).

Резонный вопрос: для чего устанавливать два разных CLI: geth (в составе go-ethereum) и parity? Дело в том, что для отладки работы узла зачастую используется JS-консоль. Особенность parity в том, что этот CLI не имеет встроенной консоли и приходится использовать geth. То есть для отладки узла parity следует подключиться к нему с помощью geth: в результате вы получите доступ к JavaScript API вашего узла.

Однако некоторые полезные функции parity недоступны в JS консоли. Например, методы объекта trace. При этом если обратиться с REST-запросом напрямую на RPC порт, то запрос успешно обрабатывается. Я связываю это с расхождением в реализации CLI.

Читать далее: частные PoA сети на базе Parity Ethereum — часть 2: настройка и запуск.

Blog entries

Check out latest blog entries: most interesting stories about past events & activities.

Quick feedback

Letters and spaces only