Erc-20如果在
如果在 approve
後 transferFrom
失敗會發生什麼(剩餘配額的風險)
我正在嘗試呼叫 Uniswap V2
addLiquidity
函式,該函式在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。