Nutikad lepingud ja DAO-st loobumine

Allikasõlm: 1575999

Traagiline kombinatsioon möödapääsmatutest vigadest ja muutumatust koodist

Eelmisel nädalal oli katastroofiline sündmus Ethereumi ökosüsteemis, kui DAO, vähem kui kahe kuu vanune arukas leping, hakkas kiiresti tundmatule poole raha lekkima. Vaadates praegune komplekt Ethereumi lepingutest, mis on täidetud kasiinode ja ennast deklareerinud Ponzi skeemidega, ei pruugi see tunduda suurem asi. See tähendab, kuni saate teada, et ligi 12 20,000 inimest oli DAO-sse investeerinud üle 15 miljoni eetri, Ethereumi krüptoraha. See on umbes 250% kogu olemasolevast eetrist, mille väärtus oli 17. juunil üle XNUMX miljoni dollari.

Kaks päeva hiljem langes DAO vara alla 100 miljoni dollari. Sellele järsule langusele aitas kaasa kaks asja. Esiteks oli kolmandik tema vahenditest (eetris väljendatuna) juba võetud. Ja teiseks, sellest tulenev paanika viis eetri turuhinna üle 21 dollari tipust alla kainemale 10.67 dollarile. (Avaldamise ajal oli hind taastunud umbes 14 dollarini.) See teine ​​efekt oli esimese loomulik tagajärg, kuna suure osa eetri hiljutisest väärtuse tõusust ajendas inimesi ostma seda DAO-sse investeerimiseks.

DAO oli lubanud tegutseda uut tüüpi detsentraliseeritud rahvahulga allhankevahendina, nagu Kickstarter või Indiegogo, kuid ilma vahendaja ja reguleerimiseta. Selle eesmärk oli lasta osalejatel ühendada oma krüptovaluuta, hääletada ühiselt projektide üle, kes otsivad rahastust, seejärel investeerida ja tulevikus kasu saada. Enne katastroofi tabas üle 100 projekti oli juba välja pakutud, millest enamik olid seotud Ethereumiga ise. Lisaks võimaldas DAO osalejatel igal ajal oma investeerimata raha välja võtta, asudes end madala riskiga investeeringuks.

Irooniline, et DAO-d tühjendanud isik või rühm tegi seda, kasutades ära selle tagasivõtumehhanismi peent vigu. Nagu kõik Ethereumi nutikad lepingud, on ka DAO vaid tükk arvutikoodi, mis on "muutumatult" (st püsivalt ja pöördumatult) plokiahelasse kinnitatud ja mida iga sõlm täidab vastusena saabuvatele tehingutele. Nagu iga endast lugupidav nutikas leping, pakub ka DAO täielikku läbipaistvust, muutes oma lähtekoodi veebis hõlpsasti kättesaadavaks. See tähendab, et igaüks saab iseseisvalt kontrollida selle funktsionaalsust, kuid võib ka otsida haavatavusi. Ja ometi hoiab plokiahelate muutumatu olemus ära selliste probleemide lahendamise.

Mai lõpus mitmed kriitilised teemad tõsteti esile silmapaistvatel Häkkimine laiali ajaveeb, koos üleskutsega moratooriumi kehtestamiseks DAO projektiettepanekutele. Seda võime nimetada nn valge mütsi lähenemisviisiks, kus ekspluateerimisest teatatakse kogukonna hüvanguks. Sellegipoolest ei tundunud keegi liiga murelik, sest probleemid, mis olid seotud viltu majanduslike stiimulitega, mitte otsese varguse ohuga. Samal ajal näib aga, et teised uurisid DAO koodeksi suurema omakasu pärast - nimelt otsisid viisi, kuidas tonni raha teenida. Ja 17. juunil see kellelgi õnnestus.

DAO tühjendamine

Üldiselt tulenes rünnak DAO koodi haavatavuste ja nende ärakasutamiseks loodud muu koodi vastastikmõjust. Näete, et eraldi vaadates ei sisaldanud DAO ilmseid vigu ja tõepoolest vabastati see alles pärast ulatuslikku turvaauditit. Kuid tagantjärele ja paljude teiste silmade kasuks on sellest ajast alates leitud märkimisväärne arv vigu.

