Выпуск токена
Любой аккаунт может создать в ZooBC собственный токен одной транзакцией IssueToken. Не нужно писать контракт и ни у кого не нужно спрашивать: фиксированные правила цепочки решают, действительна ли транзакция, и как только блок её включает, токен существует, а эмитент владеет всем его предложением. Затем единицы токена перемещаются транзакцией TransferToken и могут находиться в эскроу, потоках, расписаниях и предложениях обмена, а при 8 знаках после запятой — и в ордерах на рынке.
Транзакция IssueToken
IssueToken (тип 10) указывает:
| Поле | Правило |
|---|---|
| знаки после запятой | от 0 до 8 (см. Знаки после запятой и шаг) |
| флаги | погашаемость и режим довыпуска (ниже) |
| общее предложение | больше 0 и кратно шагу токена |
| обеспечение в ZBC | 0 или больше |
| символ | от 2 до 10 символов (ниже) |
| название | от 1 до 64 байт (ниже) |
| платёж за продление | необязательно (см. Содержание токена (продление)) |
Флаги — это биты. Бит 0 делает токен погашаемым. Биты 1 и 2 задают режим довыпуска: 0 — фиксированное предложение, 1 — токен с возможностью довыпуска; значения 2 и 3 отклоняются. Бит 3, «без обеспечения», сохраняется и сообщается, но ни одно правило его не читает. Что позволяют эти два переключателя, объясняет статья довыпуск и сжигание токенов.
Токен, выпущенный участником группы аккаунтов, принадлежит группе.
Обеспечение
Обеспечение — это настоящие ZBC, которые эмитент вкладывает в токен. Они уходят с баланса эмитента и хранятся самим токеном, ни на чьём аккаунте; узел отклоняет обеспечение, которого у эмитента нет. ZBC возвращаются наружу только тремя путями:
- держателям, которые сжигают единицы погашаемого токена;
- как ZBC, освобождаемые, когда комиссия оплачивается в токене (ниже);
- держателям, когда срок токена истекает (см. Содержание токена (продление)).
Идентификатор токена
Идентификатор пользовательского токена — первые 8 байт хеша его транзакции IssueToken, прочитанные как знаковое 64-битное целое в порядке little-endian (или 1, если это число равно 0). Поэтому это собственный идентификатор транзакции выпуска (см. Подписание транзакции). Идентификатор известен, как только транзакция подписана, и узлам никогда не нужно договариваться о счётчике. API выводит идентификаторы как знаковые десятичные строки, поэтому идентификатор может быть отрицательным.
Символы не уникальны: у двух действующих токенов может быть один и тот же символ, и любой может скопировать символ, который не зарезервирован и не заблокирован. Кошельки и приложения должны показывать и проверять идентификатор, а не только символ (см. Данные цепочки — недоверенный ввод).
Правила для символа и названия
Символ состоит из 2–10 знаков, каждый из которых — заглавная латинская буква от A до Z или цифра от 0 до 9. Это исключает строчные буквы и похожие буквы из других алфавитов. Ещё два правила защищают известные имена:
- Зарезервированные: символы из 4 или 5 знаков, которые начинаются или заканчиваются на Z, например ZBTC или BTCZ, принадлежат пространству имён моста. Символ из 6 знаков, например ZABCDE, разрешён.
- Заблокированные: встроенный список из 78 известных тикеров, под которые никто не может маскироваться: 17 валют (например, USD, EUR, CNY и JPY), 18 стейблкоинов (например, USDT, USDC и DAI) и 43 крупные монеты (например, BTC, ETH, BNB, SOL, XRP, ADA и DOGE).
Название — от 1 до 64 байт корректного UTF-8. Оно не может содержать символы <, >, " и ' или обратный апостроф; не может содержать управляющие символы, символы нулевой ширины или меняющие направление текста, а также любые пробелы, кроме обычного; и не может начинаться или заканчиваться пробелом.
Перемещение единиц: TransferToken
TransferToken (тип 11) несёт идентификатор токена, сумму, кратную шагу, получателя, необязательный флаг оплаты комиссии в токене и необязательный платёж за продление. Идентификатор токена 0 отклоняется: ZBC — не токен, и он перемещается транзакцией SendZBC. Перевод большего числа единиц, чем есть у отправителя, — оплаченная пустая операция: она платит комиссию и ничего не перемещает.
Переводы токенов можно также проводить через эскроу (см. Эскроу; комиссия тогда оплачивается в ZBC), потоком (см. Ликвидные платежи (потоки)) или по расписанию (см. Запланированные переводы). Начиная с версии 0.5.8 одна транзакция может нести пакетом до 32 переводов любых токенов: по принципу «всё или ничего», за сумму комиссий отдельных переводов, оплачиваемую в ZBC, причём сообщение оплачивается один раз (см. Одна транзакция на аккаунт в блоке и пакеты).
Оплата комиссии в токене
Токен с обеспечением в ZBC может сам платить за свои переводы (байт флага 1). Токен освобождает ZBC из своего обеспечения, чтобы покрыть минимальную комиссию, и отдаёт соответствующие единицы:
units given up = ceil( released ZBC × supply ÷ backing ), rounded up to the step
Уменьшаются и предложение, и обеспечение. Если объявленная комиссия выше минимальной, переплата остаётся в токене.