Přeskočit na hlavní obsah

Chytrý kontrakt Hello World pro začátečníky

solidity
hardhat
alchemy
smart kontrakt účty
nasazování
Začátečník
elanh
31. března 2021
11 minuta čtení

Pokud s vývojem na blockchainu teprve začínáte a nevíte, kde začít, nebo pokud jen chcete pochopit, jak nasadit chytré kontrakty a interagovat s nimi, je tento průvodce určen právě vám. Provedeme vás vytvořením a nasazením jednoduchého chytrého kontraktu na testovací síti Sepolia pomocí virtuální peněženky MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab) a Alchemy (opens in a new tab) (nebojte se, pokud ještě ničemu z toho nerozumíte, všechno si vysvětlíme).

Ve 2. části (opens in a new tab) tohoto tutoriálu si projdeme, jak můžeme s naším nasazeným chytrým kontraktem interagovat, a ve 3. části (opens in a new tab) si ukážeme, jak ho publikovat na Etherscanu.

Pokud budete mít v kterémkoliv bodě dotazy, neváhejte se zeptat na Discordu Alchemy (opens in a new tab)!

Krok 1: Připojení k síti Ethereum

Existuje mnoho způsobů, jak posílat požadavky na blockchain Etherea. Pro zjednodušení použijeme bezplatný účet na Alchemy, vývojářské platformy a API pro blockchain, která nám umožňuje komunikovat s blockchainem Etherea, aniž bychom museli provozovat vlastní uzly. Tato platforma má také vývojářské nástroje pro monitorování a analýzu, které v tomto tutoriálu využijeme, abychom pochopili, co se děje „pod kapotou“ při nasazení našeho chytrého kontraktu. Pokud ještě nemáte účet Alchemy, můžete se zdarma zaregistrovat zde (opens in a new tab).

Krok 2: Vytvořte svou aplikaci (a klíč API)

Jakmile si vytvoříte účet na Alchemy, můžete si vygenerovat klíč API vytvořením aplikace. To nám umožní posílat požadavky do testovací sítě Sepolia. Pokud neznáte testovací sítě, podívejte se na tuto stránku.

  1. Přejděte na stránku „Vytvořit novou aplikaci“ na vašem řídicím panelu Alchemy tak, že na navigační liště vyberete možnost „Vybrat aplikaci“ a kliknete na „Vytvořit novou aplikaci“

Vytvoření aplikace Hello World

  1. Pojmenujte svou aplikaci „Hello World“, uveďte krátký popis a vyberte případ použití, např. „Infra & nástroje“. Dále vyhledejte „Ethereum“ a vyberte síť.

Pohled na vytvoření aplikace Hello World

  1. Kliknutím na „Další“ pokračujte, poté na „Vytvořit aplikaci“ a je to! Vaše aplikace by se měla objevit v rozevírací nabídce na navigační liště s klíčem API, který si můžete zkopírovat.

Krok 3: Vytvoření účtu Ethereum (adresy)

K odesílání a přijímání transakcí potřebujeme ethereový účet. Pro tento výukový program použijeme MetaMask, virtuální peněženku v prohlížeči, která slouží ke správě adresy vašeho ethereového účtu. Více o transakcích.

Můžete si stáhnout MetaMask a zdarma si vytvořit účet Ethereum zde (opens in a new tab). Při vytváření účtu, nebo pokud již účet máte, se ujistěte, že jste se přepnuli na testovací síť „Sepolia“ pomocí rozevírací nabídky sítě (abychom nepracovali se skutečnými penězi).

Pokud síť Sepolia v seznamu nevidíte, přejděte do nabídky, poté do „Pokročilé“ a sjeďte dolů, abyste zapnuli možnost „Zobrazit testovací sítě“. V nabídce pro výběr sítě zvolte záložku „Vlastní“, kde najdete seznam testovacích sítí a vyberete „Sepolia“.

Příklad sítě Sepolia v MetaMask

Krok 4: Přidání etheru z faucetu

Abychom mohli náš chytrý kontrakt nasadit na testovací síť, budeme potřebovat nějaké falešné ETH. Pro získání ETH na síti Sepolia můžete přejít na podrobnosti o síti Sepolia a zobrazit si seznam různých faucetů. Pokud jeden nefunguje, zkuste jiný, protože jim někdy mohou dojít prostředky. Může chvíli trvat, než obdržíte své falešné ETH, kvůli vytížení sítě. Brzy poté byste měli vidět ETH ve svém účtu MetaMask!

