【发布时间】: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