Ethereum tranzakciók és a GAS #ethereumtudas
Ethereum tranzakciók és a GAS #ethereumtudas
Mi az a gas? Hogy lesz a GAS-ból Ether?
Amikor annak idején megismerkedtem az Ethereum blokklánccal, zavaros volt számomra, hogy ha a tranzakciókért és az okos szerződések futtatásáért az Ethereum natív valutájával, az Etherrel (ETH) fizetünk, akkor mi szükség a GAS-ra? Amint azonban az ember megérti, hogy mi a GAS, rájön, hogy léte nagyon is indokolt. Vegyük át tehát gyorsan, mi is az a GAS.
Mi az a GAS?
Amikor Ethert utalunk valakinek, vagy futtatjuk egy okos szerződés valamely metódusát, akkor a műveletek elvégzéséért fizetnünk kell. Ez nem annyira újdonság, hisz a számítási teljesítmény pénzbe kerül. Ezt a tranzakciós költséget az Ethereum hálózaton Etherben kell megfizetni, viszont a tranzakciós költség nem fix. Ennek kiszámításánál jön a képbe a GAS. Hogy egy tranzakciónak mennyi a költsége, az függ a tranzakció bonyolultságától.
Gabriel: Amerikában az üzemanyagot nevezik gas-nak és jogos a párhuzam, hiszen az Ethereum hálózaton futó okosszerződések a GAS “hajtja”.
Egy szimpla utalás fixen 21000 gas-ba kerül, viszont ha okos szerződést futtatunk, már bonyolultabb a helyzet. Minden egyes műveletnek megvan a maga GAS költsége. Az összeadás, kivonás, feltétel vizsgálat, értékek blokkláncba írása, stb. ez mind-mind valamennyi gas-ba kerül. A tranzakció összesen tehát annyi GAS-ba fog kerülni, amennyi a benne szereplő rendszer szintű műveletek GAS értékének összege. Hogy ez pontosan mennyi, az csak futás közben derül ki, éppen ezért előre nem tudjuk, hogy mennyit kell majd fizetni a tranzakcióért. Az egyetlen dolog, amit a tranzakció esetén megszabhatunk, hogy mennyi a maximális GAS érték, amit hajlandóak vagyunk a végrehajtásért kifizetni.
Gabriel: Bizonyára mindenkinek rémlik a MyEtherWallet egyik beállításánál a megjegyzés, mely arra utal, hogy Ethert két wallet között 21000 gas-al ajánlott utalni, míg egy okosszerződés 200000 gas körüli értéket is “elvárhat”.
Amikor egy bányász elkezdi végrehajtani a tranzakciónkat, folyamatosan számolja közben annak GAS értékét. Ha ez kevesebb mint az általunk felajánlott GAS, akkor a tranzakció lefut, a maradékot pedig visszakapjuk. Ha a műveletek végrehajtása közben a bányász eléri a limitet és a tranzakció még nem ért véget, akkor a végrehajtás meghiúsul, ráadásul a felajánlott GAS-t is elbukjuk, hiszen a számításokat a bányász végrehajtotta, annak ellenére, hogy nem sikerült befejezni a végrehajtást. Ebből elvileg az következne, hogy érdemes jó nagy GAS limitet megadni, hiszen a fennmaradó mennyiséget úgyis visszakapjuk. Ennek azonban megvan az a veszélye, hogy a tranzakciónak túl nagy lesz a GAS igénye (végtelen ciklus esetén pl. eléggé elszabadulhat), így akaratunk ellenére túl sokat fizethetünk egy tranzakcióért. Éppen ezért lehetőség szerint válasszunk elég nagy GAS limitet, de azért ne túl nagyot, nehogy pórul járjunk. (Van egy globális, blokk szintű GAS limit is, amit a blokkban lévő tranzakciók összessége nem léphet túl, de ez túl nagy szám ahhoz, hogy csak erre hagyatkozzunk.)
Hogy lesz a GAS-ból Ether?
Az írás elején említettem, hogy a tranzakciókért Etherben kell fizetnünk, ennek ellenére egész idáig csak a GAS-ról volt szó. Nos, a GAS-t be kell szorozni egy összeggel (GAS price), és így kapjuk meg a tranzakció árát. No de mennyi is ez a GAS price? Itt jön a csavar a dologban, ugyanis mi határozzuk meg, hogy az mennyi is legyen. Mivel a bányászok határozzák meg, hogy az általuk összerakott blokkba mely tranzakciók kerülnek be, ezért van az, hogy a magasabb GAS price-al elindított tranzakcióink előrébb kerülhetnek sorra és így hamarább is futnak le. Úgy is fogalmazhatunk, hogy a felhasználók a GAS price megadásával licitálnak a bányász szolgáltatására, így a GAS árát a tőzsdéhez hasonlóan a kereslet/kínálat viszonya határozza meg.
Amennyiben terheltebb a hálózat, feljebb szökhet a GAS price, pangás esetén pedig lejjebb mehet. E mellett ne felejtsük el, hogy az Ether árfolyama is össze-vissza ingadozik: ha például felmegy az Ether ára, az remek hír a befektetőknek, de ez fix GAS price mellett adott esetben nagyon megdrágítaná a tranzakciókat, ami hosszú távon akár meg is béníthatná az egész hálózat működését. A GAS bevezetésével és a GAS price változtathatóságával viszont ez kiküszöbölhető. Ha nő az Ether árfolyama, csökken a GAS price, ami nagyjából fixálja a tranzakciós díjakat. Így már érthető, miért volt szükség erre az elsőre feleslegesnek tűnő kavarásra. Azért, hogy ne találomra kelljen kitöltenünk a GAS price-t, a rendszertől lekérdezhető az aktuális árfolyam, ami az utolsó pár blokk alapján számolódik, így általános esetben ezt érdemes használni.
Gabriel: A fentire jó példa a MetaMask felugróablaka ahol pl. a CryptoKitties okosszerződés futtatásnál a automatikusan megkapjuk az épp aktuális gas érték ajánlott beállításait.
Röviden összefoglalva tehát így működik a GAS és a tranzakciók elszámolása Ethereum hálózaton.
Kövess minket!
Az #ethereumtudas cikksorozat előző és következő részeiben az okos szerződésekkel ismerkedünk meg közelebbről, miközben megtanuljuk azt is, hogy hogyan készíthetünk ilyeneket mi magunk is.
Hogy mindez tényleg felfogható lehessen a cikksorozatot ketten írjuk. A programozói részekért jómagam Laszlo Fazekas (fejlesztő) felelek, azért pedig, hogy tényleg minden érthető legyen Gabriel Varaljay (marketing) “játssza a naivat” (tesz fel kérdéseket, magyarázza újra a feldolgozott anyagot).
Amennyiben érdekel ez a témakör érdemes feliratkoznod ERRE a medium csatornára, de követheted az ENVIENTA Magyarországot Twitteren, vagy akár csatlakozhatsz a tematikus Facebook csoportunkhoz is.