作者:林冠宏 / 指尖下的幽灵

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities

虫洞区块链专栏:https://www.chongdongshequ.com/article/1536563643883.html


前序

本人版暂名为《区块链以太坊DApp实战开发》一书,即将完成,是一本废话少、讲解通俗、实操性强的技术书籍。本文为书中的小节的部分内容。想涉足这个区块链领域技术开发的同僚可以留意我的博客,届时会发布。

目录

  • PoW 共识机制
  • 以太坊目前所使用的共识算法
  • Chost 协议
    • 选择最长链
    • 分叉块处理
  • Casper PoS变种共识机制
    • 如何成为验证人
    • 验证人如何获取保证金
    • 候选区块如何产生
    • 按照什么规则轮着出块
    • 如何判断胜出区块
    • 验证人联盟投注的作弊问题

PoW 与 PoS 共识机制

如果对PoW共识机制还不了解的朋友,可以看下我之前的一篇文章

PoW共识机制通俗讲解

PoS共识机制通俗讲解

以太坊目前所使用的共识算法

如果别人问你“以太坊目前所使用的共识算法”是什么?如果你此时去浏览器搜索发现有些文章说是PoS,又有些说是PoW

完整且正确的说法应该是这样的,这其实也是PoW共识机制以太坊的关系。首先以太坊的源码是分有阶段,不同阶段所使用的共识算法要分开来说。所分的阶段有:

  • Frontier(前沿)。这个阶段的版本是以太坊的基础,此时的以太坊具备了挖矿交易以及智能合约功能模块。但是没有供普通用户使用的图形化界面,仅适合于开发者使用。所使用的共识算法是“PoW”。
  • Homestead(家园)。这个阶段的以太坊网络变得更加稳定,且具备了图形界面的钱包软件。所使用的共识算法还是是“PoW”。
  • Metropolis(大都会)。分有下面两个子版本:
    • 拜占庭。发布了集合钱包功能以及合约发布等丰富功能的图形化界面软件“Mist”,同时也引入了很多新的技术,例如零知识证明,抽象账号等。使用的共识算法仍然是“PoW”。
    • 君士坦丁堡。使用混合共识算法“PoW + PoS”,为“宁静”做铺垫。
  • Serenity(宁静)。将把以太坊的共识算法全部换成基于“PoS”的变种算法--“Casper投注共识”,它属于PoS系列。

截至2018-12-14,目前以太坊的最新发布版本是Metropolis大都会的拜占庭。由上述可知,在以太坊发展的过程中,它的共识算法对于不同的阶段,分别是:PoW共识,PoW + PoS 共识PoS

Chost 协议

Chost 协议的全称是“Greedy Heaviest-Observed Sub-Tree protocol”,贪婪子树协议,又称幽灵协议,它属于主链选择协议范畴。

首先在比特币公链中,它是根据最长链规则来解决区块链分叉问题的。请注意,并不是所有的区块链公链解决分叉问题都是使用最长链规则,以太坊就不是。

选择最长链

以太坊解决区块链分叉问题目前所使用的 是Ghost 协议,所以Ghost协议的真实作用是用来进行主链选择的。不同于比特币的最长链规则,它在选择最长链的时候不以哪条链区块连续最长为标准,而是将分叉区块也考虑了进去,选择出一条包含了分叉区块在内区块数目最多的链作为最长链。例如下图所示:

在上图的分叉情况中,在比特币公链中,最终胜出的是链:0 <- 1A <- 2C <- 3F <- 4B <- 5A,一条由最长链规则选择的链。而在以太坊公链中,由幽灵协议得出的最终胜出的是:0 <- 1A <- 2B <- 3D <- 4A 。

原因就是在上面的分叉情况中,幽灵协议把分叉区块也考虑进去了,统计总的区块数,发现在包含了区块: 0,1A,2B,3E,3D,3C,4A 的链是含有区块数最多的。因此该链胜出,这就是幽灵协议选择最初链的机制。

分叉块处理

