Senden von Transaktionen mit Web3
Dies ist ein anfängerfreundlicher Leitfaden zum Senden von Ethereum-Transaktionen mit Web3. Es gibt drei Hauptschritte, um eine Transaktion an die Ethereum-Blockchain zu senden: Erstellen, Signieren und Übertragen. Wir werden alle drei durchgehen und hoffentlich alle Ihre Fragen beantworten! In diesem Tutorial verwenden wir Alchemy (opens in a new tab), um unsere Transaktionen an die Ethereum-Blockchain zu senden. Sie können hier ein kostenloses Alchemy-Konto erstellen (opens in a new tab).
HINWEIS: Dieser Leitfaden ist für das Signieren Ihrer Transaktionen im Backend Ihrer App gedacht. Wenn Sie das Signieren Ihrer Transaktionen im Frontend integrieren möchten, lesen Sie mehr über die Integration von Web3 mit einem Browser-Anbieter (opens in a new tab).
Die Grundlagen
Wie die meisten Blockchain-Entwickler zu Beginn haben Sie vielleicht recherchiert, wie man eine Transaktion sendet (etwas, das eigentlich ziemlich einfach sein sollte), und sind auf eine Fülle von Leitfäden gestoßen, die alle etwas anderes sagen und Sie ein wenig überfordert und verwirrt zurücklassen. Wenn es Ihnen so geht, machen Sie sich keine Sorgen; das ging uns allen irgendwann so! Bevor wir also anfangen, lassen Sie uns ein paar Dinge klarstellen:
1. Alchemy speichert Ihre Private-Keys nicht
- Das bedeutet, dass Alchemy keine Transaktionen in Ihrem Namen signieren und senden kann. Der Grund dafür sind Sicherheitszwecke. Alchemy wird Sie niemals bitten, Ihren Private-Key weiterzugeben, und Sie sollten Ihren Private-Key niemals an einen gehosteten Blockchain-Knoten (oder überhaupt an jemanden) weitergeben.
- Sie können mit der Kern-API von Alchemy von der Blockchain lesen, aber um darauf zu schreiben, müssen Sie etwas anderes verwenden, um Ihre Transaktionen zu signieren, bevor Sie sie über Alchemy senden (dies gilt auch für jeden anderen Blockchain-Knoten-Dienst).
2. Was ist ein „Signer“?
- Signer signieren Transaktionen für Sie mit Ihrem Private-Key. In diesem Tutorial verwenden wir Alchemy Web3 (opens in a new tab), um unsere Transaktion zu signieren, aber Sie könnten auch jede andere Web3-Bibliothek verwenden.
- Im Frontend wäre ein gutes Beispiel für einen Signer MetaMask (opens in a new tab), das Transaktionen in Ihrem Namen signiert und sendet.
3. Warum muss ich meine Transaktionen signieren?
- Jeder Benutzer, der eine Transaktion im Ethereum-Netzwerk senden möchte, muss die Transaktion (mit seinem Private-Key) signieren, um zu validieren, dass der Ursprung der Transaktion derjenige ist, der er vorgibt zu sein.
- Es ist extrem wichtig, diesen Private-Key zu schützen, da der Zugriff darauf die volle Kontrolle über Ihr Ethereum-Konto gewährt und es Ihnen (oder jedem mit Zugriff) ermöglicht, Transaktionen in Ihrem Namen durchzuführen.
4. Wie schütze ich meinen Private-Key?
- Es gibt viele Möglichkeiten, Ihren Private-Key zu schützen und ihn zum Senden von Transaktionen zu verwenden. In diesem Tutorial verwenden wir eine
.env-Datei. Sie könnten jedoch auch einen separaten Anbieter verwenden, der Private-Keys speichert, eine Keystore-Datei nutzen oder andere Optionen wählen.
5. Was ist der Unterschied zwischen eth_sendTransaction und eth_sendRawTransaction?
eth_sendTransaction und eth_sendRawTransaction sind beides Ethereum-API-Funktionen, die eine Transaktion an das Ethereum-Netzwerk übertragen, damit sie einem zukünftigen Block hinzugefügt wird. Sie unterscheiden sich darin, wie sie das Signieren der Transaktionen handhaben.
eth_sendTransaction(opens in a new tab) wird zum Senden unsignierter Transaktionen verwendet, was bedeutet, dass der Blockchain-Knoten, an den Sie senden, Ihren Private-Key verwalten muss, damit er die Transaktion signieren kann, bevor er sie an die Blockchain überträgt. Da Alchemy die Private-Keys der Benutzer nicht speichert, wird diese Methode nicht unterstützt.eth_sendRawTransaction(opens in a new tab) wird verwendet, um Transaktionen zu übertragen, die bereits signiert wurden. Das bedeutet, dass Sie zuerstsignTransaction(tx, private_key)(opens in a new tab) verwenden müssen und dann das Ergebnis aneth_sendRawTransactionübergeben.
Bei der Verwendung von Web3 wird auf eth_sendRawTransaction zugegriffen, indem die Funktion web3.eth.sendSignedTransaction (opens in a new tab) aufgerufen wird.
Dies ist es, was wir in diesem Tutorial verwenden werden.
6. Was ist die Web3-Bibliothek?
- Web3.js ist eine Wrapper-Bibliothek um die Standard-JSON-RPC-Aufrufe, die in der Ethereum-Entwicklung sehr häufig verwendet wird.
- Es gibt viele Web3-Bibliotheken für verschiedene Sprachen. In diesem Tutorial verwenden wir Alchemy Web3 (opens in a new tab), das in JavaScript geschrieben ist. Sie können sich hier (opens in a new tab) andere Optionen wie ethers.js (opens in a new tab) ansehen.
Okay, da wir nun einige dieser Fragen geklärt haben, machen wir mit dem Tutorial weiter. Sie können jederzeit Fragen im Alchemy-Discord (opens in a new tab) stellen!
7. Wie sendet man sichere, gasoptimierte und private Transaktionen?
- Alchemy verfügt über eine Suite von Transact-APIs (opens in a new tab). Sie können diese verwenden, um verstärkte Transaktionen zu senden, Transaktionen vorab zu simulieren, private Transaktionen zu senden und gasoptimierte Transaktionen zu senden.
- Sie können auch die Notify-API (opens in a new tab) verwenden, um benachrichtigt zu werden, wenn Ihre Transaktion aus dem Mempool gezogen und der Blockchain hinzugefügt wird.
HINWEIS: Dieser Leitfaden erfordert ein Alchemy-Konto, eine Ethereum-Adresse oder ein MetaMask-Wallet, Node.js und ein installiertes npm. Wenn nicht, befolgen Sie diese Schritte:
- Erstellen Sie ein kostenloses Alchemy-Konto (opens in a new tab)
- Erstellen Sie ein MetaMask-Konto (opens in a new tab) (oder besorgen Sie sich eine Ethereum-Adresse)
- Befolgen Sie diese Schritte, um Node.js und NPM zu installieren (opens in a new tab)
Schritte zum Senden Ihrer Transaktion
1. Erstellen Sie eine Alchemy-App im Sepolia-Testnet
Navigieren Sie zu Ihrem Alchemy-Dashboard (opens in a new tab) und erstellen Sie eine neue App, wobei Sie Sepolia (oder ein anderes Testnet) für Ihr Netzwerk auswählen.
2. Fordern Sie ETH vom Sepolia-Faucet an
Befolgen Sie die Anweisungen auf dem Alchemy Sepolia-Faucet (opens in a new tab), um ETH zu erhalten. Stellen Sie sicher, dass Sie Ihre Sepolia-Ethereum-Adresse (von MetaMask) und nicht die eines anderen Netzwerks angeben. Nachdem Sie die Anweisungen befolgt haben, überprüfen Sie, ob Sie die ETH in Ihrem Wallet erhalten haben.
3. Erstellen Sie ein neues Projektverzeichnis und wechseln Sie mit cd dorthin
Erstellen Sie über die Befehlszeile (Terminal bei Macs) ein neues Projektverzeichnis und navigieren Sie dorthin:
1mkdir sendtx-example2cd sendtx-example4. Installieren Sie Alchemy Web3 (oder eine beliebige Web3-Bibliothek)
Führen Sie den folgenden Befehl in Ihrem Projektverzeichnis aus, um Alchemy Web3 (opens in a new tab) zu installieren:
Hinweis: Wenn Sie die ethers.js-Bibliothek verwenden möchten, befolgen Sie die Anweisungen hier (opens in a new tab).
1npm install @alch/alchemy-web35. Installieren Sie dotenv
Wir verwenden eine .env-Datei, um unseren API-Schlüssel und Private-Key sicher zu speichern.
1npm install dotenv --save6. Erstellen Sie die .env-Datei
Erstellen Sie eine .env-Datei in Ihrem Projektverzeichnis und fügen Sie Folgendes hinzu (ersetzen Sie „your-api-url“ und „your-private-key“):
- Um Ihre Alchemy-API-URL zu finden, navigieren Sie zur App-Detailseite der App, die Sie gerade in Ihrem Dashboard erstellt haben, klicken Sie oben rechts auf „View Key“ und kopieren Sie die HTTP-URL.
- Um Ihren Private-Key mit MetaMask zu finden, lesen Sie diesen Leitfaden (opens in a new tab).
1API_URL = "your-api-url"2PRIVATE_KEY = "your-private-key".env nicht! Bitte stellen Sie sicher, dass Sie Ihre .env-Datei niemals mit jemandem teilen oder offenlegen, da Sie dadurch Ihre Geheimnisse kompromittieren. Wenn Sie eine Versionskontrolle verwenden, fügen Sie Ihre .env zu einer gitignore-Datei hinzu.7. Erstellen Sie die Datei sendTx.js
Großartig, da wir nun unsere sensiblen Daten in einer .env-Datei geschützt haben, fangen wir an zu programmieren. Für unser Beispiel zum Senden einer Transaktion senden wir ETH zurück an das Sepolia-Faucet.
Erstellen Sie eine Datei sendTx.js, in der wir unsere Beispieltransaktion konfigurieren und senden werden, und fügen Sie die folgenden Codezeilen hinzu:
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: replace this address with your own public address78 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0910 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // optional data field to send message or execute smart contract16 };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();Alle anzeigenStellen Sie sicher, dass Sie die Adresse in Zeile 6 durch Ihre eigene öffentliche Adresse ersetzen.
Bevor wir nun dazu übergehen, diesen Code auszuführen, lassen Sie uns über einige der Komponenten hier sprechen.
nonce: Die Nonce-Spezifikation wird verwendet, um die Anzahl der von Ihrer Adresse gesendeten Transaktionen zu verfolgen. Wir benötigen dies aus Sicherheitsgründen und um Replay-Angriffe (opens in a new tab) zu verhindern. Um die Anzahl der von Ihrer Adresse gesendeten Transaktionen zu erhalten, verwenden wir getTransactionCount (opens in a new tab).transaction: Das Transaktionsobjekt hat einige Aspekte, die wir spezifizieren müssen:to: Dies ist die Adresse, an die wir ETH senden möchten. In diesem Fall senden wir ETH zurück an das Sepolia-Faucet (opens in a new tab), von dem wir sie ursprünglich angefordert haben.value: Dies ist der Betrag, den wir senden möchten, angegeben in Wei, wobei 10^18 Wei = 1 ETH.gas: Es gibt viele Möglichkeiten, die richtige Menge an Gas zu bestimmen, die Ihrer Transaktion beigefügt werden soll. Alchemy hat sogar einen Gaspreis-Webhook (opens in a new tab), der Sie benachrichtigt, wenn der Gaspreis unter einen bestimmten Schwellenwert fällt. Für Mainnet-Transaktionen ist es eine gute Praxis, einen Gas-Schätzer wie ETH Gas Station (opens in a new tab) zu überprüfen, um die richtige Menge an Gas zu bestimmen. 21000 ist die Mindestmenge an Gas, die eine Operation auf Ethereum verbraucht. Um sicherzustellen, dass unsere Transaktion ausgeführt wird, geben wir hier 30000 an.nonce: Siehe obige Nonce-Definition. Nonce beginnt bei Null zu zählen.- [OPTIONAL] data: Wird zum Senden zusätzlicher Informationen mit Ihrer Überweisung oder zum Aufrufen eines Smart Contracts verwendet. Für Guthabenüberweisungen nicht erforderlich, siehe Hinweis unten.
signedTx: Um unser Transaktionsobjekt zu signieren, verwenden wir die MethodesignTransactionmit unseremPRIVATE_KEY.sendSignedTransaction: Sobald wir eine signierte Transaktion haben, können wir sie mitsendSignedTransactionabsenden, damit sie in einen nachfolgenden Block aufgenommen wird.
Ein Hinweis zu data Es gibt zwei Hauptarten von Transaktionen, die in Ethereum gesendet werden können.
- Guthabenüberweisung: Senden Sie ETH von einer Adresse an eine andere. Es ist kein Datenfeld erforderlich. Wenn Sie jedoch zusätzliche Informationen zusammen mit Ihrer Transaktion senden möchten, können Sie diese Informationen im HEX-Format in dieses Feld aufnehmen.
- Nehmen wir zum Beispiel an, wir wollten den Hash eines IPFS-Dokuments in die Ethereum-Blockchain schreiben, um ihm einen unveränderlichen Zeitstempel zu geben. Unser Datenfeld sollte dann so aussehen: data:
web3.utils.toHex(‘IPFS hash‘). Und jetzt kann jeder die Blockchain abfragen und sehen, wann dieses Dokument hinzugefügt wurde.
- Nehmen wir zum Beispiel an, wir wollten den Hash eines IPFS-Dokuments in die Ethereum-Blockchain schreiben, um ihm einen unveränderlichen Zeitstempel zu geben. Unser Datenfeld sollte dann so aussehen: data:
- Smart-Contract-Transaktion: Führen Sie Smart-Contract-Code auf der Blockchain aus. In diesem Fall sollte das Datenfeld die Smart-Funktion, die Sie ausführen möchten, zusammen mit allen Parametern enthalten.
- Ein praktisches Beispiel finden Sie in Schritt 8 dieses Hello World-Tutorials (opens in a new tab).
8. Führen Sie den Code mit node sendTx.js aus
Navigieren Sie zurück zu Ihrem Terminal oder Ihrer Befehlszeile und führen Sie Folgendes aus:
1node sendTx.js9. Sehen Sie Ihre Transaktion im Mempool
Öffnen Sie die Mempool-Seite (opens in a new tab) in Ihrem Alchemy-Dashboard und filtern Sie nach der von Ihnen erstellten App, um Ihre Transaktion zu finden. Hier können wir beobachten, wie unsere Transaktion vom Status „ausstehend“ (pending) in den Status „gemint“ (mined) übergeht (falls erfolgreich) oder in den Status „verworfen“ (dropped), falls sie nicht erfolgreich war. Stellen Sie sicher, dass Sie die Einstellung auf „All“ belassen, damit Sie „geminte“, „ausstehende“ und „verworfene“ Transaktionen erfassen. Sie können auch nach Ihrer Transaktion suchen, indem Sie nach Transaktionen suchen, die an die Adresse 0x31b98d14007bdee637298086988a0bbd31184523 gesendet wurden.
Um die Details Ihrer Transaktion anzuzeigen, sobald Sie sie gefunden haben, wählen Sie den Transaktions-Hash aus, der Sie zu einer Ansicht führen sollte, die wie folgt aussieht:
Von dort aus können Sie Ihre Transaktion auf Etherscan anzeigen, indem Sie auf das rot eingekreiste Symbol klicken!
Juhuuu! Sie haben gerade Ihre erste Ethereum-Transaktion mit Alchemy gesendet 🎉
Für Feedback und Vorschläge zu diesem Leitfaden senden Sie bitte eine Nachricht an Elan im Discord (opens in a new tab) von Alchemy!
Ursprünglich veröffentlicht unter https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab)
Letzte Aktualisierung der Seite: 3. März 2026
