喵懂区块链21期|Monoxide:在突破不可能三角的边缘试探?

原创
2097 天前
15908

上集https://www.8btc.com/video/356186我们说到区块链不可能三角,那么现在是否存在可行性的解决方案呢?欸,今天我们就来聊一聊被国际网络系统顶级会议NSDI 2019收录的论文 “Monoxide”。


完整视频戳这里:Monoxide:在突破不可能三角的边缘试探?

在上集中,我们已经讲到想要破解区块链不可能三角,第一件事情就是定义,在王嘉平博士《Monoxide原理详解: 突破区块链不可能三角的极简架构》https://www.8btc.com/article/355811文章当中,他在进入正题之前就给出了安全,性能和去中心三者的定义。

安全:以比特币为参考坐标,众所周知如果想要攻击比特币,就要掌握全网50%以上的算力,那么在Monoxide中,我们要保障这个安全壁垒不会显著降低!

性能或者叫伸缩性:用直观的数据说话,就落实到两个指标的提升:1.吞吐量,即我们经常说到的TPS---最高每秒处理多少笔交易 2.在同一状态下,全网交易状态存储的提升。

伸缩性的关键在于,允许你加一堆普通的服务器进去,联合工作,把性能顶上去。而不是像诸如比特币那样的单链系统,你矿机铺得再多,设备性能再好,10分钟还是只能出一个块!

去中心化:公链必须是permissionless系统,也就是说谁都可以参与进来,无需任何人批准。然后,作为网络的最基本的参与者,全节点,必须有个比较低的壁垒,至少要允许大家弄个还可以的笔记本,接上家里的宽带网就可以入网,监控链上的状态。当然,对于矿工,可以有比较高的要求,但是这里要保证的就是参与门槛一定要低。

说完工作目标,我们再来聊一聊Monoxide是如何完成以上KPI的!

Monoxide是一种异步、对等的多链架构,每条链(共识组)之间保持并行并且都独立工作,从前呢,在比特币单链架构当中,10分钟出一个块,在Monoxide架构当中,相同时间内,多条链同时并行出块,效率自然是噌噌噌up!

如果要成功实现这种模型,那么就归结到两个关键点(分别对应到安全和效率):

1.Monoxide的账本被分成了多条链架构,假设有n条链(共识组),那么每个共识组的算力将是全网算力的1/n,这就意味着全网矿工的算力会变得分散,原来攻击全网需要51%的算力,现在攻击单个共识组就只需51/n %!这是绝对不被允许的,那么如何保证攻击单个共识组壁垒不明显降低则是第一个关键点。

2.既然账本被分成多条链(共识组),就意味着难免会出现跨链交易。事实上王嘉平博士在文章中表示“当共识组数量达到64的时候,跨链交易的比例已经超过了95% 。”于是,如何实现高效安全的跨共识组交易则成了第二大关键点!

我们一个个来解释一下:

第一,在多共识组的架构下,如何保证攻击单个共识组的攻击壁垒不明显降低?

在Monoxide的设计中,王嘉平教授引入了“连弩挖矿”的概念,诸葛连弩是一种可以连发数箭的兵器,而在Monoxide场景中,也十分形象:

在比特币的PoW挖矿中,矿工们需要进行哈希运算,寻找正确的nonce随机数,从而获取该区块的记账权;


而“连弩挖矿”的场景下,矿工可以同时参与多个编号连续的共识组,矿工只需要寻找出一个正确的nonce随机数,就可以获得参与的所有共识组的记账权。那么这是怎么实现的呢?


假设矿工喵参与了6个连续编号的共识组(比如序号2~7)挖矿,首先构造这6个区块的区块头哈希值merkle tree,merkle tree在我们讲挖矿https://www.8btc.com/article/355811的时候已经讲到过,我们再复习一遍,就是把区块头信息按顺序排排坐,两两配对进行哈希运算,直至得到一个最终的merkleroot(merkle 根)


求出MerkleRoot之后,我们就可以正式进入传统的“挖矿”----也就是寻找nonce随机数的过程,具体的公式是这样滴(数学小白照常请忽略这一段,只需要知道这个哈希运算交给矿机爸爸来运算即可。):

Hash(MerkleRoot+ b+m+ Nonce)< Target(目标值)

同时大家如果感兴趣的话也可以对比一下比特币挖矿的公式(如下):SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET

综上,我们可以清晰看到通过连弩挖矿,矿工只需寻找一个nonce随机数,就可以挖出多个区块,当然也会相应获得多份收益,这样就会鼓励矿工尽可能多的挖掘多个共识组的区块,理想状态下,矿工连接所有共识组是利益最大化的做法。

我们再回过头来看,为什么说连弩挖矿让攻击单个共识组的壁垒提高了呢?

单个共识组原本攻击壁垒:每个共识组的算力变为1/n,则攻击壁垒则为51/n%

使用了连弩挖矿之后,我们按照最理想的情况,那就是每个矿工都连接了所有的共识组,则单个共识组的算力增加了n倍,那么理想状态下的单个共识组攻击壁垒则回升至51/n%*n=51%。这里的关键是,被放大之后的算力平均分配到了每个共识组,没法拿去集中起来,攻击特定的单个共识组。

第二,如何实现高效安全的跨共识组交易?

为了实现这一功能,王嘉平博士引入了“最终原子性’’的概念,首先什么叫原子性?

区块链当中任何一笔交易都是要满足原子性的, 比如说我转1btc给你,我失去1你得到1,这是一个整体的,不能只完成一半,两个地址的数据都要同时更新。

但是在monoxide中,很可能会出现转账方的扣款记录在共识组A里,而收款方的收款记录在共识组B中的情况,那要如何操作呢? 


比如,地址 A 向 地址 B 支付一笔数额为 x 的代币,因为地址 A 在共识组 A 中,而地址 B 在共识组 B 中,这就涉及到跨共识组的信息同步的问题。

首先矿工在共识组A中记录“A完成扣款操作”,然后再携带一个出块证明<ZoneId, Height, RelayMerklePath_t, t>来到共识组B进行接力交易,这个“证明”是代表在共识组A中扣款已完成并且是合法的,交易广播出去之后,矿工将会同等对待普通的交易和接力交易,进行打包并挖矿。

我们可以看到这笔交易的完成不是及时的,是异步的,处于两个不同的共识组的交易地址需要依次完成扣款操作和接力交易操作,才算完成完整的交易,这就叫做最终原子性。有了最终原子性,A共识组就可以不断地处理交易,不用等B共识组完成后续操作,无需任何的同步和锁定,这样多链系统的高效能才能真正展现出来。

这就是Monoxide如何通过“连弩挖矿”和“最终原子性”两个关键因素实现区块链去中心化,安全,效率,三者平衡的方法!