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

Анонс нового скрипта обновления price feed и проекта golos-witness-tools

Преамбула

Начнём с того, что на Голосе нет какого-либо "официального" или рекомендованного скрипта обновления ценового фида. Каждый городит что-то своё или пользуется чужими наработками.

Потенциальный делегат при должном упорстве может обнаружить на wiki в статье Полезные ссылки ссылку на статью @primus 10-и месячной давности, в которой перечислены актуальные на тот момент скрипты обновления фида.

С тех пор появилось как минимум ещё 2 скрипта:

Зачем понадобился ещё один скрипт?

Я посмотрел все имеющиеся скрипты, но ни один из них не подошёл мне на 100%. Больше всего мне понравился скрипт golospricefeed от @roelandp, но и у него есть недостатки. Я решил его доработать, но в конечном итоге получился совершенно новый скрипт.

Проблемы имеющихся скриптов

Большинство скриптов требуют запущенного cli_wallet. В описании скриптов предлагается держать запущенный cli_wallet в screen. Мне такой вариант не понравился, т.к. я предпочитаю чтобы всё работало автоматически.

golosfeed-js работает без cli_wallet. Реализован на nodejs и вроде бы неплох. Использует форкнутую либу GolosJS-Lib. Сперва хотел взять его, но сыграли личные предпочтения - для таких задач мне проще использовать python.

Проект golos-witness-tools

golos-witness-tools - это набор скриптов для делегатов. Пока там только 1 скрипт для обновления прайсфида update_price_feed.py.

Основные особенности update_price_feed.py

  • Не требует наличия cli_wallet, вся работа через API прямо с нодой через websocket
  • Написан на python, использует библиотеку piston-lib
  • Удобен для запуска из cron
  • Возможность работы в виде docker-контейнера, который 1 раз запустил и он сам периодически обновляет цену
  • 2 режима работы: "одноразовый", когда цена считается 1 раз и скрипт завершает работу, и режим монитора, когда скрипт работает постоянно, периодически обновляя цену
  • Возможность управления степенью подробности вывода:
    • тихий режим для cron (--quiet), когда выводятся только ошибки
    • --debug режим для отладки
    • дефолтный режим с loglevel = info
  • Возможность симуляции (--dry-run) - посчитать цену но ничего не публиковать

Особенности вычисления цены

Одной из главных идей скрипта было сделать так, чтобы он не полагался на какой-либо один источник цен.

  • Для получения цены золота используется goldprice.org, а если он недоступен, то цена берётся с Центробанка РФ
  • Для получения цен USD/BTC и BTC/GOLOS используется coinmarketcap, а если он недоступен, то данные берутся с бирж

Пример запуска скрипта, когда происходит публикация цены:

% ./update_price_feed.py   
2017-10-17 00:44:01,578 INFO: USD/gold: 0.041572281719965146
2017-10-17 00:44:01,922 INFO: USD/BTC: 5620.46
2017-10-17 00:44:02,651 INFO: BTC/GOLOS: 0.00001836
2017-10-17 00:44:03,228 INFO: BTC/GBG: 0.00002063
2017-10-17 00:44:03,228 INFO: BTC/gold: 0.00000740
2017-10-17 00:44:03,228 INFO: GBG/gold rate: 2.789120178224781
2017-10-17 00:44:03,228 INFO: USD/GOLOS: 0.1031916456
2017-10-17 00:44:03,229 INFO: GBG/GOLOS: 2.4822223205141536
2017-10-17 00:44:03,231 INFO: Old price: 2.65
2017-10-17 00:44:03,242 INFO: Current median price: 2.3923444976076556
2017-10-17 00:44:03,244 INFO: publishing price, difference is: 0.16777767948584632
2017-10-17 00:44:03,244 INFO: Price to publish: 2.482

Здесь мы видим как цены, полученные с бирж, так и вычисленные цены. Некоторые цены здесь приведены для аналитики, например:

  • BTC/GBG - чтобы видеть текущую биржевую цену GBG
  • BTC/gold - вычисленная цена золота в BTC
  • GBG/gold rate - показывает степень переоцененности GBG на бирже. Вычисляется отношение цены GBG к цене 1 мг золота
  • Old price - это текущая опубликованная нами цена
  • Current median price - текущая медиана цен делегатов

Принцип публикации цены

  1. Цена публикуется в том случае, если новая цена изменилась относительно текущей опубликованной на величину threshold (по умолчанию 0.15)
  2. Так же цена публикуется, если с момента предыдущего публикования прошло больше времени, чем max_age (по дефолту 86400, т.е. 1 сутки). В таком случае наш фид никогда не будет протухшим.

Как следствие, можно запускать скрипт на нескольких машинах одновременно, и они таким образом будут резервировать друг друга, никак не конфликтуя и не генерируя излишних ценовых обновлений.

Feedback приветствуется

Настройка и запуск скрипта описана в документации на github.

Если кто-то захочет использовать и найдёт проблемы, не стесняйтесь создавать issue на github. На вопросы по работе скрипта отвечу в комментах и в telegram в делегатском чатике .

P.S.

Вы можете проголосовать за делегата vvk сами знаете где.

7
128.543 GOLOS
На Golos с September 2017
Комментарии (2)
Сортировать по:
Сначала старые