下面我列举了三种解决方案,前面两张是某两位大佬试出来的,第三种是我蒙出来的。

第一种解决方案

转载自  http://mp.weixin.qq.com/s/AB9vj1EzOgWT7JyryfQhDg

问题场景

最近技术群中的朋友经常问到这样的问题,环境搭建已经搭建好,geth节点也成功启动,可为什么当执行miner.start()方法时却没有挖矿,返回null。

其实,不仅仅这些朋友,本人在启动最新节点进行挖矿的时候也遇到类似的问题。今天就带大家分析一下引起这个问题可能的几个原因。

是否设置miner地址

启动节点挖矿之前,需要查看当前节点中是否已经存在账号,可执行以下命令,查看当前节点下面是否有账号存在。

  1. >personal.listAccounts

  2. ["0xc040cbd8a189d36f580fa83c2ffe3a26fb3e6a7e", "0xe0d1de6c934049fe4847b64becff5885bdb83fa4"]

当确认账户已经存在时,可以设置Etherbase。先查看以下coinbase账户:

  1. >eth.coinbase

  2. "0xc040cbd8a189d36f580fa83c2ffe3a26fb3e6a7e"

通过上面的命令,可以看到coinbase的账户地址,也就是上面查看地址查到第一个地址。

执行设置miner地址:

  1. >miner.setEtherbase(eth.coinbase)

  2. true

也可以执行执行以下命令进行设置:

  1. >miner.setEtherbase(eth.accounts[0])

  2. true

然后,可以再执行挖矿命令,查看是否问题是否解决。

节点误报

另外一种情况就是其实miner.start()命令已经执行成功,只不过节点返回null。如果是dev模式,可以使用eth.blockNumber查看一下区块高度是否增加。

节点版本问题

本人安装的geth-1.7.3版本的节点,在dev环境下验证发现,当执行miner.start()时,返回null。但其实miner已经执行,只不过它在等待你发送交易之后才会生成新的区块。也就是说执行了miner.start(),它一直在等待,这是发送一笔交易,再查看区块高度发现已经增加一块。  (注意这句话,我瞎搞的来源)

第二种解决方案

转载自:https://blog.csdn.net/wo541075754/article/details/79260040

之前的那篇文章也是搜集汇总了网上的各种解决方案,但在实践的过程中发现并不能有效的解决问题,只有发送交易才会自动挖矿。因此,针对此问题又进行了大量资料的阅读查阅,终于找到原因和解决方案。

原因及解决方案

出现此问题的原因在于geth版本更新之后,–dev模式下新增了一个参数项:

--dev               Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
--dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)

我们先看一下上面的两个参数,–dev是我们常用的参数,之前版本中我们只用使用–dev然后执行miner.start()就可以挖矿,但是在后面的版本中,当我们会发现只有发送交易了才会挖一个块。

引起此问题的原因就是新增了–dev.period value配置项。此配置默认值为0,也就是说只有有pending中的交易才会挖矿。

明白了这个参数的含义之后,解决问题就很简答了,之前的–dev参数依旧使用,然后再在后面添加–dev.period 1,注意,参数值为1,不是默认的0。

再重新启动节点,然后执行挖矿,先不管返回是否是null,执行之后,无论查看日志或执行eth.blockNumber都会发现块在不停的增高。

第三种解决方案

感觉我的不能算解决 miner.start() 放回 null 的问题,不过让 account[0] 拥有了一定 ether ,方便后面测试用,挖不挖矿无所谓啦,

首先解锁 accounts[0] 和 accounts[1]

$ personal.unlockAccount(eth.accounts[0])

$ personal.unlockAccount(eth.accounts[1])

发起一笔 5ether 的交易

$ amount = web3.toWei(5,'ether')

$ eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

这时候会显示失败

Error: insufficient funds for gas * price + value
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at <anonymous>:1:1

没事,继续发起一笔 0ether 的交易

$ amount = web3.toWei(0,'ether')

$ eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

然后就成功了,成功了,成功了,前一笔交易居然成功了。

截图奉上

今天再试了一下,发现原来是我的挖矿速率太低,导致交易很久才被打包,平均10分钟挖一个矿(???难道我的私有链和比特币有某种神秘联系), 下面贴图

