Transactions

Uniswap/Pancakeswap SWAP swapExactTokensForTokens / swapExactETHForTokens FAILED (Sniping Bot)

  • June 4, 2021

我是初學者,在過去的幾天裡,我試圖重新創建本教程: 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)。

圖 1: 圖 1

我在函式 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()代幣合約的功能。

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