Emettere un token
Qualsiasi account può creare un proprio token su ZooBC con un'unica transazione IssueToken. Non c'è alcun contratto da scrivere e nessuno a cui chiedere: le regole fisse della catena decidono se la transazione è valida, e una volta che un blocco la include, il token esiste e l'emittente ne detiene l'intera supply. Le unità del token si muovono poi con TransferToken e possono stare in escrow, flussi, pianificazioni e offerte di swap e, con 8 decimali, in ordini su un mercato.
La transazione IssueToken
Un IssueToken (tipo 10) indica:
| Campo | Regola |
|---|---|
| decimali | da 0 a 8 (vedi decimali e passo) |
| flag | riscattabile, e la modalità di conio (sotto) |
| supply totale | maggiore di 0, e multiplo del passo del token |
| copertura in ZBC | 0 o più |
| simbolo | da 2 a 10 caratteri (sotto) |
| nome | da 1 a 64 byte (sotto) |
| pagamento di sopravvivenza | facoltativo (vedi manutenzione dei token (persistenza)) |
I flag sono bit. Il bit 0 rende il token riscattabile. I bit 1 e 2 fissano la modalità di conio: 0 per una supply fissa, 1 per un token coniabile; i valori 2 e 3 vengono rifiutati. Il bit 3, «senza copertura», viene memorizzato e riportato, ma nessuna regola lo legge. Coniare e bruciare token spiega che cosa permettono i due interruttori.
Un token emesso da un membro di un gruppo di account appartiene al gruppo.
La copertura
La copertura è costituita da ZBC reali che l'emittente versa nel token. Lasciano il saldo dell'emittente e vengono trattenuti dal token stesso, in nessun account; un nodo rifiuta una copertura che l'emittente non detiene. Gli ZBC ne escono solo in tre modi:
- verso i detentori che bruciano unità di un token riscattabile;
- come ZBC rilasciati quando una commissione viene pagata nel token (sotto);
- verso i detentori, quando il token scade (vedi manutenzione dei token (persistenza)).
L'id del token
L'id di un token degli utenti è formato dai primi 8 byte dell'hash della sua transazione IssueToken, letti come intero con segno a 64 bit little-endian (oppure 1, se quel numero è 0). È quindi l'id stesso della transazione di emissione (vedi firmare una transazione). L'id è noto non appena la transazione viene firmata, e i nodi non devono mai accordarsi su un contatore. L'API stampa gli id come stringhe decimali con segno, quindi un id può essere negativo.
I simboli non sono unici: due token vivi possono avere lo stesso, e chiunque può copiare un simbolo che non sia riservato né bloccato. Wallet e app dovrebbero mostrare e verificare l'id, non solo il simbolo (vedi dati della catena sono input non attendibile).
Regole per simbolo e nome
Un simbolo ha da 2 a 10 caratteri, ciascuno una lettera maiuscola dalla A alla Z o una cifra da 0 a 9. Questo esclude le minuscole e le lettere simili di altri alfabeti. Altre due regole proteggono i nomi noti:
- Riservati: i simboli di 4 o 5 caratteri che iniziano o finiscono con Z, come ZBTC o BTCZ, appartengono allo spazio dei nomi del bridge. Un simbolo di 6 caratteri come ZABCDE è consentito.
- Bloccati: una lista integrata di 78 ticker noti che nessuno può impersonare: 17 valute (come USD, EUR, CNY e JPY), 18 stablecoin (come USDT, USDC e DAI) e 43 monete principali (come BTC, ETH, BNB, SOL, XRP, ADA e DOGE).
Un nome è formato da 1 a 64 byte di UTF-8 valido. Non può contenere i caratteri <, >, " e ' né il backtick; non può contenere caratteri di controllo, a larghezza zero o che cambiano la direzione del testo, né spazi diversi da quello ordinario; e non può iniziare o finire con uno spazio.
Muovere le unità: TransferToken
Un TransferToken (tipo 11) contiene l'id del token, una quantità multipla del passo, un destinatario, un flag facoltativo per pagare la commissione nel token e un pagamento di sopravvivenza facoltativo. L'id di token 0 viene rifiutato: ZBC non è un token, e si muove con SendZBC. Un trasferimento di più unità di quante il mittente ne detenga è una no-op pagata: paga la sua commissione e non sposta nulla.
I trasferimenti di token possono anche essere messi in escrow (vedi escrow; la commissione si paga allora in ZBC), trasmessi in flusso (vedi pagamenti liquidi (flussi)) o pianificati (vedi trasferimenti pianificati). Dalla versione 0.5.8 una transazione può contenere fino a 32 trasferimenti di token, anche di token diversi, come batch: tutto o niente, per la somma delle commissioni dei singoli trasferimenti, pagata in ZBC, con il messaggio addebitato una sola volta (vedi una transazione per account per blocco, e i batch).
Pagare la commissione nel token
Un token con copertura in ZBC può pagare i propri trasferimenti (byte di flag 1). Il token rilascia ZBC dalla sua copertura per coprire la soglia minima e cede le unità corrispondenti:
units given up = ceil( released ZBC × supply ÷ backing ), rounded up to the step
Scendono sia la supply sia la copertura. Se la commissione dichiarata è superiore alla soglia minima, la parte pagata in eccesso resta nel token.