Pradžia / Programavimas / Ethereum ir išmaniosios sutartys

Ethereum ir išmaniosios sutartys

Kai pirmą kartą išgirsti frazę „išmanioji sutartis”, galvoje greičiausiai iškyla teisininkas su portfeliu ir parašais popieriuje. Tikrovė šiek tiek kitokia – čia kalbame apie kodą, kuris vykdo save pats, be advokatų, notarų ir be galimybės „susitarti kitaip”. Ethereum tinklas šitą idėją pavertė realiu, veikiančiu produktu, ir per pastarąjį dešimtmetį iš esmės pakeitė tai, kaip suprantame decentralizuotas sistemas.

Kas per reikalas ta Ethereum, jei ne tik kripto

Bitcoin buvo sukurtas kaip skaitmeninių pinigų alternatyva – paprasta, aiški, bet gana ribota sistema. Vitalik Buterin ir jo komanda 2015 metais paleido Ethereum su visai kita ambicija: sukurti pasaulinį, decentralizuotą kompiuterį, ant kurio galėtų veikti bet kokia programa, ne tik pinigų perlaidos.

Techniškai Ethereum tinklas veikia per virtualią mašiną, vadinamą EVM (Ethereum Virtual Machine). Kiekvienas tinklo dalyvis – validatorius – vykdo tą pačią programą lygiagrečiai su tūkstančiais kitų mašinų visame pasaulyje. Rezultatas turi sutapti visiems, kitaip transakcija tiesiog nepraeina. Tai sukuria sistemą, kurioje nė vienas dalyvis negali vienašališkai pakeisti duomenų ar sukčiauti – bent teoriškai.

Svarbu suprasti, kad ETH (eteris) čia nėra tik spekuliacinis aktyvas, kaip dažnai pateikiama žiniasklaidoje. Tai kuras, reikalingas kiekvienai operacijai tinkle – nuo paprasto pervedimo iki sudėtingos sutarties vykdymo. Ši kuro sąnaudų sistema vadinama „gas” ir apie ją verta pakalbėti atskirai, nes ji tiesiogiai lemia, kiek kainuoja naudotis išmaniosiomis sutartimis.

Išmanioji sutartis – ne magija, o tiesiog kodas

Terminą „smart contract” pirmasis pavartojo Nick Szabo dar 1990-aisiais, gerokai prieš blokų grandinių atsiradimą. Jo idėja buvo paprasta: sukurti sutartis, kurios vykdytųsi automatiškai, kai įvykdomos iš anksto nustatytos sąlygos, panašiai kaip prekybos automatas – įmeti monetą, gauni gėrimą, be tarpininko.

Ethereum kontekste išmanioji sutartis yra tiesiog programa, parašyta dažniausiai Solidity kalba, kuri yra įdiegta (deployed) blokų grandinėje ir turi savo unikalų adresą. Ji gali laikyti lėšas, priimti įvestis, atlikti skaičiavimus ir grąžinti rezultatus – visa tai vieša, patikrinama ir, svarbiausia, nekintama po įdiegimo (jei nebuvo suprogramuota kitaip).

Pavyzdys, kurį lengviausia suprasti: aukcionas. Tradicinis aukcionas reikalauja tarpininko, kuris priimtų statymus, laikytų pinigus ir sąžiningai paskelbtų nugalėtoją. Išmanioji sutartis atlieka visa tai automatiškai – priima ETH kaip statymus, saugo juos kontrakto adrese, po termino automatiškai grąžina pinigus pralaimėjusiems ir perduoda prizą laimėtojui. Nė vienas žmogus neprisilietė prie proceso.

Kodėl tai svarbu praktiškai

Skaitytojui, kuris nesigilino į kripto pasaulį, gali kilti klausimas – ir kam man to reikia? Atsakymas slypi patikimume ir kaštų mažinime. Tarpininkų atsisakymas reiškia mažesnius mokesčius, greitesnį atsiskaitymą ir, teoriškai, mažesnę korupcijos ar sukčiavimo tikimybę, nes kodas negali „pasukti akių” ar priimti kyšio.

Solidity ir kaip realiai atrodo kontrakto kodas

Solidity yra objektinio programavimo kalba, panaši į JavaScript ar C++, specialiai sukurta EVM aplinkai. Paprasčiausias kontraktas gali atrodyti taip:

pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 storedData;

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

Šis pavyzdys, žinoma, primityvus – jis tik saugo skaičių ir leidžia jį nuskaityti ar pakeisti. Realiame gyvenime kontraktai apima sudėtingą logiką: decentralizuotas mainų platformas (DEX), skolinimo protokolus, NFT rinkas, DAO valdymo mechanizmus. Bet principas tas pats – kodas, kuris veikia deterministiškai ir viešai.

