Bitcoin - prezentare tehnică

Sistemul Bitcoin

Sistemul Bitcoin este un sistem de plată online care se bazează pe o rețea peer-to-peer. Sistemul Bitcoin foloseşte un protocol criptografic asimetric, bazat pe o pereche de chei asimetrice, privată-publică. Aceste perechi de chei sunt folosite la realizarea confidențialității şi securizării tranzacțiilor dintre două entități. Cheia publică este folosită la criptarea unui mesaj iar cea privată la decriptarea mesajului.

Tot ce s-a criptat cu o anumită cheie publică poate fi decriptat doar cu cheia privată corespunzătoare cheii publice. Cheia privată mai este folosită la crearea unei semnături digitale folosită pentru a verifica autenticitatea unui mesaj în cazul tranzacțiilor.

De regulă, cheia privată se ține ascunsă, fiind singura modalitate de a revendica moneda deținută în sistemul Bitcoin. Cheia publică este folosită la generarea adresei Bitcoin (v. Adresa Bitcoin). Adresa Bitcoin este adresa la care se realizează o plată. Plățile se realizează prin intermediul tranzacțiilor (v. Tranzacțiile în sistemul Bitcoin).

Cheia privată se generează static, adică nu e nevoie de conexiune la internet, iar din cheia privată se generează cheia publică şi implicit adresa Bitcoin. Operația inversă nu este posibilă, adică dintr-o cheie publică nu se poate genera cheia privată.

Există două rețele Bitcoin, şi anume MainNet, care este rețeaua principală folosită de toată lumea, şi TestNet, care este o rețea destinată dezvoltării şi testării de aplicații bazate pe sistemul Bitcoin. Moneda generată în rețeaua TestNet nu valorează nimic.

Sistemul Bitcoin pune la dispoziție un protocol HTTP care poate fi accesat prin intermediul unei aplicații client. O astfel de aplicație este wallet-ul (portofelul) Bitcoin, prin intermediul căruia se poate transfera moneda dar şi vizualiza soldurile. Există pe piață o multitudine de implementări de wallet-uri printre care şi clientul Bitcoin care implementează protocolul Bitcoin, numit Bitcoin Core, şi care furnizează şi o implementare de wallet.


Hash-ul

Hash-ul reprezintă rezultatul unei funcții (funcție hash), care se aplică pe un volum mai mare de date, rezultatul fiind un volum mai mic. Pe aceleaşi date de intrare, în urma aplicării funcției hash, rezultă întotdeauna aceleaşi date de ieşire.

Una din caracteristicile funcției hash este evitarea coliziunii, adică dacă funcția hash e aplicată pe date diferite atunci ea va furniza întotdeauna rezultate diferite. Spre exemplu, dacă avem un fişier text şi-i trecem conținutul printr-o funcție hash, va rezulta un şir de caractere de o dimensiune mai redusă. Dacă vom aplica din nou funcția hash pe conținutul fişierului va rezulta acelaşi şir de caractere. Dacă însă, modificăm un singur caracter din fişierul text, atunci rezultatul funcției hash se va modifica.

Funcția hash nu este inversabilă, adică nu există o altă funcție, care dacă este aplicată pe rezultatul unei funcții hash să producă datele de intrare. În cazul exemplului de mai sus, dacă pornim de la şirul de caractere rezultat în urma aplicării funcției hash pe conținutul fişierului text, nu există vreo metodă care să ne returneze conținutul fişierului text.

Hash-ul este folosit în criptografie şi la semnăturile digitale dar şi la stocarea parolelor pe server. Parolele nu se stocheaza sub forma de text simplu sau în formă criptată deoarece există pericolul ca să poata fi decriptate de către un atacator care a penetrat sistemul sau chiar de către un insider. Se stochează însă un hash al parolei iar după cum am explicat mai sus, din hash nu există vreo metodă de extragere a parolei. În momentul în care introduceți parola, ea este hash-uita iar hash-ul rezultat este comparat cu hash-ul stocat pe server.

Sistemul Bitcoin foloseşte intern o hash-uire dublă (dublu hash) de tip SHA256, adică aplică SHA256 pe nişte date de intrare după care hash-ul rezultat îl mai trece o dată prin SHA256 ( hash = SHA256( SHA256(date) ) ). SHA256 acceptă ca date de intrare un şir de caractere de orice dimensiune iar rezultatul fiind un şir de caractere având o dimensiune de 256 biți.


