首页 矿机 矿机托管 矿场托管 矿池 比特币挖矿 以太坊挖矿 挖矿资讯 挖矿百科 币行情
  世界挖矿网-全球矿工推荐的专业挖矿平台  
首页 矿机 矿机托管 矿场托管 矿池 比特币挖矿 以太坊挖矿 挖矿资讯 挖矿百科 币行情
首页 > 挖矿资讯 > 虚拟币挖矿源码以太坊源码分析:共识(1)矿工

虚拟币挖矿源码以太坊源码分析:共识(1)矿工

Go语言中文网,致力于每日分享编码、开源等知识,欢迎

接下来我们将从以下角度介绍矿工:

角色。矿工不是一个人,而是一类人,可以把这一类人分成若干角色。一个区块产生的主要流程。矿工的主要函数介绍,掌握矿工的主要挖矿机制。

介绍矿工由哪些部分组成,会和哪些其他模块进行交互,这些部分是如何协作产生区块的。

角色

有3种角色:miner、worker、agent。

miner:是矿长,负责管理整个矿场的运作,比如:启动、停止挖矿,处理外部请求,设置挖矿获得的奖励的钱包地址等等。worker:副矿长,负责具体挖矿工作的安排,把挖矿任务(Work)安排给agent。agent:真实的矿工,他们负责挖矿,把自己的劳动成果(Result)交给worker,agent默认只有1个,可以通过API创建多个。

以太坊源码分析:共识(1)矿工

一个区块产生的主要流程

实际的挖矿过程基本不涉及miner,只涉及worker、agent和engine,engine是共识引擎模块,我们利用下图介绍生成一个区块的主要流程。

挖矿过程中只涉及engine的3个接口:1)Prepare()挖矿前的准备工作,2)Finalize()形成一个基本定型的区块,3)Seal()形成最终的区块。

worker把区块头、交易、交易执行的收据等传递给engine.Finalize。engine.Finalize返回一个block,该block的header中缺少Nonce和MixDigest,这两个值是挖矿获取的。worker把block封装到work,把work发送给所有的agent。agent.update把work传递给agent.mine。agent.mine把work传递给engine.Seal,调用engine.Seal挖矿。engine.Seal把Nonce和MixDigest填到区块头,生成一个new block交给agent.mine.agent.mine把new block封装成Result,发送给worker。

以太坊源码分析:共识(1)矿工

矿工的主要函数

介绍miner、worker和agent的主要函数,他们是矿工的具体运作机制。

miner的主要函数

主要New():负责创建miner。还创建1个worker和1个agent,但agent还可以通过API创建,然后启动update函数。update():负责commitNewWork():负责生成work,分配agent。这个阶段做了很多工作,调用Engine.Prepare进行准备工作,创建Header,执行交易,获取Uncle,使用Engine.Finalize形成“基本定型”的临时区块,创建Work,最后把work传递给agent。另外commitNewWork存在多处调用,并且worker有wait和update另外2个协程,他们都会调用commitNewWork,所以存在临界区需要谨慎加锁。update():负责处理外部事件。它是死循环,主要处理3种事件:1)ChainHeadEvent,有了新区块头,所以得切换到挖下一个高度的区块,2)ChainSideEvent,收到了uncle区块,缓存起来,3)TxPreEvent,预处理交易,如果在挖矿执行commitNewWork,如果未挖矿,则交易设置为未决状态。wait():负责处理agent挖矿的结果。它是死循环,一直等待接收agent发回的result,然后把区块加入到本地数据库,如果没有问题,就发布NewMinedBlockEvent事件,通告其他节点挖到了一个新块。

以太坊源码分析:共识(1)矿工

图片来自网络,原出处已不详,如果侵犯您的权益,请通知我立即删除

agent的主要函数

主要2个函数:

update():负责接收worker发来的任务(work)。它是死循环,把work交给mine去挖矿。mine():负责挖矿。它拥有挖矿的能力,调用Engine.Seal挖矿,如果挖矿成功则生成result,发送给worker。以太坊源码分析:共识(1)矿工

图片来自网络,原出处已不详,如果侵犯您的权益,请通知我立即删除最后两张图片来源网络,侵删。

如果这篇文章对你有帮助,不妨关注下我的Github,有文章会收到通知。本文作者:大彬,授权发布如果喜欢本文,随意转载,但请保留此原文链接:http://lessisbetter.site/2018/06/22/ethereum-code-consensus-1/
免责声明:世界挖矿网作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世界挖矿网无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
Copyright © 2022-2024 世界挖矿网 湘ICP备2022006259号