Minatul monedelor virtuale: ce înseamnă?

Minatul monedelor virtuale: ce înseamnă? ©

Cred că una dintre confuziile majore în legătură cu monedele virtuale în general și cu minarea acestora în special este procesul de minat. Până de curând, eram la fel de confuzi în privința asta ca și tine.

Așa cum probabil știi, tehnologia din spatele monedelor virtuale se numește blockchain. Este o tehnologie revoluționară, e miezul de la gogoașă, e mai tare chiar decât Chuck Norris.

Dar ce este blockchain, de fapt?

Cea mai la îndemână – și cea mai folosită! – comparație este cea a unui registru. Iar articolele existente se cam opresc aici. Voi încerca eu să completez această comparație :)

Un block – din acest blockchain – este echivalentul unei pagini a unui registru imaginar. Iar fiecare bloc (sau pagină, dacă vrei) conține toate tranzacțiile ce nu au încăput pe pagina anterioară. Până aici e simplu, nu?

Problema este: cum ne asigurăm că odată completat blocul, nu este modificat de nimeni? Ei bine, aici intră minerii în scenă!

Interludiu: funcții hash

În matematică – și, implicit, în programare – există conceptul de funcții hash. Adică funcția e un ceva în care bagi ceva și scoți altceva. Iar treaba asta are două proprietăți foarte importante:

  1. Cât timp bagi același ceva, scoți același altceva
    1. Implicit, orice variație, oricât de mică, duce la alt rezultat;
  2. Este ireversibilă.

Dacă vrei, gândește-te la o funcție hash ca la o mașină de pâine: bagi în ea toate ingredientele, iese pâinea:

  1. Bagi de fiecare dată același fel și cantitate de făină, drojdie, apă, iese de fiecare dată aceeași pâine.
    1. Bagi altă făină sau altă cantitate de făină, iese pâinea altfel.
  2. Odată făcută pâinea, nu o poți descompune, să vezi ce cantități s-au folosit.

Buun, acum, că știm cum funcționează funcțiile hash, ce treabă au minerii în toată povestea asta? Probabil intuiești deja: minerii validează tranzacțiile dintr-un bloc (sau pagină a unui registru) în felul următor: combină hash-ul blocului curent cu hash-ul blocului anterior în așa fel încât urmează un pattern. Cum astea două singure sunt fixe, se mai adaugă încă o variabilă – numită nonce – astfel încât acel pattern să poată fi obținut (în cazul bitcoin, hash-ul rezultat trebuie să înceapă cu 000000000000000000, e.g.00000000000000000055de8b682750c3e19fd9ea037ef166d9d95332b7801465). Minerii caută, de fapt, acest nonce.

nonce = Number used Once. În cazul de față este un număr hexadecimal

Ok, și unde e dificultatea? Așa cum am zis, funcțiile hash nu sunt reversibile, ceea ce înseamnă că nu sunt nici predictibile, prin urmare trebuie să încerci o grămadă de nonce-uri, până găsești pattern-ul corect. Dacă bagi trei valori în ea, nu poți afla ce va scoate decât dacă… vei calcula acel hash. Iar tot procesul ăla este consumator de resurse.

Exemplu supersimplificat

Într-un bloc pot fi o mulțime de tranzacții (aici sunt 1660, dar în blocul anterior au fost 2300, mai înainte au fost vreo 900 șamd). Fiecare tranzacție are și ea un hash al ei. Pentru a valida un bloc, facem un hash al tuturor tranzacțiilor. Să-i zicem acestui hash H1. Hash-ul ăsta poate arăta oricum.

Apoi luăm hash-ul blocului anterior (cel care care patternul de care ziceam mai sus). Să-i zicem H2.

Noi acum trebuie să combinăm aceste două hash-uri astfel încât să ne iasă pattern-ul de mai sus. Așa cum am zis, astea două valori sunt fixe, deci introducem și un nonce și începem să incrementăm până iese hash-ul corect:

