简介
@ethersproject/contracts 是一个 JavaScript 库,提供了一个简单的 API 来与以太坊智能合约进行交互。它能够通过 ABI 将函数调用和交易封装成一个 JavaScript 对象,并用 web3 来进行签名和发送。在这篇文章中,我们将讨论如何使用 @ethersproject/contracts 来与智能合约进行交互。
开始
首先,你需要为你的项目安装 @ethersproject/contracts:
npm install @ethersproject/contracts
然后你需要导入库文件:
const { ethers } = require("ethers");
然后,你需要配置一个 Provider。Provider 提供了一个访问节点的接口,以太坊网络使用 JSON-RPC 协议,这个接口实现了这个协议。
const provider = new ethers.providers.JsonRpcProvider("http://localhost:8545");
接下来,你需要创建一个新的 Contract 对象来处理你的智能合约交互。你需要提供智能合约的地址和 ABI。
const contractAddress = "0x0000000000000000000000000000000000000000"; const contractABI = [{"type":"function","name":"myFunction","inputs":[{"name":"myArgument","type":"uint256"}],"outputs":[{"name":"returnValue","type":"uint256"}]}]; const contract = new ethers.Contract(contractAddress, contractABI, provider);
现在,我们已经完成了 @ethersproject/contracts 的初始化。
获得智能合约函数返回值
现在,我们可以调用智能合约中的函数并获取返回值:
const result = await contract.myFunction(42); console.log(result);
发送交易
调用智能合约函数也可以可以发送交易,需要使用钱包进行签名:
const signer = wallet.connect(provider); const tx = await signer.sendTransaction({ to: contractAddress, data: contract.interface.encodeFunctionData("myFunction", [42]) });
事件监听
智能合约返回值和交易状态也可被监听:
contract.once("myEvent", (arg1, arg2) => { console.log("myEvent emitted with args", arg1, arg2); }); const filter = contract.filters.myEvent(); provider.on(filter, (log, event) => { console.log("myEvent emitted with args", event.args); });
结论
@ethersproject/contracts 提供了一个方便的 API 来与以太坊智能合约进行交互。本篇文章介绍了该库的基本使用方法,包括获得智能合约函数返回值,发送交易和事件监听等。如果你想了解更多关于以太坊开发的内容,请访问以太坊开发者入门指南。
示例代码
完整示例代码请参考本篇文章中使用的代码,具体请见 github。
-- -------------------- ---- ------- ----- - ------ - - ------------------ ------ ---------- - ----- -------- - --- ---------------------------------------------------------- ----- --------------- - --------------------------------------------- ----- ----------- - ------------------------------------------------------------------------------------------------------------------------------------------------ ----- -------- - --- -------------------------------- ------------ ---------- ----- ------ - ----- ------------------------ -------------------- ----- ------ - ------------------------- ----- -- - ----- ------------------------ --- ---------------- ----- --------------------------------------------------- ----- --- ------------------------ ------ ----- -- - -------------------- ------- ---- ------ ----- ------ --- ----- ------ - --------------------------- ------------------- ----- ------ -- - -------------------- ------- ---- ------ ------------ --- -----
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedc1c5b5cbfe1ea0611ef8