Proof of Elapsed Time--Hyperledger Sawtooth 共识算法

这一片文章中我们介绍一下Hyperledger Sawtooth项目中所提出的PoET共识算法, 现有的区块链共识算法大概可以分为两种:

Nakamoto consensus:通过乐透的方式选择出一个leader,由leader产生块添加到账本中。最典型的例子就是bitcoin,通过挖矿算法来选出一个leader(最先挖出块的节点),leader公布自己的块给其他的参与者,参与者决定是否将其加入到自己的链中,以及决定是否沿着该块继续向下挖掘,而这实际上是一种隐性投票。

Byzantine Fault Tolerance (BFT) consensus: 基于传统的拜占庭算法,通过多轮的投票来达成一致性。目前已知小蚁区块链是使用这种共识机制,在hyperledger的官网上面声称Ripple和Stellar实现了这种共识机制,但还尚待考证。

PoET属于Nakamoto consenus的一种,它的全称是 Proof of Elapsed Time。而一个好的Nakamoto consenus要有一个好的算法来支撑,它需要具备一下几个要素:

公平:虽然每个节点的能力是有差距的,但要保证每个节点的权利是平等,这样可以使更多的节点参与到选举中来;

可校验:对于参与者而言,校验leader的身份是很容易的;

投资性:选举的投入和产出应该是成正比的。

就拿Bitcoin来讲, 设定一个很高的破坏成本(理论上需要全网51%算力,但实际上只要攻方算力能够保持的其分叉最快增长就可以完成攻击,因为其他的算力并不是统一的,而随着攻方链的增加,其余算力会加入进来),同时保证维护bitcoin的正确性能带来持续性的收益,实际上更多的是利用一个资本间的博弈来引导一个良性循环。

PoET是怎样满足以上要素的?

根据官方文档,PoET的大致思路是这样的是这样的,每个节点发布块之前都要从一个enclave(英文翻译是飞地,所谓飞地就是与国家主体领土隔离的领土,在sawtooh里面它代表一个可信操作)获取一个随机的等待时间,等待时间最短的率先发布块(相当于被选为leader),其中的enclave是通过新型的安全CPU指令来实现的。

enclave支持两个函数“CreateTimer”和“CheckTimer”,CreateTimer用于从enclave中产生一个timer,CheckTimer会去校验这个timer是不是由enclave产生?是否已经过期?如果满足以上两个条件就会一个attestation(凭证)。attestaion 中包含的信息可以用来校验 certificate(证书?wtf?) 是由该enclave 产生的,而且已经等待了timer规定的时间。

成为leader的概率与捐献的资源成比例的(所谓的捐献资源指的是可信环境下的通用处理器, ps:怎么判断捐献的资源是可信的?),因为是通用处理器(consumer and enterprise processors,虽说是通用的,但不知道是不是IBM特产的)不需要定制矿机,所以参与的门槛就比较低,节点就会比较多,整个共识会更健壮。

说简单点就是在不依赖大量的算力开销和硬件开销(矿机)下,通过硬件产生随机数保证选举的随机性。

参考网址:https://intelledger.github.io/introduction.html#proof-of-elapsed-time-poet

以上是本人理解加工后的产物,可能会有所偏差,欢迎大家指正!!!下面是我的一些疑问:

1.enclave 是每个节点一个还是由所有节点贡献的CPU构成?

2.CheckTimer由谁来调用?是leader还是其他参与节点?

3.怎么抵御拜占庭攻击?

接下来会一一解开。

原文地址:https://www.cnblogs.com/cnblogs-wangzhipeng/p/7379990.html