CyberWay. Вычисление вознаграждений за пост в приложении Голос. Часть 2
Уважаемые пользователи платформы!
В предыдущей статье CyberWay. Вычисление вознаграждений за пост в приложении Голос. Часть 1 мы освещали вопросы определения сумм вознаграждений за публикацию на веб-сайте приложения Голос в блокчейне CyberWay. В частности, познакомили вас с описанием данных, на основе которых определяются вознаграждения за пост.
Сегодняшняя статья посвящена методу вычисления общей суммы вознаграждения за публикацию. Используемые методы могут быть применены в приложениях для определения (прогнозируемых) сумм вознаграждений в процессе голосования за пост в режиме реального времени, в том числе:
- общей суммы вознаграждения за пост;
- общей суммы вознаграждения кураторам поста;
- сумм вознаграждения для каждого из кураторов поста;
- общей суммы вознаграждения бенефициарам поста;
- сумм вознаграждения для каждого из бенефициаров поста;
- суммы вознаграждения автору поста.
Метод вычисления общей суммы вознаграждения за пост
Для определения прогнозируемой суммы вознаграждения за пост в режиме реального времени рекомендуется воспользоваться формулой
payout = reward_weight × funds × (sharesfn / rsharesfn) (1)
Компоненты формулы:
payout
— результирующая общая сумма вознаграждения за пост на момент получения данных от событийной модели;
reward_weight = rewardweight::reward_weight
— вес поста;
funds = poolstate::state.funds
— общее количество токенов в пуле вознаграждений;
sharesfn = poststate::sharesfn
— доля токенов, выделенных на вознаграждение за пост, от общего их количества в пуле вознаграждения (значение параметра зависит от веса поста);
rsharesfn = poolstate::state::rsharesfn
— количество токенов, выделенных на вознаграждение всех постов в пуле вознаграждения (значение параметра зависит от суммарного веса всех постов).
Для вычисления payout
по формуле (1) необходимо использовать данные, полученные от событийной модели в один и тот же момент времени.
Метод вычисления сумм вознаграждения кураторам за пост
Общая сумма кураторских вознаграждений представляет собой часть средств в виде процентного отчисления от общей суммы вознаграждения за пост. Значение процентного отчисления curators_prcnt
автор может указать самостоятельно во время создания поста. Если автор не указывает этот параметр, то из таблицы pstngparams
берется параметр min_curators_prcnt
— минимально возможная доля, выделяемая кураторам от общего вознаграждения за пост.
Для определения общей суммы вознаграждения кураторов рекомендуется воспользоваться формулой
curation_payout = payout - (sumcuratorsw × payout) (2)
Компоненты формулы:
curation_payout
— результирующая общая сумма вознаграждения кураторам за пост на момент получения данных от событийной модели;
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
sumcuratorsw = poststate::sumcuratorsw
— доля, выделяемая кураторам от общей суммы вознаграждения (суммарный вес голосов всех кураторов на текущий момент времени).
Вычисленная по формуле (2) общая сумма вознаграждения распределяется между кураторами в соответствии с правилами, принятыми в приложении. Ниже приводится рекомендуемый метод определения суммы вознаграждения для каждого из кураторов.
Для определения суммы вознаграждения curator_rewardⱼ
отдельному куратору j рекомендуется воспользоваться формулой
curator_rewardⱼ = curation_payout × (curatorswⱼ / weights_sum) (3)
Компоненты формулы:
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
curatorswⱼ = votestate::curatorswⱼ
— вес голоса куратора j, отдавшего за пост голос вида «за»;
weights_sum = poststate::weights_sum
— общий вес голосов кураторов, отдавших за пост голоса вида «за»;
(curatorswⱼ / weights_sum)
— доля, выделяемая куратору j от общей суммы вознаграждения кураторам.
Вычисление суммы вознаграждения по формуле (3) выполняется для каждого куратора, данные о котором содержатся в структуре vote_event
.
Остаточная (невостребованная) сумма
После вычисления всех сумм вознаграждений кураторам может появиться остаточная (невостребованная) сумма, образуемая за счет штрафов во время голосования (например, за раннее голосование). Этот штраф не учитывается в суммарном значении sumcuratorsw
, но влияет на величину curatorsw
конкретного голоса. Возможная остаточная сумма в виде «сдачи» будет возвращена обратно в пул вознаграждения за посты. Эта остаточная сумма unclaimed_rewards
вычисляется по формуле
unclaimed_rewards = curation_payout - ∑(curator_rewardⱼ) (4)
Компоненты формулы:
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
∑(curator_rewardⱼ)
— сумма всех выплат, вычисленных по формуле (3).
Метод вычисления сумм вознаграждения бенефициарам за пост
Та часть средств, которая выделяется автору в виде вознаграждения за пост, распределяется между бенефициарами и автором этого поста. Доля общей суммы вознаграждений, выделяемой бенефициарам, а также количество бенефициаров определяется самим автором во время публикации поста. Правила, в соответствии с которыми распределяется вознаграждение между бенефициарами, устанавливаются для каждого приложения отдельно. Ниже приводится рекомендуемый метод определения суммы вознаграждения для каждого из кураторов.
Для определения суммы вознаграждения ben_rewardⱼ
бенефициару j рекомендуется воспользоваться формулой
ben_rewardⱼ = (payout - curation_payout) × deductprcntⱼ (5)
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
(payout - curation_payout)
— общая сумма вознаграждения, выделяемая бенефициарам и автору поста;
deductprcnt = post::beneficiary::deductprcnt
— доля вознаграждения, выделяемая бенефициару j. Устанавливается автором во время публикации поста.
Вычисление суммы вознаграждения по формуле (5) выполняется для каждого бенефициара, данные о котором приводятся в таблице message
поля beneficiaries
— массив, содержащий структуры с полями имен и процентных отчислений.
Общая сумма выплат бенефициарам ben_payout_sum
вычисляется по формуле
ben_payout_sum = ∑(ben_rewardⱼ) (6)
Определение размера вознаграждения автору поста
Для определения размера вознаграждения author_reward
автору поста рекомендуется воспользоваться формулой
author_reward = payout - curation_payout - ben_payout_sum
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
ben_payout_sum
— общая сумма выплат бенефициарам, вычисленная по формуле (6).
Определение общей суммы вознаграждения за пост в токенах и вестингах
Часть вознаграждения за пост выплачивается в виде вестинга, а часть — в виде токенов. Их процентное соотношение указывается во время создания поста. После вычисления суммы вознаграждения за пост по формуле (1) можно определить количество ликвидных токенов, а также вестингов, составляющих данное вознаграждение.
Для вычисления количества ликвидных токенов token_payout
, выделяемых в виде вознаграждения за пост в режиме реального времени, рекомендуется воспользоваться формулой
token_payout = payout × tokenprop
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
tokenprop = post::tokenprop
— процентное содержание токенов в вознаграждении.
Количество вестингов в вознаграждении vesting_payout
составляет
vesting_payout = payout - token_payout
Заключение
Представленные методы вычисления сумм вознаграждений за пост в режиме реального времени предназначены для их применения в приложении Голос. Данные методы носят рекомендательный характер и могут быть также применены в других приложениях.
Cерия статей, раскрывающих идею и принципы функционирования блокчейна CyberWay и приложения Голос:
- Ответы на вопросы о CyberWay часть 4, Часть 3, Часть 2, Часть 1
- Golos.io: Адаптация к блокчейну CyberWay
- Основные положения CyberWay
- CyberWay: предпосылки создания платформы. Основные отличия от EOS
- Разработка новой блокчейн-платформы CyberWay. Дорожная карта проекта
- Функционирование смарт-контрактов приложения Голос на платформе БЧ CyberWay
- Техническая реализация bandwidth на платформе CyberWay
- Testnet: Экспериментальная версия
- Общее о структуре таблиц в MongoDB, Коллекции таблиц (документов) в MongoDB, используемых в системных контрактах, Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекция контракта golos.charge, Коллекция контракта golos.publication, Коллекции контракта golos.vesting
- CyberWay. Доменные имена и имена пользователей
- CyberWay. Событийная модель. Часть 1, Часть 2
- CyberWay. Вычисление вознаграждений за пост в приложении Голос. Часть 1
Каналы коммуникации с Golos•Core
- https://t.me/goloscoretc (решение технических вопросов, связанных с работой блокчейн, нод, api и др.)
- https://t.me/joinchat/BLwf_A118xQ57nsM1Q4MPA (канал для вноса предложений от комьюнити, обсуждение перехода на кодовую базу EOS)
- https://t.me/golos_tools (решение вопросов по различным интерфейсам и дополнительным инструментам, создаваемым Golos•Core)
- https://t.me/goloscore_analytics (решение вопросов по работе экономики блокчейн, статистическим экономическим данным, аналитике данных)
- https://t.me/goloscoretech (новостной канал, с актуальной информацией от Golos•Core)
Мы будем очень рады, если вы поддержите делегата @goloscore. Заходите на страничку https://golos.io/~witnesses голосуйте за делегата Golos•Core!
Спасибо за внимание и хорошего дня!
С уважением,
Команда Golos•Core: @andreypf, @korpusenko, @maslenitsa, @muhazokotuha, @zxcat, @annaeq, @anazarov79, @kaynarov, @s-medvedev, @eugin, @dedbaraded, @jimak.