Skip to content

以太坊交易一直 pending 该怎么办 – 记录一下买 ENS 遇到的坑

最近买了一个 ENS 域名,花费了算上反向解析的交易费差不多 150 刀,15年,一年平均下来 10 刀,也还行吧,和一个 .com 域名每年注册费差不多。因为是第一次用以太坊,遇到了好几个坑,比如因为 gas 费太低交易一直 pengding,还有同样的交易发了好几笔,这里记录一下解决办法。

 

小知识:

什么是 ENS(Ethereum Name Service)

ENS(Ethereum Name Service)是以太坊域名服务,是一个基于以太坊区块链的分布式、开放和可扩展的命名系统。

ENS的工作是将可读的域名(比如”alice.eth”)解析为计算机可以识别的标识符,如以太坊地址、内容的散列、元数据等。ENS还支持”反向解析”,这使得将元数据(如规范化域名或接口描述)与以太坊地址相关联成为可能。

反向解析的意思是可以把你的 eth 钱包地址反向解析成你的 ens,比如在原来需要显示 eth 地址的地方可以反向解析成你的 ens,更加方便可读。

如果没有 ens:

without ens

如果有 ens:

with ens是不是清楚多了

ENS 目前开放注册,5 位字符及以上的域名每年 5 刀注册费,5位以下每年 300 刀。

第一个坑:ETH交易费

在注册 ens 域名的时候,由于一直在关注 gas 费的问题,因为 gas 猛涨,然后突然有一天 gas 降到了 4 gwei,然后我赶紧下手买了ens,结果在设置反向解析时,把 gas 费设置的太低,导致反向解析的交易一直 pending,当时有点冲动,选择了加速,然后没注意 gas 费,没想到一下扣掉了 0.0031 ETH, 差不多快 10 刀,肉疼的不行,gas 费设置还是要留心,不能一时冲动,要守住心中的底线,不能设置的太高,肉疼,也不能设置的太低,长时间 pending,导致后续的交易无法进行,因为 nonce 机制的存在,nonce 小的交易先执行,防止超花问题,比如你原本只有 1 个 eth,然后你第一笔交易发给 A 0.3 eth,但是此时交易还没有成功,你又发出一笔交易给 B 0.9 eth,因为你此时账号还有 1 个 eth,所以如果两笔交易被同时执行,你就发送了 1.2 eth,但是你只有 1 eth,所以这是应该被避免的,因此 eth 引入了 nonce 机制,其实就是一个自动增长的有理数,从 1 开始,每发出一笔交易自动递增,如果有 nonce 较小的交易在 pending,后续的交易会一直 pending 直到 nonce 较小的交易被确认,这样如果你发送给 A 的交易还在 pending,发送给 B 的交易就会一直等待直到前一笔交易完成,这时再执行发送给 B 的交易时系统检测你只有 0.7 eth 了,然后就会失败。

小技巧 :设置最高交易费

在你的 metamask 钱包里选择 设置 -> 高级,然后 启用 高级燃料设置

advance set

这个开启之后在每次生成新的交易时就可以编辑你最大愿意支付的 gas,计算方法是

燃料限制 = 最高优先费用 * 最高收费

gas

不能设置太低,比如最高收费 2 GWEI,在现在动辄 20-100 gwei 的情况下,你的交易可能永远也不会确认,如果一直 pending 那你还得增加 gwei 或者花钱取消交易,否则这个账户就再做不了任何新的交易了,关于如何取消交易,下面细说。

第二个坑:ENS 反向解析生成多笔交易

在设置反向解析 ENS 的时候,ENS 网页会帮你生产一笔转账为 0 的新交易给 ENS 的智能合约地址,这个时候因为我之前设置了一个特别低的最高收费 (4 gwei),导致我的交易一直 pending,然后就有点心急,每隔几天就重新点一次 ENS 网页上设置 反向解析的按钮,让它生成新的转账交易,然后就一连生成了 6 笔反向解析的交易,有些 gas 高,有些 gas 低,

ens transaction

我天真的以为只有最后一笔会被执行,之前的会自动取消,搜了半天才了解到上面说的 nonce 机制,导致这 6 笔交易一直在 pending,然后我不得不从最小 nonce 的交易开始加速,然后最小 nonce 的一笔终于确认,然后不幸的是后面紧接着的两笔交易 nonce 也很高,被自动执行了,惨剧到这里还没结束,后面紧接着的三笔交易 gas 费非常低,估计永远也确认不了,这个时候我想把它们都取消掉,然后就有了下面这个小技巧,取消交易

小技巧:取消一直 pengding 的交易

其实严格的来说,交易是不能取消的,但是可以覆盖,就是用同样的 nonce 去生成一笔新的交易,并且设置更高的 gas 费,这样更高 gas 的交易会被先执行,而之前相同 nonce 的交易就被 drop 掉了,总而言之一句话,取消也是要钱的!!!可恶的区块链,干什么事情都要钱,还那么贵,用 polygon 这种 L2 多好。

那么如何取消交易呢,首先需要在 设置 -> 高级 里启用 自定义交易 nonce

nonce

然后在区块浏览器里找到你的钱包地址对应的所有交易,https://etherscan.io/address/[你的钱包地址]

找到正在 pending 的最小 nonce 的一笔交易,可以点击 click to see more,可以找到 nonce

found nonce

打开你的 metamask 钱包,新建一笔发送给你自己 0 eth 的交易,在 nonce 一栏填上上一步的 nonce

define nonce

记得设置一个比原交易更高的 gas,然后点击保存,这样一旦这个交易被执行,之前的交易会被自动 drop 掉,我就是这样连续取消了剩下的 3 笔交易,都是钱啊,哎,要被自己蠢哭了,好了我去哭一会了,希望你不要像我一样,管住自己的手,就能省好多钱。

 

还有一点很重要,如果对同一个操作,比如设置反向解析,如果已经生成了一笔交易还在 pending,在网页重新触发的操作时候记得修改 nonce 为pengding 的nonce,这样就能保证同样的操作只存在一笔交易,不会像我一样傻乎乎生成了多笔交易白白亏钱

 

看到这里啦,如果觉得本文对你有帮助,欢迎打赏啊,

我的 eth 地址:  zkwzk.eth,好记吧

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Yuri Z

不行啊 交易失败了

1
0
Would love your thoughts, please comment.x
()
x