Semnătura digitală în sistemul Bitcoin

Semnătura digitală asigură autenticitatea provenienței unui mesaj, dar şi integritatea mesajului transmis. De asemenea, elimină riscul nerecunoaşterii transmiterii unor date de către expeditor (nonrepudierea mesajului). Semnatarul unui mesaj este cu certitudine şi expeditorul său şi invers.

În imaginea de mai jos se vede cum expeditorul unui mesaj îşi foloseşte cheia privată pentru a semna mesajul (criptare), mesajul semnat urmand a fi verificat (decriptat) de către destinatar (receptor) cu ajutorul cheii publice a emițătorului. Doar cheia publică a emițătorului poate decripta un mesaj semnat cu cheia lui privată.

Să vedem acum cum funcționează semnarea digitală a unui mesaj de către emițător (expeditor) si verificarea sa de către receptor (destinatar).

Semnarea digitală, după cum se poate vedea în figura de mai sus, constă dintr-o succesiune de mai mulți paşi. Se începe cu calcularea hash-ului mesajului, după care se cripteaza hash-ul obținut cu cheia privată a emițătorului. Hash-ul criptat se adaugă mai apoi mesajului iar în final se trimite aceast nou mesaj (mesaj original + hash-ul criptat) receptorului.

În cazul verificării semnăturii digitale, receptorul recepționează mesajul, după care se extrage semnătura digitală care conține hash-ul criptat precum şi mesajul inițial. Mai apoi se calculează hash-ul mesajului extras, urmand să se decripteze cu ajutorul cheii publice a emițătorului hash-ul criptat, care este comparat cu hash-ul calculat. Dacă cele două valori sunt egale, mesajul recepționat este considerat valid, ca provenind de la emițătorul de la care l-am aşteptat.

Sistemul Bitcoin foloseşte semnăturile digitale pentru a semna tranzacțiile (v. Tranzacțiile în sistemul Bitcoin), rolul cheii publice fiind jucat de adresa Bitcoin (v. Adresa Bitcoin), mesajul fiind reprezentat spre exemplu de scriptul unei tranzacții, mesaj semnat cu cheia privată stocată în walletul Bitcoin (există mai multe modalități de stocare a cheii private, inclusiv într-un fişier pe disc sau pe un dispozitiv extern de tip USB).

În cele ce urmează, prezentăm mai jos întregul ciclu al semnării şi criptării unui mesaj, operațiunea de verificare şi decriptare fiind foarte uşor de dedus, nemaifiind prezentată.

În imaginea de mai jos este ilustrat raportul între perechea cheie privată-publică şi criptare-semnare de mesaje.


Arborii Merkle (Merkle Trees)

Arborelele Merkle sau arborele hash este un arbore binar în care fiecare nod de frunze este marcat cu hash-ul unui bloc de date (în sistemul Bitcoin, hash-ul unei tranzacții). Fiecare nod ordinar conține hash-ul marcajelor nodurilor copilului său. Arborii Merkle permit verificarea sigură a conținutului structurilor de date mari. Ultimul nod din arbore, care nu mai reprezintă copilul nimănui, reprezintă rădăcina Merkle (Merkle root). Arborii Merkle, ca parte din sistemul Bitcoin, conțin dublu hash-uri de tip SHA256 (v. Hash-ul).

Arborii Merkle sunt folosiți pentru a verifica orice fel de date stocate împotriva manipulării şi ajută să se asigure că blocurile de date recepționate de la alte noduri dintr-o rețea peer-to-peer sunt primite nealterat.


Blockchain

Un blockchain este un registru public în care sunt înregistrate toate tranzacțiile confirmate. Blockchain-ul pe care rulează sistemul Bitcoin este format dintr-o multitudine de blocuri de dimensiune fixă de 1M (în varianta inițială a sistemului Bitcoin). Acestea iau forma unui arbore în care sunt înregistrate tranzacțiile precum şi alte informații cum ar fi un hash al blocului precedent.

