Что такое смарт-ассет

Любой пользователь может не только создать собственный токен на платформе Waves, но и наделить его определённой функциональностью, прикрепив к нему скрипт. Токен с прикреплённым скриптом называется смарт-ассетом, а прикрепляемый скрипт — скриптом ассета. Примеры практического применения смарт-ассетов:

  • Заморозка. Транзакции со смарт-ассетом могут быть запрещены до (или после) момента, когда блокчейн наберёт определенную высоту.
  • Черные/белые списки. Перевод смарт-ассета может быть запрещен на указанные адреса или, наоборот, разрешен только на указанные адреса.
  • Комиссия. Создатель смарт-ассета может установить комиссию, которая будет выплачиваться ему за каждую операцию с его смарт-ассетом.
  • Мультиподпись. Для совершения транзакции смарт-ассет может требовать подпись нескольких аккаунтов.
  • Ограничение на покупку. Может быть установлено правило, согласно которому смарт-ассет может быть куплен только за определенные токены. Покупка смарт-ассета за другие токены может быть запрещена.
  • Ограничение на матчер. Может быть установлено правило, согласно которому проведение сделки купли-продажи смарт-ассета может осуществляться только определенным матчером.
  • Гейминг. Для смарт-ассета, используемого в качестве игровой валюты, может быть установлено разрешение совершать сделки только в заданных игровых локациях или только между персонажами, обладающими определенными свойствами.

Функциональность смарт-ассетов не ограничивается приведенными примерами.

Создание смарт-ассета

Прикрепить скрипт к токену можно только в момент создания токена, обновить скрипт можно в любой момент. Для создания токена можно использовать как Waves IDE, так библиотеки (WavesJ, WavesCS и другие). Скрипт ассета должен быть написан на Ride и прикреплен к токену при помощи транзакции установки скрипта ассета. За выполнение транзакции установки скрипта ассета взимается комиссия, которая составляет 1 WAVES.

Структура ассет-скрипта

Директива

Директива должна размещаться в самом начале скрипта. Рассмотрим пример директивы:

{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE EXPRESSION #-}
{-# SCRIPT_TYPE ASSET #-}

Приведенная директива сообщает компилятору следующую информацию:

  • в скрипте будет использоваться третья версия библиотеки стандартных функций,
  • типом данного скрипта является Expression,
  • скрипт будет привязан к ассету (а не к аккаунту).

Наличие директивы является обязательным.

Функция валидации

Функция валидации проверяет, что исходящие транзакции с участием токена соответствуют заданным условиям. Если условие не соблюдается, транзакция не будет отправлена. Возможными результатами выполнения функции валидации являются

  • true (транзакция разрешена),
  • false (транзакция запрещена),
  • ошибка.

Скрипт ассета может содержать несколько функций валидации.

Примеры скриптов смарт-ассетов

Заморозка токена

Операции с токеном будут запрещены до того момента, как высота блокчейна достигнет 100500.

let targetHeight = 100500
height >= targetHeight

Выпуск несжигаемого токена

Для смарт-ассета в примере будет запрещена транзакция сжигания токена.

match tx {
  case t : BurnTransaction => false
  case _ => true
}

Комиссия с каждого перевода токена

Лицу, выпустившему токен, будет начисляться комиссия после совершения транзакции перевода с участием его токена.

match tx {
  case t : TransferTransaction =>
    t.feeAssetId == base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd'
  case _ => true
}

Токен, который невозможно перевести

Чтобы сделать невозможным перевод токена, следует возвращать false для транзакции перевода, транзакции массового перевода и транзакции обмена.

match tx {
  case t : TransferTransaction | MassTransferTransaction | ExchangeTransaction => false
  case _ => true
}

Покупка только за BTC

Смарт-ассет с приведенным ниже скриптом можно покупать только за BTC.

let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
  case t : ExchangeTransaction =>
    t.sellOrder.assetPair.priceAsset == BTCId || t.sellOrder.assetPair.amountAsset == BTCId
  case _ => true
}

Разрешен только определенный матчер

Приведенный ниже скрипт разрешает операцию купли-продажи смарт-ассета только на определенном матчере.

match tx {
  case t : ExchangeTransaction =>
    t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
  case _ => true
}

Изменение скрипта смарт-ассета

Скрипт смарт-ассета можно изменить при помощи транзакции установки скрипта ассета. Комиссия за ее выполнение составляет 1 WAVES. Изменить скрипт может только тот аккаунт, который выпустил смарт-ассет.

Комиссии смарт-ассетов

Размер комиссии за транзакцию, в которой выполняется скрипт ассета, увеличена на 0,004 WAVES. Если аккаунтом является смарт-аккаунт, то размер комиссии увеличивается на дополнительные 0,004 WAVES.

Приведем пример. Комиссия за выполнение транзакции перевода составляет 0,001 WAVES. Если пользователь делает перевод смарт-ассета со смарт-аккаунта, то размер комиссии составит 0,001 + 0,004 + 0,004 = 0,009 WAVES.

Купля-продажа смарт-ассетов

Смарт-ассеты можно покупать и продавать на DEX. Если смарт-ассетом является один из покупаемых или продаваемых токенов, то размер комиссии за транзакцию обмена увеличивается на 0,004 WAVES для каждого участника сделки. Если оба токена являются смарт-ассетами, то размер комиссии увеличивается на 0,008 WAVES для каждого участника сделки.

Пример 1: один из токенов является смарт-ассетом. Комиссия за транзакцию обмена составляет 0,003 WAVES. Каждый из участников сделки заплатит 0,003 + 0,004 = 0,007 WAVES.

Пример 2: оба токена являются смарт-ассетами. Каждый из участников сделки заплатит 0,003 + 0,004 + 0,004 = 0,011 WAVES.

results matching ""

    No results matching ""