Krok 5: Kontrola zůstatku

Abychom si ověřili, že máme zůstatek, provedeme požadavek eth_getBalance pomocí nástroje Composer od Alchemy (opens in a new tab). Tím se vrátí množství ETH v naší peněžence. Po zadání adresy vašeho účtu MetaMask a kliknutí na „Send Request“ byste měli vidět takovouto odpověď:

1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

POZNÁMKA: Tento výsledek je ve wei, nikoliv v ETH. Wei se používá jako nejmenší denominace etheru. Převod z wei na ETH je: 1 ETH = 1018 wei. Takže když převedeme 0x2B5E3AF16B1880000 na desetinné číslo, dostaneme 5*10¹⁸, což se rovná 5 ETH.

Uf! Naše falešné peníze jsou všechny tady .

Krok 6: Inicializace našeho projektu

Nejprve budeme muset vytvořit složku pro náš projekt. Přejděte na příkazový řádek a zadejte:

1mkdir hello-world
2cd hello-world

Nyní, když jsme uvnitř složky našeho projektu, použijeme npm init k inicializaci projektu. Pokud ještě nemáte nainstalovaný npm, postupujte podle těchto pokynů (opens in a new tab) (budeme také potřebovat Node.js, takže si ho také stáhněte!).

1npm init

Nezáleží na tom, jak odpovíte na instalační otázky, zde je pro referenci, jak jsme to udělali my:

1název balíčku: (hello-world)
2verze: (1.0.0)
3popis: chytrý kontrakt hello world
4vstupní bod: (index.js)
5testovací příkaz:
6git repozitář:
7klíčová slova:
8autor:
9licence: (ISC)
10Chystáte se zapsat do /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "chytrý kontrakt hello world",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \"Error: no test specified\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22}
Zobrazit vše

Schvalte package.json a můžeme pokračovat!

Krok 7: Stažení Hardhat (opens in a new tab)

Hardhat je vývojové prostředí pro kompilaci, nasazení, testování a ladění vašeho softwaru pro Ethereum. Pomáhá vývojářům při lokálním budování chytrých kontraktů a dapps před jejich nasazením na živý řetězec.

Uvnitř našeho projektu hello-world spusťte:

1npm install --save-dev hardhat

Další podrobnosti o instalačních pokynech (opens in a new tab) naleznete na této stránce.

Krok 8: Vytvoření projektu Hardhat

Uvnitř složky našeho projektu spusťte:

1npx hardhat

Poté by se vám měla zobrazit uvítací zpráva a možnost vybrat si, co chcete dělat. Vyberte „create an empty hardhat.config.js“:

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Vítejte v Hardhat v2.0.11 👷‍?
11
12Co chcete udělat? …
13Vytvořit vzorový projekt
14❯ Vytvořit prázdný hardhat.config.js
15Ukončit
Zobrazit vše

Tím se nám vygeneruje soubor hardhat.config.js, ve kterém specifikujeme veškeré nastavení našeho projektu (v kroku 13).

Krok 9: Přidání složek projektu

Abychom si v našem projektu udrželi pořádek, vytvoříme dvě nové složky. Přejděte do kořenového adresáře projektu v příkazovém řádku a zadejte:

1mkdir contracts
2mkdir scripts
  • contracts/ je místo, kam uložíme soubor s kódem našeho chytrého kontraktu Hello World
  • scripts/ je místo, kam uložíme skripty pro nasazení našeho kontraktu a interakci s ním

Krok 10: Napsání našeho kontraktu

Možná si říkáte, kdy už konečně budeme psát nějaký kód?? Tak jsme tady, v kroku 10.

Otevřete projekt hello-world ve svém oblíbeném editoru (my máme rádi VSCode (opens in a new tab)). Chytré kontrakty se píší v jazyce zvaném Solidity, který použijeme k napsání našeho chytrého kontraktu HelloWorld.sol.‌

  1. Přejděte do složky „contracts“ a vytvořte nový soubor s názvem HelloWorld.sol
  2. Níže je ukázkový chytrý kontrakt Hello World od Nadace Ethereum, který budeme používat pro tento tutoriál. Zkopírujte a vložte níže uvedený obsah do souboru HelloWorld.sol a nezapomeňte si přečíst komentáře, abyste pochopili, co tento kontrakt dělá:
