Skip to content

Latest commit

 

History

History
210 lines (163 loc) · 18.8 KB

File metadata and controls

210 lines (163 loc) · 18.8 KB

Payloads

Proposal 8

Ipfs

Proposal text

Simple Summary

This AIP proposes the deployment of the GHO Stability Module (GSM), a system facilitating the conversion between GHO and two governance-accepted stablecoins, USDC and USDT, at a predetermined ratio.

The GSM has undergone thorough iterations of design, development, testing, and implementation with Aave Labs driving this process and actively seeking community feedback. Additionally, the security aspect was carefully addressed through collaboration with DAO service providers SigmaPrime and Certora for code reviews. Furthermore, an extra layer of security was added by commissioning an independent review from a security researcher (Emanuele Ricci @stermi).

Following extensive community discussion and multiple phases of Aave DAO governance, this AIP suggests deploying two GSM contracts for seamless conversions between GHO and USDC as well as GHO and USDT.

Motivation

The GHO Stability Module (GSM) is a contract designed to facilitate conversions between two tokens with its primary purpose being to help further maintain GHO's peg. The module allows swaps between GHO and other governance-accepted stablecoins, offering a variety of functionalities that make it paramount in the fields of security and risk management.

Summarizing the functionality offered by the GHO Stability Module (GSM), here is a list of these features and their planned implementation for this proposal:

  • Exposure Cap: Denominated in token units, it limits exposure to the exogenous asset.
  • Price Strategies: Utilizing a fixed price strategy with a 1:1 ratio for stablecoins.
  • Fee Strategies: Employing a flat basis point (bps) approach, differentiated by direction (sell/buy).
  • Last Resort Liquidation: Aave DAO is the exclusive entity granted with the role of last resort liquidation, empowering it to take control of GSM funds in worst-case scenarios.
  • Swap Freeze: Aave DAO and a chainlink-automated keeper contract have the authority to freeze the swap functionality. The chainlink-automated keeper contract bases its actions on the price of the exogenous asset, freezing if the price is outside the range and unfreezing if inside the range.
  • Capital Allocation: Supporting this feature by allowing ERC4626 assets as underlying assets. This enables redirecting the yield generated by the ERC4626 asset, while residing in the GSM contract, to the GHO Treasury.

Specification

The proposed payload entails the comprehensive activation of GSM USDC and GSM USDT, involving the following steps:

  1. Incorporate GSM USDC and GSM USDT as facilitators of the GHO Token on Ethereum.
  2. Adjust the Fee Strategy for both GSMs to implement a 0.2% flat fee for both directions (buy/sell).
  3. Add both GSMs to the GSM Registry.
  4. Designate OracleSwapFreezer contracts and Aave DAO as SwapFreezer entities in each GSM contract, respectively.
  5. Activate these OracleSwapFreezer contracts as keepers of the Aave DAO through AaveRobot with a funding of 80 LINK for each.

The table below outlines the initially proposed risk parameters for each GSM contract, as approved through the snapshot:

GSM USDC

Parameter Value
Underlying Price Range for Swap Freeze [0.99 - 1.01]
Underlying Price Range for Swap Unfreeze [0.995 - 1.005]
Buy Fee 0.2%
Sell Fee 0.2%
Exposure Cap 500,000 USDC
Facilitator Bucket Capacity 500,000 GHO
Swap Active True

GSM USDT

Parameter Value
Underlying Price Range for Swap Freeze [0.99 - 1.01]
Underlying Price Range for Swap Unfreeze [0.995 - 1.005]
Buy Fee 0.2%
Sell Fee 0.2%
Exposure Cap 500,000 USDT
Facilitator Bucket Capacity 500,000 GHO
Swap Active True

References

Copyright

Copyright and related rights waived via CC0.

Check: Reports all state changes ✅

Info

KeeperRegistry at 0x02777053d6764996e594c3E88AF1D58D5363a2e6

