sean
1
安卓钱包版本: 2.1.3(GooglePlay) IOS没设备无法测试.
Geth版本: v1.13.15
复现过程:
- 本地通过geth, 启动一条开启了LondonBlock的测试节点, 开启1559 gas协议.
- tp钱包添加网络, 创建钱包.
- 发起转账, 能看到gas推荐估算的maxFeePerGas是14, 链的BaseFeePerGas是7, 刚好是basefee的2倍(符合标准), 但是maxPriorityFeePerGas是0, 标准读取的eth.maxPriorityFeePerGas是1Gwei, 通过接口也能获取到该值.
综上, 钱包中的gas price oracle的maxPriorityFeePerGas字段读取错误, 导致交易上链失败.
tp的chrome插件无此问题.
metamask无此问题.
ok钱包无此问题.
sean
4
我在aws上部署了一个测试链, 你们可以进行测试:
链信息:
url: http前缀//18.162.154.166:8545
chainID: 22222
测试账号(有链币):
addr: 0x90a2770df6cb2b50A71C9Bd814ef97588dD0fd12
priv: 97456ed4a9437a0667b7c6b35f25d26e9eaa5a76a26ff35dedd2ea129d97fbd3
复现过程:
- 导入网络和私钥后, 直接发起转账操作
- 默认转账操作的maxPriorityFeePerGas为0, 直接会被轻节点抛弃.
- 加速交易, 最高gas设置为2gwei, 最高矿工费设置1gwei, 即可上链.
1 个赞
→ POST http://18.162.154.166:8545/
请求参数:
{“jsonrpc”:“2.0”,“method”:“eth_feeHistory”,“params”:[“0x3”,“latest”,[5,50,80]],“id”:1715601860}
请求结果:
{“jsonrpc”:“2.0”,“id”:1715601860,“result”:{“oldestBlock”:“0xf0a6”,“reward”:[[“0x0”,“0x0”,“0x0”],[“0x0”,“0x0”,“0x0”],[“0x0”,“0x0”,“0x0”]],“baseFeePerGas”:[“0x7”,“0x7”,“0x7”,“0x7”],“gasUsedRatio”:[0,0,0]}} 。
从结果可以看到:通过“eth_feeHistory”获取得到的“maxPriorityFeePerGas”的值就是0。
另外您说的xx钱包可以,我们先调研确认下
看了metaMask的逻辑,metaMask通过节点请求eth_feeHistory,得到的数据也是0,但它搞了个默认值1.5。
TP目前是如何处理的:TP现在是通过节点拿到啥,就用啥,不会用默认值(此前也有个默认值,但后来去掉了)。
您如何解决:
- 在链设置上,允许交易的maxPriorityFeePerGas为0。
- 节点数据做相应修改,如将“ eth_feeHistory”请求返回的数据“reward”数组是非0的,即让maxPriorityFeePerGas的值大于0
sean
7
节点数据做相应修改,如将“ eth_feeHistory”请求返回的数据“reward”数组是非0的,即让maxPriorityFeePerGas的值大于0
这里maxPriorityFeePerGas的值实际上是大于0的, 但是eth_feeHistory接口, 是依据历史区块数据, 无法修改与调整的.
而且很多新链, 刚开始没交易也很常见.
sean
8
'eth_feeHistory` 返回的数据是基于过去的区块来统计的, 但是如果一个链, 上链交易过少, 会产生reward为0的结果, 但是如果单独调用如下接口, 则能获取到正确的值:
curl "http://18.162.154.166:8545" --data '{"jsonrpc":"2.0","method":"eth_maxPriorityFeePerGas","params":[],"id":1}' --header 'accept: application/json' --header 'content-type: application/json'
{"jsonrpc":"2.0","id":1,"result":"0x3b9aca00"}
这里是否可以做个降级调用处理呢?
这里的降级调用处理是:如果 “eth_feeHistory” 拿到的reward是0,则再请求一下“eth_maxPriorityFeePerGas” ?
sean
10
是的, 或者可以同步获取两个值, maxPriorityFeePerGas是节点建议值, feeHistory是历史经验值.