Gazdálkodj okosan! A gasPrice rejtelmei

Éppen ma öt éves az Ethereum! Ez már önmagában sem kis szó, pláne egy olyan gyerekcipőben járó piacon, mint amilyen a kriptagazdaság. Ez a mérföldkő arra sarkallt, hogy elővegyek egy igen fontos témát, hiszen miközben mára az Ethereum méltán vált a kripto világ meghatározó platformjává, egyben komoly sorsfordító problémákkal is küzd. Ezek közül talán a legjelentősebb… mi más is lehetne, mint a skálázás és ennek árnyoldala a toronymagas gasPrice költségek.

Akinek napi szinten kell Ethereum hálózaton utalnia akár Ethert, akár tokeneket, annak biztos feltűnt az elmúlt hónapokban, hogy az Ethereum hálózati költségek igencsak megszakadtak, aminek nyilvánvalóan a fő oka nem más, mint az, hogy a hálózat kezdi nagyon kinőni a saját kereteit. Miközben az átlagos utalások is már felkúsznak két dollár felé napközben, aközben a komplexebb szerződés hívások, akár az 4-5 dollárt is elérik csúcsidőben! Alább bontva a dolgot, jól látható, hogy egyre inkább komoly erőforrásokat kíván magának egyrészt a Stablecoins és a teljes DeFi ökoszisztéma; másrészt pedig egyre több decentralizált scam és ponti program is fut már az Ethereum által biztosított “szabad földön”.

Miközben ezek a felhasználási módok egyre inkább eszkalálódnak, aközben nem igazán látszik jele annak, hogy bármilyen módon is képes lenne az Ethereum fejlesztő csapata uralni a fee problémát. Jelenleg az átlagos utalási költségek már alulról nyaldossák az 1 dolláros értéket annak ellenére is, hogy alig néhány hete az Ethereum bányász poolok összefogtak és megkerülve a fejlesztőket 25%-kal növelték a blokkokba foglalható tranzakciók mennyiségét (blockonkénti gas limitet)

Talán a legnagyobb probléma, hogy még mindig nagyon sokan hiszik azt, hogy (az egyébként folyamatosan csúszó) az Ethereum 2.0 majd megoldja a skálázási problémát. A helyzet az, hogy megoldani ugyan megold(hat)ja, de ez koránt sem idén fog megtörténni, hanem a leginkább optimista forgatókönyvek szerint is 3-5 éve múlva.

Ennek fényében két dolog történhet: vagy az Ethereum megőrzi a vezető “smart contract, defi, stablecoins és piramisjáték” platform szerepét az átmeneti időszakban is; vagy a megannyi Ethereum killerként definiált platformok egyike (TRON, Cardano és a többi) vagy másika jelentősebb darabot lecsillentve tehermentesíti az Ethereum ökoszisztémát addig is amíg az ETH2.0 valóban talpra áll.

Ha képes lesz megtartani vezető szerepét az Ethereum, akkor viszont a következő évek legnagyobb biznisze az iparágban a “fee optimalisation” lesz. Erre egyébként igen nagy szükség van, hiszen a Bitcoinnal ellentétben az Ethereum esetén semmit sem lehet optimalizálni a költségeken pl.: azzal, hogy batcheljük a tranzakciókat… pontosítok: lehet batchelni tranzakciókat pl. smart/proxy contracton keresztül, de ezek nem igazán eredményeznek hálózati költség optimalizálást.

Mekkora probléma ez?

Alapvetően semekkorának nem kellene lennie, az Ethereum esetén ugyanúgy versenyeznek a tranzakciók a blokkba kerülésért, mint a Bitcoinnál, mely versenynek a mértékegysége a gasPrice… tehát, hogy mennyiszeres fee-t hajlandó fizetni a küldő a többiekhez képest. De az Ethereum esetén ennek elvileg semmilyen szinten nem szabadna gondot okoznia, hiszen bármikor könnyedén lehet módosítani egy tranzakció költségét, amíg az nem kerül blokkba. Ennek eszköze: simán újra lehet küldeni az adott tranzakciót nagyobb gasPriceszal és azonos nonce-szal. Ezt a fajta dinamizmust, azonban az átlagos wallet szinte egyike sem alkalmazza, helyette igen magasra tornásszák fel a tarifákat, ami hatalmas öröm a bányászoknak, de sokkal inkább szomorúság a felhasználóknak.

