Ugrás a fő tartalomra
Change page

Okosszerződés könyvtárak

Utolsó módosítás: @robertdosa(opens in a new tab), 2024. január 18.

Nem kell minden okosszerződést a nulláról megírni. Számos nyílt forráskódú okosszerződés könyvtár áll rendelkezésedre, amelyek újrafelhasználható építőelemeket kínálnak a projektedhez, így megkímélnek attól, hogy újra fel kelljen találni a kereket.

Előfeltételek

Mielőtt belevetnéd magad az okosszerződés könyvtárakba, érdemes tisztában lenned az okosszerződések felépítésével. Irány az okosszerződés anatómia cikk, ha még nem olvastad el.

Mi van egy könyvtárban

Az okosszerződés könyvtárakban általában kétféle építőelem található: újrafelhasználható eljárások, amelyeket hozzáadhatsz a szerződéseidhez, valamint különféle szabványok megvalósítása.

Eljárások

Okosszerződés írás közben jó esély van rá, hogy újra és újra hasonló minták megírásán találod magad, mint például hozzárendelsz egy admin címet védett operációk véghezviteléhez, vagy egy vészeseti szünet gombot adsz hozzá egy váratlan esemény miatt.

Az okosszerződéses könyvtárak általában ezeknek a viselkedéseknek az újrafelhasználható megvalósítását biztosítják könyvtárakon(opens in a new tab) vagy öröklésen keresztül(opens in a new tab) Solidity-ben.

Példaként az alábbiakban bemutatjuk az Ownable szerződés(opens in a new tab) egyszerűsített verzióját az OpenZeppelin Szerződés könyvtárból(opens in a new tab), mely egy címet jelöl ki tulajdonosként a szerződésben, és egy módosítóval lekorlátozza az adott metódus hozzáférését az adott tulajdonosra.

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}
Összes megjelenítése
Másolás

Egy ehhez hasonló építőelem használatához a szerződésedben, először be kell importálnod, majd kiterjesztened belőle a szerződéseidet. Ez lehetővé teszi az Ownable szerződés által biztosított módosító használatát, hogy bebiztosítsd a saját függvényeidet.

1import ".../Ownable.sol"; // Az importált könyvtár útvonala
2
3contract MyContract is Ownable {
4 // Az alábbi függvényt csak a tulajdonos hívhatja meg
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
Másolás

Egy másik népszerű példa a SafeMath(opens in a new tab) vagy a DsMath(opens in a new tab). Ezek olyan könyvtárak (szemben az alapszerződésekkel), amelyek számtani függvényeket biztosítanak túlcsordulás-ellenőrzésekkel, amelyeket a nyelv nem biztosít. Jó gyakorlat ezeknek a könyvtáraknak az alkalmazása a natív számtani műveletek helyett, hogy megvédd a szerződésed a túlcsordulástól, amelynek katasztrofális következményei lehetnek!

Szabványok

Hogy elősegítsük az összeilleszthetőséget és az interoperabilitást, az Ethereum közösség számos szabványt vezetett be ERC-k formájában. Többet olvashatsz róluk a szabványok részben.

Amikor egy ERC-t szeretnél betenni a szerződésedbe, célszerű a standard megvalósításokat keresni, ahelyett, hogy megpróbálnád a sajátodat bevezetni. Számos okosszerződés könyvtár tartalmazza a legnépszerűbb ERC-k megvalósításait. Például a mindenütt jelen levő ERC20 felcserélhető tokenszabvány megtalálható a HQ20(opens in a new tab), DappSys(opens in a new tab) és OpenZeppelin(opens in a new tab) platformon. Ezenkívül, egyes ERC-k kanonikus megvalósításokat is biztosítanak az ERC részeként.

Érdemes megemlíteni, hogy egyes ERC-k nem önállóak, hanem kiegészítenek más ERC-ket. Például az ERC2612(opens in a new tab) kiterjeszti az ERC20-as szabványt a használhatóság javítása érdekében.

Hogyan lehet könyvtárt hozzáadni

Mindig nézd át a könyvtár dokumentációját, amit használsz a projektedben specifikus instrukciókért arról, hogyan kell használni. Számos Solidity szerződés könyvtár az npm használatával van csomagolva, így elég csak npm install módon telepíteni őket. A legtöbb szerződés fordító eszköz végig nézi a node_modules mappát okosszerződés könyvtárak után kutatva, így megteheted a következőt:

1// Ez betölti az @openzeppelin/contracts könyvtárat a node_modules könyvtárból
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
Másolás

Az általad használt módszertől függetlenül, ha könyvtárat importálsz be, mindig ellenőrizd le a nyelv verziót. Például nem használhatsz könyvtárat a Solidity 0.6-hoz, ha a szerződéseidet a Solidity 0.5-ben írod.

Mikor használjuk

Egy okosszerződés könyvtár használatának számos előnye van. Először is, időt takarít meg azzal, hogy használatra kész építőelemeket biztosít, amelyeket beépíthetsz a rendszeredbe, ahelyett, hogy saját magadnak kellene leprogramozni őket.

A biztonság is egy fontos pozitívum. A nyílt forráskódú okosszerződés könyvtárakat gyakran alaposan megvizsgálják. Tekintettel arra, hogy sok projekt függ tőlük, a közösségnek erős ösztönzője van arra, hogy folyamatosan felülvizsgálja őket. Sokkal gyakrabban lehet hibákat találni az alkalmazáskódban, mint az újrafelhasználható szerződés könyvtárakban. Némely könyvtár külső auditnak(opens in a new tab) veti alá magát magasabb fokú biztonságért.

Az okosszerződés könyvtárak használata azonban azt a kockázatot hordozza magával, hogy számodra ismeretlen kódot veszel fel a projektbe. Csábító egy szerződést importálni és közvetlenül beilleszteni a projektbe, de anélkül, hogy megértenéd, hogy ez a szerződés mit csinál pontosan, véletlenül bevihetsz egy hibát a rendszerbe egy váratlan viselkedésből kifolyólag. Mindig feltétlenül olvasd el az importált kód dokumentációját, majd nézd át magát a kódot, mielőtt a projekt részévé tennéd!

Végül, amikor eldöntöd, hogy felveszel-e egy könyvtárat, vedd figyelembe annak általános használatát. Egy széles körben elfogadott szerződés előnye, hogy nagyobb a közössége, és többen tudnak foglalkozni a problémákkal. A biztonság legyen az elsődleges szempont okosszerződés fejlesztéskor!

OpenZeppelin Contracts - A legnépszerűbb könyvtár biztonságos okosszerződés fejlesztéshez.

DappSys - Biztonságos, egyszerű, flexibilis okosszerződés építőelemek.

HQ20 - Egy Solidity projekt szerződésekkel, könyvtárakkal és példákkal, melyek segítenek teljesértékű alkalmazásokat fejleszteni a külvilágnak

thirdweb Solidity SDK – Olyan eszközöket biztosít, melyekkel hatékonyan lehet személyre szabott okosszerződéseket létrehozni

További olvasnivaló

Van olyan közösségi erőforrása, amely segített Önnek? Szerkessze ezt az oldalt, és adja hozzá!

Hasznosnak találta a cikket?