Ma ei esita siin ekspluateerimise mehhanismi täielikku tehnilist kirjeldust, kuna teised on juba avaldanud suurepäraseid ja üksikasjalikke post mortems (vt siin, siin ja siin). Kuid ma seletan ühte konkreetset haavatavust, mis seal esines, kuna see on avastatud Portugalis palju muid nutikaid lepinguid ja on õpetlik näide.

Oletame, et arukas leping hoiab raha mitme kasutaja nimel ja võimaldab neil kasutajatel nõudmisel oma raha välja võtta. Protsessi loogika võib välja näha umbes selline:

  1. Oodake, kuni kasutaja taotleb tagasivõtmist.
  2. Kontrollige, kas selle kasutaja saldo on piisav.
  3. Kui jah, saatke soovitud kogus kasutaja aadressile.
  4. Kontrollige, kas makse õnnestus.
  5. Kui jah, lahutage kogus kasutaja saldost.

See kõik tundub äärmiselt mõistlik ja pigem nagu sularahaautomaat, mis annab teile natuke sularaha ja arvab teie pangakontolt vastava summa maha.

Kuidas saab see lihtne protsess valesti minna? Noh, selgub, et kui Ethereumi aadress kuulub lepingule, mitte tavakasutajale, siis võib see leping vastuseks raha saamisele käivitada mõne koodi. Ja see kood võib omakorda käivitada muid kooditükke Ethereumi plokiahelas. Oluline on see, et see võib käivitada isegi sama kooditüki, mis selle kõigepealt välja maksis.

See tähendab, et ülaltoodud 3. etapi ajal võib vastuvõttev aadress saata uue tagasivõtmistaotluse, alustades 1. etapis uut protsessi enne eelmise protsessi lõppu. Kuna kasutaja saldot vähendatakse alles 5. etapis, kinnitatakse eelmise saldo põhjal uus väljamakse ja sama summa makstakse uuesti välja. Vastuseks sellele teisele väljamaksele võib vastuvõttev leping taotleda kolmandat ja seejärel neljandat jne., Kuni rahalised vahendid tühjenevad või on saavutatud mõni muu piir. Siinkohal kasutaja tasakaal will lõpuks vähendatakse vastava summa võrra, sisenedes negatiivsele territooriumile, mida 2. etapp pidi takistama.

Samaväärne oleks sularahaautomaat, mis väljastab pangatähti, mis käivitavad ekraanile lehvitades tasuta korduva väljavõtmise. Esimene klient, kes selle teada sai, võib pangaautomaadi täielikult tühjendada.

Seda võimalust, et kooditükk ise lõpetab, nimetatakse rekursioonja on üldises arvutiprogrammeerimises väga kasulik tehnika. Kuid DAO puhul sillutas see teed sellele hävitavale ekspluateerimisele. Sellegipoolest, kui see oleks olnud ainus probleem, oleks rünnaku potentsiaal olnud piiratud, sest Ethereum rakendab piirmäära, kui sügavalt võib rekursioon tekkida. Kahjuks võimendasid DAO mitmed täiendavad vead selle mõju, mis viis lõpuks kümnete miljonite dollarite kaotamiseni.

Muidugi, kui vaid paar rida DAO koodist oleks kirjutatud teisiti, poleks see kõik juhtunud. Näiteks ülaltoodud 5-etapilises protsessis, kui kasutaja saldo väheneb enne kui raha saadetakse, oleks rekursiivne helistamine täiesti ohutu. Kuid kahjuks, isegi kui selle loojate kavatsused olid puhtad, oli DAO tegelik kood sügavalt vigane. Ja arvutitel on vastik harjumus pimesi järgida neile antud juhiseid, isegi kui viieaastane laps näeb, et tulemustel pole mõtet. Olles kinnistunud muutumatult Ethereumi plokiahelasse, andis vigasele DAO-le naiivsete investorite hord mitme aasta eest sadade miljonite dollarite eest hoolitsemise ja seejärel süttis suurejooneliselt. DAO osutus täielikuks ja täielikuks segaduseks ning seda ei saa kunagi parandada.

Probleem koodiga

Nii ahvatlev kui see ka pole, pole ma siin selleks, et DAO programmeerijaid tehniliste söede kohal vedada. Vaadates aluseks olev lähtekood, näib see olevat piisavalt hästi kavandatud, hea funktsiooni ja muutuvate nimedega ning selge sisedokumentatsiooniga. Ehkki ükski asi ei tõenda selle kvaliteeti, kipub koodi väljanägemise ja funktsioneerimise vahel olema suur seos samal põhjusel, et halva kirjavahemärgiga CV-d hoiatavad lohakate töötajate eest. Igal juhul ei kahtle ma selles, et DAO autorid on pädevad arendajad - tõepoolest, asjaolu, et see läbis ulatusliku koodikontrolli, viitab sellele, et põhiloogika oli kindel.