@@ `s_upkeep` key `"2651260633509968244842245718659958660539758109819220392919944208741153930322".lastKeeper` @@
- 0xf12571de5a310008f1b7490f1aaf52de11325cc8
+ 0x083b4cc0db892160dc5928066d294ba8d4220830

TransparentUpgradeableProxy at 0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7👻 with implementation Governance at 0x58BcB647C4beFf253B4B6996c62F737B783f2cDd

@@ `_proposals` key `"8".state` @@
- 2268261771377090260730918125382679725402947843
+ 2268261771377090260730918125382679725402947844

TransparentUpgradeableProxy at 0xdAbad81aF85554E9ae636395611C58F7eC1aAEc5👻 with implementation PayloadsController at 0x7222182cB9c5320587b5148BF03eeE107AD64578

@@ Slot `0x5f3ffac152518418b730c1b4427b48de47a050e582434504c9ffd15088f0d196` @@
- "0x00000000000065b0e6bf010199c7a4a4ab99882c422ef777b182ebda204d5b02"
+ "0x0065b65e4b0065b0e6bf020199c7a4a4ab99882c422ef777b182ebda204d5b02"

TransparentUpgradeableProxy at 0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1👻 with implementation unknown contract name at 0x28559c2F4B038b1E836fA419DCcDe7454d8Fe215

@@ Slot `0x0000000000000000000000000000000000000000000000000000000000000002` @@
- "0x0000000000000000000000000000000000000000000000000000000000000086"
+ "0x0000000000000000000000000000000000000000000000000000000000000087"
@@ Slot `0x0000000000000000000000000000000000000000000000000000000000000003` @@
- "0x0000000000000000000000000000000000000000000000000000000000000086"
+ "0x0000000000000000000000000000000000000000000000000000000000000087"
@@ Slot `0x41fd249c6e1a37d3f6a9d7904d4558c8d3b395c7391bec4510af0b81020f168a` @@
- "0x0000000000000000000000000000000000000000000000000000000000000000"
+ "0x0000000000000000000000000000000000000000000000000000000000000001"
@@ Slot `0x47425570fed9a4c2884b5afa639963430f6e1097e4c1e345b1e6572a9e37db46` @@
- "0x0000000000000000000000000000000000000000000000000000000000000000"
+ "0x0000000000000000000000000000000000000000000000000000000000000001"

Check: Reports all events emitted from the proposal ✅

Info

  • TransparentUpgradeableProxy at 0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1👻 with implementation unknown contract name at 0x28559c2F4B038b1E836fA419DCcDe7454d8Fe215
    • EnvelopeRegistered(envelopeId: 0xb6c4f49aa25ba9166a39ea30e0a9fe1e55ca15cd4a72b9942fef1f205c30982d, envelope: [object Object])
    • TransactionForwardingAttempted(transactionId: 0x3ad1e8812ef3f5999ef737654405a253ffed7c33a4369261950bc829adbfbc0f, envelopeId: 0xb6c4f49aa25ba9166a39ea30e0a9fe1e55ca15cd4a72b9942fef1f205c30982d, encodedTransaction: 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000860000000000000000000000009aee0b04504cef83a65ac3f0e838d0593bcb2bc7000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000065b2609b, destinationChainId: 1, bridgeAdapter: 0x118dfd5418890c0332042ab05173db4a2c1d283c, destinationBridgeAdapter: 0x118dfd5418890c0332042ab05173db4a2c1d283c, adapterSuccessful: true, returnData: 0x000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec50000000000000000000000000000000000000000000000000000000000000000)
  • TransparentUpgradeableProxy at 0xdAbad81aF85554E9ae636395611C58F7eC1aAEc5👻 with implementation PayloadsController at 0x7222182cB9c5320587b5148BF03eeE107AD64578
    • PayloadQueued(payloadId: 48)
    • PayloadExecutionMessageReceived(originSender: 0x9aee0b04504cef83a65ac3f0e838d0593bcb2bc7, originChainId: 1, delivered: true, message: 0x000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000065b2609b, reason: 0x)
  • TransparentUpgradeableProxy at 0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7👻 with implementation Governance at 0x58BcB647C4beFf253B4B6996c62F737B783f2cDd
    • PayloadSent(proposalId: 8, payloadId: 48, payloadsController: 0xdabad81af85554e9ae636395611c58f7ec1aaec5, chainId: 1, payloadNumberOnProposal: 0, numberOfPayloadsOnProposal: 1)
    • ProposalExecuted(proposalId: 8)
  • GovernanceChainRobotKeeper at 0x011824f238AEE05329213d5Ae029e899e5412343
    • ActionSucceeded(id: 8, action: 1)
  • KeeperRegistry at 0x02777053d6764996e594c3E88AF1D58D5363a2e6
    • UpkeepPerformed(id: 2651260633509968244842245718659958660539758109819220392919944208741153930322, success: true, from: 0x083b4cc0db892160dc5928066d294ba8d4220830, payment: 0, performData: 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001)

