Ethereum i pametni ugovori
Dijete koje je Blizzard nerfao odlučilo je napraviti svjetsko računalo — a onda se to računalo pocijepalo na dvoje jer je jedan bug pojeo 60 milijuna dolara.
Godina je 2014., i Bitcoin je konačno prestao biti stvar o kojoj se raspravlja samo na forumima s avatarima crtanih žaba. Vrijedi nešto, ljudi ga kupuju, a najvažnije od svega — konačno postoji rečenica koju možeš izgovoriti na rođendanskoj proslavi bez da te šogor gleda kao da si upravo priznao članstvo u sekti. Ta rečenica glasi: „to je digitalno zlato”. Zvuči smireno, razumno, skoro pa dosadno. I to je poanta. Bitcoin radi jednu stvar. Prenosi vrijednost od tebe do nekog drugog, bez banke koja se gura između, i to je to. Sve. Nema drugog trika u rukavu.
A onda se pojavi klinac koji je tinejdžerske noći provodio u World of Warcraftu, i koji pita zašto bi to bila sva vrijednost koju blockchain nudi svijetu.
Ali taj isti klinac iz prošlog bloka ne pita zašto Bitcoin ne radi više toga. Pita nešto veće, opasnije, ljepše — zašto ne napraviti blockchain koji pokreće bilo koji program? Ne samo prijenos novca, nego cijeli operativni sustav za povjerenje. Blockchain kao svjetsko računalo, gdje se svaki program izvršava točno kako je napisan, bez banke, bez odvjetnika, bez šefa koji može promijeniti pravila jer mu se tako prohtjelo u petak popodne. Kod postaje zakon. Ugovor se sam izvršava. Nitko ne vara, jer varanje jednostavno nije podržana funkcija.
Zamisli kako se ta ideja širi po konferencijama 2015. i 2016., po prostorijama punim ljudi koji iskreno, do srži vjeruju da su pronašli lijek za svaku birokratsku glupost čovječanstva. Osiguranje bez osiguravatelja. Tržišta bez posrednika. Organizacije bez direktora, gdje odluke donosi kod, a ne netko s kutijom cigara i lošim raspoloženjem. Zajednica koja se skuplja oko Ethereuma nije cinična gomila spekulanata — bar ne još. To su idealisti, programeri koji su pročitali previše znanstvene fantastike, a premalo povijesti.
Godina je 2010., i neki klinac od šesnaest ljeta gubi omiljenog lika u World of Warcraftu — jednoj od onih masovnih online igara u kojoj tisuće ljudi istovremeno grade svoje virtualne junake, ulažući u njih sate, mjesece, često i godine života. Lik mu ne umire na bojnom polju, ništa tako epsko — Blizzard, developer igre, jednostavno odluči da je njegov čarobnjak previše jak, i u jednom „patchu” (ažuriranju koje developer gurne svima odjednom, htjeli to ili ne) skine mu moć koja je klincu trebala satima dosadnog repetitivnog grinda da izgradi. Klinac plače. Ne, stvarno — sam je to poslije priznao, plakao je pred kompjutorom. I onda, umjesto da samo odustane od igre kao normalna osoba, izvuče pouku koja će za par godina prodrmati cijeli financijski sustav: netko drugi, netko kojeg nikad neće upoznati, u nekom uredu u Kaliforniji, ima potpunu i neupitnu moć da mu promijeni pravila igre preko noći. Bez glasanja. Bez objašnjenja koje njemu vrijedi. E, taj klinac se zvao Vitalik Buterin, i to će postati osnivački mit cijele priče koju ćemo ispričati u ovom poglavlju — istinit ili uljepšan, svejedno, poanta je pogođena.
Buterin je bio jedan od onih ljudi koji te nagone da preispitaš vlastiti životopis. U dvanaestoj je programirao. U sedamnaestoj je pisao za Bitcoin Magazine, objašnjavajući ostatku svijeta nešto što je taj svijet tek počeo nazirati. Sudjelovao je u ranoj bitcoin zajednici u trenutku kad je to još značilo da te ljudi gledaju kao čudaka koji vjeruje u internetski novac bez banke i države iza sebe. I dok su svi ostali bili opčinjeni jednom idejom — bitcoin kao digitalno zlato, kao sef koji nitko ne može provaliti — Buterin je gledao u taj sef i mislio: dobro, ali zašto ovo radi samo JEDNU stvar?
Jer bitcoin, koliko god revolucionaran, ima programski jezik otprilike bogat kao kalkulator iz osnovne škole. Možeš njime reći „prebaci X bitcoina s adrese A na adresu B” i par varijacija na tu temu, i to je to. Nema petlji, nema uvjeta koji pozivaju druge uvjete, nema ničega što bi nalikovalo pravom programiranju. To je svjesna odluka — Satoshi je htio sigurnost, ne kreativnost, i za novac koji čuva vrijednost to je razumno. Ali Buterinu, koji je programer u srži, to je zvučalo kao da imaš najbolji računalni čip na svijetu i koristiš ga isključivo za paljenje i gašenje jedne žaruljice.
Pa je predložio nešto ambicioznije, gotovo bezobrazno u svojoj skromnosti izraza: blockchain, ali s programskim jezikom koji je Turing-complete. Sjećaš se te riječi iz prvog poglavlja ove enciklopedije, iz priče o von Neumannu i arhitekturi koja je istovremeno čuvala i podatke i program? Isti koncept, samo ovaj put razmazan po tisućama računala širom svijeta koja se međusobno ne poznaju i ne vjeruju jedno drugom. Turing-complete znači, pojednostavljeno: ovaj sustav teoretski može izračunati bilo što što se uopće može izračunati. Ne samo „prebaci novac”, nego bilo koji program koji zamisliš — igru, glasanje, ugovor, cijelu tvrtku, ako baš hoćeš. Buterin to nije zvao samo blockchainom. Zvao je to svjetskim računalom — jednim velikim, decentraliziranim, neuništivim kompjutorom kojim upravlja svatko i nitko.
To je bila vizija dovoljno luda da privuče pravu vrstu ljudi — programere, idealiste i onu treću vrstu koja u svakoj revoluciji njuši priliku da uskoči rano i izađe bogata. Pa je 2014. Ethereum tim odradio ono što će uskoro postati standardna procedura u ovoj industriji, a tad je još bilo relativno svježe: ICO, initial coin offering, odnosno prva ponuda kovanica. Umjesto da moliš banke ili investicijske fondove za novac, jednostavno prodaš svijetu bonove za valutu koja tek treba biti izgrađena. Ljudi plate bitcoinom, dobiju obećanje da će jednog dana taj bon vrijediti nešto u novom sustavu koji se tek stvara — ta valuta se zove ether, kraticom ETH, i njome se od tada plaćaju sve transakcije i pametni ugovori na Ethereumu. Skupili su preko osamnaest milijuna dolara u tadašnjem bitcoinu — za projekt koji u tom trenutku nije bio ništa osim koda na GitHubu i manifesta pisanog s tolikom sigurnošću u sebe da bi pomislio da čitaš proročanstvo, ne poslovni plan.
I tu je, dragi čitatelju, sve još lijepo. Klinac s traumom od igre, genijalna ideja, novac koji pristiže, zajednica koja doslovno vjeruje da grade budućnost bez posrednika, bez šefova, bez ikoga koji ti može oduzeti moć preko noći kao onaj Blizzardov patch. „Kod je zakon”, govorili su. Uskoro ćeš vidjeti zašto je ta rečenica jedna od najskuplje naučenih lekcija u povijesti programiranja.

