Copy diff --git a/src/test/strategies/AaveV3ARBWETHStrategy.t.sol b/src/test/strategies/AaveV3ARBWETHStrategy.t.sol
index 2dcb3cc..e934ed9 100644
--- a/src/test/strategies/AaveV3ARBWETHStrategy.t.sol
+++ b/src/test/strategies/AaveV3ARBWETHStrategy.t.sol
@@ -10,6 +10,37 @@ contract MockAaveV3ARBWETHStrategy is AaveV3ARBWETHStrategy {
{}
}
+interface IAaveIncentive {
+ function getUserRewards(address[] calldata assets, address user, address reward) external view returns (uint256);
+ function setEmissionPerSecond(address asset, address[] calldata rewards, uint88[] calldata newEmissionsPerSecond) external;
+ function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;
+}
+
+interface IAavePool {
+ function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
+ function withdraw(address asset, uint256 amount, address to) external returns (uint256);
+}
+
+interface IERC20 {
+ function totalSupply() external returns(uint256);
+ function balanceOf(address user) external returns(uint256);
+}
+
+interface ITransferStrategyBase {}
+interface IEACAggregatorProxy {}
+
+library RewardsDataTypes {
+ struct RewardsConfigInput {
+ uint88 emissionPerSecond;
+ uint256 totalSupply;
+ uint32 distributionEnd;
+ address asset;
+ address reward;
+ ITransferStrategyBase transferStrategy;
+ IEACAggregatorProxy rewardOracle;
+ }
+}
+
contract AaveV3ARBWETHStrategyTest is BaseStrategyTest {
address public constant AAVE_V3_ARB_WETH_ATOKEN = 0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8;
address public constant AAVE_V3_ARB_WETH_POOL = 0x794a61358D6845594F94dc1DB02A252b5b4814aD;
@@ -61,4 +92,62 @@ contract AaveV3ARBWETHStrategyTest is BaseStrategyTest {
IMYTStrategy(strategy).deallocate(prevAllocationAmount2, amountToDeallocate, "", address(vault));
vm.stopPrank();
}
+
+ function test_cantClaimAaveIncentiveWETH() public {
+ // deposit into aave
+ uint256 amountToAllocate = 10_00e18;
+ vm.startPrank(vault);
+ deal(WETH, strategy, amountToAllocate);
+ bytes memory prevAllocationAmount = abi.encode(0);
+ IMYTStrategy(strategy).allocate(prevAllocationAmount, amountToAllocate, "", address(vault));
+ uint256 initialRealAssets = IMYTStrategy(strategy).realAssets();
+ require(initialRealAssets > 0, "Initial real assets is 0");
+ vm.stopPrank();
+
+ // setup for aave incentive
+ address emissionManager = 0x048f2228D7Bf6776f99aB50cB1b1eaB4D1d4cA73;
+ address aaveIncentive = 0x929EC64c34a17401F460460D4B9390518E5B473e;
+ address arbToken = 0x912CE59144191C1204E64559FE8253a0e49E6548;
+ address[] memory assets = new address[](1);
+ assets[0] = AAVE_V3_ARB_WETH_ATOKEN;
+ address[] memory rewards = new address[](1);
+ rewards[0] = arbToken;
+ uint88[] memory emissionPerSecond= new uint88[](1);
+ emissionPerSecond[0] = 1e16;
+
+ // enable ARB as a reward for aWETH depositors.
+ RewardsDataTypes.RewardsConfigInput[] memory rewardsInput =
+ new RewardsDataTypes.RewardsConfigInput[](1);
+
+ rewardsInput[0] = RewardsDataTypes.RewardsConfigInput({
+ emissionPerSecond: 1e16, // 0.01 ARB per second
+ totalSupply: IERC20(AAVE_V3_ARB_WETH_ATOKEN).totalSupply(),
+ distributionEnd: uint32(block.timestamp + 365 days),
+ asset: AAVE_V3_ARB_WETH_ATOKEN,
+ reward: arbToken,
+ transferStrategy: ITransferStrategyBase(address(0x991bf7661F1F2695ac8AEFc4F9a19718d6424dc0)),
+ rewardOracle: IEACAggregatorProxy(address(0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6))
+ });
+
+ vm.startPrank(emissionManager);
+ deal(arbToken, aaveIncentive, 1_000_000 * 1e18);
+ IAaveIncentive(aaveIncentive).configureAssets(rewardsInput);
+ vm.stopPrank();
+
+ // warp to one year
+ vm.warp(block.timestamp + 365 days);
+
+ // check incentive reward amount
+ uint256 rewardAmount = IAaveIncentive(aaveIncentive).getUserRewards(assets, address(strategy), arbToken);
+ console.log(rewardAmount);
+ assertGt(rewardAmount, 0);
+
+ // try to claim
+ IMYTStrategy(strategy).claimRewards();
+
+ // check if ARB incentive get sent to strategy
+ uint256 arbBalance = IERC20(arbToken).balanceOf(address(strategy));
+ assertEq(arbBalance, rewardAmount);
+ }
+
}