Okosszerződés könyvtárak
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 vagy öröklésen keresztül Solidity-ben.
Példaként az alábbiakban bemutatjuk az Ownable
szerződés egyszerűsített verzióját az OpenZeppelin Szerződés könyvtárból, 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;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: caller is not the owner");10 _;11 }12}13Összes megjelenítéseMá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 útvonala23contract MyContract is Ownable {4 // Az alábbi függvényt csak a tulajdonos hívhatja meg5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}9Másolás
Egy másik népszerű példa a SafeMath vagy a DsMath. 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ő token szabvány megtalálható a HQ20-ben, DappSys-ben és az OpenZeppelinen. 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 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ól2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}7Má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 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!
Kapcsolódó eszközök
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
Kapcsolódó útmutatók
- Biztonsági megfontolások Ethereum fejlesztőknek – Egy biztonsági megfontolásokról szóló útmutató okosszerződés fejlesztéshez könyvtár használattal.
- Az ERC-20 token okosszerződés megértése -Útmutató az ERC20 szabványról több könyvtáron keresztül.
További olvasnivaló
Ismersz olyan közösségi anyagot, amely segített neked? Módosítsd az oldalt és add hozzá!