Установка ElecrumX

Технология electrum-кошельков довольно прочно зарекомендовала себя на современном рынке криптовалют. Согласно официальному описанию, она сочетает в себе скорость и относительную надежность, исключая конечно уязвимости сторонних протоколов, которые используются в ее работе. Для работы этих кошельков необходим специальный сервер. Для работы кошелька ставить его не обязательно, т.к. десятки серверов установлены и поддерживаются энтузиастами, но если вы достаточно параноидальны, вы возможно захотите установить такой сервер для приватного использования. Об установке одной из его реализаций — Electrumx мы и поговорим.

Итак, ставить будем на Ubuntu 16.04. Для работы сервера нужны два компонента — сам демон криптовалюты, который будет поддерживать в актуальном состоянии цепочку блоков, и собственно сервер electrum. В официальном HOWTO этот процесс описан довольно подробно. Мы же остановимся на нюансах. Итак первое с чем мы столкнемся — это требование к интерпретатору Python:

Python version >= 3.6 is required.

В рассматриваемой версии дистрибутива используется версия интерпретатора 3.5, что нам не подходит. Установку нужного интерпретатора можно провести, пользуясь идущим в составе дистрибутива скриптом, но я решил, что удобнее будет воспользоваться pyenv это автоматизированная среда установки нужной версии интепретатора. Перед установкой этой оболочки требуются библиотеки и утилиты для сборки нужной версии, поэтому следует сначала установить их, если они еще не установлены:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \

libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \

xz-utils tk-dev

Такой набор утилит нужен для того, чтобы поставить большинство версий интерпретатора. После установки нужных инструментов сборки ставим сам pyenv с помощью автоматического инсталлятора:

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

pyenv update

Вышеприведенные команды установят окружение в домашней директории пользователя от имени которого запускался скрипт и добавят нужные переменные окружения для своей правильной работы. Дальше — ставим нужную нам версию:

pyenv install 3.6.5

Ждем около 10-15 минут, когда соберется интерпретатор и затем устанавливаем нужную версию интерпретатора для использования по-умолчанию в вашем окружении:

pyenv global 3.6.5

Далее — скачиваем нужную версию дистрибутива ElectrumX. На момент написания статьи это — 1.4.3. Разворачиваем ее и устанавливаем:

wget https://github.com/kyuupichan/electrumx/archive/1.4.3.tar.gz

tar xzvf 1.4.3.tar.gz && cd electrumx-1.4.3

python setup.py install

Указанный скрипт скачает все необходимые компоненты для монеты по-умолчанию (т.е. Bitcoin) и установит их. Следующий шаг довольно долгий — это скачивание всего блокчейна. Для этого скачаем последнюю на момент написания статьи версию Bitcoin-core за номером 0.16, разворачиваем ее и сначала конфигурируем, чтобы скачался полный блокчейн со всеми транзакциями, как просит официальная документация к ElectrumX:

wget https://bitcoin.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0-x86_64-linux-gnu.tar.gz

