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

栏目: 编程工具 · 发布时间: 6年前

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

前言

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

  1. 验证区块类,主要用在将区块加入到区块链前,对区块进行共识验证。
  2. 产生区块类,主要用在挖矿时。
  3. 辅助类。

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

engine定义的具体功能

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

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

验证区块类

  1. Prepare :初始化区块头信息,不同的共识算法初始化不同。使用场景是,worker创建work的时候调用。
  2. Finalize :根据数据生成“基本定型”的区块,但区块头中还缺少部分数据。使用场景是,1)模拟区块链的时候,被 GenerateChain 调用,用来生成区块链。2)交易状态管理时,被 StateProcessor.Process 调用用来执行交易。3)worker创建work的时候调用。
  3. Seal :根据传入的块,进行的是挖矿工作,使用挖矿的结果,修改区块头,然后生成新的区块。使用场景是,被 agent.mine 调用。

验证区块类

  1. VerifyHeader :验证区块头。使用在fetcher中,当fetcher要插入区块的时候,需要先对区块头进行校验。
  2. VerifyHeaders :验证一批区块头。有2种使用场景,1)区块链中, insertChain 当把一批区块插入到区块链这个链条的时候,需要进行检查;2)LightChain中,把一批区块头插入到本地链。
  3. VerifyUncles :验证区块中的叔块。 insertChain 当区块插入区块链的时候,需要对叔块进行验证,调用在VerifyHeaders之后。
  4. VerifySeal :针对Seal函数做的功能进行验证。验证Seal()所修改的区块头中的数据。对外的使用场景是,把Work发送给远端Agent的时候调用。对内的使用场景是,验证区块头的时候会被调用。

辅助类

  1. APIs :生成以太坊共识相关的API。在以太坊启动RPC服务时,生成API。
  2. 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中的实现略有不同,后续讲解。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

小群效应

小群效应

徐志斌 / 中信出版集团 / 2017-11 / 58.00元

互联网经济时代,新零售、网红经济、知识经济多受益于社群。用户的获取、留存及订单转化直接决定了一个社群的存亡。无论是“做”群还是“用”群,每个人都需要迭代常识:了解用户行为习惯,了解社群运行规律。 《社交红利》《即时引爆》作者徐志斌历时两年,挖掘腾讯、百度、豆瓣的一手后台数据,从上百个产品中深度解读社群行为,通过大量生动案例总结出利用社交网络和海量用户进行沟通的方法论。 本书将告诉你: ......一起来看看 《小群效应》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具