Il soft fork SegWit (acronimo di Segregated Witness) è stato uno dei più importanti aggiornamenti avvenuti nella storia del protocollo Bitcoin.
Nonostante per diversi anni sia stata considerata una grande innovazione, la blockchain di Bitcoin non è una tecnologia versatile. È indispensabile per distribuire la governance del network e rendere antieconomici gli attacchi a Bitcoin, ma è inefficiente nel processare le transazioni, dato che ogni pagamento deve essere verificato e memorizzato dall’intero network: il pagamento di un caffè a Milano deve essere registrato e verificato anche da chi gestisce un nodo a Melbourne.
In una rete distribuita il trade-off più noto è conosciuto come il Trilemma perché coinvolge tre variabili: decentralizzazione, scalabilità e sicurezza. Non è possibile raggiungere il livello massimo in tutti e tre gli aspetti perché il miglioramento di uno implica direttamente il peggioramento di un altro.
Il trade-off tra decentralizzazione e scalabilità ha portato a una forte spaccatura all’interno della comunità Bitcoin durante il periodo conosciuto come Blocksize War, da agosto 2015 a novembre 2017.
Il percorso verso l’attivazione di SegWit è stato lungo e complesso. La discussione attorno alla dimensione dei blocchi della blockchain ha portato, tra le altre cose, alla creazione del fork Bitcoin Cash.
La dimensione dei blocchi
In Bitcoin, una transazione è essenzialmente testo. Quando si effettua un pagamento, si chiede al software del proprio wallet di generare del codice che comunichi alla rete che il soggetto A sta inviando un determinato importo al soggetto B.
I testi contenenti le diverse transazioni sono aggregati in pacchetti di dati (e quindi di byte), che insieme ad altre informazioni costituiscono i blocchi della blockchain. Quando le transazioni sono numerose, alcune vengono escluse dal blocco, rimanendo in sospeso in una zona di limbo chiamata mempool, in attesa di essere incluse nei blocchi successivi.
Più una transazione è complessa, più testo deve essere scritto, maggiore è lo spazio che verrà occupato all’interno del blocco. Le commissioni, contrariamente a quanto si potrebbe pensare, non dipendono dall’importo trasferito, ma dalla dimensione (in byte) della transazione.
Perché un limite alla dimensione del blocco?
Rimuovendo il limite alla dimensione del blocco tutte le transazioni potrebbero essere incluse e i tempi della loro conferma diminuirebbero, rendendo la rete Bitcoin più scalabile. Tuttavia una tale modifica metterebbe a rischio la decentralizzazione della rete.
Per gestire un full-node Bitcoin è necessario scaricare l’intera blockchain, la cui dimensione è al momento inferiore a 1 TB. Questo significa che chiunque può costruirsi il proprio nodo con poche risorse contribuendo così alla decentralizzazione del network.
Se i blocchi avessero una dimensione maggiore, il peso dell’intera blockchain aumenterebbe notevolmente e il costo per poter gestire un full-node diventerebbe proibitivo per molte persone.
I miglioramenti introdotti da SegWit
Segregated Witness è un soft fork sviluppato nel 2015 e proposto tramite la BIP 141 dallo sviluppatore Pieter Wuille. Venne implementato in Bitcoin Core ad agosto 2017.
Attraverso il soft fork SegWit la rete Bitcoin è riuscita a introdurre due importanti miglioramenti al protocollo.
Nella struttura di una transazione, la parte più pesante in termini di byte è rappresentata dalla firma, la quale verifica che il mittente disponga dei fondi necessari per effettuare un pagamento.
SegWit ha separato la transazione in due sezioni: la prima parte della transazione contiene gli indirizzi del mittente e del destinatario mentre la seconda parte contiene il campo “witness data” che comprende la firma della transazione. In sostanza SegWit ha separato la firma dai dati della transazione.
Rimuovendo il campo “witness” dal blocco principale, SegWit ha ridotto notevolmente la dimensione delle transazioni, permettendo più transazioni per blocco e migliorando la scalabilità della rete Bitcoin.
SegWit ha introdotto uno sconto del 75% sul campo “witness data” che contiene la firma, portando la dimensione effettiva di un blocco da 1 a 4 MB circa.
Come effetto secondario, SegWit ha permesso di risolvere i problemi di malleabilità delle transazioni. Tale problematica permetteva a un attore esterno di alterare l’identificativo univoco, noto come hash, di una transazione prima che questa venisse confermata nella blockchain. SegWit risolve questo problema spostando le parti della firma in un campo separato e fuori dal flusso di dati che genera l’hash della transazione. Ciò significa che anche se le parti della firma venissero in qualche modo alterate, l’hash della transazione rimarrebbe immutato.
Con l’introduzione di SegWit, la malleabilità delle transazioni non è più un problema perché le informazioni che potrebbero essere alterate non rientrano più nel calcolo dell’hash della transazione.
I miglioramenti introdotti dal soft fork SegWit pongono le basi per soluzioni di layer-2 come Lightning Network.