tar xzvf bitcoin-0.16.0-x86_64-linux-gnu.tar.gz && sudo cp -r bitcoin-0.16.0/* /usr/local/

Далее создаем директорию для нашего демона и пишем для нашего демона блокчейна примено такую конфигурацию bitcoin.conf:

daemon=1
txindex=1
server=1
rpcbind=127.0.0.1
rpcport=8332
rpcuser=user
rpcpassword=password

И запускаем его:

bitcoind -conf=/home/user/bitcoin/bitcoin.conf -datadir=/home/user/bitcoin/ -pid=/home/user/bitcoin/bitcoin.pid

Далее ждем примерно 8 часов, когда скачается весь блокчейн. Учтите, что для работы этого демона надо около 1 ГБ памяти и около 150 ГБ дискового пространства. Если блокчейн у вас уже скачан, то скорее всего он скачан в режиме «prune», когда не значимые куски блокчейна убираются. Это неприемлемо для electrumx и для запуска с опцией txindex=1 нужно предварительно реиндексировать блокчейн, запустив его с опцией -reindex. Пока мы ждем, напишем конфигурацию для ElectrumX. Этот сервер управляется с помощью переменных окружения, расшифровка которых указана в соответствующем разделе HOWTO. Пишем в любом из трех конфигурационных файлов командной оболочки, например в ~/.bash_profile следующее:

# Required
export COIN="BitcoinSegwit"
export NET="mainnet"
export HOST="0.0.0.0"
export DB_DIRECTORY="/home/user/electrumdb"
export DAEMON_URL="user:password@127.0.0.1:8332"
export SSL_CERTFILE="/home/user/etc/ssl/server.crt"
export SSL_KEYFILE="/home/user/etc/ssl/server.key"
# Optional
export TCP_PORT="50001"
export SSL_PORT="50002"
export CACHE_MB="1024"

И перечитываем конфигурацию:

source ~/.bash_profile

Сертификат и ключ для SSL могут быть самоподписанными. Их генерация стандартна и описана в официальном HOWTO. В качестве монеты выбран BitcoinSegwit не случайно. Насколько можно понять из всех модификаций Bitcoin, ElectrumX поддерживает три из них: BitcoinCash, BitcoinGold и BitcoinSegwit. Третий — это насколько я понимаю стандартный BTC, с поддержкой алгоритма подтверждения транзакции Segregated Witness, что нам и нужно.

Окончание загрузки блокчейна, что можно определить с помощью команды bitcoin-cli getblockcount и сравнить его с числом отсюда. Если они совпадают, то загрузка завершена. После того как это произошло — запускаем ElectrumX:

electrumx_server.py

Если все настроено правильно, то вывод должен быть примерно таким

 INFO:root:ElectrumX server starting
 INFO:Controller:software version: ElectrumX 1.4.3
 INFO:Controller:supported protocol versions: 1.0-1.2
 INFO:Controller:event loop policy: None
 INFO:Daemon:daemon #1 at 127.0.0.1:8332/ (current)
 INFO:BlockProcessor:switching current directory to /home/user/electrumdb
 INFO:BlockProcessor:using leveldb for DB backend
 INFO:BlockProcessor:opened DB for serving
 INFO:BlockProcessor:closing DB to re-open for sync
 INFO:BlockProcessor:opened DB for sync
 INFO:BlockProcessor:DB version: 6
 INFO:BlockProcessor:coin: BitcoinSegwit
 INFO:BlockProcessor:network: mainnet
 INFO:BlockProcessor:height: 26,509
 INFO:BlockProcessor:tip: 00000000fb5b71fbf2854ad91c98513a64dfccc421c6ea3cd3bddc56b3133f56
 INFO:BlockProcessor:tx count: 26,678
 INFO:BlockProcessor:flush count: 1
 INFO:BlockProcessor:sync time so far: 34s
 INFO:BlockProcessor:reorg limit is 200 blocks
 INFO:BlockProcessor:flushing DB cache at 1,024 MB
 INFO:Controller:RPC server listening on localhost:8000
 INFO:Prefetcher:catching up to daemon height 491,737 (465,228 blocks behind)
 INFO:BlockProcessor:our height: 26,519 daemon: 491,737 UTXOs 0MB hist 0MB
 INFO:BlockProcessor:our height: 50,019 daemon: 491,737 UTXOs 3MB hist 6MB

Доступ к серверу по портам TCP_PORT и SSL_PORT и адресу, указанному в HOST, появится только после того, как закончится синхронизация БД, на что понадобится еще около 10 часов и примерно 4-5 ГБ оперативной памяти.

Чтобы не оставлять запущенным сервер в консоли можно воспользоваться консольным мультиплексором screen или tmux или автоматизировать запуск с помощью юнита systemd. Для чего можно использовать способ, описанный в официальном HOWTO.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.