1. Home
  2. Docs
  3. 超块链共识数据结构和算法简析
  4. 共识出块

共识出块

概述

Buddy 共识算法

Buddy 共识算法是在 Paxos 分布式共识算法和 Buddy 内存管理算法基础之上为并行共识设
计的算法。
Buddy 共识算法过程分为结对和迭代两部分。

结对 Pairing Buddy

结对准备 Buddy Prepare

发起节点
1.广播结对请求 Buddy Proposal (结对条件,提案号,节点标识),
2.监听收集其他节点的结对承诺。
…将给出结对承诺的节点加入结对候选列表。
响应节点
1.监听结对请求,满足结对条件则发送结对承诺 Buddy Promise(提案号,节点标识).
…将发起节点加入结对候选列表。
2.监听并接收发起节点的数据块。
【备注】局部共识时结对条件包含超块链创始块、当前共识依赖的超块、参与共识的应用
数据负载。可选扩展信息包括应用共识脚本和应用单链创始块等。
全局共识时结对条件包含超块链创始块、当前共识依赖的超块、参与共识的局部链,全局
共识脚本。

接受结对 Buddy Accept

发起节点
1.向结对候选列表中的节点发送数据块。
2.侦听接收候选列表节点发送来的数据块。
…如果某节点数据块和自己持有数据块计算后满足结对条件则发送结对确认(数据块标识,
提案号)。
3.侦听该节点的结对确认
…如果该节点的结对确认则结对被接受,不再接受其他节点的结对。
响应节点
1.侦听接收候选列表节点发送来的数据块。
…如果某节点数据块和自己持有数据块计算后满足结对条件则发送结对确认(数据块标识,
提案号)。
2.侦听该节点的结对确认
…如果该节点的结对确认则结对被接受,不再接受其他节点的结对。

迭代 Iterating Buddy

在结对成功的基础上,已结对的各节点可以协商选定代表节点,由代表节点执行结对的扩
展。
新结对创建成功,后继续迭代这个过程扩展结对。直到结对满足迭代结束条件。
【注】迭代结束条件可以在节点结对时由节点协商决定,节点可以将最新局部链区块生成
时间和共识所依赖的超块生成时间做对比,再参考过往超块的生成时间规律,决定何时由
局部共识进入全局共识或者何时结束全局共识。
【注】结对过程中,结对数据的验证任务可以分发给结对中的其他节点,增加共识的去中
心化程度。

局部共识

使用 buddy 共识将上链数据块组成局部链。

全局共识

将多个局部链继续使用 buddy 共识,采用全局共识规则生成当前周期超块。
超块生成后,由参与共识的代表节点接受,并广播给结对的其他节点,其他节点再它们的
向邻居节点广播。

算法基本指标

测算假设

我们假设超块链网络使用最基本的区块版本和缺省配置,考查节点在网络带宽为千兆网络
环境下的算法可达到的指标。

块大小

超块
在基础的块版本中,块头数据包含 226 字节固定数据和因局部链数量不同而变化的可变数
据。块头数据中,每增加一条局部链,将占用 34 字节。系统配置为最多 64 条局部链(理论
上,只有网络带宽足够这个数字可以没有限制),所有可变数据将占用 2,176 字节。所以块
头数据在 260 字节到 2,402 字节之间(约 2KB)。
块体数据中,包含 10 字节固定数据和随局部链区块数量不同而变化的可变数据。每多一
个区块将占用 32 字节,通常一个共识周期内每条局部链可产生 2-1024 个区块。所以块体
数据会占用 74-32,788 字节(约 32KB)。
总和起来,超块数据会在 334 字节至 35,190 字节之间(约 35KB)。
局部链区块
在基础的块版本中,块头数据将使用 156 字节,块体数据包括 10 字固定数据和可变长的
应用数据负载,目前数据负载大小限制为 1 字节-2,048,000 字节(2MB)之间。所以局部链区
块数据在 167 字节到 2,048,166 字节(约 2MB)之间。
理论数据容量
按照基础块版本的配置,理论上,在一个共识周期中产生的超块和所有局部链区块的数据
总和在 668 字节到 134,226,594,000 字节(约 134GB)之间,前者是 1 超块加 2 个负载为 1
字节的局部链区块的数据量,后者是 1 超块加 65,535 个负载为 2MB 的局部链区块的数据
量。当然,使用这样的配置是为未来预留出足够的空间,现实中我们会受限于的网络带宽
和参与节点数,共识可处理的数据吞吐量远达不到这个数据量。

出块与最终化时间

目前,系统缺省配置中,局部链出块时间根据扩展的共识规则不同而有所不同。
使用纯 Buddy 算法的局部链出块时间小于 1 秒,
对于扩展了 POA/BFT/POS 共识规则的局部链,出块时间一般也小于 1 秒。
对于扩展了 POW 共识算法局部链出块时间为 15 秒左右,例如:提供系统燃料币 PARA
Coin 的单链的出块时间设定为 15 秒左右。
系统缺省配置中,局部共识阶段的时限为 150 秒左右,全局共识阶段,超块的出块时间设
置在 150 秒左右。所以单个共识周期内超块出块时间为 300 秒左右。
对于局部链区块的最终化而言,10 个区块之后最终化的概率接近于 1.大概 150 秒。
对于局部链而言,2 个共识周期之后,局部链最终化的概率接近于 1.大概 600 秒。
对于超块而言,5 个共识周期之后最终化的概率接近于 1.大概 1500 秒。

等效 TPS

系统缺省配置中,POW 单链的 TPS 约为 15,POS/POA/BFT 单链的 TPS 接近 1000,
对于采用纯 Buddy 共识的单链,在未使用多条局部链分片提升效能的情况下,一个共识周
期内单链最多可出 1024 块,以每笔交易约 500 字节,区块负载 2M 字节限制计算,每块
最大约 4000 笔交易,则未分片的单链 TPS 上限约为 13653。
由于超块链体系内不同单链交易数据结构可以各异。我们定义等效 TPS 来表达超块链的
TPS 指标。
等效 TPS = 超块链各单链 TPS 之和
例如,假设系统中有 1 条 POW 单链,1 条 POA 单链和 1 条 Buddy 单链,则系统的等效
TPS 上限为 14668。

共识安全保障

节点验证

节点采用椭圆曲线算法生成节点密钥对,使用公钥作为节点唯一标识。

通信传输安全

消息传输可明文,也可将安全机制开放给节点应用自定义。

数据完整性保证

节点间发送的消息,消息负载内部数完整性由应用自定义验证机制来保证。消息头须包含
节点标识,时间戳,并使用节点私钥签名。

Was this article helpful to you? Yes No