Mi az a smart contract (okosszerződés)?

Az okosszerződés (vagy szintén használt angol nevén smart contract) egy, a blokkláncra publikált, önálló működésre nem képes programkód. Az okosszerződésben leírt utasításokat egy virtuális gép (Ethereum esetében az Ethereum Virtual Machine) futtatja, a futtatáshoz pedig interakcióra van szükség egy tárca vagy más okosszerződés részéről.

Ez az interakció kétféle lehet:

  • tranzakció - a blokklánc állapotát megváltoztató művelet
  • hívás - a blokklánc vagy a blokkláncon tárolt adat aktuális állapotát lekérdező, de minden mellékhatás nélküli művelet

Az "önálló működésre nem képes" alatt azt értjük, hogy a kód blokkláncra történő publikálásának ténye önmagában nem elég ahhoz, hogy lefusson a kód. Minden esetben szükség van egy hívó vagy tranzaktáló félre, aki végső soron a benne definiált műveletek virtuális gép általi futtatását kezdeményezi. Magán a programkódon belül lehetőség van lekérdezni ezt a felet, és akár ez alapján szétválasztani a működést.

Ezalól egyetlen kivétel van, az okosszerződés konstruktora, ami egy speciális függvény, direkt arra kitalálva, hogy tartalma a smart contract blokkláncra kerülésekor lefusson.

Az okosszerződések blokkláncba kerülésük (bányászás vagy validálás) után nyilvánosak és visszavonhatatlanok.

Mire használható egy okosszerződés?

A rövid válasz: mindenre, de tipikusan komplex blokklánc-műveletek automatizálására. Példák alkalmazási területekre:

  • DeFi, azaz decentralized finance alkalmazások, például a Uniswap váltó belső működése okosszerződésekkel van megoldva
  • Új kriptovaluta tokenek létrehozása az ERC20 szabvány szerint
  • NFT-k létrehozása, azaz "mintelése"
  • Cross-chain bridge-ek
  • Arbitrázs műveletek atomizálása (azaz annak biztosítása, hogy a tranzaktáló fél által kezdeményezett több egyidejű token váltási kísérlet kizárólag együtt futhasson le)
  • Blockchain játékok
  • Egyéb decentralizált alkalmazások, pl.: sportfogadás és kaszinó, szállítmányozási láncok monitorozása privát láncokon, stb.

Ezek a leggyakrabban használt applikációk, emellett természetesen még számos felhasználási terület létezik.

Hogyan néz ki egy egyszerű smart contract?

Elöljáróban: Egy smart contract nem egyszerű. Általában Solidity vagy Rust nyelven íródik, sokszáz sort tartalmaz, és teli van tűzdelve emberi szemmel nehezen értelmezhető hexadecimális címekkel. Éppen ezért a lehető legegyszerűbb okosszerződést választottam példának:

pragma solidity ^0.4.8;

contract SimpleStorage {
    uint x;

    function set(uint newValue) {
        x = newValue;
    }
    
    function get() returns (uint) {
        return x;
    }
}

Ez a program egy Solidity nyelven írt okosszerződés, amellyel a vele interaktáló fél nem túl izgalmas módon képes egy nemnegatív egész számot tárolni a blokkláncon (set függvény), és képes lekérdezni azt (get függvény).

Tranzakciós költségek a blokkláncon

A blokkláncon történt bármilyen változás (azaz tranzakció) drága számítási művelet. Bányászok és/vagy validátorok hardvererőforrásokat allokálnak annak érdekében, hogy a kód lefuthasson. Éppen ezért a tranzakcióknak anyagi költsége van. Ezt gas cost-nak hívják, és Ethereum blokkláncon ETH-ban (vagy kisebb egységeiben, Gwei, wei) mérik.

A tranzaktáló fél tehát saját tárcájában rendelkeznie kell bizonyos mennyiségű ETH-val hogy le tudja futtatni a tranzakciót (a fenti példában a set függvény hívása tranzakciónak minősül, hiszen a blokklánc állapotát megváltoztatja, odaír egy számot). Minden egyes elemi műveletnek megvan a költsége, melyet az EVM dokumentációjában megismerhetünk. Ezek az elemi műveletek az úgynevezett bájtkód műveletei, ami egy előfordított (leginkább Assembly-re hasonlító) gépi kód. Szintén a példánál maradva, az x = newValue; sor szintén be fog fordulni EVM gépi kódra, az írási művelet OPCODE-ját az alábbi táblázatból kikeresve pedig azonosíthatjuk a művelet konkrét költségét. Az okosszerződésben lévő valamennyi művelet költsége természetesen összeadódik, és a végső gas cost fizetése a tranzaktáló félre terhelődik.

Amennyiben a tranzaktáló fél nem rendelkezik elég Etherrel (ETH) a tranzakció lebonyolításához, az nem kerül be a blokkláncba, érvénytelen lesz. Előfordulhat azonban, hogy ekkor is kell valamennyi költséget fizetni, tipikusan ha a program félig lefutott és már igénybe vett számítási kapacitást a hálózattól. Emellett fontos megjegyezni hogy a tranzakció tényleg köznapi értelemben vett tranzakció, azaz "fél lefutás" nincs, ilyen esetben minden elvégzett művelet visszavonódik. Nem kerül bele a blokkláncba.

Leendő blockchain fejlesztőknek

Konkrétumokat az Ethereum számítási költségeiről és az EVM működéséről itt találsz:

EVM Codes
An Ethereum Virtual Machine Opcodes Interactive Reference

A legnépszerűbb smart contract programnyelv tanulását itt tudod elkezdeni:

Solidity — Solidity 0.8.22 documentation

A gyakorlat részéhez pedig az alábbi tutorialt javaslom, ami játékos formában visz végig egyszerűbb contractok (token, NFT) megírásáig:

#1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies
CryptoZombies is The Most Popular, Interactive Solidity Tutorial That Will Help You Learn Blockchain Programming by Building Your Own Fun Game with Zombies — Master Blockchain Development with Web3, Infura, Metamask & Ethereum Smart Contracts and Become a Blockchain Developer in Record Time!.
💡
Ha tetszett ez az írás, iratkozz fel a Webhárom tartalmaira :)
A kriptó világ legfontosabb friss híreit válogatjuk, heti 1 levélben. A feliratkozás ingyenes.
🎁
Regisztrálj a ByBit kriptótőzsdén és zsebeld be a $10-$5000 értékű bónuszokat. Promóciós link:
https://partner.bybit.com/b/webharom
Ajánljuk még
Erre számíthat a kriptóipar Trump újbóli győzelmével

Erre számíthat a kriptóipar Trump újbóli győzelmével

Ma reggelre már mindenkihez el kellett jutni az információnak, Donald Trump republikánus elnökjelölt megnyerte a 2024-es választást. Az USA lakossága Trump elnöksége mellett republikánus többségű szenátust, és (itt még az eredmények nem véglegesek), várhatóan republikánus többségű képviselőházat is megszavazott. Trump álláspontja a kriptovalutákról egyértelmű. Lazább szabályozást, szabadabb piacokat szeretne, és