原创 THUBA
点击“阅读全文”,观看完整视频
https://www.bilibili.com/video/BV1mS4y1L7wZ?share_source=copy_web
本系列课程是清华大学学生区块链协会THUBA推出,由PlatON赞助的区块链课程,涵盖了从区块链基础学习到深度原理研究等方面。
大家好,我是Brian Seong,欢迎来到我们第二章第五节课,给大家带来除了PoW和PoS以外的其他共识机制的介绍。
首先我们会依次介绍PoR、PoH、PoST等其他的具有代表性的共识机制;
其次回顾一下PoW和PoS的内容;
最后会做一个共识机制的总结。
其他共识机制介绍
Proof of Storage
Proof of Storage跟Proof of Work有很大的不同,不同在于它的投票权是靠提供多少存储空间来定的。Proof of Storage是通过挑战存储矿工是否有存储某数据来确认矿工是否有正常工作。但这种机制的问题在于,矿工只需要在每次接收到挑战的时候,快速重新存储该数据,并声成相应的Proof去胜任挑战就还是能够拿到奖励,也就是说这种机制无法验证矿工是否持续地存有数据。一种解决方案是持续性的挑战节点来确保矿工持续性的拥有某一份数据。但这种操作又会带来通讯层面的复杂度。
Proof of Replication
Filecoin提出的解决方案是配合两种共识机制来解决持续性存储数据的问题。分别是Proof of Replication 和 Proof of Spacetime。
Proof of Replication,顾名思义就是证明我确实是复制了一份数据。证明方法是首先需要获取存储的数据本身,矿工自身的信息,以及复制并封存数据的时间戳(区块高度),这三个要素在一块作为生成Proof的参数,并把生成的Proof通过SNARK进行压缩,最终结果上传到区块链上即可。
每一个Replication一般都是在节点开始存储某一数据的时候发生。它能够确保该副本的唯一性,矿工假如中途丢失了该副本,想要重新构建一个副本的话则会生成新的proof,之前的proof是无法重建的。这就确保了数据是没有变动的一旦生成了副本,并没有丢失该副本或者删除该副本,那么这个副本就是可靠的。
Proof of Spacetime
Proof of Spacetime可以理解成Proof of Space + Proof of Time。即他是Space和Time的巧妙结合的共识机制。Filecoin里面有两种PoSt,分别是WinningPoSt和WindowPoSt:
WinningPoSt 用于证明矿工在被询问的特定时刻确实拥有数据的副本。仅当矿工已被选举成为下一个出块节点时,才会向矿工发出 WinningPoSt 挑战。WinningPoSt 挑战的答案必须在很短的期限内提交,这也就使得矿工无法在短时间内重新封装、找到并提供挑战的答案。这就保证了矿工在挑战当时他们确实是拥有数据的副本的。
WindowPoSt 则是用于证明数据的副本确实是持续被维护的。主要是通过定期提交证明的机制,使得矿工不保留数据的副本是不合理的,也就是每次都重新生成新的密封副本的成本会大于直接长期存储密封数据副本的成本。那具体Filecoin的实现方式是,每个节点的存储扇区都会被分成48等份,并且要求每一个存储矿工每隔30分钟提交一次自己的某个存储扇区的存储证明,从而确保至少每个扇区都有在每隔24小时提交一次证明,这种方式能够有效减缓证明的频率。
Verifiable Delay Function
在介绍Proof of History之前,先介绍一下PoH的最核心的部件VDF(Verifiable Delay Function)
V是指Verificable,通过消耗一定的时间执行完计算之后,Prover会生成一个证明,这个证明Verifier可以在非常短的时间内去验证这个证明的正确性。
D是指Delay,Prover需要花费大量的时间来计算Challenge的结果。
F是指Function,即确切的值,无歧义,一个x值对应的一定是唯一的y值。
我们可以看到图中有Verifier和Prover,这个流程可以分为4个步骤:
- Verifier会发起一个challenge x
- Prover在接收到x之后会去进行x^(2^T)的计算,这个是关键,因为类似x^(2^T)的计算都无法并行执行,只能够通过一个线程/进程进行高强度计算,所以Prover会需要消耗大量的时间去计算并生成Proof P。
- 算出来的所有过程和结果都发送给Verifier
- Verifier在拿到P以及计算过程之后,通过使用计算过程可以实现并行的快速验证。
所以这个流程中我们可以看到的是,x^(2^T)这种计算叫做Sequential Hash也就是序列哈希值,它正是VDF的一个核心,是哈希计算的无限套娃。计算这种哈希值的意义在于Prover是无法通过增加更多机器去并行提升自己的算力,只能串行运行。
Proof of History
讲完VDF那么Proof of History就会好懂很多。流程基本上就是Prover会通过记载某一记录、数据、区块哈希等作为VDF的初始输入,随后会不断迭代序列哈希,最后公开迭代结束之后的哈希值。那么假设Prover在生成整个证明总共花了9秒钟的时间,那么假如有3个验证者的话,就可以实现3个验证者共同使用3秒钟并行验证Prover生成的证明的正确性。
Proof of Authority
Proof of Authority跟PoW相比,网络就会比较友善一些,只有能够获得认证权限的节点才能够参与网络治理。一般这些会在联盟链或者中心化一些的区块链中使用多一些,确保整个网络的底层运营商都是可靠的,值得信赖的。
PoA的流程可以大概分为这6步:
- 第一步是由用户或者合约发起的一个transaction
- 这些transaction会传输给矿工,矿工在接听到之后也会传给别的矿工进行广播。
- 在这些所有的节点之中,最终会选择出一个出块节点,这个选择规则可以有很多种,比如根据该Authority的以往出块的可靠性、某Authority的某些特征等。
- 选中为出块节点之后节点需要打包区块,操作主要包括整理并打包所有交易,生成所有交易的一个merkel root、时间戳、块头等信息,最后一并打包成一个新的区块并广播给所有节点。
- 其他节点在接收到出块节点发出来的区块之后会去进行核实检验交易是否正确,以及其他打包信息。
- 在确认没有问题之后,新的区块就会被并入到区块链上。
以上便是一个简化的PoA的流程。
Proof of Reputation
Proof of Reputation 基本上就是PoA,算是PoA的延伸版本,主要的不同是在于选择出块节点的机制上,PoR的出块机制主要是依靠每个节点自身的Reputation值。
控制Reputation的变量一般包括节点自身的品牌形象、品牌价值、链上行为的可信任度等。跟我们传统的企业评价方式类似,传统行业中每个企业也是需要维护自己的企业形象以确保自己的产品能够获得市场的认可。在PoR中,维护自己的Reputation能够给自己的节点带来更高的出块几率,这也就代表着会有更多拿到出块奖励的机会。同时在网络中的欺诈行为也会导致该节点的形象损失,还会需要支付罚金。
PoW、PoS的回顾
Bitcoin
我们再回顾一下主流链的结构是什么样子的。一般情况下,都是单条链的结构为主,每个区块里面包括有Block Head和Block Body,其中前区块Hash是用于创建和前一个区块的链接/关系。根据迭代Nonce值去赢取挖矿奖励。
Proof of Work
比特币、以太坊中使用的PoW的工作流程我们可以看一下下图。简单的流程可以分为三个步骤:
第一步:准备好当前区块头、前区块的哈希值、时间戳、以及不断迭代的Nonce值
第二步:计算这四个值的哈希值
第三步:对比哈希值与难度值,假如没有小于难度值则返回第一步用新的Nonce再来。若小于难度值,则计算成功。
Proof of Stake
比特币中PoW的问题,在我们之前的课上也有提到,因为PoW的机制中,更多CPU资源就代表有更高的投票权,从而带来的是大量的资源浪费,能源滥用。
PoS则能够有效解决资源浪费的问题,省去了矿机消耗电力的这一环节,通过使用Staking的数额来提高自己的投票权,只需要进行签名就可以验证,但一般很少有纯PoS的公链,有很多PoS的变种,如DPoS、PoW+PoS、PoH+PoS等。PlatON使用的共识机制就是与随机数结合的PoS变种解决方案。
PoS存在的问题也是比较多的,比如一旦同一波人获取了该链一半以上的资产,那么这个链的使用就完全在这波人手里,这个链也就失去了可用性等。其他的具体的介绍可以参考我们上一节课。
共识机制总结
最后我们简单总结一下共识机制的核心思想。我们讲了各种共识机制,PoW、PoS、PoA、PoR、PoStorage、PoRep、PoSt、PoH等。这些各种Po背后,讲述的是Web2.0和Web3.0的本质上的区别,即在这个没有一个人说了算的Web3.0的背景下,只能通过各种多方认证验证的方法来确保系统的稳定性、可靠性以及真实性。
核心流程可以大概拆分成这4个步骤:
- 节点参与网络治理(每个节点都拥有该网络共识所需要的资源并在持续使用或者运维)
- 通过资源作为投票权参与投票并竞选获取出块权,拥有出块权的节点就能够获取出块奖励(挖到矿),其中出块节点的指责就是整理并证明所有交易数据的正确性,并随后把块发布到网络中
- 网络中其他非出块节点在接受到新区块数据之后会去验证新区块证明的正确性,假如正确则更新到自己的区块链账本上
- 当大多数节点都更新了这个新的块数据,并且没有发生分叉,那么这个新的块就成功记录到了链上
以上就是本节课的所有内容,感谢大家观看。
END
文稿&视频 | Brian
编辑 | Celia
审核 | Brian
本文转载自https://mp.weixin.qq.com/s/XRqyew4SNMCuCdt6z9HJGw