rss

Egy virtuális cég bukása – The DAO, 2. rész

Ahogy azt az előző részben bemutattam, a közösségi finanszírozás májusi sikere után június 17-én óriási pofon érte a The DAO tulajdonosait. Egy ismeretlen támadó kiskaput talált a decentralizált céget szabályozó okos szerződésben, amit kihasználva 3,6 millió étert lopott el.

A hibát az okos szerződés kiválást (split) szabályozó részében fedezte fel. Emlékeztetőül: a cég részvényesei bármikor dönthetnek úgy, hogy kiválnak a cégből, aminek során a The DAO arányosan őket illető vagyonelemei egy új cégbe kerülnek át. Részvényesként a tolvaj is kiválást kezdeményezett, azonban trükkös módon. Azt vette ugyanis észre, hogy a kiválást végrehajtó split függvény kódja elsőkét a kiválni szándékozót megillető vagyont helyezi át az új cégbe, és csak utána semmisíti meg az illető The DAO részvényeit. A támadónak a két művelet végrehajtása között sikerült újra meghívnia a split függvényt. Ekkor tehát az őt megillető vagyon egyszer már ugyan az új cégbe került, viszont a program szerint még mindig rendelkezett The DAO részvényekkel, hiszen azok nem semmisültek meg. A függvény újbóli meghívásával a program csak azt észleli, hogy egy részvényes teljesen jogosan kéri az őt megillető vagyon új cégbe utalását (hiszen rendelkezik The DAO részvénnyel), ezért másodszor is végrehajtja a műveletet. Mondanom sem kell, hogy a támadó ezúttal sem hagyja teljesen lefutni a kódot, hanem rekurzív módon a megfelelő ponton újra és újra meghívja a split függvényt.

A dolog ahhoz hasonlít, mintha pénz felvétele után az ATM megkérdezné tőlünk, hogy kívánunk-e más műveletet is végrehajtani. Azonban az elszámoló program rosszul működik, és a számlánkról csak akkor vonja le a felvett összeget, miután erre a kérdésre „nem”-et válaszolunk. Ha azonban „igen”-t felelünk, akkor ismét felvehetünk egy adag pénzt anélkül, hogy közben a számlánk egyenlegét a program módosította volna. Mindezt addig csinálhatjuk, amíg ki nem fogy a pénzből az automata.

Külön érdekesség, hogy a néhány órán át tartó rablást folyamatosan lehetett követni az Ethereum publikus blokkláncán, mintha élőben néznénk egy bankrablást tehetetlenül. A tolvaj – akinek kilétét természetesen a mai napig nem ismerjük – minden bizonnyal átmenthette volna a The DAO teljes vagyonát, 12 millió étert az új cégbe, de 3,6 milliónál saját akaratából megállt. Talán azt gondolta, hogy ha túl nagy kárt okoz, akkor azzal végleg megingatja a bizalmat az Ethereumban és az éter árfolyama is teljesen összeomlik. Így hiába lesz belőle 12 millió darabja, ha az nem ér semmit. Ehelyett megelégszik kevesebbel is, ami viszont többet ér.

Azonban a veszély nem hárult el, hiszen a fentebb leírt hibát kihasználva bárki más is megpróbálkozhatott a virtuális cég megcsapolásával. És próbálkoztak is, de a módszer hatékony alkalmazásához először tanulmányozni kellett és alaposan megérteni. Versenyfutás kezdődött az idővel, amit az Ethereum fejlesztőkből spontán alakult csapat, a jófiúkból álló Robin Hood Group nyert meg. Ők a további rosszindulatú támadásokat megelőzve „kilopták” és ezzel biztonságba helyezték a megmaradt étereket. A tervük az volt, hogy ezeket később valamilyen formában visszajuttatják jogos tulajdonosaiknak.

