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


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

В первой статье, посвященной хранению данных блокчейном CyberWay, упоминались широкие возможножности СУБД MongoDB. Данную информацию вы можете подчерпнуть также из официальной документации.

Настоящим постом мы заканчиваем предоставление коллекций контрактов приложения Голос.

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

Коллекции контракта golos.vesting

accounts

Коллекция ACCOUNTS содержит документы (таблицы) с данными о балансах вестинга у аккаунтов. Количество созданных таблиц в БД для одного аккаунта соответствует количеству видов вестинга, которыми располагает данный аккаунт.

Пример документа:

   "_id" : ObjectId(" ... "),
   "vesting" : {
           "amount" : NumberLong("93355649256"),
           "decs" : NumberDecimal("6"),
           "sym" : "GOLOS"
   },
   "delegated" : {
           "amount" : NumberLong(0),
           "decs" : NumberDecimal("6"),
           "sym" : "GOLOS"
   },
   "received" : {
           "amount" : NumberLong(0),
           "decs" : NumberDecimal("6"),
           "sym" : "GOLOS"
   },
   "unlocked_limit" : {
           "amount" : NumberLong(0),
           "decs" : NumberDecimal("6"),
           "sym" : "GOLOS"
   },
   "_SERVICE_" : { ... }

Параметры

  • (asset) vesting — количество вестинга, находящееся на балансе аккаунта;
  • (asset) delegated — общее количество вестинга, делегированное другим аккаунтам;
  • (asset) received — общее количество вестинга, полученное от других аккаунтов в виде доли от вознаграждения за делегирование, а также в виде делегированных данному аккаунту средств;
  • (asset) unlocked_limit — выделенная пользователем часть вестинга для «сжигания».

delegation

Коллекция DELEGATION содержит документы с данными о делегировании средств в виде вестинга. На каждую операцию делегирования delegate() создается в БД отдельная таблица следующего вида:

{
       "_id" : ObjectId(" ... "),
       "id" : NumberDecimal("18"),
       "delegator" : "walf31lwkcpy",
       "delegatee" : "l44tnnby1yfn",
       "quantity" : {
               "amount" : NumberLong("18509738146"),
               "decs" : NumberDecimal("6"),
               "sym" : "GOLOS"
       },
       "interest_rate" : NumberDecimal("0"),
       "payout_strategy" : NumberDecimal("0"),
       "min_delegation_time" : "2018-06-20T18:46:45.000",
       "_SERVICE_" : { ... }
}

Параметры

  • id — идентификатор документа, созданный контрактом golos.vesting;
  • delegator — имя аккаунта, запустившего процесс делегирования вестинга;
  • delegatee — количество делегированных средств в виде вестинга;
  • (asset) quantity — количество возвращаемых средств в виде вестинга;
  • interest_rate — процент выплаты аккаунту delegator от доходов аккаунта delegatee за курирование;
  • payout_strategy — идентификатор стратегии делегирования;
  • min_delegation_time — дата и время, до истечения которого делегированные средства не могут быть возвращены аккаунту delegator.

rdelegation

Коллекция RDELEGATION содержит документы с данными объекта возврата делегированных средств в виде вестинга.

Пример документа:

{
       "_id" : ObjectId(" ... "),
       "id" : NumberDecimal("18"),
       "delegator" : "o.kiyqeszkx4",
       "quantity" : {
               "amount" : NumberLong("769323061452"),
               "decs" : NumberDecimal("6"),
               "sym" : "GOLOS"
       },
       "date" : "2019-03-03T08:19:54.000",
       "_SERVICE_" : { ... }
}

Параметры

  • id — идентификатор документа, созданный контрактом golos.vesting;
  • delegator — имя аккаунта, запустившего процесс возврата делегированных средств;
  • (asset) quantity — количество делегированных средств, подлежащих возврату;
  • date — дата и время, по истечении которого делегированные средства должны быть возвращены аккаунту delegator;

После каждой операции undelegate() у аккаунта-получателя делегированных средств значение объекта received сразу уменьшается*, в то время как у аккаунта delegator значение объекта delegated будет уменьшено только по истечении определенного времени. Для сохранения балансов создан объект возврата делегированных средств, в поле quantityкоторого записывается значение поля received аккаунта-получателя (из коллекции ACCAUNTS). По истечении времени date этот объект возврата уничтожается и у аккаунта delegator значение поля delegated уменьшится на значение quantity.

*Пояснение: После выполнения операции делегированные средства переходят в "замороженное" состояние и возвращаются обратно делегатору равными долями в течение определенного времени. Для сохранения баланса средств в системе введен объект quantity, в поле которого временно находятся "замороженные" средства. Они недоступны делегатору, и сумма делегированных им ранее средств будет уменьшаться только с возвращением к нему очередной доли.

stat

Коллекция STAT содержит документы с данными о наличии количества вестинга в системе. Каждому вестингу определенного вида отводится отдельная таблица (документ) в БД. Таблица создается вызовом операции create().

Пример документа:

{
   "_id" : ObjectId(" ... "),
   "supply" : {
           "amount" : NumberLong("2435362722662510164"),
           "decs" : NumberDecimal("6"),
           "sym" : "GOLOS"
   },
   "notify_acc" : "gls.ctrl",
   "_SERVICE_" : { ... }
}

Параметры

  • (asset) supply — объект, содержащий данные о количестве вестинга определенного вида в системе;
  • notify_acc — имя аккаунта контракта управления для отправки уведомления в случае изменения баланса.

vestparams

Коллекция VESTPARAMS содержит документы со значениями параметров, устанавливаемых вызовом операции setparams(). При каждом вызове setparams() в базе данных появляется запись — новый документ с установленными значениями параметров.

Пример документа:

{
       "_id" : ObjectId(" ... "),
       "id" : NumberDecimal("15758546561230307328"),
       "withdraw" : {
               "intervals" : NumberDecimal("13"),
               "interval_seconds" : NumberDecimal("120")
       },
       "min_amount" : {
               "min_amount" : NumberDecimal("10000")
       },
       "delegation" : {
               "min_amount" : NumberDecimal("5000000"),
               "min_remainder" : NumberDecimal("15000000"),
               "return_time" : NumberDecimal("120"),
               "min_time" : NumberDecimal("0"),
               "max_interest" : NumberDecimal("0")
       },
       "_SERVICE_" : { ... }
}

Параметры


Comments 2