這幾天我被以太坊網(wǎng)絡(luò)困住了。
我對(duì)以太坊網(wǎng)絡(luò)的使用本就不太熟悉蔗喂,加上速度慢买优、Gas 高等缺點(diǎn)妨马,我懷有一定程度的偏見(jiàn)。
3天前杀赢,我將手里的 Badger 代幣存入 Badger Dao 以獲取收益烘跺。
在進(jìn)行了一系列的 Approve、Deposit脂崔、Stake 的操作后滤淳,Gas 費(fèi)花了好幾百美金。
最崩潰的是我居然卡在了最后一步砌左,錢花了脖咐,幣卻卡在網(wǎng)絡(luò)中,裂開(kāi)……
但沒(méi)相到更讓我裂開(kāi)的是兩天后的今天汇歹,我又往賬號(hào)里轉(zhuǎn)了十幾個(gè) ETH 屁擅,準(zhǔn)備通過(guò) Metamask 的聚合交易功能加倉(cāng) Badger,一通操作下來(lái)产弹,所有交易全部卡住派歌。
看著 Badger 的價(jià)格一路攀升,我焦急地求助朋友們,心急如焚胶果。
最后也沒(méi)得到想要的答案匾嘱。
最后痛定思痛,下定決心自己解決早抠,于是在網(wǎng)上找各種教程霎烙。
我的注意力卻因此高度集中了,一邊閱讀一邊思考蕊连,在理解了以太坊網(wǎng)絡(luò)的打包機(jī)制后終于找到了解決辦法悬垃。
過(guò)程比想象中簡(jiǎn)單多了,我真傻甘苍,偏見(jiàn)阻礙了我前進(jìn)的腳步盗忱。
我的問(wèn)題源自一筆 Stake 交易,為了省點(diǎn)錢羊赵,Gas費(fèi)(gwei值)拉太低了,正常情況等幾個(gè)小時(shí)交易會(huì)被打包扇谣,但是這幾天以太坊網(wǎng)絡(luò)持續(xù)擁堵昧捷,Gas 費(fèi)不斷攀升,我的小額交易費(fèi)被礦工無(wú)情的嫌棄了罐寨。
按照以太坊網(wǎng)絡(luò)的設(shè)計(jì)靡挥,后一筆交易的 nonce 等于前一筆交易的 nonce+1。
系統(tǒng)按照 nonce值 的順序來(lái)打包每一筆交易鸯绿,如果前面的交易沒(méi)有完成跋破,后續(xù)所有交易都得排隊(duì)。
而解決方法是發(fā)起一筆新的交易瓶蝴,使用和卡住那筆交易同樣 nonce值毒返,并乖乖拉高 Gas費(fèi),以此覆蓋第一筆交易舷手。
當(dāng)卡住的交易被覆蓋并被打包后拧簸,后面卡住的交易就迎刃而解了。
解決問(wèn)題最有效的方式是直面問(wèn)題男窟,而不是回避盆赤、恐懼或偏見(jiàn)。
風(fēng)會(huì)熄滅蠟燭歉眷,卻能使火越燒越旺牺六。
注1:不同時(shí)段的 gwei 值所對(duì)應(yīng)的 ETH 是不同,網(wǎng)絡(luò)通暢時(shí) 200gwei 可能是 0.001ETH汗捡,網(wǎng)絡(luò)擁堵時(shí) 50gwei 可能是0.05ETH淑际。所以我們和以太坊網(wǎng)絡(luò)交互之前,應(yīng)該先查看當(dāng)前網(wǎng)絡(luò)合理的 gwei 值是多少。
注2:nonce 是以太坊網(wǎng)絡(luò)的一個(gè)可選參數(shù)庸追,作用是防止雙花霍骄。
以下是 nonce 使用的幾條規(guī)則:
● 當(dāng)nonce太小(小于之前已經(jīng)有交易使用的 nonce)淡溯,交易會(huì)被直接拒絕读整。
● 當(dāng)nonce太大,交易會(huì)一直處于隊(duì)列之中咱娶,這也就是導(dǎo)致我的問(wèn)題的原因米间;
● 當(dāng)發(fā)送一個(gè)較大的 nonce,然后用多筆交易以此填補(bǔ)第一筆交易 nonce 到那個(gè)較大 nonce 之間的差膘侮,交易可被執(zhí)行屈糊。
● 通常情況下,覆蓋掉一筆處于 pending 狀態(tài)的交易 gas price 需要高于原交易的110%琼了。
所以逻锐,對(duì)于每一個(gè)地址,在以太坊的交易中雕薪,必須嚴(yán)格按照 nonce 往上遞增昧诱。nonce 不會(huì)重復(fù),也不會(huì)跳躍所袁。只有等上一筆交易成功之后盏档,才開(kāi)始下一筆,這樣就能很好地防止雙花問(wèn)題燥爷。