Contract-Invocation

PancakeSwap V2 swapExactTokensForTokens 不工作,卡住

  • May 23, 2021

我無法使用ethers.js. 我知道這個特定主題有很多類似的問題,但似乎沒有一個答案對我有用。我的嘗試主要基於Noob Troubleshooting failed BSC transaction using ethers.js 和 Pancakeswap v2 router

我的程式碼如下:

const ethers = require('ethers');

const addresses = {
   WBNB: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
   BUSD: '0xe9e7cea3dedca5984780bafc599bd69add087d56',
   factory: '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73',
   router: '0x10ed43c718714eb63d5aa57b78b54704e256024e',
   recipient: '0xE00e552a0e18ca773a26f65cE957915D302CBE10'
}

const PRIVATE_KEY = ""

const mygasPrice = ethers.utils.parseUnits('5', 'gwei');

const WSS = "wss://*.bsc.quiknode.pro/*/"
const provider = new ethers.providers.WebSocketProvider(WSS);

const wallet = new ethers.Wallet(PRIVATE_KEY);
const account = wallet.connect(provider);

const router = new ethers.Contract(
   addresses.router,
   [
       'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)'
   ],
   account
);


const init = async () => {
   console.log("Test TX");

   let tokenIn = addresses.WBNB, tokenOut = addresses.BUSD;

   const amountIn = ethers.utils.parseUnits('0.0005', 'ether');
   const amountOutMin = 0;

   console.log("Starting swap...");

   const tx = await router.swapExactTokensForTokens(
       amountIn,
       amountOutMin,
       [tokenIn, tokenOut],
       addresses.recipient,
       Math.floor(Date.now() / 1000) + 60 * 20, // 20 minutes from the current Unix time
       {
           gasPrice: mygasPrice,
           gasLimit: 500000
       }
   );
   console.log("Swap done!");
   const receipt = await tx.wait();
   console.log("Transaction receipt");
   console.log(receipt);
}

init();

當我執行此程式碼時,它會卡住。

Test TX
Starting swap...

私鑰生成的錢包與收款地址相同(0xE00e552a0e18ca773a26f65cE957915D302CBE10),WBNB餘額充足。我只是嘗試在 pancakeswap V2 ( WBNBto BUSD) 上進行手動交換,它完美地工作 ( https://bscscan.com/tx/0xe3351e82ed4a86e18e164ba47b44bb7fa74faaeda67f8b7e3486f6410e5b50b9)。

我目前沒有想法,我不知道如何進一步調試。

謝謝你的幫助。

您需要呼叫swapExactETHForTokens將 WBNB 交換為令牌,而不是swapExactTokensForTokensswapExactTokensForTokens用於將非 BNB 代幣兌換成另一個非 BNB 代幣。(至少,這是我能想到的。)

看起來這是 BSC 節點(QuickNode)的問題。我剛剛開始使用這項服務,但到目前為止它看起來非常不可靠。也許我做錯了什麼,我很想知道是什麼。

更改為WSSwss://bsc-ws-node.nariox.org:443它可以工作。

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