close
正在加载
从区块链到DAG(三)MeerDAG 共识机制之SPECTRE 协议技术详解
互联网 · 2023-05-11 08:41:47
币界网报道:

前言

项目愿景:Qitmeer Network 基于区块链底层技术,将打造一个由用户和开源开发者主导的开放协作、隐私保护、生态共建的高维数字世界,为 Web3 带来新范式,也是未来伊斯兰金融的基础设施。 Qitmeer Team 以共治共享、开放包容的形象,鼓励有共同使命价值观的伙伴,一起共建去中心化、生态繁荣的高性能公共区块链。

比特币诞生的十年以来,区块链的基础设施不断地进行技术迭代,各种公链项目层出不穷,‘不可能三角’一直是所有公链团队想要攻克的技术瓶颈,部分公链项目为了宣传其高性能,不惜牺牲去中心化程度,用单一实体来控制网络,这样的公链网络虽然跑的很快,但是它的地基是建立在空中楼阁之上。

Qitmeer 坚持将开放性、公平性、安全性、扩展性作为优秀公有链的核心指标,我们认为满足以上指标为中本聪所理想中的经典区块链设定。 Qitmeer 共识机制遵循经典区块链设定:节点通过工作量证明可以自由进入和退出网络,保障了网络不会被单一实体控制,真正实现了中本聪理想中的去中心化;基于 BlockDAG(区块图)的合作模型矿工可以根据自己的贡献公平地获得相应的回报;图式账本结构能达到与比特币相当的算力安全性,同时由于区块图的快速确认和高吞吐量,基本上只受网络物理特性限制,最大化提升网络运行效率。

Qitmeer 采用的 MeerDAG 混合共识协议集成了 GHOSTDAG 和 SPECTRE 的多个优点,保障网络的安全高效和交易的快速确认,是目前少数开创性集成 BlockDAG 协议的高性能公有链。 下面给大家详细介绍一下 MeerDAG 共识机制之 SPECTRE 协议。 

MeerDAG 共识机制之SPECTRE 协议

从上一篇(《从区块链到 DAG(二)MEERDAG 的前世今生》)可知,最重子树原则(GHOST)通过采取计算以分叉区块个数最重的链为主链来提升链的安全性,但分叉区块除了纳入区块计数外,区块内包含的交易信息却全部被丢弃。为了最大化提升区块链特性,BlockDAG 的区块都指向上一级的所有区块,整个网络并不是线性的,而是以区块图的形式;区块打包节点的异步记账,同一时间内不同的节点可以记录不同的信息。因此单位时间内可以打包的交易数量更多,提高了网络并发能力。

SPECTRE 协议顺应了这种结构所以并没有提出选择主链的概念,而是着眼于解决冲突交易和防止恶意攻击。 这里需要声明一下,所有讨论账本共识有效有个大前提:网络中大多数节点都是诚实的。

SPECTRE 协议较为复杂,下边将从其如何产生区块、如何处理冲突交易以及产生可信交易集、如何防止网络攻击等四个方面进行描述。 

SPECTRE — 区块产出

SPECTRE 协议中,当产生区块时,要指向之前所有分叉的末端区块

下图 1 中,左边为比特币产生区块时,当有分叉出现,新区块将选择基于其中一个产生新的区块,而 SPECTRE 协议基于所有分叉末端区块产生新的区块。 同时,当有新区块产生时,节点要立刻将新区块(包含基于哪些区块产生这一信息)发送给与自己相连接的节点。

图1.png

*图1 左边为比特币产生区块,右边为 SPECTRE 协议产生区块

SPECTRE 协议将矿工维持交易不冲突的要求剥除

比特币不考虑分叉,就是一本不可篡改的账本,而 SPECTRE 产生的 DAG 就像一本不权威账本,里边的交易信息可能冲突 (上边图 1 中两个 1 区块中可能包含冲突交易信息)。

该协议下,挖矿节点只负责迅速挖区块(能够达到 1 秒一个区块),而对分叉中可能包含的冲突交易在挖矿阶段并不做任何处理,将记录交易速度最大化,让 DAG 这种数据结构有着恐怖的处理交易能力。SPECTRE 协议数据结构如图 2 所示。

微信图片_20230510135138.png

*图2 SPECTRE 区块链示意图

SPECTRE 如何解决冲突交易

SPECTRE 通过区块间的投票来排除冲突的交易,如图3

图2.png

*图3 一个简单的 DAG 网络的投票过程

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》 区块 X 里记录的交易信息是交易 x 先于交易 y 发生,记为 x<y ;区块 Y 里记录的交易信息是交易 y 先于交易 x 发生,记为 y<x,这两个交易相互冲突。

