Přeskočit na hlavní obsah
Change page

Knihovny smart kontraktů

Ve svém projektu nemusíte psát každý smart kontrakt od nuly. Existuje mnoho open-source knihoven smart kontraktů, které poskytují znovupoužitelné stavební bloky pro váš projekt, což vám může ušetřit čas a práci s vymýšlením již existujících řešení.

Předpoklady

Než se ponoříte do knihoven smart kontraktů, je dobré mít pevné základy ve struktuře smart kontraktů. Pokud je nemáte, nastudujte si nejdříve anatomii smart kontraktu.

Jaký je obsah knihovny

V knihovnách smart kontraktů obvykle najdete dva druhy stavebních bloků: znovupoužitelné akce, které můžete přidat ke svým kontraktům, a implementace různých standardů.

Akce

Při psaní smart kontraktů je pravděpodobné, že se ocitnete v situaci, kdy budete psát podobné vzory znovu a znovu, jako například přiřazení adresy administrátora k provádění zabezpečených operací v kontraktu nebo přidání tlačítka pro nouzové zastavení v případě neočekávaného problému.

Knihovny smart kontraktů obvykle poskytují znovupoužitelné implementace těchto chování prostřednictvím knihoven(opens in a new tab) nebo prostřednictvím dědičnosti(opens in a new tab) v Solidity.

Jako příklad následuje zjednodušená verze kontraktu Ownable(opens in a new tab) z knihovny OpenZeppelin Contracts(opens in a new tab), která přiřazuje adresu jako vlastníka kontraktu a poskytuje modifikátor pro umožnění přístupu k metodám pouze tomuto vlastníkovi.

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}
Zobrazit vše
Kopírovat

Abyste mohli ve svém smart kontraktu použít takovýto stavební blok, musíte jej nejprve importovat a následně jej ve svých vlastních kontraktech rozšířit (dědit z něj). To vám umožní použít modifikátor k zabezpečení vlastních funkcí poskytovaný základním kontraktem Ownable.

1import ".../Ownable.sol"; // Path to the imported library
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
Kopírovat

Dalším populárním příkladem je SafeMath(opens in a new tab) nebo DsMath(opens in a new tab). Jedná se o knihovny (na rozdíl od základních kontraktů), které poskytují aritmetické funkce s kontrolami přetečení, což jazyk samotný nenabízí. Je dobrým zvykem používat některou z těchto knihoven místo nativních aritmetických operací, aby byl váš smart kontrakt chráněn před přetečeními, která mohou mít katastrofální následky!

Standardy

Pro usnadnění kompozice a interoperability definovala komunita Etherea několik standardů ve formě ERC (Ethereum Request for Comments). Více si o nich můžete přečíst v sekci věnované standardům.

Pokud zahrnete ERC do svých smart kontraktů, je dobré hledat standardní implementace místo toho, abyste se snažili vytvořit vlastní. Spousta knihoven smart kontraktů zahrnuje implementace pro nejpopulárnější ERC. Například všudypřítomný standard ERC20 pro zaměnitelné tokeny lze najít v knihovnách HQ20(opens in a new tab), DappSys(opens in a new tab) a OpenZeppelin(opens in a new tab). Navíc některé ERC poskytují kanonické implementace jako součást samotného standardu.

Stojí za zmínku, že některé ERC nejsou samostatné, ale jsou rozšířením jiných ERC. Například ERC2612(opens in a new tab) přidává rozšíření k ERC20 za účelem zlepšení jeho použitelnosti.

Jak přidat knihovnu

Vždy se řiďte dokumentací knihovny, kterou přidáváte, kde najdete konkrétní instrukce, jak ji zahrnout do svého projektu. Řada knihoven pro smart kontrakty v Solidity je zabalena pomocí npm, takže je můžete jednoduše nainstalovat pomocí příkazu npm install. Většina nástrojů pro kompilaci kontraktů prohledá vaši složku node_modules, aby našla knihovny smart kontraktů, takže můžete postupovat následovně:

1// This will load the @openzeppelin/contracts library from your node_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
Kopírovat

Bez ohledu na to, jakou metodu používáte, při zahrnutí knihovny vždy věnujte pozornost verzi jazyka. Například nemůžete použít knihovnu pro Solidity 0.6, pokud píšete své smart kontrakty v Solidity 0.5.

Kdy používat knihovny

Použití knihovny smart kontraktů přináší vašemu projektu několik výhod. Především vám ušetří čas tím, že poskytne hotové stavební bloky, které můžete zahrnout do svého systému, místo abyste je museli programovat sami.

Bezpečnost je také velkým přínosem. Open source knihovny smart kontraktů jsou často podrobeny přísné kontrole. Vzhledem k tomu, že na nich závisí mnoho projektů, je komunita silně motivována je neustále kontrolovat. Mnohem častěji lze najít chyby v aplikačním kódu než v knihovnách pro znovupoužitelné smart kontrakty. Některé knihovny také za účelem zajištění vyšší bezpečnosti procházejí externími audity(opens in a new tab).

Nicméně používání knihoven smart kontraktů nese riziko, že do vašeho projektu zahrnete kód, se kterým nejste obeznámeni. Je lákavé importovat kontrakt a přímo jej zahrnout do vašeho projektu, ale bez perfektního porozumění tomu, co tento kontrakt dělá, můžete neúmyslně do systému zavést neočekávané chování a tím si zadělat na problémy. Vždy si předtím, než kód zahrnete do svého projektu, přečtěte jeho dokumentaci a poté si kód sami prohlédněte!

Nakonec při rozhodování, zda zahrnout knihovnu, zvažte její celkové použití. Široce adoptovaná knihovna má výhodu větší komunity, což znamená více lidí, kteří do ní nahlížejí a hledají problémy. Bezpečnost by měla být při vytváření smart kontraktů vaší hlavní prioritou!

OpenZeppelin Contracts – nejoblíbenější knihovna pro vývoj bezpečných smart kontraktů.

DappSys – bezpečné, jednoduché a flexibilní návrhové vzory pro smart kontrakty.

HQ20 – Solidity projekt s kontrakty, knihovnami a příklady, které vám pomohou vytvořit plně funkční distribuované aplikace pro reálný svět.

thirdweb Solidity SDK – poskytuje nástroje potřebné pro efektivní vytváření vlastních smart kontraktů.

  • Security considerations for Ethereum developers – tutorial o bezpečnostních aspektech při vytváření smart kontraktů, včetně použití knihoven.
  • Understand the ERC-20 token smart contract – tutorial o ERC20 standardu, poskytovaný několika knihovnami.

Další informace

Víte o komunitním zdroji, který vám pomohl? Upravte tuto stránku a přidejte ji!

Byl tento článek užitečný?