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

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 编码。

【讨论】:

谢谢,文档帮了大忙

以上是关于下面的以太坊合约函数调用数据是如何构造的?的主要内容,如果未能解决你的问题,请参考以下文章

如何开发编译部署调用智能合约

智能合约重构社会契约以太坊总结

如何调用 Solidity 函数从智能合约中返回以太币?

如何ETH以太坊智能合约做一个简单的DAPP

第119篇 笔记-solidity中的ABI

以太坊开发利用Oraclize开发一个投注合约:原理介绍