Pametni ugovori demistificirani
Dobro, sad ono najvažnije: što je taj „pametni ugovor” zapravo? Zvuči kao nešto što ti pravnik piše dok pije espresso i gleda te preko naočala, ali nema tu ničeg pametnog u smislu inteligencije, i nema tu nikakvog ugovora u smislu papira koji se potpisuje. Pametni ugovor je — pazi sad demistifikaciju — komad koda koji sjedi na blockchainu i čeka. Kao automat za kokice na kolodvoru. Ubaciš kovanicu, recimo ether (uvjet je ispunjen), automat ispljune kokice (rezultat se izvrši). Nitko ne stoji pored automata da odluči „ej, danas mi se ne sviđa tvoje lice, nema kokica”. Kod ne poznaje simpatije, ne poznaje veze, ne poznaje pravnike sa satnicom od 300 eura. Samo izvršava.
I upravo je to bila ta genijalna, luda, opojna ideja koju je Ethereum donio na stol: umjesto da blockchain samo bilježi „Ana je poslala Marku 5 bitcoina”, zašto ne bi mogao bilježiti i izvršavati puno kompliciranije stvari? „Ako se dogodi X, automatski se dogodi Y, i nitko — ni Ana, ni Marko, ni banka, ni sudac, ni Vlada Republike Hrvatske — ne može to zaustaviti.” Uzmi escrow, uslugu koju danas plaćaš kad kupuješ nekretninu ili nešto skuplje preko interneta: treća strana čuva novac i pušta ga tek kad su svi uvjeti ugovora ispunjeni, a ta treća strana obično je odvjetnik ili agencija koja za tu uslugu naplati lijepu svotu. Ethereum kaže: zašto treća strana ne bi bio jednostavno kod? Escrow bez odvjetnika. Osiguranje bez referenta koji te gnjavi telefonom dok čekaš isplatu štete. Zamisli policu koja sama isplati novac čim vremenska stanica na aerodromu javi da je let kasnio tri sata — nema poziva, nema papira, nema „vaš je slučaj u obradi”. Kod vidi podatak, kod plaća. Gotovo.
Zvuči lijepo, zar ne? I zamisli koliko je to zvučalo lijepo ljudima 2015. godine, kad je sve to bilo teorija na papiru i entuzijazam na Reddit forumima. Tržišta predviđanja gdje se kladiš na ishod izbora bez posrednika koji uzima postotak. Kreditni sustavi gdje ne treba banka da provjeri jesi li pouzdan — kod provjerava zalog i gotovo. A onda, kruna svega: organizacije. Ne firme s direktorima, upravama i sastancima koji traju dva sata a odluče se jedino za pauzu za kavu — nego organizacije u kojima su pravila napisana u kodu, glasovi se broje automatski, i novac ide tamo gdje kod kaže da ide. Bez šefa. Bez uprave. Bez čovjeka koji jednog dana odluči da mu se baš i ne isplati poštovati dogovor. Ta ideja je imala i ime, i ono će nam trebati već u sljedećoj sekciji — DAO, decentralizirana autonomna organizacija. Zapamti to slovkanje, vratit ćemo mu se brzo, i neće biti nježno.
Zato je ta ideologija bila utopija u punom smislu riječi — savršen sustav, zamišljen od ljudi koji su vjerovali da su konačno pobjegli od potrebe da vjeruju bilo kome. Ne treba ti odvjetnik, ne treba ti banka, ne treba ti čovjek kojem vjeruješ na riječ — treba ti samo kod, a kod je neumoljiv, transparentan i svima dostupan na uvid. Lijepo. Plemenito, čak. I potpuno, apsolutno slijepo na jednu jedinu činjenicu koju smo već sreli u ovoj enciklopediji, davno, u prvoj knjizi, kod jednog Mađara koji je 1945. zaključio da programi i podaci mogu sjediti u istoj memoriji. Ta odluka nam je dala univerzalno računalo. Ta ista odluka nam je dala i buffer overflow, zauvijek. Svaki sustav koji vjeruje kodu bez pogovora, nasljeđuje i sve bugove tog koda, bez pogovora. Ethereum to još ne zna. Ali za tri sekcije, hoće.

