Token upkeep (persistence)
You are looking at an old version of this page: revision #153 by zoobc.how, 2026-10-26 21:37 UTC. See the current version
Nothing on ZooBC is stored for free for ever, and a user token is no exception. A new token lives free for a first period; after that it lives only as long as someone pays for its upkeep. When it expires, it disappears from the chain and its ZBC backing goes back to its holders.
The persist height
A token lives until its persist height:
persist height = issue height + free period + blocks bought by survival payments
The free period, token_free_persist_blocks, is one rent period: 172,800 blocks, which is 30 days.
Survival payments
A survival payment buys more blocks:
blocks bought = payment × billing period ÷ token_persist_period_cost
The period cost, token_persist_period_cost, starts at 0.1 ZBC (10,000,000 atomic units) for a billing period of 172,800 blocks. So 0.1 ZBC buys another 30 days, and 0.3 ZBC buys 90.
Anyone can keep any live token alive, not only its issuer:
- FinanceToken (type 14) exists for this alone, and it must carry a positive payment;
- TransferToken, MintToken and BurnToken can carry a survival payment too.
A survival payment is its own debit, never part of the fee. It goes to the longevity pool, which pays the nodes a slice in every block (see pools).
The period cost is one of the prices the registered nodes vote on (see price votes). It has a ceiling of 10 ZBC per period and can be voted down to a single atomic unit, and its period follows the snapshot cycle. GET /api/v1/blockchain/fee-params reports both token_free_persist_blocks and token_persist_period_cost.
On devnet, where the timings are short, the free period is 240 blocks (one hour) and 1 ZBC buys 240 blocks, which makes expiry quick to try out.
When a token expires
Once its persist height has passed, a token is expired:
- it is invisible to every reader, and API views stop listing it;
- every operation on it is refused, and is a paid no-op if a block includes it anyway;
- it cannot be revived: a FinanceToken can extend only a live token.
In the next block, the token's ZBC backing, if it has any, is paid to its holders in proportion to their units. Units count wherever they sit: in balances, in open market orders, in open swap offers, in pending token escrows (credited to the escrow's sender), in vesting schedules (credited to the schedule's owner), in streams (split by how much has vested) and in app stakes. If no holder is left, the issuer receives the backing.
Genesis coins were created without an expiry date, so no upkeep is due for them.
Who pays
Since anyone can pay, a token does not depend on its issuer to stay alive: a holder, or an app that relies on the token, can send a FinanceToken. A token that nobody pays for ends cleanly, with its backing returned to the people who held it.