在以太坊开发中,我们经常需要与以太坊智能合约进行交互。web3-eth-contract 是 web3.js 库的一部分,提供了方便的智能合约交互方法。本文将介绍 web3-eth-contract 的使用方法,包括如何部署合约、编写交互代码等内容。
web3-eth-contract 的安装
安装 web3-eth-contract 很简单,只需要在终端中运行以下代码即可:
npm install web3-eth-contract
部署智能合约
部署合约是与合约交互的第一步,下面是一个简单的合约,你可以根据自己的需要进行修改:
-- -------------------- ---- ------- ------ -------- ------- -------- ---------- - ------- ------ ---------- - ---- -------- ------------------- --------- ------ - ---------- - --------- - -
这是一个简单的智能合约,有一个公共的 myVariable 变量和一个 setVariable 函数,可以设置 myVariable 变量的值。现在我们使用 web3-eth-contract 部署这个合约:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - --- ------------------------------ -- --------- ----- ----------- - ----------- -- -------- ----- ----------- - ------ -- -- --- ----- -------- - -------- -- ----- ----- -------- - --- ------------------------------- ----------------- ----- --------- --------- ----- ------------ ---- -------- --------- ------------- ---------------- ------------------ ----- --------------- - ------------------------ --------------------- -------- -- -------- --------------------- -------------------------------------- ------------------------------------------------ ---
我们首先连接了本地的以太坊节点,然后定义了部署合约的地址、合约 ABI 和合约字节码。使用 web3 生成了一个合约实例,然后调用了 deploy 方法部署合约。在 deploy 方法中,我们指定了合约字节码,并传递了 from、gas、gasPrice 参数。其中,from 参数表示谁来支付合约部署费用,gas 参数表示合约执行最大花费的 gas 数量,gasPrice 参数表示 gas 的价格。
send 方法会返回一个 Promise,我们可以使用 then 方法获取合约实例。在合约部署成功时,会触发 receipt 事件,我们在事件处理函数中获取智能合约地址。
与智能合约交互
使用 web3-eth-contract 与智能合约交互非常简单,下面我们来介绍一些交互的方法。
调用函数和获取变量值
假如我们已经有了部署成功的合约实例,我们可以使用如下方法来调用函数和获取变量值:
const myVariable = await contract.methods.myVariable().call(); console.log(`The value of myVariable is: ${myVariable}`); await contract.methods.setVariable(456).send({ from: fromAddress }); console.log(`Set myVariable to 456`);
我们使用了 contract.methods 方法获取了合约上的 myVariable() 函数,使用 call 方法调用函数。同理,我们也可以使用 send 方法向合约发送交易的方式调用合约中的 setVariable 函数。
监听事件
除了调用函数和获取变量值,我们还可以监听合约中的事件,下面是一个简单的例子:
-- -------------------- ---- ------- ------ -------- ------- -------- ---------- - ----- ---------------- ---------- ------- ------ ---------- - ---- -------- ------------------- --------- ------ - ---------- - --------- ---- ------------------- - -
我们在合约中定义了一个 NewValue 事件,在 setVariable 函数中调用了该事件。下面是如何使用 web3-eth-contract 监听事件:
const contractEvent = contract.events.NewValue(); contractEvent.on('data', function(event){ console.log(`New value set: ${event.returnValues.newValue}`); }).on('error', console.error);
我们使用 contract.events 方法获取 NewValue 事件,然后可以使用 on 方法监听 data 和 error 事件,data 事件会在事件被触发时调用,我们打印出了 event.returnValues.newValue 的值。
总结
本文介绍了 web3-eth-contract 的使用方法,包括如何部署合约、调用函数与获取变量值以及监听事件。这些方法可以帮助我们轻松地与以太坊智能合约进行交互。希望本文对以太坊开发初学者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/57435