Skip to content

Commit b64b59e

Browse files
committed
Merge branch 'main' into sync/upstream-20250923
2 parents 6936ffe + fe49750 commit b64b59e

File tree

30 files changed

+975
-697
lines changed

30 files changed

+975
-697
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: "Dependency Review"
2+
on: [pull_request]
3+
4+
permissions:
5+
contents: read
6+
pull-requests: write
7+
8+
jobs:
9+
dependency-review:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: "Checkout Repository"
13+
uses: actions/checkout@v5
14+
- name: "Dependency Review"
15+
uses: actions/dependency-review-action@v4
16+
with:
17+
comment-summary-in-pr: on-failure
18+
fail-on-severity: moderate
19+
license-check: false

src/20250325_AaveV3Ethereum_InkADIPathActivation/InkADIPathActivation_20250325.s.sol

Lines changed: 0 additions & 54 deletions
This file was deleted.

src/20250325_AaveV3Ethereum_InkADIPathActivation/config.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';
5+
/**
6+
* @title Test vote on Ethereum
7+
* @author BGD Labs @bgdlabs
8+
* - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/91
9+
*/
10+
contract AaveV3Ethereum_TestVoteOnEthereum_20250530 is IProposalGenericExecutor {
11+
function execute() external {}
12+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
5+
6+
import 'forge-std/Test.sol';
7+
import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol';
8+
import {AaveV3Ethereum_TestVoteOnEthereum_20250530} from './AaveV3Ethereum_TestVoteOnEthereum_20250530.sol';
9+
10+
/**
11+
* @dev Test for AaveV3Ethereum_TestVoteOnEthereum_20250530
12+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol -vv
13+
*/
14+
/// forge-config: default.evm_version = 'cancun'
15+
contract AaveV3Ethereum_TestVoteOnEthereum_20250530_Test is ProtocolV3TestBase {
16+
AaveV3Ethereum_TestVoteOnEthereum_20250530 internal proposal;
17+
18+
function setUp() public {
19+
vm.createSelectFork(vm.rpcUrl('mainnet'), 22595989);
20+
proposal = new AaveV3Ethereum_TestVoteOnEthereum_20250530();
21+
}
22+
23+
/**
24+
* @dev executes the generic test suite including e2e and config snapshots
25+
*/
26+
function test_defaultProposalExecution() public {
27+
defaultTest(
28+
'AaveV3Ethereum_TestVoteOnEthereum_20250530',
29+
AaveV3Ethereum.POOL,
30+
address(proposal)
31+
);
32+
}
33+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
title: "Fire drill proposal Ethereum VotingMachine"
3+
author: "BGD Labs @bgdlabs"
4+
discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/91"
5+
---
6+
7+
## Simple Summary
8+
9+
Do a fire drill voting flow with a mock governance proposal using Ethereum as the voting network instead of Polygon as usual, to test that all peripheral systems are properly functioning.
10+
11+
## Motivation
12+
13+
One of the design principles of the currently running Aave Governance v3 system is to inherit Ethereum’s security at its core, delegating the voting stage to more cost-efficient networks (currently Polygon PoS and Avalanche C-Chain), while avoiding full dependency on them.
14+
15+
Partially, this is achieved by replicating the same voting infrastructure on Ethereum itself: if, for any reason, all the more optimal voting networks would not be operative, a governance proposal can still be created and voted on (even if more expensive) directly on Ethereum itself.
16+
17+
Given that this flow is only to be used in some very edge emergency scenario, we think it is healthy to make a fire drill: creating a proposal executing a payload without any meaningful content, but using the Ethereum voting infrastructure.
18+
19+
## Specification
20+
21+
The governance proposal will be created using the [Ethereum → Ethereum Voting Portal](https://etherscan.io/address/0x6ACe1Bf22D57a33863161bFDC851316Fb0442690) so that voting will happen on the Ethereum network.
22+
23+
The payload executed will just contain an empty execute() function, as the purpose of this fire drill is testing the full flow, and not any execution content.
24+
25+
## References
26+
27+
- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/12b567e8939bbd8297d73225fae9b5a6a4e0d5ec/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.sol)
28+
- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/12b567e8939bbd8297d73225fae9b5a6a4e0d5ec/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol)
29+
- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/91)
30+
31+
## Copyright
32+
33+
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol';
5+
import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol';
6+
import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
7+
8+
/**
9+
* @title LBTC and eBTC Price Feeds Update
10+
* @author BGD Labs @bgdlabs
11+
* - Snapshot: Direct-to-AIP
12+
* - Discussion: https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614
13+
*/
14+
contract AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717 is AaveV3PayloadBase {
15+
// https://basescan.org/address/0xA04669FE5cba4Bb21f265B562D23e562E45A1C67
16+
address public constant LBTC_CAPO_ADAPTER = 0xA04669FE5cba4Bb21f265B562D23e562E45A1C67;
17+
18+
function priceFeedsUpdates()
19+
public
20+
pure
21+
override
22+
returns (IAaveV3ConfigEngine.PriceFeedUpdate[] memory)
23+
{
24+
IAaveV3ConfigEngine.PriceFeedUpdate[]
25+
memory priceFeedUpdates = new IAaveV3ConfigEngine.PriceFeedUpdate[](1);
26+
27+
priceFeedUpdates[0] = IAaveV3ConfigEngine.PriceFeedUpdate({
28+
asset: AaveV3BaseAssets.LBTC_UNDERLYING,
29+
priceFeed: LBTC_CAPO_ADAPTER
30+
});
31+
32+
return priceFeedUpdates;
33+
}
34+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol';
5+
import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol';
6+
7+
import 'forge-std/Test.sol';
8+
import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol';
9+
import {AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol';
10+
11+
/**
12+
* @dev Test for AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717
13+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol -vv
14+
*/
15+
contract AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_Test is ProtocolV3TestBase {
16+
AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717 internal proposal;
17+
18+
function setUp() public {
19+
vm.createSelectFork(vm.rpcUrl('base'), 33891700);
20+
proposal = new AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717();
21+
}
22+
23+
/**
24+
* @dev executes the generic test suite including e2e and config snapshots
25+
*/
26+
function test_defaultProposalExecution() public {
27+
defaultTest(
28+
'AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717',
29+
AaveV3Base.POOL,
30+
address(proposal)
31+
);
32+
}
33+
34+
function test_LBTC_priceFeedAdapter() public {
35+
address feedBefore = AaveV3Base.ORACLE.getSourceOfAsset(AaveV3BaseAssets.LBTC_UNDERLYING);
36+
37+
GovV3Helpers.executePayload(vm, address(proposal));
38+
39+
address feedAfter = AaveV3Base.ORACLE.getSourceOfAsset(AaveV3BaseAssets.LBTC_UNDERLYING);
40+
41+
assertNotEq(feedBefore, feedAfter);
42+
43+
assertEq(feedAfter, proposal.LBTC_CAPO_ADAPTER());
44+
}
45+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
5+
import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol';
6+
import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
7+
import {IPriceCapAdapter} from '../interfaces/IPriceCapAdapter.sol';
8+
9+
/**
10+
* @title LBTC and eBTC Price Feeds Update
11+
* @author BGD Labs @bgdlabs
12+
* - Snapshot: Direct-To-AIP
13+
* - Discussion: https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614
14+
*/
15+
contract AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717 is AaveV3PayloadEthereum {
16+
// https://etherscan.io/address/0xf8c04B50499872A5B5137219DEc0F791f7f620D0
17+
address public constant LBTC_CAPO_ADAPTER = 0xf8c04B50499872A5B5137219DEc0F791f7f620D0;
18+
// https://etherscan.io/address/0x03bB418e89B75407585f8198178f253DA3216218
19+
address public constant EBTC_CAPO_ADAPTER = 0x03bB418e89B75407585f8198178f253DA3216218;
20+
21+
function priceFeedsUpdates()
22+
public
23+
pure
24+
override
25+
returns (IAaveV3ConfigEngine.PriceFeedUpdate[] memory)
26+
{
27+
IAaveV3ConfigEngine.PriceFeedUpdate[]
28+
memory priceFeedUpdates = new IAaveV3ConfigEngine.PriceFeedUpdate[](2);
29+
30+
priceFeedUpdates[0] = IAaveV3ConfigEngine.PriceFeedUpdate({
31+
asset: AaveV3EthereumAssets.LBTC_UNDERLYING,
32+
priceFeed: LBTC_CAPO_ADAPTER
33+
});
34+
35+
priceFeedUpdates[1] = IAaveV3ConfigEngine.PriceFeedUpdate({
36+
asset: AaveV3EthereumAssets.eBTC_UNDERLYING,
37+
priceFeed: EBTC_CAPO_ADAPTER
38+
});
39+
40+
return priceFeedUpdates;
41+
}
42+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
5+
import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol';
6+
import {IPriceCapAdapter} from '../interfaces/IPriceCapAdapter.sol';
7+
8+
import 'forge-std/Test.sol';
9+
import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol';
10+
import {AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol';
11+
12+
/**
13+
* @dev Test for AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717
14+
* command: FOUNDRY_PROFILE=test forge test --match-path=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol -vv
15+
*/
16+
contract AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_Test is ProtocolV3TestBase {
17+
AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717 internal proposal;
18+
19+
function setUp() public {
20+
vm.createSelectFork(vm.rpcUrl('mainnet'), 23118114);
21+
proposal = new AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717();
22+
}
23+
24+
/**
25+
* @dev executes the generic test suite including e2e and config snapshots
26+
*/
27+
function test_defaultProposalExecution() public {
28+
defaultTest(
29+
'AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717',
30+
AaveV3Ethereum.POOL,
31+
address(proposal)
32+
);
33+
}
34+
35+
function test_eBTC_priceFeedAdapter() public {
36+
address feedBefore = AaveV3Ethereum.ORACLE.getSourceOfAsset(
37+
AaveV3EthereumAssets.eBTC_UNDERLYING
38+
);
39+
40+
GovV3Helpers.executePayload(vm, address(proposal));
41+
42+
address feedAfter = AaveV3Ethereum.ORACLE.getSourceOfAsset(
43+
AaveV3EthereumAssets.eBTC_UNDERLYING
44+
);
45+
46+
assertNotEq(feedBefore, feedAfter);
47+
48+
assertEq(feedAfter, proposal.EBTC_CAPO_ADAPTER());
49+
}
50+
51+
function test_LBTC_priceFeedAdapter() public {
52+
address feedBefore = AaveV3Ethereum.ORACLE.getSourceOfAsset(
53+
AaveV3EthereumAssets.LBTC_UNDERLYING
54+
);
55+
56+
GovV3Helpers.executePayload(vm, address(proposal));
57+
58+
address feedAfter = AaveV3Ethereum.ORACLE.getSourceOfAsset(
59+
AaveV3EthereumAssets.LBTC_UNDERLYING
60+
);
61+
62+
assertNotEq(feedBefore, feedAfter);
63+
64+
assertEq(feedAfter, proposal.LBTC_CAPO_ADAPTER());
65+
}
66+
}

0 commit comments

Comments
 (0)