DAO: organizacija kao kod (2016)
Dakle, imaš platformu koja izvršava kod bez ikoga da ga nadgleda. Prva reakcija normalnog čovjeka: super, sad mogu naručiti pizzu bez posrednika. Prva reakcija idealista iz zajednice: čekaj, ako kod može biti ugovor, može li kod biti i cijela firma? Ne firma koja IMA ugovore — firma koja JEST ugovor, od temelja do krova, bez direktora, bez uprave, bez onog čovjeka u odijelu koji na sastancima izgovara riječ »sinergija« i za to naplaćuje plaću.
I tako je 2016. netko — točnije, tim oko njemačke firme Slock.it, ako te zanima ime na papiru — napravio The DAO. Ime je genijalno u svojoj bezobzirnoj literalnosti: Decentralized Autonomous Organization, decentralizirana autonomna organizacija. Ne metafora, ne marketinški naziv — opis proizvoda je istovremeno i naziv proizvoda. Zamisao: investicijski fond u kojem nema šefa, nema odbora, nema nikoga tko odlučuje umjesto tebe. Ubaciš ether, dobiješ tokene, tokeni su tvoj glas, i onda svi zajedno, kao neka blockchain verzija skupštine stanara, glasate kome se novac iz fonda daje. Sve to piše u kodu. Kod broji glasove. Kod isplaćuje pobjednike. Nema čovjeka koji može reći »ne sviđa mi se ovaj prijedlog, briši ga« — jer nema čovjeka na toj poziciji. Pozicija je izbrisana iz dizajna.
Zvuči ludo? Zvučalo je ludo i genijalno istovremeno, što je inače recept za financijski balon, ali nastavimo dalje. Ljudi su navalili. Ne pregršt entuzijasta iz podruma — navalili su ozbiljno, institucionalno, s pravim novcem. U mjesec dana skupilo se oko 150 milijuna dolara u eteru, u tom trenutku najveći crowdfunding u povijesti interneta uopće. Ne najveći kripto crowdfunding — najveći, period, ispred Kickstarter kampanja za pametne satove i filmske nastavke koje nitko nije tražio. Trinaest posto cijelog Ethereuma koji je tada postojao sjedilo je u jednom ugovoru, čekajući da mu ljudi kažu što da radi s novcem.
I pravedno je reći — nije to bila samo pohlepa obučena u ideologiju, iako je i toga bilo, uvijek je ima. Bilo je tu i stvarnog vjerovanja da su otkrili nešto o tome kako ljudi mogu suradjivati bez potrebe da jedni drugima vjeruju — ispravka, surađivati. Cijela poanta blockchaina, sjećaš se, bila je da ne moraš vjerovati nikome — vjeruješ matematici. The DAO je bio taj princip doveden do logičnog kraja: ne treba ti čak ni direktor kojem ne vjeruješ, jer direktora nema. Ima samo kod. A kod, kažu, ne laže, ne krade, ne uzima bonus za sebe prije nego isplati dioničare.
Novac je stajao u ugovoru. Zajednica je slavila. Mediji su pisali o budućnosti demokracije upisane u softver. A negdje, u tih nekoliko tisuća redaka koda napisanog u Solidityju — programskom jeziku skovanom baš za pisanje pametnih ugovora na Ethereumu, ništa egzotičnije od toga — čekala je jedna sitna, dosadna, tipična programerska greška, one vrste koje bi svaki senior na pregledu koda trebao uhvatiti, a nitko nije. Kod je bio zakon, da. Samo što zakon, ispada, ima rupu.

