繁体   English   中英

web3调用带有额外参数的Solidity合同功能吗?

[英]web3 calls Solidity contract function with extra parameter?

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.jshandleAdopt函数使用以下代码调用contract函数。

  App.contracts.Adoption.deployed().then(function(instance) {
    adoptionInstance = instance;
    return adoptionInstance.adopt(petId, {from: account});
  })

该函数由额外的对象{from: account}调用。 为什么? 并且此参数是否在固定代码中丢弃?

顺便说一句,有一个未定义的全局变量web3吗? 该值由MetaMask扩展名分配吗?

那是transactionObject ,它描述了有关所有交易调用的一般信息(汽油限额,价格,要发送的乙醚数量等)。 您发布的JS代码正在使用web3库。 这不是对合同API的直接调用。 web3库将其转换为RPC。 transactionObject位于所有合同参数之后。 紧随其后的另一个参数是带有合同调用结果的回调(请参见此处 )。

这些是docs中描述的transactionobject所有选项:

  • from:字符串-发送帐户的地址。 如果未指定,则使用web3.eth.defaultAccount属性。
  • to:字符串-(可选)消息的目标地址,对于合同创建交易而言,未定义。
  • 值:Number | String | BigNumber-(可选)在Wei中为交易传输的值,如果是合同创建交易,则为捐赠。
  • 气体:Number | String | BigNumber-(可选,默认值:待定)用于交易的气体量(未使用的气体将退还)。
  • gasPrice:Number | String | BigNumber-(可选,默认值:待定)此交易中以wei为单位的天然气价格,默认为平均网络天然气价格。
  • data:字符串-(可选)包含消息的关联数据的字节字符串,或者在进行合同创建交易的情况下为初始化代码。
  • 随机数:数字-(可选)随机数的整数。 这允许覆盖使用相同随机数的未决事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM