Tendermint:一个低层级的区块链引擎
Tendermint 是一个低层级的区块链引擎,能够在多台机器上提供安全且一致的状态复制。它是一种弱同步(主要是异步)的拜占庭容错(BFT)工具,被用作任意应用状态和分布式系统的即插即用共识机制。最初,Tendermint 被构想为比比特币工作量证明协议更高效和安全的共识机制,经过不断发展,现已成为 Cosmos 网络的底层共识引擎。
Tendermint 的背景
Tendermint 是由 Jae Kwon 在 2014 年提出的一个开源项目,最初发表于一篇学术论文中。该论文虽然现已过时,但仍值得一读。它解决了状态机中安全且一致的复制问题,这一目标在本质上难以实现。
在区块链系统中,容忍恶意行为者破坏节点并传播虚假消息的能力是一个关键特性,这使得系统能够正常运行并对网络状态达成诚实的共识。然而,比特币的工作量证明模型实现这一共识的方式效率低下且资源密集。Tendermint 提出了一种新的 BFT 模型,特别关注使 Tendermint 软件的主要共识引擎能够用于其他各种区块链网络,并与其他编程语言普遍兼容。
因此,Tendermint 的初始概念经过多年优化,已成为一个具有专有应用接口的通用区块链共识引擎。目前,Tendermint 是 Cosmos 网络的基础设施引擎——一个多链框架平台,通常被称为“区块链互联网”。
总体而言,Tendermint 具有一些独特的能力和引人入胜的技术。那么它是如何工作的呢?
Tendermint 的工作原理
Tendermint 是一个通用区块链引擎,可以承载任意应用状态,主要由两个主要组件组成:
- Tendermint Core:Tendermint BFT 共识引擎
- 应用区块链接口(ABCI):支持用任何编程语言编写的应用的 BFT 复制
Tendermint 作为一个 BFT 的权益证明协议运行。它被设计为即插即用工具,既直观易用,又为高效互操作性而设计。它可以有效实现为任何区块链网络的共识机制。ABCI 将共识机制与应用状态的 P2P 层解耦,并在应用逻辑与共识引擎之间提供了一个清晰的接口。
Tendermint 使用权益证明机制,这在阅读以下部分时需特别注意。让我们来看看这两个主要组件。
Tendermint Core
作为整个 Tendermint 软件的底层共识引擎,Tendermint Core 确保分布式网络中的机器以相同的方式记录交易顺序。由于 Tendermint 是一种 BFT 共识机制,它与其他 BFT 系统做出了相同的假设,即网络中不超过 1/3 的节点在任何给定时刻可能是拜占庭节点。
同样,它使用基于轮次的投票机制,与其他 BFT 机制类似。为了更好地理解这一概念,以下列出了其他 BFT 机制中用于选择每轮领导节点的类似机制:
- 实用 BFT 使用轮询风格来选择每轮的领导节点。
- 时间流逝证明在 SGX 中使用随机计时器进行领导节点选择。
- 比特币使用中本聪共识,通过解决工作量证明计算难题以类似彩票的方式确定每轮的领导者(挖矿)。
Tendermint 使用一个优化版本,旨在扩展到每秒数千笔交易,并允许轻松的即插即用功能。我们可以将 Tendermint BFT 的一轮分解为三个阶段:
- 区块提议
- 预投票
- 预提交
协议的参与者是验证者。验证者根据他们在本轮中的总权益提议和投票区块。因此,1/3 BFT 假设基于每个验证者的“权重”——由其相关权益决定——而不是参与总节点的 1/3。
验证者维护一个完整客户端节点,拥有区块链的副本,并使用公钥作为其标识符。区块提议阶段是验证者在一轮中提议新区块的阶段。
预投票阶段是验证者对提议的区块进行投票,如果超过 2/3 的验证者对提议的区块进行预投票,则进入预提交阶段。这被称为 polka。
在预提交轮次中,如果超过 2/3 的验证者对预投票的区块进行预提交,则该区块被提交到区块链。值得注意的是,每个预提交必须由同一轮次中的 polka 证明。
提议失败区块或签署不当区块的验证者可能会面临其权益被削减的风险。上述三步过程被视为一轮。
Tendermint 主要是异步的(或弱同步的),因此可能需要几轮才能提交一个区块。提议过程是部分同步的,而投票过程是异步的。根据 Tendermint 的说法:
验证者可能因多种任意原因无法提交区块;例如,当前提议者可能离线,或者网络可能正在经历延迟。Tendermint 允许跳过验证者。验证者等待一小段时间以从提议者那里接收完整的提议区块,然后再投票进入下一轮。这种对超时的依赖使得 Tendermint 成为一种弱同步协议,而不是异步协议。然而,协议的其他部分是异步的,验证者只有在听到超过 2/3 的验证者集后才会取得进展。
由于其设计,Tendermint 保证了安全性永远不会被违反,因此 Tendermint 区块链永远不会分叉。然而,由于要求超级多数的验证者保持 100% 的正常运行时间,网络可能会停止。
总体而言,共识机制在共识安全性和即时终结性方面牺牲了一定程度的活性。
应用区块链接口(ABCI)
ABCI 是 Tendermint 灵活性的关键组件,允许用任何编程语言编写的应用进行 BFT 复制。
Tendermint 将 ABCI 的动机描述为当前加密货币平台(如比特币和以太坊)的单体堆栈设计。单体设计导致协议的维护复杂性,并限制了其他编程语言与区块链交互的能力。例如,以太坊支持图灵完备的字节码虚拟机,但编程语言仅限于可以编译为该字节码的语言,如 Solidity 和 Vyper。
ABCI 的主要实现是 Tendermint 套接字协议(TSP),这是 Tendermint Core 与应用通信的方式。虽然 Tendermint Core 负责维护和验证区块链区块中交易的规范顺序,但 ABCI 验证加密签名,维护交易数据库,并允许客户端查询交易数据库。
ABCI 使用三种主要消息类型:
- DeliverTX
- CheckTX
- Commit
DeliverTX 消息伴随区块链中的每笔交易,并且只能在验证后更新应用状态。CheckTX 消息用于验证交易,首先由 Tendermint Core 的内存池验证。只有有效的交易才会在网络中传播。Commit 消息计算当前应用状态的承诺,使 Merkle 证明能够针对由法定人数签名的区块哈希进行验证。
ABCI 是面向连接的,Tendermint Core 维护与应用的三种 ABCI 连接:
- 内存池连接
- 共识连接
- 查询连接
内存池连接使用 CheckTX 消息,用于验证交易是否应在提交前中继。共识连接执行已提交的交易。查询连接允许客户端查询应用状态。
ABCI 是 Tendermint 软件的一个动态组件,对于 Cosmos 网络的多链框架能力至关重要,作为网络的底层区块链引擎,它为 Cosmos 提供动力。
Tendermint 与 Cosmos 网络
Cosmos 网络是一个多链区块链框架,专注于解决区块链系统的主要可扩展性和互操作性问题。它由 Tendermint 经典 BFT 区块链引擎驱动,作为一个更广泛的结构,使独立区块链能够插入并在标准化的通信环境中运行。该网络允许公有和私有区块链相互通信和交换价值,并通过 Tendermint 的权益证明共识机制实现可互操作的可扩展性。
此外,Tendermint 的 ABCI 使开发人员能够使用任何编程语言轻松构建多样化的区块链作为生态系统的一部分。Cosmos SDK 是用 Go 编程语言编写的 ABCI 框架,Lotion JS 是用 JavaScript 编写的 ABCI 框架。
像 Cosmos 和 Polkadot 这样的多链框架引起了极大的关注。你可以在其文档中找到更多关于 Cosmos 及其与 Tendermint 集成的信息和资源。
结论
Tendermint 代表了分布式网络中拜占庭容错研究和开发的又一进步,特别是在区块链系统中。这类创新对于开发更具可扩展性和互操作性的区块链网络(如 Cosmos)至关重要。
Tendermint 和类似的 BFT 共识进展是加密货币行业在推动尖端技术发展方面取得显著进展的绝佳例子。区块链技术背后的更广泛概念要实现其真正潜力,还需要更多的创新,但项目正走在正确的轨道上,并正在动态改变分布式计算格局。