Miért ennyire bonyolult a jó gasPrice estimation?

Az esetek döntő többségében, amikor valaki Ethereum hálózaton akart küldeni Ethert vagy éppen token-t, akkor az a célja hogy az minél hamarabb végre is hajtódjon, emiatt a walletek folyamatosan felül becslik a fee piacot. Ezek a felülbecslések azonban eltorzítják a saccolásokat is, ami miatt folyamatosan növekszik az átlagos gasPrice mindenkinek.

Többször hallottam már, hogy ez az egész probléma a fee estimation tooloknak a hibája, mivel ők tornásszák fel a költségeket. Ethereum kapcsán a legnépszerűbb ilyen oldal az ethgasstation.

Nagyon sok exchange, atm vagy egyéb szolgáltatás (akár DeFik is price Oracle-k keresztül), használják ezen oldalak által adott információkat. Tehát jogos lehet azt gondolni, hogy ezen gasPrice becslő oldalak a ludasak azért, mert az árfolyamok az egekbe emelkednek. Persze ez azt feltételezné, hogy az ethgasprice oldal folyamatosan felül lövi az geth/openeth node által készített kalkulációkat. Ennek bizonyítására vagy éppen elvetésére, csináltam egy 24 órás percenkénti mintavételt.

EthGasStation esetén adatforrásként az oldal API-ját használtam: https://ethgasstation.info/json/ethgasAPI.json

Geth full node esetén pedig az alábbi kis python scriptet:

from web3 import Web3, HTTPProvider
from web3.gas_strategies.time_based import medium_gas_price_strategy, slow_gas_price_strategy

w = Web3(HTTPProvider("http://localhost:XXXX", request_kwargs={'timeout': 60}))
w.eth.setGasPriceStrategy(slow_gas_price_strategy)
slow = w.eth.generateGasPrice()
w.eth.setGasPriceStrategy(medium_gas_price_strategy)
medium = w.eth.generateGasPrice()

Az alábbi ábrán összevetettem, hogy tényleg felül becsüli-e az ethgasprice a ethnode saját kalkulációját… ezzel a minerek számára garantálva a profit maximalizálást a felhasználók kárára:

A piros és sárga adatsor jelzi a geth node becslését (medium és slow), a két kék pedig az ethgasstation slow és avg becslését.

Az ábra alapján én nem lettem meggyőzve arról, hogy ott tényleg az ethgasstation féle kartelezés okozná a problémát. A közel 20 órás mintavételezés során nagyon sok esetben a piros vonal lényegesen a kékek felé került, ami alapján jól látható, hogy az ethgasstation sokkal inkább csökkentette a gasPricet, mintsem növelte volna azt egy geth node saját statisztikájához képest.

Persze az is levonható következtetésként, hogy a full node “slow” becslése (sárga szín) az esetek döntő többségében lényegesen alacsonyabb mint az ethgasstation “slow” becslése.

Annak érdekében, hogy a kérdésre lehessen korrekt választ adni, csináltam még egy elemzést. Ehhez a vizsgált időszakban nem csak azt gyűjtöttem ki, hogy mennyi a két adatforrás becslése, hanem azt, hogy a létrejövő új blokkokban mennyi volt a minimum és a maximum gasPrice. Ehhez ezt a kis scriptet használtam:

pending_block = w.eth.getBlock('pending')
_min, _max = None, None
for i in pending_block.transactions:
    tx = w.eth.getTransaction(i)
    if tx and 'gasPrice' in tx:
        if not _min or _min > int(tx['gasPrice']):
            _min = int(tx['gasPrice'])
        if not _max or _max < int(tx['gasPrice']):
            _max = int(tx['gasPrice'])

