Přejít na hlavní obsah

Odesílání transakcí pomocí Web3

transakce
web3.js
Alchemy
Začátečník
Elan Halpern
4. listopadu 2020
9 minut čtení

Toto je průvodce pro začátečníky odesíláním transakcí na Ethereu pomocí Web3. Odeslání transakce na blockchain Etherea se skládá ze tří hlavních kroků: vytvoření, podepsání a odeslání (broadcast). Projdeme si všechny tři a doufejme, že zodpovíme všechny vaše případné dotazy! V tomto tutoriálu budeme používat Alchemy (opens in a new tab) k odesílání našich transakcí do řetězce Etherea. Zde si můžete vytvořit bezplatný účet Alchemy (opens in a new tab).

POZNÁMKA: Tento průvodce je určen pro podepisování transakcí na backendu vaší aplikace. Pokud chcete integrovat podepisování transakcí na frontendu, podívejte se na integraci Web3 s poskytovatelem v prohlížeči (opens in a new tab).

Základy

Stejně jako většina blockchainových vývojářů ve svých začátcích jste si možná zjišťovali, jak odeslat transakci (což by mělo být docela jednoduché), a narazili jste na nepřeberné množství návodů, z nichž každý říkal něco jiného, což vás trochu zahltilo a zmátlo. Pokud jste na tom podobně, nebojte se; všichni jsme tam někdy byli! Než tedy začneme, ujasněme si několik věcí:

1. Alchemy neukládá vaše soukromé klíče

  • To znamená, že Alchemy nemůže podepisovat a odesílat transakce vaším jménem. Důvodem je bezpečnost. Alchemy vás nikdy nepožádá o sdílení vašeho soukromého klíče a vy byste nikdy neměli sdílet svůj soukromý klíč s hostovaným uzlem (ani s nikým jiným).
  • Z blockchainu můžete číst pomocí základního API Alchemy, ale pro zápis do něj budete muset použít něco jiného k podepsání vašich transakcí před jejich odesláním přes Alchemy (to platí i pro jakoukoli jinou službu uzlu).

2. Co je to „signer“?

  • Signeři (podepisovatelé) za vás podepíší transakce pomocí vašeho soukromého klíče. V tomto tutoriálu budeme k podepsání naší transakce používat Alchemy Web3 (opens in a new tab), ale můžete použít i jakoukoli jinou knihovnu Web3.
  • Na frontendu by byl dobrým příkladem signera MetaMask (opens in a new tab), který bude podepisovat a odesílat transakce vaším jménem.

3. Proč musím podepisovat své transakce?

  • Každý uživatel, který chce odeslat transakci v síti Ethereum, musí transakci podepsat (pomocí svého soukromého klíče), aby se ověřilo, že původce transakce je skutečně ten, za koho se vydává.
  • Je nesmírně důležité tento soukromý klíč chránit, protože přístup k němu poskytuje plnou kontrolu nad vaším účtem na Ethereu a umožňuje vám (nebo komukoli s přístupem) provádět transakce vaším jménem.

4. Jak ochráním svůj soukromý klíč?

  • Existuje mnoho způsobů, jak chránit svůj soukromý klíč a používat jej k odesílání transakcí. V tomto tutoriálu budeme používat soubor .env. Můžete však také použít samostatného poskytovatele, který ukládá soukromé klíče, použít soubor úložiště klíčů (keystore) nebo jiné možnosti.

5. Jaký je rozdíl mezi eth_sendTransaction a eth_sendRawTransaction?

eth_sendTransaction a eth_sendRawTransaction jsou obě funkce API Etherea, které odesílají transakci do sítě Ethereum, aby byla přidána do budoucího bloku. Liší se v tom, jak zpracovávají podepisování transakcí.

Při použití Web3 se k eth_sendRawTransaction přistupuje voláním funkce web3.eth.sendSignedTransaction (opens in a new tab).

To je to, co budeme používat v tomto tutoriálu.