Hack i filozofski potres
Lipanj 2016. DAO je pun para — otprilike četrnaest posto svih Ethera na svijetu sjedi u jednom ugovoru, čeka da ga zajednica prstom pomiri i uloži u sljedeći sjajni projekt. I onda netko — do danas se ne zna pouzdano tko, iako teorija ima na kile — primijeti da kod ima rupu. Ne malu. Rupu kroz koju prolazi kamion.
Riječ je o triku koji se od tog dana zove reentrancy (nazovimo ga „ponovni ulazak”), i zvuči kompliciranije nego što jest — obećano je da ćeš razumjeti, pa evo. Zamisli bankomat koji radi ovako: prvo ti isplati novac, pa TEK ONDA upiše u bilježnicu da si podigao novac. Sitna razlika u redoslijedu, čini se nevažna. Osim što, ako znaš tu sitnicu, možeš u trenu kad te bankomat isplaćuje — dok bilježnica još kaže da imaš puni saldo — pritisnuti gumb za isplatu ponovno. I ponovno. I ponovno, u petlji, dok bankomat mehanički ne ispražni sam sebe, jer je uvjerio sebe da još imaš pravo na novac koji ti je upravo dao. Ugovor DAO-a radio je točno to: isplati, pa ažuriraj stanje. Napadač je pozvao funkciju za povlačenje, a ta je funkcija, prije nego se stanje ažurira, pozivom prema napadačevu ugovoru omogućila da se ista funkcija za povlačenje pozove iznova, iz njega. I ponovno — ista petlja, samo umjesto gumba na bankomatu, poziv koda koji sam sebe zove iznova, prije nego mu itko stigne reći „stani, već si platio”. Pljačka banke bez maske, jer maska nije trebala — sve je bilo javno, na blockchainu, vidljivo svima koji su znali gdje gledati.
Rezultat: nešto oko 3,6 milijuna Ethera, u tom trenutku vrijednih oko 50 milijuna dolara, poteklo je iz DAO ugovora u drugi, napadačev ugovor — klon istog koda, samo s jednim vlasnikom. Zajednica je gledala transakcije uživo, u realnom vremenu, kako novac curi, i nije mogla ništa. Ne jer nisu bili brzi, nego jer je sustav bio dizajniran tako da baš nitko — ni osnivači, ni Vitalik, ni bilo koji administrator — ne može pritisnuti pauzu. To je bila cijela poanta. Bez povjerenja, bez posrednika, bez šefa koji zaustavlja transakciju kad zamiriše sumnjivo. Samo kod, koji radi točno ono što je napisano, ni dlaku više ni manje.
Zajednica se, u panici koja traje danima, cijepa na dva tabora, i ta podjela nije tehnička — ona je filozofska, do same kosti onoga što je Ethereum trebao biti. Jedan tabor kaže: hard fork. To znači da se zajednica programera dogovori promijeniti temeljna pravila blockchaina — a pošto na blockchainu ne postoji „ispravi pogrešku” gumb, jedini način da se to učini jest da svi koji vode računala u mreži prijeđu na novu verziju pravila; ako se baš svi ne slože, lanac se razdvoji na dva, kao da je cesta odjednom dobila dva smjera koja više ne vode na isto mjesto. Dakle: promijenimo pravila blockchaina, unatrag, vratimo novac ljudima kojima je uzet, kao da se ništa nije dogodilo. Drugi tabor, manji ali beskompromisan, kaže: ako to učinite, upravo ste priznali da kod NIJE zakon, da je zakon uvijek ono što skupina moćnih ljudi odluči da bude, kao i svugdje drugdje, i cijela je priča o nepovjerenju u posrednike bila lijepa fikcija dok se nije zakomplicirala.
Vitalik i većina programera stanu na stranu forka — dakle na stranu ideje da se pravila blockchaina promijene i pljačka poništi. Argument je, u prijevodu na normalan jezik: da, kod je pravilo, ali kod je pisao čovjek, čovjek je pogriješio, i pretvarati se da greška u zapisu treba imati istu težinu kao namjera — to nije dosljednost, to je tvrdoglavost koja ubija čitav projekt u kolijevci. Glasa se — na blockchainu, kako inače — i velika većina zajednice podržava povratak novca.
20. srpnja 2016. dogodi se hard fork. Nova verzija lanca, u kojoj se DAO hack jednostavno — poništi. Novac se vrati vlasnicima kao da je vrijeme premotano. Ta verzija, s poništenom pljačkom, postaje Ethereum kakav danas znaš, ETH.
Ali manjina koja je ostala vjerna izvornom principu ne pristaje na premotavanje. Za njih je stari lanac — onaj u kojem je hakiranje ostalo zapisano, netaknuto, po pravilima koja su vrijedila kad se dogodilo — jedini istinski Ethereum, jer se drži svoje riječi čak i kad ta riječ boli. Taj lanac nastavlja postojati, paralelno, pod imenom Ethereum Classic. Dvije valute, dva blockchaina, ista povijest do jedne sekunde u srpnju 2016., kad su se razišli oko pitanja koje filozofe muči stoljećima, a kripto zajednica ga je morala riješiti u tjedan dana: je li pravda ono što je zapisano, ili ono što je pravedno, kad se to dvoje ne slažu.

