Токены
Назначение смарт-контракта cyber.token
Системный смарт-контракт cyber.token
предоставляет функции по управлению токенами, генерирует новые токены и хранит информацию о созданных токенах, предоставляет возможность проводить взаиморасчеты между аккаунтами.
В состав смарт-контракта cyber.token входят следующие операции-действия: create
, issue
, retire
, transfer
, open
, close
.
Операция-действие create
Операция-действие create
используется для создания токена для обращения его в системе. Операция-действие create
имеет следующий вид:
Параметры:
issuer
— имя аккаунта, создающего токен для обращения в системе; maximum_supply
— значение, содержащее поля:
максимально возможное количество поставляемых токенов;
символ токена (тип данных, однозначно определяющий токен):
имя токена, состоящее из набора прописных букв;
поле, задающее точность стоимости токена в виде количества знаков после запятой.
Аккаунт issuer
наделяется правами по выпуску и изъятию из обращения токенов. Права на выполнение операции-действия create
имеются только у смарт-контракта token
. Для выполнения данной операции-действия необходима подпись блок-продюсеров. За использование ресурсов bandwidth
(RAM) плата взимается с аккаунта issuer
.
Операция-действие issue
Операция-действие issue
используется для выпуска в обращение токена в системе.
Операция-действие issue
имеет следующий вид:
Параметры:
to
— имя аккаунта, на баланс которого поступает токен;
quantity
— значение, содержащее поля:
количество выпущенных в обращение токенов;
символ токена:
имя токена, состоящее из набора прописных букв;
поле, задающее точность стоимости токена в виде количества знаков после запятой;
memo
— примечание, текст которого дополняет смысловое значение выпуска токена (например, эмиссия токена). Количество символов в строке не должно превышать 256 шт.
При выполнении операции-действия create
в таблицу записывается символ токена и имя аккаунта issuer
. При выполнении операции-действия issue
из полученного значения quantity
берется символ токена и по нему, используя табличные данные, определяется аккаунт issuer
. Правами на выполнение операции-действия обладает аккаунт issuer
. Количество выпущенных токенов не должно превышать значение maximum_supply
, заданного в операции-действия create
. За использование ресурсов bandwidth
(RAM) взимается плата c аккаунта issuer
.
Операция-действие retire
Операция-действие retire
используется для изъятия из обращения определенного количества токенов в системе. Операция-действие retire
имеет следующий вид:
Параметры:
quantity
— значение, содержащее поля:
количество изымаемых из обращения токенов;
символ токена:
имя токена, состоящее из набора прописных букв;
поле, задающее точность стоимости токена в виде количества знаков после запятой.
Правами запуска операции-действия обладает аккаунт issuer
. За использование ресурсов bandwidth
(RAM) плата взимается c аккаунта issuer
. Указанное в операции-действия количество изымаемых из обращения токенов также снимается с баланса аккаунта issuer
, поэтому он не может изъять из обращения токенов больше, чем имеется на его балансе.
Операция-действие transfer
Операция-действие transfer
используется для передачи токена с баланса одного аккаунта на баланс другого. Операция-действие transfer
имеет следующий вид:
Параметры:
from
— имя аккаунта-отправителя, с баланса которого снимаются токены;
to
— имя аккаунта-получателя, на баланс которого поступают токены;
quantity
— значение в виде структуры, задающее количество переводимых токенов. Количество токенов должно быть больше нуля;
memo
— примечание , уточняющее цель перевода токенов.
Операция-действие выполняется с отправкой уведомления на смарт-контракты отправителя и получателя токенов. Операция отправки уведомления имеет вид аналогичный операции-действия transfer
. Отличие состоит в том, что операция отправки уведомления выполняется не на смарт-контракте cyber.token
, а на контрактах отправителя и получателя уведомления (например, если смарт-контракт vesting
получает уведомление, он автоматически начисляет токены на баланс vesting
). Для отправки токенов аккаунт должен быть наделен правами отправителя.
За использование ресурсов bandwidth
(RAM) плата взимается либо с аккаунта-отправителя, либо с аккаунта-получателя в зависимости от того, кто подписал транзакцию. В случае, если предварительно была выполнена операция-действие open
, никто из них не оплачивает bandwidth
, так как используется уже созданная в БД запись.
Примечание
Раньше в EOS при пересылке токенов создавалась запись в БД для хранения баланса пользователя для случая, когда у получателя не было в наличии токена. Если аккаунт-отправитель оплачивал используемые ресурсы (RAM) за аккаунта-получателя, то существовала возможность расхода всей выделенной доли памяти аккаунту-получателю.
С целью недопущения подобных случаев при выполнении операции-действия transfer
было принято решение ввести дополнительные операции-действия open
и close
. Функциональное назначение данных операций — предварительное создание записи в БД, чтобы запись создавалась не во время выполнения операции-действия transfer
, а также ее удаление.
Операция-действие open
Операция-действие open
используется для создания записи в БД с указанием имени аккаунта, который должен оплатить используемую память, а также с указанием символа, для которого создается запись. Операция-действие open
имеет следующий вид:
Параметры:
owner
— имя аккаунта, которому выделяется память;
symbol
— символ, для которого создается запись;
ram_payer
— имя аккаунта, который оплачивает используемую память;
Выполнение операции-действия open
требует подписи аккаунта ram_payer
.
Операция-действие close
Операция-действие close
является обратным действием по отношению к open
и используется для освобождение выделенной памяти в БД. Для выполнения данного операции-действия требуется наличие нулевого баланса токена (определяемого символом) у аккаунта. Операция-действие close
имеет следующий вид:
Параметры:
owner
— имя аккаунта, которому была выделена память;
symbol
— символ, для которого удаляется запись.
Получение статистической информации по системным токенам
Для получения статистической информации по токенам в смарт-контракте cyber.token
используются две таблицы currency_stats
и account
.
Таблица currency_stats
имеет следующий вид:
Параметры:
supply
— значение в виде структуры с полями, показывающее количество токенов в обращении определенного вида;
max_supply
— значение в виде структуры с полями, показывающее максимально возможное количество в обращении токенов определенного вида;
issuer
— имя аккаунта, выпустившего токены.
Первичным ключом для таблицы currency_stats
является символьное значение в asset
, по которому определяется токен. По токену определяется значение supply
— количество выпущенных в обращение токенов, а также имя аккаунта, выпустившего токены.
Таблица account
имеет следующий вид:
Область видимости таблицы определяется именем аккаунта.
Первичным ключом для таблицы currency_stats
является символьное значение в asset
, по которому определяется токен и его баланс для данного аккаунта.
Last updated