Blockchain

Trde vilice, mehke vilice, privzete nastavitve in prisila

Eden od pomembnih argumentov v prostoru blockchain je, ali so trde ali mehke vilice prednostni mehanizem za nadgradnjo protokola. Osnovna razlika med obema je, da mehke vilice spremenijo pravila protokola strogo zmanjševanje nabor transakcij, ki je veljaven, tako da bodo vozlišča, ki sledijo starim pravilom, še vedno vključena v novo verigo (pod pogojem, da večina rudarjev/validatorjev izvaja fork), medtem ko trdi forki omogočajo, da predhodno neveljavne transakcije in bloki postanejo veljavni, tako da stranke morajo nadgraditi svoje odjemalce, da ostanejo v trdo razcepljeni verigi. Obstajata tudi dve podvrsti trdih vilic: strogo širijo trde vilice, ki strogo razširijo nabor veljavnih transakcij, tako da so stara pravila dejansko mehka vilica glede na nova pravila, in dvostranski hard forks, kjer sta nabora pravil v obe smeri nezdružljiva.

Tukaj je Vennov diagram za ponazoritev vrst vilic:

Koristi, ki se običajno navajajo za oba, so naslednje.
  • Hard forki omogočajo razvijalcem veliko večjo fleksibilnost pri nadgradnji protokola, saj jim ni treba skrbeti, da se nova pravila “pašejo” s starimi pravili.
  • Mehke vilice so bolj priročne za uporabnike, saj uporabnikom ni treba nadgraditi, da ostanejo v verigi
  • Mehke vilice manj verjetno povzročijo razcep verige
  • Mehke vilice v resnici zahtevajo samo soglasje rudarjev/validatorjev (tudi če uporabniki še vedno uporabljajo stara pravila, če vozlišča, ki sestavljajo verigo, uporabljajo nova pravila, bodo v verigo v vsakem primeru prišle samo stvari, ki veljajo po novih pravilih); zahtevajo trde vilice opt-in soglasje uporabnikov

Poleg tega je ena glavnih kritik, ki se pogosto dajejo trdim vilicam, ta, da so trde vilice "prisilne". Tukaj implicirana vrsta prisile ni fizična sila; bolje rečeno je prisila z mrežnim učinkom. To pomeni, da če omrežje spremeni pravila iz A v B, potem tudi če vam je osebno všeč A, če je večini drugih uporabnikov všeč B in preklopijo na B, potem morate preklopiti na B kljub vašemu osebnemu nestrinjanju s spremembo, da boste na isto omrežje kot vsi ostali.

Zagovorniki trdih forkov so pogosto zasmehovani, češ da poskušajo doseči "sovražen prevzem" omrežja in "prisiliti" uporabnike, da se jim pridružijo. Poleg tega se tveganje razcepa verige pogosto uporablja za trditve vilic kot "nevarne".


Moje osebno stališče je, da so te kritike napačne, poleg tega pa v mnogih primerih popolnoma nazaj. To stališče ni specifično za Ethereum, Bitcoin ali katero koli drugo verigo blokov; izhaja iz splošnih lastnosti teh sistemov in je uporabna za katerega koli od njih. Poleg tega se spodnji argumenti nanašajo le na sporne spremembe, kjer jih velik del vsaj ene skupine (rudarji/validatorji in uporabniki) ne odobrava; če je sprememba nesporna, jo je na splošno mogoče izvesti varno, ne glede na obliko forka.

Najprej se pogovorimo o vprašanju prisile. Trde in mehke vilice spreminjajo protokol na načine, ki nekaterim uporabnikom morda niso všeč; kaj sprememba protokola bo to storila, če bo imela manj kot natančno 100-odstotno podporo. Poleg tega je skoraj neizogibno, da vsaj nekaj drugače mislečih v katerem koli scenariju ceni mrežni učinek vztrajanja pri večji skupini bolj kot lastne preference glede pravil protokola. Zato sta obe vrsti vilic prisilni, v pomenu besede mrežnega učinka.

Vendar obstaja bistvena razlika med trdimi in mehkimi vilicami: trde vilice so opt-in, medtem ko mehke vilice uporabnikom sploh ne omogočajo nobene "izbire".. Da bi se uporabnik pridružil trdo razcepljeni verigi, mora osebno namestiti programski paket, ki implementira pravila razcepa, in množica uporabnikov, ki se ne strinja s spremembo pravila še močneje, kot ceni učinke omrežja, lahko teoretično preprosto ostane na stara veriga – in praktično gledano tak dogodek se je že zgodilo.