Ebben a pillanatban tehát a The DAO ott állt üres zsebbel, teljesen kifosztva, és az Ethereum felbolydult közösségében megindult a vita a hogyan továbbról. A történtekhez fontos adalék, hogy ugyan a támadó átmentette már a pénzt az új cégbe, de ott egyelőre még nem tudta használni, tehát még nem gyakorolt teljes kontrollt az összeg felett. Emlékezzünk csak, az előző részben kifejtettem, hogy a cégből való kiválás folyamata hosszadalmas, a procedúra egyes részeinek a hosszát az okos szerződés határozza meg, és ezt még a támadó sem tudja felülírni. Vagyis amíg az időzár kioldódik és a tolvaj hozzájut a zsákmányához, addig a közösségnek volt még néhány hete kitalálni valamit.

Sokan amellett érveltek, hogy mielőtt ez megtörténne, az Ethereum átprogramozásával kéne kezelni a helyzetet. Az Ethereum a bitcoinhoz hasonlóan konszenzus alapon működő rendszer. Ha nekem van egy éterem, az csak attól van, mert minden bányász könyvelésében az én számlámon szerepel az a pénz. Ha az összes bányász összebeszél ellenem, és teljes egyetértésben átírják másnak a számlájára, akkor az a pénz pusztán ettől oda is kerül, nem tudok tenni ellene. A csalás természetesen nyilvánvaló lenne, a publikusan végzett könyvelés (vagyis a blokklánc) átnézésével ezt mindenki láthatná. De ha teljes egyetértésben mindenki úgy tesz, mintha nem is lenne csalás, akkor tulajdonképpen nincs is. A dolgot ugyanis úgy is fel lehet fogni, hogy ez nem csalás, hanem csak a szabályok átírása.

Szerencsére az Ethereum vagy a bitcoin hálózatát nagyszámú szereplő működteti, akik nem tudnak könnyen összebeszélni, és nem is lenne érdekük a rendszerben való bizalmat aláásni. Pénznek bányászok általi önkényes átírása egyik számláról a másikra még soha nem fordult elő. A szabályok átírásához nyomós érv kell.

A kérdés az, hogy vajon a The DAO kifosztása elég nyomós érv-e. Akik szerint igen, ők azzal indokolják, hogy az eset túl nagy veszteséget generált, túl sok befektetőt érintett, vagyis a cég túl nagy ahhoz, hogy elbukjon. Ha mégis ez történne, az maradandó kárt okozna. Az Ethereum amúgy is egy korai fázisban levő kísérleti projekt, most még megengedhető egy ehhez hasonló egyedi elbírálás. Ilyesmi a bitcoinnal is történt 2010-ben (igaz, akkor a bányászprogram hibáját kényszerültek kijavítani, ami mindenképpen szükséges volt). Ha pedig a tolvaj piacra dobja a zsákmányát, akkor azzal bedöntheti az éter árfolyamát. Így a közösség által elszenvedett árfolyamveszteségen túl még a teljes Ethereum projekt finanszírozása is veszélybe kerülhet, hiszen a fejlesztéseket végző Ethereum Alapítvány tartalékainak jelentős részét éterben tartja.

Az ellentábor szerint azonban az Ethereum függetlenségét nem szabad feladni. Ha beavatkozunk, azzal csak azt igazoljuk, hogy az Ethereum manipulálhatatlansága pusztán egy mítosz. Ezt követően már senki sem lehet biztos abban, hogy ilyen-olyan okból nem módosítják utólag és önkényesen az okos szerződését vagy az egyenlegét. Rablások vagy technikai okok miatti veszteségek már korábban is voltak és a későbbiekben is lesznek majd, anélkül, hogy bárkiben felmerült volna emiatt a szabályok utólagos megváltoztatásának kérdése. Miért lenne ez az egy eset kivétel? Ha precedenst teremtünk, akkor onnantól kezdve, akit meglopnak vagy hibát vét, jogosan követelheti a dolgok rendszerszintű visszacsinálását az ő kedvéért is. Ami nyilvánvalóan nonszensz és kivitelezhetetlen. A bitcoin világában is történt számos megrázó és hatalmas összegű rablás, mégse merült fel emiatt komolyan soha a rendszer szabályaival való játszadozás. Az igazságszolgáltatás és a rendszer működtetése egymástól független feladatok. Ne a szabályok utólagos módosítgatásával próbáljunk igazságot tenni, abból csak bonyodalom és bizalmatlanság születik. A „too big to fail” érvet felhozni pedig hiba, hiszen a virtuális cég kimentése csak a felelőtlen viselkedés megjutalmazását jelenti. A The DAO-ba való befektetés hatalmas rizikója ismert volt, ennek egyik tényezőjét pedig éppen a bonyolult okos szerződés jelentette. Nem lehet azonnal mindent visszacsinálni, ha aktiválódik az egyik kockázat és rosszul sülnek el a dolgok. Ha az emberek azt látják, hogy ha tömegesen csinálnak hülyeséget akkor mindig kimentik őket, az csak ráerősít a rendszerszintű túlzott kockázatvállalásra, ami többek között a 2008-as válsághoz is vezetett.

