Ethereum contract call methods (.getPair and .getReserves) not returning any values

I have a problem when running the following 4 lines of code from the main JS script (see below):

  • await uniswapFactory.getPair(daiAddress, wethAddress)
  • await sushiFactory.getPair(daiAddress, wethAddress),
  • const uniswapReserves = await uniswapDaiEth.getReserves();
  • const sushiReserves = await sushiEthDai.getReserves();

For the first two, if I substituted them with hardcoded token pair addresses from Etherscan into the code it works. If I run the first two directly into Truffle console it resolves the pair addresses but strangely enough it doesn´t resolve when I execute the JS script!

For the above two .getReserves() function calls it doesn´t retrieve any of the reserve values unless if I ran them as they are under Truffle console environment then it retrieves them OK.

I appreciate your assistance here as it´s been bugging me for the full last two days and am running out of options to resolve this.

Full JS script

require('dotenv').config();
const { INFURA_API_KEY, PRIVATE_KEY } = process.env;
const { ethers } = require('ethers');

const UniswapV2Pair = require(".././build/contracts/IUniswapV2Pair.json");
const UniswapV2Factory = require('.././build/contracts/IUniswapV2Factory.json');

const daiAddress = "0x6B175474E89094C44Da98b954EedeAC495271d0F";
const wethAddress = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";

const privateKey = process.env.PRIVATE_KEY;
const infuraProvider = new ethers.providers.InfuraProvider('mainnet', process.env.INFURA_API_KEY);
const wallet = new ethers.Wallet(privateKey, infuraProvider);

const testBasic = async () => {
  const uniswapFactory = new ethers.Contract(
    "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
    UniswapV2Factory.abi, 
    wallet
  );

  const sushiFactory = new ethers.Contract(
    "0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac",
    UniswapV2Factory.abi, 
    wallet
  );

  let uniswapDaiEth;
  let sushiEthDai;

  const loadPairs = async () => {
    uniswapDaiEth = new ethers.Contract(
      await uniswapFactory.getPair(daiAddress, wethAddress),
      UniswapV2Pair.abi, 
      wallet
    );
    sushiEthDai = new ethers.Contract(
      await sushiFactory.getPair(daiAddress, wethAddress),
      UniswapV2Pair.abi, 
      wallet
    );
  };
  await loadPairs();

  infuraProvider.on('block', async (blockNumber) => {
    try {
      const uniswapReserves = await uniswapDaiEth.getReserves();
      const sushiReserves = await sushiEthDai.getReserves();
    } catch (err) {
      console.error(err);
    }
  });
};

testBasic();

Thank you very much for your help!

Best, Samuel

how do you know it doesnt retrieve the values?

you’re defining uniswapReserves inside a block, so it will cease to exist when you exit the block…

I have tried this.
See below code block once more

  console.log("uniswapFactory.address: ", uniswapFactory.address);
  console.log("sushiFactory.address: ", sushiFactory.address);
  console.log("uniswapDaiEth: ", uniswapDaiEth.address);
  console.log("sushiEthDai: ", sushiEthDai.address);
  
  let uniswapReserves;
  let sushiReserves;

  console.log("step 1...");
  uniswapReserves = await uniswapDaiEth.callStatic.getReserves();
  console.log("step 2...");
  const reserve0Uni = Number(ethers.utils.formatUnits(uniswapReserves[0], 18));
  const reserve1Uni = Number(ethers.utils.formatUnits(uniswapReserves[1], 18));
  console.log("step 3...");
  sushiReserves = await sushiEthDai.callStatic.getReserves();
  console.log("step 4...");
  const reserve0Sushi = Number(ethers.utils.formatUnits(sushiReserves[0], 18));
  const reserve1Sushi = Number(ethers.utils.formatUnits(sushiReserves[1], 18));
  console.log("step 5...");
  console.log("reserve0Uni: ", reserve0Uni);
  console.log("reserve1Uni: ", reserve1Uni);

Output of Truffle console prompt

uniswapFactory.address: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
sushiFactory.address: 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac
uniswapDaiEth: 0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11
sushiEthDai: 0xC3D03e4F041Fd4cD388c549Ee2A29a9E5075882f
step 1…
TypeError: fn is not a function

  • at exec (C:\Users\samuel.sadek\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\require\dist\index.js:122:1) *
  • at node:internal/util:361:7*
  • at new Promise ()*
  • at exec (node:internal/util:347:12)*
  • at Object.module.exports [as run] (C:\Users\samuel.sadek\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\commands\exec\run.js:43:1)*
  • at processTicksAndRejections (node:internal/process/task_queues:96:5)*
  • at runCommand (C:\Users\samuel.sadek\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\command-utils.js:201:1)*
    truffle(mainnet_fork)>