6. Co je to knihovna Web3?

  • Web3.js je obalovací knihovna (wrapper) kolem standardních volání JSON-RPC, která se při vývoji na Ethereu používá poměrně běžně.
  • Existuje mnoho knihoven Web3 pro různé jazyky. V tomto tutoriálu budeme používat Alchemy Web3 (opens in a new tab), která je napsána v JavaScriptu. Další možnosti, jako je Ethers.js (opens in a new tab), si můžete prohlédnout zde.

Dobře, teď, když máme několik těchto otázek z krku, přejděme k tutoriálu. Neváhejte se kdykoli zeptat na Discordu (opens in a new tab) Alchemy!

7. Jak odesílat bezpečné, soukromé transakce s optimalizovaným gasem?

POZNÁMKA: Tento průvodce vyžaduje účet Alchemy, adresu na Ethereu nebo peněženku MetaMask a nainstalované Node.js a npm. Pokud je nemáte, postupujte podle těchto kroků:

  1. Vytvořte si bezplatný účet Alchemy (opens in a new tab)
  2. Vytvořte si účet MetaMask (opens in a new tab) (nebo získejte adresu na Ethereu)
  3. Nainstalujte Node.js a npm (opens in a new tab)

Kroky k odeslání vaší transakce

1. Vytvořte aplikaci Alchemy na testnetu Sepolia

Přejděte na svůj řídicí panel Alchemy (opens in a new tab) a vytvořte novou aplikaci, přičemž jako síť zvolte Sepolia (nebo jakýkoli jiný testnet).

2. Vyžádejte si ETH z faucetu Sepolia

Postupujte podle pokynů na faucetu Alchemy Sepolia (opens in a new tab) a získejte ETH. Ujistěte se, že jste zadali svou adresu na Ethereu pro síť Sepolia (z MetaMasku) a ne pro jinou síť. Po provedení pokynů si dvakrát zkontrolujte, zda jste ETH do své peněženky obdrželi.

3. Vytvořte nový adresář projektu a přejděte do něj pomocí cd

Vytvořte nový adresář projektu z příkazového řádku (terminálu na Macu) a přejděte do něj:

mkdir sendtx-example
cd sendtx-example

4. Nainstalujte Alchemy Web3 (nebo jakoukoli knihovnu Web3)

Spusťte následující příkaz v adresáři vašeho projektu pro instalaci Alchemy Web3 (opens in a new tab):

Poznámka: Pokud byste chtěli použít knihovnu Ethers.js, postupujte podle pokynů zde (opens in a new tab).

npm install @alch/alchemy-web3

5. Nainstalujte dotenv

K bezpečnému uložení našeho klíče API a soukromého klíče použijeme soubor .env.

npm install dotenv --save

6. Vytvořte soubor .env

Vytvořte soubor .env v adresáři vašeho projektu a přidejte následující (nahraďte „your-api-url“ a „your-private-key“):

  • Chcete-li najít svou URL adresu Alchemy API, přejděte na stránku s podrobnostmi o aplikaci, kterou jste právě vytvořili na svém řídicím panelu, klikněte na „View Key“ v pravém horním rohu a zkopírujte HTTP URL.
  • Chcete-li najít svůj soukromý klíč pomocí MetaMasku, podívejte se na tohoto průvodce (opens in a new tab).
API_URL = "your-api-url"
PRIVATE_KEY = "your-private-key"
Necommitujte .env! Ujistěte se, že svůj soubor .env nikdy s nikým nesdílíte ani ho nevystavujete, protože tím ohrožujete svá tajemství. Pokud používáte správu verzí, přidejte svůj .env do souboru gitignore.

7. Vytvořte soubor sendTx.js

Skvělé, teď, když máme naše citlivá data chráněna v souboru .env, můžeme začít kódovat. Pro náš příklad odeslání transakce budeme posílat ETH zpět do faucetu Sepolia.

Vytvořte soubor sendTx.js, ve kterém nakonfigurujeme a odešleme naši ukázkovou transakci, a přidejte do něj následující řádky kódu:

Nezapomeňte nahradit adresu na řádku 6 svou vlastní veřejnou adresou.

