Skip to content

Commit e1661a7

Browse files
authored
Merge branch 'bgd-labs:main' into main
2 parents 337f5fe + 226f38d commit e1661a7

File tree

23 files changed

+1952
-0
lines changed

23 files changed

+1952
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';
7+
8+
/**
9+
* @title Steward Deployment: MainnetSwapSteward and RewardsSteward
10+
* @author @TokenLogic
11+
* - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xdc005c2385a548143bbeb35b8bb92e5f0ed29829a445f5e986a2b010bc349c6a
12+
* - Discussion: https://governance.aave.com/t/arfc-steward-deployment-mainnetswapsteward-and-rewardssteward/23070
13+
*/
14+
contract AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 is
15+
IProposalGenericExecutor
16+
{
17+
// https://arbiscan.io/address/0x659966ace41944f6e321ca7fe76de4775779d11c
18+
address public constant REWARDS_STEWARD = 0x659966aCE41944f6E321cA7FE76de4775779d11C;
19+
20+
function execute() external {
21+
EmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).setClaimer(
22+
address(AaveV3Arbitrum.COLLECTOR),
23+
REWARDS_STEWARD
24+
);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol';
7+
import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol';
8+
9+
import {AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821} from './AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.sol';
10+
11+
interface IRewardsSteward {
12+
function claimAllRewards(address[] calldata assets) external;
13+
}
14+
15+
/**
16+
* @dev Test for AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821
17+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250821_Multi_StewardDeploymentMainnetSwapStewardAndRewardsSteward/AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.t.sol -vv
18+
*/
19+
contract AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821_Test is
20+
ProtocolV3TestBase
21+
{
22+
AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 internal proposal;
23+
address[] assets = new address[](1);
24+
25+
function setUp() public {
26+
vm.createSelectFork(vm.rpcUrl('arbitrum'), 378091190);
27+
proposal = new AaveV3Arbitrum_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821();
28+
assets[0] = AaveV3ArbitrumAssets.WETH_A_TOKEN;
29+
}
30+
31+
function test_claimerIsSetCorrectly() public {
32+
assertEq(
33+
IRewardsController(AaveV3Arbitrum.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
34+
address(AaveV3Arbitrum.COLLECTOR)
35+
),
36+
address(0)
37+
);
38+
39+
executePayload(vm, address(proposal));
40+
41+
assertEq(
42+
IRewardsController(AaveV3Arbitrum.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
43+
address(AaveV3Arbitrum.COLLECTOR)
44+
),
45+
proposal.REWARDS_STEWARD()
46+
);
47+
}
48+
49+
function test_canClaimRewards() public {
50+
address steward = proposal.REWARDS_STEWARD();
51+
vm.expectRevert('CLAIMER_UNAUTHORIZED');
52+
IRewardsSteward(steward).claimAllRewards(assets);
53+
54+
executePayload(vm, address(proposal));
55+
56+
IRewardsSteward(steward).claimAllRewards(assets);
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';
7+
8+
/**
9+
* @title Steward Deployment: MainnetSwapSteward and RewardsSteward
10+
* @author @TokenLogic
11+
* - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xdc005c2385a548143bbeb35b8bb92e5f0ed29829a445f5e986a2b010bc349c6a
12+
* - Discussion: https://governance.aave.com/t/arfc-steward-deployment-mainnetswapsteward-and-rewardssteward/23070
13+
*/
14+
contract AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 is
15+
IProposalGenericExecutor
16+
{
17+
// https://snowtrace.io/address/0x4C6Cf8b226500d92FCBC498c3EC4C2e1091dAC08
18+
address public constant REWARDS_STEWARD = 0x4C6Cf8b226500d92FCBC498c3EC4C2e1091dAC08;
19+
20+
function execute() external {
21+
EmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setClaimer(
22+
address(AaveV3Avalanche.COLLECTOR),
23+
REWARDS_STEWARD
24+
);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol';
7+
import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol';
8+
9+
import {AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821} from './AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.sol';
10+
11+
interface IRewardsSteward {
12+
function claimAllRewards(address[] calldata assets) external;
13+
function claimRewards(address[] calldata assets, uint256 amount, address reward) external;
14+
}
15+
16+
/**
17+
* @dev Test for AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821
18+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250821_Multi_StewardDeploymentMainnetSwapStewardAndRewardsSteward/AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.t.sol -vv
19+
*/
20+
contract AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821_Test is
21+
ProtocolV3TestBase
22+
{
23+
AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 internal proposal;
24+
address[] assets = new address[](1);
25+
26+
function setUp() public {
27+
vm.createSelectFork(vm.rpcUrl('avalanche'), 68588915);
28+
proposal = new AaveV3Avalanche_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821();
29+
assets[0] = AaveV3AvalancheAssets.WETHe_A_TOKEN;
30+
}
31+
32+
function test_claimerIsSetCorrectly() public {
33+
assertEq(
34+
IRewardsController(AaveV3Avalanche.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
35+
address(AaveV3Avalanche.COLLECTOR)
36+
),
37+
address(0)
38+
);
39+
40+
executePayload(vm, address(proposal));
41+
42+
assertEq(
43+
IRewardsController(AaveV3Avalanche.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
44+
address(AaveV3Avalanche.COLLECTOR)
45+
),
46+
proposal.REWARDS_STEWARD()
47+
);
48+
}
49+
50+
function test_canClaimRewards() public {
51+
address steward = proposal.REWARDS_STEWARD();
52+
vm.expectRevert('CLAIMER_UNAUTHORIZED');
53+
IRewardsSteward(steward).claimAllRewards(assets);
54+
55+
executePayload(vm, address(proposal));
56+
57+
IRewardsSteward(steward).claimRewards(assets, 100, AaveV3AvalancheAssets.WAVAX_UNDERLYING);
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';
7+
8+
/**
9+
* @title Steward Deployment: MainnetSwapSteward and RewardsSteward
10+
* @author @TokenLogic
11+
* - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xdc005c2385a548143bbeb35b8bb92e5f0ed29829a445f5e986a2b010bc349c6a
12+
* - Discussion: https://governance.aave.com/t/arfc-steward-deployment-mainnetswapsteward-and-rewardssteward/23070
13+
*/
14+
contract AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 is
15+
IProposalGenericExecutor
16+
{
17+
// https://bscscan.com/address/0x6046A62a80a2c19A0De91063602ce90533c62ae1
18+
address public constant REWARDS_STEWARD = 0x6046A62a80a2c19A0De91063602ce90533c62ae1;
19+
20+
function execute() external {
21+
EmissionManager(AaveV3BNB.EMISSION_MANAGER).setClaimer(
22+
address(AaveV3BNB.COLLECTOR),
23+
REWARDS_STEWARD
24+
);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3BNB, AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol';
7+
import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol';
8+
9+
import {AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821} from './AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.sol';
10+
11+
interface IRewardsSteward {
12+
function claimAllRewards(address[] calldata assets) external;
13+
}
14+
15+
/**
16+
* @dev Test for AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821
17+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250821_Multi_StewardDeploymentMainnetSwapStewardAndRewardsSteward/AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.t.sol -vv
18+
*/
19+
contract AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821_Test is
20+
ProtocolV3TestBase
21+
{
22+
AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 internal proposal;
23+
address[] assets = new address[](1);
24+
25+
function setUp() public {
26+
vm.createSelectFork(vm.rpcUrl('bnb'), 60816310);
27+
proposal = new AaveV3BNB_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821();
28+
assets[0] = AaveV3BNBAssets.ETH_A_TOKEN;
29+
}
30+
31+
function test_claimerIsSetCorrectly() public {
32+
assertEq(
33+
IRewardsController(AaveV3BNB.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
34+
address(AaveV3BNB.COLLECTOR)
35+
),
36+
address(0)
37+
);
38+
39+
executePayload(vm, address(proposal));
40+
41+
assertEq(
42+
IRewardsController(AaveV3BNB.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
43+
address(AaveV3BNB.COLLECTOR)
44+
),
45+
proposal.REWARDS_STEWARD()
46+
);
47+
}
48+
49+
function test_canClaimRewards() public {
50+
address steward = proposal.REWARDS_STEWARD();
51+
vm.expectRevert('CLAIMER_UNAUTHORIZED');
52+
IRewardsSteward(steward).claimAllRewards(assets);
53+
54+
executePayload(vm, address(proposal));
55+
56+
IRewardsSteward(steward).claimAllRewards(assets);
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';
7+
8+
/**
9+
* @title Steward Deployment: MainnetSwapSteward and RewardsSteward
10+
* @author @TokenLogic
11+
* - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xdc005c2385a548143bbeb35b8bb92e5f0ed29829a445f5e986a2b010bc349c6a
12+
* - Discussion: https://governance.aave.com/t/arfc-steward-deployment-mainnetswapsteward-and-rewardssteward/23070
13+
*/
14+
contract AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 is
15+
IProposalGenericExecutor
16+
{
17+
// https://basescan.org/address/0xF7212c40810e2192dc5ba45a5E8ad39E3E39Ea4b
18+
address public constant REWARDS_STEWARD = 0xF7212c40810e2192dc5ba45a5E8ad39E3E39Ea4b;
19+
20+
function execute() external {
21+
EmissionManager(AaveV3Base.EMISSION_MANAGER).setClaimer(
22+
address(AaveV3Base.COLLECTOR),
23+
REWARDS_STEWARD
24+
);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol';
5+
import {EmissionManager} from 'aave-v3-origin/contracts/rewards/EmissionManager.sol';
6+
import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol';
7+
import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol';
8+
9+
import {AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821} from './AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.sol';
10+
11+
interface IRewardsSteward {
12+
function claimAllRewards(address[] calldata assets) external;
13+
}
14+
15+
/**
16+
* @dev Test for AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821
17+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250821_Multi_StewardDeploymentMainnetSwapStewardAndRewardsSteward/AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821.t.sol -vv
18+
*/
19+
contract AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821_Test is
20+
ProtocolV3TestBase
21+
{
22+
AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821 internal proposal;
23+
address[] assets = new address[](1);
24+
25+
function setUp() public {
26+
vm.createSelectFork(vm.rpcUrl('base'), 35410730);
27+
proposal = new AaveV3Base_StewardDeploymentMainnetSwapStewardAndRewardsSteward_20250821();
28+
assets[0] = AaveV3BaseAssets.WETH_A_TOKEN;
29+
}
30+
31+
function test_claimerIsSetCorrectly() public {
32+
assertEq(
33+
IRewardsController(AaveV3Base.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
34+
address(AaveV3Base.COLLECTOR)
35+
),
36+
address(0)
37+
);
38+
39+
executePayload(vm, address(proposal));
40+
41+
assertEq(
42+
IRewardsController(AaveV3Base.DEFAULT_INCENTIVES_CONTROLLER).getClaimer(
43+
address(AaveV3Base.COLLECTOR)
44+
),
45+
proposal.REWARDS_STEWARD()
46+
);
47+
}
48+
49+
function test_canClaimRewards() public {
50+
address steward = proposal.REWARDS_STEWARD();
51+
vm.expectRevert('CLAIMER_UNAUTHORIZED');
52+
IRewardsSteward(steward).claimAllRewards(assets);
53+
54+
executePayload(vm, address(proposal));
55+
56+
IRewardsSteward(steward).claimAllRewards(assets);
57+
}
58+
}

0 commit comments

Comments
 (0)