以太坊源码分析:共识(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中的实现略有不同,后续讲解。

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

查看所有标签

猜你喜欢:

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

轻营销

轻营销

唐文 / 机械工业出版社 / 2015-6 / 35元

《轻营销》,中国第一本全面讲述如何在互联网新时代用小预算做大营销的书籍,以求把中小微企业从那些以大预算为基础而难以落地的营销理论和案例中解脱出来。用“轻”但真正起作用的方法,帮助传统企业抓住互联网新一波浪潮的机遇,转型升级。 “怒打价格战、拼命砸广告、渠道金字塔”是过去中国企业做营销的基本功课,背后的逻辑是花钱。今天这三招已经不太管用了,广告费用的多少不再是决定性因素。取而代之的是直面客户的......一起来看看 《轻营销》 这本书的介绍吧!

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

html转js在线工具

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

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具