web3使用额外参数调用Solidity contract函数?

时间:2018-01-22 00:23:38

标签: ethereum solidity truffle consensys-truffle

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扩展指定?

1 个答案:

答案 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的自己的待处理事务。
  •