智能合约的ABI是什么?

  • Alchemy
  • 发布于 2022-03-10 10:44
  • 阅读 19

本文介绍了智能合约的应用二进制接口(ABI),它使得智能合约能够与外部应用和其他智能合约进行通信和交互。ABI 充当函数选择器的角色,定义了可以调用智能合约执行的特定方法,并通过 ABI 编码将信息转换为 EVM 能够理解的格式。文章还讲解了如何生成和使用 ABI,以及 ABI 在智能合约开发中的重要性。

Alchemy 撰写

Brady Werkheiser headshot

Brady Werkheiser 审核

发布于 2022 年 3 月 9 日,阅读时间 3 分钟


智能合约的应用程序二进制接口 (ABI) 使合约能够与外部应用程序和其他智能合约进行通信和交互。从外部来源接收数据对于完成应用程序和用户的目标至关重要。

在传统的 Web 开发中,关于数据的对话发生在应用程序和服务器之间,通过 API(应用程序编程接口)。服务器充当中心化信息源,通过请求向应用程序提供数据。

在区块链上,不存在这种数据的中心化。节点本质上充当服务器,而智能合约是链上“托管”函数。区块链之外的应用程序(和其他智能合约)需要一种与链上智能合约通信的方式。这就是 ABI 发挥作用的地方。

为什么需要 ABI?

在深入了解 ABI 的更多细节之前,最好先了解我们为什么需要它。

智能合约是 EVM (以太坊虚拟机) 的核心应用程序。智能合约的目的是在满足合约中定义的某些条件时执行交易。这些条件可以是链上或链下的事件。智能合约用 Solidity 等高级语言编写,但它们以可执行的字节码形式存储在 EVM 上,字节码是二进制格式。

EVM executable bytecodeEVM 可执行字节码

由于此字节码不是人类可读的,因此需要解释才能被理解。ABI 允许任何编写智能合约的人能够在用 Javascript 等高级语言编写的 Web 应用程序和 EVM 理解的字节码之间进行通信。

什么是 ABI?

就像它的 Web2 堂兄 API 一样,ABI 充当函数选择器,定义可以调用到智能合约以供执行的特定方法。这些特定方法及其连接的数据类型列在生成的 JSON RPC 文件中。

ABI function selectorABI 函数选择器

与 API 不同,我们不能只是以 JSON 格式直接向智能合约发送请求并期望得到响应,因为合约只能用字节码进行通信。为了将其转换为 EVM 可以理解的内容,此信息通过 ABI 编码进行编码。这些编码包括函数签名和变量声明,以便 EVM 确切地知道要在智能合约中执行哪个函数。

ABI encodingABI 编码

响应也采用字节码形式,因此在 Web 应用程序处理之前需要进行解释。在响应中使用字节码的优点是,我们还可以期望在调用合约的函数后返回某种结构。

如何使用 ABI?

生成

如果你使用的是 Hardhart/Truffle 等工具或像 Remix 这样的 IDE,则会自动为你生成合约 ABI。你还可以使用 Solidity Compiler NPM package 手动创建 ABI。安装包后,你可以在终端中运行“solcjs contractname.sol --abi”命令。如果执行成功,这将生成一个 .abi 文件。

现在你已经生成了 ABI,让我们看一下此文件中的一些元素:

Generated contract ABI生成的合约 ABI

执行

由于 ABI 充当 EVM 字节码和网站 Javascript 之间的解释器,因此当你想要执行智能合约的任何函数时,都需要它。除了 ABI 之外,还需要合约在区块链上的地址。这是一个小的 Javascript 代码片段,用于展示如何完成此操作:

Executing ABI执行 ABI

如果你有兴趣查找已部署合约的 ABI,你可以通过使用合约地址在 Etherscan 上搜索来找到它。例如这里

ABI of an already deployed contract已部署合约的 ABI

编码

由于所有通信都以字节码形式完成,因此很难指望开发人员自己对这些消息进行编码。幸运的是,像 Remix 这样的流行编译器也可以为你处理编码。这些编码遵循一定的模式,因此通过查看 ABI 规范 可以更好地了解正在发生的事情。

前四个字节是函数签名,指示正在执行智能合约中的哪种类型的函数。一个流行的函数标识符是 a9059cbb,它表示这是一个 ERC20 转账。此处有一个函数签名的 数据库目录,你可以在其中探索更多内容。

ABI function hashesABI 函数哈希

第五个字节之后是参数的编码位置。响应遵循类似的结构,但不包括函数签名。

结论

ABI 通常是在使用智能合约时被忽视的一个方面,但它在这种技术的可用性中发挥着重要作用。建立在 智能合约教程 的基础上是了解这个默默无闻的“主力”的强大功能的好方法,也是应用你的知识的好方法。

Supercharged | Alchemy | Substack

获取免费的以太坊 RPC 和开发者工具 获取你的 API 密钥

📚 目录


  • 为什么需要 ABI?
  • 什么是 ABI?
  • 如何使用 ABI?
  • 结论

分享:

Overview cards background graphic

相关概述

Featured content card overlay\ \ 以太坊\ \ 以太坊分片:区块链分片简介\ \ 什么是区块链分片以及它与以太坊有何关系? Featured content card overlay\ \ 以太坊\ \ 什么是强化交易?\ \ 探索一种新型交易,保证交易被挖掘并针对 Gas 进行优化 Featured content card overlay\ \ 以太坊\ \ 什么是以太坊承诺级别?\ \ 了解安全(已证明)、最终确定和最新承诺级别

Desktop section background image

构建区块链魔法

Alchemy 将最强大的 web3 开发者产品和工具与资源、社区和传奇支持相结合。

获取你的 API 密钥

  • 原文链接: alchemy.com/overviews/wh...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Alchemy
Alchemy
江湖只有他的大名,没有他的介绍。