Настройка нод майнера и делегата для работы в Голосе: рабочие конфиги и пояснения по установке

Во время прошедших тестовых запусков сети Голоса у некоторых возникали проблемы с конфигурированием нод делегатов и нод для майнинга Голоса, поэтому делюсь своими рабочими конфигами для настройки нод (по отдельности для работы делегата и майнера) и небольшой инструкцией по сборке нод.

Компиляция программ из исходных кодов

Разработчики постарались максимально упростить процесс установки рабочей ноды, подготовив скрипт, автоматизирующий этот процесс. Но если у вас по какой-то причине появляются ошибки во время работы этого скрипта, можете попробовать установить ноду вручную, это не сложно.

Прежде всего, проверьте, что у вас подходящее серверное оборудование. Оптимальным вариантом будет Ubuntu 16.04 и 4 Gb оперативной памяти (больше - лучше, но и четырёх гигабайт вам должно хватить на несколько месяцев поддержки работы сети Голоса).

Я компилировал и на сервере всего с 2Gb оперативной памяти - в этом случае используйте опцию -DLOW_MEMORY_NODE=ON.

Устанавливаем необходимые библиотеки и зависимости:

sudo apt-get update
sudo apt-get install git cmake g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev libssl-dev libncurses5-dev doxygen libreadline-dev dh-autoreconf screen
sudo

Скачиваем исходный код Голоса из официального репозитория:

git clone https://github.com/GolosChain/golos.git golos-14.2
cd golos-14.2
git submodule update --init --recursive

Генерируем файлы для управления сборкой:

cmake -DCMAKE_BUILD_TYPE=Release .

Если у вас мало памяти, как я уже писал, укажите это:

cmake -DCMAKE_BUILD_TYPE=Release -DLOW_MEMORY_NODE=ON .

И завершаем компиляцию (придётся подождать некоторое время):

make

Для запуска нод я использую отдельную директорию, в которой лежат конфигурационные файлы и сам блокчейн Голоса. Пусть это будет директория по имени golos, давайте создадим её:

cd
mkdir golos
cd golos

Запуск ноды прозводится командой:

/path/to/golos-14.2/programs/golosd/golosd

где /path/to/ - это путь в системе до папки golos-14.2 созданной на этапе скачивания исходного кода Голоса из официального репозитория.

Прежде чем запускать Голос, скопируйте в эту папку файл со снэпшотом сети:

cp /path/to/golos-14.2/programs/golosd/golosd/snapshot5392323.json .

И теперь можно запускать golosd:

/path/to/golos-14.2/programs/golosd/golosd

При первом запуске golosd создаст директорию witness_node_data_dir для хранения блокчейна. Прервите работу golosd и создайте (в любом текстовом редакторе, я использую nano) конфигурационный файл в этой директории:

nano witness_node_data_dir/config.ini

Конфигурационный файл для ноды майнера:

# Endpoint for P2P node to listen on
# p2p-endpoint = 

# Maxmimum number of incoming connections on P2P endpoint
# p2p-max-connections = 

# P2P nodes to connect to on startup (may specify multiple times)
# seed-node = 

seed-node = 95.85.13.229:4243
seed-node = 95.85.13.229:4243
seed-node = 95.85.33.35:4243
seed-node = 88.99.13.48:4243

# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints.
# checkpoint = 

# Endpoint for websocket RPC to listen on
# rpc-endpoint = 

rpc-endpoint = 127.0.0.1:9090

# Endpoint for TLS websocket RPC to listen on
# rpc-tls-endpoint = 

# The TLS certificate file for this server
# server-pem = 

# Password for this certificate
# server-pem-password = 

# Block signing key to use for init witnesses, overrides genesis file
# dbg-init-key = 

# API user specification, may be specified multiple times
# api-user = 

# Set an API to be publicly available, may be specified multiple times
public-api = database_api login_api

# Plugin(s) to enable, may be specified multiple times
enable-plugin = witness account_history

# Defines a range of accounts to track as a json pair ["from","to"] [from,to)
# track-account-range = 

# RPC endpoint of a trusted validating node (required)
# trusted-node = 