Nii et kui probleem pole inimestes, kes selle projekti kallal töötasid, või nende toodetud töös, siis mis see on? On tõsiasi, et suurte vigadeta kooditükkide kirjutamine on äärmiselt keeruline, kui mitte võimatu. Olen oma karjääri jooksul töötanud tõeliselt silmapaistvate programmeerijatega, säärastega, kes suudavad koodi välja töötada kümme korda rohkem kui arendaja keskmine tempo ja kümme korda vähem defekte. Ja siiski teevad need tähelepanuväärsed isikud vigu, mis põhjustavad tarkvara talitlushäireid. Donald Knuth, võib-olla kõigi aegade suurim arvutiprogrammeerija, andis kuulsa lubaduse pakkuda hüppeliselt suurenev rahaline tasu igale inimesele, kes leidis vea oma TeX-i komplekteerimistarkvarast. Ja ta saatis välja rohkem kui paar tšekki.

Selguse mõttes ei räägi ma rumalatest libisemistest nimedega nagu “ükshaaval”, “initsialiseerimata muutuja” ja “operaatori ülimuslikkus”. Need põhjustavad programmi esmakordsel käivitamisel sageli nähtavat tõrkeid ja neid saab hõlpsasti märgata, kui vaadata üle kohalik koodijupp, kus nad asuvad. Ja ma ei räägi isegi sellistest turvaaukudest nagu „valideerimata sisendid”, „SQL-i süstimine” ja „puhvri ületäitumine”, mis ei pruugi programmi tavapärases kasutuses ilmneda, kuid peaksid siiski olema iga kogenud arendaja silme ees.

Pigem räägin keerukamatest probleemidest nagu “võistlustingimused” ja “ummikud”. Need tekivad paralleelsete protsesside vastuoludest ja kipuvad ilmnema ainult katkendlikult, mistõttu on neid raske avastada ja taasesitada. Seetõttu saab neist aru saada ainult süsteemi kui terviku ja selle koostisosade vastastikuse mõju kaudu. See on palju raskem kui tavaline programmeerimine, sest see nõuab arendajatelt mõtlemist kaugemale individuaalsest koodijupist, millega nad töötavad. Ei ole ebatavaline, et kodeerijad veedavad mitu päeva probleemide silumiseks, et üks neist probleemidest üles lüüa. Ja just seda terviklikku mõtlemist oli vaja, et näha ette, kuidas DAO võib olla haavatav.

Kõigi nende raskuste korral võib õigustatult mõelda, miks meie järjest enam koodipõhine maailm meie ümber ei murene. Õnneks on enamikul tarkvaradel kasuks kolm kriitilist tegurit - järkjärguline kasutuselevõtt, regulaarsed värskendused ja aeg.

See töötab nii: Tekkiva turu vajadustele vastamiseks luuakse uus tarkvaratoode. Esialgu on turg väike, nii et vaid vähesed teavad, et neil on toodet vaja. Ja kuna toode on uus, leiab selle veelgi väiksem arv neist. Need "varajased kasutuselevõtjad" on julge ja vastupidav kamp, ​​kellele meeldib vaatamata seonduvatele riskidele elada tehnoloogilises servas. Nii proovivad nad uut toodet, näevad mõnda meelepärast kraami, küsivad hulga asju, mis puuduvad, ja mis kõige parem, teatavad tekkinud probleemidest. Iga hea tarkvaraettevõtja teab neid inimesi armastuse ja abiga üle tänada ning tänada iga tagasiside eest. Sest kuigi teie toote defektist on küll nõutu kuulata, imeb see palju rohkem mitte sellest kuulda.

