Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: freezing stewards #24

Merged
merged 4 commits into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/20231101_Multi_FreezeStewards/FreezeStewards.md
Original file line number Diff line number Diff line change
@@ -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/).
39 changes: 39 additions & 0 deletions src/20231101_Multi_FreezeStewards/FreezeStewards_20231101.s.sol
Original file line number Diff line number Diff line change
@@ -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')
);
}
}
41 changes: 41 additions & 0 deletions src/20231101_Multi_FreezeStewards/config.json
Original file line number Diff line number Diff line change
@@ -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"
]
}
}
}