写在文前:本期Monoxide这个单词发音有误,重音应落在第二音节,而非第一音节,请不要向小喵学习!正确发音

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

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

安全:以比特币为参考坐标,众所周知如果想要攻击比特币,就要掌握全网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随机数,从而获取该区块的记账权;

图片1

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

图片2

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

图片3

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

HashMerkleRoot+ 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中的情况,那要如何操作呢?

图片4

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

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

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

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

如果有任何问题欢迎扫下方二维码,随时勾搭我们哦~我是不靠颜值靠才华的胖小喵,我们下期再见喽~

底部图

 

Reference:

不可能三角:区块链最大的谎言

Monoxide原理详解:突破区块链不可能三角的极简架构

评论(47)
登录 账号发表你的看法,还没有账号?立即免费 注册
  • 胖小喵MiaBao全球后援会 2019-02-26
    提问:zones和single-chain到底是什么关系呢?? 是zones根据这个接力顺序串联成的最长链?? 那Monoxide里的forks又是什么?? 是在竞争中输掉的zones??
    • 胖小喵: 2019-02-28
      zones就是公式组,在分片当中我们一般叫shard(分片链),但是在monoxide当中,他们称之为公式组(zone),所以第一个问题zone和single chain什么关系?你这里说的single chain是指主链还是分片链,如果是前者是并行的,如果是后者那么是等同的关系。关于forks的问题,我还要问一下你具体阐释一下问题~
  • 胖小喵MiaBao全球后援会 2019-02-26
    Monoxide给人一种很容易产生double spending的错觉,除了理想情况下51%/n 回复到51%,喵老师还知道它是如何避免双花的么
    • 胖小喵: 2019-02-28
      我们来看一下怎么能够双花?同一笔钱被花了两次,有可能吗?我们把所有场景描绘出来分析一下(以比特币为例子): 1.在正常的系统中,每笔交易都要先确认对应比特币之前的情况,要检查它是否存在于对方的UTXO中。如果不在,那么该交易会被系统拒绝。 2.如果付款方用同一笔UTXO付给两个人,系统中的节点只确认先接收到的那一笔。 3.当两笔时间上很接近的交易,被不同节点确认,区块链将发生分叉。剩余节点选择在他们认为的最长链上构建新的区块。当其中一笔交易被6个节点确认后,它将成为系统最长链,可以认为这笔交易获得了最终的确认。这样还是只有一笔交易有效,不会双花。 那怎么样才可以双花? 如果付款方能掌握比特币网络中50%以上的节点,即使他落后最长的区块链(记录“付款方A在12点34分56秒转给B1个比特币”)也没关系,他可以一直在另一条区块链(记录“A在12点34分57秒转给C1个比特币”)上构建区块,直到追上并成为新的最长链,这就是比特币的“51%攻击”。 所以51%攻击是双花的关键,同理如果monoxide理论攻击壁垒回升到51%,那么双花的可能性和比特币是一样的。
  • 胖小喵MiaBao全球后援会 2019-02-26
    喵老师,Monoxide和其他Sharding分片方案有什么本质区别么?? zones就是“片儿”, 多驽就是“片儿”里的parallel?
    • 胖小喵: 2019-02-28
      有差别的!其实分片看起来好像就是多条链并行嘛,这个其实不是难点,难点在于链并行之后带来的问题:1.分片链之间怎么互通?2.分片之后,按理来说攻击壁垒会变成51%/n,那么如何把这个壁垒提升回去?(如果是以太坊分片的话还分主链和分片链的区别,这样又有3.主链和分链怎么沟通?),所以主要如何解决这些问题,每个项目会有自己不同的方案,从而分成不同的团队,分片方案不仅仅说是把链分成几条链就好了的
  • 神币 2019-02-25
    比原链才是真正的btc
  • COINsight 2019-02-25
    失踪人口找回巴比特账号了???😥
    • 胖小喵: 2019-02-25
      昂昂昂??????????我错了,我保证好好更新。。。。。。。。。。。。
  • unite1986 2019-02-25
    解释的很清晰,熊市中坚持区块链普及工作,敬佩!
  • airport 2019-02-25
    看了三遍才些许弄懂,秀只有一个字,我只说一次,对你爱爱爱爱不完,但我还是相信长铗哈哈哈哈
    • 胖小喵: 2019-02-25
      你明明相信郭富城(抠鼻)
  • 春风正得意 2019-02-25
    昨天以为是春天,结果今天就倒春寒55555好在今天还有小喵的视频抚慰一下内心,你说这个币还能不能炒了,还能不能好好做朋友了?
  • 卖你个锤子 2019-02-25
    这期好难啊,弱弱问一句如果分叉了之后,接力交易何普通法交易混在一起了,会不会很混乱啊,一般完成了一半又因为分叉而失效了?
    • 胖小喵: 2019-02-25
      好问题!这就是我们视频里提到的“最终原子性”,转帐方和收款方如果不再同一共识组的话,扣款操作和接力交易可以不同步,A识组可以不断地处理交易,不用等B共识组完成后续操作,无需任何的同步和锁定.你说的分叉问题,还是遵从最长链为主链的方式,这是不变的,就算原来的交易失效了,没成功的会继续留在交易池里,等待打包,这不是很大的问题。
  • 张童鞋 2019-02-25
    不错,期待喵总的下期节目。
  • 流氓导演 2019-02-25
    @董一撞 @sm孟媛 @枫叶念根
  • 胖小喵MiaBao 2019-02-25
    终于更新了宝贝们!我怕是游走在掉粉的边缘。。。。。。
    • 黄楚河: 2019-02-25
      不会掉粉,我们有共识和信仰。
  • 比特杠精 2019-02-25
    @跟咸鱼的分别 @法蘭克_隨處走走 @币赞
  • 喵懂罩着的韭菜反割联盟会 2019-02-25
    喵懂的粉丝永不认输
  • 我对象在这 2019-02-25
    @樊军艺_ @不分梨 @王王王王王王悦
  • 伊利相吸柠檬 2019-02-25
    @币老大 @币区势 @币财经
  • 春风正得意 2019-02-25
    我来了 落下好几节课这就补起来
  • 黄楚河 2019-02-25
    这一课专业术语好多,要认真看看。
  • 胖小喵MiaBao全球后援会 2019-02-26
    闻讯前来[酷][酷]
  • 红光街奶茶妹 2019-02-26
    @OKEX @烦立停 @白话区块链 支持
  • 1
  • 2