资讯专栏INFORMATION COLUMN

以太坊源码分析:共识(2)引擎

YuboonaZhang / 3343人阅读

摘要:前言是以太坊封定义的一个接口,它的功能可以分为类验证区块类,主要用在将区块加入到区块链前,对区块进行共识验证。辅助类生成以太坊共识相关的。被使用,是以太坊状态管理服务,当报告数据的时候,需要获取区块的信息。

前言

engine是以太坊封定义的一个接口,它的功能可以分为3类:

验证区块类,主要用在将区块加入到区块链前,对区块进行共识验证。

产生区块类,主要用在挖矿时。

辅助类。

接下来我们看一下engine具体定义了哪些功能,还有各功能的使用场景。

engine定义的具体功能

engine有3类功能,验证区块类、产生区块类、辅助类。因为产生区块在前,验证区块在后,接下来采用产生区块类、验证区块类、辅助类,分别介绍它们的功能和使用场景。

验证区块类

Prepare:初始化区块头信息,不同的共识算法初始化不同。使用场景是,worker创建work的时候调用。

Finalize:根据数据生成“基本定型”的区块,但区块头中还缺少部分数据。使用场景是,1)模拟区块链的时候,被GenerateChain调用,用来生成区块链。2)交易状态管理时,被StateProcessor.Process调用用来执行交易。3)worker创建work的时候调用。

Seal:根据传入的块,进行的是挖矿工作,使用挖矿的结果,修改区块头,然后生成新的区块。使用场景是,被agent.mine调用。

验证区块类

VerifyHeader:验证区块头。使用在fetcher中,当fetcher要插入区块的时候,需要先对区块头进行校验。

VerifyHeaders:验证一批区块头。有2种使用场景,1)区块链中,insertChain当把一批区块插入到区块链这个链条的时候,需要进行检查;2)LightChain中,把一批区块头插入到本地链。

VerifyUncles:验证区块中的叔块。insertChain当区块插入区块链的时候,需要对叔块进行验证,调用在VerifyHeaders之后。

VerifySeal:针对Seal函数做的功能进行验证。验证Seal()所修改的区块头中的数据。对外的使用场景是,把Work发送给远端Agent的时候调用。对内的使用场景是,验证区块头的时候会被调用。

辅助类

APIs:生成以太坊共识相关的API。在以太坊启动RPC服务时,生成API。

Author:读取区块头中的coinbase。被ethstats使用,ethstats是以太坊状态管理服务,当报告数据的时候,需要获取区块的Author信息。

最后关注一下蓝色的线条,它们代表insertChain所调用的范围,先关的有VerifyHeaders、VerifyUncles、Finalize,涉及到块头的验证、叔块的验证,以及执行区块中的交易,一个区块加入到区块链中,不仅要验证,还要执行各种交易,改变各种状态,所有节点执行确定性的行为之后,达成一致性。

FAQ

Q:谁实现engine
A:以太坊中的Ethash和Clique实现了engine,Ethash是基于PoW的共识,Clique是基于PoA的共识。

Q:为什么insertChain没有调用VerifySeal
A:因为Seal()修改的是header中的部分数据,在验证区块头的时候,会被调用。只是调用流程在Ethash和Clique中的实现略有不同,后续讲解。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24397.html

相关文章

  • 以太源码分析—挖矿与共识

    摘要:下面来看看具体是怎么实现接口的可以看到,启动了多个线程调用函数,当有线程挖到时,会通过传入的通道传出结果。可以看到在主要循环中,不断递增的值,调用函数计算上面公式中的左边,而则是公式的右边。 前言 挖矿(mine)是指矿工节点互相竞争生成新区块以写入整个区块链获得奖励的过程.共识(consensus)是指区块链各个节点对下一个区块的内容形成一致的过程在以太坊中, miner包向外提供挖...

    walterrwu 评论0 收藏0
  • 以太源码分析共识(3)Ethash

    摘要:在中,该随机数称为,它需要满足一个公式其中,去除区块头中生成的哈希值,见。固定值,生成的哈希值的最大取值。哈希值满足条件的概率是,矿工需要进行次的判断,才有可能找到一个符合条件的,当前以太坊难度为。 前言 Ethash实现了PoW,PoW的精妙在于通过一个随机数确定,矿工确实做了大量的工作,并且是没有办法作弊的。接下来将介绍: Ethash的挖矿本质。 Ethash是如何挖矿的。 如...

    huashiou 评论0 收藏0
  • 以太源码分析共识(1)矿工

    摘要:接下来我们将从以下角度介绍矿工角色。我们分别使用矿长副矿长矿工进行类比。副矿长,负责具体挖矿工作的安排,把挖矿任务安排给。矿工的主要函数介绍和的主要函数,他们是矿工的具体运作机制。负责处理外部事件。 前言 矿工在PoW中负责了产生区块的工作,把一大堆交易交给它,它生成一个证明自己做了很多工作的区块,然后将这个区块加入到本地区块链并且广播给其他节点。 接下来我们将从以下角度介绍矿工: ...

    tylin 评论0 收藏0
  • 区块链技术学习指引

    摘要:引言给迷失在如何学习区块链技术的同学一个指引,区块链技术是随比特币诞生,因此要搞明白区块链技术,应该先了解下比特币。但区块链技术不单应用于比特币,还有非常多的现实应用场景,想做区块链应用开发,可进一步阅读以太坊系列。 本文始发于深入浅出区块链社区, 原文:区块链技术学习指引 原文已更新,请读者前往原文阅读 本章的文章越来越多,本文是一个索引帖,方便找到自己感兴趣的文章,你也可以使用左侧...

    Cristic 评论0 收藏0
  • 以太POA共识机制Clique源码分析

    摘要:以太坊中除了基于运算能力的外,还有基于权利证明的共识机制,是以太坊的共识算法的实现,这里主要对的相关源码做一个解读分析。检查包头中包含的签名是否满足共识协议 以太坊中除了基于运算能力的POW(Ethash)外,还有基于权利证明的POA共识机制,Clique是以太坊的POA共识算法的实现,这里主要对POA的Clique相关源码做一个解读分析。 Clique的初始化在 Ethereum.S...

    Stardustsky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<