此外,对于在最长链中被包含进去了的造成链分叉的块,例如上图中的3E3CGhost 协议对它们也有一套对应的处理机制,这些区块会被根据规则处理为:

  1. 孤块,完全没用的块,挖出的矿工没任何收益。比特币链中的分叉块都是孤块
  2. 叔块,被一定范围内的后续子块所打包收纳的块,挖出叔块的矿工会按照一定算法给予收益。

关于叔块方方面面的通俗详细介绍,在我书里,这里就不展开说了。

我们总结一下,Ghost幽灵协议在以太坊中主要起到了下面两点作用:

  1. 选择出最长链
  2. 对最长链中分叉块进行处理

Casper PoS变种共识机制

前提:Casper 目前还没完全公布,还处于开发中,下面内容是根据目前现有的知识总结出的。

作为以太坊第四阶段版本的共识机制,Casper投注共识增加了惩罚机制,并基于PoS的思想在记账节点中选取验证人,能够投注的角色是:验证人。可以将这类角色理解为新一代以太坊矿工。

在casper共识机制中,验证人要拿出保证金的一部分对它认为的大概率胜出的区块进行下注:

  • 如果赌对了,它们就可以拿回保证金外加区块中的交易费用,也许还会有一些新发的货币;
  • 如果下注没有迅速达成一致,下注太慢,它们只能拿回部分下注金,相当于损失了一些下注金;
  • 因此数个回合之后下注的结果出来,那些选错了的验证人就会输掉它们的下注金;
  • 此外如果验证人过于显著的改变下注,例如先是赌某个块有很高概率胜出,然后又改赌另外一个块有高概率胜出,它将被惩罚。

如何成为验证人

想成为验证人,是要进行交保证金进行申请的,同时也可以在进入后选择退出,加入和退出都会将是以太坊网络中的一种特殊的交易类型,目前最常见的交易就是转账ETH代币。也就是说,到时候可能要调用一定的以太坊接口来进行申请成为验证人。保证金很有可能就是以太坊ETH代币,它将会被用来投注,或被因被以太坊惩罚而没收掉。

目前Casper的验证人逻辑将会通过一个名称为Casper合约的东西来实现,合约它提供投注,加入,取款和获取共识信息等一系列功能,因此通过简单的调用Casper合约我们就能提交投注或者进行其他操作。Casper合约的内部状态如下:

这个合约会记录当前的验证人集合,对于每位验证人的6项主要字段解析如下:

  • Return address,验证人保证金的返还地址
  • Deposit size,当前验证人保证金的数量(注意验证人的投注会使这个值增加或减少)
  • Validation code,验证人的验证代码
  • Seq,最近一次投注的序号
  • Prevhash,最近一次投注的hash
  • 验证人的每次投注的表格

验证人如何获取保证金

别人转账给验证人的钱包地址,或者在早期版本基于PoW挖矿收获。

候选区块如何产生

验证人出块,出块是一个独立于其它所有事件而发生的过程:验证人收集交易,当轮到他们的出块时间时,他们就制造一个区块,签名,然后发送到网络上。

按照什么规则轮着出块

Casper机制提供规则。

如何判断胜出区块

当验证人中的绝大多数,满足协议定义阈值的一群验证人的总保证金比例达到67%到90%之间某个百分比以非常高的概率,下注某个块胜出的时候,此区块胜出。

验证人联盟投注的作弊问题

不难看出Casper投注方式是存在有验证人联盟在一起,共同投注某个区块使之胜出的问题的,对于这个问题的解决方案,目前以太坊还没完整公布,处于进一步的研究之中。

