应用二进制接口说明 您所在的位置:网站首页 solidity中文社区 应用二进制接口说明

应用二进制接口说明

2024-06-29 08:49| 来源: 网络整理| 查看: 265

应用二进制接口说明¶ 基本设计¶

在 以太坊(Ethereum) 生态系统中, 应用二进制接口(Application Binary Interface(ABI)) 是从区块链外部与合约进行交互以及合约与合约间进行交互的一种标准方式。 数据会根据其类型按照这份手册中说明的方法进行编码。这种编码并不是可以自描述的,而是需要一种特定的概要(schema)来进行解码。

我们假定合约函数的接口都是强类型的,且在编译时可确定的和静态的;不提供自我检查机制。同时假定在编译时,所有合约要调用的其他合约接口定义都是可用的。

这份手册并不针对那些动态合约接口或者仅在运行时才可获知的合约接口。如果这种场景变得很重要,你可以使用 以太坊(Ethereum) 生态系统中其他更合适的基础设施来处理它们。

函数选择器(Function Selector)¶

一个函数调用数据的前 4 字节,指定了要调用的函数。这就是某个函数签名的 Keccak 哈希的前 4 字节(高位在左的大端序) (译注:这里的“高位在左的大端序“,指最高位字节存储在最低位地址上的一种串行化编码方式,即高位字节在左)。 函数签名被定义为基础原型的规范表达,而基础原型是函数名称加上由括号括起来的参数类型列表,参数类型间由一个逗号分隔开,且没有空格。

注解

函数的返回类型并不是这个签名的一部分。在 Solidity 的函数重载 中,返回值并没有被考虑。这是为了使对函数调用的解析保持上下文无关。 然而 应用二进制接口(Application Binary Interface(ABI)) 的 JSON 描述中包含了即包含了输入也包含了输出。(参考 JSON ABI)。

参数编码¶

从第5字节开始是被编码的参数。这种编码方式也被用在其他地方,比如,返回值和事件的参数也会被用同样的方式进行编码,而用来指定函数的4个字节则不需要再进行编码。

类型编码¶

以下是基础类型:

uint: M 位的无符号整数, 0 =0.7.5


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有