截止日期早已過期,但交易仍在等待中
我在 uniswap 上做了一筆交易,程式碼如下:
const provider = ethers.getDefaultProvider('mainnet', { infura: INFURA_ID }) const signer = new ethers.Wallet(MY_WALLET_PRIVATE_KEY) const account = signer.connect(provider) const uniswap = new ethers.Contract( //... ) const tx = await uniswap.swapExactTokensForTokens( amountIn.toString(), amountOutMin.toString(), path, to, deadline, { gasLimit: 1000000, gasPrice: ethers.utils.parseUnits("30", "gwei") } ) const receipt = await tx.wait()
已經5個小時了,還在等待中。交易:https ://etherscan.io/tx/0x6208c9e981bdb8bb0dde1816550c0b0f046977d83d2a55e3aba178977cc05cd0
我不能做進一步的交易,它說
There is a Pending txn with a lower account nonce. This txn can only be executed after confirmation of the earlier Txn Hash#
我發現一些主題說使用“nonce”來取消交易,但我在 etherscan 頁面上沒有找到任何“nonce”。
如何終止交易?
將來,如果您想取消待處理的交易,您需要通過發布具有相同 nonce 的其他交易來**提前執行您自己的交易。它可以是同一個交易,也可以是不同的、不相關的交易。重要的是您需要使用相同的 nonce,但gas 價格更高。這個想法是,通過發布更昂貴的交易,節點將選擇它而不是原始交易(他們必須選擇,因為 nonce 不能被複製)。
所有這些都假設原始交易尚未被探勘,但仍有待探勘。
您可以在您發布的交易中找到 nonce。當您點擊“點擊以查看更多”連結時,它是可見的。它就在“輸入數據”部分的上方(見下圖)。是
7
。如果你想創建一個對 uniswap 合約的“更新”呼叫,你應該剛剛將
nonce: 7
覆蓋添加到你的uniswap.swapExactTokensForTokens
呼叫中。相反,如果您想“撤消” uniswap 方法呼叫(而不是替換它),則應該通過發布“空”交易來取消交易。類似於
await wallet.provider.call({to:"0x0", value: 0, nonce: 7, gasPrice: 60});
(將 0 ETH 發送到接收方地址:0x0)。請注意,取消/替換未決交易會花費 ETH,因為您實際上需要在區塊鏈上發布一些內容!