aave-utilities icon indicating copy to clipboard operation
aave-utilities copied to clipboard

UiPoolDataProvider.getReservesHumanized: numeric overflow

Open klntsky opened this issue 8 months ago • 0 comments

Bug Report

Package name / version

    "@aave/contract-helpers": "^1.32.1",
    "@aave/math-utils": "^1.32.1",

Description

getReservesData works, but getReservesHumanized fails with:

Error: overflow [ See: https://links.ethers.org/v5-errors-NUMERIC_FAULT-overflow ] (fault="overflow", operation="toNumber", value="20000000000000000000000000", code=NUMERIC_FAULT, version=bignumber/5.7.0)
    at Logger.Logger.makeError (/home/me/c/onchain-actions/node_modules/@ethersproject/logger/src.ts/index.ts:269:28)
    at Logger.Logger.throwError (/home/me/c/onchain-actions/node_modules/@ethersproject/logger/src.ts/index.ts:281:20)
    at throwFault (/home/me/c/onchain-actions/node_modules/@ethersproject/bignumber/src.ts/bignumber.ts:356:19)
    at BigNumber.BigNumber.toNumber (/home/me/c/onchain-actions/node_modules/@ethersproject/bignumber/src.ts/bignumber.ts:186:13)
    at <anonymous> (/home/me/c/onchain-actions/node_modules/@aave/contract-helpers/src/v3-UiPoolDataProvider-contract/index.ts:187:63)
    at Array.map (<anonymous>)
    at UiPoolDataProvider.getReservesHumanized (/home/me/c/onchain-actions/node_modules/@aave/contract-helpers/src/v3-UiPoolDataProvider-contract/index.ts:134:62)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async getPools (/home/me/c/onchain-actions/test/adapters/aave/index.ts:32:28)
    at async <anonymous> (/home/me/c/onchain-actions/test/adapters/aave/index.ts:45:13) {
  reason: 'overflow',
  code: 'NUMERIC_FAULT',
  fault: 'overflow',
  operation: 'toNumber',
  value: '20000000000000000000000000'
}

Steps to reproduce

Here's the complete reproducible example:

import { ethers } from 'ethers';
import {
  UiPoolDataProvider,
  ReserveDataHumanized,
} from '@aave/contract-helpers';

// sepolia setup
// https://search.onaave.com/?q=sepoloa
const sepolia_rpc = 'https://sepolia.drpc.org'
const sepolia_chain_id = 11155111;
const poolAddressesProvider = '0x012bAC54348C0E635dCAc9D5FB99f06F24136C9A'
const uiPoolDataProvider = '0x69529987FA4A075D0C00B0128fa848dc9ebbE9CE'

function getProvider() {
  return new ethers.providers.JsonRpcProvider(sepolia_rpc);
}

function getPoolDataProvider() {
  const provider = getProvider();
  return new UiPoolDataProvider({
    uiPoolDataProviderAddress: uiPoolDataProvider,
    provider,
    chainId: sepolia_chain_id,
  });
}


async function getPools(assets?: string[]): Promise<ReserveDataHumanized[]> {
  const poolDataProvider = getPoolDataProvider();
  const reservesResponse = await poolDataProvider.getReservesHumanized({
    lendingPoolAddressProvider: poolAddressesProvider,
  });
  let reserves = reservesResponse.reservesData;
  if (assets && assets.length > 0) {
    const normalizedAssets = assets.map(a => ethers.utils.getAddress(a));
    reserves = reserves.filter((r: any) =>
      normalizedAssets.includes(r.underlyingAsset)
    );
  }
  return reserves;
}

console.log(await getPools());

Specifically, it fails here:

          unbacked: reserveRaw.unbacked.toString(),
          isolationModeTotalDebt: reserveRaw.isolationModeTotalDebt.toString(),
 >       debtCeilingDecimals: reserveRaw.debtCeilingDecimals.toNumber(),
          isSiloedBorrowing: reserveRaw.isSiloedBorrowing,
          flashLoanEnabled: reserveRaw.flashLoanEnabled,

Expected behavior

There is no overflow. I checked very carefully if it is the same problem as #431, but it seems that it is not

Environment

  • OS: Linux
  • Node/npm version: node 22.13.1

klntsky avatar Feb 17 '25 16:02 klntsky