下面的以太坊合约函数调用数据是如何构造的?
Posted
技术标签:
【中文标题】下面的以太坊合约函数调用数据是如何构造的?【英文标题】:How is the below Ethereum contract function call data is constructed? 【发布时间】:2018-03-22 07:00:22 【问题描述】:0x5537f99e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000072268656c6c6f2200000000000000000000000000000000000000000000000000 P>
5537f99e 是函数名,即'setstring' 2268656c6c6f22是函数的参数,即'hello',
请解释如何构建以太坊合约的原始数据。我对这些偏移感到困惑。
【问题讨论】:
【参考方案1】:你可以在这里找到参考https://solidity.readthedocs.io/en/develop/abi-spec.html
如果你的功能是
function setstring(string string_value)
-
前4字节
0x5537f99e
前 4 个字节的数据派生为签名 setstring(string)
的 ASCII 形式的 Keccak 哈希的前 4 个字节
-
接下来的 32 个字节
0x0000000000000000000000000000000000000000000000000000000000000020
这意味着您的 string_value 的数据部分的位置,以参数块开头的字节为单位。在这种情况下,下一个块
-
接下来的 32 个字节
0000000000000000000000000000000000000000000000000000000000000007
这意味着你的字符串的大小,7。"hello"
-
接下来的 32 个字节
2268656c6c6f2200000000000000000000000000000000000000000000000000
"hello"
的内容以 UTF-8 编码。
【讨论】:
谢谢,文档帮了大忙以上是关于下面的以太坊合约函数调用数据是如何构造的?的主要内容,如果未能解决你的问题,请参考以下文章