Description
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
Metadata
Metadata
Assignees
Labels
No labels