技术干货 | 详解Libra区块链及其共识协议
- 能够扩展到数十亿帐户,这要求区块链具有极高的交易吞吐量和低延迟等特点,并拥 有一个高效且高容量的存储系统。
- 高度安全可靠,可保障资金和金融数据的安全。
- 灵活多变,为未来金融服务创新提供动力。
- 设计和使用 Move 编程语言。
- 使用拜占庭容错 (BFT) 共识机制。
- 迭代改善已广泛采用的区块链数据结构
Move 从本质上令人更加 轻松地编写符合作者意图的代码,从而降低了出现意外漏洞或安全事件的风险。具体而 言,Move 从设计上可防止数字资产被复制。它使得将数字资产限制为与真实资产具有相同属性的“资源类型”成为现实:每个资源只有唯一的所有者, 资源只能花费一次,并限制创建新资 源。
Libra 协会致力于对智能合约实施适当的审查和风险控制。首先,只有协会批准和发布 的智能合约才能与 Libra 支付系统直接交互。随着时间的推移,协会将探索适当的控制措施, 以允许第三方方发布智能合约。
- 首先,它可以在网络中建立信任,因为即使某些验证者节点(最多三分之一的网络)被破 坏或发生故障,BFT 共识协议的设计也能够确保网络正常运行。
- 第二,与其他一些区块链中使用的“工作量证明”机制相比,这类共识协议还可实现高 交易处理量、低延迟和更高能效的共识方法。
- 第三,LibraBFT 协议有助于清楚地描述交易的最终性,因此当参与者看到来自足够数量 验证者的交易确认时,他们可以确保交易已经完成。
该网络的结构是为了加 强验者运行软件的保证,包括利用关键代码分离等技术、测试共识算法的创新方法以及对依 赖关系的谨慎管理。最后,Libra 网络将定义在出现严重漏洞或需要升级时重新配置 Libra 区 块链的策略及过程。
除了在这些情况下确保系统的安全恢复之外,这种准备将阻止攻击,因为 攻击者将知道他们的行为可以被反击。
上述设计决策的一个结果是,Libra 区块链将提供公共可验证性,这意味着任何人(验证 者、Libra 网络、虚拟资产服务提供商(VASP)、执法部门或任何第三方)都可以审核所有操作 的准确性。交易将以加密方式签名,以便即使所有验证者都被破坏,也不能接受来自具有安全 签名密钥的伪造交易。该设计与硬件密钥管理和高价值密钥的离线存储兼容。
上述设计决策的另一个结果是,Libra 区块链将支持一种隐私方方法,该方法将考虑网络 上参与者的多样性。协会会监督 Libra 区块链协议和网络的发展,并在考虑适用的监管要求的 同时,不断评估新技术以增强区块链上的隐私合规性。
LibraBFT 在 3f+1 个验证节点之间收集投票, 这些验证者可能是诚实的节点也可能是拜占庭节点。在网络中有 2f+1 个诚实节点的前提下, Libra 能够抵御 f 个验证节点的双花攻击和分叉攻击。
LibraBFT 在一个有全局统一时间 (GST),并且网络最大延时(ΔT)可控的 Partial Synchrony 的网络中是有效的。并且, LibraBFT 在所有验证节点都重启的情况下,也能够保证网络的一致性。
为了能够更好地理解 LibraBFT,我们回顾一下 PBFT 和 HotStuff 共识协议。
PBFT 是一类状态机拜占庭系统,要求整个系统共同维护一个状态,所有节点采取的 行动一致。为此,需要运行三类基本协议,包括一致性协议、检查点协议和视图更换协议。 视图转换协议保证共识协议的活性(liveness)。当主节点出故障时能保证共识能继续进行。PBFT 的视图转换协议是非常复杂的,涉及到很多消息的重传。HotStuff 的最重要的改进, 主要是针对视图更换的协议。
HotStuff 采用门限签名机制,门限设置是(k, n)。n 个节点中所有的节点共用一个 公钥,但每一个节点有自己的私钥。每个节点用自己的私钥签名消息 m,叫部分签名消息, 多个节点的部分签名消息可以用来生成一个联合签名消息,当至少有 k = 2f+1 个节点提供部 分签名消息时,其它任何一个节点能用公钥验证该联合签名消息。其中 f 是系统能容忍的拜 占庭节点总数,n = 3f+1。
HotStuff 论文中提出一个“认证复杂度”的概念。认证复杂度简单来说,统计协议交 互时通信的认证消息数,也就是部分签名或联合签名消息的个数。
HotStuff 两个重要的优点
- 一个是 linearity,指的是通信的复杂程度和节点数成线性关系;
- 另一个是 responsiveness,指的是当网络通信成为同步的时候,HotStuff 能产生 正确的 Leader 来推动协议在网络延迟的实际值内而非最大值达到共识。
这也体现了 Libra 的平衡术 – 在去中心、安全、扩展性这个棘手的区块链三难问题上, 巧妙的选择一个平衡点。
libraBFT 的共识流程是分为不同轮次(rounds),每一轮中一个 Leader 主节点被选 出。主节点会提议一个区块,里面包括多个交易。该区块将广播给其它共识节点。其它共识 节点会验证区块里的交易,并对其投票。主节点收到大多数(超过 2f+1,f 是系统中能容忍 的拜占庭节点数)节点的投票后,主节点把确认消息发给所有共识节点确认。如果主节点没 收到大多数投票,或者主节点出现故障,副本共识节点的定时将超时,副本节点会发起新的 一轮提议。
libraBFT 在 HotStuff 基础上的改进主要在于提供一个详细的参与同步轮次的 Pacemaker 设计和实现。并提供对实际交易确认的活性分析。LibraBFT 提供对共识节点投 票权力的重配置机制。同时它给出了对提议节点和投票节点激励的机制。白皮书给出了如何 检测投票节点破坏正确性的行为,为今后在协议中加入惩罚机制打下基础。同时白皮书也详 细讨论如何做同步,使得投票节点能同步它们的状态。libraBFT 白皮书采用 Rust 语言来描 述协议。
在 LibraBFT 中,为了更好地支持 Libra 生态系统的目标,LibraBFT 以多种方式扩展 和调整了核心 HotStuff 协议和实现。重要的是,LibraBFT 重新定义了安全条件,并提供了 安全、存活度和更高响应度的扩展证明。LibraBFT 还实现了一些附加功能。
首先,通过让 验证器对块的结果状态(而不仅仅是交易序列)进行集体签名,LibraBFT 使协议更能抵抗非确 定性错误。 还允许客户端使用法定人数证书来验证读取的数据库。
其次,LibraBFT 设计了 一个发出明确超时的起搏器,验证器依靠法定人数来进入下一轮 - 不需要同步时钟。
第三, LibraBFT 打算设计一个不可预测的领导者选举机制,其中一轮的领导者由最新提交的块的 提议者使用可验证的随机函数 VRF 确定。 这种机制限制了攻击者可以针对领导者发起有效 拒绝服务攻击的时间窗口。
第四,LibraBFT 使用聚合签名来保留签署仲裁证书的验证者的 身份。 这使我们能够为有助于仲裁证书的验证人提供激励,聚合签名也不需要复杂的 密钥 阈值设置。
- TxnManager 是内存池组件的接口,支持拉取交易以及删除已提交的交易。 提议者使 用来自内存池中的按需拉取交易来形成提议块。
- StateComputer 是访问执行组件的接口。 它可以执行块,提交块,并可以同步状态。
- BlockStore 维护提议块树,块执行,投票,仲裁证书和持久存储。 它负责维护这些 数据结构组合的一致性,并且可以由其他子组件同时访问。
- EventProcessor 负责处理各个事件 (例如, process_new_round, process_proposal, process_vote). 它公开每个事件类型的异步处理函数和驱动协议。
- Pacemaker 负责共识协议的活跃性。 它由于超时证书或仲裁证书而改变轮次,并在 它是当前轮次的提议者时提出阻止。
- SafetyRules 负责共识协议的安全性。 它处理仲裁证书和分类信息以了解新的提交, 并保证遵循两个投票规则 — 即使在重启的情况下(因为所有安全数据都持久保存到 本地存储)。
libraBFT 基于链式 HotStuff,其确认规则遵从 3-chain 的确认规则。libra 能在众多 的共识协议中选择 HotStuff,显示了 libra 团队的眼光,以及在区块链三难问题上巧妙的平 衡术。libraBFT 继承了 HotStuff,使得它的共识协议具有正确性(safety),在半同步网络 下的活性(Liveness),最终性(Finality);同时具有通信线性复杂度(linearity)和响 应性(responsiveness)。
Libra 的实现也展示了简易性(simplicity)和模块化 (modularity)的实现。同时也体现了 sustainability(可持续性),不需要工作量证明以 降低能耗。
- 《Libra 白皮书 2.0》
- 《LibraBFT 共识协议》(邹均)