Во время прошедших тестовых запусков сети Голоса у некоторых возникали проблемы с конфигурированием нод делегатов и нод для майнинга Голоса, поэтому делюсь своими рабочими конфигами для настройки нод (по отдельности для работы делегата и майнера) и небольшой инструкцией по сборке нод.
Компиляция программ из исходных кодов
Разработчики постарались максимально упростить процесс установки рабочей ноды, подготовив скрипт, автоматизирующий этот процесс. Но если у вас по какой-то причине появляются ошибки во время работы этого скрипта, можете попробовать установить ноду вручную, это не сложно.
Прежде всего, проверьте, что у вас подходящее серверное оборудование. Оптимальным вариантом будет 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 и их формат
Надеюсь, у вас всё получилось по моей инструкции. Если есть дополнения, замечания или вопросы - спрашивайте в комментариях.
@primus - я не пойму как Вы вставляете скрипт "Конфигурационный файл для ноды майнера" и как запускать cli_wallet? У меня на этом все застряло и не получается дальше все настроить и запустить! Может еще раз Вы создадите пост с более подробным описанием настройки майнера на Linux?
Вот же, цитата из статьи:
@primus - да, я так и делал - создаю по описанным действиям "witness_node_data_dir":
Для запуска нод я использую отдельную директорию, в которой лежат конфигурационные файлы и сам блокчейн Голоса. Пусть это будет директория по имени golos, давайте создадим её:
cd
mkdir golos
cd golos
Появляется надпись на английском, что файл создан. Делаю дальше по описанию:
"Прежде чем запускать Голос, скопируйте в эту папку файл со снэпшотом сети:
cp /path/to/golos-14.2/programs/golosd/golosd/snapshot5392323.json ." - но появляется надпись на английском. ЧТО ФАЙЛ ИЛИ ДИРЕКТОРИЯ ОТСУТСТВУЕТ. И дальше нода не запускается( Перепробовал уже три раза переустанавливать все сначала - но на этом моменте все встает и не двигается. Использую VM и ubuntu-16.04-server-amd64.
cli_wallet
это программа управления кошельком Голоса, идёт в комплекте с демономgolosd
.У меня в этом посте (в комментариях к которому мы всё это осуждаем) есть целый раздел, который так прямо и называется: Запуск cli_wallet.
Вообще, рекомендую внимательно весь пост еще раз прочитать - там есть ответы на большинство вопросов, что вы задаёте.
suggest_brain_key
это не для командной строки Линукса, это дляcli_wallet
@primus - сейчас опять тупить буду! cli_wallet - это отдельная программа для линукса? Или её как то вызывают?
Для ноды майнера нужно приватный ключ использовать.
В конфиге должны быть такие строчки:
Ключ, понятное дело - подставляйте свой (команда
suggest_brain_key
вам в помощь).@primus - я вставил команду suggest_brain_key - программа написала: " command not found ". Что может быть не так? Заранее извиняюсь за надоедливость)) Команду вставлял в командную строку, может куда то зайти еще надо? В witness = я вставил свой логин poloz1843
Ну потому что
/path/to/...
это путь в файловой системе где у вас лежит демонgolosd
. На практике нужно указывать реальный путь - где он конкретно у вас лежит.@primus - Спасибо большое! Но вот только теперь программа пишет что не может определить ключь )) Какой именно ключь нужно вставлять - я уже пробовал и окрытыйе и приватные ключи вставлять, но все никак. Что можно сделать?
Здорово что вы с нами, @primus
Спасибо за проделанную работу!
Можно комментировать и обсуждать материалы 2-х летней давности, круто!
Охо-хо... Все тут конфиг обсуждают, а у меня почему-то не компилируется. Ошибка на тестах. Типа вот такого:
Думал что в ветке проблема - поставил релиз v0.16.0, но проблема осталась. :( Кто-нибудь может подсказать что делать? Ubuntu 14.04.
@primus a для винды есть инструкция по установке клиента?
А для винды есть инструкция?
сервер можно сделать с домашнего ПК установив на него Ubuntu 16.04 LTS ?
Да, конечно.
@primus не подскажете, как добыть signing key? 😬😊
Можно использовать любой ключ, сгенерённый командой
suggest_brain_key
- она выдаёт случайный публичный и приватный ключ.Прописываете приватный ключ в конфиг ноды.
И обновляете публичный ключ (соответвующий приватному в конфиге) через консоль:
update_witness qqc " " "GLS7NHcdAPHKA7kBLoWXz4HTrJAnTGyAdNHRAtjzSLSykHHQ8Jxwq" {} true
(ключ свой вставьте вместо GLS7NHcdAPHKA7kBLoWXz4HTrJAnTGyAdNHRAtjzSLSykHHQ8Jxwq)
Все вышеприведённые команды - для
cli_wallet
подскажите, почему при майнинге постоянно пишет что "+1 SP found a block", но на балансе увеличение SP не происходит? Выходит, что блоки не засчитываются?
Спасибо за конфиг, но вопросы все равно остались.
1. Одновременно запускать ноду делегата и майнера на одном аккаунте на разных серверах нельзя. Т.е. практически вы пока можете это сделать. Но теоретически (в коде такая фича присутсвует, но пока не активирована) при такой работе вы можете полностью лишиться средств на аккаунте из-за потенциального риска форка сети если один и тот же блок вы подпишите и как майнер и как делегат.
В общем, майнинг и делегирование нужно делать на разных аккаунтах.
2. Ключ для делегата должен быть тот, что вы задали командой
update_witness
. Обратите внимание, что в этой команде вы указываете публичный ключ, а в конфигурационном фале ноды прописываете соответствующий ему приватный ключ.3.
cli_wallet
лежит в папке./programs/cli_wallet/cli_wallet
от корня дистрибутива исходного кода Голоса.Как запустить cli_wallet? Выдает ту самую ошибку что у вас в инструкции и советы не помогают... все равно ошибка:
Кто может подсказать - приватный ключ, который указывается в конфиге - может быть любой или он обязательно должен являться активным ключем (active key) соответствующего аккаунта?
для делегата может указываться ключ из cli_wallet сгенерированный brain key
для майнера нужен активный ключ
@primus, чтобы поднять ноду надо иметь стационарный ip? Мне сеть выдает динамический внешний ip, это не годится?
Можно использовать динамический IP, с этим проблем нет.
https://golos.id/ru--administracziya/@staiki/administracii-golos-sdelaite-ogranichenie-novichkam
Спасибо, я действительно нуждался в этом раньше. Всем не объяснял мне это правильно. Это хорошо для тех, кто не очень с программированием.
Спасибо большое за подробную инструкцию, мне как раз не хватало информации
На удивление уже активно майнят судя по очереди =)
А планируется или возможно где-то уже запущено нечто подобное https://steemd.com/ ?
Уже есть http://golos.steemdb.com/
Просто GPU майнеры со своим личным кодом и тут уже успели подсуетиться =(
Так что как и в steem тема майнига по сути закрыта - весь доход с него получает один человек.
Вот текущая очередь:
"penguin-08",
"gtx-1080-sc-0003",
"gtx-1080-sc-0062",
"penguin-15",
"gtx-1080-sc-0063",
"gtx-1080-sc-0064",
"gtx-1080-sc-0004",
"gtx-1080-sc-0005",
"penguin-16",
"gtx-1080-sc-0006",
"gtx-1080-sc-0007",
"gtx-1080-sc-0008",
"gtx-1080-sc-0009",
"gtx-1080-sc-0019",
"gtx-1080-sc-0020",
"penguin-17",
"gtx-1080-sc-0021",
"penguin-18",
"gtx-1080-sc-0022",
"gtx-1080-sc-0065",
"gtx-1080-sc-0010",
"gtx-1080-sc-0067",
"gtx-1080-sc-0011",
"gtx-1080-sc-0068",
"gtx-1080-sc-0066",
"gtx-1080-sc-0069",
"penguin",
"gtx-1080-sc-0070",
"gtx-1080-sc-0071",
"gtx-1080-sc-0012",
"gtx-1080-sc-0072",
"gtx-1080-sc-0013",
"gtx-1080-sc-0073",
"penguin-00",
"gtx-1080-sc-0014",
"gtx-1080-sc-0074",
"gtx-1080-sc-0015",
"gtx-1080-sc-0075",
"gtx-1080-sc-0023",
"penguin-01",
"gtx-1080-sc-0024",
"gtx-1080-sc-0025",
"gtx-1080-sc-0026",
"gtx-1080-sc-0027",
"gtx-1080-sc-0079",
"gtx-1080-sc-0028",
"gtx-1080-sc-0029",
"gtx-1080-sc-0030",
"gtx-1080-sc-0031",
"gtx-1080-sc-0080",
"gtx-1080-sc-0032",
"gtx-1080-sc-0033",
"gtx-1080-sc-0034",
"gtx-1080-sc-0035",
"gtx-1080-sc-0036",
"gtx-1080-sc-0076",
"gtx-1080-sc-0037",
"penguin-02",
"gtx-1080-sc-0038",
"penguin-03",
"gtx-1080-sc-0039",
"gtx-1080-sc-0040",
"penguin-09",
"gtx-1080-sc-0041",
"gtx-1080-sc-0042",
"gtx-1080-sc-0043",
"penguin-10",
"gtx-1080-sc-0044",
"gtx-1080-sc-0045",
"gtx-1080-sc-0046",
"gtx-1080-sc-0047",
"gtx-1080-sc-0048",
"penguin-04",
"penguin-05",
"gtx-1080-sc-0077",
"gtx-1080-sc-0049",
"gtx-1080-sc-0050",
"gtx-1080-sc-0051",
"penguin-06",
"gtx-1080-sc-0052",
"penguin-07",
"gtx-1080-sc-0053",
"gtx-1080-sc-0054",
"gtx-1080-sc-0055",
"gtx-1080-sc-0016",
"gtx-1080-sc-0056",
"gtx-1080-sc-0017",
"gtx-1080-sc-0057",
"gtx-1080-sc-0001",
"gtx-1080-sc-0018",
"gtx-1080-sc-0058",
"gtx-1080-sc-0059",
"gtx-1080-sc-0002"
майнер пишет: "Exception binding outgoing connection to desired local endpoint 0.0.0.0:53494: bind: Address already in use" Что может быть?
Я так понимаю, что это не ошибка, а предупреждение (warning), т.е. не критическая проблема и всё должно работать. У меня было такое на одном тестовом сервере - на работоспособность майнера не влияло. Я поэтому не стал разбираться, в чём причина - подозреваю, что нужный порт был занят другим процессом.
добро пожаловать к платформе @primus!
У меня проблема до сих пор, пост не могу отправить.
UPD: отправился с 4й попытки.
Наконец то, Я очень рад! Добавляйтесь в друзья! Рами Малек особый привет!
Удачной работы, @primus
пrimus как всегда на высоте, жаль не видно тебя у нас в postcoin.
Публично обещаю вернуться - тем более что я на 100к+ вложился в PostCoin.
нескромный вопрос - а 100к это рублей?
А есть возможность майнинга на виндовой машине?
Есть, только если бинарники самому собрать. Под Unix тоже не было готовых бинарников для продуктива - все сами собирали.
То есть только линуксоидам такое доступно? Или вам не выгодно чтобы было больше народа для майнинга и делегатов? Я думаю вы вкурсе какой процент пользователей виндовс. Так что рекомендую собрать бинарники для виндоусятников.
Впечатляющая оперативность! :)
Спасибо Вам за проделанную работу!
Congrats on the launch!
WOW! Спасибо за такую подробную инструкцию! ;)
Ребята! Наконец-то можно писать по-русски! Ура! Спасибо вам! :)