【问题标题】:web3.eth.abi.encodeFunctionSignature is not working as expectedweb3.eth.abi.encodeFunctionSignature 没有按预期工作
【发布时间】:2019-12-25 19:00:12
【问题描述】:

我正在使用 ERC165 来确定我的合约是否支持接口,但我对 web3 的 functionEncoding 方法的行为感到非常困惑。这是我的界面

pragma solidity ^0.5.8;


interface ArrayExtraData {
    function submitOfferArrayExtra(uint offerID, uint[] calldata extra) external returns (int status, uint offID);

    function submitRequestArrayExtra(uint requestID, uint[] calldata extra) external returns (int status, uint reqID);
}

我希望得到 0x1ddeb71f 作为接口选择器,它本质上是函数选择器的异或,但我得到 0xe3bfed76。

这是我的 js 代码:

let interfaceFunctions = [
                 'submitOfferArrayExtra(uint,uint[])',
                'submitRequestArrayExtra(uint,uint[])'
             ]

let interfaceId =  interfaceFunctions.
                     map(web3.eth.abi.encodeFunctionSignature).
                     map((x) => parseInt(x, 16)).
                     reduce((x, y) => x ^ y);
interfaceId = interfaceId > 0 ? interfaceId :  0xFFFFFFFF + interfaceId + 1;
interfaceId = '0x' + interfaceId.toString(16);

【问题讨论】:

    标签: ethereum solidity smartcontracts web3 web3js


    【解决方案1】:

    好的! 我发现了它是如何工作的:)

    您必须更具体地了解数据类型。例如,在这种情况下,您必须使用uint256 而不是uint

    玩得开心。

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2020-03-18
      • 2012-06-14
      • 2014-11-15
      • 1970-01-01
      • 2012-07-02
      • 2011-09-07
      • 2013-03-03
      • 2015-05-18
      相关资源
      最近更新 更多