Содержание токена (продление)
Ничто в ZooBC не хранится бесплатно вечно, и пользовательский токен — не исключение. Новый токен живёт бесплатно в течение первого периода; после этого он живёт лишь до тех пор, пока кто-то платит за его содержание. Когда срок токена истекает, он исчезает из цепочки, а его обеспечение в ZBC возвращается держателям.
Высота сохранения
Токен живёт до своей высоты сохранения:
persist height = issue height + free period + blocks bought by survival payments
Бесплатный период, token_free_persist_blocks, — это один период аренды: 172 800 блоков, то есть 30 дней.
Платежи за продление
Платёж за продление покупает дополнительные блоки:
blocks bought = payment × billing period ÷ token_persist_period_cost
Стоимость периода, token_persist_period_cost, начинается с 0,1 ZBC (10 000 000 атомарных единиц) за расчётный период в 172 800 блоков. Так что 0,1 ZBC покупают ещё 30 дней, а 0,3 ZBC — 90.
Поддерживать жизнь любого действующего токена может кто угодно, а не только его эмитент:
- FinanceToken (тип 14) существует только для этого и должна нести положительный платёж;
- TransferToken, MintToken и BurnToken тоже могут нести платёж за продление.
Платёж за продление — отдельное списание, никогда не входящее в комиссию. Он уходит в пул долголетия, который в каждом блоке выплачивает узлам долю (см. Пулы).
Стоимость периода — одна из цен, по которым голосуют зарегистрированные узлы (см. Голосования по ценам). Её потолок — 10 ZBC за период, голосованием её можно снизить до одной атомарной единицы, а её период следует периоду снимков. GET /api/v1/blockchain/fee-params сообщает и token_free_persist_blocks, и token_persist_period_cost.
В devnet, где сроки короткие, бесплатный период — 240 блоков (один час), а 1 ZBC покупает 240 блоков, поэтому истечение срока там легко опробовать.
Когда срок токена истекает
Как только высота сохранения пройдена, срок токена истёк:
- он невидим для любого читателя, и представления API перестают его показывать;
- любая операция с ним отклоняется, а если блок всё же её включит, она станет оплаченной пустой операцией;
- его нельзя оживить: FinanceToken может продлить только действующий токен.
В следующем блоке обеспечение токена в ZBC, если оно есть, выплачивается держателям пропорционально их единицам. Единицы учитываются, где бы они ни находились: на балансах, в открытых ордерах на рынке и в открытых предложениях обмена (засчитываются их мейкеру), в ожидающих эскроу с токеном (засчитываются отправителю эскроу), в расписаниях с вестингом (засчитываются владельцу расписания), в потоках (получателю засчитывается то, что уже начислено, отправителю — остальное) и в ставках игроков, занявших места в приложениях. Эмитенту платят только за единицы, которые он держит сам, а обеспечение возвращается к нему, только когда ни один аккаунт не держит ни одной единицы.
Генезис-монеты созданы без срока истечения, поэтому платить за их содержание не нужно. FinanceToken для токена, срок которого никогда не истекает, отклоняется, поскольку финансировать нечего; если блок всё же его включит, транзакция заплатит комиссию и ничего не изменит.
Кто платит
Поскольку платить может кто угодно, жизнь токена не зависит от его эмитента: держатель или приложение, которое опирается на токен, может отправить FinanceToken. Токен, за который никто не платит, завершается чисто, а его обеспечение возвращается тем, кто им владел.