TRANSFER_FORM_FAILED - Как одобрить роутер

Итак, я пытался запустить код из EatTheBlocks. Спустя (к сожалению) несколько часов мне удалось заставить его работать. Я получаю список новых пар, я решил проблему с газом, и транзакция прошла. Но каждый раз я получаю следующую ошибку:



Когда я открываю transactionHash, я вижу статус:



Я поискал его, и, видимо, это потому, что мне сначала нужно использовать функцию утверждения. Но в коде есть функция init, которая вызывает уже реализованную команду «одобрить». Я попытался заменить его тем, что нашел в Интернете от людей с похожими проблемами, но, похоже, не могу решить эту проблему. Как я могу запустить функцию init, чтобы она действительно одобряла?
Код:

      const ethers = require('ethers');

const addresses = {
  WBNB: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
  factory: '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73', //PancakeSwap Factory
  router: '0x10ed43c718714eb63d5aa57b78b54704e256024e', //PancakeSwapRouterV2
  recipient: '0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'   //my wallet address
}

const mnemonic = 'my seed phrase left out for obvious reasons';

const provider = new ethers.providers.WebSocketProvider('My ankr node api'); 
const wallet = ethers.Wallet.fromMnemonic(mnemonic);
const account = wallet.connect(provider);
const factory = new ethers.Contract(
  addresses.factory,
  ['event PairCreated(address indexed token0, address indexed token1, address pair, uint)'],
  account
);
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)'
  ],
  account
);

const wbnb = new ethers.Contract(
  addresses.WBNB,
  [
    'function approve(address spender, uint amount) public view returns(bool)',
  ],
  account
);

const init = async () => {
  const tx = await wbnb.approve(
    router.address, 
    '1000000000000000000000000'
  );
  const receipt = await tx.wait(); 
  console.log('Transaction receipt');
  console.log(receipt);
}

factory.on('PairCreated', async (token0, token1, pairAddress) => {

  console.log(`
    New pair detected
    =================
    token0: ${token0}
    token1: ${token1}
    pairAddress: ${pairAddress}
  `);

   //The quote currency needs to be WBNB (we will pay with WBNB)
  let tokenIn, tokenOut;
  if(token0 === addresses.WBNB) {
    tokenIn = token0; 
    tokenOut = token1;
  }

  if(token1 == addresses.WBNB) {
    tokenIn = token1; 
    tokenOut = token0;
  }

  if(typeof tokenIn === 'undefined') {
    return;
  }

  //'ether' === 'bnb' on BSC
  var options = { gasPrice: 5000000000, gasLimit: 85000};
  const amountIn = ethers.utils.parseUnits('0.00001', 'ether');
  const amounts = await router.getAmountsOut(amountIn, [tokenIn, tokenOut]);
  //Our execution price will be a bit different, we need some flexbility
  const amountOutMin = amounts[1].sub(amounts[1].div(10));
  console.log(`
    Buying new token
    =================
    tokenIn: ${amountIn.toString()} ${tokenIn} (WBNB)
    tokenOut: ${amountOutMin.toString()} ${tokenOut}
  `);
  const tx = await router.swapExactTokensForTokens(
    amountIn,
    amountOutMin,
    [addresses.WBNB, tokenOut],
    addresses.recipient,
    Date.now() + 1000 * 60 * 10, //10 minutes
    options
  );
  const receipt = await tx.wait(); 
  console.log('Transaction receipt');
  console.log(receipt);
});

init();


После запуска кода я получаю следующие журналы:

      UnhandledPromiseRejectionWarning: TypeError: tx.wait is not a function
    at init (C:\Users\~\348-pancakeswap-trading-bot\bot.js:43:28)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:4060) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:4060) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

    New pair detected
    =================
    token0: 0x3dEf482d202Bbe892c2124d47C5904AC52c76E87     
    token1: 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c     
    pairAddress: 0x75Cc3973a2A6987fDC6B19AA7156889012E62885


    Buying new token
    =================
    tokenIn: 10000000000000 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c (WBNB)
    tokenOut: 444385806725157791655102824 0x3dEf482d202Bbe892c2124d47C5904AC52c76E87


    New pair detected
    =================
    token0: 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
    token1: 0xDC7e29bdd44f49D4F51aC29f7D464Be05ffcCf52
    pairAddress: 0xfb2A4283f47c5331aB6260BDAad3108D1841F44d```

0 ответов

Другие вопросы по тегам