Vienas dažniausiai daromų pradedančiųjų klaidų yra požiūris, kad kartą įdiegtas kontraktas galima „sutvarkyti vėliau, kai pastebėsime bugą”. Realybėje, jei kontraktas neturi specialiai suprogramuotos atnaujinimo (upgrade) logikos per proxy šablonus, jis yra nekintamas amžinai. Tai reiškia, kad kiekviena klaida kode gali kainuoti milijonus – ir tokių pavyzdžių istorija turi apsčiai, pradedant garsiuoju „The DAO” įsilaužimu 2016 metais, kai per pažeidžiamumą buvo pavogta apie 3,6 milijono ETH.

Saugumas – ta sritis, kur negalima taupyti

Kai kalba pasisuka apie išmaniąsias sutartis, saugumo klausimas iškyla neišvengiamai. Ir ne be pagrindo. Kadangi kontraktai dažnai valdo tikrus pinigus – kartais dešimtis milijonų dolerių – bet koks pažeidžiamumas tampa potencialiu taikiniu.

Populiariausios klaidos, su kuriomis susiduria kūrėjai:

  • Reentrancy atakos – kai išorinis kontraktas gali pakartotinai iškviesti funkciją prieš tai, kai baigsis pirminis vykdymas, leisdamas ištraukti daugiau lėšų nei numatyta.
  • Integer overflow/underflow – seniau didelė problema, dabar iš dalies išsprendžiama naujesnėse Solidity versijose, kurios automatiškai tikrina tokias ribas.
  • Front-running – kai validatoriai arba boti pastebi pelningą transakciją tinklo eilėje ir „aplenkia” ją, pasinaudodami informacija prieš pačią transakciją.
  • Netinkamas prieigos valdymas – kai funkcijos, kurios turėtų būti prieinamos tik savininkui, paliekamos atviros visiems.

Praktinis patarimas kiekvienam, kuris planuoja diegti kontraktą su realiomis lėšomis: niekada nepasitikėkite savo pačių testavimu. Naudokite bibliotekas kaip OpenZeppelin, kurios yra plačiai auditorių patikrintos, ir investuokite į profesionalų saugumo auditą prieš paleidimą į pagrindinį tinklą (mainnet). Kaina, kurią sumokėsite auditui, dažniausiai yra šimtus kartų mažesnė nei potencialūs nuostoliai dėl klaidos.

Gas mokesčiai – kodėl kartais brangu ir kaip su tuo tvarkytis

Vienas didžiausių Ethereum trūkumų, su kuriuo susiduria tiek kūrėjai, tiek vartotojai – gas mokesčiai. Kiekviena operacija tinkle kainuoja, ir kaina svyruoja pagal tinklo apkrovą. Populiariais periodais, kai visi bandi vykdyti transakcijas vienu metu (pavyzdžiui, kokio nors populiaraus NFT rinkinio mint metu), mokesčiai gali pašokti į dešimtis dolerių už paprastą operaciją.

Kodėl taip yra? Ethereum EVM ribotas skaičiavimo pralaidumas per bloką reiškia, kad kai paklausa didelė, validatoriai renkasi transakcijas, kurios moka daugiausiai – panašiai kaip aukcionas. Tai sukuria situaciją, kur maži vartotojai kartais tiesiog negali sau leisti naudotis tinklu piko metu.

Sprendimų šiam iššūkiui yra keletas, ir čia verta paminėti antro lygio (Layer 2) tinklus – Arbitrum, Optimism, zkSync ir panašius. Jie vykdo transakcijas atskirai nuo pagrindinio tinklo, tačiau vėliau perduoda sutrumpintą informaciją (proof) į Ethereum pagrindinį lygį, todėl išlaiko saugumą, tuo pačiu drastiškai sumažindami kaštus – dažnai iki centų dalių vietoje dolerių.

Praktinis patarimas: jei kūriate produktą, kuris turi būti prieinamas plačiai auditorijai, verta iš pat pradžių planuoti diegimą Layer 2 sprendime, o ne pagrindiniame tinkle. Vartotojų patirtis skiriasi radikaliai.

Nuo DeFi iki DAO – ką realiai galima pastatyti

Teorija gerai, bet kur realus pritaikymas? DeFi (decentralizuoti finansai) tapo pirmuoju masiniu Ethereum kontraktų pritaikymu – platformos kaip Uniswap, Aave ar Compound leidžia žmonėms skolinti, skolintis ir keisti aktyvus be tradicinio banko. Visa logika – palūkanų normos, likvidumo baseinai, likvidacijos mechanizmai – veikia per kontraktus, kuriuos gali patikrinti bet kas.

