что такое ассет waves
# Что такое смарт-ассет
Любой пользователь может не только создать собственный токен на блокчейне Waves, но и установить правила его обращения, прикрепив к нему скрипт. Например, для игровой валюты могут быть разрешены сделки только между персонажами, обладающими определенными свойствами. Токен с прикрепленным скриптом называется смарт-ассетом, а прикрепляемый скрипт — скриптом ассета.
# Скрипт ассета
Скрипт ассета проверяет транзакции с участием ассета на соответствие заданным условиям. Скрипт содержит логическое выражение. Возможными результатами вычисления выражения являются:
Если скрипт ассета отклонил транзакцию, она будет либо отброшена, либо сохранена на блокчейне как неуспешная. В случае сохранения неуспешной транзакции с отправителя взимается комиссия, и больше никаких изменений на блокчейне не происходит. Подробнее в разделе Валидация транзакции.
Скрипт ассета может использовать данные блокчейна: текущую высоту, балансы аккаунтов, записи в хранилищах данных аккаунтов, параметры самого ассета и других токенов. Скрипту также доступны поля текущей транзакции, за исключением подтверждений ( proofs ).
# Примеры применения смарт-ассета
# Заморозка токена
Транзакции со смарт-ассетом могут быть запрещены до (или после) момента, когда блокчейн наберет определенную высоту.
# Несжигаемый токен
Для смарт-ассета в примере запрещена транзакция сжигания токена.
# Комиссия в спонсорском ассете
Комиссия в спонсорском ассете означает, что спонсор получает сумму комиссии в спонсорском ассете со счета отправителя транзакции, а со счета спонсора списывается эквивалентное количество WAVES в пользу генераторов блоков. Спонсор может продавать спонсорский ассет пользователям по более высокой цене и таким образом получать прибыль. Подробнее о спонсировании
Скрипт ассета также запрещает транзакции массового перевода, поскольку для них комиссия в спонсорском ассете не предусмотрена.
# Черный/белый список
Перевод смарт-ассета может быть запрещен на указанные адреса или, наоборот, разрешен только на указанные адреса.
# Покупка только за BTC
⚠️ Покупка и продажа смарт-ассетов на бирже Waves.Exchange
Скрипт ассета не может проверить непосредственно ордер, однако при проверке транзакции обмена может использовать параметры ордеров в ее составе.
Смарт-ассет с приведенным ниже скриптом можно покупать только за BTC.
# Покупка по заданной цене
⚠️ Покупка и продажа смарт-ассетов на бирже Waves.Exchange
В скрипте ассета можно задать разрешение на обмен только по цене, указанной в оракуле.
# Создание смарт-ассета
⚠️ Обратите внимание:
Чтобы создать смарт-ассет, нужно отправить транзакцию выпуска версии 2 и выше, указав в ней скомпилированный скрипт в кодировке base64. Удобнее всего сделать это в Waves IDE
# Изменение скрипта смарт-ассета
Для изменения скрипта предназначена транзакция установки скрипта ассета. Минимальная комиссия за транзакцию — 1 WAVES.
Изменить скрипт может только тот аккаунт, который выпустил смарт-ассет, и только в том случае, если это не запрещено самим скриптом ассета (а также скриптом аккаунта, выпустившего смарт-ассет).
Например, следующий скрипт запрещает все типы транзакций, кроме транзакций перевода, в том числе запрещает и транзакцию установки скрипта ассета, поэтому изменить такой скрипт невозможно.
# Комиссии смарт-ассетов
Минимальная комиссия за транзакцию увеличивается на 0,004 WAVES за каждый участвующий смарт-ассет, за исключением:
⚠️ Покупка и продажа смарт-ассетов на бирже Waves.Exchange
Применение смарт-аккаунтов и смарт-ассетов Waves в финансовых инструментах
В предыдущей статье мы рассмотрели несколько кейсов применения смарт-аккаунтов в бизнесе – включая аукционы и программы лояльности.
Сегодня мы поговорим о том, как смарт-аккаунты и смарт-ассеты могут повысить прозрачность и надежность таких финансовых инструментов, как опционы, фьючерсы и векселя.
Опцион
Опцион – биржевой контракт, дающий покупателю право купить актив по определенной цене или до определенной даты, но не обязывающий его это сделать.
Реализация опциона может быть следующей:
Используем смарт-ассет для самих опционов как инструмента и смарт-аккаунт для участника, который выполняет роль биржи и выпускает опционы. Участник-биржа обещает, что продаст некоторое количество определенного ассета по цене sellPrice между высотами блоков expirationStart и expirationEnd).
В коде смарт-ассета мы просто проверим, что он торгуется только между указанными высотами, и больше ничего проверять не будем, оставим всю ответственность за соблюдение правил на код участника-биржи.
Будем считать, что действия происходят следующим образом: участник-биржа продает опционы на покупку какого-то ассета, и остальные участники могут пересылать эти опционы или торговать ими. Чтобы воспользоваться своим правом на покупку, потенциальный покупатель должен перевести желаемое количество опционов на счет продавца, то есть участника-биржи. Далее он записывает информацию о совершенном трансфере в стейт аккаунта участника-биржи и только затем ExchangeTransaction по заданным условиям покупки-продажи сможет пройти.
В коде смарт-аккаунта мы должны убедиться, что любая проходящая через него ExchangeTransaction для финального акта покупки-продажи соответствует заданным условиям, и участник покупает ровно то число юнитов, которое он отправил на счет участника-биржи. Потенциальный покупатель должен отправить корректную DataTransaction о произошедшем трансфере, чтобы участник-биржа мог избежать двойной траты. В этой DataTransaction покупатель кладет по ключу, равному его адресу, значение, равное числу опционов переведенных на счет участника-биржи, то есть числу юнитов ассета, которое он может купить.
Фьючерсы на смарт-аккаунтах
В отличие от опциона, фьючерс (фьючерсный контракт) – это не право, а обязательство покупателя совершить покупку актива по зафиксированной контрактом цене в определенный момент в будущем.
В целом, реализация фьючерса похожа на реализацию опциона. Здесь смарт-ассет выступает в качестве фьючерса.
Также необходимо убедиться, что и покупатель, и продавец подписывают ордер на покупку. Фьючерс является обязательством, которое должно быть исполнено в любом случае. Значит, если продавец или участник отказываются от своих обязательств, любой участник сети может отправить транзакцию, исполнив таким образом фьючерс.
Скрипт смарт-ассета контролирует все TransferTransaction и ExchangeTransaction ассета-фьючерса, одобряя их только в том случае, если участник-покупатель создал ордер на будущую покупку ассета-фьючерса у участника-биржи.
Этот ордер должен быть действительным и удовлетворять условиям, на которых выпущен фьючерс. Чтобы проверить ордер, можно внести все его поля в стейт аккаунта-покупателя вместе с байтовым представлением подписанного ордера, а затем провести валидацию извне.
На данный момент RIDE не содержит нативной функции парсинга байтов транзакции, но включает все необходимые для ее реализации инструменты. Поэтому разработчики могут попробовать реализовать эту функцию самостоятельно.
Аккаунт с мульти-подписью / Эскроу
Аккаунт с мульти-подписью позволяет нескольким пользователям совместно управлять активами (например, операции с активами могут быть возможны лишь при наличии подписей трех пользователей из четырех). Для создания аккаунтов с мульти-подписью в языке RIDE мы можем использовать пруфы транзакций.
Аккаунт с мульти-подписью может быть также использован для эскроу-счета, на котором денежные средства хранятся до выполнения сторонами, заключившими договор, взятых на себя обязательств.
Управляемый токенами реестр — token curated registry (TCR)
На многих блокчейн-платформах существует проблема токсичных ассетов. Например, создать ассет на Waves может любой адрес, заплативший комиссию.
Проблему защиты пользователей и самого блокчейна от токсичных ассетов помогает решить управляемый токенами реестр — token curated registry (TCR), — генерируемый держателями токенов.
Чтобы проголосовать за добавление конкретного токена в список, держатель делает ставку, равную его доле токенов от общего числа выпущенных. Токен включается в реестр, если за это проголосовали большинство его держателей.
В нашем примере мы позволяем пользователю добавить токен в список на рассмотрение (в период «challenge») по ключу стейта key = asset_name, только если текущее значение count = 0.
Также у пользователя в кошельке должен быть ненулевой баланс этого токена. Затем наступает период голосования, во время которого пользователь может отдать голос за каждый ассет в своем кошельке, но только по одному разу, поставив оценку от 1 до 10. Голоса пользователей представлены ключами вида user_address+assetID.
В этом примере мы рассмотрим использование смарт-аккаунтов для осуществления регулярных платежей за товар или услугу через заданные промежутки времени – «абонентской платы».
Если пользователь предоставляет смарт-аккаунту (через пруфы транзакции) ID TransferTransaction с требуемым количеством переведенных средств, он может записать в стейт аккаунта
Это будет означать, что пользователь подтверждает подписку на товар или услугу. Когда срок подписки истечет, любой пользователь сети может установить напротив соответствующего ключа в стейте значение false.
Смарт-аккаунты могут быть использованы для реализации голосования на блокчейне. Примером может служить голосование за лучший отчет амбассадора в рамках амбассадорской программы. Стейт аккаунта используется в качестве платформы для записи голосов за тот или иной вариант.
В этом примере голосовать разрешено только тем, кто приобрел специальные “голосовательные” токены. Участник заранее отправляет DataTransaction с парой (key, value) = (purchaseTransactionId, buyTransactionId). Установка другого значения по этому ключу запрещена. Используя свой адрес и вариант голосования, можно установить DataEntry только раз. Голосование возможно только в установленный период.
Вексель — письменное обязательство, по которому одна сторона должна выплатить другой фиксированную сумму в момент требования или в заранее установленную дату.
В нашем примере используется смарт-аккаунт, дата экспирации которого соответствует дате выплаты по векселю.
Депозит — размещение денежных средств в банке на определенных условиях (срок, процент).
В нашем примере функцию банка выполняет смарт-аккаунт. После определенного количества блоков, что соответствует сроку депозита, пользователь может вернуть свои деньги с процентом. В скрипте задана высота блока (finalHeight), после достижения которой пользователь может снять деньги со счета.
heightUnit — количество блоков в одной единице времени (например, месяц, год и т. д.). Сначала мы проверяем наличие записи с парой (key, value) = (initialTransferTransaction, futureDataTransaction). Затем пользователь должен отправить TransferTransaction с правильной информацией о сумме депозита и процентов, начисленных за период депозита. Эта информация сверяется с исходной TransferTransaction, которая содержится в текущем пруфе TransferTransaction. depositDivisor — число, обратное доле депозита (если депозит принимается под 10%, доля депозита составляет 0,1, а depositDevisor = 1/0,1 = 10).
В третьей и заключительной статье этой серии мы рассмотрим еще варианты применения смарт-ассетов, включая заморозку и ограничение транзакций для конкретных адресов.
# Токен (ассет)
Токен или ассет — цифровой актив на блокчейне, который может использоваться:
Токен может представлять какой-либо объект или ресурс реального мира или виртуальную сущность.
Слова «токен» и «ассет» в экосистеме Waves используются как синонимы.
WAVES — основной токен на блокчейне Waves; подробнее о нем в разделе WAVES.
Все остальные токены являются пользовательскими, то есть выпущены от имени какого-либо аккаунта. Выпустить свой токен может любой аккаунт — достаточно наличия на балансе определенного количества WAVES на оплату комиссии. Новый токен сразу же доступен:
# Параметры пользовательского токена
Пример JSON-представления, возвращаемого методом GET /assets/details/
Поле | Описание |
---|---|
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 | Только для смарт-ассета: скрипт ассета и его параметры |
# Атомарная единица
Количество токена отображается по-разному в пользовательских интерфейсах и в JSON-представлении, используемом в Node REST API. В запросах и ответах API значения всех полей, содержащих количество токена, выражены в атомарных единицах и поэтому являются целым числом. Такое представление позволяет избежать проблемы точности вычислений.
Для USD-N в примере выше:
атомарная единица — 1/1 000 000 USD-N.
«quantity»: 999999999471258900 соответствует 999 999 999 471,258900 USD-N в пользовательских интерфейсах,
«minSponsoredAssetFee»: 7420 соответствует 0,007420 USD-N.
# Выпуск токена
Чтобы выпустить токен, нужно отправить транзакцию выпуска, указав в ней параметры токена:
Создать транзакцию выпуска можно:
Комиссия за транзакцию составляет 1 WAVES для обычного токена или 0,001 WAVES для невзаимозаменяемого токена (NFT).
Кроме того, токен может быть выпущен скриптом dApp в результате транзакции вызова скрипта — если результат вызываемой функции содержит действие Issue. Минимальная комиссия за транзакцию вызова скрипта увеличивается на 1 WAVES за каждый выпускаемый токен, не являющийся NFT.
# Операции с токеном
Перевод токена на другой аккаунт
В обмене могут участвовать три аккаунта: один пользователь создает ордер на покупку токена, другой — ордер на продажу. Матчер сводит ордера на покупку и продажу с подходящими параметрами и создает транзакцию обмена. Подробнее о матчере см. в документации Waves.Exchange
Уменьшение количества токена на аккаунте и тем самым на блокчейне. Сжигать токен может любой его владелец, не только эмитент. Сжигание WAVES невозможно.
Скрипт dApp может сжечь токен с помощью действия скрипта Burn в рамках транзакции вызова скрипта.
Транзакция вызова скрипта может содержать до двух платежей в пользу dApp. Вызываемая функция имеет доступ к полям платежей — сумме и токену.
# Операции, доступные только эмитенту
Следующие операции с токеном может выполнить только аккаунт, выпустивший токен:
Эмитент токена может сделать его спонсорским — разрешить любым пользователям платить комиссию за транзакции вызова скрипта и транзакции перевода в этом токене (вместо WAVES). Подробнее о спонсировании
Установка и отмена спонсирования выполняются с помощью транзакции спонсирования.
Скрипт dApp может настроить спонсирование токен с помощью действия скрипта SponsorFee в рамках транзакции вызова скрипта.
Скрипт dApp может довыпустить токен с помощью действия скрипта Reissue в рамках транзакции вызова скрипта.
Изменение скрипта ассета
Выполняется с помощью транзакции установки скрипта ассета. Если токен не является смарт-ассетом, то есть скрипт не был прикреплен при выпуске токена, то в дальнейшем прикрепить скрипт невозможно.
Изменение названия и/или описания
# Токены других блокчейнов
Токен, выпущенный на другом блокчейне, нельзя использовать на блокчейне Waves напрямую. Однако можно выпустить на блокчейне Waves новый токен, представляющий исходный, и создать шлюз, связывающий эти два токена в соотношении 1:1. Например, создать шлюз для токена ERC20
Создание ассета/NFT
Создание ассета
Создать свой собственный ассет, которым можно торговать в Waves.Exchange, очень просто.
Войдите в ваш аккаунт Waves.Exchange, перейдите во вкладку Кошелек и выберите пункт Создать ассет.
После этого заполните форму создания ассета, в которой можно задать имя ассета, его описание, выбрать общее количество токенов и количество знаков после запятой.
Рассмотрим поля формы:
Название вашего ассета: названия ассетов не уникальны, но идентификатор
(ID ассета) уникален. При поиске ассета можно убедиться в том, что вы нашли правильный ассет, просто проверив ID ассета. Если система защиты от спама обнаружит повторяющиеся имена, она автоматически пометит такие ассет как Подозрительный. Поэтому прежде чем продолжить, внимательно прочитайте условия внизу экрана Выпуск ассета.
Примечание: название ассета не может быть короче 4 символов.
Описание: описание вашего ассета. После сохранения это поле нельзя будет изменить.
Всего ассетов: общее количество выпускаемых ассетов.
Перевыпускаемый: перевыпускаемый тип позволяет при необходимости увеличить количество токенов. Этот тип можно будет в любой момент изменить на не перевыпускаемый.
Подробнее в статье Поменять перевыпускаемый на не перевыпускаемый.
Не перевыпускаемый: количество токенов не перевыпускаемого типа не может быть изменено в будущем.
Десятичные знаки: количество знаков в дробной части токена. Например, если вы укажете 8 десятичных знаков, как в биткойнах, токен можно будет разделить на 0,00000001. Если вы укажете 0, токен может быть обработан только целым значением.
Примечание: убедитесь, что у вас есть как минимум 1 Waves на балансе для оплаты комиссии за создание ассета.
Поле Предпросмотр отображает информацию об ассете на основе указанных данных.
Перед созданием ассета внимательно прочитайте условия создания ассета:
I) Вы не будете использовать его в целях совершения мошеннических действий;
II) Вы не дублируете в названии ассета полностью или в части название уже существующих криптовалют или имена известных компаний с целью ввести пользователей в заблуждение.
III) Вы не используете в названии ассета наименования государств, штатов, иных административных единиц, а также наименования государственных или муниципальных учреждений c целью ввести пользователей в заблуждение.
IV) Вы не устанавливаете на смарт-ассет скрипт, который ограничивает совершение транзакции обмена ассета на Waves.Exchange по количеству.
V) Вы не указываете в описании смарт-ассета ложную информации о правилах оборота смарт-ассета, не соответствующую работе установленного на него скрипта.
Если название ассета нарушает эти условия, измените название ассета в соответствии с условиями, затем выберите чекбокс и нажмите Выпустить.
В следующем окне проверьте введенные данные и нажмите Отправить, чтобы продолжить, или нажмите Назад, чтобы внести исправления.
Вы можете искать и сортировать свои ассеты в разделе Кошелёк > Портфель.
Создание NFT
Для создания NFT необходимо в форме создания ассета:
— в поле Всего ассетов указать 1;
— в поле Десятичные знаки указать 0;
— в поле Перевыпускаемый установить значение Не перевыпускаемый.
Комиссия за создание NFT составляет 0.001 Waves.
Примечение: NFT не отображаются в интерфейсе Waves.Exchange. Также NFT нельзя переводить, используя интерфейс Waves.Exchange.
Если у вас есть вопросы касательно биржи Waves.Exchange, вы можете связаться с нашей службой поддержки в любое время.
tags: создание выпуск ассета выпустить токен
Подозрительные ассеты и транзакции
Любой пользователь сети Waves может создавать свои собственные токены и распределять их среди других участников. Кто-то делает это, чтобы привлечь внимание к токену, кто-то делает это, чтобы привлечь внимание к LPOS пулу.
Чаще всего в этом нет ничего плохого, но в то же время некоторые токены могут содержать фишинг-ссылки или нарушать публичные правила создания новых токенов. По этим причинам мы решили создать отдельный раздел для подозрительных токенов и пометить их как Подозрительные. Кроме того, эти токены можно найти только с помощью идентификатора (asset ID) на бирже Waves.Exchange.
Фильтрация доступна во всех приложениях Waves.Exchange, будь-то веб, десктопное приложение или мобильное приложение для iOS и Android платформ.
Вкладка с подозрительными токенами скрыта, а также во вкладке Транзакции не отображаются транзакции с подозрительными токенами. Чтобы получить доступ к подозрительным токенам необходимо внести изменения в настройки Waves.Exchange.
Перед отправкой и получением ассета, а также торговыми операциями с ним изучите информацию об ассете (описание ассета, динамику его цены и так далее) чтобы принимать обоснованные решения. Ассеты нестабильны и их цены могут повышаться или понижаться очень быстро. Тщательно оцените свои торговые цели и финансовый риск. Waves.Exchange не предоставляет финансовые, налоговые или юридические консультации. Вы должны принимать решения об использовании того или иного ассета самостоятельно или проконсультироваться с экспертами.
Если у вас есть вопросы касательно биржи Waves.Exchange, вы можете связаться с нашей службой поддержки в любое время.
tags: токен скрыт подозрительный фильтр пропал увидеть отобразить