ABCI 概述 (Application BlockChain Interface)
作用
让应用程序层
和 共识层进行
解耦。可以理解为一套应用程序的接口标准,是应用程序层
和共识层进行
的桥梁。
应用程序区块链接口(ABCI) 允许用任何编程语言实现应用程序拜占庭容错复制。 区块链是多主状态机复制的系统。ABCI是一个接口,定义了复制引擎(区块链)和状态机(应用程序)之间的边界。使用Socket协议,运行在一个进程中的共识引擎可以管理运行在另一个进程中的应用程序状态。 以前,ABCI被称为TMSP。
官方github:ABCI
开发动机
目前为止,所有的区块链“技术栈”(如比特币)都是作为一个紧耦合的整体进行设计的。 换句话说,每一个区块链技术栈都是一个单独的程序,处理分布式账本的所有问题。 这些问题包括P2P连接、交易内存池广播、最新区块共识、账户余额、图灵完备合约、用户级权限管理等。
在计算机科学中,过高耦合度的程序架构通常不是好做法。 因为耦合度高会导致程序难以复用,并且这样做易导致代码库分叉进而维护困难。 当开发者没有对代码库进行模块化设计并遭受“意大利面代码”的困扰时,这种设计方式导致的问题更加明显。
高耦合度设计导致的另一个问题是所使用的开发语言受限于区块链技术栈(反之亦然)。在以太坊中,它提供一个图灵完备的字节码合约虚拟机,这就把开发者限制在了对应的合约语言上; 目前,这个合约语言是Serpent和Solidity。
相比之下,Tendermint分离了共识引擎和P2P层与特定区块链程序的应用状态细节。 Tendermint将应用程序的状态管理细节抽象到一个接口,并将该接口以socket协议的形式实现了出来。
所以,Tendermint拥有接口规范,即应用程序区块链接口(ABCI),并有了一个主要实现Tendermint socket协议(也叫TSP或Teaspoon)。
ABCI介绍
ABCI 与 Tendermint Core 通信
Tendermint Core (“共识引擎”)通过满足ABCI规范
的socket协议与应用程序通信。
ABCI 应用
如果有人想在ABCI上创建一个类似比特币的系统,
Tendermint Core将会实现
- 在节点之间共享区块和交易
- 建立交易标准/不可更改的顺序(即区块链)
应用程序将会实现
- 维护UTXO数据库
- 验证交易签名
- 防止使用未产生的交易
- 允许客户端查询UTXO数据库
Tendermint通过在应用程序进程和共识进程之间提供非常简单的API(即ABCI)来分解区块链设计。
ABI由3种主要消息类型组成,它们从Tendermint核心传递到应用程序,应用程序用相应的响应消息进行回复。