下面的以太坊合约函数调用数据是如何构建的



0x5537f99e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000072268656c6c6f2200000000000000000000000000000000000000000000000000

5537f99e 是函数名称,即"setstring"2268656c6c6f22 是函数的参数,即"hello",

请解释一下以太坊合约的原始数据是如何构造的。我对这些偏移感到困惑。

你可以

在这里找到参考 https://solidity.readthedocs.io/en/develop/abi-spec.html

如果您的函数是

function setstring(string string_value) {
}
  1. 前 4 个字节0x5537f99e
前 4 个字节

的数据派生为签名setstring(string)的 ASCII 形式的 Keccak 哈希的前 4 个字节

  1. 接下来的 32 个字节0x0000000000000000000000000000000000000000000000000000000000000020

这意味着string_value的数据部分的位置,以参数块开头的字节为单位。在这种情况下,下一个块

  1. 接下来的 32 字节 0000000000000000000000000000000000000000000000000000000000000007

这意味着字符串的大小为 7。 "hello"

  1. 接下来的 32 字节 2268656c6c6f2200000000000000000000000000000000000000000000000000

"hello"的内容以 UTF-8 编码。

最新更新