下面我列舉了三種解決方案,前面兩張是某兩位大佬試出來的,第三種是我蒙出來的。
第一種解決方案
轉載自 http://mp.weixin.qq.com/s/AB9vj1EzOgWT7JyryfQhDg
問題場景
最近技術群中的朋友經常問到這樣的問題,環境搭建已經搭建好,geth節點也成功啟動,可為什么當執行miner.start()方法時卻沒有挖礦,返回null。
其實,不僅僅這些朋友,本人在啟動最新節點進行挖礦的時候也遇到類似的問題。今天就帶大家分析一下引起這個問題可能的幾個原因。
是否設置miner地址
啟動節點挖礦之前,需要查看當前節點中是否已經存在賬號,可執行以下命令,查看當前節點下面是否有賬號存在。
-
>personal.listAccounts
-
["0xc040cbd8a189d36f580fa83c2ffe3a26fb3e6a7e", "0xe0d1de6c934049fe4847b64becff5885bdb83fa4"]
當確認賬戶已經存在時,可以設置Etherbase。先查看以下coinbase賬戶:
-
>eth.coinbase
-
"0xc040cbd8a189d36f580fa83c2ffe3a26fb3e6a7e"
通過上面的命令,可以看到coinbase的賬戶地址,也就是上面查看地址查到第一個地址。
執行設置miner地址:
-
>miner.setEtherbase(eth.coinbase)
-
true
也可以執行執行以下命令進行設置:
-
>miner.setEtherbase(eth.accounts[0])
-
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 挖礦問題,有空才看看是什么情況,知道什么問題的大佬可以留言告訴我一下。
看到這里的,我建議,換台電腦試試
未完待續。