以太坊转账失败后仍会扣除Gas,因为交易在得出失败结果前已经执行了计算,而已执行的计算会消耗Gas。此时不要把“资产没有按预期转出”理解为“交易没有发生”,也不要立刻连续重试。应先找到对应的链上交易收据,核对状态与Gas Used,确认这笔交易是否失败、实际消耗了多少Gas,再继续排查。
转账失败时,Gas已经用于执行计算
一笔交易被提交后,链上需要执行相应计算才能得到结果。即使结果是失败,失败发生前已经完成的计算也不会被抹去,因此仍会产生Gas消耗。交易失败表示预期操作没有成功完成,并不表示此前的执行过程不存在。
理解这一点,需要把“转账结果”和“计算成本”分开看。前者回答操作是否成功,后者反映处理交易时实际使用的计算资源。两者可以同时表现为:转账失败,但Gas已经消耗。想补充了解交易提交和执行的基本概念,可以查看以太坊交易基础资料。
用交易哈希查收据状态和Gas Used
排查时以交易哈希定位具体记录,进入链上交易查询工具后查看交易收据。收据中的状态用于确认交易成功或失败,Gas Used用于确认该笔交易实际消耗的Gas。不要只依据钱包弹窗、余额变化或“没有到账”作出判断,因为这些现象不能代替链上收据。
如果页面上有多笔时间接近的记录,应逐笔比对交易哈希,避免把早先的尝试当成当前交易。记录交易哈希、收据状态和Gas Used,也便于把一次失败与其他已提交交易区分开。Gas Used描述的是实际消耗量,不能因为交易结果失败,就把它当成没有使用或必然退回的部分。
收据确认失败后再决定是否重发
状态字段能够确认失败,Gas Used能够确认消耗,但仅凭这两个字段不一定能说明全部失败原因。因此,看到失败提示后不要在尚未核对记录的情况下连续发送同一操作。重复点击并不能自动解释上一笔交易为何失败,还会增加交易记录混淆,使后续核对更困难。
较稳妥的顺序是:保存当前交易哈希,打开对应收据,确认状态,再读取Gas Used;如果有多次尝试,就分别核对每一个哈希。完成这些检查后,再根据已经确认的链上结果决定是否重新操作。核心判断不在于“钱有没有按预期到账”,而在于收据是否显示失败,以及这笔失败交易已经实际使用了多少Gas。
原创文章,作者:eastbtc,如若转载,请注明出处:https://www.eastbtc.com/coins/eth/29800.html