Što je DAO hack naučio (i nije)
Prašina se slegla, ETH i Ethereum Classic počeli su živjeti odvojene živote na dvije potpuno različite putanje vrijednosti, a zajednica je ostala s mamurlukom i jednim neugodnim pitanjem: pa što smo, zapravo, dokazali? Odgovor koji se najčešće ponavljao po forumima te 2016. glasi otprilike ovako — dokazali smo da „kod je zakon” zvuči sjajno na konferenciji, uz pivo, dok crtaš dijagrame na ploči, ali čim netko stvarno ostane bez šezdesetak milijuna dolara, ideologija ide u drugi plan, a telefon zove pravnika. Apsolut je umro te noći. Ostao je pragmatizam, onaj stari, dosadni, ali začudo uvijek pobjednički pragmatizam koji se u ovoj seriji pojavljuje s tolikom upornošću da bi mu čovjek mogao posvetiti zaseban ormar u muzeju: kad ideologija i stvarnost odu u sudar, stvarnost pobjeđuje. Uvijek. Bez iznimke. QWERTY je pobijedio jer je stvaran, VHS je pobijedio jer je stvaran, a Ethereum je pukao na dvoje jer je stvarnost bila jača od jedne rečenice u manifestu.
Ali — i ovo je važno, jer inače ispada da je cijela priča bila skupa lekcija iz poniznosti i ništa više — temelj koji je Vitalik postavio nije nestao s hakom. Naprotiv, upravo je taj temelj, to „svjetsko računalo”, ono na čemu se sljedećih nekoliko godina izgradilo pola kripto industrije. DeFi platforme (kratica za „decentralizirane financije” — posudi ili pozajmi novac izravno od drugog korisnika, bez banke koja stoji u sredini i uzima svoju maržu) koje posuđuju i pozajmljuju novac bez banke, NFT tržišta (digitalni „vlasnički listovi” zapisani na blockchainu, koji su na kratko uvjerila pola interneta da crtež majmuna vrijedi kao kuća, cijela ta ICO mahnitost (kompanije prodaju vlastiti novi token unaprijed, kao preprodaju dionica prije nego što firma uopće nešto proizvede) koja slijedi u nastavku ove knjige (drugi čin kripto cirkusa, ako se sjećaš gdje sjediš) — sve to niče iz istog tla koje je 2016. bilo puno rupa i bugova. Ethereum nije umro u DAO hacku. Samo je odrastao, bolno i brzo, na način na koji većina tehnologije odraste — kroz katastrofu koja postane studija slučaja koju svi citiraju, a nitko baš ne voli spominjati na svojoj stranici „O nama”.
Poanta cijele ove kronike, ako je tražiš u jednoj rečenici, glasi ovako: obećali smo ugovore bez povjerenja, a otkrili smo da povjerenje treba baš onda kad kod zakaže. Cijela je premisa Ethereuma bila da uklonimo posrednika, čovjeka koji može pogriješiti, slagati, uzeti mito — i stavimo na njegovo mjesto kod, koji ne griješi, ne slaže, ne uzima mito. Samo što kod pišu ljudi, a ljudi griješe, slažu (sebi, u glavi, da je testirano) i, ponekad, uzimaju mito u obliku brzine izlaska na tržište. Reentrancy bug u DAO ugovoru nije bio kvar sustava koji je trebao ukloniti ljudsku grešku. Bio je ljudska greška, samo prevedena u Solidity.
Ako ti ovo zvuči poznato, trebalo bi — ovo je isti dug koji smo upisali kad je von Neumann odlučio da program i podaci žive u istoj memoriji, negdje daleko na početku ove serije. Svaki sustav koji vjeruje kodu bez ostatka nasljeđuje sve bugove tog koda, i to bez iznimke, bilo da se zove buffer overflow na starim računalima (kad program preko reda upiše više podataka nego što je za njih rezervirano mjesto, pa se ti podaci preliju u tuđi dio memorije i pokvare nešto što s njima nema nikakve veze — zamisli da si nekome nasuo previše vode u čašu i ona sad curi po tuđim papirima) ili reentrancy na blockchainu iz 2016. Razlika je samo u tome što je ovaj put ta greška bila javna, brojiva, i vrijedila je šezdeset milijuna dolara u realnom vremenu, dok je cijeli internet gledao i prepirao se hoće li se to zvati krađa ili samo — čitanje pravila.