Odesílání transakcí pomocí Web3
Toto je průvodce pro začátečníky, jak odesílat transakce v síti Ethereum pomocí Web3. Existují tři hlavní kroky pro odeslání transakce do blockchainu Etherea: vytvoření, podepsání a vysílání. Všechny tři si projdeme a doufejme, že odpovíme na všechny vaše případné otázky! V tomto návodu budeme k odesílání našich transakcí do řetězce Ethereum používat Alchemy (opens in a new tab). Můžete si zde vytvořit bezplatný účet Alchemy (opens in a new tab).
POZNÁMKA: Tento průvodce je určen k podepisování transakcí na backendu vaší aplikace. Pokud chcete integrovat podepisování transakcí na frontendu, podívejte se na integraci Web3 s poskytovatelem prohlížeče (opens in a new tab).
Základy
Stejně jako většina blockchainových vývojářů, když začínali, jste si možná udělali průzkum, jak poslat transakci (něco, co by mělo být docela jednoduché), a narazili jste na spoustu průvodců, z nichž každý říkal něco jiného a nechal vás trochu zahlcené a zmatené. Pokud se v tom poznáváte, nedělejte si starosti; v určitém okamžiku jsme si tím prošli všichni! 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 vaším jménem podepisovat a odesílat transakce. Důvodem jsou bezpečnostní účely. 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 (nebo s kýmkoli jiným).
- Pomocí základního API od Alchemy můžete číst z blockchainu, ale abyste do něj mohli zapisovat, budete muset použít něco jiného k podepsání transakcí před jejich odesláním přes Alchemy (to samé platí pro jakoukoli jinou službu uzlů).
2. Co je to „podepisovatel“?
- Podepisovatelé za vás podepíší transakce pomocí vašeho soukromého klíče. V tomto návodu budeme k podepsání naší transakce používat Alchemy web3 (opens in a new tab), ale můžete použít i jakoukoliv jinou web3 knihovnu.
- Na frontendu je dobrým příkladem podepisovatele MetaMask (opens in a new tab), který za vás bude podepisovat a odesílat transakce.
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 ten, za koho se vydává.
- Je velmi důležité tento soukromý klíč chránit, protože přístup k němu poskytuje plnou kontrolu nad vaším účtem Ethereum, což vám (nebo komukoli s přístupem) umožňuje 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 ho k odesílání transakcí. V tomto návodu budeme používat soubor
.env. Můžete však také použít samostatného poskytovatele, který ukládá soukromé klíče, použít soubor 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é vysílají transakci do sítě Ethereum, aby byla přidána do budoucího bloku. Liší se v tom, jak nakládají s podepisováním transakcí.
eth_sendTransaction(opens in a new tab) se používá k odesílání nepodepsaných transakcí, což znamená, že uzel, na který odesíláte, musí spravovat váš soukromý klíč, aby mohl transakci podepsat před jejím vysíláním do řetězce. Jelikož Alchemy neuchovává soukromé klíče uživatelů, tuto metodu nepodporuje.eth_sendRawTransaction(opens in a new tab) se používá k vysílání transakcí, které již byly podepsány. To znamená, že nejprve musíte použítsignTransaction(tx, private_key)(opens in a new tab) a poté výsledek předat doeth_sendRawTransaction.
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 návodu.
6. Co je to knihovna web3?
- Web3.js je obalová knihovna pro standardní volání JSON-RPC, která se ve vývoji pro Ethereum běžně používá.
- Existuje mnoho web3 knihoven pro různé jazyky. V tomto návodu budeme používat Alchemy Web3 (opens in a new tab), který je napsán v JavaScriptu. Můžete se podívat na další možnosti zde (opens in a new tab), jako je například ethers.js (opens in a new tab).
Dobře, teď, když máme několik těchto otázek z cesty, přejděme k návodu. Neváhejte se kdykoli na cokoli zeptat na Discordu (opens in a new tab) společnosti Alchemy!
7. Jak posílat bezpečné, soukromé transakce a transakce s optimalizovanými poplatky?
- Alchemy má sadu Transact API (opens in a new tab). Můžete je použít k odesílání posílených transakcí, simulaci transakcí před jejich uskutečněním, odesílání soukromých transakcí a odesílání transakcí optimalizovaných z hlediska poplatků
- Můžete také použít Notify API (opens in a new tab), abyste byli upozorněni, když je vaše transakce vytažena z mempoolu a přidána do řetězce.
POZNÁMKA: Tento průvodce vyžaduje účet Alchemy, adresu Ethereum nebo peněženku MetaMask, nainstalovaný NodeJs a npm. Pokud ne, postupujte podle následujících kroků:
- Vytvořte si bezplatný účet Alchemy (opens in a new tab)
- Vytvořte si účet MetaMask (opens in a new tab) (nebo získejte adresu Ethereum)
- Postupujte podle těchto kroků k instalaci NodeJs 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 Alchemy Dashboard (opens in a new tab) a vytvořte novou aplikaci a pro svou síť zvolte Sepolia (nebo jakýkoli jiný testnet).
2. Požádejte o ETH z faucetu Sepolia
Chcete-li obdržet ETH, postupujte podle pokynů na faucetu Sepolia od Alchemy (opens in a new tab). Ujistěte se, že jste zadali svou adresu Ethereum na síti Sepolia (z MetaMasku) a ne jinou síť. Po provedení pokynů si zkontrolujte, že jste ETH obdrželi do své peněženky.
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ál pro Mac) a přejděte do něj:
1mkdir sendtx-example2cd sendtx-example4. Nainstalujte si Alchemy Web3 (nebo jakoukoli web3 knihovnu)
Spusťte následující příkaz ve svém projektovém adresáři, abyste si nainstalovali 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).
1npm install @alch/alchemy-web35. Nainstalujte si dotenv
Použijeme soubor .env k bezpečnému uložení našeho klíče API a soukromého klíče.
1npm install dotenv --save6. Vytvořte soubor .env
Vytvořte soubor .env ve svém projektovém adresáři a přidejte následující (nahraďte "your-api-url" a "your-private-key")
- Chcete-li najít adresu URL vašeho Alchemy API, přejděte na stránku s podrobnostmi aplikace, kterou jste právě vytvořili na svém ovládacím panelu, klikněte na „View Key“ v pravém horním rohu a zkopírujte URL adresu HTTP.
- Chcete-li najít svůj soukromý klíč pomocí MetaMasku, podívejte se na tohoto průvodce (opens in a new tab).
1API_URL = "your-api-url"2PRIVATE_KEY = "your-private-key"<code>.env</code>! Prosím, ujistěte se, že nikdy nesdílíte ani nezveřejňujete svůj soubor <code>.env</code> s nikým, protože tím ohrožujete svá tajemství. Pokud používáte správu verzí, přidejte svůj soubor <code>.env</code> do souboru gitignore.7. Vytvořte soubor sendTx.js
Skvělé, teď, když máme svá citlivá data chráněná v souboru .env, pojďme začít kódovat. Jako 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:
1async function main() {2 require('dotenv').config();3 const { API_URL, PRIVATE_KEY } = process.env;4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");5 const web3 = createAlchemyWeb3(API_URL);6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: nahraďte tuto adresu vaší veřejnou adresou78 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce se začíná počítat od 0910 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // adresa faucetu pro vrácení ETH12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // volitelné datové pole pro odeslání zprávy nebo spuštění chytrého kontraktu16 };1718 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);1920 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {21 if (!error) {22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");23 } else {24 console.log("❗Something went wrong while submitting your transaction:", error)25 }26 });27}2829main();Zobrazit všeNezapomeňte nahradit adresu na řádku 6 vaší vlastní veřejnou adresou.
Než se pustíme do spouštění tohoto kódu, promluvme si 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 (opens in a new tab). 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 specifikovatto: Toto je adresa, na kterou chceme poslat ETH. V tomto případě posíláme ETH zpět do faucetu Sepolia (opens in a new tab), od kterého jsme je původně požadovali.value: Toto je částka, kterou si přejeme poslat, specifikovaná ve Wei, kde 10^18 Wei = 1 ETHgas: Existuje mnoho způsobů, jak určit správné množství gasu, které má vaše transakce obsahovat. Alchemy má dokonce webhook pro cenu gasu (opens in a new tab), který vás upozorní, když cena gasu klesne pod určitou hranici. U transakcí na mainnetu je dobrým zvykem zkontrolovat odhadce poplatků za gas, jako je ETH Gas Station (opens in a new tab), abyste určili správné množství gasu, které má transakce obsahovat. 21000 je minimální množství gasu, které operace na Ethereu spotřebuje, takže abychom zajistili, že se naše transakce provede, zadáme zde 30000.nonce: viz definice nonce výše. Nonce se začíná počítat od nuly.- [VOLITELNÉ] data: Používá se k odeslání dodatečný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 metodusignTransactions našímPRIVATE_KEYsendSignedTransaction: 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 v Ethereu odeslat.
- Převod zůstatku: Odešlete ETH z jedné adresy na druhou. Není vyžadováno žádné datové pole, avšak pokud byste chtěli spolu s transakcí poslat další informace, můžete je v tomto poli uvést ve formátu HEX.
- Řekněme například, že bychom chtěli zapsat haš dokumentu IPFS do řetězce Ethereum, abychom mu dali neměnné časové razítko. Naše datové pole by pak mělo vypadat takto: data:
web3.utils.toHex('haš IPFS'). A teď se kdokoli může dotázat řetězce a zjistit, kdy byl daný dokument přidán.
- Řekněme například, že bychom chtěli zapsat haš dokumentu IPFS do řetězce Ethereum, abychom mu dali neměnné časové razítko. Naše datové pole by pak mělo vypadat takto: data:
- Transakce chytrého kontraktu: Spusťte nějaký kód chytrého kontraktu na řetězci. V tomto případě by datové pole mělo obsahovat chytrou funkci, kterou si přejete spustit, spolu s jakýmikoli parametry.
- Praktický příklad najdete v kroku 8 tohoto návodu Hello World (opens in a new tab).
8. Spusťte kód pomocí node sendTx.js
Vraťte se do svého terminálu nebo příkazového řádku a spusťte:
1node sendTx.js9. Zobrazte svou transakci v Mempoolu
Otevřete stránku Mempool (opens in a new tab) na svém ovládacím panelu Alchemy a filtrujte podle aplikace, kterou jste vytvořili, abyste našli svou transakci. Zde můžeme sledovat přechod naší transakce z čekajícího stavu do stavu vytěženého (v případě úspěchu) nebo zahozeného stavu (v případě neúspěchu). Ujistěte se, že je nastaveno na „All“, 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 své transakce, jakmile ji najdete, vyberte haš transakce, který by vás měl přenést do zobrazení, které vypadá takto:
Odtud si můžete prohlédnout svou transakci na Etherscanu kliknutím na červeně zakroužkovanou ikonu!
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) společnosti Alchemy!
Původně publikováno na https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab)
Stránka naposledy aktualizována: 18. prosince 2025
