Please enable JavaScript.
Coggle requires JavaScript to display documents.
区块演义 (突破区块链不可能三角(三)——POS与POW-DAG (两种将传输和pow并行的思路 (1.领袖选择:用挖矿决定出块者而不是内容,即交易…
区块演义
突破区块链不可能三角(三)——POS与POW-DAG
1: 在pow中,只有在最长链上挖矿才是最有效的挖矿,即,只有先同步最新的区块,即,同步所有交易,才能进行有效挖矿,而等到挖矿出了新区块,才能开始对于新块区的同步,也就是说这两个的关系是相互依赖的。
2:于是比特币pow的缺陷是——比特币的安全性和输出成反比,随着输出的不断增大,比特币pow的安全性无限趋近于0
3:改进pow,必须把交易的传输和pow脱钩
两种将传输和pow并行的思路
1.领袖选择:用挖矿决定出块者而不是内容,即交易。
2.将非最长链上的算力也纳入有效算力。GHOST的意义:即便矿工没有及时完成对于最新块的同步,并且导致你在别人之后才挖出了区块,你的算力也不会浪费,同时,也不容易导致后续分叉,造成算力的浪费。(问题:同步所需时间超过一个区块间隔,仍旧无法被拉入最重链,仍然被浪费)
权益证明POS——钱越多,挖出块的概率越大
DAG中定序的问题(数字货币需要定序才能决定两笔冲突的交易哪笔合法哪笔非法)
思路一:通过后面区块的拓扑结构来定序
思路二:确定一条主链
突破区块链不可能三角(一)(安全 效率 去中心化)
可扩展第一定义——可扩展的pow
btc的oow不可扩展:安全性依赖于区块同步速度远小于区块间隔的前提
可扩展的第二个定义——无限扩展( 输出随着输入,线性增加)
链下技术
分片
DAG和传统区块链的区别
单元不同:区块是block;dag是tx(交易)
拓扑:区块相当于 单核单线程cpu;dag相当于 多核多线程cpu
粒度:区块单于记录多个用户多笔交易 dag是单个用户记录
可扩展的第三个定义——可扩展BFT
可扩展的第3.5个定义——比特币扩容
大区块
隔离见证
扩展:honeybadger 、 byzcoin 、hybrid consensus 、hyperledger fabric 、 algorand’s ba*
突破区块链不可能三角(二)——在btc的pow之上的尝试
btc核心设计: btc的 pow 设计,实际上是十分的精妙
btc的性能瓶颈:任何一笔交易都需要发给所有节点
bitcoin-NG:竞争胜出者发块,只包含交易而不需要在做pow
Hybrid Consensus(Byzcoin)和Bitcoin-NG的异同:
相同点:两者都是通过pow选取出块者而非区块(交易)本身的方式把共识和交易脱钩
不同点:Hybrid Consesus (Byzcoin)中,通过BFT决定交易,于是我们认为交易已经是可信的。而Bitcoin-NG中出块者发出来的交易仍旧未经验证,于是可能是非法的。于是,bitcoin-ng中所有节点需要在同步交易之后验证交易的有效性,bitcoin-ng根据博弈论设计了另一套激励(惩罚)模型,来保证微区块中交易的安全性
可扩展类的共识算法,从两个角度介绍了共识算法从不可扩展到可扩展的进化过程:
1)从pow的角度,问题的症结是pow的过程依赖交易同步,所以我们应该将pow与交易同步并行。 于是我们有了“先共识后同步”的基于领袖选择的共识算法,也有了“先同步后共识”的dag算法。多数pos算法属于第一类。
2.从bft的角度,问题的症结是 o(n^2)的消息复杂度,于是我们有了投机bft来理想状态下降低消息复杂度的 o(n)。然而,这些算法在出块节点轮换上的消息复杂度仍旧很高,使得他们仍旧很难被应用到大网络,于是,我们有了hotstuff,将共识和节点轮换的消息复杂度都降到了 0(n)
突破区块链不可能三角(四)——区块链中的bft以及hotstuffBFT(librabft)分析
一致性与活性的永恒战争
拜占庭问题一直致力于解决的问题——
当网络中存在两个冲突的区块的时候,如何确认才能保证一致性?
弱中止条件下的拜占庭问题:
1:更换领袖这件事儿
2:是否抛弃上一个区块
PBFT两阶段确认:
当a收到2f+1条关于b的消息时,他并不直接确认,而是进入“预备”状态,并且发一条“确认”消息表示自己正在“预备”。然后,如果一个诚实节点收到2f+1条“确认”消息之后,再进行确认。
三阶段共识方案
诚实出块者广播区块b,诚实节点收到后发送关于b的“预备消息”,然后,当节点收到2f+1条预备消息之后,节点进入预备状态并广播“预确认消息”
然后,当节点收到2f+1条预确认消息时,节点进入预确认状态并广播“确认消息”
最后,当节点收到2f+1条确认消息的时候,确认区块b。
这里的节点轮换机制是
当节点达到timeout还没有达成共识的时候,节点广播自己的状态并申请更换出块者。然后,下一个出块者收集这些状态来决定新区块的高度:如果没有2f+1个节点在预备状态,则换掉b,如果有2f+1个节点在预备(或更高)状态,则把新区块出在b之后。
两阶段共识问题
1)是否有节点已经对b进行了确认
2)是否有节点对另一个区块b”进行了共识。
于是,我们需要在节点轮换的时候,让所有节点广播自己收到的所有消息,然后新的区块发布者在广播收到的消息。
hotstuffbft 除三阶段共识外,还采用了一些其他技术
门限签名:( k , n )
三轮共识和门限签名的bft:
出块节点广播消息b,每个节点收到后,用( 2f+1 , n )门限签名签署预备消息发给出块节点
之后,出块节点聚合成完整签名之后广播,每个节点收到之后,用( 2f + 1 ,n )门限签名签署预确认消息之后再广播
最后,出块节点聚合成完整签名之后广播,每个节点收到之后,用 ( 2f + 1 , n)门限签名签署确认消息之后再广播,出块节点收到之后聚合再广播,每个节点验证签名之后进行确认。
三阶段共识——而实际上也只是用牺牲延时的代价(因为多了一轮共识),来降低出块节点轮换的通信复杂度。
链式hotstuff
Hotstuff bft 采用一种非常精妙的方法,用门限签名和链式结构,把节点轮换,区块链出块,以及拜占庭共识本身给柔和在一起,使得无论出块,拜占庭共识,还是区块轮换都有一个非常简洁,并且完全一致的形式