什么是 ABCI?

什么是 ABCI?

一、ABCI 概述

通用区块链接口 ABCI 允许以任何类型的编程语言编写的类似拜占庭容错复制的应用程序。

原意

到目前为止,实现区块链的源代码是一个庞大的应用程序,它是一个包含所有功能模块的应用程序,包括 P2P 网络、“mempool”广播交易、共识模块、账户余额、图灵完备合约模块和用户权限模块,等等

区块链是变相传销吗_什么是区块链?_区块链和区块链一样吗

CITA将单个节点解构为交易共识、合约引擎、链存储、网络同步、服务网关等多个松耦合的微服务,一方面利用云计算基础设施

士来按需提升性能。另一方面,每个组件都可以独立更换和升级。

过大的软件代码会导致组件复用和维护过于复杂,尤其是在代码模块封装不够好的情况下;

此外,统一架构会限制编程语言的使用。例如,在以太坊中,它支持图灵完备的字节码虚拟机,这将开发人员限制在可以编译成该类型字节码的语言上。目前只有 Serpent 和 Solidity 满足。

因此,基于以上两个缺陷,Tendermint 将共识引擎和 P2P 网络与某些区块链应用程序(例如 Bitcoin-core 和 go-ethereum)分开。区块链应用的细节被抽象成一个接口,通过套接字协议实现。

区块链和区块链一样吗_什么是区块链?_区块链是变相传销吗

于是就有了接口的概念,即通用区块链接口(ABCI),以及实现该接口的Tendermint Socket Protocol(简称:TSP或Teaspoon)。

二、ABCI简介

Tendermint Core什么是区块链?,也称为共识引擎,通过满足 ABCI 规范的套接字协议与应用程序进行通信。

以比特币为例,比特币加密货币区块链中的每个节点都维护着一个完整的数据库,其中包含公共链的所有未交易输出。如果您想在 ABCI 上实现类似比特币的系统,Tendermint 将负责:

区块链应用程序(又名比特币-coer)负责:

区块链和区块链一样吗_什么是区块链?_区块链是变相传销吗

Tendermint 在应用程序(如 Bitcoin-core)过程和共识过程之间提供了一个简单的接口(如 ABCI),从而对大型区块链应用软件进行分解。

ABCI 由三种主要的消息类型组成,它们从 Tendermint-core 发送到区块链应用程序(例如 bitcoin-core)什么是区块链?,应用程序相应地响应消息。

可以在以下位置找到该消息的详细说明:

DeliverTx 是应用程序的重要组成部分,它交付链中的每一笔交易。应用程序(例如比特币核心)需要根据当前状态、应用程序协议和交易的加密凭证来验证从 DeliverTx 消息传递的每笔交易。然后每个经过验证的交易都会更新应用程序的状态,例如存储交易键值对或更新 UTXO 数据库。

CheckTx 消息类似于 DeliverTx 类型,但它只是验证交易的有效性。Tendermint Core 内存池首先通过 CheckTx 检查交易的有效性,然后将有效交易转发给其节点。例如,应用的验证规则是检查交易的递增序列号,如果序列号旧,CheckTx 会返回错误。

什么是区块链?_区块链和区块链一样吗_区块链是变相传销吗

Commit 消息用于计算当前应用程序状态的密码承诺,并将密码承诺放入下一个块头。不一致的节点状态更新表明链分叉。加密保证还简化了安全轻节点客户端的开发,因为 Merkle 哈希证明可以通过检查已由法定人数签名的块哈希来验证。

多个 ABCI 套接字可以连接到同一个应用程序。Tendermint Core 创建了三个新的 ABCI 连接应用程序:一个用于验证广播到内存池的交易;另一个被共识引擎用来运行新的区块提议;最后一个套接字连接用于查询应用程序状态。

显然,在开发区块链底层链时,开发者需要对消息处理非常严格。但是 Tendermint 的 ABCI 的三消息模型架构为消息处理提供了一个很好的例子。下图展示了 ABCI 的消息流:

在这里插入图片描述

三、关于确定性的说明

区块链是变相传销吗_区块链和区块链一样吗_什么是区块链?

区块链处理交易的逻辑必须是确定性的,否则 Tendermint Core 复制的节点之间将无法达成共识。

在以太坊平台上使用 Solidity 开发区块链应用程序是一个不错的选择,除其他因素外,它是一种完全确定性的编程语言(即在所有环境中输出都是相同的,相反的例子是普通编程的问题语言多线程竞争导致输出不确定),但是通过普通编程语言,如果知道遵循规范(比如避免线程竞争),同样可以在各种条件下实现相同输入的一定输出。游戏程序员和区块链开发者熟悉在不确定的场景下开发最终的程序,例如:

仔细编码可以避免编写输出不确定的代码,还可以创建特殊的语法检查器或静态分析器来检测确定性。将来我们的团队可能会开发出这样的工具。

参考文档

1.什么是 ABCI?

2.区块链PoS共识——Tendermint