0

例如:如果我的功能是:

function someFunction(uint256 a, bytes calldata _data) external { 
//some stuff 
}

函数签名会是散列的前四个字节:someFunction(uint256,bytes)还是散列的前四个字节:someFunction(uint256,bytes calldata)?甚至someFunction(uint256,bytescalldata)(字节和调用数据之间没有空格)

4

1 回答 1

1

不,不考虑数据位置。来自https://solidity.readthedocs.io/en/v0.5.11/abi-spec.html#function-selector(我的重点):

函数调用的调用数据的前四个字节指定要调用的函数。它是函数签名的 Keccak-256 (SHA-3) 散列的第一个(左,大端高位)四个字节。签名被定义为没有数据位置说明符的基本原型的规范表达式,即带括号的参数类型列表的函数名称。参数类型由单个逗号分隔 - 不使用空格。

于 2019-10-03T05:23:39.730 回答