如果解决了您的问题。可以关注我哦。我会随时发布开发过程中遇到的问题的解决办法。
目录
总结的话:当调用对方测试环境的时候,有时候也得大胆质疑是否是对方的错误。
一、版本依赖
名称 | 版本 |
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、我修改网络后进行交易则交易成功。
如果解决了您的问题。可以关注我哦。我会随时发布开发过程中遇到的问题的解决办法。