美文网首页
solidity10-ABI详解

solidity10-ABI详解

作者: jection | 来源:发表于2018-11-20 17:17 被阅读0次

    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的倍数。

    相关文章

      网友评论

          本文标题:solidity10-ABI详解

          本文链接:https://www.haomeiwen.com/subject/zsuxqqtx.html