这一片文章中我们介绍一下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.怎么抵御拜占庭攻击?

接下来会一一解开。

Proof of Elapsed Time--Hyperledger Sawtooth 共识算法的更多相关文章

  1. 浅析Hyperledger Fabric共识算法 摘自http://www.cocoachina.com/blockchain/20180829/24728.html

    Hyperledger Fabric共识算法 区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本.在分布式系统中,各个节点收到的交易信息的顺序可能存在差异(例如,网络延迟 ...

  2. [区块链] 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    近几天对区块链中几种常见的共识机制(PBFT,Raft,PoW,PoS,DPoS,Ripple)进行了总结.尽量使用简单易懂语言,篇幅较大,想了解的可以只读每个算法介绍中前边的原理.本篇文章主要参考& ...

  3. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  4. 区块链知识博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    注:这是本人读到的关于共识算法最全和最好的分享博文,系统的介绍了拜占庭容错技术以及共识算法的原理和常用共识算法,原文链接请见后. 目录 一.拜占庭容错技术(Byzantine Fault Tolera ...

  5. (二)区块链的共识算法:PoS 及其 例子 代码 实现

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  6. 共识算法:PBFT、RAFT

    转自:https://www.cnblogs.com/davidwang456/articles/9001331.html 区块链技术中,共识算法是其中核心的一个组成部分.首先我们来思考一个问题:什么 ...

  7. 共识算法 pos,Dpos

    在之前讲解了比特币中的共识算法pow(proot of work),我们先来简单的回顾一下. 新的交易将会广播给所有节点. 每个节点将都会讲新的交易收集到一个区块中. 每个节点都在为其区块收集困难的工 ...

  8. [转帖][区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得

    [区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得 置顶 2017-03-12 18:31:19 乐扣老师lekkoliu 阅读数 127953  收藏 更多 分类专栏: 技术管理 区 ...

  9. RChain的Casper共识算法

    RChain的Casper共识算法是基于Vlad Zamfir的correct-by-construction共识协议和CTO Greg Meredith和其他RChain成员讨论而来的.他们还为Ca ...

随机推荐

  1. gtk+3.0的环境配置及基于gtk+3.0的python简单样例

    /*********************************************************************  * Author  : Samson  * Date   ...

  2. Testin云測试破7000万次:崩溃成90%手游应用质量难题

    Testin云測试破7000万次:崩溃成90%手游应用质量难题 2014/11/13 · Testin · 业界资讯 11月13日.全球最大的移动游戏.应用真机和用户云測试平台Testin云測宣布,已 ...

  3. Jenkins+tomcat+jdk setup

    Jenkins download: http://jenkins-ci.org/ jdk version:jdk-7u45-linux-x64.tar.gz tomcat version:apache ...

  4. hdu 2209 bfs+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=2209 不知为啥有种直觉.会出状压+搜索的题,刷几道先 简单的BFS.状压表示牌的状态, //#pragma co ...

  5. Java并发与同步

    Java中并发的形式无非是多线程和多进程两种形式.这两种形式都是能够利用多核来发挥计算能力的. 先说并发: 多进程意味着同一时候执行多个JVM.这个代价通常比多线程高,每一个JVM都有自己的堆栈.都要 ...

  6. Spring基础知识之基于注解的AOP

    背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作.通知定了了切面是什么及何时调用. 5中可以应用的通知: 前置通知(Before):在目标方法 ...

  7. 工作随笔——spring异步处理@Async使用笔记

    @Async使用笔记 必须是public方法 必须是非static方法 方法调用的实例必须由spring创建和管理 代码示例如下: // 创建Foo类@Component class Foo { @A ...

  8. adobe acrobat x pro破解版

    adobe acrobat x pro破解版是Adobe官方出品的PDF文档全能解决方案套件. PDF文件格式是Adobe公司设计的,用其公司开发的Adobe Acrobat X Pro来创建.编辑. ...

  9. Android系统拍照之后回显并且获取文件路径

    /*调用拍照返回*/ case PHOTO_REQUEST_GALLERY: if (data != null) { Uri uri = data.getData(); String photopat ...

  10. python变量字符拼接

    cpu = instances['vcpus_current'] cpu1 = str(cpu) + '核' memory = instances['memory_current'] / 1024 m ...