Обновленный скрипт для автоматической поставки ценовых фидов (для делегатов)


price feed script
картинка от @on0tole

С концом краудсэйла и стартом вестинга появились новые переменные, относительно которых нужно рассчитывать ценовые фиды.

Представленный ниже скрипт является обновленной версией скрипта updatefeed.sh из статьи с детальными инструкциями от @on0tole, который учитывает текущее количество голосов в системе. Также фид публикуется относительно одного Голоса, т.е количество золотых (GBG) за один Голос. Ключевой переменной является CAP, в которой следует указать оценку (субъективную) капитализации сети в биткоинах.

#!/bin/bash

Load env vars

source $HOME/.bash_profile

CAP=600

cli_wallet --rpc-http-endpoint url

if [ -z $GOLOS_WALLET ]; then
echo "ERROR: Golos wallet is not set"
exit 1
fi
WALLET=$GOLOS_WALLET

cli_wallet unlock password

if [ -z $GOLOS_PASSWORD ]; then
echo "ERROR: Golos wallet password is not set"
exit 1
fi
PASSWORD=$GOLOS_PASSWORD

publish_feed nickname:

if [ -z $GOLOS_WITNESS ]; then
echo "ERROR: Golos witness name is not set"
exit 1
fi
NICKNAME=$GOLOS_WITNESS

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
}

function getGoldMgPrice {
local XAUOZ=curl -s 'http://data-asg.goldprice.org/GetData/USD-XAU/1' | jq -r '.[0]' | cut -d ',' -f 2
local GRAMM_IN_OZ=31.1034768
XAUMG=$(echo "scale=10 ; $XAUOZ / $GRAMM_IN_OZ / 1000" | bc)
}

function getSupply {
GOLOS_SUPPLY=curl -s --data-binary '{"id":"1","method":"info","params":[]}' $WALLET | jq -r ".result.current_supply" | cut -d '.' -f 1
}

function getBtcUsdPrice {
BTC_USD=curl -s 'https://btc-e.nz/api/3/ticker/btc_usd-btc_btc?ignore_invalid=1' | jq -r '.btc_usd.last'
}

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

Getting input data

getGoldMgPrice
getSupply
getBtcUsdPrice

Calc

GOLOS_USD=$(echo "scale=10 ; $CAP * $BTC_USD / $GOLOS_SUPPLY" | bc)
GOLOS_GBG=$(echo "scale=3 ; $GOLOS_USD / $XAUMG" | bc)

Publish

BASE=$(echo "0${GOLOS_GBG}")
QUOTE="1.000"

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

checkLockAndExit

follow litvintech


Comments 3


А я сижу пишу пост, чтобы делегаты, которые используют мой скрипт обновили его....т.к. завышают фиды=))

13.12.2016 11:29
0

В скрипте небольшая ошибка, вместо http://127.0.0.1:8091 должно быть $WALLET, т.е. строку:

GOLOS_SUPPLY=`curl -s --data-binary '{"id":"1","method":"info","params":[]}' http://127.0.0.1:8091 | jq -r ".result.current_supply" | cut -d '.' -f 1`

надо заменить на:

GOLOS_SUPPLY=`curl -s --data-binary '{"id":"1","method":"info","params":[]}' $WALLET | jq -r ".result.current_supply" | cut -d '.' -f 1`
13.12.2016 12:38
0

Спасибо @testz. Поправил

13.12.2016 13:37
0

Также фид публикуется относительно одного Голоса, т.е количество золотых (GBG) за один Голос.

Договаривались раньше публикавать котировки как число голосов за один GBG. Большинство делегатов сейчас так и публикуют. Были какие-то причины для того чтобы начать публиковать фиды относительно 1 голоса?

13.12.2016 14:14
0

С технической стороны никакой разницы нет=) от перемены мест слагаемых сумма не меняется.

13.12.2016 19:35
0

вообще разница есть, хоть и небольшая. Вцелом более наглядно, когда все придерживаются одного стиля

13.12.2016 20:06
0

For anyone using my price feed, it's also updated.

Для любого, кто использует мой прайс feed, так же обновлено

/ru--delegaty/@someguy123/obnovlenie-skripta-price-feed-js-updates-to-golosfeed-js

Unlike the shellscript versions, this runs independently from the GOLOS client, so you can use it on your own computer for example without installing/running GOLOS.

В отличии от shellscript вресии, скрипт запускается независимо от клиента ГОЛОС, так что вы можете использовать этот скрипт на вашем персональном компьютере, не устанавливая\запуская ноду ГОЛОСа

18.12.2016 23:21
0