Ideaalis vabastatakse toote uus versioon kuu jooksul või vähem, parandades teatatud vead ja lisades mõned nõutud funktsioonid. Varajased kasutuselevõtjad on õnnelikud ja tagasisidet voolab rohkem, sest uusim versioon on käimas ja kogu aeg uuesti käima. Turu kasvades suureneb seda toodet kasutavate inimeste arv. Ja kui toode pidevalt paraneb, räägivad üha enam neid inimesi sellest teistele. Veelgi parem, mida rohkem inimesi seda toodet kasutab, seda tõenäolisem on, et keegi kuskil loob selle täpse ja ebatõenäolise olukorra, kus ilmub varjatud viga. Natuke õnne saatel annavad nad teile sellest teada ja kriimustate oma pead uskmatuses, küsite lisateavet, lõpuks leiate ja lahendate probleemi ning hingate kergendatult.

Väheste eranditega töötab tänane tarkvaraarendus just nii, sest see on kõige tõhusam viis silmapaistvate toodete loomiseks. Muidugi töötab hea tarkvarameeskond välja ka laiaulatusliku sisekatse komplekti, et võimalikult palju vigu tabada enne, kui need kasutajate juurde jõuavad, ja tagaks, et uued versioonid ei lõhuks midagi varem toimivat. Kuid ikkagi tugineb enamik meist ka oma kasutajabaasidele, sest meil pole lihtsalt võimalust ette kujutada ja testida kõiki võimalikke viise, kuidas meie tooteid võidakse kasutada. Ja kui arvate, et see ei kehti suurte tüüpide kohta, ei saaks te rohkem eksida. Kui palju automaatseid värskendusi on teie Windowsi, Maci või Linuxi süsteemi viimase aasta jooksul alla laaditud? Ja kui kasutate Chrome'i või Firefoxi, värskendab teie veebibrauser ennast automaatselt ja vaikselt, keskmiselt üks kord kuus.

See korduv protsess võtab palju aega, selle all pean silmas mõnda aastat või kauem. Siiski, pärast seda, kui toodet on piisavalt kaua arendatud ja selle kasutajaskond on piisavalt suureks kasvanud ning need kasutajad on seda (teadmatult) piisavalt erinevates olukordades katsetanud, juhtub midagi maagilist. Seda maagiat nimetatakse küpsuseks ja selle saavutamiseks peab iga tarkvaratoode püüdma. Küpsus tähendab seda, et toode sobib tõesti hästi kõigile, kes seda kasutavad, ja sinna jõudmiseks pole otseteid. Kuid kui saate ajastus õigeks, küpseb teie toode umbes samal ajal, kui teie sihtturg sulandub, st kui suur hulk kliente on tegelikult valmis selle nimel maksma. Ja siis, nagu nad ütlevad, saate kindlasti kasu.

Muutumatul koodil

Siin jõuame arukate lepingute põhiprobleemini, mida DAO nii jõuliselt demonstreeris:

Kujunduse järgi on nutikad lepingud püsivalt kinnipidamisahelasse ja seega ei saa neid uuendada. See hoiab ära nende küpsuse saavutamise.

Eelmistes postitustes olen arutanud muid nutilepingutega seotud probleeme, näiteks nende probleeme mõju blockchaini jõudlusele ja asjaolu, et nad on vähem võimas kui paljud inimesed ette kujutavad. Nendel ja muudel põhjustel ei ole me (veel) arukaid lepinguid rakendanud MultiCin plokiahela platvorm. Kuid seni, kuni olin tunnistajaks DAO ebaõnnestumisele, polnud ma piisavalt palju põhjalikumale küsimusele mõelnud: mis tahes mitte-triviaalne nutikas leping sisaldab tõenäoliselt defekte, mida pole võimalik parandada.

Kaasaegse tarkvaraarendaja jaoks on mittefikseeritav kood õudusunenägu, mis seab riba kõrgemale, kui enamik on võimelised jõudma. Kuid sellist tüüpi koodi kohtame mõnedes olukordades, näiteks mikroprotsessorite kujundamisel, mis asuvad iga arvuti ja nutitelefoni keskmes. See kood, mis on kirjutatud keeltes nagu Verilog ja Vhdl, määratleb ränilaastu füüsilise paigutuse, mida pärast valmistamist ei saa muuta. Sellistes olukordades kipume nägema mitmeid tunnuseid: (a) kood on kirjutatud keeles, mis on välja töötatud ohutust silmas pidades, b) mitu aastat töötab selle kallal palju inimesi, c) see on allutatud ulatuslikule automatiseeritud testimisele ja ametlikule kontrollimisele ning d) kui lõpptoode on tarnitud puudusega, langeb tagasivõtmise hind kindlalt vastutava poole õlgadele (vt näiteks kurikuulus Pentiumi viga).

