S kombinatorjem do lažjega prehoda na Shelley

Slovenski prevod članka Anthonyja Quinna Combinator makes easy work of Shelley hard work, objavljenega 7. maja 2020.

Prevedel: Tilia I/O. Če ti je prevod v pomoč nas prosim podpri z delegiranjem kriptovalute ada v enega od naših poolov (npr. TILX). Hvala.

S kombinatorjem do lažjega prehoda na Shelley

V zakulisju z Duncanom Couttsom in Edskom de Vriesom


Odkar je ob koncu lanskega leta Incentivized Testnet označil prihod Shelley obdobja je platforma Cardano vstopila v obdobje hitrega razvoja. Zadnjih 30 mesecev je konsenzni protokol Ouroboros Classic podpiral Cardano Byron in kriptovaluto ada, kmalu pa ga bo zamenjal Ouroboros Praos. To je verzija našega proof-of-stake (PoS) protocola, ki bo v začetnih korakih decentralizacije poganjal Shelley.

20 februarja smo nadgradili Cardano s tako imenovanim hard forkom, ki je preklopil mainnet (glavno omrežje) iz originalnega konsenznega protokola, Ouroboros Classic na novejšo različico, imenovano Ouroboros BFT. Ta BFT hard fork je pričetek tranzicijskega obdobja pod Ouroboros BFT, ki je nekakšna okleščena različica načrtovanega protokola, ki nam omogoča preklop na Praos medtem, ko še vedno preprečuje morebitno zlonamerno obnašanje. Veliko uporabnikom najbrž tega sploh ni opazilo. Za uporabnike denarnice Daedalus je bila to le običajna nadgradnja denarnice. Menjalnice so morale nadgradnjo opraviti ročno vendar pa so za ta namen imele več tednov časa in vedno smo bili na voljo za pomoč.

Naslednji dogodek, 30. Marca, je bila izdaja “Byron reboot”. Izdaja je vsebovala popolnoma novo kodo v velikem številu cardanovih komponent, vključno z novo kodo vozlišča (node) s podporo delegaciji in decentralizaciji ter prihodnji Shelley funkcionalnosti. Velika prednost nove kode je modularen razvoj, ki omogoča, da se veliko komponent lahko spremeni, ne da bi s tem povzročili okvaro ostalih komponent.

BFT bo deloval kot odskočna deska za Shelley hard fork, kateri pa bo izdan, ko bomo zadovoljni s Haskell testnetom. Ta, drugi hard fork, bo za menjalnice, imetnike ada valute in uporabnike denarnice podoben procesu iz februarja in nadejamo se, da bo tudi tako uspešen.

Medtem, ko navzven vse izgleda umirjeno pa se v ozadju veliko dogaja. Tako kot račka, ko veselo plava po ribniku - medtem, ko se njene plavutke močno gibljejo pod umirjeno vodno gladino - tako tudi naši blockchain inženirji trdo delajo.

Torej, usedli smo se z devema glavnima inženirjema projekta Cardano, Duncanom Couttsom in Edskom de Vriesom, da bi izvedeli, kako so to naredili. Duncan je že tri leta Cardanov arhitektni vodja. Duncan in Edsko uporabljata Haskell, programski jezik, ki v katerem se razvija Cardano, že 35 let.

Duncan, kako si to naredil?

Kot je opisano v časovnem načrtu (roadmap) Cardana, IOHK-jevi inženirji verjamejo v gladko nadgradnjo kode. Namesto, da bi poskušali skočiti iz Ouroboros Classic na Praos z eno nadgradnjo - kar bi bila neverjetno kompleksna naloga - se je nadgradnja razdelila na dva dela z uporabo Ourobors BFT, kot vmesne stopnje (Slika 1). BFT koda je kompatibilna z zveznimi vozlišči (federated nodes) iz obdobja Byrona and z vozlišči Shelley, ki so bila izdana y Byron reboot. To je nekakšna štafeta: en tekač (v našem primeru poganja en protokol) vstopi v cono predaje, kjer čaka drugi tekač. Oba tekača sinhronizirata svoje hitrosti (tako, da sta perfektno kompatibilna), izvedeta predajo štafete (poganjanje glavnega omrežja - main net) in novi tekač s štafeto nadaljuje do naslednjega kroga.


Slika 1: Časovni načrt prehoda iz Byron mainneta v Shelley

