内容简介:接下来我们看一下engine有3类功能,验证区块类、产生区块类、辅助类。因为产生区块在前,验证区块在后,接下来采用产生区块类、验证区块类、辅助类,分别介绍它们的功能和使用场景。
前言
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中的实现略有不同,后续讲解。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 以太坊源码分析:共识(1)矿工
- 以太坊源码分析—Ethash共识算法
- 以太坊源码分析:共识(3)Ethash
- 局限于算法的“共识”不是“真共识”
- 科普 | 分布式共识的工作原理,Part-3:使用同步假设的共识算法
- 科普 | 分布式共识的工作原理,Part-4:非确定性共识算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developer's Guide to Social Programming
Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99
In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!
MD5 加密
MD5 加密工具
html转js在线工具
html转js在线工具