Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекции контракта golos.publication
Уважаемые пользователи!
Информацию о структуре таблиц в MongoDB вы можете найти в постах:
- Общее о структуре таблиц в MongoDB
- Коллекции таблиц (документов) в MongoDB, используемых в системных контрактах
- Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекция контракта golos.charge
- Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекция контракта golos.ctrl
Мы продолжаем описывать базу данных. В настоящей публикации предоставляем вам коллекции контракта golos.publication. Нам осталось рассмотреть коллекции коллекции golos.vesting, об этом в следующем посте.
Коллекции контракта golos.publication
limit
Коллекция LIMIT содержит документы (таблицы) с описанием пользовательских действий, на которые установлены ограничения. В таблице указывается название действия (например, голосование или публикация поста), а также параметры, ограничивающие это действие. Таблица в БД создается вызовом операции setlimit()
.
Пример документа:
"_id" : ObjectId(" ... "),
"act" : NumberDecimal("0"),
"charge_id" : NumberDecimal("0"),
"price" : NumberLong(-1),
"cutoff" : NumberLong(0),
"vesting_price" : NumberLong(0),
"min_vesting" : NumberLong(0),
"_SERVICE_" : { ... }
Параметры
act
— название действия;charge_id
— идентификатор батарейки, ресурсами которой ограничивается действиеact
;price
— цена (в условных единицах) расходуемого ресурса батарейки с идентификаторомcharge_id
за совершаемое действиеact
;cutoff
— пороговое значение, ограничивающее ресурс батарейки снизу, при достижении которого действиеact
блокируется;vesting_price
— значении вестинга, которое необходимо выплатить пользователю за выполнение действияact
в том случае, если ресурс батарейки исчерпан;min_vesting
— минимальное значение вестинга, которое необходимо иметь пользователю на его балансе для выполнения действияact
.
message
Коллекция MESSAGE содержит документы с данными о созданных сообщениях в виде ответов на ранее полученные родительские сообщения или посты.
Пример документа:
{
"_id" : ObjectId("5cb6c9252abe5100014c5d18"),
"id" : NumberDecimal("4"),
"permlink" : "re-hadesfightswithganymedeagainstselene-1555482917925",
"ref_block_num" : NumberDecimal("11562"),
"date" : NumberDecimal("1555482918000000"),
"parentacc" : "d5gqchmbgrdj",
"parent_id" : NumberDecimal("3"),
"tokenprop" : NumberLong(0),
"beneficiaries" : [ ],
"rewardweight" : NumberLong("4611686018427387904"),
"state" : {
"netshares" : NumberLong("854259561865216"),
"voteshares" : NumberLong("854259561865216"),
"sumcuratorsw" : NumberLong("457078773461799504")
},
"childcount" : NumberDecimal("0"),
"level" : NumberDecimal("1"),
"curators_prcnt" : NumberLong("415051741658464911"),
"_SERVICE_" : { ... }
}
Параметры
id
— идентификатор документа, созданный контрактомgolos.publication
;permlink
— представление относительного адреса сообщения, имеющего вид строки;ref_block_num
— номер блока, содержащего транзакцию с отправкой настоящего сообщения;parentacc
— имя аккаунта-автора родительского сообщения, на которое сформировано настоящее сообщение. В случае нулевого значенияparentacc
настоящее сообщение является постом;parent_id
— идентификатор родительского сообщения;tokenprop
— размер вознаграждения (количество токенов);(array) beneficiaries
— массив, содержащий имена бенефициаров с полагающимися им выплатами в виде процентов от общего вознаграждения бенефициарам;rewardweight
— вес поста на момент его закрытия с учетом размера вознаграждения за него;(object) state
:netshares
— числовое значение всех голосов. Определяется как произведение количества всех голосов на общее количество вестинга всех голосующих;voteshares
— числовое значение всех позитивных голосов. Определяется как произведение количества всех позитивных голосов на количество вестинга всех участников, проголосовавших «за»;sumcuratorsw
— суммарный вес голосов всех кураторов, используемый при определении размера их вознаграждения. Вознаграждение куратора определяется как произведение общей суммы вознаграждения кураторам на вес данного куратора, деленное наsumcuratorsw
;
childcount
— количество дочерних сообщений;level
— глубина вложенности дочернего сообщения относительно родительского;curators_prcnt
— процент (доля) выплаты кураторам от общей суммы вознаграждения.
pstngparams
Коллекция PSTNGPARAMS содержит документы со значениями параметров, устанавливаемых вызовом операции setparams()
. После каждого вызова setparams()
в базе данных появляется запись — новый документ с установленными значениями параметров.
Пример документа:
"_id" : ObjectId(" ... "),
"id" : NumberDecimal("12552436324427411456"),
"max_vote_changes" : {
"value" : NumberDecimal("5")
},
"cashout_window" : {
"window" : NumberDecimal("120"),
"upvote_lockout" : NumberDecimal("15")
},
"max_beneficiaries" : {
"value" : NumberDecimal("64")
},
"max_comment_depth" : {
"value" : NumberDecimal("127")
},
"social_acc" : {
"value" : "gls.social"
},
"referral_acc" : {
"value" : ""
},
"curators_prcnt" : {
"min_curators_prcnt" : NumberDecimal("0"),
"max_curators_prcnt" : NumberDecimal("9000")
},
"_SERVICE_" : { ... }
Параметры
(string) id
— идентификатор документа, созданный контрактомgolos.publication
;(object) max_vote_changes
— максимально возможное количество переголосований пользователя за пост;(object) cashout_window
— данные об окне выплат за пост:window
— интервал времени (в секундах), по истечении которого осуществляется выплата вознаграждения за пост;upvote_lockout
— интервал времени, по истечении которого прекращаются приниматься голоса в виде «upvote» за пост;
(object) max_beneficiaries
— максимально возможное количество бенефициаров;(object) max_comment_depth
— максимально возможное количество уровней вложенности дочерних комментариев относительно родительского;(object) social_acc
— имя аккаунта контрактаgolos.social
;(object) referral_acc
— имя аккаунта контрактаgolos.referral
;(object) curators_prcnt
— доля, выделяемая кураторам от вознаграждения:min_curators_prcnt
— минимально возможная доля, выделяемая кураторам от вознаграждения;max_curators_prcnt
— максимально возможная доля, выделяемая кураторам от вознаграждения.
rewardpools
Коллекция REWADPOOLS содержит документы (таблицы) с данными о правилах распределения вознаграждения между пользователями за публикации постов и курирование. В таблицах также содержатся данные о незакрытых постах и об оставшихся вознаграждениях пуле. Таблица в БД создается после каждого изменения правил вознаграждения авторов постов и кураторов с использованием операции setrules()
.
Пример документа:
"_id" : ObjectId(" ... "),
"created" : NumberDecimal("1554995760000000"),
"rules" : {
"mainfunc" : {
"code" : {
"varssize" : NumberDecimal("1"),
"operators" : [
NumberDecimal("0")
],
"values" : [
{
"kind" : NumberDecimal("1"),
"idx" : NumberDecimal("0")
}
],
"nums" : [ ],
"consts" : [ ]
},
"maxarg" : NumberLong("9223372036854771712")
},
"curationfunc" : {
"code" : {
"varssize" : NumberDecimal("1"),
"operators" : [
NumberDecimal("0"),
NumberDecimal("26"),
NumberDecimal("4"),
NumberDecimal("4")
],
"values" : [
{
"kind" : NumberDecimal("0"),
"idx" : NumberDecimal("0")
},
{
"kind" : NumberDecimal("0"),
"idx" : NumberDecimal("3")
}
],
"nums" : [
NumberLong("9223372036854771712"),
NumberLong("16384000000000000"),
NumberLong(409),
NumberLong(4096)
],
"consts" : [ ]
},
"maxarg" : NumberLong("9223372036854771712")
},
"timepenalty" : {
"code" : {
"varssize" : NumberDecimal("1"),
"operators" : [
NumberDecimal("0"),
NumberDecimal("0"),
NumberDecimal("4")
],
"values" : [
{
"kind" : NumberDecimal("1"),
"idx" : NumberDecimal("0")
},
{
"kind" : NumberDecimal("0"),
"idx" : NumberDecimal("0")
}
],
"nums" : [
NumberLong(7372800)
],
"consts" : [ ]
},
"maxarg" : NumberLong(7372800)
},
"maxtokenprop" : NumberLong("2305843009213693952")
},
"state" : {
"msgs" : NumberDecimal("0"),
"funds" : {
"amount" : NumberLong(249427023),
"decs" : NumberDecimal("3"),
"sym" : "GOLOS"
},
"rshares" : {
"binary" : BinData(0,"AQAAAAAAAAAAAAAAAAAAAAA="),
"string" : "0"
},
"rsharesfn" : {
"binary" : BinData(0,"AQAAAAAAAAAAAAAAAAAAAAA="),
"string" : "0"
}
},
"_SERVICE_" : { ... }
Параметры
created
— время создания пула вызовом операции setrules(). С момента публикации поста и окончания голосования правила распределения вознаграждения могут быть изменены. Параметр позволяет определить, к какому пулу относится пост;(object) rules
— описание правила по распределению вознаграждения в рамках приложения:
-(object) mainfunc
— функция в виде математического выражения, реализующая алгоритм распределения вознаграждения автора и кураторов поста:
-(object) code
— сгенерированный псевдокод функцииmainfunc
, содержащий операции и последовательность их выполнения:
-varssize
— математическое выражение;
-operators
— массив операторов, определяющий порядок выполнения операций;
-values
— массив применяемых значений переменных и констант к операциям; Значения выбираются по индексам из массивовnums
иconsts
;
-nums
— массив переменных, используемых в операциях;
-consts
— массив констант, используемых в операциях;
-maxarg
— максимально возможное суммарное вознаграждение;
-(object) curationfunc
— функция в виде математического выражения, реализующая алгоритм распределения вознаграждения для каждого из кураторов:
-(object) code
— сгенерированный псевдокод функцииcurationfunc
, содержащий операции и последовательность их выполнения (аналогично сmainfunc
);
-maxarg
— максимально возможное вознаграждение;
-(object) timepenalty
— правила, установленные для штрафного окна с учетом его длительности, времени голосования и веса голосов;
-(integer) maxtokenprop
— максимальная доля от вознаграждения (в токенах).
-(object) state
— данные о состоянии пула вознаграждений и находящихся в пуле незакрытых постов. Данные используются в расчетах вознаграждений за посты, в том числе:
-msgs
— сообщения о находящихся в пуле незакрытых постах;
-(asset) funds
— количество токенов, находящихся в пуле;
-(object) rshares
— аргумент функции для расчета вознаграждений (с учетом веса голоса аккаунта и его количества вестинга);
-(object) rsharesfn
— функция для расчета вознаграждений за пост.
vote
Коллекция VOTE содержит таблицы с данными о голосовании за публикацию.
Пример таблицы:
{
"_id" : ObjectId("5cb58d1e2abe510001446e02"),
"id" : NumberDecimal("0"),
"message_id" : NumberDecimal("5"),
"voter" : "tst4dathqbji",
"weight" : NumberLong(0),
"time" : NumberDecimal("1555402017000000"),
"count" : NumberLong(2),
"delegators" : [ ],
"curatorsw" : NumberLong(0),
"rshares" : NumberLong(0),
"_SERVICE_" : { ... }
}
Параметры
id
— идентификатор документа, созданный контрактомgolos.publication
;message_id
— идентификатор публикации;voter
— имя голосующего аккаунта;weight
— вес голоса аккаунтаvoter
;time
— время голосования (в секундах);count
— количество поданных голосов;delegators
— количество проголосовавших делегатов;curatorsw
— вес куратора, используемый при определении размера его вознаграждения;rshares
— значение голоса, положительное или отрицательное число, поставленное голосующим. Определяется как произведение голоса на количество вестинга голосующего. Голос вида «downvote» соответствует «-1», голос вида «upvote» соотвествует «+1».
Полное описание вы можете найти на гитхабе.
Cерия статей, раскрывающих идею и принципы функционирования блокчейна CyberWay и приложения Голос:
- Ответы на вопросы о CyberWay часть 4
- Ответы на вопросы о CyberWay. Часть 3
- Ответы на вопросы о CyberWay. Часть 2
- Ответы на вопросы о CyberWay. Часть 1
- Golos.io: Адаптация к блокчейну CyberWay
- Основные положения CyberWay
- CyberWay: предпосылки создания платформы. Основные отличия от EOS
- Разработка новой блокчейн-платформы CyberWay. Дорожная карта проекта
- Функционирование смарт-контрактов приложения Голос на платформе БЧ CyberWay
- Техническая реализация bandwidth на платформе CyberWay
- Testnet: Экспериментальная версия
- Кошелек golos_wallet для Bittrex на платформе CyberWay
- Общее о структуре таблиц в MongoDB
- Коллекции таблиц (документов) в MongoDB, используемых в системных контрактах
- Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекция контракта golos.charge
Каналы коммуникации с 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.