Što je to “fork”

U razvoju softwere-a fork (račvanje, odvajanje, dijeljenje) je događaj prilikom kojeg se na bazi postojećeg projekta kreira novi odvojen i neovisan projekt koji sa originalnim projektom dijeli zajedničku povijest i programski kod. Takvi događaji se najčešće dešavaju u slučajevima kada postoji razlika u razmišljanjima ljudi koji sudjeluju u razvoju nekog software-a, te se dio developera odluči odvojiti od originalnog projekta kako bi u novom projektu implementirali promjene koje se ne žele implementirati u originalnom projektu. Dobar primjer takvog razdvajanja projekta kod kriptovaluta je Litecoin koji je u jednom trenutku kopirao programski kod Bitcoina, te aplicirao neke svoje promjene i nastavio kao nezavisni projekt sa svojim timom developera.

Kod Bitcoina (i kod drugih kriptovaluta) fork je događaj koji se dešava u slučaju promjena u protokolu (programskom kodu) kriptovalute koji ima utjecaj na kompatibilnost. Postoje dvije vrste fork-a. “Soft” fork i “Hard” fork, koji se razlikuju po tome koliko su kompatibilni sa starim verzijama protokola.

Soft fork je promjena u Bitcoin protokolu nakon koje stari, originalni software prihvaća blokove kreirane od strane novog software-a, no novi software ne prihvaća blokove kreirane od strane starog software-a. Većina soft fork-ova se aktivira kada novu verziju protokola prihvati više od 51% miner-a i zato se takva promjena zove “miner activated soft fork” ili MASF. Alternativno aktiviranje soft fork-a može doći od strane full nodova Bitcoin mreže (bez pristanka minera), te se takva promjena zove “user activated soft fork” ili UASF pošto promjenu forsiraju korisnici na svojim nodovima a ne mineri.

I u jednom i u drugom slučaju se dešava to da većina prihvati promjene, te ignoriranjem blokova manjine kreiraju gubitke toj manjini (uzalud potrošena struja i vrijeme na nešto što većina ne prihvaća). U prvom slučaju (MASF) većina minera kreira blokove koje prihvaća manjina (minera), dok se blokovi manjine odbijaju, te se tako manjini stvaraju realni financijski gubitci te ih se na taj način tjera da prihvate novu verziju software-a. U slučaju UASF-a, korisnici (full nodovi) odbijaju blokove onih minera (nebitno je dali su ti mineri u većini ili manjini) koji nisu prihvatili novi protokol, te im na taj način kreiraju financijske gubitke.

Tako je na primjer MASF-om u Bitcoin uveden “pay to script hash” (P2SH), dok je npr. UASF-om uveden SegWit.

Hard fork je promjena u protokolu nakon koje više ne postoji kompatibilnost između stare verzije software-a i nove verzije software-a. Prilikom takvih promjena postoje dva moguća scenarija.

Prvi i jednostavniji je da se sa tim promjenama slažu svi sudionici mreže (mineri i nodovi), te da svi pređu na novu verziju software-a. Kako su većinom takve promjene koje poništavaju kompatibilnost napravljene tako da se aktiviraju u fiksnom trenutku u budućnosti (npr. nakon određenog bloka) svi sudionici mreže imaju vremena ažurirati svoj software kako bi se izbjeglo gubljenje podataka u trenutku aktivacije. Takvi događaji su se dešavali u ranom razvoju Bitcoina u slučajevima kada bi se otkrili bug-ovi u samom protokolu koji bi onemogućili ispravan rad mreže (npr. omogućili neograničeno kreiranje novih Bitcoina, poništavanje transakcija itd.).

Ukoliko prilikom aktivacije promjene, na novu verziju ne prođu svi mineri i aktivni nodovi, blockchain se u tom trenutku dijeli, tj. “fork”-a te nastaje nova verzija koja kreće u nekom svom pravcu i po svojim pravilima, dok stara verzija ostaje na starim nepromijenjenim pravilima te nastavlja raditi kao i prije hard fork-a. Prilikom takve promjene praktički nastaje nova kriptovaluta koja sa starom dijeli povijest transakcija. Upravo zbog toga, svi koji su imali originalnu valutu prije hard fork-a, imaju identičnu količinu nove valute.

Najpoznatiji primjer Bitcoin hard fork-a je Bitcoin Cash koji se odvoio od Bitcoina na bloku: 478558, 1.8.2017. prilikom kojeg je svaki vlasnik Bitcoin-a dobio i identičnu količinu Bitcoin Cash-a.

Pitanja, komentari i prijedlozi na forumu.


Objavljeno

u

autor/ica

Oznake: