本会动态

文章详情页
为什么需要交易数据?
发布时间:2019-05-01 13:25:29来源:飞舞棋牌-棋盘类游戏-最火的棋牌游戏排行点击:19

  开头。

  地址和金额

  每个实参(列表/数组和字符串除外)的长度为32个字节,或64个十六进制字符,但以太坊地址长度仅为40个字符(不含

  )。为了解释这一点,地址用零填充。在一个十六进制值中,

  相同。因此,

  (地址)在交易中与

  与

  相同。为什么要是用这么多零?

  正如我们之前所了解的,Solidity合约中的最大数是22 - 1,恰好是32个字节。使用固定长度可以使EVM和其他应用程序更容易解码数据。

  数组和字符串?

  如上所述,数组和字符串的输入数据的工作方式略有不同。数组可以视为一个元素列表。例如,在大多数编程语言中,1,2和3的列表写作

  。在交易中发送此数据,列表中的每个项目都将作为32字字节组发送,并列在输入数据的末尾。指向数组长度的指针用作实参。

  例如,假设名为

  的函数,它的地址和数组表示为(

  )。该函数的函数签名是

  。使用的地址与上述地址相同。因为数组包含3个元素,所以数组的长度为十六进制写作0x3。我们知道每个参数只占用32个字节的空间,并且数组放在其他参数之后,因此数组从32 + bet365官网 32=64个字节开始。

  因为字符串的长度可以是任意的(长度超过32个字节),所以它们被分成32个字节的组,并且与输入数据中的数组相同。

  诸如Etherscan的网站如何解码输入数据?

  哈希是单向函数,因此如果有函数签名哈希,就不可能从该哈希中获取函数签名(除非进行强制处理)。合同所有者可以将合约ABI上传为JSON,用来获取函数签名哈希值。

  即使合约所有者没有上传合约ABI,也可以解码许多合约的输入数据。由于ERC-20合约函数的签名始终相同,因此,诸如Etherscan这样的网站可以简单地为这些合约使用预定义的合同ABI。例如,ERC-20合约的

  函数的合约ABI如下所示:

  如果输入数据签名与预定义函数之一匹配,则Etherscan可以解码输入数据。


bet365官网