Geth客户端常用命令以及metamask连接到虚拟机私有链问题

将命令行数据写到log文件中
mao@ubuntu:~/Desktop/privateChain$ geth --datadir . --networkid 15 console 2>output.log
# 日志信息写到当前目录下的output.log 文件中
另开一窗口查看日志信息
mao@ubuntu:~/Desktop/privateChain$ tail -f output.log 
主机win10, 在Ubuntu中使用geth创建私有链

使用metamask无法连接虚拟机中的私有链,使用命令 netstat -ano |grep 8545 发现rpc通信端口 8545 的 Localaddress 是 127.0.0.0:8545 ,这是个回环地址,说明该端口只能本地也就是本虚拟机可访问。此时启动geth 控制台时需要添加 --rpcaddr 参数。

mao@ubuntu:~/Desktop/privateChain$ geth --datadir . --networkid 15 --rpc --rpcaddr "0.0.0.0" console 2>output.log

这时主机metamask就可以访问了。

geth --rpccorsdomain "*" 允许跨域请求的域名列表
加了这个参数反而连不上geth
开发者模式创建私有链

开发者模式创建私有链不需要初始化,直接使用下面语句就可以开启私有链的创建和控制台的开启

geth --datadir . --rpc --rpcaddr "0.0.0.0" --rpcport 8546 --dev console 2>> output.log
# 注意 设置启动参数--rpcaddr 127.0.0.1 ,主机中浏览器metamask无法连接该链
注意点
  • 使用metamask创建网络时,需要输入完整的网络路径,这时要查看自己虚拟机Linux系统的ip地址。当重新接入网络时,由于VMware中Linux系统ip是自动动态分配的,所以会出现ip地址发生变化,metamask中原来的私有测试链无法接入的情况。
  • 使用vpn的时候可能会导致metamask连不上本地虚拟机创建的私有链网络(关闭vpn或者重启浏览器)
  • txpool由两部分构成,分别是pending和queued:
    queued:提交但是当前无法执行的交易,放在queue中等待执行。比如nonce值设置过大的交易。举个例子,当前账户的nonce是10,txpool中有该账户的第100号交易,但txpool中没有第11~99号交易,这些交易的缺失,造成第100号交易无法执行,所以第100号交易就是未来的交易、不可执行的交易,存放在queue中。
    pending:等待执行的交易会被放在pending队列中;比如我们把上面的11~99号交易补全了,那么第100号交易都可以进入到pending,因为这些交易都是连续的,都可以打包进区块。
  • 根据以上可知,本Ubuntu系统上的一个多月前正常使用的测试网络,现在使用相同账户提交交易,交易一直处于queue状态,无法执行打包,原因就是出现了交易缺失,缺失的原因未知。

  • 原因分析:metamask对同一个chainId的网络所有的同一个账户的交易从0开始累计nonce。尽管网络的id 和端口不同,但是metamask会认为是同一个chain,在切换不同网络时,metamask提交的交易会从之前累积的nonce数值开始。导致nonce中断。我自己一直使用的dev 模式,默认的chainId 都是 1337 ,这个数值来自dev模式下网络返回的chainId值, 切换不同网络时用了同一个chainId。

  • 解决方法:

  • 1 使用私有链模式,在私有链创建时,在genesis.json文件中指定不同的chainId值即可。理论上是可行的,但是本人没试,有兴趣的可以尝试

  • 2 清除账户历史数据, 官方给出的解决方案,挺吓人的方法,如果历史交易不那么重要的话,可以尝试。(注意,私有测试链上的queue的交易没有被清空,我直接把devChain的文件夹都清空了,重新创建并开启dev模式,这时queue交易被删除。本人一直想修改dev模式下的chainId。但是开发者模式没有修改的方法)

  • 3 有些博主提到了一个方法,就是在geth客户端下,发布交易把该网络下中间缺失的nonce的交易补上,geth命令行下发布交易时指定nonce: xxx。 这个方法需要知道缺失的所有的nonce值。
    GitHub来源对于这个问题,metamask的GitHub官网下也有许多留言,这里给出链接

猜你喜欢

转载自blog.csdn.net/mingrizhixin/article/details/111407758