On ütlematagi selge, et see ei kehti DAO loojate ega ka mõne muu nutika lepingu loojate kohta. Kuid koodide muutumatus pole nutikate lepingute arendajate jaoks ainus väljakutse. Mitmed muud tegurid teevad Ethereumi tunduvalt ohtlikumaks kui enamik arvutikeskkondi:

  • Nagu varem arutatud, avalikustab enamik lepinguid oma lähtekoodi, et saada potentsiaalsete kasutajate usaldus. See muudab vead hõlpsaks leidmiseks ja kasutamiseks. Kui tavalist koodi saab probleemi ilmnemisel parandada, siis muutumatu koodiga saavad kasu vaid ründajad.
  • Nagu enamikus programmeerimiskeeltes, suudab plokiahelas üks "funktsioon" (koodijupp) teist "kutsuda" (käivitada), luua kaskaadseid efekte. Ethereum on aga ebatavaline, võimaldades otseseid funktsionaalseid kõnesid poolte poolt kirjutatud koodi vahel, kes üksteist ei tunne ja kelle huvid võivad kokku põrgata. See on ideaalne retsept võistleva ja ootamatu käitumise jaoks.
  • Nagu varem mainitud, kui üks Ethereumi leping saadab raha teisele, on viimasel võimalus vastuseks mõni kood käivitada. Seda koodi saab teadlikult kavandada saatmistoimingu ebaõnnestumiseks, potentsiaalselt käivitav igasugu edasine laastamine.
  • Kui üks funktsioon kutsub teist ja see teine ​​funktsioon kutsub kolmandat, luuakse kõnede ja alamkõnede "virn". Selle virna jälgimisel on arvutuslikud kulud, seega sisaldab Ethereum nn kõnepinu limiiti, mis piirab selle sügavust. See on piisavalt aus. Kuid kui konkreetse funktsiooni väljakutse saavutab piiri, siis Ethereumi keskkond vaikides jätab selle kõne vahele, selle asemel, et kogu tehingut turvaliselt lõpetada ja selle toiminguid lahti mõtestada. Teisisõnu, mõni kood nutilises lepingus lihtsalt ei pruugi hukata, ja selle täitmatajätmise võib tahtlikult põhjustada selle lepingu käivitamine piisavalt sügavast virnast. See on minu jaoks tõeliselt jälestusväärne disainivalik, purustades vaimse mudeli, millega iga tarkvaraarendaja on harjunud. Kes selle otsuse ilmselt tegi peaks vedada söe kohal, kuigi praegu on õnneks olemas a soovitus seda muuta.
  • Ethereumil on ka "gaasilimiit", mis hoiab ära kuritarvitamise avalikes plokiahelates, pannes tehingud tarbitud arvutusressursside eest maksma. Tehingu saatja otsustab, kui palju gaasi nad on nõus kulutama, ja kui see enne tehingu lõppemist otsa saab, katkestatakse see ohutult. Kuigi see on ilmselt raske probleemi parim lahendus, võivad sellel olla ebameeldivad tagajärjed. Osad lepingud vajavad eeldatust rohkem gaasi, teised aga ei saa üldse joosta.
  • Avaliku Ethereumi võrgu krüptoraha võimaldab nutikate lepingute defektidel tõelise raha valesse kohta saata, ilma et oleks lihtne taastuda. Kuigi Ethereumi kaevurid näivad olevat hääletades poolt "pehmest kahvlist" DAO-st väljavõetud vahendite külmutamiseks, see pole jätkusuutlik lahendus.

Kokkuvõtteks võib öelda, et võrreldes tavaliste tsentraliseeritud arvutisüsteemidega on Ethereum turvalisema kodeerimise jaoks palju keerukam keskkond. Ja siiski aitab selle muutmatuse põhimõte vältida lollaka tarkvara värskendamist. Teisisõnu, nutikad lepingud on tarkvara, mille vead on nähtavad, neid ei saa parandada ja mis kontrollivad otseselt reaalsete inimeste raha. Ilmselt on tegemist väga mürgise seguga.