执行 eth.getHashrate(), 发现只有0,这是什么情况,google简单查了一下, 有说是ubuntu 问题,有说是 gpu 挖矿问题,有空才看看是什么情况,知道什么问题的大佬可以留言告诉我一下。

看到这里的,我建议,换台电脑试试

未完待续。

解决miner.start() 返回null的更多相关文章

  1. geth入门命令和miner.start返回null的问题

    geth –datadir “./ethdev” –nodiscover console 2>>geth.log //geth 进入控制台 –datadir 指定链的目录 与公有链区分开 ...

  2. 以太坊执行miner.start返回null终极解决方案

    参考博文:https://blog.csdn.net/wo541075754/article/details/79260040

  3. Android Fragment getActivity返回null解决

    在Android开发中,如果我们用到V4包里面的Fragment,在应用被切换到后台的时候,Activity可能被回收,但是创建的所有Fragment则会被保存到Bundle里面,下面是Fragmen ...

  4. Type.GetType()在跨程序集反射时返回null的解决方法

    在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.Class ...

  5. WORD 的 Open 和Workbook 的 LoadFromFile 函数返回null的一种解决方法

    WORD Application.Documents.Open 和 Workbook workbookExcel.LoadFromFile 函数返回null的一种解决方法 DCOM Config Se ...

  6. WORD Application.Documents.Open函数返回null的一种解决方法

    DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但调用Application ...

  7. Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)

    最近遇到一个比较棘手的问题:使用GPS定位无法获取当前的地理位置,即getLastKnownLocation方法始终返回null.   后来一篇博文 getLastKnownLocation()返回n ...

  8. PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)

    本文主要为大家讲解了php在使用json_decode函数解码json字符串时,解码不成功返回NULL的问题原因分析和解决方法,感兴趣的同学参考下. 一般来说,php对json字符串解码使用json_ ...

  9. Type.GetType()反射另外项目中的类时返回null的解决方法

    项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...

随机推荐

  1. Devstack: A copy of worked local.conf I'm sharing with you.

    service_plugins = neutron.services.firewall.fwaas_plugin.FirewallPlugin [service_providers] service_ ...

  2. Uva - 810 - A Dicey Problem

    根据状态进行bfs,手动打表维护骰子滚动. AC代码: #include <iostream> #include <cstdio> #include <cstdlib&g ...

  3. (二)php的常量和变量

    [php在命令行下接收参数] 如果在命令行调试php,传入的参数通过$argv获取,注意其中包含了文件名这一个元素,数组中元素的个数通过$argc获取. [可变变量] 指的是变量的名称可变,变量的标识 ...

  4. FSG报表打印报错,log文件显示java.sql.SQLException: No corresponding LOB data found

    报错信息: +---------------------------------------------------------------------------+ Plsql 程序的日志信息开始 ...

  5. Github最流行的10,000个Java项目使用的类库

    本文由 ImportNew - Andy.Song 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. 前言 作为Java开发人员,总是需要面临这门不断成熟.高速改进中的语言.开发人员 ...

  6. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  7. 开源网络监控管理系统:OpenNMS

    OpenNMS是一个开源的企业级基于Java/XML的分布式网络和系统监控管理平台.OpenNMS是管理网络的绝好工具,它能够显示网络中各中终端和服务器的状态和配置,为方便地管理网络提供有效的信息. ...

  8. 《java入门第一季》之面向对象(重头戏多态)

    接下来介绍java第三大特性--多态性 /* 多态:同一个对象(事物),在不同时刻体现出来的不同状态. 举例: 猫是猫,猫是动物. 水(液体,固体,气态). 多态的前提: A:要有继承关系. B:要有 ...

  9. Ubuntu快速截图

    以前截图,都是按Print键全屏截图,Alt+Print可以截当前的窗口.同时把系统自带的截图工具放到面板上,用的时候点击一下,再选择区域截图,很是不方便.不过,Ubuntu允许自己定义快捷键.要自己 ...

  10. eclipse搭建ssh后台

    SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程.  第一步:准备工作.    下载好eclipse,Struts2,Spring, ...