Descriere completă a Segwit – introducere pentru începători și nu numai

a segwit kriptopénz hírek mycryptoption

Dacă urmărești evenimentele din lumea criptomonedelor, ai întâlnit cu siguranță și termenul Segwit sau „Segregated Witness”. Multă lume crede că acesta va revoluționa Bitcoin, în timp ce alții au fost atât de dezamăgiți de el încât au preferat să-și aleagă propriul drum, cu o formă nouă de Bitcoin denumită Bitcoin Cash.

Vom începe articolul cu prezentarea unor noțiuni de bază, înainte de-a trece la Segwit. Cum funcționează tranzacțiile efectuate în Bitoin?

Să presupunem că Sorina dorește să-i trimită lui Claudiu un anumit număr de Bitcoin. Cum funcționează sistemul de tranzacții pe rețeaua Bitcoin? Tranzacțiile Bitcoin diferă foarte mult de cele fiat. Dacă Sorina i-ar da lui Claudiu 5 RON, ea va scoate fizic 5 RON din portofel și îi va înmâna lui Claudiu. În cazul Bitcoin nu funcționează așa. Fizic nu deții Bitcoin, ci doar dovada faptului că ai Bitcoin.

Există încă două lucruri pe care trebuie să le știi:

Minerii validează tranzacțiile prin introducerea datelor în blocuri. În schimbul acestui serviciu, ei percep o taxă de tranzacție. Atunci când vine vorba de banii fiat, nu prea trebuie să urmărești de unde și cum ai obținut o anumită bancnotă. De exemplu, deschide-ți portofelul acum și scoate toate bancnotele și monedele aflate în el. Poți spune exact de unde ai obținut fiecare dintre acestea în parte? Probabil nu. În cazul Bitcoin însă, istoricul fiecărei tranzacții este notat.

Vom aprofunda modul în care se desfășoară tranzacția bitcoin dintre Sorina și Claudiu. O tranzacție are două părți: intrarea și ieșirea (input și output). Întreaga tranzacție va purta un nume, pe care îl vom stabili la final. Pentru moment, să vedem dinamica.

Input-ul tranzacției

Ca tranzacția să aibă loc, Sorina trebuie să obțină bitcoin pe care l-a primit cu ocazia unor tranzacții anterioare. Nu uita, în Bitcoin fiecare monedă în parte este contabilizată prin istoricul tranzacției.

Să zicem că Sorina trebuie să extragă acest bitcoin din următoarele tranzacții, numite TX (0), TX (1) és TX (2). Aceste trei tranzacții sunt adunate și obținem tranzacția de intrare, numită TX (INTRARE).

bemenet

Output-ul tranzacției

Fundamental, ieșirea va avea un număr de bitcoin pe care Claudiu îi va poseda în urma tranzacției, iar restul (change) rămas va fi transferat înapoi Sorinei. Acest rest va deveni valoarea de intrare a tranzacțiilor viitoare ale Sorinei. Tranzacția de mai jos este una foarte simplă, având o singură intrare (în afară de rest); însă există tranzacții ce pot avea ieșiri multiple.

kimenet

Așa arată schema de bază a tranzacției. Pentru ca acest proces să poată fi parcurs, trebuie îndeplinite anumite condiții.

Condițiile tranzacției

TX (input)> TX (output). Tranzacția de intrare trebuie să fie întotdeauna mai mare decât cea de ieșire. În orice tranzacție, diferența dintre intrare și ieșire (output+change) este acea taxă de tranzacție pe care o colectează minerii. Prin urmare: Taxe de tranacții = TX(input) – (TX (output) + change).

Pe partea intrării: TX (0) + TX (1) + TX (2) = TX (input). Dacă Sorina nu dispune de banii necesari pentru efectuarea tranzacției, pur și simplu minerii vor respinge tranzacția. Claudiu trebuie să arate că poate oferi dovada necesară obținerii bitcoin. Sorina va bloca tranzacțiile cu adresa publică a lui Claudiu; el va trebui să producă cheia sa privată pentru a debloca tranzacțiile și accesa taxele.