1// Určuje verzi Solidity pomocí sémantického verzování.
2// Více informací: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Definuje kontrakt s názvem `HelloWorld`.
6// Kontrakt je soubor funkcí a dat (jeho stav). Po nasazení se kontrakt nachází na určité adrese na blockchainu Etherea. Více informací: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Deklaruje stavovou proměnnou `message` typu `string`.
10 // Stavové proměnné jsou proměnné, jejichž hodnoty jsou trvale uloženy v úložišti kontraktu. Klíčové slovo `public` zpřístupňuje proměnné z vnějšku kontraktu a vytváří funkci, kterou mohou jiné kontrakty nebo klienti volat pro přístup k hodnotě.
11 string public message;
12
13 // Podobně jako v mnoha objektově orientovaných jazycích založených na třídách je konstruktor speciální funkce, která se provede pouze při vytvoření kontraktu.
14 // Konstruktory se používají k inicializaci dat kontraktu. Více informací:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Přijímá argument řetězce `initMessage` a nastavuje hodnotu do úložné proměnné `message` kontraktu).
18 message = initMessage;
19 }
20
21 // Veřejná funkce, která přijímá argument řetězce a aktualizuje úložnou proměnnou `message`.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
Zobrazit vše

Jedná se o super jednoduchý chytrý kontrakt, který při vytvoření uloží zprávu a lze jej aktualizovat voláním funkce update.

Krok 11: Připojení MetaMask a Alchemy k vašemu projektu

Vytvořili jsme si peněženku MetaMask, účet Alchemy a napsali jsme náš chytrý kontrakt, nyní je čas je všechny tři propojit.

Každá transakce odeslaná z vaší virtuální peněženky vyžaduje podpis pomocí vašeho jedinečného privátního klíče. Abychom našemu programu poskytli toto oprávnění, můžeme bezpečně uložit náš privátní klíč (a klíč API od Alchemy) do souboru prostředí.

Chcete-li se dozvědět více o odesílání transakcí, podívejte se na tento výukový program o odesílání transakcí pomocí web3.

Nejprve nainstalujte balíček dotenv do adresáře vašeho projektu:

1npm install dotenv --save

Poté vytvořte soubor .env v kořenovém adresáři našeho projektu a přidejte do něj svůj privátní klíč MetaMask a adresu URL rozhraní HTTP API od Alchemy.

Získání klíče API Alchemy

Zkopírujte URL API Alchemy

Váš soubor .env by měl vypadat takto:

1API_URL = "https://eth-sepolia.g.alchemy.com/v2/váš-api-klíč"
2PRIVATE_KEY = "váš-soukromý-klíč-metamask"

Abychom je skutečně propojili s naším kódem, budeme na tyto proměnné odkazovat v našem souboru hardhat.config.js v kroku 13.

Krok 12: Instalace Ethers.js

Ethers.js je knihovna, která usnadňuje interakci a zadávání požadavků na Ethereum tím, že obaluje standardní metody JSON-RPC uživatelsky přívětivějšími metodami.

Hardhat velmi usnadňuje integraci pluginů (opens in a new tab) pro další nástroje a rozšířenou funkčnost. Pro nasazení kontraktu využijeme plugin Ethers (opens in a new tab) (Ethers.js (opens in a new tab) má několik velmi čistých metod pro nasazení kontraktu).

V adresáři projektu zadejte:

1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

V dalším kroku také budeme vyžadovat Ethers v našem souboru hardhat.config.js.

Krok 13: Aktualizace souboru hardhat.config.js

Zatím jsme přidali několik závislostí a pluginů, nyní musíme aktualizovat hardhat.config.js, aby o nich náš projekt věděl.

