Megvan az az érzés, amikor a pirkadat első pislákolására odakuckózol az ablakhoz azzal az elvárással, hogy nemsokára végig nézheted a gyönyörű napfelkeltét… vársz-vársz… közben rájössz, hogy azért egy kávét csak csinálhattál volna… de nem akarsz megfordulni, mert akkor lemaradsz a legszebb pillanatról… vársz tovább… eltelik újabb 10 perc és még mindig csak a pislákolás erősödik, de a nap koronája még sehol… közben már egyre inkább menned kéne a mellékhelyiségbe is… de akkor sem fogod otthagyni, ha már több mint fél órája itt rostokolsz… tovább várod a csodálatos látványt… majd egy hangos “OTT ROHADJON MEG!!!” felkiáltással elmész elintézni a dolgod…
Na körülbelül ilyen érzésem van, amikor BÁRHOL, BÁRMIT olvasok az ethereum jövőjéről. Éppen ennek okán eléggé ignoráltam is, remélve, ha kellően sok idő eltelik, akkor csak láthatom nyomát értékelhető progressznek. Kb. 2 éve foglalkoztam komolyabban itt a blogon [1], [2] a témával. Nos, pont ez a két év kellett, hogy végre ne csak álmokról és tévelygésekről tudjak írni, hanem konkrétumokról is.
Persze az Ethereum törzsgárda mentségére legyen mondva, hogy az elmúlt bő három évük nagyon kemény volt. Gyakorlatilag asszisztáltak az ICO mániához, ami miatt a nap 24 órájában mindenféle scam projekteket kellett shillelniük. Roadshowzniuk kellett körbe a világban és rengeteg tánc koreográfiát megtanulniuk.
Mára azonban alább hagyott a mánia és ezzel együtt elkezdett kiapadni az alapítvány végtelennek tűnő anyagi forrása, ami miatt folyamatosan dobálják ki a korábbi full expat finanszírozott projekteket. Mindez intő jel lehetett, hogy a fiatalok úgy döntsenek, ideje visszatérnünk ahhoz, amihez értenek is: és elindult gőzerővel az Ethereum 2.0 átállás és vele együtt az Ethereum 1.X foltozás is. Ezzel kapcsolatban mára lényegesen többel rendelkezünk, mint néhány raklap whitepaper; így időszerűnek tartom újra leporolni a témát.
Teszem ezt azért is, mert végre elindult és stabilan működik is az első Ethereum 2.0 testnet (Topar) a PrysmaticLabs jóvoltából, így a folytatás mögött leírt elmélet ma már élesben is kipróbálható. A cikk végére rakok is egy kis segédletet, hogy miként tudja bárki egyszerű eszközökkel (Metamask + Pyrsm client) kipróbálni, hogy milyen is a validálás.
Ebben a cikkben még nem szeretnék nagyon belemenni az eth2.0 technológiai részleteibe… inkább csak segítenék az olvasónak megérteni, hogy miben is lesz más az eth2.0 és milyen módon is fog együtt működni a jelenlegi ethereummal.
A cikk megírásának egyik motivációja, hogy egyre több félinformáció és minden alapot nélkülöző “szakértői” vélemény jelenik meg már itthon is Ethereum 2.0 kapcsán. Reményeim szerint ezzel a cikkel valamelyest tudom korrigálni mindezt.
Ha röviden össze kéne foglalni, hogy mi az Ethereum 2.0, akkor nagyjából azt mondhatnám, hogy a meglévő ethereum teljes újragondolása, amelyet lényegében átjárhatóvá tesznek a jelenlegi ethereummal is. Fontos, hogy az Eth2.0 elindítása NEM jár új ethereum kibocsátással. Valószínűleg a legtöbb scam (átverés) egyébként erre fog fókuszálni: “vegyél eth2.0-át olcsón, még a kiadás előtt“.
Ez persze nem jelenti azt, hogy nem lesz ethereum 2.0-ás Ether… Kicsit lentebb ezt alaposabban kifejtem, de a lényeg, hogy több évig az ethereum 2.0-án létező Ether (BETH vagy ETH2 majd elválik) teljesen el lesz szeparálva a jelenlegi (1.X) Ethertől (ETH), ami főleg azokban az esetekben fog zavart okozni, ahol például egy exchange kitalálja, hogy akkor ő idő előtt támogatni fogja az BETH-t is párhuzamosan. A helyzet pedig majd akkor fog eszkalálódni, amikor már beindul az exchangek licitálása arra, hogy akkor most ők az 1.X vagy a 2-es láncon lévő Ethert kezelik-e az “ETH” ticker alatt. Persze ez a probléma még hosszú évekre van tőlünk.
Technológiailag az Eth2.0 legnagyobb újdonságai: 64 shard (különálló sidechain), amik már Proof of Stake elven lesznek validálva, tehát lényegében megszűnik a bányászat is. A shardok és a validációs munkálatokat az un. “Beacon Chain” fogja össze, ami mondhatni az ethereum szívverésért felelős független hálózat lesz. A Beacon Chain szintén PoS elven validált lánc lesz.
Az eth2.0 másik fontos belépési pontja az un. “deposit contract” lesz, aminek a lényege, hogy a jelenlegi ethereumból (1.X) Ethert (ETH) lehessen átvinni az eth2.0-ába (BETH vagy ETH2). Ez gyakorlatilag úgy néz ki, hogy a deposit contractnak küldött Ether-ek örökre lockolódnak és a contract lefutása után ugyanannyi Ether (BETH vagy ETH2) megjelenik a küldő címen az Eth2.0 hálózaton. Fontos, hogy ez a folyamat egyirányú. A teljes Eth2.0 release után elvileg ez a gateway kétirányú lesz. Mivel itt, akár 5-10 évről is beszélünk, ezért érdemes úgy tervezni vele, hogy az Eth2.0-ra átküldött Ethereket egyhamar már nem lehet majd visszahozni a “régi” ethereumba. Ez főleg azoknak jelent komoly kommitmentet, akik úgy döntenek, hogy a Phase 0 – várhatóan – idei indulását követően már most el akarnak kezdeni validálni.
Mindebből logikusan következik, hogy a fejlesztők egy nagyon lassú átmenettel számolnak. Olyannyira lassúról, hogy konkrétan nem is számolnak az ethereum (1.x) kivezetésével, helyette úgy tervezik, hogy a végleges állapotban az Ethereum (1.x) beolvad egy önálló külön shardként az ethereum 2.0-ba. Bár egyelőre az Eth2.0 kapcsán nagyon sok ködös dolog van még… de ezek közül ez a fajta interoperábilis Eth2.0+Eth1.x a leginkább zavaros. Ezért nem is nagyon foglalkoznék most ezzel.
A fentebbiekben leírtak közül a Beacon Chain és a deposit contract már elkészült és jelenleg is elérhető testneten. A Görli testneten már él is a deposit contract, így ott már lehet is tesztelni. De tervek szerint ezek még idén mainnetre is kerülnek. Ergo, el fog indulni az Ethereum 2.0-nak a “rendszer” lánca és oda be lehet utalni (deposit contracton keresztül), ezáltal validátorrá lehet válni.
Mindezeket egységesen phase 0-ának nevezi az Eth2.0 csapat. Phase 0-ában még sem a shardok nem indulnak el, sem contractokat nem lehet futtatni és… lényegében még semmit nem lehet csinálni a blokklánccal. Ezek a funkciók csak majd a Phase 1-ben fognak bejönni… valószínűsíthetően évek múlva.
De nézzük a validáció és validátor dolgot, hiszen ma talán ez izgathat leginkább mindenkit.
Proof of Stake, Ethereum Validáció
A PoS alapja a validáció, ami ugye a meglévő matematikai alapú trial-and-error és brute force bányászatot (proof of work) váltja le. Ennek lényege, hogy a validátor a saját stakejével felel azért, hogy jó munkát végez-e. Hogy ez mit is jelent pontosan azt egy 2017 augusztusában készült cikkben már leírtam. Viszont mivel azóta már pontosodtak a részletek, ezért érdemes lehet feleleveníteni:
Minden validátor önálló entitás lesz, akik diszkrét méretű (32 ETH) stakekkel fognak dolgozni. A validáció szempontjából releváns és megejegyzendő fogalmak: Epoch, Slot, Community és Finality. Hogy mik is ezek szépen sorjában:
Epoch: Az Ethereum 2.0-ban 12 másodpercenként fognak új slotok nyílni. Mivel itt már nem játszik be a PoW játékelméleti szórása, így a slotok várhatóan tényleg kb. 12 másodpercenként létre is fognak jönni. Egy Epoch 32 slotot tartalmaz. A slot annyit jelent, hogy lehet új blockot készíteni. Az előbbiek alapján az Epochok kb. 6 percenként fognak záróni. Az Epoch zárást követően a beacon chain újraosztja a validátor community tagjait, tehát az azt követő slotokon már várhatóan más validátorok fognak dolgozni.
Finality: A Proof of Stake rendszerben akkor tekintünk egy tranzakciót konfirmáltnak, ha az elérte a finality állapotot. Ehhez az szükséges, hogy az adott tranzakciót befoglaló Epoch és az azt követő Epoch is már le legyen zárva. Ennek okán garantálva, hogy legalább két véletlenszerűen kiválasztott Community is érvényesnek tekintette az adott tranzakciót, ezáltal drasztikusan csökkentve az összejátszásnak akár csak az esélyét is. Ez praktikusan annyit jelent, hogy az Eth2.0-án egy tranzakció erős konfirmációjához akár 10-12 percet is várni kell, de ez a konfirmáció lényegesen erősebb, mint a jelenlegi Proof of Work-ös 6-12-24 confirmation. A PoS-nál nem történhet deep reorganizáció, mivel itt már nem a “leghosszabb lánc” elve érvényesül, hanem az Epoch+Finality elv.
Community: A Beacon Chain véletlenszerűen választ ki minden egyes Epochra adott mennyiségű validátort (ennek a száma elvileg 128 darab, de ez még változhat), ezen validátorok feladata az adott epochon belüli slotok validálása. Minden slotra véletlenszerűen kiválasztott validátor jut, akinek – ha van mit – el kell készítnie a slot tartalmát (gyakorlatilag a blockot), melynek helyességére a többi validátornak szavaznia kell. Egy slot akkor érvényes, ha annak tartalmát az adott community 2/3 helyesnek véli. A community pedig akkor fogja azt helyesnek vélni, ha azt gondolják, hogy az adott block producer egyrészt formailag jó blokkot csinált, másrészt pedig azt valóban az előző slot után fűzte.
Slot: Bár a korábbiakból ez már logikusan következik, de a Slot gyakorlatilag az ami eddig a block volt, viszont mivel a Beacon chain a “karmester” és mivel a shardok miatt párhuzamos “univerzumokban” is keletkeznek blokkok, így a slot lényegében sokkal több mint ami eddig a block volt. Gyakorlatilag ezt úgy kell elképzelni, hogy az adott epoch adott slotjának időszakában keletkező blokkokat a hálózat egy elemi egységnek kezeli. Ez azért fontos, mert pl. a shardok között kell biztosítani az átjárhatóságot, amihez tudni kell szinkronizálni a shardokat, biztosítva az időrendiséget nem csak egy-egy shardon belül, de a shardok között is. Nos ezt biztosítja a Slot.
Crosslink – ami mindezt összetartja
Az előző fejezetben reményeim szerint sikerült jól átadnom, hogy miként is fog zajlani a validáció, miként koordinálja ezt a Beacon Chain és miként is vesznek ebben részt az egyes validátorok. A nagy kérdés már csak az, hogy mégis mitől fog ez az egész egy nagy egész rendszert alkotni. Itt lép a képbe a Beacon Chain másik fontos funkciója: a Crosslink.
A Beacon Chainen keletkező blokkok hivatkozást tartalmaznak az egyes shardok legfrissebb blokkjaira, így a Beacon Chain blokkjai gyakorlatilag validálják a shardokat is, hiszen a Beacon Chainen minden validátor szavaz egyszerre. Ez gyakorlatilag annyit jelent, hogy egy shardon lévő tranzakció vagy mondjuk egy dapp, akkor tekinthet finality-nek egy másik shardon lévő tranzakciót, ha az ahhoz tarozó sloton keletkező blokk már bekerült a Beacon Chain crosslinkjébe is és azon már finality keletkezett. Így válik lehetségessé, hogy egy-egy shard anélkül tudjon validálni egy másik shardon lévő tranzakciót, hogy ehhez ismernie kellene a másik shard összes blokkját.
Checkpoint
Az epoch és slot rendszer logikus következménye, hogy valamilyen szinten determinisztikussá kéne tenni az egyes epoch-ok kezdetét a Beacon Chainen. Erre hivatott a checkpoint block, mely minden esetben az adott epoch első slotján keletkező blokk, kivéve, ha az első sloton nem keletkezik blokk. Ebben az esetben a legutolsó érvényes blokkal is rendelkező slot lesz a checkpoint.
Hogy fordulhat elő az, hogy nem keletkezik blokk egy sloton? Mivel minden egyes slothoz előre meg van határozva, hogy ki fogja ahhoz a blokkot készíteni, ezért előfordulhat, hogy az adott validátor a legnagyobb igyekezete ellenére sem tudja elkészíteni a rá bízott blokkot. Ennek sok oka lehet, de a legprózaibb az hogy egyszerű slackkel vagy egyéb okból offline. Ilyen esetben nincs “beugró”, az adott slot üres marad.
A checkpoint lényege, hogy bármely blokk esetén egyértelműen kiderüljön, hogy melyik epochoz tartozik és az hol indult. Ez leginkább akkor válik fontossá, ha egy tranzakció finality-jét akarjuk mérlegelni.
Nagyjából szerintem ennyi elég is lesz elsőre, az Eth2.0 illetőlen. A téma apropójából a következő postban már a validálás gyakorlati folyamatáról fogok írni, beleértve a büntetéseket, jutalmakat, stb.
Kipróbálnád az Ethereum validációt?
Tartok tőle, hogy az olvasók egy része a cikk elolvasása után komoly késztetést érez arra, hogy mindezt ki is próbálja a gyakorlatban. A cikk záró fejezetét nekik szánom, némi praktikus tanácsokkal.
Jelenleg egyetlen működőképes Eth2.0 kliens létezik, ez a Prysm, ennek két komponense érhető el: A beacon chain light client és a validator client.
A Prysm klienst könnyedén le tudod töltni githubról:
git clone https://github.com/prysmaticlabs/prysm && cd ./prysm
Mivel a Prysm Topaz networkjének (ez jelenleg a hivatalos Ethereum 2.0 testnet) a Görli Ethereum 1.0 a párja (deposit contact), így szükséged lesz egy Görli testnet hozzáféréshez. Ha nem akarsz szenvedni azzal, hogy geth-tel lehúzd a teljes testnet blockchaint (szükségtelen), akkor bőven elég lesz egy metamask wallet.
Szükség lesz továbbá 32 Ether-re a Görli (Goerli) testneten a validator deposithoz. Ehhez faucetet találsz a teszt hálózat saját oldalán: https://goerli.net. Javaslom a social faucetet is, ott esélyesebb, hogy belátható időn belül meglesz a 32 GöEth-d.
Ha ezzel megvagy, akkor már a nehezen túl is vagy. Mehet a validátor kulcs generálás és a deposit contract meghívása, majd indulhat a validálás! A további lépések step-by-step a Pyrsm oldalán találod meg: https://prylabs.net/participate
Sok sikert mindenkinek a kalandhoz! Találkozzunk a Beacon Chainben!
Bár nem értettem a felét 🙂 de nekem ez a véletlenszerűen választott validátor csoport egy centralizált valaminek tűnik. Hol fut ez a véletlen generátor? Az egész PoW ezért létezik, hogy decentralizált véletlen legyen, itt meg simán van nélküle is?
Igen, ezek azok az apró finomságok, amikről majd egy következő cikkben akarnék írni. De akkor vegyük előre ez a dolgot. Bár a véletlen alapú kiválasztás és annak logikája valóban valamilyen szintű centralizációt feltételez, de valójában itt szó sincs erről. A Beacon Chain féle kiválasztási logikát a RANDAO és VDF közös használata biztosítja.
A folyamat pofon egyszerű:
– az összes validátor, aki játékban van (online és kész dolgozni/pénzt keresni), készít egy csak lokálisan elérhető secretet, kvázi egy random számsorozat, amit olyan módon állít elő ahogy akar. Ebből készít az összes validátor egy hash-t, amit elküld a beachon chainnek a validator alkalmazás segítségével.
– ha a beacon chain elégséges mennyiségű hash-t kapott, akkor átvált “reveal stage”-re, ilyenkor a validátoroknak fel kell tölteniük a lokális secretjüket. Ugye a hash-t azért kellett előre küldeni, mert ezzel garantálható, hogy a validátorok ne tudjanak race-condition attackot játszani, hiszen a beacon chain ellenőrzi, hogy a beküldött hash valóban az adott secrethez tartozik-e.
Ezzel előállt az a valóban true random állapottér, ami a beachon chain már simán össze tudja válogatni a community-ket, illetve a slotokra tudja delegálni hogy melyiket melyik validátornak kell megcsinálnia. Ehhez a beacon chain már simán csak XOR-olgatja a secreteket.
Mint látható ennél a módszernél (hasonlóan a PoW-hoz) teljesen a puszta szerencsén múlik, hogy tudsz-e blockot csinálni, illetve, hogy részt vehetsz-e a communityben validátorként.
Mivel az egész kód a beacon chainen fut, így az összes számítást lényegében a validator nodeok hajtják végre decentralizálva.
Megint csak a bitcoinhoz hasonlítva, ott azért van a leghosszabb lánc nyer dolog, mert nem ugyanazok az üzenetek jutnak ugyanolyan sorrendben és pillanatban minden node-hoz. Itt meg igen?
A leghosszabb lánc elve egy PoS rendszer esetén (különösen egy ethereum casper implementáció esetén) indifferens és alkalmazhatatlan, hiszen a beacon chain minden epochot és minden slotot előre leoszt, tehát nem történhet reorg vagy orphan/uncle. Az Eth2.0 esetén a blokkok keletkezése determinisztikus, bár nem kizárt, hogy egy-egy sloton mégsem keletkezik blokk, hiszen pl előfordulhat, hogy egy validator a feladat kiosztás után válik offline-ná és mivel minden előre le van osztva így előfordulhat, hogy egy-egy slot esetleg üres marad.
Tudom nem könnyű… hidd el, nekem sem… de amikor egy ilyen jellegű implementációt vizsgálsz, akkor ezt kellő nyitottsággal kell tenni. Ami az Etheruem lesz a PoS release után az sok szempontból összehasonlíthatatlan lesz akár a Bitcoinnal, akár az Ethereum 1.x-vel.
Hogy egy példát mondjak: A confirmation mint fogalom lényegében megszűnik. Ha elkészül egy slot és a slotban van blokk, amire megszületett a 2/3 szavazat, akkor azt már egyből egy erősebb confirmation, mintha jelenleg megvárnád a 6-20 blokkot, hiszen deep reorg itt nem tud történni. Ráadásul behozza az Eth2.0 a “Finality” fogalmát, amit egyfajta bizonyított garancia biztosít, hiszen ha egy tranzakció finality állapotba kerül az azt jelenti, hogy két egymástól független community is valósnak tekinti. Bár szinte képtelenség elképzelni, hogy a Beacon chain által koordinált communitee leosztást valaha is fog tudni valaki úgy manipulálni, hogy mint a 128 slotra a saját “emberei” kerüljenek… De annak a matematikai esélye, hogy ezt képes legyen egymást követő két blokkban is elérni… nos annak esélye nagyjából azonos azzal, mint hogy te véletlenszerűen elkezdesz privát kulcsokat generálni és egyszer csak pont kijön egy olyan, amin van egy raklap Bitcoin vagy Ethereum.
A Bitcoin és a jelenlegi Ethereum esetén is a decentralizációt a játékelméleti alap adja, illetve ennek az olyan szintű végiggondolása mint pl a longest chain elv és pl Bitcoin esetén az UTXO modell, ami szerintem a modern közgazdaságtan egyik legbrutálisabb eszköze… csak éppen megelőzte a saját korát néhány dekáddal.
Az, hogy az Ethereum 2.0 nem ezekre alapszik nem azt jelenti, hogy rossz… Hiszen pont az előző kommentben már leírtam, hogy a beacon chain mögött álló működési mód ugyanúgy a játékelméletre alapszik. Lényege, hogy úgy garantál nagy fokú randomitást, hogy emellett minden játékosnak közel azonos szelet tud jutni a pitéből… pont úgy ahogy a bányászatnál. Egyébként ugyanezt az elvet hivatott biztosítani az a tény is, hogy a Stake mérete diszkrét.
Mindettől függetlenül az Eth2.0 sem lesz tökéletes, sőt – szerény véleményem szerint – mégcsak annyira sem lesz jó mint az immáron 12 éves Bitcoin. Különösen nem, ha a decentralizáltság fokát tekintjük. De ez nem hiszem, hogy ez célja lenne. A PoS megközelítés egy merőben új utat nyit. Amit az Ethereum 2.0 csinál POS címszó alatt azt egyébként nem érdemes összekeverni az Cosmos, Tron, EOS és egyéb dPoS rendszerekkel, amelyek esetén a validátorok nem csak validálnak, hanem általában szavazhatnak is számos paraméter kapcsán. Az Ethereum kapcsán semmi ilyesmiről nincs szó. Szóval itt a validátorok csak a blockokat validálják, valójában a protokoll felett nem uralkodnak… Tehát az továbbra is Vitalik és barátai kezében van.
Miért, a Bitcoin protokollja nem Wladimir és barátai kezében van? Az mitől decentralizáltabb?
Így végig gondolva valójában nem. De mindenesetre sokkal jobb a marketingjük a decentralizáltság látszatát keltés terén. Márhogy úgy értem, hogy nálam jobb a marketingjük… azt teljesen el tudom fogadni, hogy egyébként nálad nem 🙂 Bár ha egy mérleg két nyelvére fel kéne dobnod a Bitcoin és az Ethereum decentralizáltsági fokát, akkor tartok tőle, hogy nálad akkora lenne a bizonytalansági együttható, hogy simán superpozícióba kerülne a mérleg. Ugye? 🙂
“Mivel az egész kód a beacon chainen fut, így az összes számítást lényegében a validator nodeok hajtják végre decentralizálva.”
Ezzel van még mindig bajom. Mi garantálja, hogy ugyanazok a hashek jutnak el minden node-hoz egyszerre? Vagy nagyon rosszul képzelem el?
és akkor – ha jól értem – nem lesz átmenet, mármint nem lesz hibrid PoS/PoW időszak, hanem ~instant váltani fog az Ethereum hálózat PoW-ról PoS-ra?
Nem fog a jelenlegi ETH 1.0 rögtön átalakulni ETH 2.0-ra, hanem nagyon sokáig párhuzamosan megy majd a kettő egymás mellett. Az előbbi ugyanúgy POW lesz még évekig. A 0. fázisban (ami feltehetően most decemberben fog indulni) még csak az ETH 1.0 alól tudsz coinokat mozgatni a 2.0-ba. Ez egyirányú lesz. Amit oda utaltál, az nem jön vissza. A későbbiekben kétirányú lesz a forgalom, de ez még évek kérdése.
Tehát lesz POW is, POS is, de adott hálózaton belül csak az egyik.
A catdanoval össze lehet majd hasonlítani?
Ott Hoskinson azt ígéri, hogy a cardano mainnetje lesz a legjobban decentralizalt.
Melyik az a public blockchain projekt aminek a “frontembere” azzal roadshowzik, hogy NEM az ő blockchainje a legjobban decentralizált?
Valami csak lehet a játtérben. 2 eve fejlesztik és még a stakinget se sikerült elinditani.
Ezt most pozitívumként vagy negatívumként gondoltad megemlíteni a Cardano mellett?
Nem tudom..
Jó munkához idő kell, mondani szokás.
Sok projekt összecsap pár hónap alatt egy mainnetet, airdropot, stakinget.
Valahol olvastam, hogy a cardano és az algorand mögött is elég komoly fejlesztők vannak.
Gondolom nem véletlenül.