To velja tako za striktno raztezne trde vilice kot za dvostranske trde vilice. V primeru mehkih vilic pa če je fork uspešen, nerazcepljena veriga ne obstaja. Zato mehke vilice jasno institucionalno dajejo prednost prisili pred odcepitvijo, medtem ko imajo trde vilice nasprotno. Moji lastni moralni pogledi me vodijo k temu, da dajem prednost odcepitvi pred prisilo, čeprav se drugi morda razlikujejo (najpogostejši argument je, da so mrežni učinki res zelo pomembni in da je bistveno, da "en kovanec vlada vsem«, čeprav obstajajo tudi zmernejše različice tega).

Če bi moral ugibati, zakaj so kljub tem argumentom mehke vilice pogosto označene kot "manj prisilne" kot trde vilice, bi rekel, da zato, ker se zdi, kot da trde vilice "prisili" uporabnika v namestitev posodobitve programske opreme, medtem ko z mehkimi vilicami uporabnikom »ni treba« storiti ničesar. Vendar je ta intuicija napačna: ni pomembno, ali morajo posamezni uporabniki opraviti preprost birokratski korak klikanja gumba »prenos« ali ne, temveč ali je uporabnik ali ne prisiljeni sprejeti spremembo pravil protokola ki jih raje ne bi sprejeli. In po tej metriki, kot je omenjeno zgoraj, sta obe vrsti vilic navsezadnje prisilni in trde vilice so tiste, ki so nekoliko boljše pri ohranjanju svobode uporabnika.

Zdaj pa poglejmo zelo kontroverzne razcepe, zlasti razcepe, kjer so preference rudarja/validatorja in nastavitve uporabnika v nasprotju. Tukaj so trije primeri: (i) dvostranske trde vilice, (ii) striktno razširljive trde vilice in (iii) tako imenovane »uporabniško aktivirane mehke vilice« (UASF). Četrta kategorija je, kjer rudarji aktivirajo mehke vilice brez soglasja uporabnika; do tega bomo prišli kasneje.

Prvič, dvostranske trde vilice. V najboljšem primeru je situacija preprosta. Z dvema kovancema se trguje na trgu, trgovci pa določijo relativno vrednost obeh. Iz primera ETC/ETH imamo ogromno dokazov, da je velika verjetnost, da bodo rudarji svoj hashrate preprosto dodelili kovancem na podlagi razmerja med cenami, da bi povečali svoj dobiček, ne glede na lastne ideološke poglede.

Tudi če nekateri rudarji izpovedujejo ideološke preference do ene ali druge strani, je zelo verjetno, da bo dovolj rudarjev, ki bodo pripravljeni prevzeti arbitražo o kakršnem koli neskladju med razmerjem med ceno in razmerjem moči razpršitve ter oboje uskladiti. Če se skuša oblikovati kartel rudarjev, ki ne bi rudaril v eni verigi, obstaja ogromno spodbud za prebeg.

Tu sta dva robna primera. Prva je možnost, da zaradi neučinkovitega algoritma prilagajanja težavnosti vrednost rudarjenja kovanca pade, ker cena pade, težavnost pa se ne zmanjša, da bi nadomestila, zaradi česar je rudarjenje zelo nedonosno in ni rudarjev, ki bi bili pripravljeni rudariti na izgube, da nadaljuje potiskanje verige naprej, dokler se njena težavnost ne vrne v ravnotežje. Pri Ethereumu ni bilo tako, a morda tako pri Bitcoinu. Zato lahko manjšinska veriga preprosto nikoli ne zaživi in ​​bo tako umrla. Upoštevajte, da je normativno vprašanje ali je to dobra stvar ali ne odvisno od vaših pogledov na prisilo proti odcepitvi; kot si lahko predstavljate iz tega, kar sem napisal zgoraj, osebno verjamem, da so takšni algoritmi za prilagoditev težavnosti, ki so sovražni manjšinski verigi, slabi.

Drugi robni primer je, da če je razlika zelo velika, lahko velika veriga 51 % napade manjšo verigo. Tudi v primeru delitve ETH/ETC z razmerjem 10:1 se to ni zgodilo; tako da zagotovo ni samoumevno. Vedno pa obstaja možnost, če rudarji v prevladujoči verigi raje prisilijo kot dovolijo odcepitev in delujejo v skladu s temi vrednotami.

Nato si poglejmo striktno razširljive trde vilice. V SEHF obstaja lastnost, da je nerazcepljena veriga veljavna po pravilih razcepa, in če ima torej vilica nižjo ceno kot nerazcepljena veriga, bo imela manjšo moč razpršitve kot nerazcepljena veriga in tako da bo nerazcepljena veriga na koncu sprejeta kot najdaljša veriga po pravilih prvotnega odjemalca in razcepljenega odjemalca – in tako razcepljena veriga “bo izničeno".

Obstaja argument, da obstaja močna inherentna pristranskost proti uspehu takega forka, saj bo možnost, da se bo razcepljena veriga uničila, vplivala na ceno, kar bo potisnilo ceno nižje, zaradi česar je še bolj verjetno, da bo veriga padla. izničen … Ta argument se mi zdi močan, zato je zelo dober razlog zanj kaj sporna trda vilica je dvostranska, namesto da se striktno širi.

Razvijalci Bitcoin Unlimited predlagajo, da to težavo rešite tako, da ročno izdelavo dvostranskih trdih vilic potem, ko se to zgodi, vendar bi bila boljša izbira vgraditi dvostranskost; na primer, v primeru bitcoina lahko dodate pravilo za prepoved neuporabljene opcijske kode in nato izvedete transakcijo, ki vsebuje to opcijsko kodo v nerazcepljeni verigi, tako da bo v skladu s pravili razcepljenih veriga od takrat naprej velja za večno neveljavno. V primeru Ethereuma so zaradi različnih podrobnosti o tem, kako deluje izračun stanja, skoraj vse trde vilice dvostranske skoraj samodejno. Druge verige imajo lahko drugačne lastnosti, odvisno od njihove arhitekture.

Zadnja vrsta vilic, ki je bila omenjena zgoraj, so mehke vilice, ki jih aktivira uporabnik. V UASF uporabniki vklopijo pravila soft fork, ne da bi se trudili pridobiti soglasje rudarjev; pričakuje se, da bodo rudarji preprosto padli v vrsto zaradi ekonomskega interesa. Če se veliko uporabnikov ne strinja z UASF, bo prišlo do delitve kovanca, kar bo privedlo do scenarija, ki je enak strogo razširjenemu hard forku, razen – in to je resnično pameten in zvijačen del koncepta – isti pritisk "tveganja anihilacije", ki močno nasprotuje razcepljeni verigi v strogo raztegljivih trdih vilicah, namesto tega močno daje prednost razcepljeni verigi v UASF. Čeprav je UASF opt-in, uporablja ekonomsko asimetrijo, da bi se usmeril k uspehu (čeprav pristranskost ni absolutna; če je UASF odločno nepriljubljen, potem ne bo uspel in bo preprosto povzročil razcep verige).

Vendar so UASF nevarna igra. Na primer, predpostavimo, da želijo razvijalci projekta narediti popravek UASF, ki pretvori neuporabljeno opcijsko kodo, ki je prej sprejela vse transakcije, v opcijsko kodo, ki sprejema samo transakcije, ki so v skladu s pravili neke kul nove funkcije, čeprav take, ki je politično ali tehnično sporen in ga rudarji ne marajo. Rudarji imajo premeten in zvit način za obrambo: lahko enostransko implementirajo soft fork, ki ga aktivira rudar, zaradi česar vse transakcije z uporabo funkcije, ki jo je ustvaril soft fork, vedno ne uspejo.

Zdaj imamo tri nize pravil:

  1. Izvirna pravila, kjer je koda X vedno veljavna.
  2. Pravila, kjer je koda X veljavna le, če je preostali del transakcije v skladu z novimi pravili
  3. Pravila, kjer je koda X vedno neveljavna.

Upoštevajte, da so (2) mehke vilice glede na (1), (3) pa mehke vilice glede na (2). Zdaj obstaja močan gospodarski pritisk v korist (3), zato soft-fork ne doseže svojega cilja.

Zaključek je takšen. Mehke vilice so nevarna igra in postanejo še bolj nevarne, če so prepirljive in se rudarji začnejo upirati. Strogo razširljive trde vilice so tudi nevarna igra. Mehke vilice, ki jih aktivira rudar, so prisilne; mehke vilice, ki jih aktivira uporabnik, so manj prisilne, čeprav še vedno precej prisilne zaradi ekonomskega pritiska, imajo pa tudi svoje nevarnosti. Če res želite narediti sporno spremembo in ste se odločili, da so visoki družbeni stroški tega vredni, naredite čisto dvostransko trdo razcepitev, porabite nekaj časa, da dodate ustrezno zaščito pred ponovnim predvajanjem, in pustite, da trg uredi zadevo .

vir: https://vitalik.eth.limo/general/2017/03/14/forks_and_markets.html