Aastal Ethereumi stiilis nutikate lepingute pooldajad era- plokiahelatel võib tekkida kiusatus tähistada DAO surma, kuid ma ei usu, et see vastus vääriks. Välja arvatud kaks ülaltoodud punkti, kehtivad kõik Ethereumiga seotud probleemid võrdselt ka luba saanud plokiahelatele, mis tuginevad endiselt muutumatutele nutikatele lepingutele - kuigi antud juhul tagab muutumatuse kindlaksmääratud isikute rühm, mitte anonüümsed kaevurid. Kui soovite väita, et privaatsed plokiahelad võimaldavad lollakaid nutilepinguid kergemini tagasi kerida, asendada või ignoreerida, siis ütlete tegelikult seda, et nutikad lepingud pole nendes plokiahelates üldse mingit eesmärki. Lihtsamalt öeldes, kui midagi pole mõeldud muutumatuks, ei tohiks seda plokiahelas hoida. Selle asemel pidage kinni vanamoodsatest juriidilistest dokumentidest ja tsentraliseeritud rakendusloogikast, kasutades ketti järgmistel eesmärkidel: (a) andmed millest see loogika sõltub, ja (b) mis esindab selle rakendamise lõplikku konsensuslikku tulemust. (Sellele kujundusmustrile on antud nimi Lihtsad lepingud teiste poolt.)

Sellegipoolest on avalikus Ethereumi võrgus olevad riskid kahtlemata hullemad, kuna halvasti kirjutatud nutikad lepingud võivad kiiresti ja pöördumatult saata suuri summasid reaalse väärtuse (krüptovaluuta kujul) kasutajatele, kelle identiteet pole teada. Tõepoolest, kas kurjal geeniusel on mõni parem viis tapmine kui: a) aruka lepingu sõlmimine, mis Näeb välja õige ja õiglane, (b) lasta tal turvaliselt ja järjepidevalt töötada mitu aastat, (c) oodata, kuni see kogub investoritelt suurt rahasummat, ja (d) käivitada varjatud haavatavus nende fondide välja sifoonimiseks. Kuigi ma ei väida, et DAO ebaõnnestumine oli tahtlik, innustab see kindlasti ka teisi sarnaseid vigu tegema.

Kui peaksin kokku võtma Ethereumi kujunduse aluseks olevad tegurid, võiksin kasutada fraasi „kogenematu geenius“. Geenius, kuna ma usun, et see on tõeliselt geniaalne leiutis, mis lisab krüptorahasüsteemidele kaks peamist uuendust, mis olid varem olemas: (a) Ethereumi virtuaalne masin, mis täidab arukaid lepinguid, ja selle meetod arvutuste maksumuse määramiseks, ja (b) kasutamine kohta Patricia puud plokiahela oleku mis tahes aspekti kompaktsete tõestuste võimaldamiseks. Ja ometi ka kogenematu, sest mõned Ethereumi disainivalikud on nii ilmselgelt kohutavad, näiteks vaikse, kuid vägivaldse kõnepinu limiit või makse saaja võime rekursiivselt käivitada selle maksnud kood.

Ükski neist ei oleks probleem, kui Ethereumit käsitletaks kui eksperimenti, mis oleks uurimist väärt, kuid mille kriitilised probleemid jäävad lahendamata. Võimalik, et bitcoini ekvivalent paaril esimesel aastal, kui kogu turukapitalisatsioon ei ületanud paari miljoni dollarit. Kahjuks pole Ethereumile spekulatsioonide ja ülespaisutatud ootuste tulemusena antud samasugust võimalust oma vanasõnade leidmiseks. Selle asemel on alla ühe aasta vanune turuväärtus miljard dollarit. Ethereum on nagu väikelaps, keda sunnitakse õhtusööki valmistama, või föderaalreservi juhtiv majanduse esmakursuslane. Usun, et on aeg tunnistada, et üksikute nutikate lepingute ebaküpsuse probleem kehtib ka kogu Ethereumi kohta.

Ethereumi edasine tee

Kuigi ma pole veel näinud nutikate lepingute tugevaid kasutusjuhtumeid era- või luba saanud plokiahelates, arvan ma, et neil on tõenäoliselt seotud seotud krüptorahadega avalikes kettides. See tähendab, et kui nõustute tsensuurivabade finantssüsteemide põhieeldusega, mis aitavad rahaliselt tõrjutud ja lunavara autorid võrdselt. Kui see arutelu kõrvale jätta, siis kindlasti on tehniline väärivad suvalist loogikat toetavat krüptovaluutat, sellist tüüpi, mida ei saa rakendada esimese põlvkonna plokiahelatel nagu bitcoin. Vähemalt praegu on Ethereum esimene ja ainus veenev katse sellist süsteemi üles ehitada, mille taga on tohutu raha ja hoog.

