Wiki di ZooBC
Transazioni

L'involucro della transazione

Ogni transazione ZooBC, di qualunque tipo, è un'unica stringa di byte con la stessa struttura, chiamata involucro. I dati propri del tipo stanno in un solo campo, il corpo; tutto il resto (chi invia, chi riceve, la commissione, l'istante, un messaggio facoltativo) è comune a tutti i 73 tipi. Conoscere l'involucro basta per leggere, prezzare e verificare qualsiasi transazione.

I campi in ordine

L'involucro disegnato come una striscia di campi in ordine, dal tipo alla firma, con un gas limit e un chain id barrati sopra
L'involucro disegnato come una striscia di campi in ordine, dal tipo alla firma, con un gas limit e un chain id barrati sopra
CampoDimensioneNote
tipo4 byte, little-endianil numero del [[transactionstipo di transazione]]
versione1 byte1, 2 o 3
timestamp8 bytesecondi Unix
mittenteun indirizzo
destinatarioun indirizzooppure il marcatore vuoto di 4 byte 02 00 00 00
commissione8 bytein unità atomiche
sopravvivenza8 byteversioni 2 e 3
scadenza4 byteversione 3
corpolunghezza di 4 byte, poi il corpoal massimo 65.536 byte
parte escrowvariabileoppure il marcatore vuoto di 4 byte
messaggiolunghezza di 4 byte, poi il messaggiofacoltativo
firmavariabilesempre per ultima

Un indirizzo è un numero di tipo di 4 byte seguito da un contenuto: 36 byte in tutto per un account nativo ZBC_, 24 per un account Ethereum (vedi account e indirizzi). Ogni importo è un numero intero di unità atomiche, e 1 ZBC ne vale 100.000.000.

Che cosa non c'è

Non c'è un gas limit, perché non c'è una macchina virtuale da misurare: ogni tipo è una regola fissa, e il suo prezzo è noto prima di firmare. Non c'è un campo chain id: la firma copre invece l'hash del blocco genesi della catena (vedi firmare una transazione). E non c'è un campo nonce: la catena tiene il nonce di ogni mittente nel proprio stato.

Versioni

  • La versione 1 non ha il campo di sopravvivenza.
  • La versione 2 aggiunge il campo di sopravvivenza.
  • La versione 3 aggiunge anche il campo di scadenza, che stabilisce per quanto tempo la transazione resta valida (vedi scadenza e timestamp).

Una transazione di versione 1 che indica un deposito di sopravvivenza viene rifiutata, e lo stesso vale per una transazione di versione 1 o 2 che indica una scadenza: nei loro byte non c'è posto per questi campi.

Sopravvivenza, corpo, parte escrow e messaggio

  • La sopravvivenza è 0 oppure almeno 10.000.000 di unità atomiche (0,1 ZBC). Apre un record di longevità che mantiene la transazione archiviata dopo il pruning ordinario, e non viene mai rimborsata (vedi pagare per conservare i dati (longevità)). Una transazione che contiene nel suo messaggio una transazione firmata di una catena esterna non può pagarne una.
  • Il corpo contiene al massimo 65.536 byte, disposti come il suo tipo stabilisce.
  • La parte escrow può essere contenuta solo da SendZBC e TransferToken; trasforma il pagamento in un escrow.
  • Il messaggio contiene al massimo 256 byte quando è in chiaro, senza byte nulli; al massimo 320 byte quando è cifrato (un messaggio cifrato inizia con «ZBE1»); e al massimo 4.096 byte quando contiene una transazione nativa di una catena esterna, da Ethereum, Solana o Bitcoin.

Il campo della commissione

La commissione si dichiara in unità atomiche e deve essere almeno pari alla soglia minima della transazione: una commissione base per azione di 0,025 ZBC moltiplicata per la scala delle commissioni su cui votano i nodi registrati, più un addebito per i byte del corpo e del messaggio che ogni nodo registrato conserva. Poiché la soglia minima dipende solo dalla transazione e dai parametri della catena, un wallet può chiederla a qualsiasi nodo prima di firmare, con GET /api/v1/blockchain/estimate-fee.

Una commissione sotto la soglia minima viene rifiutata, e un blocco che ne contiene una non è valido. Tutto ciò che viene dichiarato oltre la soglia minima torna al pagante nello stesso blocco, quindi pagare troppo per errore non costa nulla. Il tipo Empty, che non sposta nulla, deve comunque pagare una commissione maggiore di zero, mentre alcuni compiti che i nodi registrati svolgono per la rete, come le prove di archiviazione e le attestazioni di eventi, devono dichiarare una commissione esattamente pari a 0. Commissioni spiega la formula, il rimborso e dove vanno le commissioni.

Vedi anche