Wysyłanie transakcji za pomocą Web3
To jest przyjazny dla początkujących przewodnik po wysyłaniu transakcji Ethereum za pomocą Web3. Istnieją trzy główne kroki, aby wysłać transakcję do blockchaina Ethereum: tworzenie, podpisywanie i rozgłaszanie. Omówimy wszystkie trzy, mając nadzieję, że odpowiemy na wszelkie pytania, jakie możesz mieć! W tym samouczku będziemy używać Alchemy (opens in a new tab), aby wysyłać nasze transakcje do łańcucha Ethereum. Możesz utworzyć darmowe konto Alchemy tutaj (opens in a new tab).
UWAGA: Ten przewodnik dotyczy podpisywania transakcji w backendzie aplikacji. Jeśli chcesz zintegrować podpisywanie transakcji we frontendzie, sprawdź integrację Web3 z dostawcą przeglądarki (opens in a new tab).
Podstawy
Podobnie jak większość deweloperów blockchain na początku swojej drogi, być może szukałeś informacji o tym, jak wysłać transakcję (coś, co powinno być całkiem proste) i natknąłeś się na mnóstwo przewodników, z których każdy mówił co innego, co sprawiło, że czułeś się nieco przytłoczony i zdezorientowany. Jeśli jesteś w takiej sytuacji, nie martw się; wszyscy kiedyś byliśmy! Zanim więc zaczniemy, wyjaśnijmy sobie kilka kwestii:
1. Alchemy nie przechowuje Twoich kluczy prywatnych
- Oznacza to, że Alchemy nie może podpisywać i wysyłać transakcji w Twoim imieniu. Dzieje się tak ze względów bezpieczeństwa. Alchemy nigdy nie poprosi Cię o udostępnienie Twojego klucza prywatnego i nigdy nie powinieneś go udostępniać hostowanemu węzłowi (ani nikomu innemu).
- Możesz odczytywać dane z blockchaina za pomocą podstawowego API Alchemy, ale aby do niego zapisywać, musisz użyć czegoś innego do podpisania swoich transakcji przed wysłaniem ich przez Alchemy (to samo dotyczy każdej innej usługi węzłów).
2. Czym jest „signer”?
- Signerzy podpisują dla Ciebie transakcje, używając Twojego klucza prywatnego. W tym samouczku do podpisania naszej transakcji użyjemy Alchemy web3 (opens in a new tab), ale można również użyć dowolnej innej biblioteki web3.
- We frontendzie dobrym przykładem signera jest MetaMask (opens in a new tab), który podpisuje i wysyła transakcje w Twoim imieniu.
3. Dlaczego muszę podpisywać swoje transakcje?
- Każdy użytkownik, który chce wysłać transakcję w sieci Ethereum, musi ją podpisać (używając swojego klucza prywatnego), aby zweryfikować, że pochodzenie transakcji jest zgodne z deklarowanym.
- Niezwykle ważne jest, aby chronić ten klucz prywatny, ponieważ posiadanie do niego dostępu daje pełną kontrolę nad kontem Ethereum, pozwalając Tobie (lub każdemu, kto ma dostęp) na wykonywanie transakcji w Twoim imieniu.
4. Jak chronić mój klucz prywatny?
- Istnieje wiele sposobów na ochronę klucza prywatnego i używanie go do wysyłania transakcji. W tym samouczku będziemy używać pliku
.env. Można jednak również skorzystać z osobnego dostawcy, który przechowuje klucze prywatne, użyć pliku keystore lub innych opcji.
5. Jaka jest różnica między eth_sendTransaction a eth_sendRawTransaction?
eth_sendTransaction i eth_sendRawTransaction to funkcje API Ethereum, które rozgłaszają transakcję w sieci Ethereum, aby została ona dodana do przyszłego bloku. Różnią się one sposobem obsługi podpisywania transakcji.
eth_sendTransaction(opens in a new tab) służy do wysyłania niepodpisanych transakcji, co oznacza, że węzeł, do którego je wysyłasz, musi zarządzać Twoim kluczem prywatnym, aby mógł podpisać transakcję przed jej rozgłoszeniem w łańcuchu. Ponieważ Alchemy nie przechowuje kluczy prywatnych użytkowników, nie obsługuje tej metody.eth_sendRawTransaction(opens in a new tab) służy do rozgłaszania transakcji, które zostały już podpisane. Oznacza to, że najpierw musisz użyćsignTransaction(tx, private_key)(opens in a new tab), a następnie przekazać wynik doeth_sendRawTransaction.
Podczas korzystania z web3 dostęp do eth_sendRawTransaction uzyskuje się poprzez wywołanie funkcji web3.eth.sendSignedTransaction (opens in a new tab).
Tego właśnie będziemy używać w tym samouczku.
6. Czym jest biblioteka web3?
- Web3.js jest biblioteką opakowującą standardowe wywołania JSON-RPC, która jest dość często używana w deweloperce Ethereum.
- Istnieje wiele bibliotek web3 dla różnych języków. W tym samouczku będziemy używać Alchemy Web3 (opens in a new tab), który jest napisany w języku JavaScript. Możesz sprawdzić inne opcje tutaj (opens in a new tab), takie jak ethers.js (opens in a new tab).
OK, teraz, gdy odpowiedzieliśmy na kilka pytań, przejdźmy do samouczka. W każdej chwili możesz zadawać pytania na discordzie (opens in a new tab) Alchemy!
7. Jak wysyłać bezpieczne, zoptymalizowane pod kątem opłat za gaz i prywatne transakcje?
- Alchemy ma zestaw interfejsów API Transact (opens in a new tab). Możesz ich używać do wysyłania wzmocnionych transakcji, symulowania transakcji przed ich wykonaniem, wysyłania transakcji prywatnych oraz wysyłania transakcji zoptymalizowanych pod względem opłat za gaz.
- Możesz również użyć API Notify (opens in a new tab), aby otrzymywać powiadomienia, gdy Twoja transakcja zostanie pobrana z mempoola i dodana do łańcucha.
UWAGA: Ten przewodnik wymaga posiadania konta Alchemy, adresu Ethereum lub portfela MetaMask oraz zainstalowanych NodeJs i npm. Jeśli nie, wykonaj następujące kroki:
- Utwórz darmowe konto Alchemy (opens in a new tab)
- Utwórz konto MetaMask (opens in a new tab) (lub uzyskaj adres Ethereum)
- Wykonaj te kroki, aby zainstalować NodeJs i NPM (opens in a new tab)
Kroki wysyłania transakcji
1. Utwórz aplikację Alchemy w sieci testowej Sepolia
Przejdź do swojego Panelu Alchemy (opens in a new tab) i utwórz nową aplikację, wybierając Sepolia (lub dowolną inną sieć testową) jako swoją sieć.
2. Poproś o ETH z kranu Sepolia
Postępuj zgodnie z instrukcjami na stronie kranu Sepolia od Alchemy (opens in a new tab), aby otrzymać ETH. Upewnij się, że podajesz swój adres Ethereum Sepolia (z MetaMask), a nie z innej sieci. Po wykonaniu instrukcji sprawdź, czy otrzymałeś ETH w swoim portfelu.
3. Utwórz nowy katalog projektu i przejdź do niego za pomocą cd
Utwórz nowy katalog projektu z wiersza poleceń (terminal na komputerach Mac) i przejdź do niego:
1mkdir sendtx-example2cd sendtx-example4. Zainstaluj Alchemy Web3 (lub dowolną bibliotekę web3)
Uruchom następujące polecenie w katalogu projektu, aby zainstalować Alchemy Web3 (opens in a new tab):
Uwaga, jeśli chcesz użyć biblioteki ethers.js, postępuj zgodnie z instrukcjami podanymi tutaj (opens in a new tab).
1npm install @alch/alchemy-web35. Zainstaluj dotenv
Użyjemy pliku .env do bezpiecznego przechowywania naszego klucza API i klucza prywatnego.
1npm install dotenv --save6. Utwórz plik .env
Utwórz plik .env w katalogu projektu i dodaj następującą treść (zastępując „your-api-url” i „your-private-key”):
- Aby znaleźć adres URL interfejsu API Alchemy, przejdź do strony szczegółów aplikacji, którą właśnie utworzyłeś w panelu, kliknij „View Key” w prawym górnym rogu i pobierz adres URL HTTP.
- Aby znaleźć swój klucz prywatny za pomocą MetaMask, zapoznaj się z tym przewodnikiem (opens in a new tab).
1API_URL = "your-api-url"2PRIVATE_KEY = "your-private-key".env! Upewnij się, że nigdy nie udostępniasz ani nie ujawniasz nikomu swojego pliku .env, ponieważ w ten sposób narażasz swoje poufne dane. Jeśli używasz kontroli wersji, dodaj swój plik .env do pliku gitignore.7. Utwórz plik sendTx.js
Świetnie, teraz, gdy nasze poufne dane są chronione w pliku .env, zacznijmy kodować. W naszym przykładzie wysyłania transakcji będziemy odsyłać ETH z powrotem do kranu Sepolia.
Utwórz plik sendTx.js, w którym skonfigurujemy i wyślemy naszą przykładową transakcję, i dodaj do niego następujące linie kodu:
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: zastąp ten adres swoim własnym adresem publicznym7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce zaczyna liczyć od 09
10 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // adres kranu, na który ma być zwrócony eth12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // opcjonalne pole danych do wysłania wiadomości lub wykonania smart kontraktu16 };17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {21 if (!error) {22 console.log("🎉 Hasz Twojej transakcji to: ", hash, "\n Sprawdź Mempool Alchemy, aby zobaczyć status swojej transakcji!");23 } else {24 console.log("❗Coś poszło nie tak podczas przesyłania transakcji:", error)25 }26 });27}28
29main();Pamiętaj, aby zastąpić adres w wierszu 6 swoim własnym adresem publicznym.
Zanim przejdziemy do uruchomienia tego kodu, omówmy kilka jego komponentów.
nonce: Specyfikacja nonce służy do śledzenia liczby transakcji wysłanych z Twojego adresu. Potrzebujemy tego ze względów bezpieczeństwa i aby zapobiegać atakom typu replay (opens in a new tab). Aby uzyskać liczbę transakcji wysłanych z Twojego adresu, używamy getTransactionCount (opens in a new tab).transaction: Obiekt transakcji ma kilka aspektów, które musimy określić.to: Jest to adres, na który chcemy wysłać ETH. W tym przypadku odsyłamy ETH z powrotem do kranu Sepolia (opens in a new tab), z którego pierwotnie je pozyskaliśmy.value: Jest to kwota, którą chcemy wysłać, określona w Wei, gdzie 10^18 Wei = 1 ETH.gas: Istnieje wiele sposobów na określenie odpowiedniej ilości gazu do uwzględnienia w transakcji. Alchemy ma nawet webhook ceny gazu (opens in a new tab), który powiadamia, gdy cena gazu spadnie poniżej określonego progu. W przypadku transakcji w sieci głównej Mainnet dobrą praktyką jest sprawdzanie estymatora gazu, takiego jak ETH Gas Station (opens in a new tab), w celu określenia właściwej ilości gazu do uwzględnienia. 21000 to minimalna ilość gazu, jaką zużyje operacja na Ethereum, więc aby zapewnić, że nasza transakcja zostanie wykonana, wpisujemy tutaj 30000.nonce: patrz definicja nonce powyżej. Nonce zaczyna liczyć od zera.- [OPCJONALNE] dane: Służy do wysyłania dodatkowych informacji wraz z transferem lub wywoływania smart kontraktu. Nie jest wymagane w przypadku transferów salda. Sprawdź uwagę poniżej.
signedTx: Aby podpisać nasz obiekt transakcji, użyjemy metodysignTransactionz naszymPRIVATE_KEY.sendSignedTransaction: Gdy mamy już podpisaną transakcję, możemy ją wysłać, aby została uwzględniona w kolejnym bloku, używającsendSignedTransaction.
Uwaga na temat danych Istnieją dwa główne typy transakcji, które można wysyłać w Ethereum.
- Transfer salda: Wyślij ETH z jednego adresu na drugi. Pole danych nie jest wymagane, jednak jeśli chcesz wysłać dodatkowe informacje wraz z transakcją, możesz je umieścić w tym polu w formacie HEX.
- Załóżmy na przykład, że chcemy zapisać hasz dokumentu IPFS w łańcuchu Ethereum, aby nadać mu niezmienny znacznik czasu. Nasze pole danych powinno wtedy wyglądać następująco:
web3.utils.toHex(‘hasz IPFS‘). I teraz każdy może odpytać łańcuch i zobaczyć, kiedy ten dokument został dodany.
- Załóżmy na przykład, że chcemy zapisać hasz dokumentu IPFS w łańcuchu Ethereum, aby nadać mu niezmienny znacznik czasu. Nasze pole danych powinno wtedy wyglądać następująco:
- Transakcja smart kontraktu: wykonanie kodu smart kontraktu w łańcuchu. W tym przypadku pole danych powinno zawierać inteligentną funkcję, którą chcesz wykonać, wraz z wszelkimi parametrami.
- Praktyczny przykład znajdziesz w kroku 8 tego samouczka „Witaj, świecie” (opens in a new tab).
8. Uruchom kod za pomocą node sendTx.js
Wróć do terminala lub wiersza poleceń i uruchom:
1node sendTx.js9. Zobacz swoją transakcję w Mempoolu
Otwórz stronę Mempool (opens in a new tab) w panelu Alchemy i filtruj według utworzonej aplikacji, aby znaleźć swoją transakcję. Tutaj możemy obserwować przejście naszej transakcji ze stanu oczekującego do stanu wydobycia (jeśli się powiedzie) lub do stanu porzucenia, jeśli się nie powiedzie. Upewnij się, że opcja jest ustawiona na „Wszystkie”, aby przechwycić transakcje „wydobyte”, „oczekujące” i „porzucone”. Możesz również wyszukać swoją transakcję, szukając transakcji wysłanych na adres 0x31b98d14007bdee637298086988a0bbd31184523.
Aby wyświetlić szczegóły transakcji po jej znalezieniu, wybierz jej hasz, co powinno przenieść Cię do widoku, który wygląda następująco:
Stamtąd możesz wyświetlić swoją transakcję w Etherscan, klikając ikonę zaznaczoną na czerwono!
Huraaa! Właśnie wysłałeś swoją pierwszą transakcję Ethereum za pomocą Alchemy 🎉
Aby uzyskać opinie i sugestie dotyczące tego przewodnika, wyślij wiadomość do Elan na Discordzie (opens in a new tab) Alchemy!
Oryginalnie opublikowano na stronie https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab)
Strona ostatnio zaktualizowana: 3 marca 2026
