主页 > 以太坊imtoken > 以太坊矿机挖矿,以太坊挖矿软件源码

以太坊矿机挖矿,以太坊挖矿软件源码

以太坊imtoken 2024-01-01 05:15:00

以太坊矿机挖矿,以太坊挖矿软件源码admin08-09 20:4139 views

先看流程图

首先,当你打开控制台的时候,系统会帮你做一些准备工作,比如新矿工、矿工等。

入口

可以看出矿机有6个方法,所以相应的源码中会有6个API。

在eth包中的api.go中,可以看到如下6个API。

那么,我们就来具体了解一下这6个API的具体功能实现。

miner.start()//有个参数,是挖矿需要的协程数 func (api *PrivateMinerAPI) Start(threads *int) error {// seal引擎支持的话设置线程数//如果协程数指针为空以太坊手机挖矿app注册,则新建一个 if threads == nil {threads = new(int)//如果协程数为0,则指定为-1,然后是我的无法打开协程} else if *threads == 0 {*threads = -1 // 从内部禁用矿工}type threaded interface {SetThreads(threads int)}//Assertion if th, ok := api. e.engine .(线程); ok {log.Info("Updated mining threads", "threads", *threads)th.SetThreads(*threads)}//启动矿机并返回//开始挖矿并返回//如果没有In Miningif !api .e.IsMining() {// 将初始价格点传播到交易池//锁定 api.e.lock.RLock()//获取 gaspriceprice := api.e.gasPrice//解锁 api .e.lock。 RUnlock()//设置阈值//SetGasPrice() 交易池要求的最低价格,更新新交易并将所有交易降低到这个阈值以下 api.e.txPool.SetGasPrice(price)//开始挖矿,如果返回有错误,没有错误则继续。 返回 api.e.StartMining(true)} 返回 nil}

通过设置协程数量进行挖矿,并做一些必要的工作,然后开始挖矿。

开始挖矿(真)

func (s *Ethereum) StartMining(local bool) error {//获取挖矿账户地址 eb, err := s.Etherbase()if err != nil {log.Error("没有etherbase无法开始挖矿", "err " , err)return fmt.Errorf("etherbase missing: %v", err)}//判断引擎是否为PoA共识引擎 if clique, ok := s.engine.(*clique.Clique); ok {//获取这个账户的钱包,err := s.accountManager.Find(accounts.Account{Address: eb})if wallet == nil || err != nil {log.Error("Etherbase account unavailable locally", "err ", err)return fmt.Errorf("signer missing: %v", err)}//将私钥注入引擎,形成一个新块,这是PoA共识clique的初步准备。Authorize(eb, wallet .SignHash)}if local {// 如果本地(CPU)挖矿开始,我们可以禁用交易拒绝 // 为速度同步引入的机制次。 主网上的 CPU 挖矿是可笑的//同步时间加速机制,cpu 挖矿是荒谬的//所以没有人会走这条路,而在 CPU 挖矿上标记同步完成//将确保私有网络也能在单一矿工模式下工作。 // 所以没有人会走这条路,在 CPU 挖矿上标记同步将确保私有网络也可以在单矿工模式下工作。 atomic.StoreUint32(&s.protocolManager.acceptTxs, 1)}//开启协程挖矿 //eb为矿工地址 go s.miner.Start(eb) return nil}

矿工.Start(eb)

func (self *Miner) Start(coinbase common.Address) {//给变量赋一个新值以太坊手机挖矿app注册,不管之前是什么值 atomic.StoreInt32(&self.shouldStart, 1)//设置worker的coinbase属性self.worker.setEtherbase( coinbase)//设置矿工的coinbase属性 self.coinbase = coinbase//加载canStart命令,判断是否可以开始挖矿 if atomic.LoadInt32(&self.canStart) == 0 {log .Info("网络同步中,之后会启动矿机") return}//给变量赋一个新值,不管之前是什么值 atomic.StoreInt32(&self.mining, 1)log.Info("开始挖矿操作")//worker.startself.worker.start() self.worker.commitNewWork()}

工人。 开始()

func (self *worker) start() {self.mu.Lock()defer self.mu.Unlock()atomic.StoreInt32(&self.mining, 1)// 启动agentsfor agent := range self.agents {agent. 开始()}}

worker.commitnetwork()

4g显卡不能挖eth的解决办法,现在4g显卡可以挖ethwindow eth mining, win10 mining eth