As you can see from above it never reaches above console.log("step 2..."); code line which means it has trouble making the above uniswapReserves = await uniswapDaiEth.callStatic.getReserves(); call.

I now have an additional error to do with TypeError: fn is not a function.

Any help would be greatly appreciated!!!

BR

Do you have a documentation source for this function? It feels like it’s expecting to get handed a function but isnt?

The source JS script that I have tried to run

require('dotenv').config();
const { INFURA_API_KEY, PRIVATE_KEY } = process.env;
const { ethers, providers } = require('ethers');

// uni/sushiswap ABIs
const UniswapV2Pair = require("./build/contracts/IUniswapV2Pair.json");
const UniswapV2Factory = require('./build/contracts/IUniswapV2Factory.json');

const daiAddress = "0x6B175474E89094C44Da98b954EedeAC495271d0F";
const wethAddress = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";

// use your own Infura node in production
providers.getDefaultProvider('mainnet'));
const infuraProvider = new ethers.providers.InfuraProvider('mainnet', process.env.INFURA_API_KEY);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, infuraProvider);

const BORROW_AMOUNT = 1000000 * 2; // 2M DAI

const testBasic = async () => {
  console.log("starting...");

  const INTERVAL = 5000;      // ms
 
  const uniswapFactory = new ethers.Contract(
    "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
    UniswapV2Factory.abi, 
    wallet
  );

  const sushiFactory = new ethers.Contract(
    "0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac",
    UniswapV2Factory.abi, 
    wallet
  );

  let uniswapDaiEth;
  let sushiEthDai;

  const loadPairs = async () => {
    uniswapDaiEth = new ethers.Contract(
      await uniswapFactory.callStatic.getPair(daiAddress, wethAddress),
      //"0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11",
      UniswapV2Pair.abi, 
      wallet
    );
    console.log("step 1 done...........");
    sushiEthDai = new ethers.Contract(
      await sushiFactory.callStatic.getPair(daiAddress, wethAddress),
      //"0xC3D03e4F041Fd4cD388c549Ee2A29a9E5075882f",
      UniswapV2Pair.abi, 
      wallet
    );
    console.log("step 2 done...........");
  };
  await loadPairs();

  console.log("uniswapFactory.address: ", uniswapFactory.address);
  console.log("sushiFactory.address: ", sushiFactory.address);
  console.log("uniswapDaiEth: ", uniswapDaiEth.address);
  console.log("sushiEthDai: ", sushiEthDai.address);
  
  let uniswapReserves;
  let sushiReserves;

  console.log("step 1...");
  uniswapReserves = await uniswapDaiEth.callStatic.getReserves();
  console.log("step 2...");
  const reserve0Uni = Number(ethers.utils.formatUnits(uniswapReserves[0], 18));
  const reserve1Uni = Number(ethers.utils.formatUnits(uniswapReserves[1], 18));
  console.log("step 3...");
  sushiReserves = await sushiEthDai.callStatic.getReserves();
  console.log("step 4...");
  const reserve0Sushi = Number(ethers.utils.formatUnits(sushiReserves[0], 18));
  const reserve1Sushi = Number(ethers.utils.formatUnits(sushiReserves[1], 18));
  console.log("step 5...");
  console.log("reserve0Uni: ", reserve0Uni);
  console.log("reserve1Uni: ", reserve1Uni);

  if (BORROW_AMOUNT <= 0) {
    console.log('UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
    return;
  }
  if (reserve0Uni <= 0 && reserve0Uni <= 0) {
    console.log('UniswapV2Library: INSUFFICIENT_LIQUIDITY');
    return;
  }

  const numerator = reserve0Uni * BORROW_AMOUNT * 1000;
  const denominator = reserve1Uni - BORROW_AMOUNT * 997;
  const amountRequired = (numerator / denominator) + 1;

  const amounts = [];

  amounts[0] = BORROW_AMOUNT;

  if (BORROW_AMOUNT <= 0) {
    console.log('UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
    return;
  }

  if (reserve0Sushi <= 0 && reserve1Sushi <= 0) {
    console.log('UniswapV2Library: INSUFFICIENT_LIQUIDITY');
    return;
  }
  const amountInWithFee = BORROW_AMOUNT * 997;
  const numerator2 = amountInWithFee * reserve1Sushi;
  const denominator2 = reserve0Sushi * 1000 + amountInWithFee;
  amounts[1] = numerator2 / denominator2;

  if (amounts[amounts.length - 1] < amountRequired) {
    console.log("amounts[1]: ", amounts[1], " < amountRequired: ", amountRequired);
    console.log("amounts[1] / amountRequired: ", amounts[1] / amountRequired);
    console.log('UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
    return;
  }
amountRequired, path, msg.sender, block.timestamp + 120)[1];
};

testBasic();
console.log('testBasic finished!');

Yeah, but do you have documentation about the functions - how they’re set up, what they expect, etc. From the people who made whatever module it is you’re using?

Infura Blog | Tutorials, Case Studies, News, Feature Announcements

It refers to back-end solidity smart contract which I built using this documentation whereas the above front-end javascript attempts to mimic its very same execution with some output debugging incorporated due to an error UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT it spits out. This is because as you may know, Solidity does not have any console.log capability as javascript. That´s the main reason. In any case, still would like to get to the bottom of failing to return back with a token pair address based on await uniswapFactory.callStatic.getPair(daiAddress, wethAddress)

Here´s the link to the original JS script source for the above javascript code I attempted to replicate and test.

Node.js (forked) - StackBlitz

And lastly, I provide you a screendump of both contract instances of uniswapFactory and sushiFactory where I attempted to make calls to await uniswapFactory.callStatic.getPair(daiAddress, wethAddress) and await sushiFactory.callStatic.getPair(daiAddress, wethAddress) for uniswapDaiEth and sushiEthDai, respectively.

uniswapFactory: Contract {

  • interface: Interface {*
  • fragments: [*
  •  [EventFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment]*
    
  • ],*
  • _abiCoder: AbiCoder { coerceFunc: null },*
  • functions: {*
  •  'getPair(address,address)': [FunctionFragment],*
    
  •  'allPairs(uint256)': [FunctionFragment],*
    
  •  'allPairsLength()': [FunctionFragment],*
    
  •  'feeTo()': [FunctionFragment],*
    
  •  'feeToSetter()': [FunctionFragment],*
    
  •  'createPair(address,address)': [FunctionFragment]*
    
  • },*
  • errors: {},*
  • events: { ‘PairCreated(address,address,address,uint256)’: [EventFragment] },*
  • structs: {},*
  • deploy: ConstructorFragment {*
  •  name: null,*
    
  •  type: 'constructor',*
    
  •  inputs: [],*
    
  •  payable: false,*
    
  •  stateMutability: 'nonpayable',*
    
  •  gas: null,*
    
  •  _isFragment: true*
    
  • },*
  • _isInterface: true*
  • },*
  • provider: InfuraProvider {*
  • _isProvider: true,*
  • _events: ,*
  • _emitted: { block: -2 },*
  • disableCcipRead: false,*
  • formatter: Formatter { formats: [Object] },*
  • anyNetwork: false,*
  • _network: {*
  •  name: 'homestead',*
    
  •  chainId: 1,*
    
  •  ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',*
    
  •  _defaultProvider: [Function]*
    
  • },*
  • _maxInternalBlockNumber: -1024,*
  • _lastBlockNumber: -2,*
  • _maxFilterBlockRange: 10,*
  • _pollingInterval: 4000,*
  • _fastQueryDate: 0,*
  • connection: {*
  •  allowGzip: true,*
    
  •  url: 'https://mainnet.infura.io/v3/6021b8788d0648c285535dc157a95e6f',*
    
  •  throttleCallback: [Function: throttleCallback]*
    
  • },*
  • _nextId: 42,*
  • apiKey: ‘6021b8788d0648c285535dc157a95e6f’,*
  • projectId: ‘6021b8788d0648c285535dc157a95e6f’,*
  • projectSecret: null*
  • },*
  • signer: Wallet {*
  • _isSigner: true,*
  • _signingKey: [Function (anonymous)],*
  • _mnemonic: [Function (anonymous)],*
  • address: ‘0x825c5e7d385F9f07e2312154B0Cf3CDd06396869’,*
  • provider: InfuraProvider {*
  •  _isProvider: true,*
    
  •  _events: [],*
    
  •  _emitted: [Object],*
    
  •  disableCcipRead: false,*
    
  •  formatter: [Formatter],*
    
  •  anyNetwork: false,*
    
  •  _network: [Object],*
    
  •  _maxInternalBlockNumber: -1024,*
    
  •  _lastBlockNumber: -2,*
    
  •  _maxFilterBlockRange: 10,*
    
  •  _pollingInterval: 4000,*
    
  •  _fastQueryDate: 0,*
    
  •  connection: [Object],*
    
  •  _nextId: 42,*
    
  •  apiKey: '6021b8788d0648c285535dc157a95e6f',*
    
  •  projectId: '6021b8788d0648c285535dc157a95e6f',*
    
  •  projectSecret: null*
    
  • }*
  • },*
  • callStatic: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • estimateGas: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • functions: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • populateTransaction: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • filters: {*
  • ‘PairCreated(address,address,address,uint256)’: [Function (anonymous)],*
  • PairCreated: [Function (anonymous)]*
  • },*
  • _runningEvents: {},*
  • _wrappedEmits: {},*
  • address: ‘0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f’,*
  • resolvedAddress: Promise { },*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
    }
    sushiFactory: Contract {
  • interface: Interface {*
  • fragments: [*
  •  [EventFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment],*
    
  •  [FunctionFragment]*
    
  • ],*
  • _abiCoder: AbiCoder { coerceFunc: null },*
  • functions: {*
  •  'getPair(address,address)': [FunctionFragment],*
    
  •  'allPairs(uint256)': [FunctionFragment],*
    
  •  'allPairsLength()': [FunctionFragment],*
    
  •  'feeTo()': [FunctionFragment],*
    
  •  'feeToSetter()': [FunctionFragment],*
    
  •  'createPair(address,address)': [FunctionFragment]*
    
  • },*
  • errors: {},*
  • events: { ‘PairCreated(address,address,address,uint256)’: [EventFragment] },*
  • structs: {},*
  • deploy: ConstructorFragment {*
  •  name: null,*
    
  •  type: 'constructor',*
    
  •  inputs: [],*
    
  •  payable: false,*
    
  •  stateMutability: 'nonpayable',*
    
  •  gas: null,*
    
  •  _isFragment: true*
    
  • },*
  • _isInterface: true*
  • },*
  • provider: InfuraProvider {*
  • _isProvider: true,*
  • _events: ,*
  • _emitted: { block: -2 },*
  • disableCcipRead: false,*
  • formatter: Formatter { formats: [Object] },*
  • anyNetwork: false,*
  • _network: {*
  •  name: 'homestead',*
    
  •  chainId: 1,*
    
  •  ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',*
    
  •  _defaultProvider: [Function]*
    
  • },*
  • _maxInternalBlockNumber: -1024,*
  • _lastBlockNumber: -2,*
  • _maxFilterBlockRange: 10,*
  • _pollingInterval: 4000,*
  • _fastQueryDate: 0,*
  • connection: {*
  •  allowGzip: true,*
    
  •  url: 'https://mainnet.infura.io/v3/6021b8788d0648c285535dc157a95e6f',*
    
  •  throttleCallback: [Function: throttleCallback]*
    
  • },*
  • _nextId: 42,*
  • apiKey: ‘6021b8788d0648c285535dc157a95e6f’,*
  • projectId: ‘6021b8788d0648c285535dc157a95e6f’,*
  • projectSecret: null*
  • },*
  • signer: Wallet {*
  • _isSigner: true,*
  • _signingKey: [Function (anonymous)],*
  • _mnemonic: [Function (anonymous)],*
  • address: ‘0x825c5e7d385F9f07e2312154B0Cf3CDd06396869’,*
  • provider: InfuraProvider {*
  •  _isProvider: true,*
    
  •  _events: [],*
    
  •  _emitted: [Object],*
    
  •  disableCcipRead: false,*
    
  •  formatter: [Formatter],*
    
  •  anyNetwork: false,*
    
  •  _network: [Object],*
    
  •  _maxInternalBlockNumber: -1024,*
    
  •  _lastBlockNumber: -2,*
    
  •  _maxFilterBlockRange: 10,*
    
  •  _pollingInterval: 4000,*
    
  •  _fastQueryDate: 0,*
    
  •  connection: [Object],*
    
  •  _nextId: 42,*
    
  •  apiKey: '6021b8788d0648c285535dc157a95e6f',*
    
  •  projectId: '6021b8788d0648c285535dc157a95e6f',*
    
  •  projectSecret: null*
    
  • }*
  • },*
  • callStatic: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • estimateGas: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • functions: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • populateTransaction: {*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
  • },*
  • filters: {*
  • ‘PairCreated(address,address,address,uint256)’: [Function (anonymous)],*
  • PairCreated: [Function (anonymous)]*
  • },*
  • _runningEvents: {},*
  • _wrappedEmits: {},*
  • address: ‘0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac’,*
  • resolvedAddress: Promise { },*
  • ‘getPair(address,address)’: [Function (anonymous)],*
  • ‘allPairs(uint256)’: [Function (anonymous)],*
  • ‘allPairsLength()’: [Function (anonymous)],*
  • ‘feeTo()’: [Function (anonymous)],*
  • ‘feeToSetter()’: [Function (anonymous)],*
  • ‘createPair(address,address)’: [Function (anonymous)],*
  • getPair: [Function (anonymous)],*
  • allPairs: [Function (anonymous)],*
  • allPairsLength: [Function (anonymous)],*
  • feeTo: [Function (anonymous)],*
  • feeToSetter: [Function (anonymous)],*
  • createPair: [Function (anonymous)]*
    }

Hi, did you manage to look into the docs shared with you? Any ideas, please?

Could it be something to do with the await keyword? I´m seeing below post
javascript - await does not wait for Promise to finish - Salesforce Stack Exchange. Could this be the root cause of the problem do you think?