okx

以太坊源码分析:矿工共识初探

时间:2023-06-23|浏览:212

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

Go语言中文网是一个致力于每日分享编码、开源等知识的网站,我们欢迎大家来参与学习和讨论。

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

1. 角色:矿工不是一个人,而是一类人,可以将他们分成若干角色。我们将介绍矿工的主要函数以及矿工的主要挖矿机制。

2. 介绍矿工的组成和与其他模块之间的交互,以及它们如何协作来产生区块。

矿工有3种角色:miner、worker和agent。

- miner(矿长):负责管理整个矿场的运作,例如启动和停止挖矿,处理外部请求,设置挖矿奖励的钱包地址等。

- worker(副矿长):负责具体挖矿工作的安排,将挖矿任务分配给agent。

- agent(真实矿工):负责挖矿,将自己的挖矿结果交给worker。agent可以通过API创建多个,但默认只有一个。

一个区块的产生主要经过以下流程:

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

在挖矿过程中,只涉及到engine的3个接口:Prepare(挖矿前的准备工作),Finalize(形成一个基本定型的区块)和Seal(形成最终的区块)。worker将区块头、交易以及交易执行的收据等传递给engine.Finalize。engine.Finalize返回一个block,该block的header中缺少Nonce和MixDigest,矿工将block封装成work,并将work发送给所有的agent。agent.update将work传递给agent.mine。agent.mine将work传递给engine.Seal,调用engine.Seal进行挖矿。engine.Seal将Nonce和MixDigest填入区块头,生成一个newblock并交给agent.mine。agent.mine将newblock封装成Result,并发送给worker。

矿工的主要函数介绍了miner、worker和agent的运作机制。

- miner的主要函数: - New:负责创建miner,同时创建1个worker和1个agent(agent可以通过API创建),然后启动update函数。 - update:负责commitNewWork,生成work并分配给agent。commitNewWork被多处调用,并且worker有wait和update两个协程,它们也会调用commitNewWork,因此需要注意加锁。 - wait:负责处理agent挖矿的结果,一直等待接收agent发回的result,并将区块添加到本地数据库。如果没有问题,会发布NewMinedBlockEvent事件,通告其他节点挖到了一个新块。

- agent的主要函数: - update:负责接收worker发来的任务(work),将work交给mine去挖矿。 - mine:负责进行挖矿,调用Engine.Seal进行挖矿,如果成功则生成result并发送给worker。

这篇文章中还包含了两张来自网络的图片,如果侵犯了您的权益,请联系我删除。

最后,如果这篇文章对您有帮助,请关注我的Github,有文章更新会通知您。作者为大彬,本文由其授权发布。如需转载,请保留原文链接:http://lessisbetter.site/2018/06/22/ethereum-code-consensus-1/

热点:GO语言 以太 以太坊 太坊

« 上一条| 下一条 »
区块链交流群
数藏交流群
区块链币圈-全球区块链数字货币行情、比特币虚拟货币资讯,狗狗币以太坊环保币柚子币莱特币瑞波币等加密数字货币价格非交易行情查询,金色财经巴比特范非小号快讯平台。
趣开心资讯 Qukaixin.cn ©2020-2024版权所有 桂ICP备19010284号-1