解決miner.start() 返回null


下面我列舉了三種解決方案,前面兩張是某兩位大佬試出來的,第三種是我蒙出來的。

 

第一種解決方案

轉載自  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 挖礦問題,有空才看看是什么情況,知道什么問題的大佬可以留言告訴我一下。

 

 

 

看到這里的,我建議,換台電腦試試

 

 

未完待續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM