Skip to Content
dApps

eth_call

Exécute immédiatement un nouvel appel de message sans créer de transaction sur la blockchain. Cette méthode sert à lire les données des contrats intelligents.


Paramètres

IndiceTypeDescription
0objectObjet d’appel de transaction
1stringNuméro ou balise de bloc (latest, earliest, pending)

Objet d’appel de transaction

ChampTypeObligatoireDescription
tostringOuiAdresse du contrat
datastringNonDonnées encodées de l’appel de fonction
fromstringNonAdresse de l’expéditeur (pour le contexte)
gasstringNonLimite de gas (hex)
gasPricestringNonPrix du gas (hex)
valuestringNonValeur en wei (hex)

Valeur de retour

string - Données renvoyées par l’appel (encodées en hexadécimal)


Exemple

Lire un solde ERC-20

// 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())

Lire le nom du contrat

// 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)

Utilisation d’ethers.js

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())

Erreurs

CodeMessageDescription
-32000Exécution annuléeAppel de contrat annulé
-32602Paramètres non validesParamètres d’appel non valides

Remarques

  • Cette méthode ne consomme pas de gas et ne modifie pas l’état
  • Le champ from est une adresse facultative, mais peut influer sur le résultat de certains contrats
  • Choisissez une balise de bloc adaptée à votre cas d’usage ; latest reflète le dernier bloc visible par le point de terminaison
  • Pour les interactions complexes avec des contrats, envisagez ethers.js ou web3.js

Les exemples d’adresses de jetons concernent Ethereum mainnet. Confirmez la chaîne et utilisez une adresse de compte complète de 20 octets avant d’encoder balanceOf.

Dernière mise à jour le