Sunday, March 30, 2014

Rudarenje bitcoina: Osnove


Rudarenje osigurava da svi sudionici Bitcoin sustava imaju jednoznačan pregled podataka u tom sustavu. To je potrebno zato što je Bitcoin raspodijeljen sustav i nema središnjeg autoriteta koji pazi na stanje cijelog sustava. Rudarenje također služi za uvođenje novih bitcoina u sustav.


Rudarenje sprječava dvostruku potrošnju i nameće vremenski redoslijed kojim su se transakcije odvijale. Mehanizam koji to osigurava je "dokaz rada". Dokaz rada je vrlo težak kriptografski problem koji zahtijeva mnogo procesorkog vremena i snage da se riješi, ali kad se riješi vrlo je jednostavno za ostale sudionike sustava provjeriti da je rješenje ispravno. Blok transakcija koji se prvi uspješno riješi na taj način uvrštava se u lanac blokova (block chain) te je praktički nemoguće uzrokovati dvostruku potrošnju ili neku drugu nekontistentnost sustava.

Kako se rudari

 

Sudionici Bitcoin sustava skupljaju sve objavljenje transakcije u blok. Svaki blok sadrži zaglavlje u kojem se između ostalog nalazi jedinstvena vrijednost "nonce". To se zaglavlje hashira dvostrukim SHA-256 hashem te rezultirajući niz znakova mora počinjati određenim brojem nula. Dakle SHA256(SHA256(zaglavlje)) = niz-znakova.


Budući da je jako mala vjerojatnost da će već početni nonce dati ispravan rezultat, klijent mora modificirati početni nonce (npr. uvećati ga za jedan) te probati hashirati opet. To se nastavlja sve dok jedan rudar ne nađe niz znakova koji počinje određenim brojem nula (za to je potrebno otprilike deset minuta).


Kako rudar zna s koliko nula treba počinjati niz znakova? Svako zaglavlje bloka sadrži polje "bitovi (bits)" koje označava metu. Kad rudari hashiraju zaglavlje koje sadrži nonce, dobiveni hash mora bit manji ili jednak meti (broju nula u nizu).


Verzija
01000000
Hash prethodnog bloka (obrnut)
17975b97c18ed1f7e255adf297599b55330edab87803c8170100000000000000
Merkleov korijen (obrnut)
8a97295a2747b4f1a0b3948df3990344c0e19fa6b2b92b3a19c8e6badc171787
Vremenska oznaka
358b0553
Bitovi
1b0404cb
Nonce
48750833
Broj transakcija
63
Coinbase transakcija
Transakcija


 
Polje bitovi sadrži komprimirani zapis mete (1b0404cb). Puni zapis dobiva se pomoću formule:

0404cb * 2^(8 * (1b – 3)) = 00000000000404CB000000000000000000000000000000000000000000000000


Vrijednost dobivena dvostrukim hashiranjem noncea mora bit manja ili jednaka meti.
Dakle, zaglavlje = "01000000" +
"17975b97c18ed1f7e255adf297599b55330edab87803c8170100000000000000" +
"8a97295a2747b4f1a0b3948df3990344c0e19fa6b2b92b3a19c8e6badc171787" +
"358b0553" + "1b0404cb" + "48750833"

Dvostruki hash to zaglavlja je:

SHA256(SHA256(zaglavlje)) = 38f1abdecb7e001ab403aecd885a010d5a254054e479d335273eaa1cbdd62674


Budući da dobiven vrijednost nije jednaka meti, rudar će nonce uvećati za jedan (48750534) te pokušati opet, sve dok ne dobije metu.

Težina rudarenja

  

Što je meta manja (niz počinje s više nula) to je teže rudariti. Težina (difficulty) se računa po formuli:
težina = težina_1_meta / trenutačna_meta
  
težina_1_meta (ili bazna meta) je 00000000FFFF0000000000000000000000000000000000000000000000000000

Težina iz prethodnog primjera je tad 00000000FFFF0000000000000000000000000000000000000000000000000000 / 00000000000404CB000000000000000000000000000000000000000000000000 = 16307.4209

Trenutačna težina je 5,006,860,589.21 što znači da bi prosječnom PC-ju trebalo oko 35000 godina da izrudari blok. Ona se poveća svakih 2016 izrudarenih blokova, odnosno svaka dva tjedna. Svakih 2016 blokova uspoređuju se vremenske oznake iz zaglavlja blokova da bi se odredilo stvarno vrijeme koje je bilo potrebno da se ti blokovi izrudare. Ako je trebalo manje od dva tjedna, težina rudarenja se poveća, a ako je trebalo više, težina se smanji. Nova meta računa se prema formuli:

nova_meta = stara_meta * (vrijeme za 2016 blokova) / 2 tjedna

Nonce i extranonce

 

Nonce polje u zaglavlju veličine je 32 bita. Tijekom rudarenja njegova se vrijednost povećava te se često događa da se ono prelije. Coinbase transakcije sadrže samo jedan ulaz koje trenutačno sadržava i polje extranonce u koje se upisuje višak iz polja nonce.

 

Naknada za izrudareni blok

Coinbase transakcije također sadrže i određeni broj bitcoina koji služe kao nagrada onome tko je izrudario prethodni blok. Naknada je u početku iznosila 50 bitcoina te se prepolavlja svakih 210 000 blokova (oko 4 godine). Nakon bloka 420 000 iznosi 25 bitcoina. Naknada je funkcija visine bloka te se računa se prema formuli:
(50 * 100000000) >> (visina / 210000)
Operacija >> predstavlja binarni pomak (shift) udesno.
To znači da će biti moguće izrudariti maksimalno 21 milijun bitcoina.

No comments:

Post a Comment