Контракт tokenlock предназначен для передачи токенов CRU пользователю по одному из алгоритмов разморозки. Передаваемые токены могут находиться в трех состояниях: замороженные по алгоритму 1, замороженные по алгоритму 2 или размороженные.
Время абсолютной заморозки для алгоритма 1: 300 дней, для алгоритма 2: 545 дней. Всего 35 циклов распределения. Период между циклами распределения: 30 дней.
Размараживаемая доля зависит от текущего номера цикла распределения: 1-6 цикл: 1%; 7-12 цикл: 1.5%; 13-24 цикл: 2%; 25-35 цикл: 5%.
Каждая разморозка происходит на границе начала следующего цикла распределения (первая через 30 дней после окончания времени абсолютной заморозки). Сумма всех долей распределения во всех циклах равняется 100%.
Контракт задействует аккаунты:
- _self - собственный аккаунт контракта tokenlock
- username - аккаунт пользователя
- eosio.token - контракт токена
- reserve - аккаунт с токенами распределения. Передает токены контракта eosio.token пользователю username по условиям tokenlock.
Аккаунт reserve должен обладать активным разрешением доступа eosio@code для аккаунта tokenlock.
Таблицы:
- locks(_self, username) - хранит в области памяти пользователя username все его объекты начисления
- history(_self, username) - хранит в области памяти пользователя username историю всех вызовов метода add
- debts(_self, username) - хранит объект долга пользователя, полученный в ходе внутренних покупок.
Объект долга пользователя увеличивается, если необходимо выполнить покупку (перевод на аккаунт reserve) еще не размороженными токенами, и уменьшается в момент миграции или обновления баланса замороженных CRU.
Методы:
-
add (eosio::name username, uint64_t id, uint64_t parent_id, eosio::time_point_sec datetime, uint64_t algorithm, int64_t amount)
- username - имя пользователя
- id - идентификатор начисления во внешней базе данных
- parent_id - идентификатор баланса списания во внешней базе данных. Указывается с отрицательной суммой amount для списания из объекта начисления
- datetime - дата создания объекта во внешней базе данных в формате "2020-04-08T16:11:22"
- algorithm - используемый алгоритм разморозки. Принимает значения 0 - размороженные токены, необходимо сразу перечислить; 1 - алгоритм разморозки 1, 2 - алгоритм разморозки 2.
- amount - целочисленная величина начисления или списания CRU. Может принимать отрицательные знания при списании.
-
migrate(eosio::name username)
- username - имя аккаунта пользователя
-
withdraw(eosio::name username, uint64_t id)
- username - пользователь, которому принадлежит выводимый объект начисления
- id - идентификатор объекта начисления
-
refresh(eosio::name username, uint64_t id)
- eosio::name username - пользователь, которому принадлежит обновляемый объект начисления
- uint64_t id - целочисленный идентификатор объекта начисления
