Как правильно вычислять текущую voting power

Как узнать какая прямо сейчас Voting Power у аккаунта? Казалось бы, самое очевидное - это сделать RPC call к ноде get_account() и взять оттуда значение voting_power:

% ./get_account.py vvk |grep power
 'voting_power': 8427,

Но нет! Это не текущее значение VP, а значение на момент крайнего апа.

Т.е. если вы не апали например неделю, фактическая VP будет 100 (10000), а в блокчейне всё ещё будет болтаться старое значение.

А где же тогда взять VP, спросите вы?

А надо всего лишь взять и посчитать VP по алгоритму, как это делает golosd. Оригинальный код для 0.16.4 - в libraries/chain/steem_evaluator.cpp.

Вкратце - надо взять last_vote_time и посчитать, сколько % VP успело регенерироваться, и прибавить это к тому значению voting_power, что отдаёт нода. На python:

STEEMIT_100_PERCENT = 10000
STEEMIT_VOTE_REGENERATION_SECONDS = 5*60*60*24 # 5 days

    elapsed_time = datetime.utcnow() - last_vote_time

    regenerated_power = STEEMIT_100_PERCENT * elapsed_time.total_seconds() / STEEMIT_VOTE_REGENERATION_SECONDS
    current_power = vp + regenerated_power/100

Полный код доступен в репозитории golos-scripts. Я сделал отдельный скрипт get_votnig_power.py

А именно:

Само собой, скрипт оценки апа будет использовать сию наиточнейшую VP.


Данный пост собирает финансирование по программе краудфандинга

Детали программы описаны в посте

Текущие открытые цели

  • 200 GOLOS на скрипт оценки профита апа

100% GBG за этот пост будут розданы кураторам согласно их вкладу. В стоп-листе только бустеры.
Апвоты со вкладом < 0.001 GBG игнорируются.
crowdfundingапвот100дружбамагияgolosdголос
323
21.735 GOLOS
0
В избранное
vvk-crowdfunding
Тех. аккаунт vvk для сбора финансирования разработок для Голос
323
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (14)
Сортировать по:
Сначала старые