Uniswap

截止日期早已過期,但交易仍在等待中

  • July 15, 2021

我在 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

帶有突出顯示的 nonce 屬性的交易詳細資訊的螢幕截圖

如果你想創建一個對 uniswap 合約的“更新”呼叫,你應該剛剛將nonce: 7覆蓋添加到你的uniswap.swapExactTokensForTokens呼叫中。

相反,如果您想“撤消” uniswap 方法呼叫(而不是替換它),則應該通過發布“空”交易來取消交易。類似於await wallet.provider.call({to:"0x0", value: 0, nonce: 7, gasPrice: 60});(將 0 ETH 發送到接收方地址:0x0)。

請注意,取消/替換未決交易會花費 ETH,因為您實際上需要在區塊鏈上發布一些內容!

引用自:https://ethereum.stackexchange.com/questions/103548