Skip to content

Commit c58b21d

Browse files
fix: ATokenVaultFactory safe approval (#106)
* test: Non-standard ERC-20 USDT mock added * test: Use SafeERC20 for MockAToken * test: MockAavePool - Allow to mock multiple assets and use SafeERC20 * test: Adapt old tests to the new Pool mock * fix: use safeApprove for underlying approval in the factory * test: Refactor ATokenVaultFactory test to allow overriding the underlying * test: Factory test created to run all against USDT non-standard ERC-20
1 parent b128d4e commit c58b21d

14 files changed

+315
-115
lines changed

src/ATokenVaultFactory.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ contract ATokenVaultFactory {
133133
""
134134
));
135135

136-
IERC20(params.underlying).approve(vault, params.initialLockDeposit);
136+
IERC20(params.underlying).safeApprove(vault, params.initialLockDeposit);
137137

138138
ATokenVault(vault).initialize(
139139
params.owner,

test/ATokenVaultFactory.t.sol

Lines changed: 96 additions & 86 deletions
Large diffs are not rendered by default.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: MIT
2+
3+
pragma solidity ^0.8.10;
4+
5+
import {MockUSDT} from "./mocks/MockUSDT.sol";
6+
7+
contract ATokenVaultFactoryNonStandardERC20Test {
8+
9+
function _deployUnderlying() internal virtual returns (address) {
10+
return address(new MockUSDT());
11+
}
12+
}

test/ATokenVaultFork.t.sol

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,8 @@ contract ATokenVaultForkTest is ATokenVaultForkBaseTest {
506506

507507
function testDepositFailsWithExceedsMax() public {
508508
// mock call to Aave Pool
509-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
509+
MockAavePool mp = new MockAavePool();
510+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
510511
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
511512
vm.mockCall(
512513
address(vault.AAVE_POOL()),
@@ -564,7 +565,8 @@ contract ATokenVaultForkTest is ATokenVaultForkBaseTest {
564565

565566
function testDepositATokensWithExceedsMax() public {
566567
// mock call to Aave Pool
567-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
568+
MockAavePool mp = new MockAavePool();
569+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
568570
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
569571
vm.mockCall(
570572
address(vault.AAVE_POOL()),
@@ -619,7 +621,8 @@ contract ATokenVaultForkTest is ATokenVaultForkBaseTest {
619621

620622
function testMintFailsWithExceedsMax() public {
621623
// mock call to Aave Pool
622-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
624+
MockAavePool mp = new MockAavePool();
625+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
623626
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
624627
vm.mockCall(
625628
address(vault.AAVE_POOL()),
@@ -658,7 +661,8 @@ contract ATokenVaultForkTest is ATokenVaultForkBaseTest {
658661

659662
function testMintATokensWithExceedsMax() public {
660663
// mock call to Aave Pool
661-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
664+
MockAavePool mp = new MockAavePool();
665+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
662666
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
663667
vm.mockCall(
664668
address(vault.AAVE_POOL()),

test/ATokenVaultMocks.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ contract ATokenVaultMocksTest is ATokenVaultBaseTest {
2121
function setUp() public override {
2222
dai = new MockDAI();
2323
aDai = new MockAToken(address(dai));
24-
pool = new MockAavePool(aDai);
24+
pool = new MockAavePool();
25+
pool.mockReserve(address(dai), aDai);
2526
poolAddrProvider = new MockAavePoolAddressesProvider(address(pool));
2627

2728
pool.setReserveConfigMap(RESERVE_CONFIG_MAP_UNCAPPED_ACTIVE);

test/ATokenVaultProperties.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ contract ATokenVaultPropertiesTest is ERC4626Test, ATokenVaultBaseTest {
2222
function setUp() public override(ERC4626Test, ATokenVaultBaseTest) {
2323
dai = new MockDAI();
2424
aDai = new MockAToken(address(dai));
25-
pool = new MockAavePool(aDai);
25+
pool = new MockAavePool();
26+
pool.mockReserve(address(dai), aDai);
2627
poolAddrProvider = new MockAavePoolAddressesProvider(address(pool));
2728

2829
pool.setReserveConfigMap(RESERVE_CONFIG_MAP_UNCAPPED_ACTIVE);

test/ATokenVaultWithSig.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ contract ATokenVaultWithSigTest is ATokenVaultBaseTest {
2828
dai = new MockDAI();
2929

3030
aDai = new MockAToken(address(dai));
31-
pool = new MockAavePool(aDai);
31+
pool = new MockAavePool();
32+
pool.mockReserve(address(dai), aDai);
3233
poolAddrProvider = new MockAavePoolAddressesProvider(address(pool));
3334

3435
vaultAssetAddress = address(aDai);

test/ImmutableATokenVaultFork.t.sol

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,8 @@ contract ImmutableATokenVaultForkTest is ImmutableATokenVaultForkBaseTest {
509509

510510
function testDepositFailsWithExceedsMax() public {
511511
// mock call to Aave Pool
512-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
512+
MockAavePool mp = new MockAavePool();
513+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
513514
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
514515
vm.mockCall(
515516
address(vault.AAVE_POOL()),
@@ -567,7 +568,8 @@ contract ImmutableATokenVaultForkTest is ImmutableATokenVaultForkBaseTest {
567568

568569
function testDepositATokensWithExceedsMax() public {
569570
// mock call to Aave Pool
570-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
571+
MockAavePool mp = new MockAavePool();
572+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
571573
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
572574
vm.mockCall(
573575
address(vault.AAVE_POOL()),
@@ -622,7 +624,8 @@ contract ImmutableATokenVaultForkTest is ImmutableATokenVaultForkBaseTest {
622624

623625
function testMintFailsWithExceedsMax() public {
624626
// mock call to Aave Pool
625-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
627+
MockAavePool mp = new MockAavePool();
628+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
626629
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
627630
vm.mockCall(
628631
address(vault.AAVE_POOL()),
@@ -661,7 +664,8 @@ contract ImmutableATokenVaultForkTest is ImmutableATokenVaultForkBaseTest {
661664

662665
function testMintATokensWithExceedsMax() public {
663666
// mock call to Aave Pool
664-
MockAavePool mp = new MockAavePool(new MockAToken(address(dai)));
667+
MockAavePool mp = new MockAavePool();
668+
mp.mockReserve(address(dai), new MockAToken(address(dai)));
665669
mp.setReserveConfigMap(RESERVE_CONFIG_MAP_INACTIVE);
666670
vm.mockCall(
667671
address(vault.AAVE_POOL()),

test/ImmutableATokenVaultMocks.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ contract ImmutableATokenVaultMocksTest is ImmutableATokenVaultBaseTest {
1818
function setUp() public override {
1919
dai = new MockDAI();
2020
aDai = new MockAToken(address(dai));
21-
pool = new MockAavePool(aDai);
21+
pool = new MockAavePool();
22+
pool.mockReserve(address(dai), aDai);
2223
poolAddrProvider = new MockAavePoolAddressesProvider(address(pool));
2324

2425
pool.setReserveConfigMap(RESERVE_CONFIG_MAP_UNCAPPED_ACTIVE);

test/ImmutableATokenVaultProperties.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ contract ImmutableATokenVaultPropertiesTest is ERC4626Test, ImmutableATokenVault
2020
function setUp() public override(ERC4626Test, ImmutableATokenVaultBaseTest) {
2121
dai = new MockDAI();
2222
aDai = new MockAToken(address(dai));
23-
pool = new MockAavePool(aDai);
23+
pool = new MockAavePool();
24+
pool.mockReserve(address(dai), aDai);
2425
poolAddrProvider = new MockAavePoolAddressesProvider(address(pool));
2526

2627
pool.setReserveConfigMap(RESERVE_CONFIG_MAP_UNCAPPED_ACTIVE);

0 commit comments

Comments
 (0)