例如:如果我的功能是:
function someFunction(uint256 a, bytes calldata _data) external {
//some stuff
}
函数签名会是散列的前四个字节:someFunction(uint256,bytes)
还是散列的前四个字节:someFunction(uint256,bytes calldata)
?甚至someFunction(uint256,bytescalldata)
(字节和调用数据之间没有空格)
不,不考虑数据位置。来自https://solidity.readthedocs.io/en/v0.5.11/abi-spec.html#function-selector(我的重点):
函数调用的调用数据的前四个字节指定要调用的函数。它是函数签名的 Keccak-256 (SHA-3) 散列的第一个(左,大端高位)四个字节。签名被定义为没有数据位置说明符的基本原型的规范表达式,即带括号的参数类型列表的函数名称。参数类型由单个逗号分隔 - 不使用空格。