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)
- name() -> 二进制,每个字母一个字节,6个字节byte
[110, 97, 109, 101, 40, 41]
- 二进制 -> 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]
- Keccak-256(二进制)-> 16进制,256/8*4=64个字符(十六进制)
0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796
- 16进制 -> 取前10位(包括0x)
0x06fdde03
call()方法
如果第一个参数刚好是四个字节,会认为这四个字节指定的是函数签名。
其他非函数签名参数以32个字节(64个十六进制)为组编码,不够32位以32位,超过32位以32的倍数。
网友评论