投票过程:区块 X 和区块 Y 分别投票给自己。 区块 X 之后产生的区块我们称之为 X 的未来区块,回溯这些未来区块发现 6,7,8 只能回溯到 X,所以这三个区块都投票给 X,标记为蓝色。同理,回溯区块 Y 的未来区块发现 9,10,11 只能投票给 Y,标记为红色。未来区块 12 既回溯到 X 又能回溯到 Y,它会投出与上一轮投票一样的结果 X。图中虚线部分是上一轮的投票,按少数服从多数的原则可知,投票的结果是 X。

X 或 Y 之前产生的区块我们称为 X 或 Y 的过去区块,这些区块会分别统计自己对应的未来区块的投票,然后跟投给得票较多的那个选项。由此,区块 1~5 都投给 X,交易 x<y 认定有效,y<x 被丢弃。 

SPECTRE — 产生可信交易集

SPECTRE 可信交易集(蓝色集)就相当于超过当前 6 个区块的比特币链里组成的交易集合。区块链本质上就是一个账本体系,交易转账就会更改区块链账本的信息。 所以,得出确定的、不可能更改的交易信息就至关重要,SPECTRE 可信交易集产生过程如下:遍历区块,依次提取交易信息,无冲突交易加入无冲突交易集。将导致账户余额不足的冲突交易加入冲突交易集。

根据上边的投票算法,依次对冲突交易进行投票,产生冲突区块顺序集,决定哪一条交易有效。将投票有效的交易加入无冲突交易集。将无冲突交易集中超过一定时间的交易组建可信交易集,即该交易池交易信息基本不可能被篡改。

SPECTRE 并不会对所有区块进行排序,所有区块没有一个完整的线形顺序,有的只是决定冲突信息先后的区块顺序对。

比特币中的高度代表的就是线形顺序,高度低的区块中交易信息先于高度高的区块里的信息,高度高的区块就不能包含和高度低的区块冲突的交易,而 SPECTRE 有大量的分叉,区块高度不能代表线形顺序,前边的区块交易信息不一定先于后边的分叉区块交易信息,交易信息的有效性要由投票算法来决定,区块投票算法很快,再加上它将所有分叉区块都包含进来,也就没有了比特币所面临的分叉风险(等待 6 个区块),交易确认时间可以达到 10 秒。 

抗“双花”攻击

图4 展示了一次不成功的“双花”攻击,这种攻击一共分为三个阶段。

图3.png

*图4 一次不成功的“双花”攻击

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》 在第一阶段攻击者秘密准备了一个区块 Y,Y 包含了交易 y<x。而后攻击者继续秘密生产区块 13 和 14,这些新生产的区块一定会引用攻击区块,但是其中的一部分也会引用诚实节点的区块,例如 13;目的是为了在后续的投票过程中“策反”这些诚实区块使他们投票给 Y,比如诚实区块 4,在第一阶段结束时 4 的未来区块只有 13,14,4 会投票给 Y。

但是这种“策反”在 SPECTRE 的投票规则里是无效的,因为诚实节点总是比做恶的节点多,总体上看诚实节点的出块效率会高于做恶节点,所以即使短时间内“策反”成功了,在后续过程中还是可以给修正回来。

第二阶段开始后,正常的交易 x<y 被记录在区块 X 中,攻击者的目的是等 x<y 被几个区块确认纳入账本以后,把通过这比交易获得的代币兑换成法币或者某种服务牟利;而后再释放出自己的攻击区块,使整个账本回滚并认定 x<y 这笔交易被无效,回滚后原本已经转出兑换的代币又重新回到自己的账户,可以反复使用,即“双花”(同一笔钱花掉两次)。

但是在 SPECTRE 投票中这种攻击是不会成功的。在第二阶段攻击者继续秘密生产区块 15、16、17,诚实节点由于不知道这些秘密区块,所以诚实节点产生的区块不会引用它们。在第三阶段,攻击者继续生产区块并把之前秘密生产的所有区块上传到网络中,企图让自己的攻击区块合法化,回滚整个账本。

