Инструкция по выпуску токенов на блокчейне Stellar
Видео инструкция от Соза Нова: MTL-TV: Как создать Токен
Зачем выпускать токены можно подглядеть в статье Токенизация, а в этой статье будет описана процедура выпуска новых токенов на блокчейне Stellar.
Подготовка
Для того, тобы токены появились в Стелларе, нужно два счета, один из которых откроет линию доверия к пока несуществующему токену, а второй совершит платёж первому. В этот момент в блокчейне появляется новая сущность.
Особое внимание стоит обратить на тот счет, с которого будет делаться эмиссия. Поменять потом ничего не получится. Понятно, что на нём должно быть немного XLM, но возможно перед эмиссией может понадобится чуток заморочиться над следующим.
Адрес Эмитента
Для эмиссии каждого токена, рекомендуется выделять отдельный аккаунт. Можно выпускать несколько родственных токенов с одного счета. Причиной тому две вещи. Во-первых, счет эмитента не может хранить свои же токены на счету. У него их как буд-то бесконечное количество, при платеже вовне — эмитируются новые токены, при входящем платеже — токены сгорают. Во-вторых, флаги эмитента устанавливаются на весь аккаунт, а не на каждый токен в отдельности.
В сети Стеллара адреса представляют из себя длинную абракадабру (бинарное число в кодировке Base32). Приложив некоторые усилия, можно сгенерировать адрес, у которого можно подобрать какую-нибудь лёгкую и говорящую концовку. Например адрес Первого Клуба Монтелиберо — GAPQ3YSV4IXUC2MWSVVUHGETWE6C2OYVFTHM3QFBC64MQWUUIM5PCLUB. Делается это инструментами, которые по принципу своей работы все сходны: они с большой скоростью создают пары ключей (секретный ключ и итоговый публичный адрес), проверяют подходит ли результат под запрос, и когда находят такой вариант, останавливаются, например stellar-vanity-address-generator.
Не все символы доступны в адресе из-за выбранной кодировки. Цифры 0, 1, 8, 9 не могут быть в адресе стеллар аккаунта.
Активация аккаунта
В сети Стеллара у каждого аккаунта есть один параметр, который отображается в его базовых свойствах и который потом никак не заменить — это ссылка и время на другой аккаунт, который его когда-то активировал (переведя первую порцию токенов XLM). Возможно стоит подумать над тем, кто активирует аккаунт эмитента. Это может быть какой-либо "авторитетный" адрес достойного проекта, вроде Фонда Монтелиберо, может быть наоборот, подчеркнуто почти анонимная активация переводом с биржи. Всегда остаётся вариант активировать счет просто с личного аккаунта основателя.
Для активации аккаунта необходимо отправить на него не меньше 1 XLM.
Флаги Эмитента
Стеллар позволяет настраивать довольно ощутимые параметры, определяющие свободу перемещений токенов между участниками сети, возможностью их блокировать и отзывать назад.
Важной особенностью является то, что флаги устанавливаются на уровне всего аккаунта, а не на конкретный токен. Т.е. нельзя с одного счета выпустить два вида токенов и только для одного из них активировать возможность блокировки и отзыва.
Authorization Required
С этим флагом эмитент должен дополнительно разрешать открытые линии доверия. Без этого разрешения никто не сможет принять на счет токены. Те, кто такое разрешение получили — уже, как обычно, могут пересылать токены друг другу. Этот флаг не влияет на линии доверия, открытые до его установки.
Authorization Revocable
Позволяет эмитенту принудительно отзывать линии доверия, либо полностью замораживая токены на счету владельца, либо вводя разные ограничения.
Clawback Enabled
После установки этого флага, эмитент сможет забирать средства со счетов пользователей, которые открыли линии доверия после установки этого флага.
Authorization Immutable
Если установить этот флаг, то после этого блокируется изменение всех флагов, включая этот. Таким образом эмитент может убедительно продемонстрировать, что не будет включать флаги, позволяющие отзывать токены или блокировать линии доверия.
Название токена
От 1 до 12 символов из английского алфавита и цифр. Допустимы прописные и заглавные буквы. Чаще всего выбирают либо написание, сходное с биржевыми тикерами, вроде MTL, либо что-то вроде DamirCoin. Токены уникальны на уровне эмитента, в остальной сети они полностью идентифицируются строкой вида ИмяТокена-АдресЭмитента, например MTLand-GACKTN5DAZGWXRWB2WLM6OPBDHAMT6SJNGLJZPQMEZBUR4JUGBX2UK7V.
Естественно, сменить название токена после будет никак нельзя, кроме как выпускать новый и призывать людей к обмену.
Тестирование
В сети Stellar есть тестовая сеть, где можно поиграться со всеми этапами будущей эмиссии. Стоит воспользоваться этой возможностью, особенно если есть желание использовать флаги эмитента.
В лаборатории Стеллара наверху страниц есть переключатель сети. Включите «test», и тогда на вкладке «Create Account» можно будет не только сгенерировать несколько пар адресов и ключей (раздел «Keypair generator»), но также активировать их, пополнив 10,000 XLM (раздел «Friendbot: Fund a test network account»).
Сохраните адреса и ключи тестовых акаунтов, и дальше с ними можно выполнять всевозможные действия, а после про них просто забыть, так как тестовая сеть ни на что не влияет.
Эмиссия
Здесь и далее будет описываться работа с Лабораторией Стеллар. Зайдите в неё, убедитесь, что в заголовке страницы выбрана подходящая сеть. Для тестирования — «test», для итога — «public».
Открытие линии доверия
Во вкладке создания новой транзакции «Build Transaction», в поле «Source Account» впишите адрес первого получателя новых токенов. Чуть ниже активируется большая кнопка «Fetch next sequence number...», нажмите её, чтобы заполнить поле с номером транзакции — «Transaction Sequence Number».
«Base Fee» — комиссия за каждую операцию в транзакции. А точнее, её максимальное значение. По-умолчанию там обычно 100, можно смело добавить пару нулей, всё равно в итоге речь будет идти о малой доли от одного XLM.
«Memo» — необязательное поле примечания для транзакции. Можно оставить пустым, а можно выбрать тип «Text» и написать до 28 символов в английском алфавите, или 14 кириллицей, например.
Поле «Time Bounds» можно проигнорировать. Переходим к наполнению операции.
Тип операции «Operation Type» — «Change Trust» (открытие линии доверия).
«Asset» — данные создаваемого токена. Сперва нужно указать какого типа длинны будет название у токена. Либо до 4-х символов («Alphanumeric 4»), либо от 5 до 12 («Alphanumeric 12»).
Ниже появится два поле. Одно, собственно, для кода токена (он же его название по-умолчанию), а во втором поле — адрес эмитента.
Поля «Trust Limit» и «Source Account» в общем случае игнорируются.
Если на этом этапе нет никаких технических ошибок, то ниже появится зелёный заголовок «Success! Transaction Envelope XDR:» Там, в блоке текста, самое полезное та абракадабра, что идёт после подзаголовка «XDR».
Можно её не копировать, а просто нажать на кнопку ниже «Sign in Transaction Signer» и перейти в раздел подписывания, где уже будет вписана изготовленная выше транзакция.
В разделе подписания, прокрутите страницу до поля добавления подписи — «Add Signer». В это текстовое поле нужно вставить секретный ключ от аккаунта, для которого создаётся транзакция. В данном случае это тот самый первый получатель токенов.
Если вставлен корректный ключ, то ниже появится новый блок с подписанной транзакцией, и заголовком зелёного цвета «Transaction signed!». Тогда ещё ниже появится кнопка перехода к отправке подписанной транзакции в блокчеин — «Submit in Transaction Submitter». Нажмите её.
После загрузки раздела, будет видно большое текстовое поле с вашей транзакцией, ниже будет кнопка отправки в сеть «Submit Transaction», а ещё ниже будет отображена структура и данные отправляемой транзакции.
После нажатия кнопки «Submit Transaction» через несколько секунд будет надпись зелёным цветом, что всё удалось. Иногда приходится ждать до минуты. Иногда бывают ошибки вроде таймаута, тогда нужно перейти на соседнюю вкладку, сразу вернуться в эту «Submit Transaction» и опять нажать кнопку отправки. В совсем запущенном случае, когда сеть крайне загружена, может понадобится несколько десятков попыток. Но это редкое явление.
Если отображаются другие ошибки, нужно гуглить их коды, спрашивать опытных людей.
Если всё прошло хорошо, то мы успешно открыли линию доверия к новому токену.
Отправка токенов
В целом процедура более чем похожа на предыдущую. Только в заголовке транзакции вставляется в поле «Source Account» вставляется адрес эмитента, не забудьте нажать «Fetch next sequence number...», чтобы получить новый номер транзакции.
«Memo» по вкусу, подписывание и отправка аналогичны (только секретный ключ понадобится от аккаунта-эмитента, конечно). Основное отличие в операции. Ещё «Operation Type» будет «Payment», «Destination» будет содержать адрес получателя (тот, кто отрывал линию доверия), «Asset» заполняется аналогично процедуре открытия линии доверия — код и адрес эмитента. Ну а в «Amount» нужно вписать объём эмитируемых и передаваемых токенов. От 0.0000001 (самый минимум) до какого-то очень большого числа (≈922,337,203,685).
Когда транзакция будет готова, подпишите и отправьте её в сеть. После этого новый токен появился, и уже есть его первый держатель.
Декор
В сети стеллар можно указать, какое отображаемое название будет у ваших токенов, иконку, сколько отображать чисел после запятой по-умолчанию, где прочитать оферту и ещё куча подобных параметров. Делается это в файле stellar.toml, который размещается в папке .well-known, а та уже в корне вашего вэб-сервера. Для этого нужен домен, свой, и хостинг, где содержимое сайта будет размещаться.
Сам домен прописывается на уровне свойств аккаунта-эмитента, для этого делается операция «Set Options» с установкой «Home Domain» равной имени домена вашего сайта (например «eurmtl.me»).
Подробнее в документации. Также вам может быть полезен какой-нибудь валидатор этого файла, например https://stellar.sui.li/
Что после
Часто новые токены отправляют прямиком на биржу, на обмен на другие ценности. В самом общем случае, их продают за EURMTL.
(статья в процессе написания)
Ссылки
- Документация Stellar по выпускую новых токенов: https://developers.stellar.org/docs/category/issue-assets