在http://truffleframework.com/tutorials/pet-shop示例中,有以下合同,函数adopt(uint petId)
只有一个参数。
contract Adoption {
address[16] public adopters;
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15);
adopters[petId] = msg.sender;
return petId;
}
function getAdopters() public returns (address[16]) {
return adopters;
}
}
但是,在javascript代码app.js
中,handleAdopt
函数使用以下代码调用契约函数。
App.contracts.Adoption.deployed().then(function(instance) {
adoptionInstance = instance;
return adoptionInstance.adopt(petId, {from: account});
})
使用额外对象{from: account}
调用该函数。为什么?这个参数是否被丢弃在可靠性代码中?
BTW,有一个未定义的全局变量web3
?该值是否由MetaMask扩展指定?
答案 0 :(得分:2)
这是transactionobject
,它描述了有关所有交易呼叫的一般信息(天然气限制,价格,发送以太网的数量等)。您发布的JS代码使用的是web3库。这不是对合同API的直接调用。 web3库将其转换为RPC。 .content
位于所有合同参数之后。之后还有另一个参数是带有契约调用结果的回调(参见here)。
这些是docs:
中描述的overflow: auto;
的所有选项
- from:String - 发送帐户的地址。如果未指定,则使用web3.eth.defaultAccount属性。
- to:String - (可选)消息的目标地址,未定义合同创建事务。
- value:Number | String | BigNumber - (可选)为Wei中的事务传输的值,如果是合同创建事务,也是捐赠。
- gas:Number | String | BigNumber - (可选,默认:待定)用于交易的天然气量(未使用的天然气已退还)。
- gasPrice:Number | String | BigNumber - (可选,默认:待定)此交易的天然气价格为wei,默认为平均网络燃气价格。
- data:String - (可选)包含消息的关联数据的字节字符串,或者在合同创建事务的情况下,是初始化代码。
- nonce:Number - (可选)nonce的整数。这允许覆盖使用相同nonce的自己的待处理事务。