A sztori érdekes (habár bizonyos szempontból egyáltalán nem meglepő) fejleménye, hogy egy nyílt levélben az állítólagos tolvaj is e verzió mellett érvelt. Habár nem bizonyított, hogy ő írta (én inkább arra tippelnék, hogy nem), de jól fejti ki a szabályok megtartása mellett szóló egyik további indokot. Megkérdőjelezi, hogy történt-e egyáltalán bűntény.

Arra hivatkozik, hogy a The DAO felhasználási feltételeiben az áll, hogy a céget meghatározó okos szerződés bármifajta értelmezése vagy magyarázata nem mérvadó, ilyenek csak oktatási célból készülnek. Ha pedig ellentmondás áll fenn az értelmezés és maga az okos szerződés között, akkor az utóbbi az irányadó. A kód a törvény. Márpedig ebből az következik, hogy ami történt, az szabályszerű volt, hiszen a program megengedte a végrehajtását. A támadó csak alaposan áttanulmányozta a szerződést, és a lehetőségeket mérlegelve döntött a The DAO-ba való befektetés majd a kiválás speciális módja mellett. A közösség egy része által szorgalmazott erőfeszítés az Ethereum rendszerszintű megváltoztatása pedig csak arra szolgál, hogy az ő legitim módon szerzett jussát jogtalanul elvegyék tőle. Éppen ezért jogi válaszlépéseket helyezett kilátásba arra az esetre, ha ez megtörténik.

A kérdésben én biztosan nem fogok igazságot tenni, mindkét oldal erős érveket hozott fel. Ugyanakkor a szabályok átírása is többféleképpen képzelhető el, így legjobb lesz, ha sorba vesszük a felmerülő lehetőségeket.

  1. Nincs teendő. Az Ethereum Alapítványnak nincs tennivalója az eset kapcsán, hiszen maga az Ethereum végig jól működött, tette a dolgát. Egy magáncég valóban írt egy hibás okos szerződést, de ilyen korábban is előfordult már és a későbbiekben is elő fog.
  2. Soft fork, vagyis az Ethereum szabályainak kisebb átírása. Éterek nem kerülnek át önkényesen egyik pénztárcából a másikba, viszont a támadó zsákmányát tartalmazó számlát feketelistára teszik, tranzakció a jövőben nem végezhető el annak a számlának a terhére, mert a hálózat visszautasítja a végrehajtását. Így ugyan a The DAO-hoz nem kerülnek vissza az ellopott éterek, de mivel lényegében befagyasztásra kerülnek, a tolvaj sem tud hozzájutni azokhoz.
  3. Hard fork, vagyis az Ethereum állapotának visszamenőleges érvényű átírása. Az ellopott étereket önkényesen egy másik pénztárcába írják át, ahonnét a The DAO részvényesei egy okos szerződés segítségével felvehetik az őket illető eredeti befektetésüket.

A „fork” kifejezés az angol „elágazás” szóból jön, és az Ethereum állapotát időben leíró blokklánc elágazására utal. Ha ugyanis megváltoztatjuk a szabályokat, akkor minden bizonnyal lesznek olyan bányászok akik a régi, és olyanok is akik az új szabályok szerint építik tovább a láncot. Ezek különbözni fognak, a blokklánc tehát elágazik, fork történik.

A közösség többsége a 2. verzió (soft fork) mellett érvelt, talán mint a két szélsőséges álláspont közötti kompromisszum, illetve ez a megoldás további időt tudott volna biztosítani a rablás végleges kezelését illetően. Azonban rövid időn belül kiderült, hogy itt most nem részletezett technikai okok miatt az Ethereumban soft fork nem megvalósítható. Maradt tehát az 1. (nincs teendő) és a 3. (hard fork) verzió.