Aktualizujte svůj soubor hardhat.config.js, aby vypadal takto:

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "sepolia",
12 networks: {
13 hardhat: {},
14 sepolia: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
Zobrazit vše

Krok 14: Kompilace našeho kontraktu

Abychom se ujistili, že zatím vše funguje, zkompilujeme si náš kontrakt. Úkol compile je jedním z vestavěných úkolů Hardhatu.

Z příkazového řádku spusťte:

1npx hardhat compile

Může se vám zobrazit varování SPDX license identifier not provided in source file, ale nemusíte se tím znepokojovat – doufejme, že všechno ostatní vypadá dobře! Pokud ne, vždy můžete napsat zprávu na discordu Alchemy (opens in a new tab).

Krok 15: Napsání našeho skriptu pro nasazení

Nyní, když je náš kontrakt napsán a náš konfigurační soubor je připraven, je čas napsat náš skript pro nasazení kontraktu.

Přejděte do složky scripts/, vytvořte nový soubor s názvem deploy.js a přidejte do něj následující obsah:

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // Spustí nasazení a vrátí příslib, který se vyřeší na objekt kontraktu
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("Kontrakt nasazen na adresu:", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
Zobrazit vše

Hardhat skvěle vysvětluje, co každý z těchto řádků kódu dělá ve svém výukovém programu Kontrakty (opens in a new tab), a my jsme zde jejich vysvětlení převzali.

1const HelloWorld = await ethers.getContractFactory("HelloWorld");

ContractFactory v ethers.js je abstrakce, která se používá k nasazování nových chytrých kontraktů, takže HelloWorld je zde továrna pro instance našeho kontraktu hello world. Při použití pluginu hardhat-ethers jsou instance ContractFactory a Contract ve výchozím nastavení připojeny k prvnímu podepisujícímu.

1const hello_world = await HelloWorld.deploy();

Volání deploy() na ContractFactory spustí nasazení a vrátí Promise, který se vyřeší na Contract. Toto je objekt, který má metodu pro každou z funkcí našeho chytrého kontraktu.

Krok 16: Nasazení našeho kontraktu

Konečně jsme připraveni nasadit náš chytrý kontrakt! Přejděte na příkazový řádek a spusťte:

1npx hardhat run scripts/deploy.js --network sepolia

Měli byste pak vidět něco takového:

1Kontrakt nasazen na adresu: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Pokud přejdeme na Etherscan sítě Sepolia (opens in a new tab) a vyhledáme adresu našeho kontraktu, měli bychom vidět, že byl úspěšně nasazen. Transakce bude vypadat nějak takto:

Kontrakt na Etherscanu

Adresa From by se měla shodovat s adresou vašeho účtu MetaMask a u adresy „To“ bude uvedeno „Vytvoření kontraktu“, ale pokud klikneme na transakci, uvidíme adresu našeho kontraktu v poli To:

Transakce na Etherscanu

Výborně! Právě jste nasadili chytrý kontrakt na blockchain Etherea 🎉

Abychom pochopili, co se děje „pod pokličkou“, přejděme na kartu Explorer v našem ovládacím panelu Alchemy (opens in a new tab). Pokud máte více aplikací Alchemy, ujistěte se, že filtrujete podle aplikace a vyberete „Hello World“. Průzkumník Hello World

Zde uvidíte několik volání JSON-RPC, které za nás Hardhat/Ethers provedly „pod kapotou“, když jsme zavolali funkci .deploy(). Dvě důležité, které je třeba zmínit, jsou eth_sendRawTransaction (opens in a new tab), což je požadavek na skutečný zápis našeho kontraktu do blockchainu Sepolia, a eth_getTransactionByHash (opens in a new tab), což je požadavek na čtení informací o naší transakci na základě haše (typický vzor u transakcí). Chcete-li se dozvědět více o odesílání transakcí, podívejte se na tento tutoriál o odesílání transakcí pomocí Web3

To je vše k 1. části tohoto tutoriálu, ve 2. části budeme s naším chytrým kontraktem skutečně interagovat (opens in a new tab) aktualizací naší původní zprávy a ve 3. části náš chytrý kontrakt publikujeme na Etherscanu (opens in a new tab), aby každý věděl, jak s ním interagovat.

Chcete se o Alchemy dozvědět více? Podívejte se na náš web (opens in a new tab). Nechcete si nechat ujít žádnou aktualizaci? Přihlaste se k odběru našeho newsletteru zde (opens in a new tab)! Nezapomeňte se také připojit na náš Discord (opens in a new tab).**.

Stránka naposledy aktualizována: 5. prosince 2025

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