Erc-20

如果在 approvetransferFrom 失敗會發生什麼(剩餘配額的風險)

  • October 16, 2022

我正在嘗試呼叫 Uniswap V2addLiquidity函式,該函式在transferFrom內部呼叫,因此approve必須事先呼叫。

我想用 TypeScript 程式碼來做。在這種情況下,它會呼叫approve第一個事務,然後呼叫addLiquidity第二個事務。我的問題是,如果第二筆交易由於某些原因(例如網路故障或 ETH 不足)而失敗,會發生什麼?是否存在津貼將保留並被利用的風險?

我發現這段程式碼採用了兩種交易方式。也許不是一個好方法?

await token1.approve(routerContract.address, amountIn1);
await token2.approve(routerContract.address, amountIn2);

await routerContract.addLiquidity(
     address1, address2, amountIn1, amountIn2, amount1Min, amount2Min, account, deadline
   );

我可以在不編寫 Solidity 程式碼的情況下避免這種複雜性嗎?

它沒有被利用的風險,因為批准函式獲取您的地址(即消息發送者),以及您在呼叫該函式時傳入的兩個參數(即 routerContract.address 和 amountIn1)以將 uniswap 路由器標記到已批准的 ERC20可以使用您的代幣的 amountIn1。不是任何人都可以使用它,只有 uniswap 路由器。

所以你可以在呼叫approve函式後一個塊呼叫第二個函式,或者在呼叫它1000塊後呼叫第二個函式。

沒有理由擔心有人利用 Uniswap 協議以某種方式利用您的認可。

如果呼叫失敗,最好將批准設置回 0。

某些 Defi 協議會要求您在通話後將津貼設置回 0。

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