该web3.eth.Contract对象可以轻松地与以太坊区块链上的智能合约进行交互。当你创建一个新的合约对象时,你给它相应的智能合约的json接口,web3将自动将所有的调用转换为RPC的低级别ABI调用。
这允许您与智能合约进行交互,就像它们是JavaScript对象一样。
独立使用:
新合约
new web3.eth.Contract(jsonInterface[, address][, options])
创建一个新的契约实例及其在json接口对象中定义的所有方法和事件。
参数
- jsonInterface- Object:实例化合约的json接口
- address- String(可选):要调用的智能合约的地址,可以在以后添加myContract.options.address = ‘0x1234…’
- options- Object(可选):合约的选项。有些用作调用和交易的后备:
• from- String:地址交易应该来自。
• gasPrice- String:用于交易的用于天然气的价格。
• gas- Number:为交易提供的最大气体(气体限制)。
• data- String:合约的字节代码。合约部署时使用。
返回
Object:合约实例及其所有方法和事件。
示例
var myContract = new web3.eth.Contract([…], ‘0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe’, {
from: ‘0x1234567890123456789012345678901234567891’, // 交易地址
gasPrice: ‘20000000000’ // 默认gas
});
=属性=
选项
myContract.options
object合约实例的选项。from,gas并gasPrice在发送事务时用作后备值。
属性
Object - 选项:
• address- String:部署合约的地址。请参阅options.address。
• jsonInterface- Array:合约的json接口。请参见options.jsonInterface。
• data- String:合约的字节代码。合约部署时使用。
• from- String:地址交易应该来自。
• gasPrice- String:用于交易的用于天然气的价格。
• gas- Number:为交易提供的最大气体(气体限制)。
示例
myContract.options;
{
address: ‘0x1234567890123456789012345678901234567891’,
jsonInterface: […],
from: ‘0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe’,
gasPrice: ‘10000000000000’,
gas: 1000000
}
myContract.options.from = ‘0x1234567890123456789012345678901234567891’; // 交易地址
myContract.options.gasPrice = ‘20000000000000’; // 默认的gas价格
myContract.options.gas = 5000000; // 默认的gas
options.address
myContract.options.address
用于此合约实例的地址。web3.js从此合约生成的所有事务都将此地址包含为“to”。
地址将以小写形式存储。
属性
address- String|null:此合约的地址,或者null尚未设置的地址。
示例
myContract.options.address;
‘0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae’
// 设置新地址
myContract.options.address = ‘0x1234FFDD…’;
options.jsonInterface
myContract.options.jsonInterface
的JSON接口从派生对象ABI本合约。
属性
jsonInterface- Array:此合约的json接口。重新设置它将重新生成合约实例的方法和事件。
示例
myContract.options.jsonInterface;
[{
“type”:“function”,
“name”:“foo”,
“inputs”: [{“name”:“a”,“type”:“uint256”}],
“outputs”: [{“name”:“b”,“type”:“address”}]
},{
“type”:“event”,
“name”:“Event”
“inputs”: [{“name”:“a”,“type”:“uint256”,“indexed”:true},{“name”:“b”,“type”:“bytes32”,“indexed”:false}],
}]
//设置接口
myContract.options.jsonInterface = […];
=方法=
克隆
myContract.clone()
克隆当前合约实例。
参数
没有
返回
Object:新的合约实例。
示例
var contract1 = new eth.Contract(abi, address, {gasPrice: ‘12345678’, from: fromAddress});
var contract2 = contract1.clone();
contract2.options.address = address2;
(contract1.options.address !== contract2.options.address);
true
部署
myContract.deploy(options)
调用此函数将合约部署到区块链。成功部署后,承诺将通过新的合约实例解决。
参数
- options- Object:用于部署的选项。
• data- String:合约的字节代码。
• arguments- Array(可选):在部署时传递给构造函数的参数。
返回
Object:事务对象:
• Array - arguments:之前传递给方法的参数。它们可以改变。
• Function- 发送:将部署合约。承诺将通过新的合约实例解决,而不是收据!
• Function- 估计气体:估计用于部署的气体。
• Function- encodeABI:对部署的ABI进行编码