0x5537f99e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000072268656c6c6f2200000000000000000000000000000000000000000000000000
5537f99e 是函数名称,即"setstring"2268656c6c6f22 是函数的参数,即"hello",
请解释一下以太坊合约的原始数据是如何构造的。我对这些偏移感到困惑。
在这里找到参考 https://solidity.readthedocs.io/en/develop/abi-spec.html
如果您的函数是
function setstring(string string_value) {
}
- 前 4 个字节
0x5537f99e
的数据派生为签名setstring(string)
的 ASCII 形式的 Keccak 哈希的前 4 个字节
- 接下来的 32 个字节
0x0000000000000000000000000000000000000000000000000000000000000020
这意味着string_value的数据部分的位置,以参数块开头的字节为单位。在这种情况下,下一个块
- 接下来的 32 字节
0000000000000000000000000000000000000000000000000000000000000007
这意味着字符串的大小为 7。 "hello"
- 接下来的 32 字节
2268656c6c6f2200000000000000000000000000000000000000000000000000
"hello"
的内容以 UTF-8 编码。