A bányászat és az okos szerződések #ethereumtudas
A bányászat és az okos szerződések #ethereumtudas
Az előző részben már említettük, hogy a blokklánc egy nagyon megbízható, tranzakciók sorából álló adatbázis. Ha valami ide bekerül, az onnantól kezdve ott is marad. Ez a rész még mindig elméleti lesz, de ahhoz, hogy érthetőek legyenek a későbbiek egy kicsit még bele kell mennünk a a blokklánc működésébe, meg kell ismerkedünk a bányászat fogalmával és pár szót ejtünk majd az okos szerződések működéséről is.
Megjegyzés: Ezt cikket már ketten írjuk Gabriellel. Az ő megjegyzéseit dőlt betűkkel kiemeljük.
Gabriel: Az egyik Facebook csoportban van akit zavar a haladási tempó. Könyörgöm a második résznél tartunk és kellenek az alapok. Aki fejlesztő / programozó, az talál az interneten rengeteg leírást. A cikksorozat célja a laikusok, a nem programozók felzárkóztatása. Az ENVIENTA egy non-profit szervezet, amely ingyen szervez online oktatásokat a lehetőleg legérthetőbb formában. Ennek viszont az ára, hogy olyan fogalmakat is el kell magyarázni, ami egyesek számára vicces, mások számára viszont nagyon is új, vagy épp helyére rakja a fogalmakat. Ezek az alapok, de ahogy ígértük, nemsokára jönnek a kódok, csak ezeket hova írjuk ha például még nincs feltelepített tesztkörnyezetünk. Ez egy folyamat, amin végig kell mennünk.
A kihívás
Az világos, hogy a blokklánc egyenrangú gépek (decentralizált) hálózatán működik. A klasszikus internettel ellentétben, itt nincsenek központi csomópontok, épp ezért ha egy tranzakciót szeretnénk a központi adatbázisba írni (pl. pénzt szeretnénk utalni valakinek), ezt az információt szét kell küldenünk a hálózatba. A gyakorlatban ez úgy történik, hogy a tranzakciót elküldjük pár általunk ismert csomópontnak, azok továbbküldik az ő általuk ismert csomópontoknak, és így tovább. Ezzel a módszerrel az adott tranzakció hamar szétterjed a hálózatban. Minden tranzakciót digitális aláírás hitelesít: például ez biztosítja, hogy a mi számlánkról csakis mi utalhassunk pénzt valaki másnak, és rajunk kívül ezt senki más ne tehesse meg. Ez eddig nem hangzik túl bonyolultnak, az összetettség csak ezután következik.
A hálózatba szétszórt tranzakciókból ugyanis egyetlen közös adatbázist kellene építeni, ami korántsem lenne egyszerű feladat egy olyan hálózatban, ahol nincsenek központi csomópontok amelyek ezt a folyamatot irányítanák.
Mi a bányászat?
A megoldást Statoshi Nakamoto találta meg, akiről az előző részben már ejtettünk pár szót. A megoldás a következő: szükség van pár speciális csomópontra, ezek a bányászok (hogy miért nevezzük így őket, az majd később kiderül). Mivel a hálózat egyenrangú, ezért bárki jelentkezhet bányásznak. A bányászok összeszedik a hozzájuk beérkező tranzakciókat és blokkokba csomagolják őket. Ezt követően eszeveszett verseny kezdődik, hogy a nagy közös blokklánc végére ki rakja oda a következő blokkot. Ez a gyakorlatban azt jelenti, hogy a bányászoknak egy nehéz matematikai feladványt kell megoldaniuk. Amelyik csomópont leghamarabb megoldja a feladványt, az a csomópont nyer és fűzheti fel a lánc végére a következő blokkot. A feladvány nehézsége folyamatosan változik, úgy hogy a blokkok körülbelül azonos időközönként kövessék egymást (ez a Bitcoin esetén pl. kb. 10 perc).
De miért akarna bárki is önszántából blokkokat készíteni és számítási kapacitást nem kímélve a többiekkel versenyezni, hogy ő fűzhesse a következő blokkot a lánc végére?
Nos, akinek ez sikerül, az komoly (Bitcoin esetén ez több millió forint) pénzjutalmat kap. Mind a Bitcoin, mind az Ethereum esetén a rendszerben létező kriptovaluta mennyisége korlátozott, ami ezen blokk készítési folyamat során kerül kiosztásra. Azért nevezték el a blokk generálási folyamatot bányászatnak, mivel valóban olyan, mint aranyat bányászni. A rendszerben lévő fix mennyiségű kriptovaluta az “arany” és minden egyes blokk létrejöttével ebből egy kis darab a versenyt megnyerő bányászhoz kerül. Mivel a bányázok közt folyamatos verseny van, ezért a bányászathoz (a blokk létrehozásához és a matematika feladat megoldásához) szükséges számítási kapacitás mára már az egekbe szökött. Becslések szerint a teljes Bitcoin számítási kapacitás többszörösen meghaladja a létező legerősebb szuperszámítógépét és a működtetéséhez szükséges energia egy kisebb ország energiafogyasztásának felel meg.
De miért van szükség ilyen hihetetlen mennyiségű erőforrásra egy egyszerű adatbázis működtetéséhez?
Valójában a hasznos munka (a blokkok létrehozása) elenyésző erőforrás igénnyel rendelkezik ahhoz képest ami elmegy a versenyzésre. A látszattal ellentétben azonban ez mégsem teljesen felesleges. Minél nagyobb a verseny (minél nagyobb számítási kapacitásra van szükség az új blokk létrehozásához), annál nehezebb átvenni az irányítást a hálózat felett. Ahogyan az előző részben említettük, a blokklánc megbízhatóságát az adja, hogy minden blokkot másik csomópont hitelesít (más csomópont bányász ki). A fenti rendszerben ezt a verseny biztosítja. Ahhoz, hogy a hálózat felett bárki átvegye az irányítást (kizárólag ő készíthessen blokkokat), a meglévőnél nagyobb számítási kapacitással kellene rendelkeznie, ami mint említettük, sokszorosan meghaladja a létező legerősebb szuperszámítógépét. Ettől még persze a megoldás elég pazarló (gondoljunk csak az országnyi áramfogyasztásra), így az ezt kiváltó alternatívákat folyamatosan kutatják.
Az Ethereum bányászatról
Az Ethereum esetén tervben van a “proof of stake” nevű metódusra való áttérés (a jelenlegi megoldást “proof of work”-nek hívják), ahol nem számítási kapacitással kell majd versenyezni, hanem kriptovaluta lekötésével.
Eddig csak pénzügyi tranzakciókról volt szó. No de hogy jönnek a képbe az okos szerződések?
Egy okos szerződés létrehozása tulajdonképpen maga is tranzakció. A tranzakció adat része tartalmazza az okos szerződés kódját (ez az Ethereum esetén egy speciális bájtkód) valamint egy pénzösszeget amit a szerződés rögzítéséért ajánlunk fel a bányásznak. A pénzösszeg az Ethereum saját valutájában (Etherben) kerül megadásra. A bányász csomópontok mindig maguk dönthetik el, hogy az általuk elkészített blokkba milyen tranzakciókat raknak bele, a döntési folyamatot pedig nagyban befolyásolja, hogy az adott tranzakció blokkba írásáért mekkora tranzakciós díjat ajánlunk fel. Ha a bányász sikerrel jár (ő oldja meg leggyorsabban a feladványt, így ő fűzheti fel a következő blokkot), akkor őt illeti a blokkban lévő összes tranzakció díja. Az okos szerződések kódja tehát pontosan úgy kerül be a blokkláncba, mint bármely más pénzügyi tranzakció. Szokták a folyamatot úgy is emlegetni, hogy a bányász “kibányászta a szerződést” (Gabriel: … ami persze egy elég hülye kifejezés.)
Mit lehet kezdeni egy blokkláncba írt okos szerződéssel?
Egy okos szerződés szolgáltatásokat (metódusok) kínál a felhasználók számára, illetve rendelkezhet valamilyen belső állapottal (ezt mindjárt kifejtjük részletesen). Amikor a bányász “kibányássza a szerződést”, az kap egy Ethereum azonosítót. Innentől kezdve a szerződés külön entitásként működik. Van egy saját számlája, ahová pénzt lehet neki utalni, illetve mindenki számára elérhetőek az általa nyújtott szolgáltatások. Egy okos szerződés kódjának futtatása ugyanúgy pénzbe kerül mint a létrehozása, a kód futtatásának árát pedig mindig a szolgáltatást igénybe vevő felhasználó állja (tehát nem a szerződés, vagy annak létrahozója, stb.).
Ahogyan az előbbiekben említettük, az okos szerződés rendelkezhet valamilyen belső állapottal, ami azt jelenti, hogy lehetnek belső változói. Éljünk egy nagyon egyszerű példával: saját valutát megvalósító okos szerződésben ilyen belső változó lehet az a lista, ahol nyilvántartjuk, hogy melyik Ethereum felhasználónak mennyi van az adott valutából (tokenből) a számláján. Ha az okos szerződés hivatkozott funkciója csak adatot olvas, akkor az nem kerül pénzbe, hisz a blokkláncból minden csomópont rendelkezik egy saját változattal, így a kód helyben is lefuttatható.
Amennyiben az adott funkció valamit ír a blokkláncba (pl. egy változónak megváltoztatja az értékét) azért már tranzakciós díjat kell fizetni, hiszen a blokkláncba csak az adott blokkot létrehozó bányász írhatja azt be, aki nem dolgozik ingyen.
Gabriel: A fenti saját valutás példánál maradva tehát ha valakinek ki szeretnénk olvasni az egyenlegét (csak blokklánc olvasás) az nem kerül pénzbe, míg ha utalni szeretnénk neki (blokkláncba kell írni az egyenleg változásokat), az már pénzbe kerül. Ezt nevezzük Gas-nak (ami az amerikai üzemanyag kifejezésből átvett fogalom), logikusan hiszen ez motiválja vagy “hajtja meg” a tranzakciót. A felajánlott Gas mértéke egyébként walletenként (virtuális pénztárcánként), szolgáltatásonként eltérő, de logikusan az is érvényes, hogy aki nagyobb Gas értéket állít be annak a tranzakciója — hamarabb kerül feldolgozásra, míg egy alacsony Gas értékű folyamat akár napokig is eltarthat (jogosan, hiszen nehezebben találni olyan bányászt — és itt nem a gépet üzemeltető emberünkre kell gondolni hanem a gépre — aki kevesebb összegért is képes elvégezni a számítást).
Kövess minket!
A cikksorozat további részeiben ezekkel az okos szerződésekkel fogunk közelebbről megismerkedni, és megtanuljuk azt is, hogy hogyan készíthetünk ilyeneket mi magunk is.
Hogy mindez tényleg felfogható lehessen a cikksorozatot ketten fogjuk írni. A programozói részekért jómagam Laszlo Fazekas (fejlesztő) felelek majd, azért pedig, hogy tényleg minden érthető legyen Gabriel Varaljay (marketing) “játssza majd a naivat” (tesz fel kérdéseket, magyarázza újra a feldolgozott anyagot).
Épp ezért érdemes feliratkoznod ERRE a medium csatornára, de követheted az ENVIENTA Magyarországot Twitteren, vagy akár csatlakozhatsz a tematikus Facebook csoportunkhoz is.