Daedalus flight process nam je omogočil hiter razvoj in testiranje nove denarnice in ko bo bodo vsi poganjali denarnico na glavnem omrežju in ko bomo končali z menjavo glavnih vozlišč bo stara koda odveč. Trenutno se nahajamo v tej tranziciji, z novo verzijo denarnice Daedalus izdane 24. Aprila.

Tako kot direktor IOHK Charles Hoskinson opisuje v svojem videu o hard forku je naš cilj mehak prehod v Shelley. Življensko pomembno orodje v tem prehodu je prestavljala izdelava hard fork kombinatorja.

To zveni kot, da je kmetijska mehanizacija. Kaj je to?

Kombinator je le tehnični izraz za nekaj kar kombinira druge stvari. Na primer, operacija seštevanja je kombinator, ki deluje na številih. Hard fork kombinator kombinira dva protokola v enega. Temu pravimo sekvenčna kombinacija dveh protokol, ker nekaj časa poganja en protokol in nato v neki točki preklopi na uporabo drugega. V našem primeru sta to dve različici Ouroboros - BTF in Praos.

Pametni del vsega tega je uporaba diskretnih modulov, ki opravljajo svoje delo, medtem ko vedo zelo malo drug o drugem in o blockchainu. Enostavnost je ključ in ta proces, s katerim odstranimo detajle imenujemo ‘abstrakcija’. Veliko modulov za konsenzus sploh ne ve, da delajo s kriptovaluto in lahko bi počeli skoraj karkoli na blockchainu. Edina stvar, ki predstavlja razliko so pravila dnevnika (ledger rules); konsenzus je vseskozi enak. Le nastavite ga - v programerskem žargonu bi rekli, da ga ‘instancirate’ - s pravili za igranje Pokemona namesto za UTXO računovodstvo. [Za uporabnike, ki jih zanimajo tehnični detajli, oglejte si Edska, ki vam bo bolj detaljno predstavi process abstrakcije in kombinatorja v eni od prihodnjih blog objav.]

Iz vaših ust zveni enostavno

Pravzaprav je zelo zapleteno, ker Cardano poganja kriptovaluto Ada in še veliko ostalih stvari istočasno. Predstavljate si lahko, kot da bi menjali vsa kolesa na avtu s prikolico kar med vožnjo. Torej moramo biti prepričani, da to lahko storimo na povsem varen način.

Lahko bi se tega lotili v enem koraku vendar je bilo smiselno to storiti na generičen način z uporabo kominatorja protokolov. Za to možnost smo se odločili, ker bomo tako dobili boljši rezultat in nam omogoča testiranje, ki je vitalnega pomena za zagotovitev, da koda deluje. Povrhu pa bo v prihodnosti še več hard forkov, kar nam je odločitev za kombinator le še olajšalo. Za primer, ko se bližamo vrhuncu razvoja Cardana in se premikamo proti obdbjem Goguena, Basha in Voltaira bom potreben vsaj po en hard fork za vsako od navedenih stopenj.

Edsko, ali lahko podaš primer?

Kot pravi Duncan, za raziskovalce so ti implementacijski problemi trivilalni vendar soočenje z njimi predstavlja 99% našega dela. Vzemimo na primer problem časa na blockchainu. S tem sem si belil glavo kar nekaj tednov. Čas je razdeljen na reže, kjer veriga lahko vsebuje le en blok na režo. Pogosto moramo pretvarjati med številkami rež in časom v resničnem svetu, npr., ko vozlišče potrebuje informacijo ‘ali sem na vrsti’? Za narediti naslednji blok. To je Cardanov temelj, vendar pa se dolžina reže spremeni po hard forku. Za Byron je reža dolga 20 sekund, za Shelley bo 2 sekundi ali mogoče 1. Da resnično zakompliciramo zadeve, točno določen trenutek v času, ko se bo hard fork naredil je določen na verigi sami. Vseeno pa moram vedeti kdaj se bo sprememba zgodila. To predstavlja težavo: za opraviti konverzije med režami in časom potrebujem informacijo o stanju blockchaina a za določilo stanja blockchaina potrebujem konverzije med časi!

Tu se resnično gibljemo na področju problema o jajcu in kokoši, kjer moramo razplesti veliko kompleksni stvari. Biti moramo zelo natančni pri tem kako počnemo stvari. Mogoče zgleda trivialno v teoriji vendar je zelo težko to razplesti in se prepričati, da ne pride do začaranega kroga.