# Track market history by grouping orders into buckets of equal size measured in seconds specified as a JSON array of numbers
bucket-size = [15,60,300,3600,86400]

# How far back in time to track history for each bucket size, measured in the number of buckets (default: 5760)
history-per-size = 5760

# Defines a range of accounts to private messages to/from as a json pair ["from","to"] [from,to)

# Enable block production, even if the chain is stale.
enable-stale-production = false

# Percent of witnesses (0-99) that must be participating in order to produce blocks
required-participation = false

# name of witness controlled by this node (e.g. initwitness )
# witness = 

witness = "alcotester"

# name of miner and its private key (e.g. ["account","WIF PRIVATE KEY"] )
# miner = 

miner = ["alcotester","5JGyvx65iLqRgX77Yzr2kDYqEoEwG3PhnxDJ2Nb97SbVb5CbGKs"]

# Number of threads to use for proof of work mining
# mining-threads = 

mining-threads = 2

# WIF PRIVATE KEY to be used by one or more witnesses or miners
# private-key = 

# Account creation fee to be voted on upon successful POW - Minimum fee is 100.000 STEEM (written as 100000)

miner-account-creation-fee = 3000

# Maximum block size (in bytes) to be voted on upon successful POW - Max block size must be between 128 KB and 750 MB
# miner-maximum-block-size = 

# SBD interest rate to be vote on upon successful POW - Default interest rate is 10% (written as 1000)
# miner-sbd-interest-rate = 

# declare an appender named "stderr" that writes messages to the console
[log.console_appender.stderr]
stream=std_error

# declare an appender named "p2p" that writes messages to p2p.log
[log.file_appender.p2p]
filename=logs/p2p/p2p.log
# filename can be absolute or relative to this config file

# route any messages logged to the default logger to the "stderr" logger we
# declared above, if they are info level are higher
[logger.default]
level=warn
appenders=stderr

# route messages sent to the "p2p" logger to the p2p appender declared above
[logger.p2p]
level=warn
appenders=p2p

mining-threads = 2 - количество ядер вашего CPU

Конфигурационный файл для ноды делегата:

# Endpoint for P2P node to listen on
# p2p-endpoint = 

# Maxmimum number of incoming connections on P2P endpoint
# p2p-max-connections = 

# P2P nodes to connect to on startup (may specify multiple times)
# seed-node = 

seed-node = 95.85.13.229:4243
seed-node = 146.185.148.114:4243
seed-node = 95.85.33.35:4243
seed-node = 88.99.13.48:4243

# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints.
# checkpoint = 

# Endpoint for websocket RPC to listen on
rpc-endpoint =  127.0.0.1:9090

# Endpoint for TLS websocket RPC to listen on
# rpc-tls-endpoint = 

# The TLS certificate file for this server
# server-pem = 

# Password for this certificate
# server-pem-password = 

# Block signing key to use for init witnesses, overrides genesis file
# dbg-init-key = 

# API user specification, may be specified multiple times
# api-user = 

# Set an API to be publicly available, may be specified multiple times
# public-api = database_api login_api

# Plugin(s) to enable, may be specified multiple times

enable-plugin = witness
enable-plugin = account_history
enable-plugin = follow
enable-plugin = market_history
enable-plugin = private_message
enable-plugin = tags
public-api = database_api login_api market_history_api tags_api follow_api

# Defines a range of accounts to track as a json pair ["from","to"] [from,to)
# track-account-range = 

# RPC endpoint of a trusted validating node (required)
# trusted-node = 

# Track market history by grouping orders into buckets of equal size measured in seconds specified as a JSON array of numbers
bucket-size = [15,60,300,3600,86400]

# How far back in time to track history for each bucket size, measured in the number of buckets (default: 1000)
history-per-size = 1000

# Defines a range of accounts to private messages to/from as a json pair ["from","to"] [from,to)
# pm-account-range = 

# Enable block production, even if the chain is stale.
enable-stale-production = false

# Percent of witnesses (0-99) that must be participating in order to produce blocks
required-participation = false

# name of witness controlled by this node (e.g. initwitness )

