Преамбула
Начнём с того, что на Голосе нет какого-либо "официального" или рекомендованного скрипта обновления ценового фида. Каждый городит что-то своё или пользуется чужими наработками.
Потенциальный делегат при должном упорстве может обнаружить на 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
- тихий режим для cron (
- Возможность симуляции (
--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 - текущая медиана цен делегатов
Принцип публикации цены
- Цена публикуется в том случае, если новая цена изменилась относительно текущей опубликованной на величину
threshold
(по умолчанию 0.15) - Так же цена публикуется, если с момента предыдущего публикования прошло больше времени, чем
max_age
(по дефолту 86400, т.е. 1 сутки). В таком случае наш фид никогда не будет протухшим.
Как следствие, можно запускать скрипт на нескольких машинах одновременно, и они таким образом будут резервировать друг друга, никак не конфликтуя и не генерируя излишних ценовых обновлений.
Feedback приветствуется
Настройка и запуск скрипта описана в документации на github.
Если кто-то захочет использовать и найдёт проблемы, не стесняйтесь создавать issue на github. На вопросы по работе скрипта отвечу в комментах и в telegram в делегатском чатике .
P.S.
Вы можете проголосовать за делегата vvk сами знаете где.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
chiliec, vik, vadbars, semasping, fair, asuleymanov, yudina-cat, polyakov, acidgarry, on1x, vika-teplo, myhardmoney, mryabinin, sareon, novy, chugoi, gbot, verdon, kito-boy, goldenriver
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас на странице https://golos.io/~witnesses, вот так:
@vvk Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп