Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/toniomacaronio/dpos
https://github.com/toniomacaronio/dpos
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/toniomacaronio/dpos
- Owner: TonioMacaronio
- Created: 2020-02-18T12:23:13.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-02-20T23:37:01.000Z (almost 5 years ago)
- Last Synced: 2024-11-20T05:07:55.132Z (about 1 month ago)
- Language: Rust
- Size: 14.6 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Old implementation
- Пользователь может отправить деньги валидатору. Они будут аккумулированы в некий момент времени предшествующий следующей награде валидатора (я назвал его не сильно размышляя индексом вознаграждения (index)).
Общий баланс валидатора будет увеличен.
Также будет увеличен общий стейт суппорта пользователей для следующей награды.
Также будет взят хеш от индекса следующей награды и адреса пользователя и по нему в мапу будет помещена информация о том, что он положил деньги.
- При вознаграждении валидатора увеличивается как общий баланс, так и баланс который может вывести оунер. Индекс награды инкрементируется, стейт суппорта пользователей переносится на него (сохраняется).
- Пользователь при запросе на снятие денег должен указать индекс, в котором он их положил.
После этого для определенного числа последующих индексов (не большего какого то значения, чтобы избежать избыточного расхода вычислительной мощности) для данного количества денег будет расчитано вознаграждение.
Если последний индекс это текущий индекс - выводится весь указаный эмаунт и награда. Если последний индекс меньше текущего, то в последний индекс будет помещен этот эмаунт, как будто пользователь сделал на него депозит.
Это нужно чтобы можно было с этой точки дальше считать для данного эмаунта вознаграждение. Уже посчитанное вознаграждение отправляетя пользователю без этого эмаунта.# New implementation
- Голосуя пользователь создает новую запись голоса: индекс последнего вознаграждения (порядковый номер), количество токенов, и флаг индикатор что награда была выплачена (изначально false).
С его счета на счет валидатора зачисляются деньги, увеличивается общий баланс валидатора и баланс делегированных пользователями токенов.
Голосовать пользователь может только если прошлый голос был забран (забраны токены голосования и вознаграждения).
- Пользователь может забрать свой голос. Тем самым деньги перейдут к нему на аккаунт а у валидатора уменьшатся общий баланс валидатора и баланс делегированных пользователями токенов. Необходимо чтобы награда за этот голос уже была начислена
- При вознаграждении валидатора увеличивается общий баланс аккаунта, инкрементируется количество полученных наград.
Также рассчитывается новое усредненное значения награды для пользователей:
reward_to_share = share_coeff * (old_reward_to_share + new_reward) / 2
- Пользователь может забрать награду за голос. Для этого рассчитывается сколько наград прошло с момента его голосования, определяется доля его голоса среди всех голосов пользователей и это все домножается на усредненную награду:
reward_for_user = (delegated_by_user / total_delegated) * (current_rewards_count - user_vote_time_rewards_count) * reward_to_share
Награда начисляется пользователю снимаясь с баланса валидатора, флаг успешного снятия награды для голоса становится true