Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
xtar
7 лет назад

Сделал скрипт для backup-сервера активных делегатов

ВНИМАНИЕ!

После 7 дней тестов словил несколько missed-блоков и оказалось, что при определенном стечении обстоятельств, схема может не сработать.

Как я понял, скрипт сработал как раз в тот момент, когда настала моя очередь генерации блока. И что-то пошло не так.

Если следить за очередью и менять ноду в безопасное время, то всё пройдет успешно.

Задача

Необходимо, чтоб backup-сервер следил за появлением новых missed-блоков вашего делегата. Если появляется missed-блок, то backup-сервер автоматически переключает генерацию на себя.

Проверка теории

После успешного эксперимента и консультации с @litvintech, оказалось, что схема рабочая. Осталось автоматизировать.

Подготовка backup-сервера

Для парсинга json-ответов от API в скрипте используется утилита jq. Устанавливаем командой:
sudo apt-get install jq

Запускаем golosd. После синхронизации с сетью запускаем cli_wallet и импортируем приватный ACTIVE ключ вашего аккаунта.

После этого генерируем новый набор ключей с помощью команды suggest_brain_key.

В config.ini вколачиваем

rpc-endpoint=127.0.0.1:9090
witness = "nickname"
private-key = private_brain_key

Перезапускаем golosd командой:

./golosd --replay-blockchain

cli_wallet запускаем со следующими параметрами:
./cli_wallet --server-rpc-endpoint="ws://127.0.0.1:9090" --rpc-http-endpoint 127.0.0.1:8093 --rpc-http-allowip 127.0.0.1

В результате у вас получится нода, которая постоянно выдает
Not producing block for nickname because I don't have the private key for GLS6rfMKdTTd...

Так и должно быть. Т.к. вы сгенерировали новые brain ключи. Теперь, если в cli_wallet выполнить команду

update_witness ...

с новым публичным brain ключем, то генерация блоков переключится на этот сервер.

Я решил автоматизировать этот процесс и написать скрипт, который сам будет следить за увеличением missed-блоков и выполнять команду update_witness.

Подготовка скрипта

Скачать скрипт можно из github.

Но прежде чем его запускать, отредактируйте значения переменных.

# cli_wallet --rpc-http-endpoint url
WALLET=http://127.0.0.1:8093

# cli_wallet unlock password
PASSWORD="PASSWORD"

# update_witness params:
NICKNAME="xtar" #your witness nickname
BACKUPKEY="PUBKEY" # backup server brain pub_key
URL="https://golos.io/ru--delegaty/@xtar/kandidat-delegat-xtar-razrabotchik-steemul-ru" # post url
FEE="3.000 GOLOS" # account_creation_fee
BLOCKSIZE=65536 # maximum_block_size
RATE=1000 # sbd_interest_rate

Теперь, когда все переменные вы заполнили, можете выполнить скрипт командой

chmod +x check.sh && ./check.sh

Алгоритм работы

Выполнение скрипта необходимо засунуть в crontab для ежеминутного выполнения. Для этого в файл /etc/crontab добавляем строку:

* * * * * /path/to/sh/check.sh

  • скрипт подключается к API cli_wallet
  • если кошелек заблокирован - разблокирует паролем, указанным в переменной PASSWORD
  • смотрит (командой get_witness nickname) текущее количество missed-блоков вашего делегата и записывает в файл
  • после повторного запуска скрипт сравнивает старое и новое количество missed-блоков
  • если количество missed-блоков изменилось, то выполняет команду update_witness с параметрами из переменных.
  • тем самым, если все переменные заполнены верно, скрипт переключает генерацию блоков на backup-сервер.

Вопросы, предложения?

Вопросы и свежие идеи приветствуются в комментариях!


Если вы готовы поддержать новые мои разработки (идей много), поддержите моего делегата, ник @xtar вот тут https://golos.io/~witnesses .

Заранее благодарю! =)

1
19.963 GOLOS
На Golos с October 2016
Комментарии (6)
Сортировать по:
Сначала старые