{"id":708,"date":"2013-12-30T23:16:39","date_gmt":"2013-12-30T20:16:39","guid":{"rendered":"http:\/\/esanu.name\/vitalie\/?p=708"},"modified":"2013-12-30T23:16:39","modified_gmt":"2013-12-30T20:16:39","slug":"bitcoin-cum-lucreaza","status":"publish","type":"post","link":"http:\/\/esanu.name\/vitalie\/?p=708","title":{"rendered":"Bitcoin. Cum lucreaz\u0103."},"content":{"rendered":"<figure id=\"attachment_715\" aria-describedby=\"caption-attachment-715\" style=\"width: 190px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-715\" alt=\"Bitcoin\" src=\"http:\/\/esanu.name\/vitalie\/wp-content\/uploads\/2013\/12\/bitcoin-rotate.gif\" width=\"200\" height=\"200\" \/><figcaption id=\"caption-attachment-715\" class=\"wp-caption-text\">Reprezentarea simbolic\u0103 a Bitcoin<\/figcaption><\/figure>\n<p>Din 2010, de c\u00e2nd am auzit prima dat\u0103 de Bitcoin, am citit multe explica\u021bii. Majoritatea lor fiind artificial limitate \u00een profunzime pentru a face articolul pe \u00een\u021belesul tuturor. \u00cen\u021belegerea acestui protocol \u00een detalii este destul de greu. Multe articole jurnalistice, populiste, scriu despre posibilul impact financiar \u0219i social, nu \u0219i despre modul \u00een care lucreaz\u0103 acest protocol. Pentru a vedea pe deplin impactul lui, trebuie s\u0103 se \u00een\u021beleag\u0103 cum el \u00eentr-adev\u0103r func\u021bioneaz\u0103.<\/p>\n<p>Pentru a \u00een\u021belege acest articol trebuie s\u0103 ave\u021bi c\u00e2t de c\u00e2t cuno\u0219tin\u021be de no\u021biuni despre cheie public\u0103\/privat\u0103, semn\u0103tur\u0103 digital\u0103 \u0219i func\u021bii hash. Aceste no\u021biuni nu sunt foarte complicate, deschide\u021bi wikipedia \u0219i citi\u021bi.<\/p>\n<p>C\u00e2t nu ar p\u0103rea de straniu, criptografia este ceea ce st\u0103 la bazele Bitcoin-ului. Este Bitcoin-ul o moned\u0103, este o metod\u0103 de a transmite mesaje secrete? De fapt, Bitcoin-ul este o metod\u0103 de a securiza tranzac\u021biile. De a proteja utilizatorii contra furturilor \u0219i de a face anonime tranzac\u021biile.<\/p>\n<p>Eu voi \u00eencerca s\u0103 v\u0103 explic cum lucreaz\u0103 Bitcoin, construind un protocol similar cum ar fi <b>Moldocoin<\/b>. Vom \u00eencerca \u00eempreun\u0103 s\u0103 construim acest sistem pas cu pas, pentru a vedea la fiecare etap\u0103 ce probleme apar \u0219i cum le putem rezolva.<\/p>\n<p><b>Primul pas. Cum s\u0103 invent\u0103m o moned\u0103 virtual\u0103?<\/b><\/p>\n<p>La prima vedere, o moned\u0103 virtual\u0103 \u2013 pare imposibil. Presupunem c\u0103 o oarecare persoan\u0103, cu numele Alinu\u021ba, are ceva monede virtuale \u0219i dore\u0219te s\u0103 le cheltuie. Dac\u0103 \u0410linu\u021ba are un \u0219ir de bi\u021bi ca monede, ce-i poate interzice ei ca acela\u0219i \u0219ir de bi\u021bi s\u0103-i cheltuie din nou, \u0219i apoi iar \u0219i iar \u2026 la infinit? Sau dac\u0103 cineva copie acel \u0219ir de bi\u021bi, s\u0103-i cheltuie mai departe la infinit.<\/p>\n<p>Aceste\u0430 sunt doar dou\u0103 din problemele care trebuie rezolvate pentru a avea bani virtuali.<\/p>\n<p>S\u0103 \u00eencerc\u0103m s\u0103 g\u0103sim o solu\u021bie pentru prima problem\u0103, unde Alinu\u021ba folose\u0219te un \u0219ir de bi\u021bi ca bani, contra falsific\u0103rii acestui \u0219ir. S\u0103 presupunem c\u0103 Alinu\u021ba vrea s\u0103-i transmit\u0103 altei persoane, lui Bul\u0103, un moldocoin. Pentru aceasta, Alinu\u021ba scrie un mesaj: \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin\u201d. Ea semneaz\u0103 digital acest mesaj utiliz\u00e2nd cheia privat\u0103 \u0219i anun\u021b\u0103 tuturor c\u0103 a f\u0103cut aceasta.<\/p>\n<p>Hei, nu e cel mai super-puper prototip de moned\u0103, \u00eens\u0103 are unele calit\u0103\u021bi. Oricine din lume (inclusiv \u0219i Bul\u0103) poate utiliza cheia public\u0103 a Alinu\u021bei \u0219i verifica dac\u0103 \u00eentr-adev\u0103r Alinu\u021ba a semnat mesajul \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin\u201d. Nimeni altcineva nu poate crea un astfel de mesaj semnat \u0219i nici Alinu\u021ba nu se mai poate dezice de acea semn\u0103tur\u0103 \u0219i s\u0103 zic\u0103 c\u0103: \u201cNu, Eu nu \u00eei dau lui Bul\u0103 un moldocoin\u201d. Deci protocolul stabile\u0219te c\u0103 Alinu\u021ba are o adev\u0103rat\u0103 inten\u021bie de a-i da lui Bul\u0103 un moldocoin. Cu alte cuvinte, nimeni nu mai poate publica un astfel de mesaj semnat \u0219i oarecum o protejeaz\u0103 pe Alinu\u021ba contra falsific\u0103rii.<\/p>\n<p>Observa\u021bi c\u0103 am folosit doar un mesaj textual semnat, \u00een urm\u0103torii pa\u0219i acest mesaj va deveni mai formalizat.<\/p>\n<p><b>Utilizarea numerelor unice pentru identificarea monedelor.<\/b><\/p>\n<p>O problem\u0103 a primei versiuni Moldocoin este c\u0103 Alinu\u021ba poate trimite lui Bul\u0103 acela\u0219i mesaj semnat \u00eenc\u0103 odat\u0103 \u0219i \u00eenc\u0103 odat\u0103. Presupunem c\u0103 Bul\u0103 a primit zece copii a mesajului \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin\u201d. \u00censeamn\u0103 aceast\u0103 c\u0103 Alinu\u021ba i-a trimis 10 monede diferite? Poate ea accidental a trimis o copie? Poate ea \u00eencearc\u0103\u00a0 s\u0103-l am\u0103geasc\u0103 pe Bul\u0103 c\u0103-i trimite zece monede, iar tuturor le spune c\u0103 doar una.<\/p>\n<p>Deci, trebuie s\u0103 facem moldocoinii unici. Trebuie s\u0103 le asign\u0103m un num\u0103r unic de serie. Mesajul semnat al Alinu\u021bei va ar\u0103ta astfel: \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 35312408\u201d. Iar mai t\u00e2rziu c\u00e2nd Alinu\u021ba va trimte un mesaj \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 733232323\u201d, toat\u0103 lumea, inclusiv \u0219i Bul\u0103, va \u0219ti c\u0103 un moldocoin diferit a fost transferat.<\/p>\n<p>Pentru a face s\u0103 lucreze corect aceast\u0103 schem\u0103 avem nevoie de o surs\u0103 de \u00eencredere care va genera aceste numere de serie. O solu\u021bie ar fi o banc\u0103. Aceast\u0103 banc\u0103 va genera numere de serie pentru fiecare moldocoin, va urm\u0103ri fiecare moldocoin \u0219i va verifica dac\u0103 tranzac\u021biile sunt valide.<\/p>\n<p>De exemplu, Alinu\u021ba se duce la banc\u0103 \u0219i zice: \u201cDoresc s\u0103 iau un moldocoin din contul meu\u201d. Banca reduce contul ei cu un moldocoin \u0219i \u00eei asigneaz\u0103 ei, un num\u0103r de serie nemaifolosit p\u00e2n\u0103 atunci, s\u0103 zicem 654321. Apoi c\u00e2nd Alinu\u021ba va dori s\u0103 transfere moldocoin-ul ei lui Bul\u0103, ea va semna un mesaj \u201cEu, Alinu\u021ba \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d. Bul\u0103 nu va accepta imediat moldocoin-ul, se va duce mai \u00eent\u00e2i la banc\u0103 pentru verificarea tranzac\u021biei. Se va convinge c\u0103 \u00eentr-adev\u0103r acest moldocoin cu num\u0103rul de serie 654321 \u00eei apar\u021bine Alinu\u021bei \u0219i c\u0103 ea nu l-a mai cheltuit pe altundeva. Dac\u0103 ambele condi\u021bii sunt adev\u0103rate, Bul\u0103 \u00eei spune b\u0103ncii c\u0103 el dore\u0219te s\u0103 accepte acest moldocoin \u0219i banca face o rectificare \u00een baza de date c\u0103 acest moldocoin va apar\u021bine lui Bul\u0103.<\/p>\n<p><b>S\u0103-i facem pe to\u021bi s\u0103 ac\u021bioneze ca o banc\u0103.<\/b><\/p>\n<p>Solu\u021bia cu banca e una bun\u0103 \u00eens\u0103 noi avem ambi\u021bii mult mai mari. Noi putem elimina cu totul banca din protocol. Aceasta va schimba considerabil natura banilor. \u0218i c\u00e2nd te g\u00e2nde\u0219ti c\u0103 puterea unei b\u0103nci centrale este imens\u0103, controlul asupra masei monetare, schimbarea este destul de mare.<\/p>\n<p>Idea este ca s\u0103-i facem pe to\u021bi participan\u021bii s\u0103 ac\u021bioneze ca o banc\u0103. \u00cen special, vom presupune c\u0103 to\u021bi utilizatorii de Moldocoin \u021bin o copie a tuturor \u00eenscrierilor: care moldocoin \u0219i cui apar\u021bine. O carte contabil\u0103 \u00een care sunt \u00eenscrise toate tranzac\u021biile. S\u0103 numim aceast\u0103 carte block chain, fiindc\u0103 a\u0219a se nume\u0219te \u00een Bitcoin.<\/p>\n<p>Acum, s\u0103 presupunem c\u0103 Alinu\u021ba dore\u0219te s\u0103 transfere un moldocoin lui Bul\u0103. Ea semneaz\u0103 mesajul: \u201cEu, Alinu\u021ba, \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d \u0219i transmite acest mesaj lui Bul\u0103. Bul\u0103 poate utiliza copia sa de block chain pentru verificare. Dac\u0103 e ok, el accept\u0103 moldocoin-ul, rectific\u0103 block chain-ul s\u0103u \u0219i transmite mai departe \u00een re\u021bea pentru ca fiecare s\u0103-\u0219i modifice block chain-ul.<\/p>\n<p>Mai r\u0103m\u00e2ne problema, \u201cde unde vine num\u0103rul de serie\u201d? Aceast\u0103 problem\u0103 e destul de u\u0219or de rezolvat, ve\u021bi vedea mai jos. O problem\u0103 mai mare care trebuie rezolvat\u0103, \u00eens\u0103, este dubla cheltuire. Alinu\u021ba ne poate am\u0103gi gener\u00e2nd dou\u0103 mesaje cu acela\u0219i num\u0103r de serie, \u00eens\u0103 adresat la dou\u0103 persoane diferite. Ea poate trimite un mesaj: \u201cEu, Alinu\u021ba, \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d lui Bul\u0103 \u0219i altul \u201cEu, Alinu\u021ba, \u00eei dau lui Ghi\u021b\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d lui Ghi\u021b\u0103. Ambii, Bul\u0103 \u0219i Ghi\u021b\u0103 utilizeaz\u0103 copiile lor de block chain pentru verificare. Verificarea e efectuat\u0103 \u00een aceea\u0219i perioad\u0103 scurt\u0103 de timp \u0219i ambii accept\u0103 tranzac\u021bia \u0219i transmit acceptul lor mai departe \u00een re\u021bea. Iat\u0103 problema. Cum al\u021bii din re\u021bea trebuie s\u0103 rectifice block chain-ul lor? Nu exist\u0103 o metod\u0103 coerent\u0103 de a rectifica block chain-ul. \u0218i chiar de ar fi, pe cine s\u0103-l credem? Pe Bul\u0103 sau pe Ghi\u021b\u0103?<\/p>\n<p>Cum putem rezolva problema cu dubla cheltuire? O solu\u021bie ar fi, ca atunci c\u00e2nd Alinu\u021ba transmite lui Bul\u0103 un moldocoin, Bul\u0103 s\u0103 nu \u00eencerce s\u0103 verifice singur tranzac\u021bia. Bul\u0103 ar putea s\u0103 transmit\u0103 mesajul re\u021belei \u00eentregi de Moldocoin \u0219i s\u0103-i \u00eentrebe pe ei dac\u0103 tranzac\u021bia e valid\u0103. Dac\u0103 ei, cei din re\u021bea, colectiv decid c\u0103 tranzac\u021bia e valid\u0103 atunci Bul\u0103 accept\u0103 moldocoin-ul \u0219i to\u021bi rectific\u0103 block chain-ul. Acest prototip de protocol ne ajut\u0103 s\u0103 prevenim dubla cheltuire, pentru c\u0103 dac\u0103 Alinu\u021ba va \u00eencerca s\u0103 cheltuie moldocoin-ul s\u0103u cu Bul\u0103 \u0219i Ghi\u021b\u0103, al\u021bii din re\u021bea vor vedea aceasta \u0219i \u00eei vor comunica lui Bul\u0103 \u0219i lui Ghi\u021b\u0103 c\u0103 exist\u0103 o problem\u0103 cu aceast\u0103 tranzac\u021bie.<\/p>\n<p>Ca exemplu, s\u0103 presupunem c\u0103 Alinu\u021ba dore\u0219te s\u0103-i dea lui Bul\u0103 un moldocoin. Ea semneaz\u0103 mesajul \u201cEu, Alinu\u021ba, \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d \u0219i-i transmite mesajul semnat lui Bul\u0103. Bul\u0103 controleaz\u0103 la validitate, \u00eens\u0103 nu accept\u0103 imediat, ci r\u0103sp\u00e2nde\u0219te mesajul \u00een re\u021bea. Ei to\u021bi, verific\u0103 mesajul \u0219i confirm\u0103 c\u0103 \u201cDa, Alinu\u021bei \u00eei apar\u021bine moldocoin-ul cu num\u0103rul de serie 654321, \u0219i poate fi transferat lui Bul\u0103\u201d. Dem\u00eendat\u0103 ce un num\u0103r suficient de oameni confirm\u0103, to\u021bi rectific\u0103 block chain-ul c\u0103 moldocoin-ul 654321 \u00eei apar\u021bine lui Bul\u0103.<\/p>\n<p>Acest protocol are multe elemente imprecise \u00eenc\u0103. De exemplu, ce \u00eenseamn\u0103 \u201c\u00eendat\u0103 ce un num\u0103r suficient de oameni confirm\u0103\u201d? Ce \u00eenseamn\u0103 \u201csuficient\u201d? Nu poate fi to\u021bi cei din re\u021bea \u0219i nici nu e specificat un procent anumit. Nu \u00eencerc\u0103m s\u0103 rezolv\u0103m aceast\u0103 problem\u0103 acum, \u00eens\u0103 vom \u00eencerca s\u0103 rezolv\u0103m o alt\u0103 problem\u0103 solu\u021bia c\u0103reia o rezolv\u0103 \u0219i pe aceasta.<\/p>\n<p><b>Dovada muncii (proof-of-work).<\/b><\/p>\n<p>S\u0103 presupunem c\u0103 Alinu\u021ba dore\u0219te s\u0103 fac\u0103 o dubl\u0103 cheltuire \u00een re\u021beaua descris\u0103 mai sus. Ea o poate face prin preluarea re\u021belei Moldocoin. Ea poate utiliza un sistem automatizat pentru a crea un num\u0103r mare de identit\u0103\u021bi, s\u0103 zicem un miliard, \u00een re\u021beaua Moldocoin. Ca \u0219i mai devreme, ea va \u00eencerca s\u0103 cheltuie dublu acela\u0219i moldocoin cu Bul\u0103 \u0219i Ghi\u021b\u0103. Dar atunci c\u00e2nd Bul\u0103 \u0219i Ghi\u021b\u0103 vor \u00eentreba re\u021beaua s\u0103 valideze tranzac\u021biile, toate identit\u0103\u021bile false create de Alinu\u021ba \u00eei pot am\u0103gi. Zic\u00e2ndu-i lui Bul\u0103 c\u0103 tranzac\u021bia lui e valid\u0103 \u0219i zic\u00e2ndu-i lui Ghi\u021b\u0103 c\u0103 \u0219i a lui e valid\u0103.<\/p>\n<p>O solu\u021bie \u0219mecher\u0103 de a rezolva aceast\u0103 problem\u0103 e s\u0103 utiliz\u0103m ideea de proof-of-work (dovada muncii). Idea e destul de neintuitiv\u0103 \u0219i implic\u0103 combina\u021bia a dou\u0103 idei: 1) de a face (artificial) costisitoare validarea tranzac\u021biilor pentru utilizatorii din re\u021bea \u0219i 2) de a-i remunera pe cei care ajut\u0103 cu validarea tranzac\u021biilor. Remunerarea e necesar\u0103 pentru a-i face pe utilizatorii din re\u021bea s\u0103 valideze tranzac\u021biile chiar dac\u0103 noi le-am f\u0103cut calculabile costisitor. Beneficiul de a face costisitoare validarea tranzac\u021biilor e c\u0103 validarea nu mai poate fi f\u0103cut\u0103 de cineva care controleaz\u0103 o mul\u021bime de identit\u0103\u021bi din re\u021bea, ci de cei care au putere de calculator pentru validare. Cum vom vedea mai jos, putem face ca celor care tri\u0219eaz\u0103 s\u0103 nu le mai fie rentabil s\u0103 tri\u0219eze.<\/p>\n<p>Aceasta e esen\u021ba dovezii muncii. Dar pentru a \u00een\u021belege \u00eentr-adev\u0103r dovada muncii (proof-of-work) vom trece prin ni\u0219te exemple.<\/p>\n<p>S\u0103 presupunem c\u0103 Alinu\u021ba distribuie \u00een re\u021bea mesajul: \u201cEu, Alinu\u021ba, \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d.<\/p>\n<p>Al\u021bii din re\u021bea primesc acest mesaj \u0219i \u00eel adaug\u0103 \u00eentr-o coad\u0103 cu tranzac\u021biile care au fost distribuite, \u00eens\u0103 nu au fost \u00eenc\u0103 aprobate. De exemplu, un utilizator din re\u021bea cu numele Vlad poate avea urm\u0103toarele tranzac\u021bii \u00een a\u0219teptare:<\/p>\n<p><code>\u201cEu, Ion, \u00eei dau lui Vasile un moldocoin, cu num\u0103rul de serie 443322\u201d<br \/>\u201cEu, Alinu\u021ba, \u00eei dau lui Bul\u0103 un moldocoin, cu num\u0103rul de serie 654321\u201d<br \/>\u201cEu, Maria, \u00eei dau lui Mihai un moldocoin, cu num\u0103rul de serie 445566\u201d<\/code><\/p>\n<p>Vlad verific\u0103 cu block chain-ul lui \u0219i vede c\u0103 toate tranzac\u021biile sunt valide. El poate transmite \u00eentregii re\u021bele c\u0103 aceste tranzac\u021bii sunt valide. \u00cens\u0103, p\u00e2n\u0103 a face aceasta el trebuie s\u0103 rezolve puzzle de calcul &#8211; proof-of-work. F\u0103r\u0103 solu\u021bia la acest puzzle, restul re\u021belei nu-i va accepta validitatea tranzac\u021biilor.<\/p>\n<p>Ce puzzle trebuie Vlad s\u0103 rezolve? Pentru a V\u0103 explica s\u0103 lu\u0103m o func\u021bie hash <i>h<\/i> care e cunoscut\u0103 de to\u021bi din re\u021bea &#8211; adic\u0103 e inclus\u0103 \u00een protocol. Bitcoin utilizeaz\u0103 func\u021bia hash binecunoscut\u0103 SHA-256, \u00eens\u0103 poate fi utilizat\u0103 orice hash func\u021bie. Deci, Vlad ia toate tranzac\u021biile din coada <i>l<\/i> \u0219i adaug\u0103 la sf\u00e2r\u0219it un num\u0103r <i>x<\/i> (s\u0103-l numim <i>nonce<\/i>). De exemplu dac\u0103 l=\u201cSalut lume!\u201d \u0219i nonce x=0 vom avea.<\/p>\n<p><code>h(\u201cSalut lume!0\u201d)= 4f8574dc0ca7fa7f046cf2a61c7964b177d3b60c3133e7537ea1f76829aacdc0<\/code><\/p>\n<p>Puzzle care Vlad trebuie s\u0103-l rezolve, proof-of-work, s\u0103 g\u0103seasc\u0103 un astfel de <i>x<\/i>, ca atunci c\u00e2nd \u00eel ad\u0103ug\u0103m la lista tranzac\u021biilor <i>l<\/i> hash-ul s\u0103 se \u00eenceap\u0103 cu un anumit num\u0103r de zerouri. S\u0103 \u00eencerc\u0103m cu x=1.<\/p>\n<p><code>h(\u201cSalut lume!1\u201d)= 5905051116ef23c9fa77cd654575cd86d8e42cd744f5b5a6980493f7e171e53f<\/code><\/p>\n<p>heh.. nu se \u00eencepe cu nici un zero..<\/p>\n<p>Putem continua cu x=2,3 \u2026 \u00cen sf\u00e2r\u0219it x=8 ob\u021binem:<\/p>\n<p><code>h(\u201cSalut lume!8\u201d) = 03b94aaf33d0a4bb88d3c1c7fa4aace92891e34b9689d793a060e6645e80af7f<\/code><\/p>\n<p>Acest nonce ne d\u0103 doar un zero la \u00eenceput de rezultat, e doar un puzzle simplu, pentru un puzzle complicat se cer multe zerouri consecutive.<\/p>\n<p>Ceea ce face ca acest puzzle s\u0103 fie foarte greu de rezolvat e func\u021bia hash, care se comport\u0103 ca un num\u0103r aleator, la cea mai mic\u0103 schimbare a mesajului rezultatul func\u021biei se schimb\u0103 total. Deci dac\u0103 dorim s\u0103 avem un rezultat care s\u0103 \u00eenceap\u0103 cu 10 zerouri, va trebui s\u0103 \u00eencerc\u0103m 16^10 valori diferite pentru x pentru a g\u0103si nonce-ul necesar. E un lucru foarte greu de calculat.<\/p>\n<p>Evident, acest puzzle poate fi mai pu\u021bin sau mai mult dificil de rezolvat prin m\u0103rirea num\u0103rului de zerouri la rezultatul func\u021biei hash. De fapt, protocolul Bitcoin anume asta \u0219i face, doar c\u0103 nu num\u0103rul de zerouri, ci un num\u0103r care se nume\u0219te <i>target<\/i>, iar rezultatul func\u021biei hash trebuie s\u0103 fie mai mic dec\u00e2t acest target. Acest target se ajusteaz\u0103 pentru a da posibilitate oricui din sistem s\u0103 g\u0103seasc\u0103 o solu\u021bie \u00een 10 minute.<\/p>\n<p>Deci, s\u0103 zicem c\u0103 Vlad a g\u0103sit nonce-ul <i>x<\/i> norocos. Felicit\u0103ri. (El va fi remunerat pentru c\u0103 a g\u0103sit solu\u021bia). El va distribui blocul de tranzac\u021bii spre aprobare \u00eempreun\u0103 cu valoarea <i>x<\/i>. Ceilal\u021bi participan\u021bi din re\u021beaua Moldocoin pot verifica <i>x<\/i> dac\u0103 \u00eentr-adev\u0103r e proof-of-work. \u0218i apoi s\u0103 rectifice block chain-urile lor cu noile tranzac\u021bii din block.<\/p>\n<p>Pentru ca idea cu proof-of-work s\u0103 aib\u0103 succes, utilizatorii din re\u021bea trebuie s\u0103 fie stimula\u021bi pentru a ne ajuta cu validarea tranzac\u021biilor. F\u0103r\u0103 o astfel de stimulare, ei nu au nici un motiv s\u0103-\u0219i cheltuie timpul de calculator cu validarea tranzac\u021biilor altor oameni. \u0218i dac\u0103 nimeni din sistem nu va valida tranzac\u021biile, sistemul nu va lucra. Solu\u021bia e s\u0103 remuner\u0103m oamenii pentru validarea tranzac\u021biilor. S\u0103 presupunem c\u0103 vom recompensa cu moldocoini pe fiecare care va valida cu succes tranzac\u021biile. Recompensa trebuie s\u0103 fie destul de mare pentru ca s\u0103 avem doritori.<\/p>\n<p>\u00cen protocolul Bitcoin, procesul de validare se nume\u0219te minerit. Pentru fiecare block de tranzac\u021bii validate, minerul norocos prime\u0219te o recompens\u0103 \u00een bitcoini. Ini\u021bial se \u00eemp\u0103r\u021beau a c\u00e2te 50 de bitcoini. \u00cens\u0103 la fiecare 210000 de blocuri validate (aproximativ la fiecare 4 ani) recompensa se \u00eenjum\u0103t\u0103\u021be\u0219te. Rata de \u00eenjum\u0103t\u0103\u021bire s-a \u00eent\u00e2mplat doar o singur\u0103 dat\u0103, acum se dau c\u00e2te 25 de bitcoini. Rata de \u00eenjum\u0103t\u0103\u021bire la fiecare 4 ani va dura p\u00e2n\u0103 \u00een 2140. P\u00e2n\u0103 atunci c\u00e2nd remunerarea va ajunge la 10^-8 bitcoini. 10^-8 bitcoin e unitatea minimal\u0103 a bitcoin-ului \u0219i se nume\u0219te satoshi. Deci spre 2140 masa total\u0103 de bitcoini va \u00eenceta s\u0103 creasc\u0103. \u00cens\u0103 nu va elimina stimularea pentru validarea tranzac\u021biilor. Bitcoin presupune o plat\u0103 minim\u0103 pentru procesarea tranzac\u021biilor, care se va duce la minerul care valideaz\u0103 tranzac\u021bia.<\/p>\n<p>Proof-of-work e un fel de competi\u021bie pentru a aproba tranzac\u021bii. Un miner are \u0219ansa de a c\u00e2\u0219tiga propor\u021bional cu puterea de calcul a a ma\u0219inilor sale fa\u021b\u0103 de puterea de calcul total\u0103 a sistemului. De exemplu dac\u0103 de\u021bine calculatoare cu puterea de 1% din puterea total\u0103 de calcul a re\u021belei Bitcoin, el va avea aproximativ \u0219ansa de 1% c\u0103 \u00a0va c\u00e2\u0219tiga competi\u021bia. Cu c\u00e2t mai mult\u0103 putere de calcul, cu at\u00e2t mai mari \u0219anse de c\u00e2\u0219tig. Un miner necinstit, are relativ pu\u021bine \u0219anse pentru coruperea valid\u0103rii tranzac\u021biilor.<\/p>\n<p>De\u0219i un miner necinstit are pu\u021bine \u0219anse de a corupe block chain-ul, nu e deajuns pentru a avea \u00eencredere \u00een valuta virtual\u0103. Noi \u00eenc\u0103 nu am finalizat problema cu dubla cheltuial\u0103.<\/p>\n<p>Acu\u0219 vom analiza dubla cheltuial\u0103. \u00cens\u0103 p\u00e2n\u0103 atunci vom descrie un detaliu important \u00een Moldocoin. Noi dorim ca \u00een re\u021beaua Moldocoin s\u0103 avem o ordine a tranzac\u021biilor. Dac\u0103 nu vom avea aceasta, nu va fi clar cine \u0219i ce moldocoini de\u021bine. Pentru aceasta noi vom cere ca orice block nou \u00eentotdeauna s\u0103 includ\u0103 un pointer la ultimul block validat din chain. Un block chain este un \u0219ir de block-uri aranjate unul dup\u0103 altul \u0219i fiecare con\u021bine pointer la block-ul precedent.<\/p>\n<p>Ocazional, apare c\u00e2te o bifurca\u021bie \u00een block chain. Aceasta se poate \u00eent\u00e2mpla atunci c\u00e2nd 2 mineri rezolv\u0103 puzzle-ul aproape simultan \u0219i ambii distribuie \u00een re\u021bea blocul nou validat \u0219i unii oameni rectific\u0103 dup\u0103 rezultatul la un miner al\u021bii de altul.<\/p>\n<p>\u0218i aceasta cauzeaz\u0103 exact problema pe care noi o doream rezolvat\u0103, nu mai este clar\u0103 ordinea tranzac\u021biilor \u0219i nici nu e clar cui apar\u021bin moldocoinii. Din fericire este o solu\u021bie simpl\u0103 pentru a anula bifurca\u021biile. Regula e urm\u0103toarea: dac\u0103 apare o bifurca\u021bie, utilizatorii re\u021belei p\u0103streaz\u0103 ambele ramific\u0103ri. Iar minerii continu\u0103 s\u0103 lucreze doar la bifurca\u021bia care are cel mai lung block chain. \u00cen re\u021beaua Bitcoin, o tranzac\u021bie nu se consider\u0103 confirmat\u0103 p\u00e2n\u0103 c\u00e2nd: 1) Nu face parte din cea mai lung\u0103 bifurca\u021bie \u0219i 2) dup\u0103 ea urmeaz\u0103 \u00eenc\u0103 5 blocuri \u00een aceia\u0219i bifurca\u021bie.<\/p>\n<p>Am pus la punct problema cu ordinea tranzac\u021biilor, s\u0103 ne \u00eentoarcem la utilizatorul necinstit care vrea o dubl\u0103 cheltuire. Presupunem c\u0103 Alinu\u021ba \u00eencearc\u0103 s\u0103 cheltuie aceia\u0219i bani cu Bul\u0103 \u0219i Ghi\u021b\u0103. O variant\u0103 ar fi ca ea s\u0103 valideze blocul care include ambele tranzac\u021bii. Presupun\u00e2nd c\u0103 ea de\u021bine un procent din puterea de calcul a re\u021belei, exist\u0103 o \u0219ans\u0103 ca ea prima s\u0103 rezolve puzzle-ul. Din nefericire pentru Alinu\u021ba, dubla cheltuial\u0103 imediat va fi detectat\u0103 de al\u021bii din re\u021beaua Moldocoin \u0219i vor respinge blocul chiar dac\u0103 con\u021bine rezolvarea proof-of-work.<\/p>\n<p>O problem\u0103 mai serioas\u0103 e atunci c\u00e2nd ea va distribui ambele tranzac\u021bii cu acela\u0219i moldocoin cheltui\u021bi cu Bul\u0103 \u0219i Ghi\u021b\u0103. Ea poate s\u0103 distribuie o tranzac\u021bie spre unii mineri iar alta c\u0103tre al\u021bii \u00een speran\u021ba c\u0103 ambele vor fi validate. Din fericire re\u021beaua, dup\u0103 cum am v\u0103zut mai sus va confirma doar o tranzac\u021bie, nu \u0219i pe ambele.<\/p>\n<p>Voila, dubla cheltuire a fost rezolvat\u0103, cu ajutorul unor tehnici de proof-of-work \u0219i ordonarea tranzac\u021biilor. Avem o valut\u0103 virtual\u0103 deplin func\u021bional\u0103. Aceasta \u0219i este adev\u0103rata inven\u021bie. P\u00e2n\u0103 la Bitcoin lumea credea c\u0103 e imposibil de a transmite un mesaj digital \u0219i \u00eenghe\u021bat \u00een timp.<\/p>\n<p>Proof-of-work \u0219i mineritul genereaz\u0103 multe \u00eentreb\u0103ri. Ce r\u0103splat\u0103 e \u00eendeajuns pentru miner pentru a mineri? Cum cre\u0219terea masei de moldocoin afecteaz\u0103 economia Moldocoin? Se vor concentra to\u021bi moldocoinii \u00een c\u00e2teva m\u00e2ini?<\/p>\n<p>Tranzac\u021biile care le-am prezentat \u00een forme de mesaje, \u00eentr-adev\u0103r e un limbaj mult mai complex \u0219i uneltele financiare care vor fi inventate \u00een viitor vor fi anume \u00een baza acestui limbaj.<\/p>\n<p>Ce unelte financiare vor fi inventate? Multe, foarte multe. Ne r\u0103m\u00e2ne s\u0103 a\u0219tept\u0103m ca oamenii cu scaun la cap s\u0103 le inventeze, p\u00e2n\u0103 atunci ne vedem la burs\u0103!\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Din 2010, de c\u00e2nd am auzit prima dat\u0103 de Bitcoin, am citit multe explica\u021bii. Majoritatea lor fiind artificial limitate \u00een profunzime pentru a face articolul pe \u00een\u021belesul tuturor. \u00cen\u021belegerea acestui protocol \u00een detalii este destul de greu. Multe articole jurnalistice, populiste, scriu despre posibilul impact financiar \u0219i social, nu \u0219i despre modul \u00een care lucreaz\u0103 &#8230; <a title=\"Bitcoin. Cum lucreaz\u0103.\" class=\"read-more\" href=\"http:\/\/esanu.name\/vitalie\/?p=708\" aria-label=\"More on Bitcoin. Cum lucreaz\u0103.\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,22,24,25],"tags":[],"class_list":["post-708","post","type-post","status-publish","format-standard","hentry","category-bitcoin","category-hacker","category-inovatii","category-internet"],"_links":{"self":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts\/708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=708"}],"version-history":[{"count":0,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts\/708\/revisions"}],"wp:attachment":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=708"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}