Получение `Ошибка: недопустимое значение номера » при попытке выполнить обмен с помощью swapExactTokensForTokens

#web3js #ethers.js

#web3js #ethers.js

Вопрос:

Я пытаюсь построить Node.js приложение, которое будет обмениваться токенами через контракт маршрутизатора Uniswap-подобного dex (он называется Ubeswap, вилка Uniswapv2 на Celo).

Я перепробовал несколько подходов, и до сих пор у меня ничего не получалось.

Вот код функции, которую я построил:

 const {  ChainId,  Fetcher,   CELO,  Route,  TradeType,  Trade,  TokenAmount,  Token,  Percent } = require ('@ubeswap/sdk') const ethers = require('ethers') const fs = require('fs') const Web3 = require('web3')    // chaing config const chainId = ChainId.ALFAJORES.toString() const fornoUrl = 'https://alfajores-forno.celo-testnet.org' const customHttpProvider = new ethers.providers.JsonRpcProvider(fornoUrl) const web3 = new Web3(fornoUrl);  //wallet config const targetAccount = JSON.parse(fs.readFileSync('path to the file with private key', 'utf-8')) const privateKey = Buffer.from(targetAccount.privateKey, 'hex') const signer = new ethers.Wallet(privateKey) const account = signer.connect(customHttpProvider)   customHttpProvider.getBlockNumber().then((result) =gt; {  console.log("Current block number: "   result);  });  // token for tokens we are interested in const celoAddressAlfa = '0xF194afDf50B03e69Bd7D057c1Aa9e10c9954E4C9' const cusdAddressAlfa = '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1'   const UniswapV2RouterAddress = '0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121' const UniswapV2RouterABI = [abi removed to save space] const UniswapV2RouterContract = new ethers.Contract(UniswapV2RouterAddress, UniswapV2RouterABI, account)    const init = async () =gt; {  //get data about tokens and pairs  const token1 = await Fetcher.fetchTokenData(chainId, cusdAddressAlfa, customHttpProvider)  const token2 = await Fetcher.fetchTokenData(chainId, celoAddressAlfa, customHttpProvider)  const pair = await Fetcher.fetchPairData(token1, token2, customHttpProvider)  const route = new Route([pair], token1)   const amountInWei = '100000000000000000' // 1  const amountInHex = web3.utils.toHex('amountInWei')  const path = [token1.address, token2.address]  const amountOut = await UniswapV2RouterContract.getAmountsOut(amountInWei, path)   const amountOutMinHex = amountOut[1]._hex   const to = UniswapV2RouterAddress  const deadline = Date.now()   1000 * 60 * 10   const tx = await UniswapV2RouterContract.swapExactTokensForTokens(  amountInHex,  amountOutMinHex,  path,  to,  deadline   )   const receipt = await tx.await()   console.log(`Transaction hash: ${tx.hash}`)  console.log(`Transaction was mined in block ${receipt.blockNumber}`) }  init()  

Когда я пытаюсь запустить его, он выдает ошибку:

UnhandledPromiseRejectionWarning: Error: invalid BigNumber value (argument="value", value=undefined, code=INVALID_ARGUMENT, version=bignumber/5.5.0)

при попытке выполнить

UniswapV2RouterContract.swapExactTokensForTokens

Я не могу понять, почему. Насколько я понимаю, мне нужно указать значения в шестнадцатеричном формате, поэтому я их преобразовал. Я также попытался указать значения для amountIn и «amountOut` в wei и в десятичных дробях и попытался обернуть их строкой(). Ничто не помогает. Я всегда получаю одну и ту же ошибку. Что я упускаю?

Комментарии:

1. Моим первым предположением было бы переполнение типа одной из ваших переменных.