Un soft fork è un aggiornamento retro-compatibile con la versione precedente del software che introduce una modifica che comporta un restringimento delle regole del protocollo.
Quando si affronta il tema degli aggiornamenti alle regole di consenso di Bitcoin, è necessario comprendere i concetti di soft-fork e hard-fork per capire le differenze tra i due tipi di aggiornamento.
Prima di tutto, è fondamentale chiarire cosa si intenda per fork.
Che cos’è un fork?
La blockchain di Bitcoin è, tra le altre cose, un database distribuito su migliaia di computer chiamati nodi. Ogni nodo verifica e conserva tutte le informazioni della blockchain nel proprio spazio di archiviazione. Le informazioni tra un nodo e l’altro vengono diffuse tramite il gossip protocol e non raggiungono simultaneamente tutta la rete. Ogni peer riceve i dati, li verifica e li inoltra ai peer limitrofi, comportando una latenza temporale nella ricezione delle informazioni tra tutti i nodi, dettata dai limiti fisici di Internet.
Immaginiamo di trovarci al blocco numero 3, come mostrato nell’immagine. Quando un miner trova una soluzione alla Proof-of-Work e invia il blocco successivo ai peer limitrofi, questi lo ricevono prima di altri nodi. Immaginiamo ora che, contemporaneamente al primo, un altro miner trovi una soluzione valida e trasmetta il suo blocco ai nodi vicini. In un evento del genere si diffondono due blocchi distinti nella rete, entrambi potenzialmente validi. I nodi più vicini al nodo del primo miner ricevono prima il blocco 4a, mentre i più vicini al nodo del secondo miner ricevono prima il blocco 4b.
Dopo poco tempo, i nodi vicini al primo miner ricevono anche il blocco 4b, mentre i nodi vicini al secondo ricevono anche il blocco 4a. Così, tutti i peer di rete si trovano con due versioni potenzialmente valide del blocco 4. I primi considerano valido per il momento il blocco 4a ma non scartano il blocco 4b: lo mantengono collegato al blocco 3 in una blockchain che appare biforcata. Si crea ciò che viene definito un fork. I nodi che hanno ricevuto prima il blocco 4b si comportano in modo analogo, considerando questo come valido e mantenendo il 4a in una catena forkata.
A questo punto, i miner che ritengono valido il blocco 4a iniziano a cercare la soluzione alla Proof-of-Work per il blocco successivo, il blocco 5a. Gli altri miner cercano di trovare il blocco 5b.
Supponiamo che un miner che aveva considerato valido il blocco 4b trovi una soluzione. Il nodo diffonde il suo blocco candidato 5b al resto della rete: tutti i nodi che avevano considerato valido il blocco 4b vedono che il blocco successivo è compatibile con la catena e lo aggiungono semplicemente alla loro blockchain principale. I nodi che avevano considerato valido il blocco 4a notano che il 5b non è compatibile con la catena principale ma con il blocco 4b che avevano mantenuto in una catena forkata. Si trovano di fronte a due catene, una con un blocco in più dell’altra.
Quale catena si considera valida? Come scritto nel White Paper di Bitcoin, “i nodi considerano sempre la catena più lunga come quella corretta e continueranno a lavorare per estenderla”. In questo caso la catena valida è quella che arriva al blocco 5b, dato che è più lunga e ha accumulato più lavoro computazionale. I nodi che avevano dato per valido il blocco 4a lo scartano, considerano la catena corretta quella contenente i blocchi 4b e 5b e iniziano a cercare una soluzione alla Proof-of-Work per il blocco 6b.
Che cos’è un soft fork?
Il funzionamento appena descritto avviene frequentemente nella rete Bitcoin: si tratta di un fork tecnico che nella gran parte dei casi viene risolto entro un blocco. Cosa succede invece quando si vuole modificare una regola di consenso del protocollo?
Quando le regole vengono ristrette, cioè quando elementi precedentemente considerati validi diventano successivamente considerati invalidi, le modifiche sono compatibili con le versioni del vecchio software. Ciò avviene perché i nodi non aggiornati continuano ad approvare ciò che approvavano anche prima, senza conoscere il fatto che i nodi aggiornati stiano inoltrando blocchi con parametri più stringenti dei loro.
In sostanza, per essere compatibili con il futuro, le transazioni e i blocchi creati con le nuove regole devono essere validi anche secondo le vecchie regole, ma non viceversa, poiché la storia passata è già acquisita.
Tipi di soft fork
Esistono due tipi di soft fork che sono:
- La maggior parte dei miner esegue l’aggiornamento per applicare le nuove regole (Miner Activated Soft Fork – MASF);
- I nodi eseguono l’aggiornamento senza il supporto dei miner: user-activated soft fork – UASF.
Occorre notare che un soft fork non è un fork: non avviene alcuna separazione della catena in un soft fork.
Tuttavia, implementare un soft fork è un’operazione delicata. Dato che crea vincoli di consenso aggiuntivi restringendo le regole, un soft fork è una modifica irreversibile: una volta implementato, non si può tornare indietro.
I soft fork più noti avvenuti nella storia di Bitcoin sono SegWit e Taproot.