Dolgotrajni spor glede velikosti blokov in nedavna uvedba več novih implementacij Bitcoina sta poudarila, da vsa Bitcoin vozlišča ne uporabljajo popolnoma istega pravila – in kar je še pomembneje, da pri izvajanju teh pravil vse razvojne skupine ne uporabljajo podobnih pravil.
Razvojna ekipa v ozadju Bitcoin jedro, Zgodovinski “referenčni odjemalec” Bitcoina zahteva široko soglasje skupnosti, preden uvede spremembe pravil, kot je zvišanje omejitve velikosti bloka, medtem ko druge spremembe ne veljajo za iste standarde.
Medtem se nekateri bitcoin vilice, kot npr Bitcoin LJR, so splošno sprejete v razvojni skupnosti, medtem ko druge, kot je npr Bitcoin Classic, pritegne veliko polemik. Nekateri menijo, da je to nedosledno.
Toda to razliko je mogoče razložiti. Nekatere spremembe pravil, ki se izvajajo v določenih vilicah, vplivajo na Bitcoin omrežje zelo drugače kot druge. Ali natančneje: Nekatere spremembe pravil vplivajo na zelo različne sloje Bitcoin omrežja. Nekatere spremembe teh pravil lahko razdelijo Bitcoin omrežje, druge pa ne.
Za razjasnitev teh razlik, Bitcoin jedro razvijalec in Ciphrex Predsednik uprave Eric Lombrozo je pred kratkim predlagal, da se v vseh predlogih za izboljšanje Bitcoina označijo ustrezne plasti. To so štiri glavne plasti v Bitcoin omrežju, kot je določeno v njegovem BIP 123, in pomembnost konsenza o vsakem.
Pravila soglasja
Pravila soglasja so najpomembnejša pravila Bitcoina. Ugotavljajo – med drugim – količino bitcoinov, vključenih v nagrado za blok, težave pri rudarjenju, vrsto zahtevanega dokaza in dejansko omejitev velikosti bloka.
Ta pravila so tako pomembna, ker določajo, katere bloke polna vozlišča štejejo za veljavna. In če vsa polna vozlišča uporabljajo enaka pravila soglasja, to zagotavlja, da vsa vzdržujejo enako kopijo verige blokov.
Če različna vozlišča uporabljajo drugačna pravila soglasja, tvegajo, da bodo sprejela bloke, ki jih druga vozlišča zavrnejo. Takšna neskladja bi lahko privedla do tega, da različna vozlišča ohranijo popolnoma nezdružljive različice verige blokov, kar učinkovito razdeli Bitcoin omrežje.
Pravila soglasja za Bitcoin je mogoče spremeniti na dva načina. Sprememba, ki protokolu doda dodatna pravila (zaradi česar so bili veljavni bloki neveljavni), se imenuje soft fork. Mehke vilice zahtevajo večino zgoščevalne moči, da podprejo spremembo. Bloki, ki so izdelani po novih pravilih, bi veljali tudi po starih pravilih, zato bi vozlišča, ki se ne bi nadgradila, še vedno sledila najdaljši verigi.
Nenadgrajeni rudarji pa lahko ustvarijo bloke, ki po novih pravilih niso veljavni, s čimer zapravijo zgoščeno moč. In nenadgrajena polna vozlišča ne bi mogla več preverjati, ali se bloki držijo novih pravil, zaradi česar morajo počakati na dodatne potrditve, da dosežejo enako raven varnosti.
Iz teh in drugih razlogov je razvojna skupina za Bitcoin Core dejala, da bo običajno potrebna velika večina 95 odstotkov razpršene moči, da se dogovorijo o mehkih vilicah..
Sprememba pravila soglasja, ki odstranjuje pravila iz protokola (s čimer postanejo veljavni neveljavni bloki), se imenuje hard fork. Hard fork zahteva, da sprejmejo vsa polna vozlišča v omrežju. Vsako vozlišče, ki spremembe ne uvede, morda sploh ne sledi najdaljši verigi, saj lahko to verigo šteje za neveljavno in namesto tega ostane na “stari” verigi. To bi lahko razdelilo Bitcoin omrežje, kot je opisano zgoraj. Kako dolgo bi tak razkol vztrajal, v resnici ni tehnično vprašanje, temveč razprava o politiki, sociologiji, ekonomiji, teoriji iger in še več.
Spremembe pravil soglasja brez konsenza z mehkimi vilicami bi lahko – v najslabšem primeru – pri manjšini rudarjev zapravile razpršeno moč in (nekoliko) poslabšale varnost celotnih vozlišč..
Spremembe pravil trdega forka brez soglasja bi lahko – v najslabšem primeru – razcepile Bitcoin omrežje.
Peer-to-peer plast
Sloj enakovrednih omrežij Bitcoin zajema, kako celotna vozlišča delijo podatke in katere podatke. To vključuje pravila protokola za pošiljanje in prejemanje transakcij in blokov ter posebne podatkovne pakete, kot so ločene priče ali iskalne tabele Invertible Bloom.
Najpomembneje je, da mora plast med enakovrednimi zagotoviti, da novi bloki najdejo pot skozi celotno omrežje, pa tudi podatkovni paketi, potrebni za preverjanje blokov. Če ta politika prenosa ne uspe, lahko pride do razkola omrežja, kjer imajo različna vozlišča različne različice verige blokov – vsaj dokler bloki znova ne najdejo poti skozi celotno omrežje.
Toda v nasprotju s pravili soglasja ni nujno velik problem, če ne velja vsako posamezno vozlišče popolnoma iste politike prenosa. Ker večina vozlišč posreduje bloke na vsaj osem enakovrednih naprav, bi moral ta ojačevalnik zagotoviti, da vsa vozlišča prejmejo vse bloke, tudi če nekatera ne posredujejo pravilno.
Vozli imajo pri prenašanju transakcij še več prostega prostora. Večina vozlišč v Bitcoin omrežju danes uporablja pravilnik »prvič viden«: če prejme dve ali več nasprotujočih si transakcij, slednjo zavrne. Toda čedalje več vozlišč uporablja različice pravil nadomestitve s provizijo, kar pomeni, da izbirajo transakcije, ki vključujejo najvišje provizije – ne glede na to, katera je bila prva. Poleg tega nekatera vozlišča v celoti zavrnejo določene vrste transakcij ali pa jih sploh ne posredujejo.
Kljub temu se rudarji na koncu odločijo, katere transakcije vključijo v bloke in zakaj. Šele ko se politike posredovanja transakcij zelo razlikujejo ali so dovolj omejujoče, lahko postane nepredvidljivo, katere transakcije so potrjene samo iz teh razlogov.
Spremembe na ravni peer-to-peer brez soglasja bi lahko – v najslabšem primeru – razcepile omrežje. To tveganje obstaja, če bloki ne najdejo poti po celotnem omrežju. Razdelitev pa se samodejno razreši po ponovni povezavi z omrežjem.
Če se spremembe nanašajo samo na transakcije, bi lahko – v najslabšem primeru – preprečile potrditev nekaterih transakcij. Prav tako bi lahko zmanjšala zanesljivost nepotrjenih transakcij. Toda omrežja ne more razdeliti.
Vmesniki za programiranje aplikacij in oddaljeni klici postopkov
Sloji aplikacijskega programskega vmesnika (API) in oddaljeni klic postopka (RPC) so komunikacijski sloji na vrhu protokola peer-to-peer. Številne programske aplikacije za Bitcoin – na primer mobilne denarnice in raziskovalci blokov – komunicirajo z verigo blokov prek teh plasti tako, da se povežejo z API-jem ali knjižnico programske opreme.
Če ena od teh plasti ne uspe, vse povezane programske aplikacije ne bodo mogle zanesljivo komunicirati z Bitcoin omrežjem. Mobilne denarnice ne bodo vedele, ali so prejele Bitcoin, raziskovalci blokov pa ne morejo ugotoviti, ali je bil najden nov blok. Vsi drugi uporabniki Bitcoinov pa ničesar ne bodo opazili; samo omrežje še vedno deluje dobro.
Spremembe slojev API in RPC brez soglasja bi lahko – v najslabšem primeru – popolnoma odstranile uporabnike teh plasti iz Bitcoin omrežja. Toda take spremembe ne morejo razdeliti samega omrežja.
Aplikacije
Nazadnje, aplikacijski sloj se nanaša na to, kako programske aplikacije Bitcoin ustvarjajo in uporabljajo določene vrste podatkov, ki se v resnici ne dotikajo neposredno omrežja, vendar je koristno za sinhronizacijo med aplikacijami..
Sem spadajo na primer oblike naslovov, ustvarjanje zasebnih ključev ali varnostne kopije denarnice. Če ena denarnica ustvari naslov, za katerega druga denarnica ne velja, da bo transakcija med njimi nemogoča. Ali če ena denarnica uporablja eno metodo za ustvarjanje rezervnega naslova naslovov, druga pa druga, uporabniki z vsako denarnico ne morejo obnoviti svojih zasebnih ključev. Enako velja za varnostne kopije denarnice.
Spremembe aplikacijskih slojev brez konsenza bi lahko v najslabšem primeru nekaterim uporabnikom preprečile medsebojno transakcijo in povzročile druge nevšečnosti. Takšne spremembe ne morejo razdeliti omrežja. Hvala Lombrozu za tehnične napotke.