Sorina mai trebuie să verifice și dacă ea deține dreptul de a trimite bitcoin mai departe. Va putea face acest lucru prin semnarea tranzacțiilor cu semnătura ei digitală (altfel spus, cheia ei privată). Oricine va putea decoda asta prin utilizarea cheii sale publice și va putea verifica dacă datele au trimise într-adevăr de către Sorina. Această dovadă este denumită „Signature data” (date semnătură).

 Deci care va fi numele întregii tranzacții?

Datele de intrare (inclusiv signature data) și datele de ieșire vor fi adunate și vor fi hash-uite cu ajutorul algoritmului de hashing SHA 256. Hash-ul de ieșire va fi numele dat acestei tranzacții.

Codul detaliilor tranzacției

Așa arată tranzacția sub formă de cod. Să presupunem că Sorina dorește să-i trimită lui Claudiu 0,0015 BTC, iar în acest scop trimite un input în valoare de 0,0015770 BTC. Detaliile tranzacției vor arăta în felul următor:

részletek

Primul lucru care apare este numele tranzacției, altfel spus valoarea hash-ului de intrare și ieșire:

tranzació neve

Vin_sz este numărul datelor de intrare – deoarece Sorina trimite datele folosind doar una dintre tranzacțiile anterioare, acesta este 1.

Valoarea Vout_sz este 2, fiindcă singura ieșire este Claudiu și restul (change).

Datele de intrare sunt acestea:

bemeneti adat

Prima parte indică faptul că el va primi 0,0015.

A doua parte arată că 0,00005120 BTC va fi restul primit de Sorina.

Să ne amintim că input-ul inițial a fost de 0,0015770 BTC – ceea ce este mai mare decât 0,0015 + 0,00005120. Diferența dintre cele două valori este taxa de tranzacție pe care o colecționează minerii. În acest fel se prezintă anatomia unei tranzacții simple.

Înainte de a continua, să vorbim despre un tip special de tranzacție care se numește Coinbase. Fundamental, aceasta este prima dintre datele de tranzacție aflate în bloc și reprezintă recompensa pe care o primesc minerii în urma minatului blocului. Momentan, valoarea recompensei este de 12,5 BTC. Aceste tranzacții n-au date de intrare ci doar de ieșire.

Ce este problema de scalabilitate?

Toate tranzacțiile de pe blockchain au loc deoarece minerii efectuează minatul blocurilor și introduc tranzacțiile în aceste blocuri pentru a le valida. Există foarte multe tranzacții care pot fi introduse în blocuri. Când Bitcoin a fost conceput pentru prima oară, nu s-a stabilit o limită pentru mărimea blocului.

Dar Satoshi Nakamoto (fondatorul Bitcoin) a fost obligat să impună o limită pentru că a prevăzut un posibil atac DoS (blocarea serviciului) pe blockchain, săvârșit de hackeri și trolls. Aceștia ar fi putut umple blocurile cu tranzacții spam și ar fi putut mina blocuri inutil de mari, în vederea blocării sistemului. Ca urmare, mărimea blocului a fost limitată la 1 MB.

Acest lucru era funcțional la început, dar pe măsură ce popularitatea sa a crescut din ce în ce mai mult, tranzacțiile au început să se acumuleze. Graficul de mai jos arată numărul tranzacțiilor efectuate lunar:

tranzakciók száma

După cum vedeți, numărul tranzacțiilor crește de la o lună la alta; iar cu limita de mărime a blocului de 1 MB, Bitcoin era capabil să gestioneze doar 4,4 tranzacții pe secundă. Principala cauză pentru care tranzacțiile sunt voluminoase și ocupă atât de mult spațiu sunt datele de semnătură pe care le conțin. Ideea e că 65% din spațiul utilizat de tranzacție îl ocupă datele de semnătură.

Datele de semnătură

Pe măsură ce numărul de tranzacții s-a mărit treptat, rata de completare a crescut în consecință. De cele mai multe ori, pentru a-și împlini tranzacțiile, lumea a fost nevoită să aștepte până ce erau create noi blocuri. În acest fel au apărut o serie de tranzacții restante, iar singurul mod de prioritizare a lor a fost plata unor taxe suficient de mari să atragă și să stimuleze minerii, pentru a se ocupa de ele.

