1

0x5537f99e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000072268656c6c6f2200000000000000000000000000000000000000000000000000

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

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

4

1 回答 1

3

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

如果你的功能是

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

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

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

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

  1. 接下来的 32 个字节 0000000000000000000000000000000000000000000000000000000000000007

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

  1. 接下来的 32 个字节 2268656c6c6f2200000000000000000000000000000000000000000000000000

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

于 2017-10-16T08:22:10.833 回答