solidity10-ABI详解

ABI(Application Binary Interface Specification)

ABI是定义以太坊合约调用的一种格式。
类似Webservice里的SOAP协议一样;也就是定义调用的函数签名,参数编码,返回结果编码等。

http://me.tryblockchain.org/Solidity-abi-abstraction.html

函数选择器

一个函数调用的前四个字节数据指定了要调用的函数签名。计算方式是使用函数签名的keccak256的哈希,取4个字节。

bytes4(keccak256("foo(uint32,bool)"))

方法 :

function name() public view returns (string)
  1. name() -> 二进制,每个字母一个字节,6个字节byte

[110, 97, 109, 101, 40, 41]

  1. 二进制 -> Keccak-256(二进制),256个bit,32个字节byte

[6, -3, -34, 3, -125, -15, 93, 88, 45, 26, 116, 81, 20, -122, -55, -35, -8, 98, -88, -126, -5, 121, 4, -77, -39, -2, -101, -117, -114, 88, -89, -106]

  1. Keccak-256(二进制)-> 16进制,256/8*4=64个字符(十六进制)

0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796

  1. 16进制 -> 取前10位(包括0x)

0x06fdde03

call()方法

如果第一个参数刚好是四个字节,会认为这四个字节指定的是函数签名。
其他非函数签名参数以32个字节(64个十六进制)为组编码,不够32位以32位,超过32位以32的倍数。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容