Az alábbi ábrán ezen vizsgálat eredményét próbáltam vizualizálni:

Mi is látszik itt. Alul a három kék szín mutatja az ethGasStation slow, avg és fast becslését. A sárga mutatja a következő blokkba került tranzakciók legalacsonyabb gasPriceát, a narancssárga rombuszok pedig a maximumot. A maximum esetén brutális a szórás. Miközben a legmagasabb (fast) ethgasprice becslés a vizsgált időszakban átlagosan 70-80 Gwei körül volt és soha nem haladta meg a 100-at, addig a ténylegesen blokkba került tranzakciók blokkonkéri maximális gasPrice értéke nem ritkán 300-400 Gweit is elérte.

Jól látható az is, hogy a vizsgált időszakban igen sok esetben adott még az average becslés esetén is alacsonyabb értéket az ethGasStation, mint ami ténylegesen blokkba került.

Gyakori vélemény, hogy sokkal jobb lenne az eredménye a becsléseknek, ha nem a korábbi blokkok átlagát vennék figyelembe, hanem mondjuk a medianját, ezzel kivéve a képletből az ilyen bődületesen magas gasPriceokat. Csináltam erre is egy ábrát:

A narancssárga sáv a blokkonkénti Medián sávot mutatja, míg a három kék vonat az ethgasprice slow, avg és fast kalkulációját. jól látható, hogy a median nemcsak, hogy ráfekszik a becslési sávra, de általában még kicsit magasabban is van, így bizonyosan mondható, hogy pl. az ethgasprice oldal becslése sokkal alacsonyabb értéket ad szinte minden kategóriában, mint ha simán a blokkonkénti media gasPrice alapján saccolnánk a tranzakciókat. Ez különösen szembetűnő az emelkedő sávban, ahol még a “fast” becslés is a median sáv alatt található, amiből kiderül, hogy egyértelműen gazdaságossági szempontokat tart szem előtt pl az ethgasstation.

Ezen konklúziók alapján én elvetném azt a feltételezést, mely szerint az ethGasStation közvetlenül befolyásolná és felverné az gasPrice-t ezzel a bányászok profitját erősítve.

Akkor mégis mi okozza?

A kérdésre korábban már válaszoltam. Ahelyett, hogy a walletek normálisan becsülnének és menet közben finomangolnák a költségek optimalizálását, helyette felül tervezik a valós kínálatot, ami eredményezi az ilyen 300-400 Gwei-s becsléseket, miközben 80-100 Gwei is bőven elég lenne. Ezek az értékek viszont nyilván már statisztikailag is befolyásolják az elemző toolokat, aminek eredménye a bődületesen magas gasPrice napjainkban.

Hogyan kellene ezt jól csinálni?

Ha semmi nem változik rövidtávon az Ethereum háza táján (lásd nem vezetik be nagyon gyorsan az EIP-1559-et), akkor egyetlen út, hogy minden piaci szereplő elkezdi fejleszteni a saját fee optimization tooljait, mindenképpen ide értve a trustless wallet fejlesztőket is.

Megfelelő fejlesztéssel gyakorlatilag teljesen szükségtelenné tehető az, hogy bármiféle gasPrice estimation eszközt vagy szolgáltatást kelljen használni. Ehhez mindösszesen egy full nodera van szükség, ami nyilván nem feltétlenül kifizetődő mindenkinek, de minél több gazdasági szereplő választja ezt az utat, annál inkább fog normalizálódni az egész hálózati költség krízis.

Ha valakinek van full nodeja, akkor bármikor le tudja kérni a latest és a pending blokkot (web3.eth.getBlock(…)), a latest a mindenkori legfrissebb block, a pending pedig a saját full node által feltételezett következő block ami készülni fog. Ez annyit jelent, hogy a nodeunk pontosan tudja, hogy várhatóan milyen költségekkel fog készülni a következő block, illetve azt is, hogy mi lesz a legalacsonyabb fee amivel be lehet még kerülni.

