Solidity
通過呼叫 UniswapV2Router02 swapExactTokensForETH 失敗並出現錯誤“TransferHelper:TRANSFER_FROM_FAILED”
我試圖在我的 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);