Astfel, fiecare bloc conține un hash al blocului precedent. Să presupunem că un atacator încearcă să altereze hash-ul unui bloc. Va trebui să treacă prin toată structura arborescentă din sistemul Bitcoin şi să altereze toate blocurile, ceea ce este imposibil. Conținutul întregului registru (blockchain) este distribuit în internet pe stațiile tuturor minerilor. O tranzacție confirmată este înregistrată în blockchain în mod consensual între mineri. Asta înseamnă că la un moment dat toți mineri vor deține aceeaşi imagine a registrului.

Mai jos avem o reprezentare grafică a blockchain-ului (structura unui bloc este mai complexă decât cea din reprezentare).

În reprezentarea de mai sus se porneşte de la un grup de cinci tranzacții (Tx0÷Tx4) din care se generează un arbore Merkle. Rădăcina acestuia este stocată într-un bloc din blockchain. Această valoare (Merkle root) este printre altele folosită ca să preîntâmpine alterarea blocului de către un atacator. Orice alterare a tranzacțiilor duce la o valoare Merkle root diferită de cea stocată în bloc.

Tot această valoare poate fi folosită și de către algoritmii de identificare a unei tranzacții la operațiile de căutare în blockchain (una din metodele de căutare). Valoarea Merkle root se determină prin dublu hash al fiecărei tranzacții. Apoi, printr-un proces recursiv, se concatenează perechi de două hash-uri. Asupra rezultatului se aplică în mod identic un dublu hash, şamd. Rezultă într-un final un singur hash, care reprezintă Merkle root. În cazul unui număr impar de tranzacții, în cazul ultimei tranzacții (fără pereche) se concatenează hash-ul cu el însuși.


Adresa Bitcoin

Adresa Bitcoin reprezintă un recipient de primire a tuturor plăților şi este reprezentat de un şir de aproximativ 25-34 de caractere. Următoarele caractere sunt evitate pentru e nu crea ambiguități vizuale: “O”, “0” (cifra), “I” si “i”. Mai precis, adresa Bitcoin este formată dintr-un număr care identifică rețeaua Bitcoin (MainNet sau TestNet) concatenat cu un hash al cheii publice iar în final codat cu algoritmul Base58Check.

Hash-ul cheii publice este generat aplicându-se algoritmul SHA256 pe cheia publică iar mai apoi se aplică algoritmul RIPEMD160 pe rezultat (hash_cheie_publica = RIPEMD(SHA256(cheia_publica))). Așadar, am văzut că o adresă Bitcoin conține hash-ul cheii publice, de aici rezultând că dintr-o adresă Bitcoin nu se poate extrage cheia publică.

Pentru a putea participa la rețeaua Bitcoin va fi nevoie de un wallet care conține perechi de chei privată-publică. Spre deosebire de conturile bancare, în cazul cărora fiecare individ deține de regulă un număr de cont, un wallet poate conține o multitudine de perechi de chei criptografice, deci implicit de adrese Bitcoin. După cele descrise mai sus, realizăm că adresele Bitcoin nu dețin nicio informație referitoare la deținătorul lor, deci sunt anonime. Tranzacțiile realizate la o adresă sunt însă publice, adică oricine poate inspecta toate tranzacțiile realizate la o anume adresă Bitcoin (inspectând blockchain-ul).

Atenție însă la diferitele exchange-uri dar şi companii aflate în proces de emitere de monedă sau tokeni (Initial Coin Offering). Acestea se pot supune reglementărilor din statele în care activează și cer utilizatorilor săi să se autentifice. Astfel toate tranzacțiile realizate prin intermediul lor pot fi asociate direct unor persoane autentificate (în locul unei adrese Bitcoin anonime). Această procedură este cunoscută drept Know Your Customer (KYC).


Tranzacțiile în sistemul Bitcoin

Tranzacția reprezintă transferul de monedă între wallet-uri şi este inclusă în lanțul de blocuri. Bitcoinii conțin cheia publică a deținătorului actual. Când un utilizator transferă o sumă către alt utilizator, el renunță la proprietatea pe bitcoinii trimiși prin adăugarea cheii publice a utilizatorului receptor și semnându-i cu propria cheie privată. Aceasta se realizează prin intermediul unui mesaj (tranzacția) în rețeaua Bitcoin. Celelalte noduri din rețea validează semnăturile criptografice și sumele tranzacției înainte de a o accepta. O tranzacție acceptată se cheamă că e realizată. O tranzacție în proces de acceptare se cheamă că e în aşteptare sau nerealizată.

