Implementarea întârziată a update-ului Bitcoin Core de către un număr mic de mineri din rețea a rezultat într-o bifurcatie accidentală, prin adăugarea unor blocuri de tranzacție invalide blockchain-ului în acest sfârșit de săptămână.
Rezultatul a fost o bifurcație în rețea care a creat două versiuni ale blockchain-ului, ceea ce a continuat pentru alte 6 blockuri pe 4 iulie. Alte 3 block-uri invalide au fost adăugate blockchain-ului, după ce aceeași problemă s-a repetat în ziua următoare.
Ca rezultat, dezvoltatorii au lansat un avertisment pe bitcoin.org, cerând ca furnizorii de portofele să sporească controalele pentru tranzacțiile viitoare din cauza riscului ca fondurile să fie cheltuite de două ori ca rezultat al discrepanței dintre lanțuri.
Postarea, care este încă disponibilă pe site, îi sfătuiește pe aceștia să aștepte încă 30 de confirmări înainte să considere tranzacțiile validate.
Rădăcina problemei
În centrul problemei se află, discutabil, natura descentralizată a blockchain-ului bitcoin și gradul de control pe care îl au participanții asupra felului în care contribuie la verificarea tranzacției pe registrul distribuit al monedei digitale.
Această abilitate a utilizatorilor de a avea control asupra felului în care interacționează cu rețeaua, de exemplu, rezultă în faptul că minerii pot să neglijeze schimbările făcute programului, iar rețeaua își continuă treaba chiar dacă ei fac asta.
Ca precauție, dezvoltatorii au așteptat ca majoritatea minerilor să implementeze schimbarea. În acest caz, BIP66 – o bifurcație maleabilă creată să facă rețeaua mai puțin dependenetă de analiza semnăturii OpenSSL – afirmă că anumite block-uri de tranzacție create fără acest update ar putea fi invalidate odată ce majoritatea – 950 din 1000 de block-uri – ar fi minate cu noua versiune.
Teoretic, riscul apariții unor probleme este destul de mic, cu doar 5% din rețea rulând versiunea veche de BIP66. Cu toate acestea, în practică, aceste pool-uri rulează versiunea simplă a programului și au putut să proceseze 6 block-uri consecutive care ar trebui să fie invalide, creând două versiuni ale blockchain-ului bitcoin, dintre care cea mai lungă opera pe vechiul software.
În acest caz, anumite pool-uri de minare făceau minare SPV, ceea ce înseamnă că nu validau în întregime versiunea de blockchain. Aceste block-uri bitcoin invalide erau considerate valide de către furnizorii de portofele bitcoin și de exploratorii de block care rulează versiuni SPV de program, spre deosebire de nodurile pline cu întregul istoric al registrului.
Fabio Federici, director la Coinalytics a explicat:
”Clienții SPV pretindeau că vor urma regulile BIP66, dar de fapt nu le impuneau. O mare parte a rețelei de minare nu rulează pe noduri pline, ceea ce ar valida fiecare tranzacție.”
Deși inițiată de F2Pool, dacă și celelalte pool-uri de minare ar fi rulat un nod plin pentru a procesa întregul blockchain bitcoin, block-urile invalide ar fi trebuit să fie detectate mai rapid.
Consens
Deși neobișnuit pentru update-urile de software, situația a fost de luat în seamă din moment ce block-urile bitcoin invalide au fost construite de către rețelele mari de minare.
Peter Gray, dezvoltator și fondator al API-ului Coinkite, a notat că problemele cu update-urile de software sunt destul de comune, ca rezultat al upgrade-urilor continue făcute rețelei de plăți.
”Cred că este util să le amintim oamenilor că bifurcațiile se întâmplă în fiecare săptămână. În mod normal doar un singur block rămâne singur într-o săptămână normală, și nu este vorba despre un bug sau un atac, doar de felul în care funcționează bitcoin-ul” a spus Gray.
Firmele de minare care au rezolvat block-uri invalide au pierdut venituri ca rezultat al nevoii de a corecta problema, cu Bitcoin.org estimând că 50 000$ în venituri a fost efectiv reținut de către F2Pool, AntPool și BTC Nuggets, cele trei pool-uri de minare care au creat efectiv și au propagat pentru o perioadă scurtă de timp lanțurile invalide.
În cele din urmă, recompensele nu au mai fost plătite, din moment ce câștigul de 25BTC per block a fost trimis către un portofel bitcoin care a invalidat block-urile după ce le-a sincronizat cu lanțul valid.
Efectele bifurcatiei
În avertizările sale, Bitcoin.org a spus că cei ai căror tranzacții au fost confirmate înainte de ora 21 pe 6 iulie nu au fost afectați de această problemă, dar tranzacțiile efectuate după această oră se crede că nu sunt tocmai de încredere din punct de vedere al confirmării.
Bitcoin.org a explicat faptul că confirmarea block-urilor invalide se datorează clienților de server ca nu au făcut upgrade la Bitcoin Core 0.9.5 sau mai recente și au avertizat că portofelele ușoare care folosesc SPV și portofele web sunt în special vulenrabile la acest bug.
Problema a rămas încă nerezolvată, iar bitcoin.org a îndemnat utilizatorii să aștepte 30 de confirmări suplimentare înainte de a accepta o tranzacție ca fiind validă. Au recomandat de asemenea ca minerii să treacă la un pool care validează block-urile de tranzacție folosind un nod plin și ca minerii individuali să folosească Bitcoin Core 0.10.2.
Cât despre dezavantajele mai mari, s-a discutat că evenimentul ar trebui să ne aducă aminte că este nevoie ca participanții cheie ai rețelei să ruleze pe noduri pline.
”Problema cheie este disribuția nodurilor pline contra nodurilor SPV. Toată lumea ar trebui să ruleze pe noduri pline. Poate că nu are sens din punct de vedere economic sau poate sunt alte avantaje pentru clientul SPV, dar acest lucru vine cu riscurile sale” a continuat Federici.