Il giorno in cui un gruppo di aziende del settore provò a impossessarsi della rete Bitcoin: una grande lezione per tutti.
Tra il 2015 e il 2017 Bitcoin ha affrontato il più grande conflitto della sua breve storia: la Blocksize War. Si è trattato di una disputa sul cambiamento della dimensione del blocco del protocollo Bitcoin per far fronte alla domanda sempre maggiore di transazioni.
Uno degli epicentri di tale scontro è stato il New York Agreement del 23 maggio 2017, quando numerose aziende del settore e membri influenti della comunità Bitcoin raggiunsero un accordo sulla questione della scalabilità del protocollo.
All’epoca della Blocksize War vi erano due fazioni con visioni totalmente opposte.
Da un lato, i “big blocker” desideravano aumentare la dimensione massima dei blocchi della blockchain da 1MB a 8MB o più, consentendo così alla rete di processare più transazioni al secondo e rimandare il problema degli alti costi di commissione derivanti dalla congestione della rete.
Dall’altro, gli “small blocker” spingevano per l’adozione del soft fork SegWit (Segregated Witness), un aggiornamento del protocollo che avrebbe spostato le firme delle transazioni in uno spazio diverso del blocco (chiamato “witness”) efficientando l’utilizzo di quest’ultimo. Gli small blocker sostenevano che aumentare la dimensione del blocco avrebbe centralizzato la rete e l’avrebbe resa più vulnerabile agli attacchi. Blocchi più grandi avrebbero reso più difficile per gli utenti gestire un full-node perché i requisiti hardware e di larghezza di banda sarebbero diventati proibitivi per molti.
SegWit avrebbe anche introdotto dei miglioramenti per porre le basi per il Lightning Network.
Il centro della discussione tra big e small blocker furono le conferenze “Scaling Bitcoin”.
A settembre 2015 si tenne la prima conferenza “Scaling Bitcoin” a Montreal.
Il 6 dicembre andò in scena il secondo appuntamento a Hong Kong. All’epoca quasi il 70% dei miner era dislocato in Cina e questo fu uno dei motivi per la scelta della regione asiatica.
La conferenza fu dominata da SegWit, inizialmente proposto come un hard fork. Qualche mese dopo lo sviluppatore Luke Dashjr propose SegWit come un soft fork.
Nonostante la maggioranza della comunità avesse trovato un accordo sul soft fork SegWit, durante la conferenza di Hong Kong Jihan Wu, il Ceo di Bitmain (società che all’epoca produceva ASIC con oltre l’80% di market share), si oppose. Jihan Wu voleva l’introduzione di SegWit soltanto come hard fork. Il perché di questo fu per via di una cosa nota come Covert AsicBoost.
In merito ai motivi per cui il Ceo di Bitmain spingeva per implementare SegWit come hard fork, il 5 aprile 2017 Gregory Maxwell avrebbe poi pubblicato un’email spiegando Covert AsicBoost: si trattava di un metodo che permetteva a Bitmain di avere un vantaggio competitivo nei confronti degli altri miner senza essere notata.
Maxwell si accorse che SegWit come hard fork non creava problemi a Covert AsicBoost, mentre SegWit come soft fork rompeva la possibilità di fare Covert AsicBoost per Bitmain.
Oltre a ciò, Maxwell e altri due sviluppatori avrebbero scoperto che il codice utilizzato dalle macchine di Bitmain conteneva un kill switch da remoto chiamato AntBleed, ovvero un segnale che consentiva a Bitmain di spegnere da remoto tutti gli Asic di sua produzione.
Il terzo appuntamento della Scaling Bitcoin si svolse a Milano, organizzato da Blockchain Lab. La discussione si concentrò sullo status quo del protocollo Bitcoin, su SegWit come soft fork e su come aumentare la dimensione dei blocchi con un soft fork. Inoltre, durante la conferenza, le società Acinq, Lightning Labs e Blockstream, ognuna delle quali aveva iniziato a sviluppare la propria implementazione del Lightning Network, si riunirono per trovare un accordo su delle specifiche comuni di interoperabilità per aprire canali e fare routing tra implementazioni LN diverse.
Inizialmente queste specifiche vennero chiamate Milan Protocol, per poi essere rinominate BOLT: Basis of Lightning Network.
A novembre 2016 venne rilasciata la versione 0.13.1 di Bitcoin Core che includeva la BIP-141, vale a dire il codice di SegWit e il meccanismo di segnalazione da parte dei miner per permettere l’attivazione del soft fork con una soglia di consenso del 95%.
Il 12 gennaio 2017 Charlie Lee, creatore di Litecoin, decise di implementare SegWit in Litecoin e di lanciare il processo di attivazione attraverso il meccanismo di segnalazione, che però non arrivò a causa della scarsa collaborazione dei miner cinesi. A quel punto uno sviluppatore Bitcoin sotto pseudonimo, Shaolin Fry, entrò nelle chat di Litecoin e propose un’idea chiamata UASF (User Activated Soft Fork). Si trattava di un soft fork che sarebbe stato lanciato per precisa volontà degli utenti. Attivando l’UASF sui loro full-node, gli utenti avrebbero dato un ultimatum ai miner: segnalate l’attivazione di SegWit o rifiuteremo i vostri blocchi. Con tale mossa Shaolin Fry spaventò i miner cinesi e SegWit venne attivato in Litecoin.
Per sbloccare l’impasse sull’attivazione di SegWit su Bitcoin, il 12 marzo Shaolin Fry propose BIP-148, una versione di Bitcoin Core che prevedeva l’attivazione del soft fork SegWit entro una certa data senza aspettare la segnalazione dei miner.
In questa fase la maggioranza degli sviluppatori Bitcoin Core era contraria a UASF, considerata un’idea rischiosa. Ma Luke Dashjr riteneva che l’opinione che contava fosse quella degli utenti e i miner si sarebbero dovuti adattare alle nuove regole o avrebbero visto i loro blocchi rifiutati.
BIP-148 accolse consensi e si creò un movimento di sostegno alla proposta nella comunità Bitcoin. Tra i principali sostenitori c’era Samson Mow, allora Cso di Blockstream.
Il 23 maggio 2017, nel corso della conferenza Consensus organizzata da CoinDesk, media company che all’epoca apparteneva al Digital Currency Group, fondo di investimento statunitense gestito da Barry Silbert, annunciò il raggiungimento di un accordo sulla questione della scalabilità del protocollo Bitcoin. In particolare, durante l’apertura della conferenza, Silbert comunicò il raggiungimento di un accordo tra tutte le società più importanti del settore dell’epoca per introdurre SegWit come hard fork senza problemi di compatibilità.
Tra le società che parteciparono all’accordo erano presenti: CoinDesk, Bitmain, Blockchain.info, Bitcoin.com, Bloq, BitPay, Coinbase, BitFury, BTCC, Circle, Bitclub Network, Xapo, Ledger, Abra e RSK Labs. Nei giorni successivi vennero annunciate circa altre 20 start-up facenti parte del portafoglio di Digital Currency Group favorevoli all’accordo.
L’accordo che prese il nome di New York Agreement proponeva due cose:
- attivare Segregated Witness con una soglia dell’80% dei miner favorevoli, segnalando la propria adesione al bit 4 del block header, scrivendo nell’header dei blocchi NYA;
- attivare un hard fork con blocchi da 2 MB entro sei mesi, attraverso una proposta chiamata SegWit2x e il nuovo client BTC1. Assieme allo sconto della parte witness, la dimensione di un blocco sarebbe arrivata a 8 MB.
Naturalmente l’accordo fu fin da subito aspramente criticato da larga parte degli sviluppatori di Bitcoin Core e dagli small blocker. Alcuni definirono il New York Agreement come un vero e proprio “attacco” ai principi di Bitcoin, accusando i firmatari di aver tentato una manovra per prendere il controllo della rete a beneficio dei propri interessi economici. Adam Back, Ceo di Blockstream, dichiarò:
“Stabilisce un bruttissimo precedente il fatto che un piccolo gruppo di Ceo possa riunirsi in una stanza d’albergo e fare un patto che poi cercano di imporre su Bitcoin. Quello non è più Bitcoin”.
In quei giorni James Hilliard, sviluppatore e miner, pubblicò BIP-91, nella quale propose ai membri del NYA di raggiungere un accordo tra di loro e successivamente unirsi agli utenti che volevano SegWit come soft fork, invece di attivare SegWit come hard fork.
La scoperta di Covert AsicBoost, inoltre, creò molto dibattito nella comunità: anche diversi big blocker iniziarono a mettere in discussione la posizione e gli interessi di Bitmain.
Il 5 giugno il gruppo del NYA, capeggiato dal Ceo di BitGo Mike Belshe, decise di accettare la proposta BIP-91, ma chiese l’attivazione di SegWit2x dopo l’introduzione di SegWit come soft fork.
Il 21 luglio arrivò il raggiungimento della soglia dell’80% dei miner e iniziò la segnalazione per il bit 1, vale a dire il meccanismo di attivazione di SegWit come soft fork.
Poco dopo il Ceo di Bitmain pubblicò un blog post in cui affermava che gli accordi non erano stati rispettati e annunciava un UAHF (User Activated Hard Fork), dove in realtà non era coinvolto alcun utente. In sostanza il post di Wu preannunciava la nascita di Bitcoin Cash il 1°agosto 2017: split della timechain di Bitcoin con blocchi di dimensioni da 8 MB senza SegWit.
In seguito all’attivazione di SegWit, all’interno della comunità Bitcoin iniziò a emergere un forte movimento contro la proposta SegWit2x. L’idea di fare un hard fork per accontentare il Ceo di Bitmain secondo un ipotetico accordo era ormai fuori discussione.
Durante la conferenza Breaking Bitcoin organizzata a Parigi da Kevin Loaec, di fronte alla forte opposizione degli utenti, alcune società tra cui BitFury, Xapo e RSK Labs, ritirarono la loro adesione al gruppo del NYA.
Al contrario, senza citare alcuna controversia, Coinbase e BitPay inviarono ai propri utenti delle e-mail dove affermavano che se non avessero scaricato il nuovo software BTC1 sarebbero finiti fuori consenso.
L’e-mail da parte di BitPay fece arrabbiare lo sviluppatore francese Nicolas Dorier, che dopo uno storico tweet, lanciò BTCPay Server.
In seguito al ritiro dall’accordo da parte di diverse aziende, l’8 novembre Mike Belshe comunicò via e-mail che i piani per l’hard fork SegWit2x erano sospesi. Qualche giorno dopo alcuni utenti e sviluppatori Bitcoin si accorsero che all’interno del codice di BTC1 era presente un bug che, al momento dell’hard fork, avrebbe fatto crashare l’intera rete Bitcoin.
Se, come proposto da Coinbase e da BitPay, gli utenti fossero passati al software BTC1, la rete Bitcoin sarebbe collassata immediatamente.
Tale scissione ha dimostrato una volta per tutte una lezione fondamentale: in Bitcoin sono gli utenti che gestiscono i full-node a decidere quali aggiornamenti implementare e quale direzione deve prendere lo sviluppo della rete. Il New York Agreement, nonostante l’appoggio di numerose e importanti aziende, non è riuscito a imporsi a causa del dissenso dei singoli utenti.