Solidity

通過呼叫 UniswapV2Router02 swapExactTokensForETH 失敗並出現錯誤“TransferHelper:TRANSFER_FROM_FAILED”

  • March 27, 2022

我試圖在我的 Solidity Contract 上呼叫 UniswapV2Router02 swapExactTokensForETH 函式。

我在 etherscan 上因錯誤“TransferHelper:TRANSFER_FROM_FAILED”而失敗。這是交易網址:https ://kovan.etherscan.io/tx/0x5970c88d59cacdb33ac68ffe0785b9084309cbc5992d971293d24099af663ab7

然後,我使用 https://dashboard.tenderly.co/調試交易

我發現真正的錯誤發生在 Dai.sol Error msg is “Dai/insufficient-balance” 在此處輸入圖像描述

有人知道發生了什麼嗎?請幫幫我!

如果有共享程式碼,說出問題會更方便。

但是,您可能知道,在讓 UniswapRouter 進行交換之前,您應該“批准”令牌,例如 token.approve(_spender, _amount)

在交換之前,您需要呼叫“批准”功能,例如。您需要對大多數 ERC20 代幣執行此操作,這是一個完整的範例:此範例顯示您需要發送 aprove tx 等待它,然後發送購買一個。

   const BUSDamountIn = ethers.utils.parseUnits('100', 18);
   let amounts = await routerContract.getAmountsOut(BUSDamountIn, [BUSD, WBNB]);
   const WBNBamountOutMin = amounts[1].sub(amounts[1].div(10));

   console.log(ethers.utils.formatEther(BUSDamountIn));
   console.log(ethers.utils.formatEther(WBNBamountOutMin));

   const approveTx = await busdContract.approve(
       router,
       BUSDamountIn
   );
   let reciept = await approveTx.wait();
   console.log(reciept);

   const swapTx = await routerContract.swapExactTokensForTokens(
       BUSDamountIn,
       WBNBamountOutMin,
       [BUSD, WBNB],
       wallet.address,
       Date.now() + 1000 * 60 * 10,
       {gasLimit: 250000}
   )

   receipt = await swapTx.wait();
   console.log(receipt);

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