Uniswap/Pancakeswap SWAP swapExactTokensForTokens / swapExactETHForTokens FAILED (Sniping Bot)
我是初學者,在過去的幾天裡,我試圖重新創建本教程: https ://www.youtube.com/watch?v=a5at-FEyITQ
起初我嘗試在PancakeSwap上實現它,但遇到了事務錯誤,所以在沒有找到解決方案後我返回了 Uniswap。
我繼續使用Uniswap ( https://app.uniswap.org/#/swap ),連接到我在Ropsten測試網路上執行的****Metamask帳戶,並用一些 ETH 交換了 UNI ……它奏效了。我查看了交易並在下面使用了 WETH 和 UNI 地址…
和以前在 Bscscan 測試網上一樣,現在在 Ropsten Etherscan上,我嘗試在UniswapV2Router ( https://ropsten.etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#writeContract ) 上執行函式14.swapExactTokensForTokens,如圖 1 所示。在 Metamask 上看到:“交易錯誤。合約程式碼中拋出異常。”,Gas 價格(GWEI):185 且金額 + Gas 費僅等於 Gas 費。結果如圖 1 所示,事務狀態:狀態: 失敗並出現錯誤“TransferHelper:TRANSFER_FROM_FAILED”(https://ropsten.etherscan.io/tx/0x5a1caf70fa0ae3e7a74bd80f6fad1faeb5b0185426b27eb012176e15deb5931d)。
我在函式 10 上使用了相同的輸入欄位**。swapExactETHForTokens**並且它成功了!
所以我決定在程式碼中使用這個函式,如下所示:
const ethers = require('ethers'); const addresses = { WETH: '0xc778417e063141139fce010982780140aa0cd5ab', factory: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', router: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', recipient: '0x483A7239dB71fc99a630E6C71dB2508A4dE64508' } const mnemonic = 'MY_MNEMONIC_KEY'; const provider = new ethers.providers.WebSocketProvider('wss://ropsten.infura.io/ws/v3/INFRA_NUMBER'); const wallet = ethers.Wallet.fromMnemonic(mnemonic); const account = wallet.connect(provider); const router = new ethers.Contract( addresses.router, [ 'function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)', 'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)', 'function swapExactETHForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)' ], account ); async function LOL(){ const ethAmount = ethers.utils.parseEther("0.1"); //const tx = await router.swapExactTokensForTokens( const tx = await router.swapExactETHForTokens( ethAmount, 0, ['0xc778417e063141139fce010982780140aa0cd5ab', '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'], addresses.recipient, Date.now() + 1000 * 60 * 10, //10 minutes, { 'gasLimit': 300000, 'gasPrice': ethers.utils.parseUnits('185', 'gwei'), } ); console.log("https://ropsten.etherscan.io/tx/" + tx.hash); const receipt = await tx.wait(); console.log('Transaction receipt'); console.log(receipt); } LOL();
結果是失敗,如下所示:
https://ropsten.etherscan.io/tx/0xa18d2df70f04366a7ed74144d91669c37b3be02a0a57ad3a8e81c2da82806ef9
任何幫助/輸入將不勝感激,因為我已經堅持了一段時間了……
在交換令牌(例如 WETH)之前,您必須批准足夠數量的路由器地址。
在嘗試交換之前使用
approve()
代幣合約的功能。