# Токен (ассет)
Токен или ассет — цифровой актив на блокчейне, который может использоваться:
- как криптовалюта – для оплаты товаров и услуг в рамках какого-либо проекта, а также для краудфандинга;
- как объект или ресурс в играх и др.
Токен может представлять какой-либо объект или ресурс реального мира или виртуальную сущность.
Слова «токен» и «ассет» в экосистеме Waves используются как синонимы.
WAVES — основной токен на блокчейне Waves; подробнее о нем в разделе WAVES.
Все остальные токены являются пользовательскими, то есть выпущены от имени какого-либо аккаунта. Выпустить свой токен может любой аккаунт — достаточно наличия на балансе определенного количества WAVES на оплату комиссии. Новый токен сразу же доступен:
- для переводов между аккаунтами;
- для торговли на бирже WX Network, разработанной сторонней командой из сообщества (кроме невзаимозаменяемых токенов NFT; также временно недоступна торговля смарт-ассетами);
- для платежей, приложенных к транзакции вызова скрипта.
# Параметры пользовательского токена
Пример пользовательского токена: https://wavesexplorer.com/ru/assets/HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS.
Пример JSON-представления, возвращаемого методом GET /assets/details/{assetId}
Node REST API:
{
"assetId": "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS",
"issueHeight": 2868644,
"issueTimestamp": 1637666412469,
"issuer": "3PEpe1vvqGKo6gTAfyGPxdgNcfECGAZTaqy",
"issuerPublicKey": "9YMFU94AX1BhZX6xQU4Y5yR4e78MCUQzB8EZapjuS9WM",
"name": "Puzzle",
"description": "DeFi 2.0 is here.",
"decimals": 8,
"reissuable": false,
"quantity": 46965909720523,
"scripted": false,
"minSponsoredAssetFee": 100000,
"originTransactionId": "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS",
"sequenceInBlock": 1
}
Поле | Описание |
---|---|
assetId | ID токена: байты в кодировке base58. ID токена вычисляется как хеш параметров токена при выпуске. См. также раздел ID токена |
issueHeight | Высота блокчейна (порядковый номер блока), на которой произошел выпуск токена |
issueTimestamp | Время выпуска токена: Unix-время в миллисекундах |
issuer | Адрес эмитента — аккаунта, выпустившего токен: байты в кодировке base58 |
issuerPublicKey | Открытый ключ эмитента: байты в кодировке base58 |
name | Название токена. От 4 до 16 байт (1 символ может занимать до 4 байт) |
description | Описание токена. От 0 до 1000 байт |
decimals | Количество знаков после запятой, от 0 до 8 |
reissuable | Флаг возможности довыпуска |
quantity | Общее количество токена на блокчейне, в атомарных единицах. От 1 до 9 223 372 036 854 775 807. Количество может меняться в результате довыпуска и сжигания, см. Операции с токеном ниже |
scripted | Наличие скрипта: true для смарт-ассета, false для обычного токена. Подробнее о смарт-ассетах |
minSponsoredAssetFee | Только для спонсорского ассета: количество ассета, эквивалентное 0,001 WAVES. Подробнее о спонсировании |
originTransactionId | ID транзакции, выпустившей токен: байты в кодировке base58 |
scriptDetails | Только для смарт-ассета: скрипт ассета и его параметры |
sequenceInBlock | Порядковый номер токена среди выпущенных в этом блоке (нумерация с 1) |
# Атомарная единица
Количество токена отображается по-разному в пользовательских интерфейсах и в JSON-представлении, используемом в Node REST API. В запросах и ответах API значения всех полей, содержащих количество токена, выражены в атомарных единицах и поэтому являются целым числом. Такое представление позволяет избежать проблемы точности вычислений.
Атомарная единица — это минимальная неделимая единица («копейка») токена, она равна 10–decimals.
Количество токена в JSON-представлении — это фактическое количество, умноженное на 10decimals.
Для XTN в примере выше:
decimals
= 6,- атомарная единица — 1/1 000 000 XTN.
"quantity": 999999999395940000
соответствует 999 999 999 395,94 XTN в пользовательских интерфейсах,"minSponsoredAssetFee": 150000
соответствует 0,15 XTN.
# Выпуск токена
Чтобы выпустить токен, нужно отправить транзакцию выпуска, указав в ней параметры токена:
name
description
decimals
quantity
reissuable
script
(для выпуска смарт-ассета).
Создать транзакцию выпуска можно:
- В приложении WX Network, разработанной сторонней командой из сообщества. См. раздел Создание токена/NFT базы знаний WX Network.
- В Waves IDE, см. раздел Выпуск смарт-ассета.
- С помощью одной из клиентских библиотек. См. также примеры в разделе Выпуск токена. Управление токеном.
Комиссия за транзакцию составляет 1 WAVES для обычного токена или 0,001 WAVES для невзаимозаменяемого токена (NFT).
Кроме того, токен может быть выпущен скриптом dApp в результате транзакции вызова скрипта — если результат вызываемой функции содержит действие Issue. Минимальная комиссия за транзакцию вызова скрипта увеличивается на 1 WAVES за каждый выпускаемый токен, не являющийся NFT.
# Операции с токеном
Перевод токена на другой аккаунт
Выполняется с помощью транзакции перевода или транзакции массового перевода.
Скрипт dApp может перевести токен с помощью действия скрипта ScriptTransfer в результате транзакции вызова скрипта.
Обмен (торговля)
В обмене могут участвовать три аккаунта: один пользователь создает ордер на покупку токена, другой — ордер на продажу. Матчер сводит ордера на покупку и продажу с подходящими параметрами и создает транзакцию обмена. Подробнее о матчере см. в документации WX Network.
Сжигание
Уменьшение количества токена на аккаунте и тем самым на блокчейне. Сжигать токен может любой его владелец, не только эмитент. Сжигание WAVES невозможно.
Выполняется с помощью транзакции сжигания токена.
Скрипт dApp может сжечь токен с помощью действия скрипта Burn в рамках транзакции вызова скрипта.
Платеж в пользу dApp
Транзакция вызова скрипта может содержать до двух платежей в пользу dApp. Вызываемая функция имеет доступ к полям платежей — сумме и токену.
# Операции, доступные только эмитенту
Следующие операции с токеном может выполнить только аккаунт, выпустивший токен:
Настройка спонсирования
Эмитент токена может сделать его спонсорским — разрешить любым пользователям платить комиссию за транзакции вызова скрипта и транзакции перевода в этом токене (вместо WAVES). Подробнее о спонсировании
Установка и отмена спонсирования выполняются с помощью транзакции спонсирования.
Скрипт dApp может настроить спонсирование токен с помощью действия скрипта SponsorFee в рамках транзакции вызова скрипта.
Довыпуск
Увеличение количества токена на блокчейне. Возможность довыпуска регулируется полем
reissuable
.Выполняется с помощью транзакции довыпуска.
Скрипт dApp может довыпустить токен с помощью действия скрипта Reissue в рамках транзакции вызова скрипта.
Изменение скрипта ассета
Выполняется с помощью транзакции установки скрипта ассета. Если токен не является смарт-ассетом, то есть скрипт не был прикреплен при выпуске токена, то в дальнейшем прикрепить скрипт невозможно.
Изменение названия и/или описания
Выполняется с помощью транзакции обновления информации ассета.
# Токены других блокчейнов
Токен, выпущенный на другом блокчейне, нельзя использовать на блокчейне Waves напрямую. Однако можно выпустить на блокчейне Waves новый токен, представляющий исходный, и создать шлюз, связывающий эти два токена в соотношении 1:1. Например, создать шлюз для токена ERC-20 можно с помощью фреймворка Waves-ERC20-Gateway.