Zum Hauptinhalt springen
Change page

Mit Smart Contracts interagieren

Sie müssen nicht immer Ihren eigenen Smart Contract schreiben und bereitstellen. Meistens möchten Sie als Entwickler mit Smart Contracts interagieren, die andere bereits im Ethereum-Netzwerk bereitgestellt haben.

Diese Seite behandelt die zwei grundlegenden Möglichkeiten, mit einem Smart Contract zu interagieren – das Lesen von Daten und das Schreiben von Daten – sowie die Werkzeuge, die Sie für beides benötigen.

Voraussetzungen

Sie sollten Folgendes verstehen:

Zwei Möglichkeiten, mit einem Smart Contract zu interagieren

Die Interaktion mit einem Smart Contract fällt in zwei Kategorien:

Aus einem Vertrag lesen

Das Lesen ist eine kostenlose Operation, die keine Transaktion erstellt und keinen Zustand auf der Blockchain ändert.

Wenn Sie aus einem Vertrag lesen, fragen Sie einfach Daten ab, die bereits existieren. Zum Beispiel:

  • Überprüfen eines ERC-20-Token-Guthabens
  • Lesen des aktuellen Preises von einer dezentralen Börse
  • Ermitteln des Besitzers eines NFT

Da Lesezugriffe den Zustand nicht verändern, kosten sie kein Gas und können von jedem durchgeführt werden, ohne ETH zu benötigen.

In einen Vertrag schreiben

Das Schreiben ist eine zustandsändernde Operation, die eine Transaktion erfordert und Gas kostet.

Wenn Sie in einen Vertrag schreiben, lösen Sie eine Funktion aus, die den Blockchain-Zustand ändert. Zum Beispiel:

  • Übertragen von Token
  • Tauschen von Token an einer dezentralen Börse
  • Prägen eines NFT

Das Schreiben erfordert immer:

  1. Ein externes Konto (Externally Owned Account, EOA) mit genügend ETH für Gas
  2. Eine Transaktion, die mit dem privaten Schlüssel des Kontos signiert ist
  3. Dass die Transaktion gemint und in einen Block aufgenommen wird

Mit Kontoabstraktion kann auch ein Smart-Contract-Konto Schreibvorgänge initiieren, und ein Paymaster kann das Gas im Namen des Benutzers übernehmen – ein EOA mit ETH ist also nicht zwingend erforderlich.

Vertrags-ABIs verstehen

Um mit einem Smart Contract zu interagieren, muss Ihre Anwendung wissen, was der Vertrag tun kann. Hier kommt die Application Binary Interface (ABI) ins Spiel.

Eine ABI ist ein JSON-Dokument, das Folgendes beschreibt:

  • Jede Funktion, die der Vertrag bereitstellt (Name, Eingaben, Ausgaben)
  • Jedes Ereignis, das der Vertrag auslösen kann
  • Wie Daten beim Kommunizieren mit dem Vertrag kodiert und dekodiert werden

Stellen Sie sich die ABI als Bedienungsanleitung des Vertrags vor – ohne sie weiß Ihre Anwendung nicht, welche Funktionen existieren oder welche Parameter sie erwarten.

Wo man die ABI eines Vertrags findet

  • Verifizierte Verträge auf Etherscan - Etherscan (öffnet in einem neuen Tab) stellt automatisch die ABI für verifizierten Quellcode bereit
  • Vom Entwickler - viele Projekte veröffentlichen ihre ABIs in ihrer Dokumentation oder in npm-Paketen
  • Aus dem Quellcode generieren - wenn Sie den Solidity-Quellcode haben, können Sie ihn kompilieren, um die ABI zu erstellen

Werkzeuge und Bibliotheken zur Interaktion mit Verträgen

Entwickler verwenden typischerweise eine JavaScript/TypeScript-Bibliothek, um von einer Web-App, einem Backend oder einem Skript aus mit Verträgen zu interagieren.

Client-Bibliotheken (JavaScript/TypeScript)

Backend-Bibliotheken

Beispiel: Lesen eines Token-Guthabens mit Viem

Beispiel: Senden einer Transaktion mit ethers.js

Ereignisse und Protokolle

Smart Contracts können Ereignisse auslösen, um zu signalisieren, dass etwas passiert ist. Ihre Anwendung kann auf diese Ereignisse lauschen, um in Echtzeit zu reagieren.

Transaktionen simulieren

Bevor Sie eine Transaktion senden, können Sie diese simulieren, um zu prüfen, ob sie erfolgreich wäre – und um ihren Rückgabewert zu sehen –, ohne Gas auszugeben. Dies ist nützlich, um Fehler frühzeitig zu erkennen und Ergebnisse im Voraus zu betrachten.

Die meisten Client-Bibliotheken unterstützen dies durch eth_call:

// Mit Viem
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

Wallets und Signieren

In einer dezentralen Anwendung (Dapp) übernimmt die Wallet des Benutzers (wie MetaMask, Rainbow oder WalletConnect) das Signieren. Sie verwalten private Schlüssel nicht direkt.

Wallet-Bibliotheken und Verbindungstools abstrahieren dies, sodass Sie sich auf die Entwicklung Ihrer Anwendungslogik konzentrieren können.

Weiterführende Literatur