Tranzacțiile se realizează prin intermediul wallet-urilor sau al aplicațiilor care se conectează la rețeaua Bitcoin și permit păstrarea și tranzacționarea monedei cu orice alt utilizator. Wallet-ul păstrează de regulă cheia privată ce este folosită pentru a semna tranzacțiile (v. Semnatura digitală; folosind codarea de tip DER), oferind o dovadă matematică că provine de la deținătorul wallet-ului. Semnătura deasemenea previne alterarea tranzacției de către altcineva după ce a fost emisă. Tranzacțiile sunt de regula confirmate de către rețea în următoarele 10 minute, prin procesul numit minare (v. Minarea).

Tranzacțiile conțin intrări (inputs) și ieșiri (outputs). Intrările conțin toate sumele anterior recepționate de către o adresă în tranzacții precedente, într-o forma cifrată și semnată digital (Proof of Ownership), iar ieșirile conțin sumele și adresele la care se virează respectivele sume. Suma intrărilor este mai mare sau egală cu suma ieșirilor. Diferența dintre suma intrărilor și suma ieșirilor reprezintă taxa de tranzacție (care nu figurează printre ieșiri, ci se deduce). De regulă, una din înregistrările din ieșiri o reprezintă adresa proprie și suma care urmează să-i rămână subiectului tranzacției. Ieșirile unei tranzacții vor figura printre intrările unei tranzacții ulterioare.

În figura de mai sus avem un exemplu de tranzacție prin care A îi virează 55 bitcoini lui B. Observăm că tranzacția include soldul lui A rezultat din precedente tranzacții, în care A a primit bitcoini de la C (30 BTC), D (25 BTC) si E (15 BTC). Suma totală pe care o deține A este de 70 bitcoini. Soldul lui A figurează în secțiunea de intrări. La ieșiri avem sumele care vor fi transferate celeilalte părți precum și semnătura digitală a lui A, care va autentifica că tranzacția provine de la A.

Mai observăm că, tot la ieșiri, figurează și suma care îi va reveni tot lui A și care reprezintă diferența dintre soldul total al lui A și suma pe care o transferă, plus o eventuală taxă de tranzacție. În cazul de față, lui A îi revine 70 – 55 – 0,05 = 14,95 BTC, unde taxa de tranzacție reprezintă 0,05 BTC.

Mai departe, observăm că tranzacția este distribuită tuturor nodurilor rețelei iar dupa procesul de minare, dacă totul decurge normal, blocul care o conține este adăugat în blockchain.

Un tip special de tranzacție îl constituie așa zisa tranzacție coinbase, care este o tranzacție fără intrări, creată de mineri. Există o singură tranzacție coinbase per bloc (de regulă prima din bloc, prin care minerii își revendică taxa de tranzacție).


Minarea în sistemul Bitcoin

Minarea este procesul folosit la confirmarea tranzacțiilor în așteptare. Acestea sunt incluse în lanțul de blocuri într-o ordine cronologică şi care protejează neutralitatea rețelei. De asemenea, minarea permite diferitelor noduri (calculatoare sau grupuri de calculatoare) din rețea să cadă de acord asupra condiției sistemului (consens). Pentru a fi confirmate, tranzacțiile trebuie să fie incluse într-un bloc ce respectă reguli stricte impuse şi verificate de rețeaua Bitcoin. Aceste reguli previn blocurile anterioare să fie modificate, pentru că astfel s-ar invalida toate blocurile următoare.

Minarea asigură stabilitatea, siguranța si corectitudinea în sistemul Bitcoin, prin aşa numitul concept dovadă de lucru (proof of work sau PoW). Minarea validează o tranzacție prin rezolvarea unei probleme matematice complexe. Astfel, blocul care conține tranzacția este inclus în blockchain, iar minerul primește o recompensă în monedă digitală drept premiu. Dificultatea rezolvării ecuațiilor crește odată cu numărul de mineri, motiv pentru care grupuri de mineri își unesc puterea de calcul formând așa numitele mining pools. Numărul bitcoinilor nou creați este înjumătățit periodic până când crearea de bitcoini noi va ajunge la 21 milioane (se estimează că ultimul bitcoin va fi minat în jurul anului 2140), după care minerii vor mai fi plătiți doar din taxele de tranzacție.

