В таблице делегатов на Стимуле часто вижу, что некоторые делегаты фиды публикуют с большими задержками:
Да, может сейчас это на так важно с технической точки зрения (пока токены голоса не торгуются на бирже), но я считаю, что активные делегаты должны подавать хороший пример остальному сообществу и уже сейчас публикация фидов не должна превышать 2-3 часов.
Конечно же, каждые 2 часа заходить в cli_wallet и выполнять команду publish_feed программисту лень, поэтому я написал простенький bash-скрипт.
Закинул скрипт на github. Исходный код:
#!/bin/bash
# cli_wallet --rpc-http-endpoint url
WALLET=http://127.0.0.1:8093
# cli_wallet unlock password
PASSWORD="PASSWORD"
# publish_feed nickname:
NICKNAME="xtar"
function is_locked {
LOCKED=`curl -s --data-binary '{"id":"1","method":"is_locked","params":[""]}' "$WALLET" | jq -r '.result'`
}
function checkLockAndExit {
if [ "$EXITLOCK" = true ]; then
echo -n "Locking wallet again..."
curl -s --data-binary '{"id":0,"method":"lock","params":[]}' "$WALLET" > /dev/null
echo ""
echo "Locked."
fi
}
is_locked
if [ "$LOCKED" == "true" ]; then
EXITLOCK=true
echo -n "Wallet is locked. Trying to unlock..."
curl -s --data-binary '{"id":"1","method":"unlock","params":["'"$PASSWORD"'"]}' "$WALLET" > /dev/null
echo ""
is_locked
if [ "$LOCKED" == "true" ]; then
echo "Can't unlock wallet, exiting."
checkLockAndExit
else
echo "Wallet unlocked."
fi
else
if [ "$LOCKED" == "false" ]; then
EXITLOCK=false
echo "Wallet was unlocked before."
else
echo "Some error. Is cli_wallet running? Exit."
exit
fi
fi
# примерно раз в 60 минут обновлять фид
RANGE=60
number=$RANDOM
let "number %= $RANGE"
if [ $number -eq 30 ]; then
BASE="1.000"
QUOTE=`curl -s "http://www.steeme.ru/gf.html?mode=feed"`
PUB=`curl -s --data-binary '{"id":"2","method":"publish_feed","params":["'"$NICKNAME"'",{"base":"'"$BASE GBG"'", "quote":"'"$QUOTE GOLOS"'"}, true],"jsonrpc":"2.0"}' "$WALLET" | jq -r '.id'`
if [ $PUB -eq 2 ]; then
echo "Feed was updated successfully. 'base'=${BASE} 'quote'=${QUOTE}"
else
echo "Some error. Feed wasn't updated."
fi
fi
checkLockAndExit
Первая половина скрипта занимается разблокировкой кошелька cli_wallet (если он был до этого заблокирован) и снизу кусок кода примерно раз в час публикует фид.
Скрипт нужно засунуть в крон, на ежеминутное выполнение. Для этого добавьте в файл /etc/crontab строку
* * * * * /path/to/sh/pub.sh
Либо, если не хотите связываться с кроном, можно засунуть кусок кода с публикацией в бесконечный цикл со случайной паузой от 1 до 60 минут.
while true ; do
curl -s --data-binary '{"id":"1","method":"publish_feed","params":["'"$NICKNAME"'",{"base":"0.100 GBG", "quote":"1.000 GOLOS"}, true],"jsonrpc":"2.0"}' "$WALLET" > /dev/null
# генерируем случайное число от 1 до 60
RANGE=60
number=$RANDOM
let "number %= $RANGE"
sleep "${number}m"
done
Чтоб не напрягать блокчейн одновременной отправкой десятков запросов, скрипт каждую минуту генерирует случайное число от 1 до 60. Если число = 30, то команда publish_feed выполняется.
Пока что значения base и quote фиксированы.
"base":"0.100 GBG", "quote":"1.000 GOLOS"
Как только выйдем на биржу, я обновлю скрипт и цены будут браться уже из внешних источников.
Можете свободно форкать и делать изменения.
Требования к серверу
Для парсинга json-ответов от API в скрипте используется утилита jq. Устанавливаем командой:
sudo apt-get install jq
Необходимо, чтоб был запущен cli_wallet (не обязательно его разблокировать, скрипт это сделает сам).
./cli_wallet --server-rpc-endpoint="ws://127.0.0.1:9090" --rpc-endpoint 127.0.0.1:8093
Не забудьте поменять значения переменных с паролем и ником вашего делегата.
Сейчас как раз пилю скрипт, который будет обновлять фиды исходя из собранной на ICO суммы. Отпишу тебе потом в ЛС, затестишь)
вопрос - зачем ты делаешь апдэйт витнесс?
Ой, то было закомментировано. Стёр, чтоб не смущало. В скрипте только разблокировка кошелька и publish_feed. Апдейт в прошлом моём скрипте задействован.
Обновил скрипт на гитхабе. Теперь берет quote из http://www.steeme.ru/gf.html?mode=feed
Спасибо @primus за сервис с актуальной ценой! Его пост о сервисе: https://golos.id/ru--golos/@primus/onlain-monitoring-kraudseila-skolko-golosov-vy-mozhete-kupit-za-1000-rublei-ili-1-btc-plyus-avtomatizaciya-prais-fidov-dlya
Всем - привет! Делегаты - это те, кто майнит?
Как можно помочь с майнингом для Голоса?
Пока нет автоматической подгрузки цены из внешнего источника, будет лучше вынести значения вверх в переменные настройки - что-бы ручками было удобнее цену обновлять
А обновлять ручками никто и не будет. Скоро ICO, цена будет вычисляться математически исходя из суммы собранных средств.
"Скрипт нужно засунуть в крон, на ежеминутное выполнение. Либо, если не хотите связываться с кроном, можно засунуть кусок кода с публикацией в бесконечный цикл с минутной паузой."
А можно этот момент чуть подробнее для тех, кто Линукс видит первый раз? Что такое крон или как сделать цикл?
Эмм, думал делегаты видят линукс хотя бы второй раз) Ок, допишу подробностей.
Да, ща скрипт буду запускать - увижу второй раз. :) У меня, кстати, одна нода на винде крутится.
Хоть я сейчас и не в 19, но спасибо за скрипт :))
Всё равно иногда у тебя цену спрашивают. :)
:)) я ее обновляю несколько раз в сутки :))
Скрипт работает даже когда ты спишь)