From ea76865ffbaccf08920bace6268571076e1ce06b Mon Sep 17 00:00:00 2001 From: Marc Zeller Date: Mon, 11 Mar 2024 12:25:57 +0100 Subject: [PATCH] Centrifuge AIP (#235) --- ...ActivationOfACPrimeFoundation_20240308.sol | 24 ++++++++ ...tivationOfACPrimeFoundation_20240308.t.sol | 32 ++++++++++ .../ActivationOfACPrimeFoundation.md | 42 ++++++++++++++ ...tivationOfACPrimeFoundation_20240308.s.sol | 58 +++++++++++++++++++ .../config.ts | 14 +++++ 5 files changed, 170 insertions(+) create mode 100644 src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol create mode 100644 src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.t.sol create mode 100644 src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation.md create mode 100644 src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol create mode 100644 src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/config.ts diff --git a/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol new file mode 100644 index 000000000..a5d0c4c75 --- /dev/null +++ b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; + +/** + * @title Activation of A-C Prime Foundation + * @author @Khan + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x71db494e4b49e7533c5ccaa566686b2d045b0761cb3296a2d77af4b500566eb0 + * - Discussion: https://governance.aave.com/t/arfc-aave-treasury-rwa-allocation/14790 + */ +contract AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308 is IProposalGenericExecutor { + event Decision(string agreed); + + function execute() external { + // This AIP payload serves as a DAO resolution providing binding approval from the Aave DAO to approve and ratify the following documents: + // 1. The Articles of Association + // 2. The Memorandum of Association + + emit Decision( + 'The Aave DAO approves and ratifies the following documents: \n\n 1) The articles of Association: https://cloudflare-ipfs.com/ipfs/QmXvgvLb87tFr8JmJjx7pAThAU1gAsHFLqdMa12zt2f6R6) \n\n 2) The Memorandum Of Association: https://cloudflare-ipfs.com/ipfs/QmaB3Z4oN4Bcc4SEZ8WH2duKLpPqRYKqYC5TMqpQaddfrB \n\n' + ); + } +} diff --git a/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.t.sol b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.t.sol new file mode 100644 index 000000000..52814b202 --- /dev/null +++ b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308} from './AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol'; + +/** + * @dev Test for AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308 + * command: make test-contract filter=AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308 + */ +contract AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308_Test is ProtocolV3TestBase { + AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 19390425); + proposal = new AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation.md b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation.md new file mode 100644 index 000000000..3f68135d7 --- /dev/null +++ b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation.md @@ -0,0 +1,42 @@ +--- +title: "Activation of A-C Prime Foundation" +author: "@Khan" +discussions: "https://governance.aave.com/t/arfc-aave-treasury-rwa-allocation/14790" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x71db494e4b49e7533c5ccaa566686b2d045b0761cb3296a2d77af4b500566eb0" +--- + +## Simple Summary + +Following [AIP-331](https://governance-v2.aave.com/governance/proposal/331/) giving mandate to Centrifuge to create a Association to represent the Aave DAO off-chain, this AIP proposes the activation of the A-C Prime Foundation. + +## Motivation + +The A-C Prime Foundation is a Cayman island foundation company created by Centrifuge on behalf of the Aave DAO. It is the legal entity that will represent the Aave DAO off-chain. It will be the entity that will be able to sign contracts, hold assets, and enter into agreements on behalf of the Aave DAO. + +This AIP proposes the activation of the A-C Prime Foundation. and the pre-approval of a investment in the Anemoy Liquid Treasury Fund 1 with an initial investment of the equivalent of $1m in shares. + +## Specification + +This AIP does not require any on-chain changes. It is a proposal to activate the A-C Prime Foundation. + +To explicitly convey the Aave DAO approval via its governance, an event is created on-chain casting the following message: + + ``` + 'The Aave DAO approves and ratify the following documents : + + the articles of Association : https://centrifuge.mypinata.cloud/ipfs/QmSn1Jx4PCPCvJDwx5JHqAcrCYFtCdVGtXc2Dcmk8NFauM + + The Memorandum Of association : https://centrifuge.mypinata.cloud/ipfs/QmeNnARf9CqLQ9krQn8b4UCnBaWhUhLryEBqrVqW9cuTjV' + + ``` + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x71db494e4b49e7533c5ccaa566686b2d045b0761cb3296a2d77af4b500566eb0) +- [Discussion](https://governance.aave.com/t/arfc-aave-treasury-rwa-allocation/14790) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol new file mode 100644 index 000000000..1c9ad9b5f --- /dev/null +++ b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308} from './AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol:DeployEthereum chain=mainnet + * verify-command: npx catapulta-verify -b broadcast/ActivationOfACPrimeFoundation_20240308.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation_20240308.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_ActivationOfACPrimeFoundation_20240308).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/ActivationOfACPrimeFoundation.md' + ) + ); + } +} diff --git a/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/config.ts b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/config.ts new file mode 100644 index 000000000..8b65f54b7 --- /dev/null +++ b/src/20240308_AaveV3Ethereum_ActivationOfACPrimeFoundation/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Activation of A-C Prime Foundation', + shortName: 'ActivationOfACPrimeFoundation', + date: '20240308', + author: '@Khan', + discussion: 'https://governance.aave.com/t/arfc-aave-treasury-rwa-allocation/14790', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x71db494e4b49e7533c5ccaa566686b2d045b0761cb3296a2d77af4b500566eb0', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19390425}}}, +};