此时分析上图 4 可知:Y 的未来区块 13~19 只能回溯到 Y 故而投票给 Y。X 的未来区块 6~10 只能回溯到 X,故而投票给 X。X 的过去区块 1~5 分别通过统计各自的未来区块,可以得出大部分未来区块都投的 X,所以它们也会跟投 X。区块 4 在第一阶段被“策反”的投票正是在这里给修正了回来,因为在 4 的 16 个未来区块中,有 9 个投给 X(区块 X 加上区块 5~12),比投给 Y 的 7 个多(区块 13~19),所以 4 最终会投票给 X。区块 11 和 12 既能回溯到 X 又能回溯到 Y,所以他们分别投出与前一轮投票一致的结果,根据少数服从多数的原则,前一轮投票也是投给 X 的区块占大多数,所以 11、12 最终也会投给 X。

综合所有区块的投票,投给 X 的占绝大多数,最终账本会记录 x<y 而抛弃 y<x,”双花“攻击没有奏效。 

抗 censorship 攻击

相比广为熟知的“双花”攻击,censorship 攻击(审查攻击)要显的陌生很多。与“双花”攻击不同,censorship 的攻击者会持续的产生区块并立刻把这些区块在网络中公开,见图5

图4.png

*图5 一次不成功的 censorship 攻击

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》 在当前阶段,攻击者持续产生区块 12~16,但是这些区块和区块 X 是没有关联的,它们既不会引用 X,也不会回溯到 X;这意味着这些区块将来是有可能被“策反”投票给 Y 的。在未来的某个时刻,攻击者上传一个包含冲突交易的区块 Y,Y 的未来区块都会投票给 Y,例如 17、18。而与 X 不相关的过去区块 16 这时候会被“策反”投票给 Y,因为 16 的大部分未来区块也都投票给了 Y。

那些与 X 不相关的、有“策反”可能的区块降低了网络的安全性,诚实的矿工在验证交易时会发现网络中有很多与 X 无关的区块,这会使 X 这笔交易的可信度降低,可能会增加确认交易的时间。因为无论是区块链还是 DAG,新的交易都需要引用过去的交易来完成验证(通过区块头记录的哈希值来引用之前的区块),这些过去的交易得是可以信任的。

在 SPECTRE 的投票规则中,就算面对 censorship 攻击,交易也可以立刻得到确认。16~18 都投票给 Y。区块 2~9 都是只能回溯到 X 的区块,所以它们投票给 X。区块 1,12~15 都投票给 X,因为分别统计它们各自所属的未来区块的投票,都是投给 X 的占多数。区块 10 和 11 既能回溯到 X 又能回溯到 Y,按照上一次投票的结果跟投,以少数服从多数原则可知它们都会投票给 X,最终投给 X 的区块更多,攻击失效。 

SPECTRE 协议的应用与不足

从上面的分析可以看出,SPECTRE 可以很好的排除冲突交易,抵御攻击;同时可以对交易进行快速确认,一般网络为了保证绝大多数节点能在该延迟内传遍整个网络,该延迟时间需要尽可能地大。而确认时间的计算是以延迟时间为基础的,所以会造成确认时间也相应增加。而 SPECTRE 的确认速度只依赖于节点自身的传播延迟,可以尽可能地逼近确认速度的极限值。只受限与带宽和传播延时,充分发挥网络效能。

SPECTRE 天然是为了伊斯兰金融中的小额支付交易而生的一种账本共识,但是如果要集成智能合约功能, SPECTRE 就无法胜任了,因为它只能对冲突交易做一个相对排序(判断冲突交易间的先后顺序),但无法给所有的区块做一个绝对排序。 所以为了充分的发挥 SPECTRE 协议性能,所以网络并没有向 CONFLUX 协议一样在底层上实现智能合约,而是以跨链容器层兼容可拔插虚拟机(MeerEVM)实现对其他公链生态的扩展。这是因为 Qitmeer Team 在立项时就考虑到网络应用方向是面向伊斯兰金融,需要 BlockDAG 底层网络变成高效安全的价值流转层。

但是对允许分叉的 BlockDAG 来说,时序性只能通过账本共识来实现。SPECTRE 无法用作智能合约正是因为它没有时序性,但是区块奖励机制需要线性排序能力,所以 Qitmeer Team 在 SPECTRE 基础上引入了时序性的账本共识 GHOSTDAG。 下文将详解 MeerDAG 共识机制之 GHOSTDAG 协议。 

参考资料

[1] GHOST, DAG, SPECTRE, PHANTOM 和 CONFLUX 技术原理 : https://www.jianshu.com/p/8734e06d558f

[2] Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar:⟪ SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections ⟫

[3] DAG 的妙用(三)- 比特币协议的扩展:https://mp.weixin.qq.com/s/KeQDVQMJLQlyXQcywfE8sQ

[4] 简单易懂的区块链扩容方案全解 : BlockBeats(theblockbeats.info)

s_logo
App内打开