需要处理合约的交互操作, 那么就需要使用 eth.Contract 类.
初始化对象
1 | const contract = new web3.eth.Contract(jsonInterface [,address] [,options]); |
注意 jsonInterface 实际上就是合约的 abi.
初始化的时候可以不给 address 参数, 但进行查询或者写入操作之前, 必须要使用 .options.address
进行设置.
对象属性
- address: 合约地址, 注意区别 from
- jsonInterface: 合约 abi
- data: 合约编译后的二进制数据
- from: 交易发起账户, 注意区别 address
- gasPrice: wei
- gas: 最大愿意支付 gas 值(实际是 gas limit)
对象方法
克隆合约对象: .clone()
部署合约准备: .deploy({data:str, arguments:[]})
返回对象
- arguments
- send({from, gas, gasPrice})
- encodeABI() String
- estimateGas((err, gas) => {})
1 | myContract.deploy({ |
可调用方法列表 methods
调用合约方法
调用只读方法: methods.funcName(args).call({from, gas, gasPrice}).then(result => {}); // result 为对象(返回值个数为2+)/为简单值(返回值个数为1)
调用写方法:
methods.funcName(args).call({from, gas, gasPrice, value})
.on(“transactionHash”, txHash => {})
.on(‘confirmation’, (confirmationNumber, receipt) => {})
.on(‘receipt’, (receipt) => {}) // transactionHash, blockNumber, contractAddress, events
.on(‘error’, console.error);
估算费用: methods.funcName(args).estimateGas().then((err, gas) => {});
编译二进制: const abiData = methods.funcName(args).encodeABI();
监听事件
监听导数据后即刻退出:
contract.once(‘eventName’, options, (err, data) => {})
监听合约某个事件:
contract.events.eventName(options)
.on(‘data’, data=>{})
.on(‘changed’, data=>{})
.on(‘error’, err=>{})
监听合约的所有事件:
contract.events.allEvents(options)…
获取合约历史数据:
contract.getPastEvents(eventName/‘allEvents’ [,options])
.then(logs => { loop logs array })