Skip to Content
dApps

eth_call

Führt sofort einen neuen Nachrichtenaufruf aus, ohne eine Transaktion auf der Blockchain zu erstellen. Dies wird zum Lesen von Daten aus Smart Contracts verwendet.


Parameter

IndexTypBeschreibung
0objectTransaktionsaufrufobjekt
1stringBlocknummer oder Tag (latest, earliest, pending)

Transaktionsaufrufobjekt

FeldTypErforderlichBeschreibung
tostringJaVertragsadresse
datastringNeinKodierte Funktionsaufrufdaten
fromstringNeinAbsenderadresse (als Kontext)
gasstringNeinGaslimit (hex)
gasPricestringNeinGaspreis (hex)
valuestringNeinWert in Wei (hex)

Rückgabe

string - Die Rückgabedaten des Aufrufs (hexkodiert)


Beispiel

ERC-20-Guthaben lesen

// balanceOf(address) selector: 0x70a08231 const address = '0xYourAddress...'.slice(2).padStart(64, '0') const data = '0x70a08231' + address const balance = await window.$onekey.ethereum.request({ method: 'eth_call', params: [{ to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC data: data }, 'latest'] }) console.log('Balance:', BigInt(balance).toString())

Vertragsnamen lesen

// name() selector: 0x06fdde03 const name = await window.$onekey.ethereum.request({ method: 'eth_call', params: [{ to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', data: '0x06fdde03' }, 'latest'] }) // Decode the result (ABI encoded string) // Decode `name` with your ABI library's string decoder. console.log('ABI-encoded contract name:', name)

Mit ethers.js verwenden

import { Contract, BrowserProvider } from 'ethers' const provider = new BrowserProvider(window.$onekey.ethereum) const contract = new Contract( '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', ['function balanceOf(address) view returns (uint256)'], provider ) const balance = await contract.balanceOf('0xYourAddress...') console.log('USDC Balance:', balance.toString())

Fehler

CodeNachrichtBeschreibung
-32000Ausführung rückgängig gemachtVertragsaufruf rückgängig gemacht
-32602Ungültige ParameterUngültige Aufrufparameter

Hinweise

  • Diese Methode verbraucht kein Gas und verändert keinen Zustand
  • Die from-Adresse ist optional, kann aber bei manchen Verträgen das Ergebnis beeinflussen
  • Wählen Sie ein für Ihren Anwendungsfall geeignetes Block-Tag; latest entspricht dem neuesten für den Endpunkt sichtbaren Block
  • Bei komplexen Vertragsinteraktionen empfiehlt sich ethers.js oder web3.js

Die Token-Adressbeispiele gelten für Ethereum Mainnet. Bestätigen Sie die Chain und setzen Sie eine vollständige Kontoadresse mit 20 Bytes ein, bevor Sie balanceOf kodieren.

Zuletzt aktualisiert am