Wiki di ZooBC
Transazioni

Transazioni

Una transazione è un'istruzione firmata rivolta alla catena: pagare qualcuno, emettere un token, piazzare un ordine, collegare un indirizzo a un gruppo. ZooBC non ha una macchina virtuale per il codice degli utenti. Ogni funzione è un tipo di transazione integrato, con regole fisse che ogni nodo applica esattamente allo stesso modo, quindi un wallet sa, prima di firmare, tutto ciò che una transazione può fare e quale sarà la sua commissione minima.

Tipi integrati

Dalla versione 0.5.8 ZooBC definisce 73 numeri di tipo di transazione, tipo 0 compreso, in dodici famiglie.

Dodici riquadri, uno per famiglia di tipi di transazione, ciascuno con il suo numero di tipi, per un totale di 73
Dodici riquadri, uno per famiglia di tipi di transazione, ciascuno con il suo numero di tipi, per un totale di 73

Un numero di tipo è un gruppo più 256 volte un sottotipo, quindi la numerazione ha dei vuoti: 2 è NodeRegistration, e 258 (gruppo 2, sottotipo 1) è il suo aggiornamento. Un numero che la catena non definisce viene rifiutato, e ogni tipo definito è accettato dal blocco 1.

Due numeri sono speciali. Il tipo 0, Empty, non sposta nulla: esiste per trasportare un messaggio, deve comunque pagare una commissione maggiore di zero e non incrementa il nonce del mittente, il contatore per mittente che la catena tiene. Il tipo 53, CancelLongevity, è dismesso: ogni catena lo rifiuta, e al suo posto si usa CloseLongevity (309).

La vita di una transazione

  1. Un wallet costruisce l'involucro, la stessa struttura per ogni tipo, e lo firma per una catena.
  2. Invia i byte firmati con POST /api/v1/transactions. HTTP 202 significa che il nodo ha accettato la transazione nel suo pool, non che è in un blocco. Reinviare gli stessi byte è sicuro: la copia viene segnata come duplicato.
  3. I nodi si passano la transazione, e un produttore di blocchi la include. Un blocco contiene al massimo 2.000 transazioni e 524.288 byte di payload, e al massimo una transazione per ogni account (vedi una transazione per account per blocco, e i batch).
  4. GET /api/v1/transactions/<hash>/status ne riporta l'avanzamento: staging, mempool (con la sua posizione), confirmed (con l'altezza del blocco), rejected (con il motivo) o not_found.

Una transazione che nessun blocco include entro la sua finestra scade (vedi scadenza e timestamp).

Quando lo stato cambia nel frattempo

Tra la firma e l'inclusione in un blocco, altre transazioni possono cambiare ciò da cui una transazione dipende: un escrow viene regolato, un'offerta viene accettata da qualcun altro, un token scade. Una transazione del genere diventa una no-op pagata: viene inclusa in un blocco, paga la sua commissione e non cambia nient'altro. Il blocco resta valido su ogni nodo, quindi nessuno può paralizzare la catena inviando transazioni che stanno per diventare obsolete.

Un blocco non è valido solo per errori che ogni nodo vede allo stesso modo, come una firma non valida, una commissione sotto la soglia minima (vedi commissioni) o un pagamento superiore al saldo del mittente.

Articoli di questa categoria

Vedi anche

Articoli su questo argomento