Bevezetés az okosszerződésekbe
Utolsó módosítás: @Satglow(opens in a new tab), 2024. április 22.
Mi az az okosszerződés?
Az „okosszerződés” egy program, mely az Ethereum blokkláncon fut. Kód (a függvényei) és adat (az állapota/státusza) gyűjteménye, mely egy bizonyos címen létezik az Ethereum blokkláncon.
Az okosszerződés egyfajta Ethereum-számla. Ennélfogva egyenlegük van és tranzakciók irányulhatnak feléjük. Azonban nem egy felhasználó kezeli őket, ehelyett telepítve vannak a hálózatra, és a programjuk szerint futnak. A felhasználói számlák interakcióba léphetnek az okosszerződésekkel tranzakciók indításával, melyek egy függvényt hajtanak végre az okosszerződésen. Az okosszerződések szabályokat fektethetnek le, mint egy rendes szerződés, és automatikusan betartatják azokat a kód által. Az okosszerződéseket nem lehet törölni, és a velük való interakció visszafordíthatatlan.
Előfeltételek
Ha Ön most ismerkedik a témával vagy egy kevésbé technikai bevezetést keres, akkor tekintse meg a bevezetés az okosszerződésekbe című cikket.
Olvassa el a számlákról, tranzakciókról és az Ethereum virtuális gépről szóló cikkeket mielőtt belevetné magát az okosszerződések világába.
Egy digitális ételautomata
Talán a legjobb metafora az okosszerződésre egy ételautomata, ahogy azt Nick Szabo(opens in a new tab) bemutatta. A megfelelő bemenetekkel egy bizonyos kimenet jön létre.
Ahhoz, hogy megkapja az ételt az automatából:
1pénz + nasi választás = kiadott nasi
Ez a logika be van programozva az ételautomatába.
Az okosszerződésbe logika van programozva, akár egy ételautomatába. Egy egyszerű példa, hogyan nézne ki ez az ételautomata, ha egy okosszerződés lenne Solidity nyelven:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. beállítja a telepítő címet a szerződés tulajdonosaként11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Összes megjelenítéseMásolás
Mint ahogy az ételautomaták szükségtelenné teszik az árusító alkalmazottat, az okosszerződések is számos iparágban leválthatják a közvetítőket.
Nem engedélyköteles
Bárki írhat okosszerződést és telepítheti azt a hálózatra. A szerződés telepítéséhez elég csak megtanulnia egy okosszerződésnyelven programozni, illetve a szükséges ETH-val kell rendelkeznie. Az okosszerződés telepítése lényegében egy tranzakció, így ugyanúgy ki kell fizetnie a gázt, mint egy egyszerű ETH-átutalás esetében. Ugyanakkor a szerződéstelepítés gázköltsége magasabb.
Az Ethereum fejlesztőbarát okosszerződésnyelvekkel rendelkezik:
- Solidity
- Vyper
Azonban be kell őket fordítani telepítés előtt, hogy az Ethereum virtuális gép értelmezni és tárolni tudja majd a szerződést. Többet a befordításról
Összeilleszthetőség
Az okosszerződések nyilvánosak az Ethereumon, így nyílt API-ként is tekinthetünk rájuk. Ez azt jelenti, hogy meghívhat más okosszerződéseket az Ön szerződésében, hogy nagymértékben kiterjeszthesse a lehetőségeket. A szerződések még más szerződéseket is tudnak telepíteni.
Tudjon meg többet az okosszerződések összeilleszthetőségről.
Korlátok
Az okosszerződések önmagukban nem képesek információt lekérni a „külvilági” eseményekről, mivel nem tudnak adatot szerezni a láncon kívüli forrásokból. Tehát nem tudnak válaszolni a világ történéseire. Ez a tervezett logikájuk. A külső információkra való támaszkodás veszélyeztetheti a biztonság és a decentralizáció szempontjából fontos konszenzust.
Ugyanakkor fontos a blokklánchoz tartozó alkalmazásoknak, hogy láncon kívüli adatokat használhassanak. A megoldás az orákulum, amely egy olyan eszköz, ami láncon kívüli adatokat kap fel és tesz elérhetővé az okosszerződések számára.
Az okosszerződések másik korlátja a maximális méret. Legfeljebb 24 KB méretű lehet egy okosszerződés, különben nem lesz elegendő gáz a működéséhez. Ezt meg lehet kerülni a gyémántminta(opens in a new tab) használatával.
Több aláírásos szerződések
A több aláírásos szerződések olyan okosszerződésszámlák, amelyeknek több érvényes aláírás kell, hogy egy tranzakciót végrehajtsanak. Ez nagyon hasznos az egyetlen meghibásodási pont elkerülésére az olyan szerződéseknél, amelyek jelentős mennyiségű ethert vagy más tokent tartanak. A több aláírásos szerződések megosztják a szerződés-végrehajtási és kulcskezelési felelősséget több fél között, és így nem kell attól tartani, hogy az egyetlen privát kulcs elveszik, és így a pénzeszközök elérhetetlenné válnak. Ebből az okból kifolyólag a több aláírásos szerződéseket egyszerű DAO irányításra is lehet használni. A több aláírásos szerződés N aláírást igényel M lehetséges elfogadható aláírásból (ahol N ≤ M, és M > 1) ahhoz, hogy végrehajtsa a tranzakciót. Gyakran használják a következő kombinációkat: N = 3, M = 5
és N = 4, M = 7
. A 4/7 több aláírásos szerződés négyet igényel a hét lehetséges érvényes aláírásból. Tehát a pénzeszközökhöz akkor is hozzáférnek, ha három aláírás elveszik. Ebben az esetben a kulcsokbirtokosok többségének egyet kell értenie és alá kell írnia ahhoz, hogy a szerződés végrehajtható legyen.
Okosszerződés-erőforrások
OpenZeppelin Contracts – Könyvtár a biztonságos okosszerződésfejlesztéshez.
- openzeppelin.com/contracts/(opens in a new tab)
- GitHub(opens in a new tab)
- Közösségi Fórum(opens in a new tab)