Úvod do smart kontraktů
Stránka naposledy aktualizována: 25. února 2026
Co je to smart kontrakt?
„Smart kontrakt“ je jednoduše program, který je spuštěn na blockchainu Ethereum. Je to sbírka kódu (jeho funkcí) a dat (jeho stavu), které sídlí na specifické adrese na blockchainu Ethereum.
Chytré kontrakty jsou typem účtu na Ethereu. To znamená, že mají zůstatek a mohou být cílem transakcí. Nejsou však ovládány uživatelem, místo toho jsou nasazeny na síť a běží podle toho, jak jsou naprogramovány. Uživatelé pak mohou interagovat se smart kontraktem prostřednictvím transakcí, které spouštějí funkce definované na smart kontraktu. Smart kontrakty mohou definovat pravidla, podobně jako běžné smlouvy, a automaticky je vynucovat prostřednictvím kódu. Smart kontrakty nelze ve výchozím nastavení smazat a interakce s nimi jsou nevratné.
Předpoklady
Pokud teprve začínáte nebo hledáte méně technický úvod, doporučujeme naši úvodní příručku k chytrým kontraktům.
Než se pustíte do světa chytrých kontraktů, přečtěte si o účtech, transakcích a Ethereum Virtual Machine (EVM).
Digitální prodejní automat
Možná nejlepší metaforou pro chytrý kontrakt je prodejní automat, jak ho popsal Nick Szabo (opens in a new tab). S těmi správnými vstupy je zaručen určitý výstup.
Pakliže chcete svačinu z prodejního automatu:
1peníze + výběr občerstvení = vydané občerstveníTato logika je naprogramována do automatu.
Smart kontrakt má do sebe naprogramovanou logiku, podobně jako prodejní automat. Zde je jednoduchý příklad, jak by takový prodejní automat vypadal, kdyby to byl smart kontrakt napsaný v Solidity:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Deklarace stavových proměnných kontraktu6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Když je kontrakt 'VendingMachine' nasazen:10 // 1. nastaví adresu nasazujícího jako vlastníka kontraktu11 // 2. nastaví zůstatek cupcake v nasazeném chytrém kontraktu na 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Umožní vlastníkovi navýšit zůstatek cupcake v chytrém kontraktu18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Umožní komukoliv zakoupit cupcake24 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}Zobrazit všePodobně jako prodejní automat odstraňuje potřebu zaměstnance prodejce, smart kontrakty mohou nahradit prostředníky v mnoha průmyslových odvětvích.
Bez povolení
Kdokoli může napsat smart kontrakt a vypustit ho na síť. Stačí se naučit programovat v jazyce pro chytré kontrakty a mít dostatek ETH k nasazení vašeho kontraktu. Nasazení chytrého kontraktu je technicky transakce, takže musíte zaplatit gas stejným způsobem, jako platíte gas za jednoduchý převod ETH. Náklady na palivo jsou však při nasazení kontraktu mnohem vyšší.
Ethereum má programovací jazyky pro psaní smart kontraktů, které jsou vývojářsky přívětivé:
- Solidity
- Vyper
Je však třeba je před nasazením zkompilovat, aby je Virtuální stroj Etherea mohl interpretovat a uložit. Více o kompilaci
Složitelnost
Chytré kontrakty na Ethereu jsou veřejné a lze je považovat za otevřená API. To znamená, že ve svém smart kontraktu můžete volat jiné smart kontrakty, což značně rozšiřuje vaše možnosti. Kontrakty mohou dokonce nasazovat další kontrakty.
Zjistěte více o složitelnosti chytrých kontraktů.
Omezení
Samotné chytré kontrakty nemohou získávat informace o „skutečných“ událostech, protože nemohou získávat data ze zdrojů mimo blockchain. To znamená, že nemohou reagovat na události ve skutečném světě. Tento design je úmyslný. Spoléhat se na externí informace by mohlo ohrozit konsenzus, což je důležité pro bezpečnost a decentralizaci.
Nicméně je důležité, aby blockchainové aplikace mohly používat data, která jsou mimo blockchain. Řešením jsou orákula, což jsou nástroje, které přijímají data mimo blockchain a zpřístupňují je chytrým kontraktům.
Dalším omezením smart kontraktů je maximální velikost kontraktu. Smart kontrakt může mít maximálně 24 Kb, jinak dojde k vyčerpání paliva. Tomu se lze vyhnout použitím The Diamond Pattern (opens in a new tab).
Multisig kontrakty
Multisig (vícepodpisové) kontrakty jsou smart kontraktové účty, které vyžadují více platných podpisů k provedení transakce. To je velmi užitečné pro zabránění jednotlivým bodům selhání u kontraktů držících značné množství etheru nebo jiných tokenů. Multisigy také mohou rozdělit odpovědnost za provádění kontraktů a správu klíčů mezi více stran a zabraňují ztrátě prostředků v případě ztráty jediného soukromého klíče. Z těchto důvodů lze multisig kontrakty použít pro jednoduchou správu DAO. Multisigy vyžadují N podpisů z M možných přijatelných podpisů (kde N ≤ M a M > 1) k provedení. Běžně se používají hodnoty N = 3, M = 5 a N = 4, M = 7. Multisig 4/7 vyžaduje čtyři ze sedmi možných platných podpisů. To znamená, že prostředky jsou stále dostupné, i když jsou ztraceny tři podpisy. V tomto případě to také znamená, že většina držitelů klíčů musí souhlasit a podepsat, aby mohl být kontrakt exekuován.
Zdroje k chytrým kontraktům
OpenZeppelin Contracts - Knihovna pro bezpečný vývoj chytrých kontraktů.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Komunitní fórum (opens in a new tab)