Să vedem pe un exemplu practic, ce se întâmplă în urma efectuării unei tranzacții. Presupunem că un emițător A trimite o sumă de bitcoini unui receptor B printr-o tranzacție. Tranzacția este distribuită tuturor nodurilor din sistemul Bitcoin. Nodurile sunt calculatoare care își pun la bătaie puterea de calcul pentru rezolvarea ecuațiilor matematice. Aceste noduri conțin toate registrul public în întregime (blockchain-ul). Această tranzacție este grupată împreună cu alte tranzacții într-un bloc, care încă nu este adăugat în blockchain. De acest lucru răspunde procesul de minare.

Minarea este procesul prin care toți minerii aferenți nodurilor sistemului (printr-o aplicație client Bitcoin) încearcă să rezolve o ecuație matematică care validează tranzacțiile din bloc. Doar un singur nod al rețelei, deci implicit un miner, poate face înregistrarea tranzacției, adică adăugarea blocului în blockchain, proces prin care este recompensat cu monedă digitală. Primul nod care rezolvă ecuația are dreptul să adauge blocul la blockchain și primește răsplata, moment în care celelalte noduri își întrerup procesul de validare și trec la următorul nod ce va trebui prelucrat.


Dovada de lucru (Proof of Work)

Conceptul de dovadă de lucru este mai vechi și a fost folosit pentru a preîntâmpina atacuri DoS (Denial of Service) sau a combate spam-ul în cazul trimiterii de e-mail-uri, pentru a trimite un e-mail, expeditorul fiind nevoit să efectueze calcule suplimentare, astfel încât costul trimiterii de e-mailuri să fie suficient de ridicat pentru ca spam-ul să nu mai aibă sens. Destinatarul e-mailului ar putea verifica cu ușurință calculele efectuate corect, în timp ce calculele pentru expeditor implică un anumit efort.

Sistemul Bitcoin folosește o dovada de lucru de tip Hashcash, bazată pe algoritmul SHA256 (v. Hash-ul). PoW este responsabil pentru costurile ridicate cu energia electrică în timpul minării, datorită procesului de calcul costisitor. Scopul principal al PoW este să securizeze rețeaua Bitcoin în timp ce nodurile sale vor găsi un acord cu privire la ordinea tranzacțiilor (deci a blocurilor/lanțurilor de blocuri) care vor fi adăugate în blockchain (realizarea consensului).

În tehnologia blockchain, efectuarea unui mecanism de dovadă de lucru sau calcularea rezultatelor se numește minerit iar actorii principali sunt minerii. Minerii încearcă să găsească un rezultat cu anumite proprietăți, prin miliarde de execuții ale operațiilor aritmetice. Execuția acestor operații necesită în jur de 10 minute (cele 10 minute de confirmare a unui bloc). Dacă găsesc un astfel de rezultat, vor fi remunerați în moneda minată. Tot procesul poate fi rezumat astfel: tranzacțiile sunt grupate într-un bloc, după care minerii verifică dacă aceste tranzacții sunt legitime prin efectuarea unor calcule. Primul miner care a găsit soluția primește recompensa blocului iar tranzacțiile validate sunt atașate blockchain-ului.

Minerii trebuie să rezolve o problemă de genul “De ce date de intrare am nevoie pentru a le pasa unei funcții hash pentru a obține un anume rezultat?”. Întrucât toți participanții la rețea cunosc algoritmul, ei vor putea verifica dacă soluția este corectă și drept urmare o pot confirma. Calculul în sine nu este dificil, însă necesită multă putere de calcul, dovada fiind dificil de realizat dar ușor de verificat.

Problema poate fi enunțată astfel: de ce număr avem nevoie, astfel încât concatenat cu un șir de caractere constant și aplicat unei funcții hash, rezultatul să fie un șir de caractere prefixat cu un anumit număr de zero-uri? Dificultatea problemei constă în a găsi acel număr, numit nonce (number that can only be used once), adică un număr care poate fi folosit doar o singură dată. Pe măsură ce crește numărul de mineri, deci implicit puterea de calcul a întregului sistem, va crește și dificultatea problemei prin suplimentarea numărului de zero-uri, astfel încât să se mențină acel interval de confirmare a unui bloc (de aproximativ 10 minute) constant.

