Skip to content

Commit 69acbc5

Browse files
authored
Merge pull request #591 from aave/feat/add-getReserveId
Added getReserveAddressById
2 parents 9ead0f2 + fec3a64 commit 69acbc5

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed

contracts/interfaces/IPool.sol

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,12 +602,19 @@ interface IPool {
602602
) external;
603603

604604
/**
605-
* @notice Returns the list of the initialized reserves
605+
* @notice Returns the list of the underlying assets of all the initialized reserves
606606
* @dev It does not include dropped reserves
607-
* @return The addresses of the reserves
607+
* @return The addresses of the underlying assets of the initialized reserves
608608
**/
609609
function getReservesList() external view returns (address[] memory);
610610

611+
/**
612+
* @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct
613+
* @param id The id of the reserve as stored in the DataTypes.ReserveData struct
614+
* @return The address of the reserve associated with id
615+
**/
616+
function getReserveAddressById(uint16 id) external view returns (address);
617+
611618
/**
612619
* @notice Returns the PoolAddressesProvider connected to this contract
613620
* @return The address of the PoolAddressesProvider

contracts/protocol/pool/Pool.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,11 @@ contract Pool is VersionedInitializable, PoolStorage, IPool {
553553
return reservesList;
554554
}
555555

556+
/// @inheritdoc IPool
557+
function getReserveAddressById(uint16 id) external view returns (address) {
558+
return _reservesList[id];
559+
}
560+
556561
/// @inheritdoc IPool
557562
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {
558563
return _maxStableRateBorrowSizePercent;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { expect } from 'chai';
2+
import { makeSuite, TestEnv } from './helpers/make-suite';
3+
import { evmSnapshot, evmRevert, ZERO_ADDRESS } from '@aave/deploy-v3';
4+
5+
makeSuite('Pool: getReservesList', (testEnv: TestEnv) => {
6+
let snap: string;
7+
8+
beforeEach(async () => {
9+
snap = await evmSnapshot();
10+
});
11+
12+
afterEach(async () => {
13+
await evmRevert(snap);
14+
});
15+
16+
it('User gets address of reserve by id', async () => {
17+
const { pool, usdc } = testEnv;
18+
19+
const reserveData = await pool.getReserveData(usdc.address);
20+
21+
const reserveAddress = await pool.getReserveAddressById(reserveData.id);
22+
23+
await expect(reserveAddress).to.be.eq(usdc.address);
24+
});
25+
26+
it('User calls `getReservesList` with a wrong id (id > reservesCount)', async () => {
27+
const { pool } = testEnv;
28+
29+
// MAX_NUMBER_RESERVES is always greater than reservesCount
30+
const maxNumberOfReserves = await pool.MAX_NUMBER_RESERVES();
31+
const reserveAddress = await pool.getReserveAddressById(maxNumberOfReserves +1);
32+
33+
await expect(reserveAddress).to.be.eq(ZERO_ADDRESS);
34+
});
35+
});

0 commit comments

Comments
 (0)