解决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 挖矿问题,有空才看看是什么情况,知道什么问题的大佬可以留言告诉我一下。

 

 

 

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

 

 

未完待续。

转载于:https://www.cnblogs.com/tianlongtc/p/8871472.html

如果你想将提取的文本内容保存成TXT文件,可以在代码中添加一些操作来实现。例如,在每一页处理完后,将提取的文本内容写入一个TXT文件中。修改后的代码如下所示: ``` from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice from pdfminer.converter import PDFPageAggregator, TextConverter from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfpage import PDFPage # 打开 PDF 文件 fp = open('x1/2023凯程333教育综合应试解析-外国教育史.pdf', 'rb') # 创建 PDF 解析器 parser = PDFParser(fp) # 创建 PDF 文档对象 document = PDFDocument(parser) # 获取页面布局参数 laparams = LAParams() # 创建 PDF 资源管理器 rsrcmgr = PDFResourceManager() # 创建聚合器对象 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建 PDF 解释器 interpreter = PDFPageInterpreter(rsrcmgr, device) # 创建一个TXT文件来保存提取的文本内容 output_file = open('output.txt', 'w', encoding='utf-8') # 处理每一页 PDF 页面 for page in PDFPage.create_pages(document): interpreter.process_page(page) # 获取页面布局 layout = device.get_result() # 提取每一页的文本内容 for x in layout: if isinstance(x, LTTextBoxHorizontal): text = x.get_text().strip() print(text) output_file.write(text + '\n') # 关闭TXT文件和 PDF 文件 output_file.close() fp.close() ``` 这个修改后的代码可以将提取的文本内容保存到名为"output.txt"的TXT文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值