Astfel a fost introdus sistemul „replace-by-fee”, care arată cam așa. Să zicem că Sorina îi trimite 5 bitcoin lui Claudiu, dar tranzacția nu este efectuată din cauza unei întârzieri. Tranzacția nu poate fi „ștearsă” fiindcă odată trimiși, bitcoinii nu mai pot fi întorși din drum. Cu toate acestea, ea poate desfășura cu Claudiu o altă tranzacție de 5 bitcoin, dar de această dată cu o taxă de tranzacție suficient de mare să stimuleze minerii. Îndată ce minerii îi introduc tranzacția în bloc, aceasta suprascrie tranzacția anterioară și o anulează.

Chiar dacă sistemul „replace-by-fee” este profitabil minerilor, utilizatorilor le este destul de incomod. Iată un grafic al timpilor de așteptare întâmpinați de utilizatori care plătesc cea mai mică taxă de tranzacție posibilă:

várakozási idő

Dacă plătești taxa cea mai mică, trebuie să aștepți 13 minute ca tranzacția să fie procesată. O posibilă soluție ce viza creșterea vitezei tranzacțiilor a fost introducerea Lightning Network.

Ce este Lightning Network?

Lightning Network este un sistem de microplată în afara lanțului, conceput ca tranzacțiile să funcționeze mai rapid în blockchain. Acestea au fost descrise de Joseph Poon și Tadge Dryja în white paper-ul lor care și-a propus să rezolve problemele legate de limita mărimii blocului și întârzierea tranzacțiilor. Lightning Network funcționează în partea superioară a Bitcoin și este adesea denumit „Stratul 2” (Layer 2).

După cum notează Jimmy Song în articolul său: „Lightning Network funcționează prin crearea unei tranzacții semnate dublu. Adică avem un nou cec care necesită semnătura ambelor părți pentru a fi valabil. Cecul stabilește care va fi suma pe care o parte o va trimite către cealaltă. Deoarece noile microplăți sunt efectuate de la o parte la alta, suma din cec se modifică și ambele părți semnează rezultatul.”

Rețeaua va permite desfășurarea tranzacțiilor dintre Sorina și Claudiu fără ca acestea să fie frânate de către o terță parte, minerul. Pentru activarea acestei opțiuni, Sorina și Claudiu trebuie să semneze tranzacția înainte ca aceasta să fie difuzată în rețea. Această semnătură dublă este esențială pentru ca tranzacția să poată fi efectuată.

O altă problemă

Deoarece verificarea dublă depinde în mare măsură de identificatorul tranzacției, dacă din anumite motive identificatorul se schimbă acesta va provoca o eroare în rețea și Lightning Network nu se va activa. În acest caz, dacă te întrebi care este identificatorul tranzacției, acesta nu este altul decât numele său – cu alte cuvinte, hash-ul tranzacțiilor de intrare și ieșire. Pe baza exemplului prezentat înainte, acesta este identificatorul tranzacției:  

példa segwit

Te gândești probabil: ce ar determina modificarea identificatorului tranzacției? Asta ne-a condus către o eroare interesantă în sistemul Bitcoin, numită „maleabilitatea tranzacțiilor”.

Ce este maleabilitatea tranzacțiilor?

Înainte să putem înțelege ce este maleabilitatea tranzacției, este important să recapitulăm una dintre cele mai importante funcții din modelul economic crypto … hashing-ul. Funcția hash poate lua o intrare de orice lungime, dar ieșirea pe care o va furniza va avea întotdeauna o lungime fixă. Hashing-ul mai are o calitate importantă, și anume: orice mică modificare a datelor de intrare va schimba hash-ul de ieșire în mod drastic. Cunoașterea acestei funcții este necesară pentru înțelegerea erorii maleabilității tranzacțiilor.

Încă un lucru de precizat în legătură cu blockchain:

Acesta este imuabil, ceea ce înseamnă că odată ce datele au fost introduse în bloc, acestea nu vor mai putea fi modificate niciodată. În timp ce acest fapt ce oferă o plasă de siguranță împotriva corupției, a existat o singură slăbiciune pe care nimeni nu a prevăzut-o.

Ce s-ar întâmpla dacă datele ar fi fost modificate chiar înainte ca acestea să ajungă în blockchain? Deși lumea își dă seama ulterior de acest lucru, nu se poate face nimic în acest sens fiindcă datele odată introduse nu mai pot fi modificate. În esență, acesta este motivul pentru care maleabilitatea tranzacțiilor reprezintă o problemă.

