Wiki ZooBC
Jetons et marchés

Le pont et les monnaies enveloppées

Le pont relie ZooBC à Bitcoin et à Ethereum. Les pièces déposées à une adresse de garde sur ces chaînes apparaissent sur ZooBC sous forme de monnaies enveloppées, un pour un, et peuvent repartir par le même chemin. Aucune partie ne le gère seule : les nœuds enregistrés votent, et la chaîne ne frappe ou ne brûle que lorsque deux tiers des sièges non suspendus sont d’accord.

Le pont fait partie de ZooBC à partir de la version 0.5.8 : les gardiens attestent les dépôts et les retraits, et la chaîne frappe et brûle les monnaies enveloppées selon leurs votes. Les chaînes sont relancées en version 0.5.8 sans démarrer le service de pont.

Les pièces de pont

Quatre des quatorze pièces de genèse sont des pièces de pont :

PièceReprésente
ZBTCle bitcoin
ZETHl’ether
ZUSDCl’USDC, un jeton ERC-20 sur Ethereum
ZUSDTl’USDT, un jeton ERC-20 sur Ethereum

Chacune a une adresse de garde sur sa chaîne d’origine, fixée dans la genèse et prise en compte dans le hachage de genèse. GET /api/v1/bridge/coins liste les quatre. Les dix autres pièces de genèse n’ont pas d’adresse de garde. Les symboles de 4 ou 5 caractères qui commencent ou finissent par Z sont réservés à cet espace de noms, si bien qu’aucun jeton utilisateur ne peut prendre le nom d’une pièce de pont (voir l’émission d’un jeton).

Gardiens et votes

Un nœud ZooBC ne surveille aucune chaîne étrangère. Un programme gardien (keeper) distinct, zbc-bridge, tourne à côté d’un nœud doté d’une configuration de pont. Il surveille les adresses de garde et vote sur ZooBC par des transactions AttestEvent (voir les déclencheurs et les attestations) : l’id d’événement d’un vote de dépôt commence par ZBRDEP1:, et celui d’un vote de retrait par ZBWDR1:. Chaque vote est un devoir sans frais, envoyé avec des frais d’exactement 0 depuis la propre clé du nœud.

Dépôt : les pièces entrent

Le pont : de l’ether arrive à l’adresse de garde ; les gardiens attestent chacun « 1 ZETH à Y » ; le décompte dépasse les deux tiers et du ZETH est frappé pour Y ; en dessous, le chemin du retour par la garde, un brûlage et les signatures des gardiens
Le pont : de l’ether arrive à l’adresse de garde ; les gardiens attestent chacun « 1 ZETH à Y » ; le décompte dépasse les deux tiers et du ZETH est frappé pour Y ; en dessous, le chemin du retour par la garde, un brûlage et les signatures des gardiens
  1. L’utilisateur envoie des pièces à l’adresse de garde sur Bitcoin ou sur Ethereum.
  2. Chaque gardien qui voit le dépôt confirmé envoie une attestation qui nomme le dépôt et une valeur : le jeton, le montant et le destinataire ZooBC.
  3. À la fin de chaque bloc, la chaîne compte les votes. Lorsque deux tiers des sièges comptés, les nœuds enregistrés qui ne sont pas suspendus (8 sur 11, par exemple), ont attesté exactement la même valeur, chaque nœud frappe ce montant pour le destinataire, un pour un et sans frais de pont, et l’événement est clos définitivement.

Les sièges suspendus ne votent pas et ne comptent pas. Deux garde-fous s’y ajoutent :

  • Un plafond quotidien. Si un dépôt devait porter les frappes d’une pièce sur une journée (les 5 760 derniers blocs) au-dessus de la plus grande de ces deux valeurs, une pièce entière ou 10 % de son offre, il faudrait l’accord de chaque siège non suspendu, et jamais moins des deux tiers de tous les sièges.
  • Le plancher du registre. Aucune décision du pont n’est prise tant que le registre compte moins que son plancher de max(3, min_registry_size) sièges et propriétaires distincts (voir les règles des deux tiers).

Retrait : les pièces sortent

Un retrait : un transfert vers la garde avec le message ZBW1, la finalité de son bloc, les votes des gardiens avec leurs signatures pour la chaîne étrangère, le décompte aux deux tiers, le brûlage depuis la garde, et les signatures qui libèrent l’ether vers la destination
Un retrait : un transfert vers la garde avec le message ZBW1, la finalité de son bloc, les votes des gardiens avec leurs signatures pour la chaîne étrangère, le décompte aux deux tiers, le brûlage depuis la garde, et les signatures qui libèrent l’ether vers la destination
  1. L’utilisateur envoie la monnaie enveloppée au compte de garde par un TransferToken ordinaire, avec le message ZBW1| suivi de l’adresse de destination. Ce transfert constitue la demande : aucun BurnToken n’intervient, et l’utilisateur n’envoie rien sur la chaîne étrangère.
  2. Les gardiens n’agissent qu’une fois la demande finalisée, ce qui prend entre 3 heures environ et 27 heures environ après son bloc (voir la finalité et le retour arrière) ; un gardien parcourt la chaîne à partir du dernier bloc finalisé qu’il a traité. Le vote de chaque gardien nomme la demande, le jeton, le montant et la destination, et porte la signature de ce gardien pour la chaîne étrangère.
  3. Lorsque deux tiers sont d’accord, chaque nœud vérifie à nouveau la demande et brûle ces unités depuis le compte de garde.
  4. Les signatures recueillies des gardiens, lisibles par l’API, autorisent la libération des pièces vers la destination.

Un événement qui ne reçoit aucune nouvelle attestation pendant 720 blocs (3 heures) cesse d’être pris en compte.

Les monnaies enveloppées sur ZooBC

Une fois frappée, une monnaie enveloppée est un jeton de genèse ordinaire à 8 décimales : elle peut être envoyée, placée sous séquestre, versée en flux, proposée dans une offre d’échange ou négociée sur un marché. Son offre ne change que par le pont, et MintToken et BurnToken sont refusés sur elle. Les frappes du pont ne sont pas réparties par la politique de répartition du destinataire (voir les politiques de répartition et de transaction). Les brûlages de monnaies enveloppées sont comptés dans le compteur de brûlages de la chaîne, qui reste à zéro pour le ZBC lui-même.

Voir aussi