Glossario / Protocollo e aggiornamenti
Speedy Trial
- Che cos'è Speedy Trial?
- Speedy Trial è la configurazione di attivazione usata per Taproot: una breve finestra di segnalazione dei miner con una soglia abbassata al 90 per cento e l'entrata in vigore rinviata a un'altezza di blocco fissa successiva.
Specificato nel BIP-341.
Speedy Trial è un deployment dei bit di versione di BIP-9 modificato, scritto dentro BIP-341 stesso anziché in un BIP a sé. I miner hanno avuto 109 giorni, dal 24 aprile all'11 agosto 2021, per impostare il bit 2 in 1.815 di 2.016 blocchi, con l'entrata in vigore fissata al blocco 709.632. Quell'altezza di entrata in vigore era fissata prima dell'apertura della segnalazione, quindi chi deteneva bitcoin conosceva il blocco esatto in cui le regole sarebbero cambiate.
Come funziona
Speedy Trial mantiene il metodo di conteggio di BIP-9, cambia due dei suoi numeri e aggiunge un parametro che BIP-9 non ha mai avuto.
BIP-9 conta i blocchi che segnalano in ogni periodo di retarget di 2.016 blocchi e porta un deployment da STARTED a LOCKED_IN non appena un periodo ne contiene abbastanza. La sua soglia è di 1.916 blocchi, il 95 per cento di un periodo, e la sua indicazione per la finestra è di un anno, 31.536.000 secondi dopo l'orario di inizio. Sia l'inizio sia la scadenza si leggono dal median time past, la mediana delle marche temporali di un blocco e dei suoi dieci predecessori, così l'orologio è quello della catena e non quello di nessuno.
Il deployment di Taproot ha ridotto la soglia a 1.815 blocchi, il 90 per cento, e ha dato alla finestra 9.417.600 secondi, dal timestamp epoch 1619222400 al 1628640000. L'aggiunta è stata min_activation_height. Con il semplice BIP-9 un deployment in LOCKED_IN diventa ACTIVE al confine di retarget successivo, quindi il lock-in vincola l'altezza di entrata in vigore solo ai 2.016 blocchi che lo seguono. Con Speedy Trial lo stato LOCKED_IN si ripete finché la catena non raggiunge l'altezza indicata, e solo allora passa ad ACTIVE. L'altezza della mainnet era 709.632, che corrisponde esattamente a 352 periodi di retarget e quindi a un confine di periodo. Il deployment si è attivato lì.
La separazione è tutta l'idea. La segnalazione risponde rapidamente a una domanda, e il lungo intervallo che segue è tempo perché tutti gli altri si aggiornino, non tempo speso a discutere.
Dove lo vedi
I parametri di Speedy Trial sono leggibili nel campo versione di ogni blocco minato durante la finestra di segnalazione del 2021.
Un blocco che segnala porta i bit superiori 001 più il bit proprio del deployment, quindi un segnale di Taproot sul bit 2 si legge come versione 0x20000004. I miner che richiedono lavoro incontrano lo stesso deployment tramite getblocktemplate, la cui chiave "rules" nomina i soft fork già attivi e la cui chiave "vbavailable" associa ciascuno di quelli in sospeso al suo bit. Il nome che BIP-341 dà a questo deployment, e quindi la stringa che legge un miner, è semplicemente "taproot".
L'esecuzione dello stesso deployment sulla testnet3 mostra a cosa serviva il ritardo. Ha usato marche temporali di inizio e di scadenza identiche, una soglia di 1.512 blocchi al 75 per cento e min_activation_height a 0, quindi nulla è stato rinviato oltre l'intervallo di un periodo del BIP-9 stesso e si è attivato all'altezza 2.011.968. La mainnet ha avuto l'attesa in più; la rete di test non aveva un'economia da proteggere. Su signet le regole erano sempre attive, quindi lì non c'è stata alcuna prova.
Speedy Trial vs UASF
Un soft fork attivato dagli utenti impone l'esito dal lato dei nodi, e Speedy Trial ha deliberatamente rifiutato quel potere.
Il meccanismo che lo impone è scritto in BIP-8 come lockinontimeout. Impostalo su true e il deployment riceve un periodo MUST_SIGNAL prima della scadenza, in cui i blocchi che non segnalano diventano non validi una volta esaurita la quota di blocchi non segnalanti consentita dal periodo, garantendo il lock-in del deployment sia che i miner cooperino sia che non lo facciano. BIP-8 raccomanda il flag per qualsiasi soft fork che si prevede debba affrontare opposizione politica da una quota non trascurabile dei miner, e nello stesso documento avverte che i nodi che lo eseguono possono seguire una catena con meno lavoro per un periodo prolungato e possono avere bisogno di collegarsi preferenzialmente tra loro.
Speedy Trial non portava alcun flag del genere. Mancare la soglia prima della scadenza metteva il deployment in FAILED e non faceva altro, ed è stato il compromesso scelto: nessuna garanzia di attivazione, nessun rischio di divisione della catena e una risposta a basso costo in entrambi i casi.