witness = "primus"

# name of miner and its private key (e.g. ["account","WIF PRIVATE KEY"] )
# miner = 

# Number of threads to use for proof of work mining
# mining-threads = 

# WIF PRIVATE KEY to be used by one or more witnesses or miners

private-key = 5KeVwZewUmGsP8UzowRJdUNh1dCq7McweYJrPgokVsJiyRTCm6W

# Account creation fee to be voted on upon successful POW - Minimum fee is 100.000 STEEM (written as 100000)

miner-account-creation-fee = 3000

# Maximum block size (in bytes) to be voted on upon successful POW - Max block size must be between 128 KB and 750 MB
# miner-maximum-block-size = 

# SBD interest rate to be vote on upon successful POW - Default interest rate is 10% (written as 1000)
# miner-sbd-interest-rate = 

# declare an appender named "stderr" that writes messages to the console
[log.console_appender.stderr]
stream=std_error

# declare an appender named "p2p" that writes messages to p2p.log
[log.file_appender.p2p]
filename=logs/p2p/p2p.log
# filename can be absolute or relative to this config file

# route any messages logged to the default logger to the "stderr" logger we
# declared above, if they are info level are higher
[logger.default]
level=warn
appenders=stderr

# route messages sent to the "p2p" logger to the p2p appender declared above
[logger.p2p]
level=warn
appenders=p2p

Обратите внимание, что прежде, чем ваша нода делегата заработат и начнёт подписывать блоки, вам необходимо объявить себя делегатом в сети, если это не произошло автоматически, когда ваш аккаунт работал как PoW майнер.

Если вы хотите работать делегатом с аккаунта, перенесённого из снэпшота, вам нужно обявить себя делегатом (через cli_wallet):

update_witness primus " " "GLS7NHcdAPHKA7kBLoWXz4HTrJAnTGyAdNHRAtjzSLSykHHQ8Jxwq" {} true 
vote_for_witness primus primus true true

При этом указывается публичный ключ, соответсвующий приватному WIF, прописанному в конфигурационном файле ноды делегата.

И еще один момент - для объявления себя делегатом необходимо, чтобы у вас на аккаунте было достаточное количество GP. Если у вас еще нет GP на счету - подождите, когда они вам начислятся по результатам снэпшота (от полутора до 6 часов после старта сети).

Конфигурационные файлы готовы, используйте screen чтобы старовать Голос

Окончательно запускать golosd лучше через screen, чтобы он работал в фоновом режиме с возможностью в любой момент подключится к экрану вывода программы:

screen -dmS golosd /path/to/golos-14.2/programs/golosd/golosd

Подключение к экрану вывода программы

screen -x golosd

Выход из screen обратно в консоль сервера: Ctrl^A D

Запуск cli_wallet

Если использовать приведённые выше конфиги, то с запуском cli_wallet не должно быть проблем. Если же вы получаете ошибку:

2337101ms th_a       main.cpp:154                  main                 ] wdata.ws_server: ws://127.0.0.1:9090 
0 exception: unspecified
Underlying Transport Error
    {"message":"Underlying Transport Error"}
    asio  websocket.cpp:444 operator()

    {"uri":"ws://127.0.0.1:9090"}
    th_a  websocket.cpp:673 connect

проверьте, что в конфиге ноды (witness_node_data_dir/config.ini) у вас установлено rpc-endpoint = 127.0.0.1:9090

Для уверенности что клиент пытается содиниться с сервером golosd по правильному порту, стартуйте его с параметром командной строки:

cli_wallet --server-rpc-endpoint="ws://127.0.0.1:9090"

Полезные ссылки

Essential Guide to Becoming a Steem Witness

Список всех команд cli_wallet и их формат

API golosd с примерами команд

Надеюсь, у вас всё получилось по моей инструкции. Если есть дополнения, замечания или вопросы - спрашивайте в комментариях.

Удачной работы в Голосе!

голоснастройкамайнингделегаты
110
141.025 GOLOS
1
В избранное
primus
Биткоины - для умных!
110
1

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (49)
Сортировать по:
Сначала старые