主页 > imtoken授权管理系统 > 以太坊CPU挖矿源码分析

以太坊CPU挖矿源码分析

imtoken授权管理系统 2023-06-08 06:51:13

以太坊CPU挖矿源码分析

agent agent是具体执行挖矿的对象。 它执行的过程是接受计算出的区块头,计算mixhash和nonce,返回挖出的区块头。

构造CpuAgent,一般情况下CPU不会被用来挖矿。 一般都是用专用的GPU挖矿,GPU挖矿的代码这里就不体现了。

设置返回值通道,获取Work通道,方便对外传递值和返回信息

启动和消息循环,如果已经开始挖矿,则直接退出,否则启动update 这个goroutine update接受workCh的任务,挖矿,或者接受退出信息,退出

mine,挖矿,调用共识引擎进行挖矿,如果挖矿成功,发送消息给returnCh。

远程代理

remoteagent提供了一套RPC接口,可以实现远程矿机的挖矿功能。 比如我有一台矿机。 矿机内部没有运行以太坊节点。 矿机首先从remoteagent获取当前任务,然后进行挖矿计算。 挖矿完成后,提交计算结果以太坊电脑挖矿教程,完成挖矿。

数据结构和构造

开始和停止

获取输入输出的通道,这个和agent.go是一样的。

loop 方法类似于 agent.go 中所做的工作。 收到任务后,它会存储在 currentWork 字段中。 如果作业在 84 秒内未完成,则删除该作业,如果在 10 秒内未收到哈希率报告,则删除跟踪/。

GetWork,远程矿工调用该方法获取当前挖矿任务。

SubmitWork,远程矿工调用该方法提交挖矿结果。 验证结果后,将其提交给 returnCh ``` // SubmitWork 尝试将 pow 解决方案注入远程代理,返回 // 该解决方案是否被接受(not 可以既是坏 pow 也可以是任何 //其他错误,例如没有待处理的工作)。 func (a *RemoteAgent) SubmitWork(nonce types.BlockNonce, mixDigest, hash common.Hash) bool { a. 亩。 Lock() 推迟一个。 亩。 开锁()

SubmitHashrate,提交哈希率

unconfirmed unconfirmed是一种用于追踪用户本地挖矿信息的数据结构。 例如,如果挖出一个块,则等待足够的后续块确认(5),然后检查本地挖掘的块是否包含在 Canonical 区块链内部。

数据结构

unconfirmedBlocks 实现了一种数据结构,用于管理尚未获得足够置信度以证明它们已被规范区块链接受的本地挖掘块。 它用于向矿工提供信息,以便他们知道他们之前开采的区块是否包含在规范区块链中。

插入跟踪块,当矿工挖到一个块时调用,index为块的高度,hash为块的哈希值。

Shift 方法将删除索引超过传递的索引深度的块,并检查它们是否在规范区块链中。

worker.go worker中包含了很多agent,包括上面提到的agent和remote_agent。 工人还负责构建块和对象。 同时,将任务提供给代理。

数据结构:

座席界面

Work结构,Work存储worker当前环境,持有所有临时状态信息。

结构体

push方法,如果我们没有挖矿,则直接返回,否则将任务发送给各个agent

makeCurrent 为当前循环创建一个新环境。

提交事务

commitTransaction 执行 ApplyTransaction

miner miner用于管理worker以太坊电脑挖矿教程,订阅外部事件,控制worker的启停。

数据结构。

构建,创建CPU agent并启动矿机的update goroutine

更新订阅下载器事件。 请注意,这个 goroutine 是一次性循环。 只要它从下载器接收到 downloader.DoneEvent 或 downloader.FailedEvent 事件,它就会将 canStart 设置为 1 并退出循环。 这是为了避免恶意黑客。 DOS 攻击让你处于异常状态

开始。