De ce are loc maleabilitatea tranzacțiilor?

După cum s-a dovedit, semnătura adiacentă datelor de intrare poate fi manipulată, care la rândul ei poate modifica identificatorul tranzacției. De fapt, în primul rând poate face să pară că o tranzacție nici n-a avut loc. Să vedem un exemplu.  

Să presupunem că Radu dorește ca Ioana să-i trimită 3 BTC. Ioana inițiază o tranzacție de 3 BTC pe adresa publică a lui Radu și pe urmă o trimite minerilor în scopul aprobării. În timp ce tranzacția își așteaptă rândul, Radu poate profita de maleabilitatea tranzacției pentru a modifica semnătura Ioanei și identificatorul tranzacției.

Acum există șansa ca această tranzacție falsificată să fie aprobată înainte de -a fi aprobată cea a Ioanei, ceea ce suprascrie tranzacția Ioanei. Atunci când Radu primește cei 3 BTC, îi poate spune Ioanei că de fapt nu i-a primit. Pe urmă Ioana vede că într-adevăr tranzacția nu a fost efectuată și va trimite din nou acea cantitate de bitcoin. Ca urmare, Radu va primi 6 BTC în loc de 3.

Maleabilitatea tranzacției a fost posibilă fiindcă datele de semnătură puteau fi manevrate. Deci pe lângă faptul că datele semnăturii ocupă prea mult spațiu, maleabilitatea tranzacției reprezenta o amenințare serioasă.

Soluția și frica unui hard fork

Întorcându-ne în 2012, lumea a analizat ideea separării datelor semnăturii de tranzacții. Persoane ca Russell O’Connor, Gregory Maxwell, Luke Dashjr și Dr. Adam Back au depus eforturi ca acest lucru să funcționeze, dar în final s-au lovit de un perete. Ei și-au dat seama că singura soluție este un hard fork, însă nimeni nu dorea să-l facă.

Dar în 2015, Dr. Peter Wiulle de la Blockstream a venit cu o posibilă soluție.

Lanțuri laterale și Segwit

Noțiunea de lanț lateral este cunoscută în cercurile Bitcoin de mult timp. Ideea e foarte simplă: ai un lanț paralel care rulează alături de cel principal. Lanțul lateral este atașat celui principal printr-un robinet cu două sensuri.

Așa arată concepția inițială a Blockstream în legătură cu blockchain-ul Bitcoin și un lanț lateral:

oldallánc segwit

Dacă creația lui Dr. Wiulle este atât de simplă, de ce nu-i este adăugată o funcție acestui lanț lateral? Această funcție ar include datele de semnătură ale tuturor tranzacțiilor, separând-o de lanțul principal din proces. Această funcție este denumită Segregated Witness sau Segwit.

Așa arată un bloc după ce-a implementat segwit:

blokk a segwit után

Prin eliminarea datelor de semnătură au fost rezolvate două probleme dintr-odată: spațiul ocupat în blocuri a fost eliberat iar tranzacțiile au scăpat de maleabilitate. Exista însă un aspect la care mai trebuia lucrat. Activarea Segwit era posibilă doar printr-un hard fork, pe care toată lumea dorea să-l evite. Dezvoltatorii au analizat alternativele soft fork, iar Luke Dashjr a găsit soluția.

Segwit ca soft fork

Pentru a utiliza Segwit ca soft fork, dezvoltatorii au elaborat 2 inovații geniale. Acestea sunt următoarele:

-Aranjarea datelor de semnătură în lanțul lateral, sub forma unui arbore Merkle.

-Păstrarea unei părți a datelor de semnătură în noua parte a blocului.

 Ce este arborele Merkle?

merkle fa

Imaginea de mai sus ne prezintă cum arată un arbore Merkle. Într-un arbore Merkle, fiecare nod ce nu reprezintă o frunză este hash-ul nodurilor lor copil (child).

Nodul frunză: Nodurile frunzelor se găsesc la nivelul cel mai de jos al arborelui. Așadar, conform imaginii de mai sus nodurile frunză vor fi L1, L2, L3 și L4.

csomópontok

