本文介绍了智能合约的应用二进制接口(ABI),它使得智能合约能够与外部应用和其他智能合约进行通信和交互。ABI 充当函数选择器的角色,定义了可以调用智能合约执行的特定方法,并通过 ABI 编码将信息转换为 EVM 能够理解的格式。文章还讲解了如何生成和使用 ABI,以及 ABI 在智能合约开发中的重要性。
由 Alchemy 撰写
由 Brady Werkheiser 审核
发布于 2022 年 3 月 9 日,阅读时间 3 分钟
智能合约的应用程序二进制接口 (ABI) 使合约能够与外部应用程序和其他智能合约进行通信和交互。从外部来源接收数据对于完成应用程序和用户的目标至关重要。
在传统的 Web 开发中,关于数据的对话发生在应用程序和服务器之间,通过 API(应用程序编程接口)。服务器充当中心化信息源,通过请求向应用程序提供数据。
在区块链上,不存在这种数据的中心化。节点本质上充当服务器,而智能合约是链上“托管”函数。区块链之外的应用程序(和其他智能合约)需要一种与链上智能合约通信的方式。这就是 ABI 发挥作用的地方。
在深入了解 ABI 的更多细节之前,最好先了解我们为什么需要它。
智能合约是 EVM (以太坊虚拟机) 的核心应用程序。智能合约的目的是在满足合约中定义的某些条件时执行交易。这些条件可以是链上或链下的事件。智能合约用 Solidity 等高级语言编写,但它们以可执行的字节码形式存储在 EVM 上,字节码是二进制格式。
EVM 可执行字节码
由于此字节码不是人类可读的,因此需要解释才能被理解。ABI 允许任何编写智能合约的人能够在用 Javascript 等高级语言编写的 Web 应用程序和 EVM 理解的字节码之间进行通信。
就像它的 Web2 堂兄 API 一样,ABI 充当函数选择器,定义可以调用到智能合约以供执行的特定方法。这些特定方法及其连接的数据类型列在生成的 JSON RPC 文件中。
ABI 函数选择器
与 API 不同,我们不能只是以 JSON 格式直接向智能合约发送请求并期望得到响应,因为合约只能用字节码进行通信。为了将其转换为 EVM 可以理解的内容,此信息通过 ABI 编码进行编码。这些编码包括函数签名和变量声明,以便 EVM 确切地知道要在智能合约中执行哪个函数。
ABI 编码
响应也采用字节码形式,因此在 Web 应用程序处理之前需要进行解释。在响应中使用字节码的优点是,我们还可以期望在调用合约的函数后返回某种结构。
如果你使用的是 Hardhart/Truffle 等工具或像 Remix 这样的 IDE,则会自动为你生成合约 ABI。你还可以使用 Solidity Compiler NPM package 手动创建 ABI。安装包后,你可以在终端中运行“solcjs contractname.sol --abi
”命令。如果执行成功,这将生成一个 .abi 文件。
现在你已经生成了 ABI,让我们看一下此文件中的一些元素:
生成的合约 ABI
由于 ABI 充当 EVM 字节码和网站 Javascript 之间的解释器,因此当你想要执行智能合约的任何函数时,都需要它。除了 ABI 之外,还需要合约在区块链上的地址。这是一个小的 Javascript 代码片段,用于展示如何完成此操作:
执行 ABI
如果你有兴趣查找已部署合约的 ABI,你可以通过使用合约地址在 Etherscan 上搜索来找到它。例如这里:
已部署合约的 ABI
由于所有通信都以字节码形式完成,因此很难指望开发人员自己对这些消息进行编码。幸运的是,像 Remix 这样的流行编译器也可以为你处理编码。这些编码遵循一定的模式,因此通过查看 ABI 规范 可以更好地了解正在发生的事情。
前四个字节是函数签名,指示正在执行智能合约中的哪种类型的函数。一个流行的函数标识符是 a9059cbb,它表示这是一个 ERC20 转账。此处有一个函数签名的 数据库目录,你可以在其中探索更多内容。
ABI 函数哈希
第五个字节之后是参数的编码位置。响应遵循类似的结构,但不包括函数签名。
ABI 通常是在使用智能合约时被忽视的一个方面,但它在这种技术的可用性中发挥着重要作用。建立在 智能合约教程 的基础上是了解这个默默无闻的“主力”的强大功能的好方法,也是应用你的知识的好方法。
Supercharged | Alchemy | Substack
获取免费的以太坊 RPC 和开发者工具 获取你的 API 密钥
📚 目录
分享:
\
\
以太坊\
\
以太坊分片:区块链分片简介\
\
什么是区块链分片以及它与以太坊有何关系?
\
\
以太坊\
\
什么是强化交易?\
\
探索一种新型交易,保证交易被挖掘并针对 Gas 进行优化
\
\
以太坊\
\
什么是以太坊承诺级别?\
\
了解安全(已证明)、最终确定和最新承诺级别
Alchemy 将最强大的 web3 开发者产品和工具与资源、社区和传奇支持相结合。
- 原文链接: alchemy.com/overviews/wh...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!