Web3j insufficient funds 异常处理

如果解决了您的问题。可以关注我哦。我会随时发布开发过程中遇到的问题的解决办法。

目录

一、版本依赖

 二、问题排查。

1、排查交易的费用是否超出,自己账户的余额。

2、修改测试网络的RPC链接。

三、情景再现


总结的话:当调用对方测试环境的时候,有时候也得大胆质疑是否是对方的错误。

一、版本依赖

名称 版本
JDK 17.0.6
Web3J 4.9.8
测试网络一 https://rpc.sepolia.org
测试网络二 https://rpc-sepolia.rockx.com

 二、问题排查。

1、排查交易的费用是否超出自己账户的余额。

1.1、排查方式:计算 【gas * price + value】是否大于自己的账户余额。

参数 对应值(注意:单位都是wei
gas GasPrice
price GasLimit
value 自己设置的交易费用

1.2、计算结果判断:如果计算结果大于自己的余额,则通过减少gas,price和value来使费用总费用小于自己的账户余额。

1.3、再次发起交易:发起交易后如果还是报【insufficient funds for gas * price + value】请看下面的排查方式【2】

2、修改测试网络的RPC链接。

说明:我当时使用的是【测试网络一】出的问题。

1.1、排查方式:切换RPC网络(如果我给的网络链接不上,可自行修改为可访问的网络

2.2、发起交易:确保你再排查【1】的时候结论正确(则钱包余额充足)的前提下发起交易。

如果交易成功,说明是网络的问题。如果还是报【insufficient funds for gas * price + value】则需要您自己排查了。因为我排查到这个方法的时候,交易成功。

三、情景再现

说明:我当时遇到【insufficient funds for gas * price + value】这个异常的时候,是通过问题排查【2】解决的。当时因为没有大胆的怀疑是否是测试网络的问题,然后就消耗了我两天的时间。

1、我此时通过代码查询我的账户余额与钱包的余额不相同,然后我就怀疑可能是测试网络的问题。下面是查询余额的代码。

Web3j web3j = Web3j.build(new HttpService("https://rpc.sepolia.org"));
long balance = web3j.ethGetBalance("这里填写自己账户地址(address)", DefaultBlockParameterName.LATEST).sendAsync().get().getBalance().longValue();
System.out.println(Convert.fromWei(String.valueOf(balance), Convert.Unit.ETHER));

 通过代码查询余额结果为:0.49 eth,实际余额是0.98

 2、此时我将网络切换后查询的余额与实际余额相等

说明:我发现【insufficient funds for gas * price + value】异常,猜测是网络原因是因为我今天领取了免费代码。所以查询的时候才会出现余额不相等,然后才发现是网络的原因。如果你没有领取过,可能再有问题网络查询出来的余额和实际的相等。

 3、我修改网络后进行交易则交易成功。

如果解决了您的问题。可以关注我哦。我会随时发布开发过程中遇到的问题的解决办法。

猜你喜欢

转载自blog.csdn.net/kknacl/article/details/131913286