Una transazione per account per blocco, e i batch
Dalla versione 0.5.8 a ogni blocco si applica una semplice regola di validità: può contenere al massimo una transazione per ogni account. Per fare molte cose insieme, un account usa un batch, un'unica transazione che contiene più azioni dello stesso tipo. Insieme, le due regole mantengono esatte le verifiche che i nodi fanno prima di un blocco, pur permettendo a un account molto attivo di pagare molte persone in un solo blocco.
La regola
L'account qui è l'indirizzo firmatario. Un blocco che contiene due transazioni dallo stesso indirizzo non è valido su nessun nodo, quindi un produttore onesto non ne costruisce mai uno. I produttori prendono per prima la transazione idonea più vecchia di ogni account e lasciano la successiva a un blocco seguente, 15 secondi dopo.
Un account può comunque inviare più transazioni di fila. Il pool di un nodo contiene fino a 50 transazioni in sospeso per mittente (una politica locale di ciascun nodo), e i produttori le includono una per blocco, a partire dalla più vecchia.
Dalla definizione seguono due dettagli:
- ogni membro di un gruppo di account ha il proprio posto, perché ogni membro firma con il proprio indirizzo, anche se i membri condividono un unico saldo;
- quando la transazione interna di un account multifirma viene eseguita, conta per l'account multifirma.
Perché aiuta
Un nodo verifica una transazione rispetto allo stato confermato due volte: quando la ammette nel suo pool e quando assembla un blocco. Con una transazione per account, nessun'altra transazione dello stesso account può cambiare quello stato all'interno del blocco. La verifica resta quindi esatta per tutto ciò che solo il mittente controlla, come il proprio saldo e i propri oggetti.
Tra account diversi, vince la prima transazione applicata. Se due account cercano di accettare la stessa offerta di swap, la ottiene il primo, e la seconda transazione non ha più senso: è una no-op pagata che paga la sua commissione e non fa nient'altro (vedi transazioni). I produttori onesti escludono transazioni del genere. Non esiste una regola separata per oggetto.
Batch
Un batch è un'unica transazione che contiene più azioni dello stesso tipo. Ne esistono tre tipi:
- pagamenti in ZBC, fino a 25 in un batch;
- trasferimenti di token, fino a 32, anche di token diversi, con la commissione pagata in ZBC;
- prove di archiviazione, fino a 1.000, un batch per nodo per epoca di archiviazione (vedi pool di archiviazione decentralizzata).
Un batch è tutto o niente. Ogni azione viene verificata in anticipo, quindi o avvengono tutti i pagamenti che contiene o non ne avviene nessuno, e l'intero batch viene firmato una volta sola.
Quanto costa un batch
Più azioni pagano come più transazioni. La commissione minima di un batch è la somma delle commissioni minime che le sue azioni pagherebbero come transazioni separate: una commissione base per ogni azione più l'addebito per i byte di ogni azione (vedi commissioni), con il messaggio del batch addebitato una sola volta. Tre pagamenti senza messaggio costano lo stesso in un batch e in tre transazioni singole. Un batch di prove di archiviazione non paga nulla: ogni prova di archiviazione è un compito esente da commissioni, quindi la somma è zero.
Ciò che un batch fa risparmiare è soprattutto lavoro per la rete, non commissioni: una firma da verificare e un posto nel blocco invece di tre. Ed è il modo con cui un account può pagare molti destinatari nello stesso blocco.