Einen Smart Contract aus JavaScript aufrufen
In diesem Tutorial werden wir sehen, wie man eine Smart Contract-Funktion aus JavaScript aufruft. Zuerst lesen wir den Zustand eines Smart Contracts (z. B. das Guthaben eines ERC20-Inhabers), dann ändern wir den Zustand der Blockchain, indem wir eine Token-Überweisung durchführen. Sie sollten bereits damit vertraut sein, eine JS-Umgebung für die Interaktion mit der Blockchain einzurichten.
Für dieses Beispiel werden wir mit dem DAI-Token spielen. Zu Testzwecken werden wir die Blockchain mit ganache-cli forken und eine Adresse entsperren, die bereits über viele DAI verfügt:
ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81Um mit einem Smart Contract zu interagieren, benötigen wir dessen Adresse und ABI:
1const ERC20TransferABI = [2 {3 constant: false,4 inputs: [5 {6 name: "_to",7 type: "address",8 },9 {10 name: "_value",11 type: "uint256",12 },13 ],14 name: "transfer",15 outputs: [16 {17 name: "",18 type: "bool",19 },20 ],21 payable: false,22 stateMutability: "nonpayable",23 type: "function",24 },25 {26 constant: true,27 inputs: [28 {29 name: "_owner",30 type: "address",31 },32 ],33 name: "balanceOf",34 outputs: [35 {36 name: "balance",37 type: "uint256",38 },39 ],40 payable: false,41 stateMutability: "view",42 type: "function",43 },44]4546const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"Alle anzeigenFür dieses Projekt haben wir die komplette ERC20-ABI auf die Funktionen balanceOf und transfer reduziert, aber Sie können die vollständige ERC20-ABI hier finden (opens in a new tab).
Anschließend müssen wir unseren Smart Contract instanziieren:
1const web3 = new Web3("http://localhost:8545")23const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)Wir werden auch zwei Adressen einrichten:
- diejenige, die die Überweisung empfängt, und
- diejenige, die wir bereits entsperrt haben und die sie senden wird:
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"Im nächsten Teil rufen wir die Funktion balanceOf auf, um die aktuelle Menge an Token abzurufen, die beide Adressen halten.
Call: Einen Wert aus einem Smart Contract lesen
Das erste Beispiel ruft eine „konstante“ Methode auf und führt deren Smart-Contract-Methode in der EVM aus, ohne eine Transaktion zu senden. Dafür lesen wir das ERC20-Guthaben einer Adresse aus. Lesen Sie unseren Artikel über ERC20-Token.
Sie können auf die Methoden eines instanziierten Smart Contracts, für den Sie die ABI bereitgestellt haben, wie folgt zugreifen: yourContract.methods.methodname. Durch die Verwendung der Funktion call erhalten Sie das Ergebnis der Ausführung der Funktion.
1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {2 if (err) {3 console.log("An error occurred", err)4 return5 }6 console.log("The balance is: ", res)7})Denken Sie daran, dass DAI ERC20 18 Dezimalstellen hat, was bedeutet, dass Sie 18 Nullen entfernen müssen, um den korrekten Betrag zu erhalten. uint256 werden als Strings zurückgegeben, da JavaScript keine großen numerischen Werte verarbeitet. Wenn Sie sich nicht sicher sind, wie Sie mit großen Zahlen in JS umgehen sollen, lesen Sie unser Tutorial über bignumber.js (opens in a new tab).
Send: Eine Transaktion an eine Smart-Contract-Funktion senden
Für das zweite Beispiel rufen wir die Transfer-Funktion des DAI-Smart-Contracts auf, um 10 DAI an unsere zweite Adresse zu senden. Die Transfer-Funktion akzeptiert zwei Parameter: die Empfängeradresse und die Menge der zu überweisenden Token:
1daiToken.methods2 .transfer(receiverAddress, "100000000000000000000")3 .send({ from: senderAddress }, function (err, res) {4 if (err) {5 console.log("An error occurred", err)6 return7 }8 console.log("Hash of the transaction: " + res)9 })Alle anzeigenDie Call-Funktion gibt den Hash der Transaktion zurück, die in die Blockchain gemint wird. Auf Ethereum sind Transaktions-Hashes vorhersehbar – so können wir den Hash der Transaktion erhalten, bevor sie ausgeführt wird (erfahren Sie hier, wie Hashes berechnet werden (opens in a new tab)).
Da die Funktion die Transaktion nur an die Blockchain übermittelt, können wir das Ergebnis erst sehen, wenn wir wissen, wann sie gemint und in die Blockchain aufgenommen wurde. Im nächsten Tutorial werden wir lernen, wie man auf die Ausführung einer Transaktion auf der Blockchain wartet, indem man ihren Hash kennt (opens in a new tab).
Letzte Aktualisierung der Seite: 21. Oktober 2025