Публикация
Назначение смарт-контракта golos.publication
Смарт-контракт golos.publication
обеспечивает работу с постами, в том числе предоставляет возможность пользователям выполнять следующие действия: публиковать посты, оставлять комментарии, голосовать за посты и закрывать посты, а также обеспечивает выплату вознаграждения авторам постов.
Операции-действия смарт-контракта golos.publication
Cмарт-контракт golos.publication
поддерживает следующие операции-действия: setlimit, setrules, createmssg, updatemssg, deletemssg, downvote, upvote, closemssg, reblog, setcurprcnt, setmaxpayout, calcrwrdwt, paymssgrwrd, setparams.
Операция-действие setlimit
Операция-действие setlimit
устанавливает правила, ограничивающие действия пользователей. Механизм ограничения действий пользователей основан на взаимодействии смарт-контрактов публикации и батарейки (golos.charge). Создается привязка конкретного действия смарт-контракта публикации к конкретной батарейке смарт-контракта батарейки. В операции-действия указывается название действия (например, голосование или публикация поста), указывается идентификатор и параметры определенной батарейки.
Операция-действие setlimit
имеет следующий вид:
Параметры:
act
— название действия;
token_code
— код токена (тип данных, однозначно определяющий токен);
charge_id
— идентификатор батарейки, ресурсами которой ограничивается действие act
. К одной батарейке может быть создана привязка нескольких действий. Для действий голосования (upvote
, downvote
, unvote
) значение идентификатора батарейки устанавливается нулевым;
price
— цена (в условных единицах) расходуемого ресурса батарейки с идентификатором charge_id
за совершаемое действие act
. Значение ресурса батарейки уменьшается при каждом совершаемом действии и восстанавливается со временем;
cutoff
— пороговое значение, ограничивающее снизу ресурс батарейки, при достижении которого действие act
блокируется;
vesting_price
— значении вестинга, которое необходимо выплатить пользователю за выполнение действия act
, в случае исчерпания ресурса батарейки (достижение порогового значения снизу). Действие act
будет выполнено, если пользователь разрешит снять с его баланса указанную сумму вестинга. Для оплаты необходимо, чтобы на балансе пользователя имелась необходимая сумма вестинга в разблокированном состоянии;
min_vesting
— минимальное значение вестинга, которое необходимо иметь пользователю на его балансе для выполнения действия act
.
Взаимодействие смарт-контрактов публикации и батарейки позволяет гибко настраивать ограничения на действия пользователей (например, действия по голосованию за посты, по публикации постов и оставлению комментариев можно соотнести с ресурсами трех разных батареек и тем самым ограничить активность пользователя по каждому из этих действий. Также все эти действия могут иметь привязку к одной и той же батарейки, то есть быть ограниченными ресурсами одной батарейки). За каждое выполняемое пользователем действие ему начисляется значение, соответствующее стоимости расходуемого ресурса батарейки. При достижении в смарт-контракте батарейки порогового значения используемого ресурса батарейки, действия пользователя блокируются до появления в ней необходимого ресурса.
Операция-действие setrules
Операция-действие setrules
устанавливает правила в рамках приложения (сообщества) по распределению вознаграждения между пользователями за публикации постов и курирование.
Операция-действие setrules
имеет следующий вид:
Параметры:
mainfunc
— функция, вычисляющая суммарное значение вознаграждения для автора и кураторов поста в соответствии с установленным алгоритмом (например, линейным алгоритмом или алгоритмом квадратного корня). Используемый в функции алгоритм выбирается делегатами голосованием. Функция содержит два параметра: математическое выражение (непосредственно алгоритм), по которому вычисляется сумма вознаграждения, и максимально допустимое значение аргумента для функции. При установке значений параметров для setrules выполняется их проверка на корректность (в том числе на монотонность и неотрицательность);
curationfunc
— функция, вычисляющая значение вознаграждения для каждого из кураторов в соответствии с установленным алгоритмом (аналогично вычислению для mainfunc
);
timepenalty
— функция, вычисляющая вес голоса с учетом времени голосования и длительности штрафного окна;
maxtokenprop
— максимально возможное значение вознаграждения (сумма токенов и вестингов), которое может получить автор. Этот параметр устанавливается делегатами голосованием;
tokensymbol
— тип токена (в рамках приложения Голос предусматривается хождение только токенов Голоса).
Правом на запуск операции-действия setrules
обладает делегат приложения. Для запуска операции-действия setrules
требуется наличие в транзакции подписи смарт-контракта golos.publication
(multisig-аккаунта).
Операция-действие createmssg
Операция-действие createmssg
используется для создания сообщения в виде ответа на ранее полученное (родительское) сообщение.
Операция-действие createmssg
имеет следующий вид:
Параметры:
message_id
— идентификатор ответного сообщения. Параметр имеет вид структуры, содержащую поля: author
— автор сообщения, permlink
— уникальное имя сообщения в рамках публикаций конкретного автора;
parent_id
— идентификатор родительского сообщения. Параметр содержит поля: author
— автор родительского сообщения, permlink
— уникальное имя сообщения в рамках публикаций автора родительского сообщения;
beneficiaries
— значение в виде структуры, содержащей имена бенефициаров и долю (в процентах) выплаты им от суммы вознаграждения за сообщение;
tokenprop
— размер вознаграждения (количество токенов). Данное значение ограничено сверху параметром maxtokenprop
, задаваемым в set_rules
;
vestpayment
— true
, если пользователь дает разрешение на оплату в вестингах отправки сообщения в случае исчерпания ресурса батарейки (сообщение отправляется независимо от ресурса батарейки). По умолчанию принимает значение false
;
headermssg
— заголовок сообщения;
bodymssg
— тело сообщения;
languagemssg
— язык сообщения;
tags
— тэг, который присваивается сообщению;
jsonmetadata
— метаданные в формате JSON;
curators_prcnt
— доля (в процентах), отчисляемая кураторам, от общей суммы вознаграждения за созданное сообщение. Значение параметра задается автором сообщения в рамках диапазона значений, установленного делегатами. По умолчанию данный параметр принимает нулевое значение curators_prcnt = std::nullopt
; max_payout
— максимально возможная сумма вознаграждения за сообщение, выплачиваемая из пула, к которому данное сообщение имеет привязку. Сумма устанавливается автором в том виде средств (токенов), которые имеются в данном пуле. Параметр является произвольным (необязательным) и по умолчанию принимает значение asset::max_amount
.
Параметры parentacc
и parentprmlnk
идентифицируют родительское сообщение, на которое создается ответ с использованием createmssg
в виде сообщения.
Для запуска операции-действия createmssg
требуется наличие в транзакции подписи аккаунта-автора сообщения.
Ключ, по которому ведется поиск сообщения, имеет привязку к параметрам account
и permlink
.
Операция-действие updatemssg
Операция-действие updatemssg
используется для внесения пользователем изменений в ранее отправленное им сообщение.
Операция-действие updatemssg
имеет следующий вид:
Параметры:
message_id
— идентификатор редактируемого сообщения. Параметр содержит поля: author
— автор редактируемого сообщения, permlink
— уникальное имя сообщения в рамках публикаций данного автора;
headermssg
— заголовок редактируемого сообщения;
bodymssg
— тело редактируемого сообщения;
languagemssg
— язык редактируемого сообщения;
tags
— тэг, который будет присвоен редактируемому сообщению;
jsonmetadata
— метаданные в формате JSON.
Для запуска операции-действия updatemssg
требуется наличие в транзакции подписи аккаунта-автора сообщения.
Операция-действие deletemssg
Операция-действие deletemssg
используется для удаления пользователем ранее отправленного им сообщения.
Операция-действие deletemssg
имеет следующий вид:
Параметр message_id
— идентификатор удаляемого сообщения. Параметр содержит поля: author
— имя аккаунта автора сообщения, permlink
— уникальное имя сообщения в рамках публикаций данного автора.
Сообщение не может быть удалено в следующих случаях:
на сообщение создан комментарий;
сообщение имеет положительный вес всех отданных за него голосов. Вес голоса пользователя зависит от используемого им вестинга и силы голоса. Сообщение не может быть удалено, если взвешенный вес всег голосов имеет положительное значение.
Для запуска операции-действия deletemssg
требуется наличие в транзакции подписи аккаунта-автора сообщения.
Операция-действие upvote
Операция-действие upvote
используется для подачи пользователем голоса в виде «upvote» при голосовании за сообщение.
Операция-действие upvote
имеет следующий вид:
Параметры:
voter
— имя голосующего аккаунта;
message_id
— идентификатор поста, за который голосует voter
. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
weight
— вес голоса аккаунта voter
.
Операция-действие upvote
требует наличия подписи в транзакции аккаунта voter
.
Операция-действие downvote
Операция-действие downvote
используется для подачи пользователем голоса в виде «downvote» при голосовании за сообщение.
Операция-действие downvote
имеет следующий вид:
Параметры:
voter
— имя голосующего аккаунта;
message_id
— идентификатор поста, за который голосует voter
. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
weight
— вес голоса аккаунта voter
.
Операция-действие downvote
требует наличия подписи в транзакции аккаунта voter
.
Операция-действие unvote
Операция-действие unvote
используется для отзыва пользователем собственного голоса вида upvote
или downvote
, отданного им ранее.
Операция-действие unvote
имеет следующий вид:
Параметры:
voter
— имя аккаунта, удаляющего свой голос с сообщения;
message_id
— идентификатор поста, у которого отзывается голос. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора.
Операция-действие unvote
требует наличия подписи в транзакции аккаунта voter
.
Операция-действие closemssg
Операция-действие closemssg
является внутренней и пользователю недоступна. Используется для закрытия поста.
Операция -действие closemssg
имеет следующий вид:
Параметр:
message_id
— идентификатор закрывающегося поста. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора.
Операция-действие closemssg
требует выполнения условий:
закрытие поста должно происходить по истечении времени
cashout_window:window
;транзакция должна быть подписана аккаунтом смарт-контракта Golos.publication.
Операция-действие reblog
Операция-действие reblog
используется для размещения поста, заимствованного у другого автора в рамках данного смарт-контракта, а также для добавления собственного текста к посту в виде заметки или комментариев.
Пост-реблог сохраняет авторство поста-оригинала. Добавляемая заметка к посту-оригиналу может содержать собственный заголовок. Операция удаления поста-оригинала не влияет на пост-реблог и на оставленные комментарии к посту-реблогу.
Операция-действие reblog
имеет следующий вид:
Параметры:
rebloger
— имя аккаунта, выполняющего публикацию заимствованного поста;
message_id
— идентификатор поста-оригинала. Параметр содержит поля: author
— автор поста-оригинала, permlink
— уникальное имя поста-оригинала в рамках публикаций его автора;
headermssg
— заголовок добавляемой заметки. Данное поле может быть пустым;
bodymssg
— тело добавляемой заметки. Данное поле может быть пустым.
На операцию-действие reblog
введены следующие ограничения:
Не допускается выполнять
reblog
собственного поста, то есть автором которого является аккаунтrebloger
.Не допускается выполнять
reblog
только одного заголовка поста-оригинала. Наличие тела поста-оригинала обязательно.Длина строки заголовка добавляемой заметки не должна превышать 256 символов.
Операция-действие reblog
требует наличия подписи в транзакции аккаунта rebloger
.
Операция-действие setcurprcnt
Операция-действие setcurprcnt
используется автором поста для задания или изменения ранее заданной доли (в процентах), отчисляемой кураторам от общего вознаграждения за пост.
Операция-действие setcurprcnt
имеет следующий вид:
Параметры:
message_id
— идентификатор поста, за курирование которого устанавливается доля отчисления. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
curators_prcnt
— доля (в процентах), отчисляемая кураторам от общей суммы вознаграждения.
После начала голосования за пост изменение доли выплаты кураторам недопустимо.
Операция-действие setcurprcnt
требует наличия подписи в транзакции автора поста message_id.author
.
Операция-действие setmaxpayout
Операция-действие setmaxpayout
используется для установки автором максимально возможного вознаграждения за отправленное им сообщение.
Операция-действие setmaxpayout
имеет следующий вид:
Параметры:
message_id
— идентификатор сообщения, за курирование которого устанавливается выплата. Параметр содержит поля: author
— автор сообщения, permlink
— уникальное имя сообщения в рамках публикаций данного автора;
max_payout
— максимально возможная сумма вознаграждения за сообщение, выплачиваемая из пула, к которому данное сообщение имеет привязку. Сумма устанавливается автором в том виде средств (токенов), которые имеются в данном пуле.
На изменение параметра max_payout
накладываются следующие ограничения:
параметр можно изменять только для открытых сообщений;
параметр можно изменять только для сообщений, которые еще не имеют голосов;
параметр можно изменять только в сторону уменьшения по отношению к предыдущему его значению. Значение параметра должно быть положительным. Сохранять старое значение параметра также недопустимо.
Операция-действие setmaxpayout
требует наличия в транзакции подписи автора сообщения.
Операция-действие calcrwrdwt
Операция-действие calcrwrdwt
является внутренней и пользователю недоступна. Используется для вычисления веса поста с учетом количества публикаций, выполненных автором за определенное время.
Операция-действие имеет следующий вид:
Параметры:
account
— имя аккаунта автора поста;
mssg_id
— внутренний идентификатор поста;
post_charge
— текущий ресурс батарейки, ограничивающий активность пользователя в рамках размещения постов. С увеличением количества постов, размещаемых автором за определенное время, уменьшается ресурс батарейки и сумма выплат за посты.
Для выполнения данной операции требуется подпись аккаунта смарт-контракта golos.publication
.
Операция-действие paymssgrwrd
Операция-действие paymssgrwrd
является внутренней и пользователю недоступна. Используется для выплат сумм вознаграждений за пост кураторам, бенефициарам и автору. Операция-действие имеет следующий вид:
message_id
— идентификатор поста, за который выплачиваются суммы вознаграждений. Параметр содержит поля: author
— автор сообщения, permlink
— уникальное имя поста в рамках публикаций данного автора.
Для выполнения данной операции требуется подпись аккаунта смарт-контракта golos.publication
.
Операция-действие setparams
Операция-действие setparams
используется для настройки параметров смарт-контракта golos.publication
. Операция-действие имеет следующий вид:
Параметр params
— значение в виде структуры, содержащей поля с настраиваемыми параметрами.
Вызов set_params
в смарт-контракте golos.publication
позволяет настроить следующие переменные:
cashout_window
— интервал времени, по истечении которого осуществляется выплата вознаграждения за пост;max_vote_changes
— максимально возможное количество переголосований пользователя за пост (показывает, сколько раз пользователь может поменять свой голос за пост);max_beneficiaries
— максимально возможное количество бенефициаров;max_comment_depth
— максимально возможная глубина комментариев (показывает допустимый уровень вложенности дочерних комментариев относительно родительского;social_acc
— имя аккаунта social;referral_acc
— имя аккаунта referral;curators_prcnt
— доля (в процентах), отчисляемая кураторам, от общей суммы вознаграждения за пост. Устанавливает пороговые значения, в рамках которых автор поста может задавать собственное процентное значение отчислений кураторам.
Определение сумм вознаграждений за публикацию на веб-сайте приложения Голос
После публикации поста, но до момента его закрытия, его автор, кураторы и бенефициары могут проявлять интерес к процессу голосования за этот пост, а также к прогнозируемым суммам вознаграждений за него. Пользователям предоставляется возможность на веб-сайте приложения Голос получать актуальную информацию о процессе голосования и прогнозируемых выплатах за пост.
В смарт-контракте golos.publication
реализована логика, позволяющая рассчитать все необходимые выплаты за пост и поместить текущие результаты расчета на веб-сайте приложения Голос. Работа логики основана на обработке актуальных данных, получаемых из сообщений от событийной модели Event Engine. Результаты расчета корректируются после каждого принятого сообщения от Event Engine и зависят в основном от таких параметров как размер пула вознаграждений, количества появляющихся постов, а также веса каждого голосующего пользователя.
В этом разделе приводятся методы, которые могут быть применены в приложениях для определения (прогнозируемых) сумм вознаграждений в процессе голосования за пост в режиме реального времени, в том числе:
общей суммы вознаграждения за пост;
общей суммы вознаграждения кураторам поста;
сумм вознаграждения для каждого из кураторов поста;
общей суммы вознаграждения бенефициарам поста;
сумм вознаграждения для каждого из бенефициаров поста;
суммы вознаграждения автору поста.
Данные, на основе которых определяются вознаграждения за пост
С момента создания поста и до момента его закрытия проводится голосование за этот пост. Размер вознаграждения за созданный пост в основном зависит от результатов голосования за него и наличием средств в пуле вознаграждений. Пул вознаграждения выбирается по времени создания поста.
Каждый поданный за пост голос регистрируется в смарт-контракте публикации как событие, информация о котором отправляется в событийную модель Event Engine и далее по запросу в приложение Голос. На основе получаемой от Event Engine актуальной информации о событиях, относящихся к процессу голосования за пост, появляется возможность на веб-сайте приложения отображать в режиме реального времени интересующие пользователей (прогнозируемые) суммы вознаграждений за данный пост.
Методы вычисления сумм вознаграждений за пост в режиме реального времени в каждом из приложений могут быть различными. Рекомендуется в методах использовать получаемую от Event Engine информацию о следующих событиях: rewardweight
, poststate
, poolstate
и votestate
.
Событие rewardweight
Структура события rewardweight
содержит данные о весе вознаграждения за пост.
Параметры:
message_id
— идентификатор поста, для которого устанавливается выплачиваемая доля от вознаграждения. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
rewardweight
— выплачиваемая доля вознаграждения за пост с учетом наложенного штрафа (параметр принимает целочисленное значение, показывает процент выплаты с точностью до сотой доли. Значение 10000 соответствует 100 %).
Событие rewardweight
показывает величину доли (в процентах) от вознаграждения за пост, которая будет выплачена с учетом наложенного штрафа на автора поста.
Активность каждого автора ограничена, то есть автор может опубликовать только определенное количество постов за установленный интервал времени. Если активность автора не превышает установленное для него ограничение, то штраф автору не начисляется и параметр rewardweight
принимает значение 100 %. В противном случае за каждую сверх-нормативную публикацию автору будет динамически начисляться штраф в размере от 0 до 100 %. Соответственно значение rewardweight
за каждую сверх-нормативную публикацию будет уменьшаться на величину штрафа.
Событие poststate
Структура события poststate
содержит данные о текущем состоянии поста.
Параметры:
message_id
— идентификатор поста, для которого устанавливается выплачиваемая доля от вознаграждения. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
netshares
— доля вознаграждения, выделяемая в пуле за пост (значение параметра вычисляется как сумма значений voteshares
всех голосов);
voteshares
— доля вознаграждения за пост, определяемая отдельным голосом с учётом его знака (значение отдельного голоса вычисляется как произведение количества вестинга голосующего на его вес. Параметр может принимать как положительное, так и отрицательное значения. Голосу вида «против» присваивается знак «минус», голосу вида «за» присваивается знак «плюс»);
sumcuratorsw
— суммарный вес голосов всех кураторов на текущий момент времени.
sharesfn
— функция для расчета вознаграждений, применимая к shares
поста.
Событие poolstate
Структура события poolstate
содержит данные о текущем состоянии пула вознаграждений.
Параметры:
created
— время создания поста (идентификатор пула);
msgs
— количество постов, вознаграждения за которые выплачиваются из пула created
;
funds
— количество токенов в пуле вознаграждений;
rshares
— суммарное значение rshares
всех постов в пуле;
rsharesfn
— суммарное значение rsharesfn
всех постов в пуле.
Событие votestate
Структура события votestate
содержит данные о текущих результатах голосования за пост.
Параметры:
voter
— имя аккаунта (пользователя), который голосует за пост;
message_id
— идентификатор поста. Параметр содержит поля: author
— автор поста, permlink
— уникальное имя поста в рамках публикаций данного автора;
weight
— вес голоса аккаунта voter
. Во время голосования вес голоса указывается с точностью до сотой доли процента в виде целочисленного значения в интервале от 0 до 10000 (значение 10000 соответствует 100 %). Вес голоса «против» указывается со знаком «минус»;
curatorsw
— процент кураторского вознаграждения (доля вознаграждения, выделяемая отдельному куратору от общей суммы вознаграждения кураторам. Величина доли зависит от веса данного куратора);
rshares
— условный параметр, используемый в расчетах вознаграждений за пост. Значение параметра определяется как произведение количества активного вестинга голосующего на вес голоса в процентах (rshares = eff_vesting * weight / 10000
). Параметр может принимать как положительное, так и отрицательное значения. Голосу вида «против» присваивается знак «минус».
Метод вычисления общей суммы вознаграждения за пост
Для определения прогнозируемой суммы вознаграждения за пост в режиме реального времени рекомендуется воспользоваться формулой
Компоненты формулы:
payout
— результирующая общая сумма вознаграждения за пост на момент получения данных от событийной модели;
reward_weight = rewardweight::reward_weight
— вес вознаграждения за пост;
funds = poolstate::state.funds
— общее количество токенов в пуле вознаграждений;
sharesfn = poststate::sharesfn
— доля токенов, выделенных на вознаграждение за пост, от общего их количества в пуле вознаграждения (значение параметра зависит от веса поста);
rsharesfn = poolstate::state::rsharesfn
— количество токенов, выделенных на вознаграждение всех постов в пуле вознаграждения (значение параметра зависит от суммарного веса всех постов).
Компонента reward_weight
показывает долю авторского вознаграждения за публикацию с учетом возможного наложенного на данную публикацию штрафа. Количество публикаций в сутки по умолчанию не должно превышать четырех. За превышение этого количества автору начисляется штраф. Значение reward_weight
рассчитывается (как и в блокчейне Голос) по формуле
Компонента postbw_charge
показывает ресурс соответствующей батарейки. Каждое использование батарейки изменяет ресурс на 100 %. Ресурс воcстанавливается полностью, если в течение суток с момента создания предыдущего поста не создается ни один пост (линейное восстановление, пропорциональное разряду и времени относительно предыдущего созданного поста).
Для вычисления payout
по формуле (1) необходимо использовать данные, полученные от событийной модели только в один и тот же момент времени.
Метод вычисления сумм вознаграждения кураторам за пост
Общая сумма кураторских вознаграждений представляет собой часть средств в виде процентного отчисления от общей суммы вознаграждения за пост. Значение процентного отчисления curators_prcnt
автор может указать самостоятельно во время создания поста. Если автор не указывает этот параметр, то в качестве него из таблицы pstngparams
берется параметр min_curators_prcnt
— минимально возможная доля, выделяемая кураторам от общего вознаграждения за пост.
Для определения общей суммы вознаграждения кураторов рекомендуется воспользоваться формулой
Компоненты формулы:
curation_payout
— результирующая общая сумма вознаграждения кураторам за пост на момент получения данных от событийной модели;
curators_prcnt
— доля (в процентах), отчисляемая кураторам от общей суммы вознаграждения за пост;
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1).
Вычисленная по формуле (2) общая сумма вознаграждения распределяется между кураторами в соответствии с правилами, принятыми в приложении. Ниже приводится рекомендуемый метод определения суммы вознаграждения для каждого из кураторов.
Для определения суммы вознаграждения curator_rewardⱼ
отдельному куратору j рекомендуется воспользоваться формулой
Компоненты формулы:
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
curatorswⱼ = votestate::curatorswⱼ
— вес голоса куратора j, отдавшего за пост голос вида «за»;
weights_sum = poststate::weights_sum
— общий вес голосов кураторов, отдавших за пост голоса вида «за»;
(curatorswⱼ / weights_sum)
— доля, выделяемая куратору j от общей суммы вознаграждения кураторам.
Вычисление суммы вознаграждения по формуле (3) выполняется для каждого куратора, данные о котором содержатся в структуре vote_event
.
После вычисления всех сумм вознаграждений кураторам может появиться остаточная (невостребованная) сумма, образуемая за счет штрафов во время голосования (например, за раннее голосование). Этот штраф не учитывается в суммарном значении sumcuratorsw
, но влияет на величину curatorsw
конкретного голоса. Возможная остаточная сумма в виде «сдачи» будет возвращена обратно в пул вознаграждения за посты. Эта остаточная сумма unclaimed_rewards
вычисляется по формуле
Компоненты формулы:
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
∑(curator_rewardⱼ)
— сумма всех выплат, вычисленных по формуле (3).
Метод вычисления сумм вознаграждения бенефициарам за пост
Та часть средств, которая выделяется автору в виде вознаграждения за пост, распределяется между бенефициарами и автором этого поста. Доля общей суммы вознаграждений, выделяемой бенефициарам, а также количество бенефициаров, определяется самим автором во время публикации поста. Правила, в соответствии с которыми распределяется вознаграждение между бенефициарами, устанавливаются для каждого приложения отдельно. Ниже приводится рекомендуемый метод определения суммы вознаграждения для каждого из кураторов.
Для определения суммы вознаграждения ben_rewardⱼ
бенефициару j рекомендуется воспользоваться формулой
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
(payout - curation_payout)
— общая сумма вознаграждения, выделяемая бенефициарам и автору поста;
weightⱼ
— вес вознаграждения, выделяемая бенефициару j. Устанавливается автором во время публикации поста.
Вычисление суммы вознаграждения по формуле (5) выполняется для каждого бенефициара, данные о котором приводятся в таблице message
поля beneficiaries
— массив, содержащий структуры с полями имен и процентных отчислений.
Общая сумма выплат бенефициарам ben_payout_sum
вычисляется по формуле
Определение размера вознаграждения автору поста
Для определения размера вознаграждения author_reward
автору поста рекомендуется воспользоваться формулой
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
curation_payout
— общая сумма вознаграждения кураторам за пост, вычисленная по формуле (2);
ben_payout_sum
— общая сумма выплат бенефициарам, вычисленная по формуле (6).
Определение общей суммы вознаграждения за пост в токенах и вестингах
Часть вознаграждения за пост выплачивается в виде вестинга, а часть — в виде токенов. Процентное их соотношение указывается во время создания поста. После вычисления суммы вознаграждения за пост по формуле (1) можно определить количество ликвидных токенов, а также вестингов, составляющих данное вознаграждение.
Для вычисления количества ликвидных токенов token_payout
, выделяемых в виде вознаграждения за пост в режиме реального времени, рекомендуется воспользоваться формулой
Компоненты формулы:
payout
— общая сумма вознаграждения за пост, вычисленная по формуле (1);
tokenprop = post::tokenprop
— процентное содержание токенов в вознаграждении.
Количество вестингов в вознаграждении vesting_payout
составляет
Заключение
Представленные методы вычисления сумм вознаграждений за пост в режиме реального времени предназначены для их применения в приложении Голос. Данные методы носят рекомендательный характер и могут быть также применены в других приложениях.
Last updated