Sellegipoolest näib Ethereum arendaja ökosüsteemina põhimõtteliselt purunenud. Kuigi DAO on selle kõige kulukam ja silmapaistvam ebaõnnestumine, on palju muid lepinguid kannatavad sarnaste probleemide all. Kuidas saab Ethereum oma teo puhastada?

  • Saatke selge sõnum, et vähemalt järgmise kahe aasta jooksul ei tohiks keegi arukale lepingule raha saata, välja arvatud juhul, kui nad kaotavad meeleldi iseõppimise nimel.
  • Lahendage Ethereumi virtuaalse masinaga („EVM”) mõned silmatorkavad probleemid, nimelt: (a) kõnepinu limiidi eemaldamine, (b) eetri saatmise viisi pakkumine ilma koodi käivitamata ja (c) lepingute märkimine „ mittetagastuvad “, mis tähendab, et nende funktsioone ei saa kutsuda, kui nad on juba millegi keskel.
  • Töötage välja nutikate lepingute jaoks uus programmeerimiskeel, mis kasutab arvutatava teabe väljendamiseks rangemat meetodit, mida saab kasutada formaalsed tõendid õigsuse kohta. Sellesse valdkonda on juba aastakümneid uurimistööd investeeritud, seega on palju olemasolevat tööd võimendavaks. (See ei nõua muudatusi EVM-is endas, kuna valitud keele võiks ikkagi kompileerida tavaliseks baitkoodiks.)
  • Luua ametlik turvaliste arukate lepingute ja funktsioonide komplekt, mis on surmanuhtluse korras läbi vaadatud ja osutunud usaldusväärseteks paljudes erinevates olukordades. See sarnaneb standardsed raamatukogud mis on saadaval paljude küpsete programmeerimiskeelte jaoks. (Kuigi siinkohal on ahvatlev küsida: miks mitte lihtsalt kodeerida nende teekide funktsionaalsus EVM-i ja nautida selle tulemusel palju paremat jõudlust? Vastus: Kuna Ethereum oli spetsiaalselt ette nähtud kõvakodeeritud plokiahelatest eemaldumiseks funktsioonikomplektid. Kuid ikkagi paneb see teid imestama.)

Praegune võimalus käsitsi sekkumine vastuseks konkreetsete arukate lepingute ebaõnnestumisele ei ole laiemas perspektiivis otstarbekas, kui Ethereum soovib säilitada oma identiteeti usaldusväärse ja detsentraliseeritud andmetöötlusplatvormina. Mõni on tõepoolest usutav, et see ainus otsustepõhine valitsemistava juba on hävitas Ethereumi maine. Ja me peaksime märkima, et DAO-d tingimused öelge selgesõnaliselt, et miski "ei tohi muuta ega lisada täiendavaid kohustusi ega garantiisid peale DAO koodeksis sätestatute". Teisisõnu, kes tühjendas DAO, tegutses vastavalt oma avaldatud tingimustele ja on seetõttu eeldatavasti seaduse paremal poolel.

Samuti peame aktsepteerima võimalust, et pärast veel mitu aastat head tööd võib Ethereum osutuda arendajatele ohutuks töötamiseks siiski liiga keeruliseks. Sel juhul jääb see anonüümsete petturite ja nende rumalate märkide vahelise pirtsutamisteenusena hääbuma. Kuid see ei tähenda, et see oleks aja raiskamine - vähemalt on Ethereum põnev eksperiment, millest plokiahela kogukond saab palju õppida.

Vahepeal saan privaatsete plokiahelate kasutajate jaoks korrata ainult seda, mida olen varem öelnud:

Kui teie rakendus ei vaja nutikaid lepinguid, siis kasutage lihtsamat plokiahela arhitektuuri.

Kui see nõuanne oli varem tulemuslikkuse osas õigustatud, siis nüüd kinnitab seda näiline raskus nutikate lepingute õigeks saamisel. Ja kui te pole kindel, kas teie kasutusjuhtum nõuab arukaid lepinguid, siis võite seda teha saatke meile mõned üksikasjadja anname teile sellest hea meelega teada.

Palun postitage kõik kommentaarid LinkedIn.

Ajatempel:

Veel alates Mitmeharuline