Glossario / Mining e consenso
Peso del blocco
- Che cos'è il peso del blocco?
- Il peso del blocco misura un blocco bitcoin su una scala in cui un byte di dati witness costa 1 unità e ogni altro byte costa 4, con un limite di 4.000.000 unità.
Specificato nel BIP-141.
Il peso esiste perché i byte non costano tutti allo stesso modo a un nodo. I dati di firma possono essere scartati una volta che una transazione è sepolta, quindi il BIP141 li ha valutati un quarto di tutto il resto e ha fissato il budget a 4.000.000 unità per blocco. Il tuo prelievo compete per quel budget, e lo sconto è il motivo per cui inviare da un indirizzo moderno costa meno che inviare da uno vecchio.
Come funziona
La formula nel BIP141 dice: il peso è uguale alla dimensione di base moltiplicata per tre, più la dimensione totale. La dimensione di base è il blocco serializzato al vecchio modo, con i witness rimossi; la dimensione totale è la serializzazione completa. Detta al contrario, la stessa regola dice quattro unità per ogni byte non witness e un'unità per ogni byte witness, ed è la versione che vale la pena memorizzare.
Dividi il peso per quattro e arrotonda per eccesso e ottieni i byte virtuali, l'unità che ogni stimatore di commissioni e ogni wallet usa. Un pagamento che spende due input e crea due output, tutti SegWit nativi, arriva a circa 208 byte virtuali, ovvero circa 832 unità di peso. Riempi un blocco con nient'altro e ne entrano quasi 4.800. Lo stesso pagamento costruito da indirizzi legacy pay to public key hash misura circa 374 byte, che pesano 1.496 unità perché nessuna sua parte ha diritto allo sconto, quindi ne entrerebbero solo circa 2.670.
Questo divario è l'intero senso del progetto. Scontare i witness ha fatto sì che l'adozione di SegWit si ripagasse da sola: un wallet che si aggiornava otteneva commissioni più basse su ogni transazione, senza che nessuno dovesse essere convinto che un blocco più grande fosse sicuro. Spinge anche il comportamento in una direzione che la rete vuole, dato che spendere output vecchi e consolidarli in nuovi costa meno per input di prima.
Due dettagli traggono in inganno. Il peso è calcolato per transazione e poi sommato, quindi il peso di un blocco è la somma delle sue transazioni più l'intestazione e i contatori, e un miner che riempie un blocco risolve un problema dello zaino contro il budget di 4.000.000 unità, non contro un conteggio di byte. E il peso non ha alcun rapporto con il valore: una transazione di 900 unità di peso che muove 40 bitcoin e una che muove 40.000 satoshi pagano commissioni identiche, perché la rete fa pagare lo spazio, mai l'importo.
Dove lo vedi
Ogni block explorer mostra il peso accanto alla dimensione, e la chiamata RPC getblock di Bitcoin Core restituisce weight, size e strippedsize come tre campi separati. Anche le visualizzazioni della mempool si basano su di esso: le barre che mostrano ciò che attende la conferma sono impilate per commissione in sat/vB, che ha al denominatore il peso diviso per quattro.
Il peso è anche ciò per cui un exchange ti addebita davvero una commissione di prelievo. Una piattaforma che indica una commissione fissa in bitcoin fa una media sul peso delle transazioni che si aspetta di costruire, e guadagna quando la mempool è tranquilla e perde quando è congestionata. Una piattaforma che raggruppa, inviando decine di prelievi dei clienti come output di una sola transazione, paga per un solo insieme di input invece che per decine, ed è per questo che gli exchange che raggruppano possono permettersi commissioni molto più basse di quelli che trasmettono ogni prelievo separatamente.
Peso del blocco vs byte virtuale
Il peso del blocco è la misura grezza e un byte virtuale è la stessa misura divisa per quattro. Entrambi descrivono gli stessi dati; cambia solo la scala. Il peso è l'unità scritta nelle regole di consenso, quindi la cifra di 4.000.000 compare nel codice come peso. I byte virtuali sono l'unità scritta nelle interfacce dei wallet, perché è più facile ragionare su una commissione di 8 sat/vB che su 2 sat per unità di peso. Quando un wallet dice che la tua transazione è di 141 vbyte, il blocco in cui finisce ha 564 unità di spazio in meno.