通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper
作者:林冠宏 / 指尖下的幽灵
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共识机制还不了解的朋友,可以看下我之前的一篇文章
以太坊目前所使用的共识算法
如果别人问你“以太坊目前所使用的共识算法”是什么?如果你此时去浏览器搜索发现有些文章说是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 的链是含有区块数最多的。因此该链胜出,这就是幽灵协议选择最初链的机制。
分叉块处理
此外,对于在最长链中被包含进去了的造成链分叉的块,例如上图中的3E和3C,Ghost 协议对它们也有一套对应的处理机制,这些区块会被根据规则处理为:
- 孤块,完全没用的块,挖出的矿工没任何收益。
比特币链中的分叉块都是孤块。 - 叔块,被一定范围内的后续子块所打包收纳的块,挖出叔块的矿工会按照一定算法给予收益。
关于叔块方方面面的通俗详细介绍,在我书里,这里就不展开说了。
我们总结一下,Ghost幽灵协议在以太坊中主要起到了下面两点作用:
- 选择出最长链
- 对最长链中分叉块进行处理
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的更多相关文章
- 以太坊中的Ghost协议
https://blog.csdn.net/t46414704152abc/article/details/81191804 写得超好,终于弄懂了什么是叔块,怎么确定哪条链最长,以太坊与比特币出块的差 ...
- 以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!
以太坊的“难度炸弹”(“Difficulty Bomb”)指的是,在挖掘算法中,使用以太币在区块链上对矿工进行奖励的难度越来越大.随着游戏变得更加复杂(矿工发现以太币难挣得多),在以太坊区块链上块的生 ...
- 以太坊开发DApp入门教程——区块链投票系统(一)
概述 对初学者,首先要了解以太坊开发相关的基本概念. 学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...
- 以太坊(ethereum)开发DApp应用的入门区块链技术教程
概述 对初学者,首先要了解以太坊开发相关的基本概念. 学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...
- 从V神到以太坊——以太坊发展简史
以太坊的出现,让人们的认识从比特币飞跃到了区块链本身.使得区块链技术在非金融领域的普遍应用成为可能,同时,也被认为是区块链2.0时代的标志,是区块链技术发展史上重要的里程碑. 以太坊的故事,要从比特币 ...
- EOS与以太坊有哪些区别?
以太坊是一个专门为开发和运行去中心化应用(DAPP)搭建的智能合约平台:EOS与以太坊类似,同样是基于智能合约和区块链而搭建.但是,从技术和设计理念等方面来看,这两者之间实际上存在明显的区别. 那么E ...
- android和java以太坊开发区块链应用使用web3j类库
如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建.钱包创建.交易转账,交易与状态.智能合约开发与交互.过滤器和 ...
- 以太坊go-ethereum常见问题汇总
(1)什么是 Ethereum? 以太坊是一个分散的智能合同平台,由Ether的加密货币提供支持. (2) 听说过以太坊,但什么是Geth,Mist,Ethminer,Mix? Geth: 以太坊节点 ...
- 以太坊源码分析(52)以太坊fast sync算法
this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectivel ...
随机推荐
- Nanopi2基本使用
1.首先刷系统,把TF卡放到读卡器中,根据官网教程(http://www.arm9.net/nanopi-m2.asp)下载固件,并烧写. 2.硬件连接:把TF卡插到Nanopi2的boot卡槽, ...
- linux > 和 >> 、< 区别
linux中经常会用到将内容输出到某文件当中,只需要在执行命令后面加上>或者>>号即可进入操作. 大于号:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向 ...
- js-将一个对象转换成一个新的对象
/** * 对象转换成一个新的对象 * @param object * @private */ function _yh_tranformObject(object){ if(object == nu ...
- Linux中非正常关闭vi编辑器产生swp文件怎么删除
Linux中非正常关闭vi编辑器产生swp文件,会导致编辑文件时提示如下内容(图我是从网上找的): 这是因为异常关闭vi编辑器产生swp文件导致,假设编辑的文件名是file.sh,那么生成的swp文件 ...
- C# System.IO.StreamReader
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符. using System; using System.IO; class Test { public static void ...
- Pilosa文档翻译(二)入门指南
目录 开始 Pilosa 简单项目 创建架构(Create the Schema) 从CVS文件导入数据 做一些查询(Queries) 接下来做什么? Pilosa支持默认使用JSON的HTTP接口. ...
- NOIP2010普及组 三国游戏
题目OJ地址 http://codevs.cn/problem/1129/ https://www.luogu.org/problemnew/show/P1199 题目描述 Description 小 ...
- 基于java实现的简单区块链
技术:maven3.0.5 + jdk1.8 概述 区块链是分布式数据存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式.所谓共识机制是区块链系统中实现不同节点之间建立信任.获取权益的 ...
- 史上最简单的 SpringCloud 教程 | 终章
https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...
- Django Http请求生命周期
day54 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中的的url在路由关系表中进行匹配(从上到下) 3.匹配成功后,执行指定的views函数 4.业务处理 URL----&g ...