Wiki ZooBC
Jetons et marchés

Entretien du jeton (persistance)

Rien sur ZooBC n’est stocké gratuitement pour toujours, et un jeton utilisateur ne fait pas exception. Un nouveau jeton vit gratuitement pendant une première période ; ensuite, il ne vit qu’aussi longtemps que quelqu’un paie son entretien. Lorsqu’il expire, il disparaît de la chaîne et sa réserve en ZBC revient à ses détenteurs.

La hauteur d’expiration

Un jeton vit jusqu’à sa hauteur d’expiration (persist height) :

persist height = issue height + free period + blocks bought by survival payments

La période gratuite, token_free_persist_blocks, correspond à une période de loyer : 172 800 blocs, soit 30 jours.

La vie d’un jeton : son émission, une période gratuite de 30 jours, des prolongations de 30 jours achetées par des paiements de survie de 0,1 ZBC, puis la hauteur d’expiration, à laquelle il expire et après laquelle sa réserve est répartie entre les détenteurs
La vie d’un jeton : son émission, une période gratuite de 30 jours, des prolongations de 30 jours achetées par des paiements de survie de 0,1 ZBC, puis la hauteur d’expiration, à laquelle il expire et après laquelle sa réserve est répartie entre les détenteurs

Les paiements de survie

Un paiement de survie achète des blocs supplémentaires :

blocks bought = payment × billing period ÷ token_persist_period_cost

Le coût par période, token_persist_period_cost, commence à 0,1 ZBC (10 000 000 unités atomiques) pour une période de facturation de 172 800 blocs. Ainsi, 0,1 ZBC achète 30 jours de plus, et 0,3 ZBC en achète 90.

N’importe qui peut maintenir en vie n’importe quel jeton vivant, pas seulement son émetteur :

  • FinanceToken (type 14) n’existe que pour cela, et doit porter un paiement positif ;
  • TransferToken, MintToken et BurnToken peuvent aussi porter un paiement de survie.

Un paiement de survie est un débit à part entière, jamais une partie des frais. Il va au fonds de longévité, qui verse une tranche aux nœuds à chaque bloc (voir les fonds).

Le coût par période fait partie des prix sur lesquels votent les nœuds enregistrés (voir les votes de prix). Il est plafonné à 10 ZBC par période et peut être abaissé par vote jusqu’à une seule unité atomique ; sa période suit le cycle d’instantané. GET /api/v1/blockchain/fee-params indique à la fois token_free_persist_blocks et token_persist_period_cost.

Sur le devnet, où les délais sont courts, la période gratuite est de 240 blocs (une heure) et 1 ZBC achète 240 blocs, ce qui permet d’essayer rapidement l’expiration.

Quand un jeton expire

Une fois sa hauteur d’expiration dépassée, un jeton est expiré :

  • il est invisible pour tout lecteur, et les vues de l’API cessent de le lister ;
  • toute opération sur lui est refusée, et devient une opération nulle payante si un bloc l’inclut tout de même ;
  • il ne peut pas être ranimé : un FinanceToken ne peut prolonger qu’un jeton vivant.

Dans le bloc suivant, la réserve en ZBC du jeton, s’il en a une, est versée à ses détenteurs au prorata de leurs unités. Les unités comptent où qu’elles se trouvent : dans les soldes, dans les ordres ouverts sur un marché et dans les offres d’échange ouvertes (au profit de leur auteur), dans les séquestres de jetons en attente (au profit de l’expéditeur du séquestre), dans les transferts programmés en mode acquisition (au profit du propriétaire du programme), dans les flux de paiement (le destinataire est crédité de la part déjà libérée, l’expéditeur du reste) et dans les mises des joueurs assis à une appli. L’émetteur n’est payé que pour les unités qu’il détient lui-même, et ne récupère la réserve que lorsque plus aucun compte ne détient une seule unité.

Les pièces de genèse ont été créées sans date d’expiration : aucun entretien n’est donc dû pour elles. Un FinanceToken sur un jeton qui n’expire jamais est refusé, puisqu’il n’a rien à financer ; si un bloc l’inclut tout de même, il paie ses frais et ne change rien.

Qui paie

Comme n’importe qui peut payer, un jeton ne dépend pas de son émetteur pour rester en vie : un détenteur, ou une appli qui s’appuie sur le jeton, peut envoyer un FinanceToken. Un jeton pour lequel personne ne paie prend fin proprement, et sa réserve revient aux personnes qui le détenaient.

Voir aussi