Bitcoin Whitepaper: Peer-to-peer sistem elektronskog novca
Sažetak. Čisto peer-to-peer verzija elektronskog novca omogućila bi slanje online plaćanja direktno od jedne strane ka drugoj bez posredovanja finansijske institucije. Digitalni potpisi daju deo rešenja, ali se glavni benefiti gube ukoliko je i dalje potrebna poverljiva treća strana da spreči dvostruko trošenje. Predlažemo rešenje problema dvostrukog trošenja korišćenjem peer-to-peer mreže. Mreža vremenski obeležava transakcije tako što ih hešira u kontinuirani lanac dokaza o radu zasnovanih na hešu, formirajući zapis koji se ne može izmeniti bez ponovnog izvršavanja dokaza o radu. Najduži lanac ne služi samo kao dokaz o redosledu događaja, već i kao dokaz da potiče iz najvećeg skupa CPU snage. Sve dok većinu CPU snage kontrolišu čvorovi koji ne sarađuju u napadu na mrežu, oni će generisati najduži lanac i nadmašiti napadače. Sama mreža zahteva minimalnu strukturu. Poruke se prenose po principu najbolje moguće isporuke, a čvorovi mogu slobodno da napuste i ponovo se pridruže mreži, prihvatajući najduži lanac dokaza o radu kao dokaz o tome šta se dogodilo dok nisu bili prisutni.
1. Uvod
Trgovina na internetu se gotovo u potpunosti oslanja na finansijske institucije koje služe kao poverljive treće strane u obradi elektronskih plaćanja. Iako sistem dovoljno dobro funkcioniše za većinu transakcija, i dalje je opterećen urođenim slabostima modela zasnovanog na poverenju. Potpuno nepovratne transakcije u praksi nisu moguće, jer finansijske institucije ne mogu izbeći posredovanje u sporovima. Troškovi tog posredovanja povećavaju ukupne troškove transakcija, ograničavajući minimalni iznos koji je praktično moguće izvršiti, čime se onemogućavaju male i povremene transakcije. Postoji i širi problem gubitka mogućnosti da se obavljaju nepovratna plaćanja za nepovratne usluge. Zbog mogućnosti poništavanja transakcija, potreba za poverenjem se širi. Trgovci moraju biti oprezni prema kupcima i zahtevati od njih više informacija nego što bi inače bilo potrebno. Određeni procenat prevara prihvata se kao neizbežan. Ovi troškovi i neizvesnosti mogu se izbeći u ličnim transakcijama korišćenjem fizičkog novca, ali ne postoji mehanizam koji omogućava obavljanje plaćanja putem komunikacionog kanala bez poverljive treće strane.
Potrebno je elektronsko sredstvo plaćanja zasnovano na kriptografskom dokazu umesto na poverenju, koje omogućava da bilo koje dve zainteresovane strane direktno obave transakciju bez potrebe za poverljivom trećom stranom. Transakcije koje je računarski neizvodljivo poništiti zaštitile bi prodavce od prevara, dok bi rutinski escrow mehanizmi mogli lako da se primene radi zaštite kupaca. U ovom radu predlažemo rešenje problema dvostrukog trošenja korišćenjem peer-to-peer distribuiranog servera za vremensko obeležavanje, kako bi se generisao računarski dokaz o hronološkom redosledu transakcija. Sistem je siguran sve dok pošteni čvorovi kolektivno kontrolišu više CPU snage od bilo koje grupe čvorova napadača koji međusobno sarađuju.
2. Transakcije
Elektronski novčić definišemo kao lanac digitalnih potpisa. Svaki vlasnik prenosi novčić sledećem tako što digitalno potpisuje heš prethodne transakcije i javni ključ narednog vlasnika, a zatim ih dodaje na kraj novčića. Primalac može verifikovati potpise kako bi potvrdio lanac vlasništva.
Problem je, naravno, što primalac ne može da proveri da li neki od prethodnih vlasnika nije dvostruko potrošio isti novčić. Uobičajeno rešenje je uvođenje poverljive centralne vlasti, odnosno kovnice, koja proverava svaku transakciju kako bi sprečila dvostruko trošenje. Nakon svake transakcije, novčić mora biti vraćen kovnici da bi izdala novi, a samo se novčići koji direktno potiču iz kovnice smatraju pouzdanim i sigurnim od dvostrukog trošenja. Problem sa ovim rešenjem je što sudbina čitavog monetarnog sistema zavisi od kompanije koja upravlja kovnicom, pri čemu svaka transakcija mora proći kroz njih, isto kao kod banke.
Potrebno je obezbediti način da primalac zna da prethodni vlasnici nisu potpisali neku raniju transakciju. Za naše potrebe, najranija transakcija je ona koja se računa, tako da nas kasniji pokušaji dvostrukog trošenja ne zanimaju. Jedini način da se potvrdi odsustvo transakcije jeste da postoji uvid u sve transakcije. U modelu sa kovnicom, kovnica je imala uvid u sve transakcije i određivala koja je stigla prva. Da bi se to postiglo bez poverljive treće strane, transakcije moraju biti javno objavljene [1], a potreban je i sistem kojim učesnici mogu da se usaglase oko jedinstvene istorije redosleda njihovog prijema. Primalac mora imati dokaz da je u trenutku svake transakcije većina čvorova bila saglasna da je upravo ona prva primljena.
3. Server za vremensko obeležavanje
Rešenje koje predlažemo počinje serverom za vremensko obeležavanje. Server za vremensko obeležavanje funkcioniše tako što uzima heš bloka podataka koji treba da budu vremenski obeleženi i javno objavljuje taj heš, na primer u novinama ili Usenet objavi [2-5]. Vremenska oznaka dokazuje da su podaci morali postojati u tom trenutku kako bi mogli biti uključeni u heš. Svaka vremenska oznaka u svom hešu sadrži prethodnu oznaku, formirajući lanac, pri čemu svaka naredna oznaka dodatno učvršćuje one pre nje.
4. Proof-of-Work
Da bismo implementirali distribuirani server za vremensko obeležavanje na peer-to-peer osnovi, potrebno je da koristimo sistem dokaza o radu (proof-of-work) sličan Hashcash-u Adama Backa [6], a ne novinske članke ili Usenet objave. Dokaz o radu podrazumeva pretraživanje vrednosti koja, kada se hešira (npr. pomoću SHA-256), daje heš koji počinje određenim brojem početnih bitova nule. Prosečan potreban rad raste eksponencijalno sa brojem zahtevanih bitova nule i može se verifikovati izvršavanjem samo jednog heša.
Za našu mrežu vremenskih oznaka implementiramo dokaz o radu tako što inkrementiramo nonce u bloku sve dok se ne pronađe vrednost koja daje heš bloka sa zahtevani brojem početnih nula bitova. Kada je CPU napor uložen da bi blok zadovoljio uslov dokaza o radu, blok se ne može izmeniti bez ponovnog izvršavanja tog rada. Kako se kasniji blokovi vezuju posle njega, rad potreban za izmenu tog bloka uključivao bi ponovno izvršavanje svih blokova nakon njega.
Dokaz o radu takođe rešava problem određivanja zastupljenosti u donošenju odluka većinom. Kada bi se većina zasnivala na principu jedan-IP-adresа-jedan-glas, sistem bi mogao biti potkopan od strane bilo koga ko može da obezbedi veliki broj IP adresa. Dokaz o radu je suštinski princip jedan-CPU-jedan-glas. Većinska odluka se predstavlja najdužim lancem, u koji je uložen najveći napor dokaza o radu. Ako većinu CPU snage kontrolišu pošteni čvorovi, pošteni lanac će rasti najbrže i nadmašiće sve konkurentske lance. Da bi se izmenio neki raniji blok, napadač bi morao ponovo da izvede dokaz o radu za taj blok i sve blokove nakon njega, a zatim da sustigne i nadmaši rad poštenih čvorova. Pokazaćemo kasnije da verovatnoća da sporiji napadač sustigne pošteni lanac eksponencijalno opada kako se dodaju novi blokovi.
Da bi se nadoknadila povećanja brzine hardvera i promenljivo interesovanje za pokretanje čvorova tokom vremena, težina dokaza o radu određuje se pomoću pokretnog proseka koji cilja prosečan broj blokova po satu. Ako se blokovi generišu prebrzo, težina se povećava.
5. Mreža
Koraci za pokretanje mreže su sledeći:
- Nove transakcije se emituju ka svim čvorovima.
- Svaki čvor sakuplja nove transakcije u blok.
- Svaki čvor radi na pronalaženju teškog dokaza o radu za svoj blok.
- Kada čvor pronađe dokaz o radu, emituje blok ka svim čvorovima.
- Čvorovi prihvataju blok samo ako su sve transakcije u njemu važeće i nisu već potrošene.
- Čvorovi izražavaju svoje prihvatanje bloka tako što nastavljaju rad na stvaranju sledećeg bloka u lancu, koristeći heš prihvaćenog bloka kao prethodni heš.
Čvorovi uvek smatraju najduži lanac ispravnim i nastavljaju da rade na njegovom proširivanju. Ako dva čvora istovremeno emituju različite verzije sledećeg bloka, neki čvorovi mogu prvo primiti jednu ili drugu verziju. U tom slučaju, oni nastavljaju da rade na onoj koju su prvi primili, ali čuvaju i drugu granu u slučaju da ona postane duža. Neravnopravnost će biti razrešena kada se pronađe sledeći dokaz o radu i jedna grana postane duža; tada će čvorovi koji su radili na drugoj grani preći na dužu.
Nove transakcije ne moraju nužno da stignu do svih čvorova. Dovoljno je da stignu do većeg broja čvorova kako bi ubrzo bile uključene u neki blok. Emitovanje blokova takođe je tolerantno na izgubljene poruke. Ako čvor ne primi blok, zatražiće ga kada primi sledeći blok i shvati da mu jedan nedostaje.
6. Podsticaj
Po konvenciji, prva transakcija u bloku je posebna transakcija koja stvara novi novčić u vlasništvu kreatora bloka. Ovo predstavlja podsticaj za čvorove da podržavaju mrežu i obezbeđuje način za početnu distribuciju novčića u opticaj, budući da ne postoji centralna vlast koja bi ih izdavala. Stalno dodavanje fiksne količine novih novčića analogno je rudarima zlata koji troše resurse kako bi dodali zlato u opticaj. U našem slučaju, troši se procesorsko vreme i električna energija.
Podsticaj se takođe može finansirati transakcionim naknadama. Ako je izlazna vrednost transakcije manja od ulazne vrednosti, razlika predstavlja transakcionu naknadu koja se dodaje podsticajnoj vrednosti bloka koji sadrži transakciju. Kada unapred određeni broj novčića uđe u opticaj, podsticaj može u potpunosti preći na transakcione naknade i time postati potpuno oslobođen inflacije.
Podsticaj može pomoći da se čvorovi ohrabre da ostanu pošteni. Ako bi pohlepan napadač uspeo da prikupi više CPU snage nego svi pošteni čvorovi zajedno, morao bi da bira između toga da je iskoristi za prevaru ljudi vraćanjem sopstvenih plaćanja ili da je upotrebi za generisanje novih novčića. Trebalo bi da mu bude isplativije da igra po pravilima koja mu omogućavaju da dobija više novih novčića nego svi ostali zajedno nego da podriva sistem i samim tim vrednost sopstvenog bogatstva.
7. Oslobađanje prostora na disku
Kada je najnovija transakcija u jednom novčiću zakopana ispod dovoljnog broja blokova, ranije potrošene transakcije mogu se odbaciti radi uštede prostora na disku. Da bi se to omogućilo bez narušavanja heša bloka, transakcije se heširaju u Merkle stablo [7][2][5], pri čemu se u heš bloka uključuje samo koren stabla. Stari blokovi se zatim mogu kompresovati tako što se odseku grane stabla. Unutrašnji heševi ne moraju se čuvati.
Zaglavlje bloka bez transakcija zauzimalo bi oko 80 bajtova. Ako pretpostavimo da se blokovi generišu na svakih 10 minuta, 80 bajtova * 6 * 24 * 365 = 4,2 MB godišnje. Pošto su računarski sistemi 2008. godine uobičajeno prodavani sa 2 GB RAM-a, a Murov zakon predviđa rast od oko 1,2 GB godišnje, skladištenje ne bi trebalo da predstavlja problem čak i ako se zaglavlja blokova moraju čuvati u memoriji.
8. Pojednostavljena verifikacija plaćanja
Moguće je verifikovati plaćanja bez pokretanja punog mrežnog čvora. Korisnik treba da čuva samo kopiju zaglavlja blokova najdužeg lanca dokaza o radu, koji može dobiti upitima ka mrežnim čvorovima dok se ne uveri da poseduje najduži lanac, i da pribavi Merkle granu koja povezuje transakciju sa blokom u kojem je vremenski obeležena. Ne može sam da proveri transakciju, ali tako što je povezuje sa određenim mestom u lancu, može da vidi da ju je mrežni čvor prihvatio, a blokovi dodati posle nje dodatno potvrđuju da ju je mreža prihvatila.
Pojednostavljena metoda je ranjiva ako mrežu nadvlada napadač. Dok mrežni čvorovi mogu samostalno da verifikuju transakcije, pojednostavljeni metod može biti obmanut lažnim transakcijama koje generiše napadač sve dok on uspeva da zadrži prevlast nad mrežom. Jedna od strategija zaštite bila bi prihvatanje upozorenja od mrežnih čvorova kada otkriju nevažeći blok, čime bi se korisnički softver podstakao da preuzme ceo blok i prijavljene transakcije kako bi potvrdio nedoslednost. Poslovni subjekti koji primaju česte uplate verovatno će i dalje želeti da pokreću sopstvene čvorove radi nezavisnije bezbednosti i brže verifikacije.
9. Kombinovanje i deljenje vrednosti
Iako bi bilo moguće rukovati novčićima pojedinačno, bilo bi nepraktično praviti zasebnu transakciju za svaki cent u transferu. Da bi se omogućilo deljenje i kombinovanje vrednosti, transakcije sadrže više ulaza i izlaza. Uobičajeno je da postoji ili jedan ulaz iz veće prethodne transakcije ili više ulaza koji kombinuju manje iznose, a najviše dva izlaza: jedan za plaćanje i jedan za vraćanje kusura, ukoliko ga ima, nazad pošiljaocu.
Treba napomenuti da grananje, gde jedna transakcija zavisi od više transakcija, a te transakcije zavise od još mnogih drugih, ovde ne predstavlja problem. Nikada ne postoji potreba da se izdvoji potpuna, samostalna kopija istorije jedne transakcije.
10. Privatnost
Tradicionalni bankarski model postiže određeni nivo privatnosti tako što ograničava pristup informacijama na strane uključene u transakciju i na poverljivu treću stranu. Potreba da se sve transakcije javno objavljuju onemogućava ovaj pristup, ali se privatnost i dalje može očuvati prekidanjem toka informacija na drugom mestu – zadržavanjem anonimnosti javnih ključeva. Javnost može videti da neko šalje određeni iznos nekome drugom, ali bez podataka koji povezuju transakciju sa konkretnom osobom. Ovo je slično nivou informacija koje objavljuju berze, gde se vreme i veličina pojedinačnih trgovina, tzv. „tape“, javno objavljuju, ali bez otkrivanja identiteta učesnika.
Kao dodatna zaštita, za svaku transakciju treba koristiti novi par ključeva kako bi se sprečilo njihovo povezivanje sa zajedničkim vlasnikom. Ipak, određeno povezivanje je neizbežno kod transakcija sa više ulaza, jer one nužno otkrivaju da su svi ulazi pripadali istom vlasniku. Rizik se sastoji u tome da, ako se vlasnik nekog ključa otkrije, povezivanjem mogu biti otkrivene i druge transakcije koje su pripadale istom vlasniku.
11. Proračuni
Razmatramo scenario u kojem napadač pokušava da generiše alternativni lanac brže od poštenog lanca. Čak i ako bi to uspeo, sistem se ne bi otvorio za proizvoljne izmene, poput stvaranja vrednosti iz ničega ili prisvajanja novca koji nikada nije pripadao napadaču. Čvorovi neće prihvatiti nevažeću transakciju kao plaćanje, a pošteni čvorovi nikada neće prihvatiti blok koji je sadrži. Napadač može pokušati samo da izmeni neku svoju transakciju kako bi povratio novac koji je nedavno potrošio.
Trka između poštenog lanca i lanca napadača može se okarakterisati kao binomijalno slučajno kretanje. Događaj uspeha je produžetak poštenog lanca za jedan blok, čime se njegova prednost povećava za +1.
Verovatnoća da napadač sustigne iz određenog zaostatka analogna je problemu „propasti kockara“ (Gambler’s Ruin). Zamislimo kockara sa neograničenim kreditom koji započinje sa zaostatkom i igra potencijalno beskonačan broj partija kako bi pokušao da dostigne ravnotežu. Možemo izračunati verovatnoću da on ikada dostigne ravnotežu, odnosno da napadač ikada sustigne pošteni lanac, na sledeći način [8]:
p = verovatnoća da pošten čvor pronađe sledeći blok
q = verovatnoća da napadač pronađe sledeći blok
qz = verovatnoća da će napadač ikada sustići pošteni lanac ako zaostaje z blokova
Uzimajući pretpostavku da je p > q, verovatnoća opada eksponencijalno kako raste broj blokova koje napadač mora da sustigne. Sa izgledima protiv njega, ako ne napravi srećan proboj na samom početku, njegove šanse postaju zanemarljivo male kako sve više zaostaje.
Sada razmatramo koliko dugo primalac nove transakcije treba da čeka pre nego što bude dovoljno siguran da pošiljalac ne može da promeni transakciju. Pretpostavljamo da je pošiljalac napadač koji želi da primaocu neko vreme učini privid da mu je platio, a zatim da prebaci plaćanje nazad sebi nakon što prođe određeno vreme. Primalac će biti obavešten kada se to dogodi, ali pošiljalac se nada da će tada već biti prekasno.
Primalac generiše novi par ključeva i predaje javni ključ pošiljaocu neposredno pre potpisivanja. To sprečava pošiljaoca da unapred pripremi lanac blokova radeći na njemu kontinuirano dok ne bude dovoljno srećan da dovoljno odmakne, pa tek tada izvrši transakciju. Nakon što se transakcija pošalje, nepošteni pošiljalac u tajnosti počinje da radi na paralelnom lancu koji sadrži alternativnu verziju njegove transakcije.
Primalac čeka dok se transakcija ne doda u blok i dok nakon nje ne bude povezano z blokova. On ne zna tačan napredak koji je napadač ostvario, ali pretpostavljajući da su pošteni blokovi nastajali prosečnim očekivanim vremenom po bloku, potencijalni napredak napadača imaće Poissonovu raspodelu sa očekivanom vrednošću:
Da bismo izračunali verovatnoću da napadač sada još uvek može da sustigne (blokove), množimo Poasonovu gustinu za svaku moguću sumu napretka koji je do sada ostvario sa verovatnoćom da od te tačke nadalje može da nadoknadi zaostatak:
Preuređujemo formulu kako bismo izbegli sabiranje beskonačno mnogo članova u raspodeli…
I to prevodimo u C kod…
Kada prođemo kroz nekoliko rezultata, možemo uočiti kako verovatnoća opada eksponencijalno sa porastom z.
Rezolucija za P manje od 0,1%…
12. Zaključak
Predložili smo sistem za elektronske transakcije bez oslanjanja na poverenje. Počeli smo od uobičajenog okvira novčića zasnovanih na digitalnim potpisima, koji pružaju snažnu kontrolu vlasništva, ali su nepotpuni bez mehanizma za sprečavanje dvostrukog trošenja. Da bismo to rešili, predložili smo peer-to-peer mrežu koja koristi dokaz o radu za beleženje javne istorije transakcija, koja ubrzo postaje računarski neizvodljiva za izmenu ukoliko pošteni čvorovi kontrolišu većinu CPU snage. Mreža je robusna u svojoj nestrukturisanoj jednostavnosti. Čvorovi rade istovremeno uz minimalnu koordinaciju. Nema potrebe za njihovom identifikacijom, jer poruke nisu usmerene ka određenom mestu i dovoljno je da budu isporučene po principu najbolje moguće isporuke. Čvorovi mogu slobodno da napuste i ponovo se priključe mreži, prihvatajući lanac dokaza o radu kao dokaz o onome što se dogodilo dok nisu bili prisutni. Oni glasaju svojom CPU snagom, izražavajući prihvatanje važećih blokova radom na njihovom proširivanju i odbacivanje nevažećih blokova odbijanjem da rade na njima. Sva potrebna pravila i podsticaji mogu se sprovesti ovim mehanizmom konsenzusa.
Prevod originalnog Bitcoin whitepapera autora Satoshija Nakamota.
Ako vam je sadržaj koristan i želite da nas podržite to možete učiniti ovde.













