Appeler un contrat intelligent depuis JavaScript
Dans ce tutoriel, nous verrons comment appeler une fonction de contrat intelligent à partir de JavaScript. La première étape consiste à lire l'état d'un contrat intelligent (par exemple, le solde d'un détenteur d'ERC20), puis nous modifierons l'état de la blockchain en effectuant un transfert de jeton. Vous devriez déjà être familiarisé avec la configuration d'un environnement JS pour interagir avec la blockchain.
Pour cet exemple, nous allons jouer avec le jeton DAI. À des fins de test, nous allons créer une fourche de la blockchain en utilisant ganache-cli et déverrouiller une adresse qui possède déjà beaucoup de DAI :
ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81Pour interagir avec un contrat intelligent, nous aurons besoin de son adresse et de son 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"Afficher toutPour ce projet, nous avons réduit l'ABI ERC20 complet pour ne conserver que les fonctions balanceOf et transfer, mais vous pouvez trouver l'ABI ERC20 complet ici (opens in a new tab).
Nous devons ensuite instancier notre contrat intelligent :
1const web3 = new Web3("http://localhost:8545")23const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)Nous allons également mettre en place deux adresses :
- celle qui recevra le transfert et
- celle déjà débloquée qui l'enverra :
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"Dans la partie suivante, nous allons appeler la fonction balanceOf pour récupérer la quantité actuelle de jetons que les deux adresses détiennent.
Appel : lecture d'une valeur à partir d'un contrat intelligent
Le premier exemple appelle une méthode « constante » et exécute sa méthode de contrat intelligent dans l'EVM sans envoyer de transaction. Pour cela, nous allons lire le solde ERC20 d'une adresse. Lisez notre article sur les jetons ERC20.
Vous pouvez accéder aux méthodes d'un contrat intelligent instancié pour lesquelles vous avez fourni l'ABI comme suit : yourContract.methods.methodname. En utilisant la fonction call, vous recevrez le résultat de l'exécution de la fonction.
1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {2 if (err) {3 console.log("Une erreur s'est produite", err)4 return5 }6 console.log("Le solde est : ", res)7})N'oubliez pas que le DAI ERC20 a 18 décimales, ce qui signifie que vous devez supprimer 18 zéros pour obtenir le montant correct. Les uint256 sont retournés sous forme de chaînes de caractères, car JavaScript ne gère pas les grandes valeurs numériques. Si vous n'êtes pas sûr de comment gérer les grands nombres en JS, consultez notre tutoriel sur bignumber.js (opens in a new tab).
Envoyer : envoi d'une transaction à une fonction de contrat intelligent
Pour le deuxième exemple, nous allons appeler la fonction de transfert du contrat intelligent DAI pour envoyer 10 DAI à notre deuxième adresse. La fonction de transfert accepte deux paramètres : l'adresse du destinataire et le montant du jeton à transférer.
1daiToken.methods2 .transfer(receiverAddress, "100000000000000000000")3 .send({ from: senderAddress }, function (err, res) {4 if (err) {5 console.log("Une erreur s'est produite", err)6 return7 }8 console.log("Hachage de la transaction : " + res)9 })Afficher toutLa fonction d'appel renvoie le hachage de la transaction qui sera minée dans la blockchain. Sur Ethereum, les hachages de transaction sont prévisibles ; c'est ainsi que nous pouvons obtenir le hachage de la transaction avant son exécution (apprenez ici comment les hachages sont calculés (opens in a new tab)).
Comme la fonction ne fait que soumettre la transaction à la blockchain, nous ne pouvons pas voir le résultat tant que nous ne savons pas quand elle est minée et incluse dans la blockchain. Dans le prochain tutoriel, nous apprendrons comment attendre qu'une transaction soit exécutée sur la blockchain en connaissant son hachage (opens in a new tab).
Dernière mise à jour de la page : 21 octobre 2025