A getBlock válasz talán legfontosabb két paramétere:

'gasLimit': 12451114, 'gasUsed': 11250515

Ez azt mutatja, hogy maximum mennyi gas-nyi tranzakció kerülhetne a következő blokkba, illetve, hogy jelenleg ebből mennyi van elhasználva. Ha a gasUsed értéke nem éri el a gasLimit rétkének cirka ~95%-át, azt azt jelenti, hogy a saját full nodeod szerint konkrétan nincs annyi pending tranzakció amennyivel ki lehetne tömni a következő (készülő) blokkot. Mit jelent ez a gyakorlatban? Azt, hogy teljesen mindegy, hogy mekkora gasPrice jön ki bármilyen estimation tool szerint, akkor is nagy valószínűséggel akár 1 Gwei (sőt jobb esetben akár 1 Wei) gasPrice-szal is be fogsz tudni kerülni a következő blokkba.

Nyilván érdemes figyelni a ‘latest’ block timestampjét. Ha a timestamp kevesebb mint 1-2 másodperces, akkor még nem érdemes gasPricet saccolni. Ha pedig több mint 30 másodperc, akkor két dolog lehet: vagy le van maradva a fullnode és nem szabad abból semmilyen következtetést levonni, vagy pedig örökre megállt az Ethereum hálózat a harmadik világháborút követően amikor átvették a föld irányítását a majmok.

Szóval, ha a latest block óta már eltelt legalább 10 másodperc és a pending block mérete maxon van, akkor jön az az érdekesség, hogy szépen meg kell nézni, hogy mennyi az adott blockban lévő tranzakciók gasPriceának minimuma, majd az új tranzakciónkat úgy betolni a hálózatra, hogy azt a minimum értéket kereken 1 wei-vel (tehát nem 1 Gweivel!!!) meg kell növelni, így nagy valószínűséggel bele fogunk férni a következő blokkba.

A folyamatot tovább lehet finomítani úgy, hogy ha pl. mégsem kerül be a tranzakció a következő blokkba, akkor a következő pending block statisztikája alapján újra lehet propagálni a tranzakciót magasabb gasPrice-szal, de itt is figyelve arra, hogy a készülő block “alját” célozzuk csak meg.

Konklúzió

Alapvetően nem lenne nagy kaland normális szinten tartani az Ethereum hálózati költségeit, hiszen ehhez minden szükséges és hasznos információt megad a hálózat; azonban mindettől függetlenül sajnos a legtöbb wallet és szolgáltatás implementáció egyszerűen nem él ezekkel az eszközökkel, ezért már minimálisabb terhelés hatására is irreális szintre ugranak az utalási költségek. Persze ezeken a szinteken logikusan életbe lép az equilibrium elv, nevezetesen, hogy a felhasználók egyszerűen nem utalnak el bizonyos tranzakciókat a magas fee miatt, ami csökkenti a hálózat terheltségét… de ez nem feltétlenül a legjobb elv és nem is a legjobb reklám; valahogy én biztos nem így képzelem el a jövő pénzügyi rendszereit.

A következő évek nagy kihívása mindenképpen a gasPrice optimalizálás lesz és ezzel együtt ez is lesz a piac egyik legnagyobb üzlete. Egy kisebb helyi váltó esetén is a megfelelő gasPrice allokáció éves szinten akár több ezer dolláros üzemi költség spórolást eredményezhet.

Bookmark the permalink.

3 Comments

  1. Laszlo Fazekas

    Ez alapján össze is dobhatnatok egy inlock walletet, ami mindig optimális gas price-al küld. Ha más nem, reklámnak jó lenne. 😉

    • Maga az INLOCK már most is így működik, de ez ugye custody wallet. Nem hiszem, hogy rövidtávon terveznénk készíteni egy trustless/SPV walletet; szóval ezt a sikert meghagynánk a többi piaci szereplőnek, akik amúgy is készítenek már most is ilyen walleteket.

Leave a Reply

Your email address will not be published. Required fields are marked *