Mindkét változat így vagy úgy a The DAO halálát jelentette. A szabályok változatlanul tartása mellett azért, mert akkor a virtuális cég kifosztva marad, hard fork esetén viszont további komplikációt már nem kockáztatva az étereket nem magának a cégnek, hanem közvetlenül a részvényeseknek akarták visszaadni. Ezt meg lehetett tenni, hiszen a cég a kifosztása előtt még egyetlen projektre sem kötött le pénzt. Annyi tehát már akkor biztossá vált, hogy a történelem legsikeresebb közösségi finanszírozásával életre keltett The DAO dicstelen véget ér.

A fejlesztést végző Ethereum Alapítvány úgy döntött, hogy a következő frissítéskor a bányászprogramba beépítik mindkét verziót, nem lesz „hivatalos” álláspont az ügyben. A program elindításakor minden egyes bányász eldöntheti, hogy a régi vagy az új szabályrendszert aktiválják. Az pontosan mérhető lesz, hogy az egyik illetve a másik verziót támogatóknak mekkora a számítási kapacitása, vagyis egyfajta élesben végrehajtott szavazást végeznek. Az 1 920 000. blokk lesz a vízválasztó, ott fog elágazni a blokklánc, és ezután derül ki, hogy melyik szabályrendszer kapja a többséget. Úgy gondolták, hogy ha az egyik – bármelyik is legyen az – kényelmes többséget szerez, akkor konszenzus alapon azt fogják a továbbiakban Ethereumnak hívni. Arra számítottak, hogy a kisebbség előbb-utóbb leállítja a másik variáns bányászását, hiszen ott csak értéktelen pénzt lehet majd kitermelni az értékes éterrel szemben. Felesleges és drága mulatság tehát azt bányászni, érdemes áttérni a többségi verzióra. Ha így történik, akkor a vesztes blokklánc csakhamar elhal.

Elérkezett július 20-a, a nap, amikor a kritikus blokk keletkezése volt várható. A blokkláncon történő események elcsendesedtek, a tőzsdék is felfüggesztették az éter kiutalásokat, senki nem akart addig semmit se csinálni, amíg nem válik világossá, melyik az „igazi” Ethereum.

A fork gond nélkül megtörtént, a blokklánc rendben elágazott, váratlan technikai probléma nem lépett fel egyik szálon sem. A túlnyomó többség a szabályrendszer megváltoztatása mellett tette le a voksát, az eredeti verziót támogatók számítási kapacitása pedig egyre csökkent. Úgy nézett ki, hogy minden a terv szerint alakul.

Innentől kezdve az új szabályok szerint működő blokkláncot hívjuk Ethereumnak, és az kezdett újra „élettel” megtelni, a tőzsdék folytatták a kiutalásokat. A The DAO egykori részvényesei pedig elkezdték felvenni a visszajuttatott étereiket. Az alábbi grafikonon azt láthatjuk, hogy a részvények értéke a rablás utáni pánikból hogyan konvergált vissza a 0,01 éteres névértékéhez, ahogy egyre biztosabbá vált a hard fork későbbi győzelme.

Azonban az eredeti szabályok hívei nem hagyták magukat. A blokklánc sérthetetlenségét hangoztatva elérték, hogy néhány nap múlva az egyik tőzsde Ethereum Classic néven listázza az ő pénzüket is. Ezzel a lépéssel erőre kapott az eredeti láncot bányászók számítási kapacitása, és habár ez még mindig jóval kisebb a konkurens lánc kapacitásához képest, de a stabil működéshez bőven elegendő volt. Világossá vált, hogy az eredeti tervekkel ellentétben nem fog elhalni a vesztes szál. Az Ethereum világa így végül megkettőződött, párhuzamos univerzumok születtek.

Hogy pontosan ez mit is jelent és milyen következményei vannak, az a befejező részből derül majd ki.

Kapcsolódó tartalom

2023-ban sem halt meg a bitcoin

Mitől olyan nagy biznisz az Ethereum?