Il bridge e le monete wrapped
Il bridge collega ZooBC con Bitcoin ed Ethereum. Le monete depositate a un indirizzo di custodia su quelle catene compaiono su ZooBC come monete wrapped, una per una, e possono essere rimandate indietro allo stesso modo. Nessuna singola parte lo gestisce: i nodi registrati votano, e la catena conia o brucia solo quando sono d'accordo due terzi dei seggi non sospesi.
Il bridge fa parte di ZooBC dalla versione 0.5.8: i keeper attestano depositi e prelievi, e la catena conia e brucia le monete wrapped in base ai loro voti. Le catene vengono rilanciate sulla versione 0.5.8 senza avviare il servizio del bridge.
Le monete del bridge
Quattro delle quattordici monete genesi sono monete del bridge:
| Moneta | Rappresenta |
|---|---|
| ZBTC | bitcoin |
| ZETH | ether |
| ZUSDC | USDC, un token ERC-20 su Ethereum |
| ZUSDT | USDT, un token ERC-20 su Ethereum |
Ognuna ha un indirizzo di custodia sulla sua catena d'origine, fissato nella genesi e incluso nell'hash genesi. GET /api/v1/bridge/coins elenca le quattro monete. Le altre dieci monete genesi non hanno un indirizzo di custodia. I simboli di 4 o 5 caratteri che iniziano o finiscono con Z sono riservati a questo spazio dei nomi, quindi nessun token degli utenti può prendere il nome di una moneta del bridge (vedi emettere un token).
Keeper e voti
Un nodo ZooBC non osserva alcuna catena esterna. Un programma keeper separato, zbc-bridge, gira accanto a un nodo che ha una configurazione per il bridge. Sorveglia gli indirizzi di custodia e vota su ZooBC con transazioni AttestEvent (vedi trigger e attestazioni): l'id di evento di un voto di deposito inizia con ZBRDEP1: e quello di un voto di prelievo con ZBWDR1:. Ogni voto è un compito esente da commissioni, inviato con una commissione esattamente pari a 0 dalla chiave del nodo stesso.
Deposito: le monete entrano
- L'utente invia monete all'indirizzo di custodia su Bitcoin o su Ethereum.
- Ogni keeper che vede il deposito confermato invia un'attestazione che indica il deposito e un valore: il token, l'importo e il destinatario su ZooBC.
- Alla fine di ogni blocco la catena conta i voti. Quando due terzi dei seggi conteggiati, i nodi registrati non sospesi (8 su 11, per esempio), hanno attestato esattamente lo stesso valore, ogni nodo conia quell'importo al destinatario, uno per uno e senza commissione del bridge, e l'evento viene chiuso in modo definitivo.
I seggi sospesi non votano e non contano. A questo si aggiungono due salvaguardie:
- Un tetto giornaliero. Se un deposito portasse i conii di un giorno di una moneta (gli ultimi 5.760 blocchi) oltre il maggiore tra una moneta intera e il 10 % della sua supply, deve essere d'accordo ogni seggio non sospeso, e mai meno di due terzi di tutti i seggi.
- Il minimo del registro. Nessuna decisione del bridge si risolve finché il registro è sotto il suo minimo di max(3,
min_registry_size) seggi e proprietari distinti (vedi regole dei due terzi).
Prelievo: le monete escono
- L'utente invia la moneta wrapped con un normale TransferToken all'account di custodia, con il messaggio
ZBW1|seguito dall'indirizzo di destinazione. Quel trasferimento è la richiesta: non è coinvolto alcun BurnToken, e l'utente non invia nulla sulla catena esterna. - I keeper agiscono solo quando la richiesta è definitiva, il che richiede tra circa 3 e circa 27 ore dopo il suo blocco (vedi finalità e rollback); un keeper scandisce la catena a partire dall'ultimo blocco finalizzato che ha elaborato. Il voto di ogni keeper indica la richiesta, il token, l'importo e la destinazione, e contiene la firma di quel keeper per la catena esterna.
- Quando due terzi sono d'accordo, ogni nodo verifica di nuovo la richiesta e brucia quelle unità dall'account di custodia.
- Le firme raccolte dei keeper, leggibili tramite l'API, autorizzano il rilascio delle monete alla destinazione.
Un evento che non riceve alcuna nuova attestazione per 720 blocchi (3 ore) esce dalla valutazione.
Le monete wrapped su ZooBC
Una volta coniata, una moneta wrapped è un normale token genesi con 8 decimali: può essere inviata, messa in escrow, trasmessa in flusso, offerta in uno swap o scambiata su un mercato. La sua supply cambia solo attraverso il bridge, e MintToken e BurnToken su di essa vengono rifiutati. I conii del bridge non vengono ripartiti dalla politica di ripartizione del destinatario (vedi politiche di ripartizione e di transazione). I burn delle monete wrapped vengono conteggiati nel conteggio dei burn della catena, che per ZBC stesso resta a zero.