Primul miner care a găsit soluția, o comunică celorlalți mineri iar aceștia o vor verifica foarte ușor, aplicând acel nonce șirului constant de caractere și trecându-l printr-un hash, astfel încât să rezulte un șir prefixat de atâtea zero-uri câte au fost specificate în dificultatea problemei. Dacă rezultatul este confirmat de ceilalți mineri, aceștia își întrerup munca și trec la următorul bloc, blocul curent fiind adăugat la blockchain.

Să vedem un exemplu de dovadă de lucru, presupunând că dificultatea a ajuns la un număr de patru zero-uri, șirul de caractere folosit în procesare fiind alcătuit din concatenarea unor date ale blocului, cum ar fi hash-ul blocului anterior, rădăcina Merkle, etc. Să presupunem că în urma concatenării a rezultat următorul șir: "qwerty...cvbnm" (șirul este mult mai lung dar din motive de înțelegere mai ușoară, ne limităm la cel expus). Fiecare miner va efectua următoarele calcule (DHash fiind o funcție dublu hash SHA256):

DHash ("qwerty...cvbnm 1") = "0155sd1fgsd533D5fgdg4m3H4GZS3D....."
DHash ("qwerty...cvbnm 2") = "0sb4yj35zsGN35Y4bzs3E7ha3d5nx3t5b....."
DHash ("qwerty...cvbnm 3") = "00asefnj574dm5y4MH3d4GDFH4S486....."
.....
DHash ("qwerty...cvbnm 37583837662") = "00003a5f44tga47sd3B65A5s4a4a3a45....."

Îngroșate sunt acele numere nonce aplicate de mineri acelorași date de intrare ("qwerty...cvbnm"). În sistemul Bitcoin, acele numere nonce nu sunt consecutive, ca în exemplul de mai sus, ci aleatoare. Minerul le testează unul câte unul, până dă de un rezultat care este prefixat de dificultatea cerută în acel moment, adică de 4 zero-uri, moment în care întrerupe procesare și îi anunță pe ceilalti mineri că a gasit numărul cerut.

Este important de menționat că nivelul de dificultate este în mod constant ajustat la numărul de mineri prezenți în rețea și la nivelul lor de sofisticare pentru a se asigura că un nonce se găsește în aproximativ cele 10 minute. Ceilalți mineri, care au acum datele complete de intrare, vor putea să verifice instantaneu dacă minerul a efectuat activitatea de proof of work și astfel vor putea valida blocul.


Probleme ale rețelei

După cum am văzut, fiecare miner deține propria copie a blockchain-ului, deoarece rețeaua Bitcoin este o rețea peer-to-peer, neexistând un loc central de depozitare a blockchain-ului.

Presupunem că un miner a găsit blocul următor cu numarul 363997. În acel moment, el distribuie blocul în rețea, iar minerii care l-au recepționat vor verifica și vor adăuga blocul la copia lor. Apoi abandonează propriile căutări ale blocului 363997 și trec la căutarea blocului 363998. Datorită latenței rețelei, distribuirea blocurilor găsite are loc de-a lungul mai multor minute, nu toți mineri primind în același timp informația că blocul a fost găsit, ei continuându-și căutarea, unii chiar reușind să găsească blocul, după care îl distribuie la rândul lor în rețea. Astfel se naște o nouă ramificație a blockchain-ului, operațiunea fiind cunoscută drept soft fork (a nu se confunda cu hard fork, care reprezintă operațiunea de creare a unei noi monede dintr-una existentă). Doar una dintre ramuri poate fi considerată validă, și anume ramura cu cele mai multe blocuri confirmate. Blocurile de pe ramura invalidată se numesc blocuri orfane (orphaned blocks). O arhivă a blocurilor orfane poate fi găsită la adresa https://blockchain.info/ orphaned-blocks.

