以太坊虚拟机中的应用程序二进制接口 (ABI)2025年4月10日 | 阅读 4 分钟 以太坊虚拟机(EVM)运行智能合约,这些合约是记录在区块链上的代码片段。此外,EVM 提供了一套完整的指令,称为操作码(opcodes),用于执行特定命令。操作码是低级代码,类似于处理器的指令集。常见的以太坊操作码可以在以太坊黄皮书中找到。完整的程序被编译并以字节或二进制表示形式保存在以太坊区块链上的一个地址中。在以太坊和 EVM 的背景下,合约只是一个运行在这串字节上的单个程序。 Solidity、Viper 和 Bamboo 是仅有的几种指定如何从程序入口点到达特定函数入口点的高级语言。任何希望与区块链通信的外部应用程序或智能合约都必须理解智能合约的接口,例如如何识别一个方法及其参数。而以太坊应用程序二进制接口(ABI)则使这成为可能。 ABI 与 API 的比较它类似于应用程序接口(API),后者本质上是代码接口的高级语言或人类可读的表示。人类可读的接口和可执行代码在 EVM 中以二进制数据的形式存储,智能合约的交互必须被转换为 EVM 能够理解的二进制格式。与 API 类似,但处在更低的级别,ABI 指定了你可以轻松用来与该二进制合约通信的结构和方法。ABI 告诉调用者必须如何编码信息(变量声明和函数签名),以便虚拟机能够理解字节码(合约)。我们将此过程称为 ABI 编码。 应用程序二进制接口(ABI)的目的ABI 用于连接两个程序模块,其中一个主要处于机器码级别。该接口是将数据编码进机器码或从机器码中解码出来的默认方法。在以太坊中,它主要指的是一种语言如何被编码,以便从交易中读取数据或向 EVM 发起合约调用。 ABI 的组成部分ABI 通过推测要调用哪个函数(编码)来传递用户数据(解码),然后执行该函数。每个智能合约都需要一个独特的 ABI 来获取结果。一个智能合约由多个函数组成,这些函数以字节码的形式传递给 EVM。 由于智能合约以二进制格式存储,ABI 基本上解释了处理二进制合约的结构和技术。在 Solidity 中,智能合约编译后会生成一个 JSON ABI 格式的文件。某些 IDE,如 REMIX,会自动生成合约的 ABI。或者,可以使用 Solidity 编译器 NPM 包手动构建 ABI。合约的 ABI 的 JSON 格式由各种事件描述和函数提供。 以下是构成 ABI 函数描述的元素:
ABI 如何运作如果不考虑它们如何工作,这篇关于 Solidity 应用程序二进制接口的课程将是不完整的。奇怪的是,鉴于智能合约编译过程的细节,你可能已经对 ABI 的工作原理有了基本的了解。让我们回顾一下创建应用程序二进制接口所涉及的程序和重要组成部分。 保证 Solidity 正常运作的第一个也是最重要的步骤是编译智能合约。编译过程将 Solidity 智能合约代码转换为机器可读的以太坊虚拟机代码。由于 EVM 无法理解 Solidity 计算机代码,因此需要 Solidity 编译器来处理智能合约。需要注意的是,Solidity 智能合约由编译器(有时也称为 solc)与 ABI 协同工作,编译成与 EVM 兼容的代码。这清晰地展示了 ABI 是如何产生的。 编译过程完成后,被字节码覆盖的智能合约代码将存在于 EVM 中。反过来,其他智能合约和外部应用程序的智能合约代码是用 Solidity 编程语言编写的。ABI 是与基于 Solidity 的智能合约流程相关的基本组成部分之一。ABI 充当解释器,让外部应用程序和智能合约与 EVM 通信。Solidity 应用程序二进制接口是人类可读的,并具有许多智能合约方法来授予对特定功能的访问权限。为了实现与智能合约的通信,程序员可以将 ABI 与其他库(如 Ethers.js)结合使用。 下一主题区块链中的销毁和铸造平衡 |
我们请求您订阅我们的新闻通讯以获取最新更新。