在Solidity中,函数签名是否考虑数据位置?

3

ex: if my function in solidity is:

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

函数签名会是这个哈希值的前四个字节吗:someFunction(uint256,bytes),还是这个哈希值的前四个字节:someFunction(uint256,bytes calldata)?或者甚至是这个哈希值的前四个字节:someFunction(uint256,bytescalldata)(在bytes和calldata之间没有空格)?
1个回答

4
不,数据位置不被考虑。来自 https://solidity.readthedocs.io/en/v0.5.11/abi-spec.html#function-selector 的内容表明:一个函数调用的调用数据的前四个字节指定了要调用的函数。这是函数签名的Keccak-256(SHA-3)哈希值的前四个字节(从左到右的高位在big-endian模式下)。函数签名是指基本原型的典型表达式,没有数据位置限定符,即由括号括起来的参数类型列表的函数名称。参数类型由单个逗号分隔 - 不使用空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接