hash( H1 + H2 + 1) => 1dab26f2ceff7b715940dd20121f6c5217a6952d (greșit)
hash( H1 + H2 + 2) => 20bce8308e10db3efc553d5e308f84be4c9fa9a3 (greșit)
hash( H1 + H2 + 3) => b483bcdd3c4cc7be79fa6552055c242c2e826228 (greșit)
...
hash( H1 + H2 + fb39af50f0332fdb8aa22669b50f0f1015648f606d4d9ea191e5ff2e98c7d297) => 0000000000000000007111b3574692eb9eaa081bced91a2d280d32f67e9fdddb (corect!)

Întorcându-ne la exemplul cu pâinea, e ca și cum ai avea o rețetă ce îți zice toate ingredientele mai puțin cantitatea de făină, iar treaba ta este să găsești cantitatea corectă.

Eh, tot procesul ăsta trebuie repetat la fiecare bloc, iar toată operațiunea asta este, așa cum probabil îți imaginezi, destul de consumatoare de resurse și de timp.

Cum hash-ul fiecărui bloc este format (și) din hash-ul blocului anterior, se formează un lanț ce nu poate fi modificat (odată modificat un hash, absolut toate blocurile următoare trebuiesc recalculate).

Acum, probabil că ai auzit și de dificultatea (sau complexitatea) minării. Ce înseamnă asta? În linii mari, complexitatea aia stă în forma pattern-ului. Așa cum am zis, hash-ul rezultat acum trebuie să aibă 18 0-uri la început. Acum opt ani, era nevoie doar de 8 0-uri la început.

De ce se întâmplă asta? Pentru a permite validarea unui bloc la fiecare zece minute, indiferent de puterea de calcul. Altfel spus, cu cât crește numărul de mineri, cu atât mai complexă va fi toată treaba, astfel încât validarea să se întâmple la fiecare zece minute.

Aceste zece minute sunt importante și asigură integritatea întregului lanț, prevenind modificarea blocurilor anterioare.

Aceste monede sunt generate automat pentru fiecare bloc, dar doar până când se va atinge numărul maxim de monede – în cazul BTC vor fi disponibile maximum 21 milioane.

Bun, toată povestea asta se numește Proof of Work și găsirea unui nonce valid este răsplătită cu un anumit număr de monede – în cazul bitcoin, sunt 12.5 BTC, iar suma se înjumătățește la fiecare 210.000 blocuri validate. Cum dificultatea e setată pentru a mina un bloc la fiecare zece minute, asta înseamnă că înjumătățirea asta are loc la fiecare patru ani.

Toți minerii luptă pentru a valida primii blocurile astea. Primul care a validat primește cei 12.5 BTC. Restul… nu primesc nimic, chiar dacă reușesc să genereze un nonce valid.

Pe lângă cei 12.5 BTC, pentru fiecare tranzacție dintr-un bloc minerul primește ȘI un comision. După ce se vor genera maximum de monede, minerii vor primi primi doar acest comision. Evident, cu cât scade numărul de BTC primiți la minat, cu atât va crește și comisionul, astfel încât minerii vor fi motivați să consume energie și putere de calcul făcând asta.

Comision mare înseamnă că BTC nu este o monedă potrivită pentru plăți mărunte, de zi cu zi, lăsând loc monedelor mai noi – Lumen sau XRP.

Doar că, odată validat de un miner, acel nonce trebuie să fie validat și de alți mineri. Pe scurt, asta înseamă că ceilalți mineri verifică nonce-ul găsit, astfel încât toată rețeaua să fie de acord că ultimul bloc adăugat în lanț e valid. Procesul asta se numește Proof of Stake și este infinit mai ușor de calculat.

Revenind la exemplul cu pâinea, e ca și cum ai primi o cocătură și ar trebui să constați că are formă și gust de pâine și că are greutatea care trebuie. :)

Acestea fiind spuse, sper să fi explicat bine ideea din spatele blockchain-ului și rolul minerilor. Încă învăț ce și cum, deci informațiile s-ar putea să fie incomplete sau, mai grav, eronate. Dacă ai completări, nu ezita să le lași!

Adaugă un comentariurăspuns pentru

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter