diff --git a/src/20231101_Multi_FreezeStewards/FreezeStewards.md b/src/20231101_Multi_FreezeStewards/FreezeStewards.md new file mode 100644 index 000000000..f5c38ea96 --- /dev/null +++ b/src/20231101_Multi_FreezeStewards/FreezeStewards.md @@ -0,0 +1,34 @@ +--- +title: "Activate Freezing Steward on v3 missing networks" +author: "BGD Labs @bgdlabs" +discussions: "https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274" +--- + +## Summary + +Activates the `FreezingSteward` smart contract across all the networks of the protocol, which allows the emergency admin to freeze reserves, as expected. + +Currently, there are freezing stewards live for all the networks except Avalanche, Metis, and Base, and this proposal synchronizes the missing ones. + +## Motivation + +This is a follow-up to [AIP-319](https://app.aave.com/governance/proposal/319/) where on some networks (Avalanche, Metis, and Base) the proposal wasn’t executed. We now resubmit the proposal as an operational update to maintain security and consistency across Aave V3. + +## Specification + +Adds the `FreezingSteward` contract as `RISK_ADMIN` on the canonical Aave V3 deployments on the following networks: +- Avalanche +- Metis +- Base + +The `FreezingSteward` is identical to the one currently deployed on [Ethereum](https://etherscan.io/address/0x2eE68ACb6A1319de1b49DC139894644E424fefD6#code), [Polygon](https://polygonscan.com/address/0xa7b40ed4dfAC9255EA9Dd218A3874f380D9FbBEB), [Optimism](https://optimistic.etherscan.io/address/0x3829943c53F2d00e20B58475aF19716724bF90Ba), [Arbitrum](https://arbiscan.io/address/0xe59470b3be3293534603487e00a44c72f2cd466d) and only allows for entities holding `EMERGENCY_ADMIN` role on `ACLManager` to freeze reserves. + +## References + +- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Avalanche_FreezeStewards_20230907.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Metis_FreezeStewards_20230907.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Base_FreezeStewards_20230907.sol) +- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Avalanche_FreezeStewards_20230907.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Metis_FreezeStewards_20230907.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals/blob/eb3b1855f4d9e40d9a84bba5ee45b1c449f219ec/src/20230907_AaveV3_Multi_FreezeStewards/AaveV3_Base_FreezeStewards_20230907.t.sol) +- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20231101_Multi_FreezeStewards/FreezeStewards_20231101.s.sol b/src/20231101_Multi_FreezeStewards/FreezeStewards_20231101.s.sol new file mode 100644 index 000000000..5771b43bf --- /dev/null +++ b/src/20231101_Multi_FreezeStewards/FreezeStewards_20231101.s.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {EthereumScript, AvalancheScript, MetisScript, BaseScript} from 'aave-helpers/ScriptUtils.sol'; + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20231101_Multi_FreezeStewards/FreezeStewards_20231101.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](3); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction(0xa3255CfE96D192dDe036c30b10AF9a29bb358157); + payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsMetis[0] = GovV3Helpers.buildAction(0x0f24aF3ea7460E09E33B2e9814Df5856433BE80D); + payloads[1] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction(0x889c0cc3283DB588A34E89Ad1E8F25B0fc827b4b); + payloads[2] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal2_5( + payloads, + GovV3Helpers.ipfsHashFile(vm, 'src/20231101_Multi_FreezeStewards/FreezeStewards.md') + ); + } +} diff --git a/src/20231101_Multi_FreezeStewards/config.json b/src/20231101_Multi_FreezeStewards/config.json new file mode 100644 index 000000000..a26a7fdf5 --- /dev/null +++ b/src/20231101_Multi_FreezeStewards/config.json @@ -0,0 +1,41 @@ +{ + "rootOptions": { + "pools": [ + "AaveV3Avalanche", + "AaveV3Metis", + "AaveV3Base" + ], + "title": "Freeze Stewards", + "shortName": "FreezeStewards", + "date": "20231101", + "author": "BGD Labs @bgdlabs", + "discussion": "https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274", + "snapshot": "" + }, + "poolOptions": { + "AaveV3Avalanche": { + "configs": { + "OTHERS": {} + }, + "features": [ + "OTHERS" + ] + }, + "AaveV3Metis": { + "configs": { + "OTHERS": {} + }, + "features": [ + "OTHERS" + ] + }, + "AaveV3Base": { + "configs": { + "OTHERS": {} + }, + "features": [ + "OTHERS" + ] + } + } +} \ No newline at end of file