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官网下也有许多留言,这里给出链接

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
连接Metamask到Geth私有链,你需要按照以下步骤进行操作: 1. 首先,在Metamask钱包中点击右上角的网络切换按钮,选择“Custom RPC”(自定义RPC)选项。 2. 在“Custom RPC”页面中,填写私有链的网络名称,可以根据需要自行设置。RPC URL的格式为http://服务器地址:http端口号,例如:http://81.72.166.130:8545。链ID即为私有链中定义的networkid。 3. 点击“Save”(保存)按钮,保存配置。 4. 确保你已经启动了Geth私有链。你可以使用以下命令启动私有链: ``` geth --datadir data --networkid 15 --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --port 30305 --allow-insecure-unlock console 2>>geth.log ``` 5. 如果你使用的是云服务器,需要在服务器管理界面开启对应的端口,特别是http.port对应的端口,以便Metamask钱包能够连接私有链节点。 6. 现在,你可以在Metamask钱包中选择你配置的私有链网络,并使用你在私有链上的账户进行操作了。 请注意,以上步骤中的具体配置和命令可能会根据你的私有链设置而有所不同。确保按照你的私有链的要求进行配置和启动。 #### 引用[.reference_title] - *1* *2* *3* [以太坊私链搭建(一)——环境配置和metamask连接](https://blog.csdn.net/llslinliansheng/article/details/123596009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值