Orosz rulett Ethereum módra

A történelem ismétli önmagát. Miközben a Bitcoin kapcsán már megnyugodni látszanak a kedélyek a skálázási vita kapcsán (nem… nem oldódott meg semmi, csak már kevésbé érdekel bárki is a vita, mindenki beletörődött, hogy ez van; ezzel kell élni)… szóval aközben most az Ethereum háza táján zajlik valami nagyon hasonló történet. Kisebb belső háború folyik éppen a bányászok és a core fejlesztők között, mely persze sok szempontból mondvacsinált, de mégis csak sok az áthallás:

  • A minerek növelni akarják a blokkokat, ezáltal csökkentve a hálózat terhelését, ami implicit csökkentené a költségeket, de valójában csak a bányászok anyagi hasznát hajtja fel azáltal, hogy sokkal több tranzakció tud átmenni.
  • A core fejlesztők (élükön Szilányi Péterrel) viszont több szempontból is kifakadnak, mivel a bővítés miatt tovább növekedik a full nodeok erőforrás igénye, ami szükségképpen a centralizáció felé vezet. Ráadásul a növelés lassítja a full nodeok feldolgozását, ami miatt növekedni fog az orphan blokkok aránya is.

Eléggé dejá vu szituáció…

A dolognak talán egyetlen szépséghibája, hogy míg Bitcoin esetén ebből a kérdésből valóban egy nagyon komoly belső polgárháború lett (BIP-148 aktiváció vs SegWit-2), addig ethereumon a minerek szépen zárt ajtók mögött megegyeztek és felcsavarták a blokkonkénti gaslimitet 10 millióról 12 millióra.

Hogy ez mennyire egy látszat megoldás volt csak, azt mi sem bizonyítja jobban, mint hogy az átállás óta ugyanúgy tele vannak a nagyobb blokkok is, illetve az átlagos gasPrice továbbra is 25 és 40 gwei közül alakul szinte konstansan.

Persze ha a történetnek itt lenne vége, akkor nem írok róla külön bejegyzést. De a helyezet ennél kacifántosabb. Ahogy szokott lenni, Vitaliknak általában van egy jó ötlete, amivel a problémát meg lehet kerülni vagy újraértelmezni:

EIP-1559 – A megoldás(?)

Idén április 13-án terjesztette be Vitalik, néhány további fejlesztővel közösen a 1559-es sorszámú Ethereum fejlesztési kezdeményezését. Ennek a célja alapjaiban újragondolni a teljes fee market modellt.

Jelenleg az Ether tranzakciók díja teljesen szabadáras és aukción dől el, hogy mely tranzakciók kerülnek blokkba és melyek maradnak a várakozási sorban. Bárki bármekkora feevel (gasPrice) be tud rakni bármilyen tranzakciót, annak reményében, hogy az előbb-utóbb blokkba kerül. A legtöbb tárca/kliens/node a szokásos költség saccolási metódust használja, aminek lényege, hogy az előző blokkokba került tranzakciók gasPrice értékét átlagolják és súlyozzák, majd az így keletkező értékre még ráraknak egy kicsit ha a blokk tele volt. Ez a megközelítéssel egyrészt az a baj, hogy nagyon könnyen az egekbe tud repülni a gasPrice, másrészt a minerek profitmaximalizálása miatt akár előfordulhat, hogy hibás becslések jönnek ki. Ennek negatív hatását valószínűleg már sokan megtapasztalták, amikor megpróbáltak “olcsón” elküldeni egy tranzakciót leterheltebb időszakban.

Mit is jelent pontosan ez a profitmaximalizálás miatt keletkező becslési hiba? A probléma alapja az, hogy egyszerűen a jelen idő alapján akarunk egy jövőbeli eseményre saccolni. Ez azt eredményezi, hogy amikor éppen hírtelen nagyon sok tranzakció tódul be a hálózatra, akkor alábecsülésre kerülnek a tranzakciós díjak, amikor viszont csökken a hálózat terhelése, akkor viszont a fee-k még nagyon sokáig magasan maradnak és csak lassan csökkennek. Előbbi probléma azt eredményezi, hogy nagyon sok tranzakció egyszerűen nem tud blokkba kerülni és beszorul a mempoolba hosszú időre. Utóbbi pedig azt, hogy gyakran 2-3x többet fizetnek egy-egy tranzakcióért, mint amennyit valóban kéne, hogy bekerüljön az a következő blokkba… ami explicit eredményezi, hogy a következő blokkba kerülő tranzakciók is sokkal drágábbak lesznek, mint ami indokolt lenne.

A EIP-1559 kezdeményezés a problémát a következőképpen hivatott orvosolni: bevezetésre kerül három újabb protokoll paraméter, ezek a: BASEFEE, GASPREMIUM és FEECAP.

Ezek közül a BASEFEE egy a hálózat által kiszámolt és nem módosítható érték. Alap értéke az 1 gwei, ami akkor növekszik, ha az előző blokk tele volt és akkor csökken, ha nem volt tele.