Než se pustíme do spouštění tohoto kódu, pojďme si promluvit o některých jeho součástech.

  • nonce : Specifikace nonce se používá ke sledování počtu transakcí odeslaných z vaší adresy. Potřebujeme to z bezpečnostních důvodů a k zabránění útokům typu replay (opakování). K získání počtu transakcí odeslaných z vaší adresy používáme getTransactionCount (opens in a new tab).
  • transaction: Objekt transakce má několik aspektů, které musíme specifikovat
    • to: Toto je adresa, na kterou chceme odeslat ETH. V tomto případě posíláme ETH zpět do faucetu Sepolia (opens in a new tab), ze kterého jsme původně žádali.
    • value: Toto je částka, kterou chceme odeslat, specifikovaná ve Wei, kde 10^18 Wei = 1 ETH.
    • gas: Existuje mnoho způsobů, jak určit správné množství gasu, které se má zahrnout do vaší transakce. Alchemy podporuje webhooky (opens in a new tab), které vás mohou upozornit na onchain aktivitu. U transakcí na Mainnetu je dobrým zvykem zkontrolovat aktuální podmínky gasu, abyste určili správné množství gasu, které se má zahrnout. 21000 je minimální množství gasu, které operace na Ethereu spotřebuje, takže abychom zajistili, že naše transakce bude provedena, zadáme sem 30000.
    • nonce: viz definice nonce výše. Nonce se začíná počítat od nuly.
    • [VOLITELNÉ] data: Používá se k odeslání dalších informací s vaším převodem nebo k volání chytrého kontraktu, není vyžadováno pro převody zůstatku, podívejte se na poznámku níže.
  • signedTx: K podepsání našeho objektu transakce použijeme metodu signTransaction s naším PRIVATE_KEY.
  • sendSignedTransaction: Jakmile máme podepsanou transakci, můžeme ji odeslat k zahrnutí do následujícího bloku pomocí sendSignedTransaction.

Poznámka k datům Existují dva hlavní typy transakcí, které lze na Ethereu odeslat.

  • Převod zůstatku: Odeslání ETH z jedné adresy na druhou. Není vyžadováno žádné datové pole, nicméně pokud byste chtěli s transakcí odeslat další informace, můžete tyto informace zahrnout v HEX formátu do tohoto pole.
    • Řekněme například, že bychom chtěli zapsat hash dokumentu IPFS do řetězce Etherea, abychom mu dali neměnný časový razítko. Naše datové pole by pak mělo vypadat jako data: web3.utils.toHex(‘IPFS hash‘). A nyní může kdokoli dotazovat řetězec a zjistit, kdy byl tento dokument přidán.
  • Transakce chytrého kontraktu: Spuštění nějakého kódu chytrého kontraktu v řetězci. V tomto případě by datové pole mělo obsahovat chytrou funkci, kterou chcete spustit, spolu s případnými parametry.

8. Spusťte kód pomocí node sendTx.js

Přejděte zpět do terminálu nebo příkazového řádku a spusťte:

node sendTx.js

9. Podívejte se na svou transakci v mempoolu

Otevřete stránku Mempool (opens in a new tab) na svém řídicím panelu Alchemy a filtrujte podle aplikace, kterou jste vytvořili, abyste našli svou transakci. Zde můžeme sledovat, jak naše transakce přechází ze stavu čekající (pending) do stavu vytěžená (mined) (pokud je úspěšná) nebo zahozená (dropped), pokud je neúspěšná. Ujistěte se, že máte nastaveno „All“ (Vše), abyste zachytili „vytěžené“, „čekající“ a „zahozené“ transakce. Svou transakci můžete také vyhledat tak, že budete hledat transakce odeslané na adresu 0x31b98d14007bdee637298086988a0bbd31184523 .

Chcete-li zobrazit podrobnosti o své transakci, jakmile ji najdete, vyberte hash transakce (tx hash), což by vás mělo přenést do zobrazení, které vypadá takto:

Snímek obrazovky sledování mempoolu

Odtud si můžete prohlédnout svou transakci na Etherscanu kliknutím na ikonu zakroužkovanou červeně!

Jupííí! Právě jste odeslali svou první transakci na Ethereu pomocí Alchemy 🎉

Pro zpětnou vazbu a návrhy k tomuto průvodci prosím napište Elanovi na Discordu (opens in a new tab) Alchemy!

Původně publikováno společností Alchemy.