Check: Check all touched contracts are verified on Etherscan ✅

Info

  • 0x083b4cc0db892160dc5928066d294ba8d4220830: EOA (verification not applicable)
  • 0x02777053d6764996e594c3e88af1d58d5363a2e6: Contract (verified) (KeeperRegistry)
  • 0x169e633a2d1e6c10dd91238ba11c4a708dfef37c: Contract (verified) (EACAggregatorProxy)
  • 0x785433d8b06d77d68df6be63944742130a4530d1: Contract (verified) (AccessControlledOffchainAggregator)
  • 0xdc530d9457755926550b59e8eccdae7624181557: Contract (verified) (EACAggregatorProxy) 👻
  • 0xbba12740de905707251525477bad74985dec46d2: Contract (verified) (AccessControlledOffchainAggregator)
  • 0x011824f238aee05329213d5ae029e899e5412343: Contract (verified) (GovernanceChainRobotKeeper)
  • 0x9aee0b04504cef83a65ac3f0e838d0593bcb2bc7: Contract (verified) (TransparentUpgradeableProxy) 👻
  • 0x58bcb647c4beff253b4b6996c62f737b783f2cdd: Contract (verified) (Governance)
  • 0xa198fac58e02a5c5f8f7e877895d50cfa9ad1e04: Contract (verified) (GovernancePowerStrategy) 👻
  • 0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9: Contract (verified) (InitializableAdminUpgradeabilityProxy) 👻
  • 0x5d4aa78b08bc7c530e21bf7447988b1be7991322: Contract (verified) (AaveTokenV3)
  • 0x4da27a545c0c5b758a6ba100e3a049001de870f5: Contract (verified) (InitializableAdminUpgradeabilityProxy) 👻
  • 0x0fe58fe1caa69951dc924a8c222be19013b89476: Contract (verified) (StakedAaveV3)
  • 0xa700b4eb416be35b2911fd5dee80678ff64ff6c9: Contract (verified) (InitializableImmutableAdminUpgradeabilityProxy) 👻
  • 0x366ae337897223aea70e3ebe1862219386f20593: Contract (verified) (ATokenWithDelegation)
  • 0xed42a7d8559a463722ca4bed50e0cc05a386b0e1: Contract (verified) (TransparentUpgradeableProxy) 👻
  • 0x0bf5bbfae7808d329e0ba8277e0b746bbfda68f1: Contract (verified) (CrossChainController)
  • 0x118dfd5418890c0332042ab05173db4a2c1d283c: Contract (verified) (SameChainAdapter)
  • 0xdabad81af85554e9ae636395611c58f7ec1aaec5: Contract (verified) (TransparentUpgradeableProxy) 👻
  • 0x7222182cb9c5320587b5148bf03eee107ad64578: Contract (verified) (PayloadsController)

Check: Check all touched contracts do not contain selfdestruct ✅

Warnings

Info