Nodurile copil: În cazul unui nod, nodurile de sub nivelul său care se hrănesc din acesta sunt nodurile copil. Conform diagramei, nodurile „Hash 0-0” și „Hash 0-1” sunt nodurile copil ale nodului „Hash 0”.

Nodul rădăcină: Nodul unic aflat la cel mai înalt nivel, cu inscripția „Top Hash”, este nodul rădăcină sau rădăcina Merkle.

top hash segwit

Toate tranzacțiile din interiorul blocului sunt aranjate sub forma arborelui Merkle și toate rădăcinile Merkle ale acestor date sunt păstrate în blocuri. Toate tranzacțiile pot fi accesate prin parcurgerea rădăcinii Merkle.

Ceea ce au propus dezvoltatorii Segwit a fost lansarea unui alt arbore Merkle, dar numai cu date de semnătură. Aceasta a fost prima inovație.

A doua inovație

Prin intermediul celei de-a doua inovații s-a aflat unde trebuie așezată exact datele semnăturii în rădăcina Merkle. Dezvoltatorii știau că pentru a activa soft fork-ul segwit, rădăcina semnăturii trebuie introdusă în bloc. Locul ales de către aceștia a fost punctul de tranzacție coinbase. Să nu uităm că tranzacția coinbase este prima tranzacție efectuată într-un bloc; fundamental, este tranzacția care oferă recompensa minerilor și nu are o valoare input.

Ce n-au observat dezvoltatorii a fost că procedând astfel s-au împiedicat de ceva în mod involuntar, ceea ce mai târziu putea avea multe consecințe.

Așezând semnătura merkle într-un nou loc în bloc, măreau din ce în ce mai mult mărimea blocului, fără ca mai întâi să crească limita mărimii blocului. Astfel, ceea ce a realizat segwit a fost că a crescut dimensiunea blocului și a făcut întreaga tranziție compatibilă în sens invers – mai precis, un soft fork. A fost o descoperire majoră care a oferit rețelei Bitcoin o soluție temporară în legătură cu problemele de scalabilitate.

Convenția de scalabilitate de la Hong Kong și detractorii Segwit

Cu ocazia convenției din Hong Kong, în anul 2015 Dr. Wiulle a prezentat propunerea Segwit, care a fost primită bine de către cei mai mulți. S-a presupus că acesta era răspunsul căutat de către toți; se așteptau ca toată lumea să-l adopte, dar nu s-a întâmplat tocmai așa. Unii mineri au avut o mare problemă cu Segwit.

Atunci când dezvoltatorii au construit Segwit, i-au adăugat o clauză specială: poate fi activat doar atunci când obține o aprobare de 95% din partea minerilor. La urma urmei reprezintă o schimbare uriașă în sistem și s-au gândit că obținerea unei majorități zdrobitoare este calea de urmat. Dar în realitate acest lucru a provocat o ruptură în sistem. Câțiva mineri nu doreau ca Segwit să se activeze. Aceștia se temeau că din moment ce spațiul disponibil pentru blocuri crește, tranzacțiile vor avea mai mult loc la dispoziție iar asta reduce timpul de așteptare. În acest fel se reduc taxele de tranzacții și este eliminat sistemul „replace-by-fee”, principala lor sursă de venit (cu excepția recompensei de bloc).

Ca urmare, implementarea Segwit a fost blocată, iar asta i-a înfuriat pe utilizatori.

În contextul unui blockchain, utilizatorii sunt persoane care rulează noduri în rețeaua blockchain. Ei și-au dat seama că trebuie să facă ceva pentru a-i încuraja pe mineri să exploateze blocuri activate de segwit.

Pe lângă mineri, au fost și numeroși dezvoltatori nemulțumiți de soluția Segwit. În ochii lor, o soluție temporară nu este destul de bună; aceștia considerau că este nevoie de ceva permanent, de exemplu creșterea mărimii blocului. Un client bitcoin care oferea creșterea mărimii blocului, denumit Bitcoin Unlimited, a câștigat mult sprijin. Directorul DCG, Barry Silbert, considera că există multă agitație în comunitatea Bitcoin, iar dacă nu se iau măsuri aceasta va genera tensiuni. El a chemat pe toată lumea la o întâlnire în New York. Rezultatul acestei întâlniri este cunoscut de toată lumea sub numele de „Acordul de la New York”.

Convenția de la New York

