我被以太坊困住了

2021-02-07  本文已影响0人  舒_展

这几天我被以太坊网络困住了。

我对以太坊网络的使用本就不太熟悉,加上速度慢、Gas 高等缺点,我怀有一定程度的偏见。

3天前,我将手里的 Badger 代币存入 Badger Dao 以获取收益。

在进行了一系列的 Approve、Deposit、Stake 的操作后,Gas 费花了好几百美金。

最崩溃的是我居然卡在了最后一步,钱花了,币却卡在网络中,裂开……

但没相到更让我裂开的是两天后的今天,我又往账号里转了十几个 ETH ,准备通过 Metamask 的聚合交易功能加仓 Badger,一通操作下来,所有交易全部卡住。

看着 Badger 的价格一路攀升,我焦急地求助朋友们,心急如焚。

最后也没得到想要的答案。

最后痛定思痛,下定决心自己解决,于是在网上找各种教程。

我的注意力却因此高度集中了,一边阅读一边思考,在理解了以太坊网络的打包机制后终于找到了解决办法。

过程比想象中简单多了,我真傻,偏见阻碍了我前进的脚步。

我的问题源自一笔 Stake 交易,为了省点钱,Gas费(gwei值)拉太低了,正常情况等几个小时交易会被打包,但是这几天以太坊网络持续拥堵,Gas 费不断攀升,我的小额交易费被矿工无情的嫌弃了。

按照以太坊网络的设计,后一笔交易的 nonce 等于前一笔交易的 nonce+1。

系统按照 nonce值 的顺序来打包每一笔交易,如果前面的交易没有完成,后续所有交易都得排队。

而解决方法是发起一笔新的交易,使用和卡住那笔交易同样 nonce值,并乖乖拉高 Gas费,以此覆盖第一笔交易。

当卡住的交易被覆盖并被打包后,后面卡住的交易就迎刃而解了。

解决问题最有效的方式是直面问题,而不是回避、恐惧或偏见。

风会熄灭蜡烛,却能使火越烧越旺。

注1:不同时段的 gwei 值所对应的 ETH 是不同,网络通畅时 200gwei 可能是 0.001ETH,网络拥堵时 50gwei 可能是0.05ETH。所以我们和以太坊网络交互之前,应该先查看当前网络合理的 gwei 值是多少。

注2:nonce 是以太坊网络的一个可选参数,作用是防止双花。

以下是 nonce 使用的几条规则:

● 当nonce太小(小于之前已经有交易使用的 nonce),交易会被直接拒绝。

● 当nonce太大,交易会一直处于队列之中,这也就是导致我的问题的原因;

● 当发送一个较大的 nonce,然后用多笔交易以此填补第一笔交易 nonce 到那个较大 nonce 之间的差,交易可被执行。

● 通常情况下,覆盖掉一笔处于 pending 状态的交易 gas price 需要高于原交易的110%。

所以,对于每一个地址,在以太坊的交易中,必须严格按照 nonce 往上递增。nonce 不会重复,也不会跳跃。只有等上一笔交易成功之后,才开始下一笔,这样就能很好地防止双花问题。

上一篇下一篇

猜你喜欢

热点阅读