methods - 为合约方法创建交易

优质
小牛编辑
130浏览
2023-12-01

为指定的合约方法创建一个交易对象,以便使用该交易对象进行调用、发送或估算gas。

调用:

myContract.methods.myMethod([param1[, param2[, ...]]])

可以使用以下语法获得指定方法的交易对象:

  • 名称: myContract.methods.myMethod(http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/7/123)
  • 带参名称: myContract.methods'myMethod(uint256)'
  • 签名: myContract.methods'0x58cf5f10'

这样就可以支持从javascript合约对象调用同名但参数不同的合约方法。

参数:

参数取决于在JSON接口中定义的合约方法

返回值:

Object: 交易对象,包含以下字段:

  • arguments: Array - 之前传入方法的参数,可修改
  • call: Function - 用来调用只读的合约方法,在EVM直接执行而不必发出交易,因此不会改变合约的状态
  • send: Function - 用来向合约发送交易并执行方法,因此可以改变合约的状态
  • estimateGas: Function - 用来估算方法在链上执行时的gas用量
  • encodeABI: Function - 用来为合约方法进行ABI编码。

示例代码:

// 调用合约方法
myContract.methods.myMethod(http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/7/123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result){
    ...
});

// 发送交易,使用Promise对象获取返回结果
myContract.methods.myMethod(http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/7/123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.then(function(receipt){
    // receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()"
});

// 发送交易,使用事件获取返回结果
myContract.methods.myMethod(http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/7/123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...
})
.on('confirmation', function(confirmationNumber, receipt){
    ...
})
.on('error', console.error);