Minden tranzakció küldésénél két paramétert lehet majd megadni: GASPREMIUM (kvázi a miner borravalója), illet a FEECAP, ami a maximum gwei-ben mért gasPrice, amit hajlandó a küldő kifizetni. Logikusan a GASPREMIUM értékének valahol 0 és “nem-túl-sok” között kéne lennie, míg a FEECAP-ot tudjuk úgy értelmezni és számolni, mint ahogy korábban a gasPrice-t számoltuk

Ezt követően a matek már egyszerű. A tranzakció gasPrice értéke a BASEFEE+GASPREMIUM lesz, de nem haladhatja meg a FEECAP-et.

GASPRICE = min(BASEFEE+GASPREMIUM , FEECAP)

Mit jelent ez a gyakorlatban:

JELENLEG, ha az jön ki a gasPrice becslésnél, hogy a tranzakció várható költsége mondjuk 52 gwei kell hogy legyen és bekerül az adott tranzakció a blokkba, akkor a miner zsebre rakja az 52 gwei*txgas jutalmat, függetlenül attól, hogy egyébként mondjuk 38 gweivel is bele fért volna az adott blokkba.

EIP-1559 aktiválása után: Legyen mondjuk a BASEFEE 20 gwei és mondjuk ajánljunk fel a minereknek +10 gwei borravalót (GASPREMIUM), de limitáljuk ezt maximum 50 gwei FEECAP-en. Ebben az esetben ha a soron következő blokkba bekerül a tranzakció, akkor annak a díja garantáltan 30 gwei lesz. Viszont ha mégsem kerülne be, akkor sincs pánik, mert a következő blokkra már a protokoll fentebb húzza a BASEFEE-t pl 21 gwei-re és amennyiben az így keletkező 31 gwei (BASEFEE+GASPREMIUM) ajánlatommal már beleférek a következő blokkba, akkor tutira benne is leszek, ráadásul tutira 31 gwei gasPrice tranzakciós költséggel… annak ellenére, hogy egyébként ez a tranzakció nekem akár 50 gwei-t is megért volna (FEECAP).

És akkor jöjjön a csavar

Az előző pontban bemutatott EIP-1559-es metódus alapvetően egyszerű és nagyszerű, de közismert, hogy egy ilyen modellnek, bizony meg kell állnia a helyét az olyan eltérő anyagi motivációkkal rendelkező komplex rendszerben is, mint az Ethereum. Hiszen jól látható, hogy a BASEFEE-t igazából könnyedén lehet manipulálni, ha folyamatosan be vannak tömve a blokkok és máris dől a lóvé a minerekhez.

Erre Vitalik és barátainak megoldása végtelenül egyszerű:

A BASEFEE minden esetben elégetésre kerül, tehát azt NEM írhatják jóvá maguknál a minerek jutalomként.

Ergo a minerek kizárólag a GASPREMIUM-ot tudják jóváírni bevételként. Ez – a fenti példánál maradva – azt jelenti, hogy bár az adott tranzakció tényleges költsége akár lehet 31 gwei is amikor blokkba kerül, de a miner akkor is csak a GASPREMIUM értékét (10 gwei) írhatja jóvá magánál bevételként. Ezzel gyakorlatilag jelentősen letörve a minerek előnyét a becslések és eszkalációk miatt elszabaduló bányász költségek kapcsán.

Valóban megoldja a problémákat?

Bár az EIP-1559 által előterjesztett módosítás elegáns, egyszerű és jól kezeli a problémát, de sajnos nem tudja teljesen kizárni a manipuláció lehetőségét a bányászok oldaláról. Egyrészt a minerek tudják manipulálni a BASEFEE-t. Ehhez csak annyi kell, hogy folyamatosan olyan blokkokat készítsenek, amelyek nincsennek tele (tehát nem kerül elfogyasztásra a teljes 12 milliós blokkonkénti gas limit). Így:

  • Egyrészt ki tudják kapcsolni a teljes BASEFEE modellt, ezáltal visszahozva a jelenlegihez hasonló aukciós fee modellt.
  • Másrészt mivel ehhez a blokkok nem lesznek tele, így amikor éppen felgyűlnek a pending tranzakciók, akkor azok méginkább nem fognak beleférni a blokkba és méginkább elszállnak az tranzakciós költségek.

Ehhez persze az kell, hogy a nagyobb bányászok (cirka 60%+) megegyezzen ebben a stratégiában. Sajnos az elmúlt években a Bitcoin esetén már bebizonyosodott, hogy a nagyobb bányász poolok hajlamosak ilyen jellegű háttérmegegyezéseket kötni.

A EIP-1559 egyértelműen vízválasztó lehet az Ethereum jövője kapcsán. Vagy tényleg jól sül el és a bányászok önös anyagi érdeke lehetetlenné teszi a manipulációt… ha mégsem így lesz, akkor még a mostaninál is durvább vadnyugati időszak várható a tranzakciós költségek kapcsán.