Ne moremo si privoščiti, da bi se zmotili, torej kako vemo da imate prav?

Duncan: To je odlično vprašanje. Moj odgovor je, da pridete do odgovora na dva načina. Prvi je intelektualni: analizirate problem, poračunate, se pomenite s kolegi sodelavci in se borite s problemom dokler ne spregledate kako se vse skupaj poveže. Drugi način je, da naredimo naš QuickCheck testiranje (hitro testiranje), ki nam daje samozavest, da to deluje tako, kot mislimo, da deluje. Opravljamo tudi širše testiranje, ki nas privede v neobičajne okoliščine na katere ne bi nikoli pomislili, npr. kot je ta pri menjavi protokola. Lahko naredimo 100.000 testov vsakič, ko zamenjamo vrstico kode. [Lars Brunjes je pisal o tem kako je John Hughes, eden od stvariteljev Haskella, pomagal IOHK-ju razviti strategije testiranja.]

Edsko: Da, strinjam se. Iz stališča kombinatorja rešujem te stvari z razmišljanjem kako zagotoviti, da bo koda, ki jo pišem zagotavljala stvari in katera zagotovila bo potrebovala od dnevnika (ledger). Skiciram si matematičen dokaz that ta ‘if-then’ stavek je dejansko upravičen in potem to predam ekipi za formalne metode. Ekipa za formalne metode so ljudje, ki naredijo matematična pravila, ki opisujejo blockchain in lahko spreminjajo pravila na tak način, da zagotavljajo potrebna zagotovila.

Kar se tiče Duncanove druge točke, lahko trdim, da je rešitev problema s časom, ki sem ga omenjal prej, pravilna z dobrim matematičnim razmislekom in s pomočjo testiranja. Odločitve o času so enostavne, ko imamo celoten blockchain vendar pa so zelo težke kadar moramo napovedovati prihodnost. Na srečo lahko blockchain testiramo enostavno, ker smo zadeve tako postavili. Torej, ustvarim lahko cel blockchain in ga potem razrežem na pol. Vzamem prvo polovico in rečem, da predstavlja sedanjost, potem pa vzamem drugo polovico in rečem, da predstavlja prihodnost. Potem lahko vzamem ‘sedanjost’ (prvo polovico) s pomočjo katere napovem ‘prihodnost’ (druga polovica) in preverim glede na celoto (na kateri so izračuni enostavni). Če se ujemajo, vem, da je vse OK.

Kdaj si s tem začel?

Začel sem takoj po tem, ko je Duncan prišel na genialno idejo OBFT-ja. Torej razmišljam o kombinatorju z vmesnimi prekinitvami že približno 18 mesecev. To je bilo v načrtu že od samega začetka našega na novo napisanega modularnega Ouroborosa, ki se je začel oktobra 2018, z mojim prvim komitom na v GitHub repozitorij. Demonstracijo prototipa z OBFT in Praos smo imeli kmalu zatem, v decembru 2018.

In koliko ljudi je bilo vpletenih?

Duncan: Veliko ljudi je delalo na kodi za konsenz, vendar kadar naletimo na res težke probleme, kot je ta kombinator, jih predamo Edsku: on je naš programski inženir extraordinaire! Haskell programiranje je kot prosto plezanje, le da plezamo z vrvmi formalnih metod, ki nam zagotavljajo podporo.

Zaključna misel?

Duncan: Koda, ki se je do sedaj poganjala se v tem trenutku menjava in kmalu bo koda, ki je poganjala Cardano še pred enim mesecem, odstranjena. Ko bo enkrat vsak na mainnetu uporabljal novo kodo in ko bomo enkrat zaključili z menjavo vozlišč, bo stara koda redundantna. Trenutno se nahajamo v tem tranzicijskem obdobju in nihče še ne kriči, da nebo pada. Nihče sploh ni opazil.

Edsko: To je že sam po sebi velik dosežek. Ideja OBFT je bila ključna za izpeljavo tranzicije vendar bo postala nepotrebna, ko bomo presedlali na Shelley. To je bil za nas način, da se rečimo stare kode, kar je pogosto zelo težko storiti, kakor dobro vedo banke, ki imajo s tem velike stroške.

Duncan: In če bo vse delovalo kot mora, ne boste opazili nič.

Duncan in Edsko, hvala za vajin čas. Mislim, da je bolje, da vaju izpustim nazaj na delo.