Membrii marcanți ai comunității Bitcoin s-au întâlnit la New York pe 21 mai 2017. După o lungă dezbatere s-a ajuns la un compromis între tabăra pro-segwit și cea care susținea mărirea dimensiunii blocului. Înțelegerea, botezată și Segwit2x, cuprinde două etape:

1. etapă: Pornește Segwit. Procentul minerilor care trebuie șă-și dea acordul se reduce de la 95% la 80%. În urma soft fork-ului, fiecare miner care extrag blocuri ce nu sunt pro-segwit, vor fi respinși automat din blockchain. Minerii care susțineau acest pas au început să includă litere „NYA” în blocurile lor.

 2. etapă: la 6 luni după activarea segwit, blockchain-ul va trece printr-un hard fork, iar mărimea blocului va crește de la 1 MB la 2 MB.

Urmările Acordului de la New York

Au existat câteva voci puternice care au criticat Segwit2x. De fapt, de la ele au pornit o serie de evenimente care au avut ca rezultat nașterea Bitcoin Cash. Însă numeroși membri ai comunității au decis că Segwit este cea mai bună cale pentru evoluția Bitcoin. Cu toții au fost foarte emoționați în legătura cu apropiata activare Segwit. Dar atunci s-a întâmplat ceva, iar din cauza multor complicații minerii au ratat ocazia.

Segwit n-a fost activat atunci când era programat, iar asta a provocat o panică generală fiindcă se considera că va împărți și mai mult comunitatea Bitcoin Core. Toate acestea au influențat și prețul Bitcoin, care a scăzut de la 2500 la 1900 de dolari. Această scădere a uimit comunitatea minerilor și a pus-o în acțiune. Astfel, până în 20 iulie, BIP 91(Bitcoin Improvement Proposal) – primul stagiu al activării Segwit – era terminat. La 8 august s-a ajuns în punctul de unde nu mai există cale de întoarcere și în final, pe 24 august 2017 Segwit a fost activat.

Avantajele Segwit:

-Crește numărul tranzacțiilor pe care le poate efectua un bloc.

-Reduce taxele de tranzacții.

-Reduce dimensiunea fiecărei tranzacții individuale.

-Tranzacțiile pot fi confirmate mai repede, fiindcă scade timpul de așteptare.

-Contribuie la scalabilitatea Bitcoin.

-Din moment ce crește numărul tranzacțiilor din fiecare bloc, taxa totală pe care o poate încasa un miner se va mări.

-Elimină problema de maleabilitate a tranzacției.

-Ajută activarea protocolului Lightning.

-Elimină problema pătratică a hashing-ului: Hashing-ul pătratic este o problemă ce apare odată cu creșterea dimensiunii blocului. Problema e că în anumite tranzacții hash-ul semnăturii apare pe o scală pătratică.

Practic, dublarea valorii tranzacțiilor într-un bloc va dubla numărul tranzacțiilor, care la rândul său va dubla cantitatea datelor de semnătură aflate în fiecare dintre aceste tranzacții. În acest fel tranzacțiile ar avea dimensiuni și mai mari, ceea ce ar prelungi în mare măsură timpul tranzacției. Astfel, părților rău intenționate care eventual doresc să umple blockchain-ul cu spam li se deschide o poartă.

Segwit rezolvă acest lucru modificând calcularea hash-ului semnăturii, iar ca urmare întregul proces devine mai eficient.

Dezavantajele Segwit

 -Minerii primesc taxe mai mici pentru fiecare tranzacție.

-Implementarea este complexă și toate wallet-urile trebuie să implementeze segwit separat. Există mari șanse să iasă perfect din prima.

-Crește semnificativ utilizarea resurselor deoarece capacitatea, tranzacțiile și lățimea de bandă vor crește.

-După cum a arătat exemplul Bitcoin Cash, acesta împarte în cele din urmă comunitatea Bitcoin Core.

-O altă problemă a Segwit este întreținerea. Lanțul lateral ce conține datele de semnătură va trebui întreținut și de mineri. Cu toate acestea, spre deosebire de blockchain-ul principal, minerii nu au beneficii financiare făcând acest lucru; ei trebuie să procedeze în mod pro bono sau va trebui elaborată o schemă de recompensă care să-i stimuleze.

Mai multe articole