应用程序区块链接口

2025年5月5日 | 阅读 4 分钟

引言

区块链网络及其应用可以因为称为应用区块链接口 (ABCI) 的协议而进行通信。它充当了区块链与链下服务或系统之间通信的桥梁。下面我们将简要介绍应用区块链接口。

什么是应用区块链接口 (ABCI)

ABCI 将需要在多个平台之间复制的应用与共识引擎(区块链)分离开来。为了确保所有代理的内部状态同步,ABCI 提供了应用逻辑和共识引擎之间的透明通信。需要复制的应用可以用任何编程语言编写,并使用多种技术与每个代理的共识引擎进行交互,例如,使用 Unix 的套接字或 TCP。在此实例中,我们使用 ABCI 在服务代理的代理内部复制 FSM 应用的状态。

Tendermint 项目引入了 ABCI 标准。然而,任何兼容 ABCI 的共识引擎都可以与 ABCI 应用一起使用,例如 Fantom。在本节中,我们将把 Tendermint 作为共识引擎进行讨论。

什么是 Tendermint

Tendermint 是一个程序,允许您在多台计算机上安全可靠地复制应用。它保证拜占庭容错 (BFT) 复制,即它可以容忍任何类型的机器故障,包括恶意故障。

Tendermint 的两个主要技术要素是通用应用接口和一个 区块链 共识引擎。

  • 称为 Tendermint Core 的底层共识引擎确保所有机器都以相同的顺序记录相同的交易。
  • ABCI 使得任何编程语言都可以用于处理交易。与预先打包好状态机的其他区块链和共识解决方案不同,开发人员可以使用 Tendermint 在任何编程语言和开发环境的任何应用中复制状态机。
Application Blockchain Interface

Tendermint 复制应用

上图简化的图表说明了 Tendermint 如何通过使用 ABCI 层将业务逻辑层(应用)与共识和网络层(Tendermint Core)区分开来,来模块化分布式状态机复制系统。

ABCI 协议

ABCI 应用和共识节点之间的通信遵循客户端-服务器模型。必须同时考虑应用要执行的交易的主动执行以及共识节点收到的回调。

  • 共识节点或客户端会因各种原因向 ABCI 应用发送请求,应用或服务器会等待客户端的回调。例如,为了通知应用某个区块已被验证,以从应用层获取数据,或确定某个交易是否合法,从而有资格添加到交易池中。应用必须处理并适当地处理这些回调。
  • 相反,当应用想要向区块链发送交易时,它可以主动执行。它可以将某个观察到的值提交给外部服务器。这就是用户在使用区块链时的角色。

共识节点的被动回调

ABCI 应用和共识节点之间的请求-响应交互之后,会按照 ABCI 协议指定的顺序调用一系列方法。换句话说,将根据它们的不同功能将与共识层事件相关的各种回调发送给应用,分组如下。

  • 共识协议技术包括:InitChain、BeginBlock、DeliverTx、EndBlock 和 Commit。
  • CheckTx 是一个与内存池相关的技术,用于在共享或包含在区块之前验证新交易。
  • Info 和 Query 是用于初始化和用户查询的方法。
  • ListSnapshots、LoadSnapshotChunk、OfferSnapshot 和 ApplySnapshotChunk 是状态同步 快照 服务和恢复方法。

此外,每次连接都会调用 Flush 方法,Echo 方法仅用于 调试

在创世时,共识节点会主动发出某些请求,如 Info 和 InitChain。而不是依赖内存池中保存的大量交易请求。

主动调用区块链

ABCI 应用可以使用 Tendermint RPC 协议将交易发送到 Tendermint 区块链。下面列出的 Tendermint RPC 方法是应用发送交易的方式。

  • broadcast_tx_sync,在交易被添加到内存池并被认为是有效之前会阻塞。
  • 此外,broadcast_tx_async 不等待交易被添加到内存池并被认为是有效。
  • broadcast_tx_commit 会等待交易被提交到区块并由应用处理。

请注意,上述方法接受交易作为输入,即一系列字节。由于交易内容包含在 ABCI 应用逻辑中,共识节点不知道交易内容的含义。这是将共识层与应用层极大解耦的主要特点之一。

下图简要总结了 ABCI 协议。

Application Blockchain Interface

ABCI 协议消息流概述

结论

ABCI 用于发送、接收消息、执行交易,而区块链将负责数据完整性。因此,这将提高性能和效率。