通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper的更多相关文章

  1. 以太坊中的Ghost协议

    https://blog.csdn.net/t46414704152abc/article/details/81191804 写得超好,终于弄懂了什么是叔块,怎么确定哪条链最长,以太坊与比特币出块的差 ...

  2. 以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!

    以太坊的“难度炸弹”(“Difficulty Bomb”)指的是,在挖掘算法中,使用以太币在区块链上对矿工进行奖励的难度越来越大.随着游戏变得更加复杂(矿工发现以太币难挣得多),在以太坊区块链上块的生 ...

  3. 以太坊开发DApp入门教程——区块链投票系统(一)

    概述 对初学者,首先要了解以太坊开发相关的基本概念.   学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...

  4. 以太坊(ethereum)开发DApp应用的入门区块链技术教程

    概述 对初学者,首先要了解以太坊开发相关的基本概念.   学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...

  5. 从V神到以太坊——以太坊发展简史

    以太坊的出现,让人们的认识从比特币飞跃到了区块链本身.使得区块链技术在非金融领域的普遍应用成为可能,同时,也被认为是区块链2.0时代的标志,是区块链技术发展史上重要的里程碑. 以太坊的故事,要从比特币 ...

  6. EOS与以太坊有哪些区别?

    以太坊是一个专门为开发和运行去中心化应用(DAPP)搭建的智能合约平台:EOS与以太坊类似,同样是基于智能合约和区块链而搭建.但是,从技术和设计理念等方面来看,这两者之间实际上存在明显的区别. 那么E ...

  7. android和java以太坊开发区块链应用使用web3j类库

    如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建.钱包创建.交易转账,交易与状态.智能合约开发与交互.过滤器和 ...

  8. 以太坊go-ethereum常见问题汇总

    (1)什么是 Ethereum? 以太坊是一个分散的智能合同平台,由Ether的加密货币提供支持. (2) 听说过以太坊,但什么是Geth,Mist,Ethminer,Mix? Geth: 以太坊节点 ...

  9. 以太坊源码分析(52)以太坊fast sync算法

    this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectivel ...

随机推荐

  1. poj3617 Best Cow Line(贪心,字典序问题)

    https://vjudge.net/problem/POJ-3617 这类字符串处理字典序问题经常用到贪心, 每决定输出一个字符之前,都要前后i++,j--逐个比大小,直至比出为止. #includ ...

  2. 07、RDD持久化

    为了避免多次计算同一个RDD(如上面的同一result RDD就调用了两次Action操作),可以让Spark对数据进行持久化.当我们让Spark持久化存储一个RDD时,计算出RDD的节点会分别保存它 ...

  3. Error-MVC: 未能找到路径“D:\\DsWeb\DS.Web\dist\bin\roslyn\csc.exe”的一部分。

    ylbtech-Error-MVC: 未能找到路径“D:\\DsWeb\DS.Web\dist\bin\roslyn\csc.exe”的一部分. 1.返回顶部 1, “/”应用程序中的服务器错误. 未 ...

  4. ElasticSearch的基本原理与用法

    一.简介 ElasticSearch和Solr都是基于Lucene的搜索引擎,不过ElasticSearch天生支持分布式,而Solr是4.0版本后的SolrCloud才是分布式版本,Solr的分布式 ...

  5. SpringBoot项目接口第一次访问慢的问题

    SpringBoot的接口第一次访问都很慢,通过日志可以发现,dispatcherServlet不是一开始就加载的,有访问才开始加载的,即懒加载. 2019-01-25 15:23:46.264 IN ...

  6. 阿里的Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征: 速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser ...

  7. Guava-Objects使用

    前言 Java中的Object提供了很多方法供所有的类使用,特别是toString.hashCode.equals.getClass等方法,在日常开发中作用很大,Guava中包含Objects类,其提 ...

  8. Pilosa文档翻译(一)导言、安装

    目录 导言 安装 安装在MacOS 使用HomeBrew 下载二进制文件 从源码构建 使用Docker 安装在Linux 下载二进制文件 从源码构建 使用Docker 接下来是什么? 导言 原文地址 ...

  9. iOS如何在应用中添加图标更换功能

    一.在info.plist中设置图标信息 首先将需要更换的图标按照下面的方式声明,以便我们能够正常调用文件和方法.注意,每个图标的图标名称和对应的文件名要一一对应. 二.在工程根目录下添加图标文件 图 ...

  10. 【C++】C++中的引用与指针

    想必大家对C++中的指针都有所了解,但是什么是引用呢?C++11标准引入了“引用”的新功能. 引用 引用(reference):给对象起了另外一个名字,引用类型引用(refers to)另外一种类型, ...