题目
你的下单流程是:先调用估算接口拿到 gas 数量,直接作为交易的上限提交。
上线后出现两类工单:一类是用户看到「执行失败但扣了手续费」,另一类是用户抱怨「手续费比预估高很多」。请说明估算值为什么不能直接当上限,以及这两类现象分别是怎么产生的。
考察目标
- 能否区分估算值与上限的语义。
- 是否知道估算不足与估算过高分别导致什么。
- 能否给出余量的合理做法与它的代价。
考察估算与上限的区别,以及估算不足与估算过高各自的后果。
你的下单流程是:先调用估算接口拿到 gas 数量,直接作为交易的上限提交。
上线后出现两类工单:一类是用户看到「执行失败但扣了手续费」,另一类是用户抱怨「手续费比预估高很多」。请说明估算值为什么不能直接当上限,以及这两类现象分别是怎么产生的。
估算返回的是「按当前状态执行所需的 gas」,上限是交易字段 gas_limit,表示允许消耗的最大值。未使用的 gas 会退还,结算按实际消耗计算;估算值直接当上限时,执行路径与估算时略有差异就会在半途耗尽 gas,状态回滚而已消耗的 gas 照收。
gas_limit * max_fee_per_gas 与转账金额(依据:EIP-1559 §Specification 的交易验证断言)。gas_used 与成交价格扣费,gas_limit 与实际消耗的差额退回(依据:EIP-1559 §Specification 的 gas 结算逻辑)。eth_call 排查,但模拟结果也不保证最终上链结果(依据:EIP-1474 §eth_estimateGas、§eth_call)。发现这道题有问题? 反馈此题