Acum să presupunem că un al doilea miner, care nu a recepționat încă blocul găsit de primul miner, a găsit și el blocul 363997. El începe imediat distribuirea lui în rețea. Se poate întâmpla, ca unii mineri care nu au recepționat nici ei încă blocul găsit de primul miner, să recepționeze blocul găsit de cel de-al doilea miner. Ei vor verifica blocul și-l vor adăuga la copia proprie a blockchain-ului, după care trec la căutarea blocului 363998. Astfel s-a realizat soft fork-ul (ramificația). Teoretic se poate întâmpla ca ambele ramuri să tot crească, la un moment dat una din ele depășiind-o pe cealaltă, sistemul validând într-un târziu ramura mai lunga, blocurile invalidate fiind declarate orfane.

De obicei, asemenea ramificații se întâmplă la intervale de cateva luni și implică doar un bloc pe ramură, blocul al doilea ducând deja la invalidarea uneia dintre ramuri. La mijlocul anului 2015 s-a produs însă o ramificare care a generat două ramuri, ambele conținând câte trei blocuri, doar blocul 3634000 (al patrulea de pe una dintre ramuri) producând invalidarea celeilalte ramuri.

Datorită celor enunțate mai sus, s-au putut observa în anumiți clienți Bitcoin (wallet-uri) că tranzacții confirmate au dispărut pur si simplu. Asta deoarece au fost înregistrate în blocuri care ulterior (după cateva minute) au fost invalidate, asta ducând la invalidarea tuturor tranzacțiilor conținute în respectivele blocuri. Au fost cazuri în care anumiti utilizatori au efectuat cumpărături cu bitcoini și au ramas surprinși să constate că au primit produsele cu toate că tranzacțiile nu s-au confirmat. Tot din acest motiv, anumite aplicații de wallet confirmă o tranzacție doar dupa ce s-au validat încă cinci blocuri peste blocul care conține tranzacția efectuată (operație care necesită în jur de o oră). Un astfel de wallet este Electrum.


Epilog

După cum am mai specificat, mărimea inițială a unui bloc în care se stochează tranzacțiile cu bitcoini era de 1 Mbyte. Astfel, se puteau efectua doar 7 tranzacții pe secunda. Datorită faptului că tranzacțiile cu bitcoini au început să crească progresiv, s-a ajuns la concluzia că 1 Mbyte este prea puțin. Rețeaua Bitcoin s-a supraaglomerat, iar costul tranzacțiilor a crescut. De-a lungul timpului s-au purtat tot felul de discuții legate de o metodă care să rezolve problema “ambuteiajului pe rețea”.

A existat un curent care a militat pentru expandarea blocului de 1 Mbyte. Acesta a fost contracarat de cei care erau de părere că mărind dimensiunea blocului s-ar periclita decentralizarea rețelei, deoarece multe noduri n-ar mai avea capacitatea să proceseze blocurile noi. Astfel, s-a promovat un concept nou, numit Segregated Witness (SegWit), care ar ajuta la reducerea numărului de date pe tranzacție.

Noul concept permite stocarea într-un bloc doar a datelor care sunt relevante pentru o tranzacție, precum destinatarul și suma de transferat, celelalte date, cum ar fi semnătura digitală a expeditorului (v. Semnătura digitală), etc., urmând să se stocheze în altă parte. Astfel s-a creat suportul pentru o altă inovație, Lightning Network, care e în curs de implementare. Lightning Network introduce o nouă dimensiune software a rețelei Bitcoin, care permite multiplicarea numărului de tranzacții efectuate pe secundă, reducând astfel implicit și costurile tranzacției.

În iulie 2017 s-a organizat la New York o conferința, cunoscută drept The New York Agreement. În cadrul acesteia urma să se dezbată problema mai sus amintită. La conferință, 95% dintre mineri au căzut de acord ca din noiembrie 2017 să nu mai fie acceptate decât blocuri formate conform noii metode Segregated Witness, în care dimensiunea unui bloc a fost extinsă la 2 MByte. Astfel, s-a crescut numărul de tranzacții suportate pe secundă și s-a redus implicit costul tranzacției.

Doar o mică minoritate nu a aderat la noile principii, creând o nouă monedă, derivată din Bitcoin, numită Bitcoin Cash. Dimensiunea blocului în sistemul Bitcoin Cash este de 8 MByte, nemaifiind nevoie de suport pentru SegWit. Bitcoin Cash este construit pe același blockchain ca Bitcoin.

Început articol

Niciun comentariu:

Trimiteți un comentariu