Коллекции таблиц (документов) в MongoDB, используемых в контрактах приложения Голос - коллекции контракта golos.publication


Уважаемые пользователи!

Информацию о структуре таблиц в MongoDB вы можете найти в постах:

Мы продолжаем описывать базу данных. В настоящей публикации предоставляем вам коллекции контракта 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 и приложения Голос:

    Каналы коммуникации с 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. Заходите на страничку /~witnesses голосуйте за делегата Golos•Core!
    Спасибо за внимание и хорошего дня!

    С уважением,

    Команда Golos•Core: @andreypf, @korpusenko, @maslenitsa, @muhazokotuha, @zxcat, @annaeq, @anazarov79, @kaynarov, @s-medvedev, @eugin, @dedbaraded, @jimak.



Comments 1