NFT sritis, nepaisant hype bangos nuosmukio, taip pat pademonstravo, kaip išmaniosios sutartys gali valdyti nuosavybės teises ir autentiškumą skaitmeniniame pasaulyje. ERC-721 ir ERC-1155 standartai tapo pramonės pagrindu, leidžiančiu skirtingiems projektams veikti pagal bendras taisykles ir palaikyti tarpusavio suderinamumą (interoperability).

DAO (Decentralized Autonomous Organizations) – dar viena kryptis, kur bendruomenės valdo lėšas ir priima sprendimus balsuodamos su tokenų pagalba, o rezultatai automatiškai įgyvendinami per kontraktus, be tradicinės valdybos ar direktorių tarybos. Nors idėja skamba utopiškai, praktikoje DAO struktūros susiduria su savo problemomis – žemas dalyvavimas balsuojant, plutokratija (kas turi daugiau tokenų, turi daugiau galios) ir teisinis neapibrėžtumas skirtingose jurisdikcijose.

Ką iš tikrųjų reikia žinoti prieš nardinant giliau

Jei skaitote šį straipsnį norėdami suprasti, ar verta investuoti laiko į Ethereum ir išmaniąsias sutartis – tiek kaip vartotojui, tiek kaip kūrėjui – čia keletas konkrečių minčių, be filosofijos.

Pirma, nesitikėkite, kad blokų grandinės technologija automatiškai sprendžia visas problemas. Kodas be klaidų neegzistuoja, o decentralizacija nereiškia neklystamumo. Kiekvienas kontraktas, kurio kode yra bugas, tampa pastoviu, viešu ir neišvengiamu rizikos šaltiniu.

Antra, jei planuojate kurti savo produktą – pradėkite nuo testinių tinklų (testnet, pvz., Sepolia), kur galite eksperimentuoti be realios finansinės rizikos. Naudokite Hardhat arba Foundry kaip kūrimo aplinką – abu turi stiprias testavimo galimybes, kurios leidžia simuliuoti realias sąlygas prieš diegimą.

Trečia, sekite gas kainas prieš vykdydami transakcijas – tam yra puikūs įrankiai kaip Etherscan Gas Tracker. Kartais vos kelių valandų palaukimas gali sutaupyti reikšmingą sumą.

Ir galiausiai – nepasitikėkite kontraktu vien todėl, kad jis „decentralizuotas” ar „auditas atliktas”. Patikrinkite, kas atliko auditą, kada, ir ar rekomendacijos buvo įgyvendintos. Kripto pasaulyje istorija pilna „auditavotų” projektų, kurie vėliau buvo nulaupyti per pažeidžiamumus, kuriuos auditoriai tiesiog nepastebėjo arba kurie atsirado po audito atlikto pakeitimo.

Vietoj išvadų: kodėl šitas eksperimentas vis dar tęsiasi

Ethereum ir išmaniosios sutartys nėra baigtinis produktas – tai gyva, nuolat tobulinama sistema, kuri kas kelis metus išgyvena reikšmingus pokyčius. Perėjimas nuo Proof-of-Work prie Proof-of-Stake (vadinamasis „The Merge” 2022 metais) sumažino energijos sąnaudas per 99 procentus, o ateities atnaujinimai, tokie kaip visiškas šardinimo (sharding) įgyvendinimas, žada dar labiau padidinti tinklo pralaidumą.

Realybė tokia, kad technologija vis dar vaikšto per bandymų ir klaidų kelią. Vieni projektai žlunga dėl blogo kodo, kiti – dėl per didelio pasitikėjimo hype’u be realios naudos. Bet fundamentalus principas – galimybė sukurti taisykles, kurios vykdomos automatiškai, viešai ir be tarpininkų – jau įrodė savo potencialą finansų, meno ir organizacijų valdymo srityse.

Jei ruošiatės žengti šiuo keliu – ar kaip kūrėjas, ar tiesiog kaip vartotojas, norintis suprasti, kur deda savo pinigus – laikykitės sveiko skepticizmo. Skaitykite kodą, jei mokate, arba bent domėkitės, kas jį tikrino, jei ne. Ethereum ekosistema atlygina tiems, kurie supranta, ką daro, ir gana negailestingai baudžia tuos, kurie tiesiog seka minia. Tokia jau šios technologijos prigimtis – laisvė ir atsakomybė čia eina koja kojon, be jokių saugumo tinklų iš viršaus.