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

GHO CCIP Base Expansion #20

Closed
wants to merge 84 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
b289a4c
feat: base expansion
DhairyaSethi Dec 23, 2024
be4396a
chore: upd ccip lib
DhairyaSethi Dec 23, 2024
ac516af
feat: expand _validateConfig in e2e test
DhairyaSethi Dec 24, 2024
c7b11bd
feat: eth & arb tests
DhairyaSethi Dec 24, 2024
c3ea819
chore: import gho from EthereumAssets instead of MiscEthereum
DhairyaSethi Dec 24, 2024
dd13655
chore: use latest deployment of existing remote pool upgrade
DhairyaSethi Dec 24, 2024
9994623
doc: snapshot & discussion
DhairyaSethi Dec 24, 2024
2ddc813
chore: rename facilitator
DhairyaSethi Dec 24, 2024
8b43b84
test: cleanup & fuzzify
DhairyaSethi Dec 24, 2024
f022cd6
test: cleanup & fuzzify
DhairyaSethi Dec 24, 2024
1e06e0d
chore: use latest deployment of existing remote pool upgrade
DhairyaSethi Dec 24, 2024
843c94a
doc: snapshot -> direct-to-aip
DhairyaSethi Dec 24, 2024
ad22759
chore: import gho from EthereumAssets instead of MiscEthereum
DhairyaSethi Dec 24, 2024
b9022f6
chore: cleanup rm ProxyAdmin reference
DhairyaSethi Dec 24, 2024
2754acf
chore: rename facilitator
DhairyaSethi Dec 24, 2024
ff8bd9e
chore: rm duplicate check
DhairyaSethi Dec 24, 2024
17ec054
fix: snapshot, use utils reference for chain selectors
DhairyaSethi Dec 24, 2024
0471bd8
fix: base config test on eth
DhairyaSethi Dec 24, 2024
cddd175
test: eth<>arb e2e test
DhairyaSethi Dec 24, 2024
f866baf
chore: mock naming accuracy
DhairyaSethi Dec 24, 2024
c366c91
feat: base token through create2
DhairyaSethi Dec 24, 2024
d6717da
feat: expand _validateConfig in e2e test
DhairyaSethi Dec 24, 2024
88a26e4
feat: use deployed gho token impl on base, fix facilitator bucket to …
DhairyaSethi Dec 25, 2024
0f19b52
fix: merge latest upstream
DhairyaSethi Dec 25, 2024
bfb330d
Merge branch 'feat/ccip_1_5_1' into feat/gho-based-ccip
DhairyaSethi Dec 25, 2024
514bde6
fix: tmp fix remappings such that gho-core OZ and aave-v3 OZ do not c…
DhairyaSethi Dec 26, 2024
59e1dd2
feat: stewards, base tests
DhairyaSethi Dec 26, 2024
676ee32
fix: use 500 maxChange borrowRateConfig
DhairyaSethi Dec 26, 2024
372e11f
feat: validate base proposal constants
DhairyaSethi Dec 26, 2024
8e97f9f
chore: add partial explorer links for immutables
DhairyaSethi Dec 26, 2024
343e8d4
test: tokenPoolConfig
DhairyaSethi Dec 27, 2024
cd0c17f
test: fix risk council
DhairyaSethi Dec 31, 2024
d49d6bd
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Dec 31, 2024
3167880
fix: merge
DhairyaSethi Dec 31, 2024
1f7aea3
feat: add rate limit
DhairyaSethi Dec 31, 2024
36c0446
fix: riskCouncil
DhairyaSethi Dec 31, 2024
68a8441
feat: gho base listing
DhairyaSethi Dec 31, 2024
1662f90
feat: aave stewards test
DhairyaSethi Dec 31, 2024
414c76e
chore: fix typo
DhairyaSethi Dec 31, 2024
9f4a2b0
chore: upd title
DhairyaSethi Dec 31, 2024
080de87
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 2, 2025
f50e217
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 2, 2025
dc42f10
feat: use deployed base token pool & stewards
DhairyaSethi Jan 2, 2025
7092108
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 3, 2025
16930a2
upd: upstream
DhairyaSethi Jan 3, 2025
e15e07c
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 3, 2025
8cf9365
chore: steward tests
DhairyaSethi Jan 3, 2025
dd101af
fix: ccip stewards tests
DhairyaSethi Jan 3, 2025
fbdefd1
test: listing pre-req negative cases
DhairyaSethi Jan 3, 2025
b06cb8e
chore: minor cleanup
DhairyaSethi Jan 3, 2025
e7c651e
test: verbose error msg
DhairyaSethi Jan 3, 2025
7c6f9da
feat: QoL cleanup
DhairyaSethi Jan 3, 2025
c6f2c6e
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 6, 2025
9dbf84e
chore: upd upstream
DhairyaSethi Jan 6, 2025
f960d78
chore: new ccip stewards with timelock getter on base
DhairyaSethi Jan 6, 2025
29ee27b
v3.3 sherlock contest funding (#560)
ianflexa Jan 7, 2025
4029849
fix(cache): automated cache update [skip ci]
Jan 7, 2025
6757aec
Merge branch 'feat/ccip_1_5_1' of https://github.com/aave/aave-propos…
DhairyaSethi Jan 8, 2025
0510e4e
upd: use latest eth/arb deployments
DhairyaSethi Jan 8, 2025
f2f9194
feat: predeploy gho token
DhairyaSethi Jan 8, 2025
6f36d41
doc: upd md with new token
DhairyaSethi Jan 9, 2025
0a1655d
feat: update gho token proxyAdmin
DhairyaSethi Jan 9, 2025
86c3cda
test: simplify
DhairyaSethi Jan 9, 2025
57aaaa1
Karpatkey-Gho-Growth (#559)
Luigy-Lemon Jan 9, 2025
0fe7c09
fix(cache): automated cache update [skip ci]
Jan 9, 2025
612e087
[Aavechan] ezeth on arbitrum and base (#561)
Rozengarden Jan 10, 2025
98da29e
fix(cache): automated cache update [skip ci]
Jan 10, 2025
cde38c6
chore: minor cleanup nits
DhairyaSethi Jan 14, 2025
f2940b9
[Aavechan] Onboard sUSDe and weETH on zksync (#565)
Rozengarden Jan 14, 2025
df9a022
fix(cache): automated cache update [skip ci]
Jan 14, 2025
763a015
chore: fix imports (#567)
brotherlymite Jan 14, 2025
47796fc
feat: a.DI Ethereum -> Celo path activation (#564)
sendra Jan 14, 2025
134c39c
GHO CCIP 1.5.1 Upgrade Eth<>Arb (#557)
DhairyaSethi Jan 16, 2025
0dff1b6
feat: explicitly enable optimizer (#571)
DhairyaSethi Jan 20, 2025
97f99f8
[Aavechan] lbtc onboarding (#562)
Rozengarden Jan 20, 2025
e925716
fix(cache): automated cache update [skip ci]
Jan 20, 2025
7c4fd17
feat: ACI emission admin for REZ, KERNEL & rsETH (#572)
Rozengarden Jan 21, 2025
6025b91
fix(cache): automated cache update [skip ci]
Jan 21, 2025
051dd67
✨ Update Prime GHO base borrow rate (#575)
MartinGbz Jan 21, 2025
639d461
fix(cache): automated cache update [skip ci]
Jan 21, 2025
d1896e6
Merge branch 'main' into feat/gho-based-ccip
DhairyaSethi Jan 23, 2025
1e54a33
chore: resolve conflicts
DhairyaSethi Jan 23, 2025
3e6f628
fix: update blocks, cleanup on pre-requisites
DhairyaSethi Jan 23, 2025
e6b73b8
doc: update AIP text
DhairyaSethi Jan 23, 2025
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
Prev Previous commit
Next Next commit
Karpatkey-Gho-Growth (bgd-labs#559)
* feat: karpatkey funding proposal - gho growth

* feat: update md file and merge main

* chore: remove unused dependencies

* chore: update aave-helper

* Update src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/karpatkeyGhoGrowth.md

Co-authored-by: Harsh Pandey <[email protected]>

---------

Co-authored-by: Harsh Pandey <[email protected]>
Luigy-Lemon and brotherlymite authored Jan 9, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit 57aaaa1bfa341a98ac5fbb549aa16941eef69ed7
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Raw diff

```json
{}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol';
import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol';
import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';

/**
* @title karpatkey Gho Growth Service Provider
* @author karpatkey
* - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x87585d9dcb104d2946ca2def6bcf57708480fafc5e310de4850dc2fbe1820893
* - Discussion: https://governance.aave.com/t/arfc-karpatkey-as-gho-growth-service-provider/20206
*/
contract AaveV3Ethereum_karpatkeyGhoGrowth_20241231 is IProposalGenericExecutor {
using CollectorUtils for ICollector;

uint256 public constant KARPATKEY_STREAM_AMOUNT = 250_000e18;
address public constant KARPATKEY_SAFE = 0x58e6c7ab55Aa9012eAccA16d1ED4c15795669E1C;
uint256 public constant STREAM_DURATION = 180 days;
uint256 public constant STREAM_START_TIME = 1734912000; // Sun Dec 23 2024 12:00 GMT+0000
uint256 public constant ACTUAL_STREAM_AMOUNT =
(KARPATKEY_STREAM_AMOUNT / STREAM_DURATION) * STREAM_DURATION;

function execute() external override {
uint256 backDatedAmount = (ACTUAL_STREAM_AMOUNT * (block.timestamp - STREAM_START_TIME)) /
STREAM_DURATION;

// transfer backend amount
AaveV3Ethereum.COLLECTOR.transfer(
AaveV3EthereumLidoAssets.GHO_A_TOKEN,
KARPATKEY_SAFE,
backDatedAmount
);

// stream
AaveV3Ethereum.COLLECTOR.stream(
CollectorUtils.CreateStreamInput({
underlying: AaveV3EthereumLidoAssets.GHO_A_TOKEN,
receiver: KARPATKEY_SAFE,
amount: ACTUAL_STREAM_AMOUNT - backDatedAmount,
start: block.timestamp,
duration: STREAM_DURATION + STREAM_START_TIME - block.timestamp
})
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol';
import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';

import 'forge-std/Test.sol';
import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol';
import {AaveV3Ethereum_karpatkeyGhoGrowth_20241231} from './AaveV3Ethereum_karpatkeyGhoGrowth_20241231.sol';

/**
* @dev Test for AaveV3Ethereum_karpatkeyGhoGrowth_20241231
* command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.t.sol -vv
*/
contract AaveV3Ethereum_karpatkeyGhoGrowth_20241231_Test is ProtocolV3TestBase {
AaveV3Ethereum_karpatkeyGhoGrowth_20241231 internal proposal;

function setUp() public {
vm.createSelectFork(vm.rpcUrl('mainnet'), 21524445);
proposal = new AaveV3Ethereum_karpatkeyGhoGrowth_20241231();
}

/**
* @dev executes the generic test suite including e2e and config snapshots
*/
function test_defaultProposalExecution() public {
defaultTest(
'AaveV3Ethereum_karpatkeyGhoGrowth_20241231',
AaveV3Ethereum.POOL,
address(proposal)
);
}

function test_stream() public {
uint256 backDatedAmount = (proposal.ACTUAL_STREAM_AMOUNT() *
(block.timestamp - proposal.STREAM_START_TIME())) / proposal.STREAM_DURATION();

uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();

executePayload(vm, address(proposal));

(
address sender,
address recipient,
uint256 deposit,
address tokenAddress,
uint256 startTime,
uint256 stopTime,
uint256 remainingBalance,

) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);

assertEq(sender, address(AaveV3Ethereum.COLLECTOR));
assertEq(recipient, proposal.KARPATKEY_SAFE());
assertEq(deposit, proposal.ACTUAL_STREAM_AMOUNT() - backDatedAmount);
assertEq(tokenAddress, AaveV3EthereumLidoAssets.GHO_A_TOKEN);
assertEq(startTime, block.timestamp);
assertEq(stopTime, proposal.STREAM_START_TIME() + proposal.STREAM_DURATION());
assertEq(remainingBalance, proposal.ACTUAL_STREAM_AMOUNT() - backDatedAmount);

// Can withdraw during stream
vm.warp(block.timestamp + 30 days);

uint256 collectorGhoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(
address(AaveV3Ethereum.COLLECTOR)
);
uint256 receiverGhoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(
proposal.KARPATKEY_SAFE()
);

vm.startPrank(proposal.KARPATKEY_SAFE());
AaveV3Ethereum.COLLECTOR.withdrawFromStream(
nextCollectorStreamID,
proposal.ACTUAL_STREAM_AMOUNT() / 9
);
vm.stopPrank();

assertGt(
IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(proposal.KARPATKEY_SAFE()),
receiverGhoBalanceBefore
);

assertLt(
IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
collectorGhoBalanceBefore
);

// Can withdraw post stream all remaining funds
vm.warp(block.timestamp + proposal.STREAM_DURATION());

(, , , , , , uint256 remaining, ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);

vm.startPrank(proposal.KARPATKEY_SAFE());
AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, remaining);
vm.stopPrank();

assertEq(
IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(proposal.KARPATKEY_SAFE()),
receiverGhoBalanceBefore + proposal.ACTUAL_STREAM_AMOUNT() - backDatedAmount
);
}
}
16 changes: 16 additions & 0 deletions src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import {ConfigFile} from '../../generator/types';
export const config: ConfigFile = {
rootOptions: {
pools: ['AaveV3Ethereum'],
title: 'karpatkey Gho Growth Service Provider',
shortName: 'karpatkeyGhoGrowthServiceProvider',
date: '20241231',
author: 'karpatkey',
discussion:
' https://governance.aave.com/t/arfc-karpatkey-as-gho-growth-service-provider/20206',
snapshot:
'https://snapshot.box/#/s:aave.eth/proposal/0x87585d9dcb104d2946ca2def6bcf57708480fafc5e310de4850dc2fbe1820893',
votingNetwork: 'POLYGON',
},
poolOptions: {AaveV3Ethereum: {configs: {}, cache: {blockNumber: 21524445}}},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: "Funding Proposal: karpatkey as GHO Growth Service Provider"
author: "karpatkey"
discussions: https://governance.aave.com/t/arfc-karpatkey-as-gho-growth-service-provider/20206
snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x87585d9dcb104d2946ca2def6bcf57708480fafc5e310de4850dc2fbe1820893
---

## Simple Summary

The AIP proposes appointing karpatkey as a service provider dedicated to drive the growth of GHO for the following 6 months, with an initial focus on opportunities within the Gnosis Chain while also expanding efforts to other chains.

## Motivation

Over the past 12 months, karpatkey has been pleased to have supported the AaveDAO in improving treasury management practices and GHO adoption (see Phase 1 and Phase 2 for more details). These efforts have been a significant success, and will continue, with the deployment of the Finance Steward upcoming features. That said, by focusing on increasing GHO’s adoption, we believe karpatkey can provide more value to the Aave ecosystem.

The stablecoin ecosystem is one of the most dynamic and competitive sectors in the DeFi landscape, and the accelerating adoption of GHO represents a unique opportunity for Aave DAO to solidify its position as a leader in this space. Since its deployment over a year ago, GHO achieved a notable milestone of a 180M supply across mainnet and Arbitrum, market depth in most reputable DEXes with total liquidity ranging between $30M and $50M. This success is a testament to the strength of Aave’s products, user base and brand.

While GHO’s initial growth has been remarkable, the stablecoin market is evolving rapidly. The demand for reliable, decentralised stablecoins continues to grow, and GHO is well-positioned to capture this market—provided we continue to expand its utility, adoption, and ecosystem integrations proactively.

karpatkey has the tools and resources to capitalise on the range of opportunities GHO presents. With a proven track record in DeFi innovation and strong partnerships with other DAOs, we are excited to present our new 6-month proposal to Aave DAO, focused on the areas where we can contribute most.

To drive proactive growth and expansion of GHO across multiple blockchains, we are proposing a phased mandate that includes tailored strategies for each ecosystem, with the initial phase prioritizing the deployment and adoption of GHO on the Gnosis Chain. With an Aave instance holding $100M, Gnosis Chain currently has a total value locked of $410M and a thriving environment of stablecoins, which includes Gnosis Pay, Monerium’s e-money EURe and other RWAs. We plan to focus primarily on opportunities where both AaveDAO and GnosisDAO can mutually benefit from a vibrant GHO ecosystem on Gnosis Chain, taking advantage of karpatkey’s unique position supporting both the DeFi ecosystems of both DAOs.

## Terms

- 6-month engagement, December 23th 2024 to June 21th 2025;
- $250k, streamed linearly throughout the engagement;

## Specification

Create the following stream allowing TokenLogic to withdraw aEthLidoGHO from the Prime instance.

- Recipient: karpatkey
- Stream: 250K aEthLidoGHO over 180 days
- Address: `0x58e6c7ab55aa9012eacca16d1ed4c15795669e1c`

The stream shall commence the next block from when the previous stream finishes.

## References

- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.sol)
- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.t.sol)
[Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x87585d9dcb104d2946ca2def6bcf57708480fafc5e310de4850dc2fbe1820893)
- [Discussion](https://governance.aave.com/t/arfc-karpatkey-as-gho-growth-service-provider/20206)

## Copyright

Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol';
import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol';
import {AaveV3Ethereum_karpatkeyGhoGrowth_20241231} from './AaveV3Ethereum_karpatkeyGhoGrowth_20241231.sol';

/**
* @dev Deploy Ethereum
* deploy-command: make deploy-ledger contract=src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.s.sol:DeployEthereum chain=mainnet
* verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.s.sol/1/run-latest.json
*/
contract DeployEthereum is EthereumScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
type(AaveV3Ethereum_karpatkeyGhoGrowth_20241231).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/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/AaveV3Ethereum_karpatkeyGhoGrowth_20241231.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_karpatkeyGhoGrowth_20241231).creationCode
);
payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);

// create proposal
vm.startBroadcast();
GovV3Helpers.createProposal(
vm,
payloads,
GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
GovV3Helpers.ipfsHashFile(
vm,
'src/20241231_AaveV3Ethereum_karpatkeyGhoGrowth/karpatkeyGhoGrowth.md'
)
);
}
}