diff --git a/.gitmodules b/.gitmodules index 07ae2fbf3..982b3f5a4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,6 +2,3 @@ path = lib/aave-helpers url = https://github.com/bgd-labs/aave-helpers branch = main -[submodule "lib/aave-umbrella"] - path = lib/aave-umbrella - url = https://github.com/aave-dao/aave-umbrella diff --git a/Makefile b/Makefile index a209f8c29..938cd4d84 100644 --- a/Makefile +++ b/Makefile @@ -12,9 +12,9 @@ test :; forge test -vvv test-contract :; forge test --match-contract ${filter} -vv # Deploy -deploy-ledger-zk :; FOUNDRY_PROFILE=zksync forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast) -deploy-ledger :; FOUNDRY_PROFILE=deploy forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast) -deploy-pk :; FOUNDRY_PROFILE=deploy forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --private-key ${PRIVATE_KEY} --verify -vvvv --slow --broadcast) +deploy-ledger-zk :; FOUNDRY_PROFILE=zksync forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x73AF3bcf944a6559933396c1577B257e2054D935 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast --verifier etherscan) +deploy-ledger :; forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x73AF3bcf944a6559933396c1577B257e2054D935 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast) $(if ${legacy}, --legacy, ) +deploy-pk :; forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x73AF3bcf944a6559933396c1577B257e2054D935 -vvvv, --private-key ${PRIVATE_KEY} --verify -vvvv --slow --broadcast) # Utilities download :; cast etherscan-source --chain ${chain} -d src/etherscan/${chain}_${address} ${address} diff --git a/diffs/AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md b/diffs/AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md new file mode 100644 index 000000000..bb54955c2 --- /dev/null +++ b/diffs/AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Avalanche_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md @@ -0,0 +1,77 @@ +## Reserve changes + +### Reserve altered + +#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowtrace.io/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowtrace.io/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowtrace.io/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowtrace.io/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +## Raw diff + +```json +{ + "reserves": { + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": { + "isFrozen": { + "from": false, + "to": true + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md b/diffs/AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md new file mode 100644 index 000000000..393d27c67 --- /dev/null +++ b/diffs/AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_before_AaveV2Polygon_AaveV2NonEthereumPoolsNextDeprecationSteps_20250626_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WPOL ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) + +| description | value before | value after | +| --- | --- | --- | +| isFrozen | false | true | + + +## Raw diff + +```json +{ + "reserves": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "isFrozen": { + "from": false, + "to": true + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "isFrozen": { + "from": false, + "to": true + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_AaveRobotMaintenance_20250330_before_AaveV3Arbitrum_AaveRobotMaintenance_20250330_after.md b/diffs/AaveV3Arbitrum_AaveRobotMaintenance_20250330_before_AaveV3Arbitrum_AaveRobotMaintenance_20250330_after.md new file mode 100644 index 000000000..1b89810d0 --- /dev/null +++ b/diffs/AaveV3Arbitrum_AaveRobotMaintenance_20250330_before_AaveV3Arbitrum_AaveRobotMaintenance_20250330_after.md @@ -0,0 +1,252 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0xf97f4df75117a78c1A5a0DBb814Af92458539FB4](https://arbiscan.io/address/0xf97f4df75117a78c1A5a0DBb814Af92458539FB4)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 1,502,829.4850 LINK [1502829485081414749767615] | 1,502,795.4850 LINK [1502795485081414749767615] | +| virtualBalance | 1,502,829.4828 LINK [1502829482809123903659255] | 1,502,795.4828 LINK [1502795482809123903659255] | + + +## Raw diff + +```json +{ + "reserves": { + "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4": { + "aTokenUnderlyingBalance": { + "from": "1502829485081414749767615", + "to": "1502795485081414749767615" + }, + "virtualBalance": { + "from": "1502829482809123903659255", + "to": "1502795482809123903659255" + } + } + }, + "raw": { + "0x191c10aa4af7c30e871e70c95db0e4eb77237530": { + "label": "AaveV3Arbitrum.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x000000000000000000000000000000000000000000014f32b6cf2f77b292995f", + "newValue": "0x000000000000000000000000000000000000000000014f30e1392a79d3510282" + }, + "0x246d7438c5a99950099e92f45a9221b48a1cfd540bed5c21d95ec94fe3175064": { + "previousValue": "0x00000000033f28be59196fcd6185c1200000000000000118b3b183b269dee991", + "newValue": "0x00000000033f28d2872d41fbf8a6f4b50000000000000116de1b7eb48a9d52b4" + }, + "0x899e1caaa390f20ec2d52993cc326c8e9214843553c6f3f2f7dc7bc150307265": { + "previousValue": "0x00000000033e60132e02681af231fc9700000000000000000000000000000000", + "newValue": "0x00000000033f28d2872d41fbf8a6f4b500000000000000000000000000000000" + } + } + }, + "0x37d9dc70bfcd8bc77ec2858836b923c560e891d1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000c5", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000c5" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x14d3607c000000090000028200cdfe6000989680000000019e28192abc21ef33", + "newValue": "0x14d3607c000000090000028300cdfe6000989680000000019e28192abc21ef33" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x000000000000000000000000000000000000000000000121c5f5537c9b25e688", + "newValue": "0x0000000000000000000000000000000000000000000001239dcd9758d66de688" + }, + "0x1ecda947d4fe5f9760d0575f62bd5dc0a5bf537e0a0f4325983e346c0ef339c4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000c5" + }, + "0x1f1e3db06036ec5f6a7294462402173671a519b209f65150c667e8ac015b1f80": { + "previousValue": "0x000000cfdfcfb9d173a1777371fe9d15e600ccc9b81ab8ffffffff000f424000", + "newValue": "0x000000cfdfcfb9d173a1777371fe9d15e600ccc9b81ab8152c4440000f424000" + }, + "0x1f1e3db06036ec5f6a7294462402173671a519b209f65150c667e8ac015b1f81": { + "previousValue": "0x000000000e73849900000001e5b56d9e6bb2372b0000000000038cf176f9c8d5", + "newValue": "0x000000000e73849900000001e5b56d9e6bb2372b0000000000038cf176f9c8d5" + }, + "0x37f4ee75f3a471e6dabaaf43e9004b1b75c5a1bdfcffa704f5950a9517db555d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x382007716f0fc95f43841e3be1a2035ef555208025e84dfcfdb1e4397bcff36f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aee": { + "previousValue": "0x4bdfe585000000000000000000000000c2df786ad244b757216f2479c7d0367e", + "newValue": "0x7df8b50c0000000000000000000000002f9a6c3eca871af9ddbad8e5f66f3c9c" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b92": { + "previousValue": "0x7df8b50c0000000000000000000000002f9a6c3eca871af9ddbad8e5f66f3c9c", + "newValue": "0xfaf3a64100000000000000000000000060007f12e4b8ae97291f3c029d490751" + }, + "0x494ecffdef25b3499cd662f7aa0429800a6f3f23bbe5f1aac761d33856d16fc8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x4d0f808b33f31113391a1ad5b3c392ef3f200fe54c393f2bf4f72867e32f3471": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000c5", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000021" + }, + "0x8a783e4478029e474776f8d6d9041f4d82c471e77e172da9bc6699871b3397a7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000aa944ad95e51cb83c1f35faeedfc7d2c31b0bb4d" + }, + "0xb709eac9c7fdf8062f606c5a101fc4475f4f5d18bae7437917548cab86a0920f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000f1b90aa866f7a751549d639414bf7327c0d0206affffffff000f424000" + }, + "0xb709eac9c7fdf8062f606c5a101fc4475f4f5d18bae7437917548cab86a09210": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001d7d843dc3b480000000000000000000000000000" + }, + "0xfa2562e984eff391e1224ec331d0a1bb859b1a831d11c93f340c0cf2571948f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000021", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Arbitrum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x2859d83f3ac0b6030c43a15461b481b294a95afa24590070b4c0e64400b1f9bc": { + "previousValue": "0x0000000000005023eeec973566543a6300000000033f28d26a8fa1d55e510e3b", + "newValue": "0x0000000000005024cfef0508dffa0c5100000000033f28d2872d41fbf8a6f4b5" + }, + "0x2859d83f3ac0b6030c43a15461b481b294a95afa24590070b4c0e64400b1f9bd": { + "previousValue": "0x0000000000071888cb252a5087c0125000000000035b28ee7731b7ad4c145a49", + "newValue": "0x0000000000071892c140bb069966ef6c00000000035b28f115acf1b7ecfac531" + }, + "0x2859d83f3ac0b6030c43a15461b481b294a95afa24590070b4c0e64400b1f9be": { + "previousValue": "0x000000000000000000000100686bd8ee00000000000000000348a13f1181fa4b", + "newValue": "0x000000000000000000000100686bd99900000000000000000348a13f1181fa4b" + }, + "0x2859d83f3ac0b6030c43a15461b481b294a95afa24590070b4c0e64400b1f9c3": { + "previousValue": "0x0000000000013e3c8cac7b0c522c5cf7000000000000000002092dc639d8352b", + "newValue": "0x0000000000013e3ab4d4373016e45cf70000000000000000020c105ca29d2b45" + }, + "0x891ba8f07589a49027e33aaa5d57caf57d8253ad3ac94c2ab7dd8d1f415dd1a5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x86efbd0b6736bed994962f9797049422a3a8e8ad": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000267000003e802", + "newValue": "0x000000000000000000000000000000000000000000000000000268000003e802" + } + } + }, + "0x89644ca1bb8064760312ae4f03ea41b05da3637c": { + "label": "GovernanceV3Arbitrum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xb9c7405fdb60827a063770d15a9163cf3257eafb54d63ebc3245e8170763b9ae": { + "previousValue": "0x00686bd998000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bd998000000000003000000000000000000000000000000000000000000" + }, + "0xb9c7405fdb60827a063770d15a9163cf3257eafb54d63ebc3245e8170763b9af": { + "previousValue": "0x000000000000000000093a800000000000006899fe1900000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899fe19000000000000686bd999" + } + } + }, + "0xaa944ad95e51cb83c1f35faeedfc7d2c31b0bb4d": { + "label": "MiscArbitrum.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x1ecda947d4fe5f9760d0575f62bd5dc0a5bf537e0a0f4325983e346c0ef339c4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x4bdfe585000000000000000000000000c2df786ad244b757216f2479c7d0367e", + "newValue": "0xc3379a86000000000000000000000000fcbdfaa6e21f1c5bf87cac9dd5b6b852" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0xc3379a86000000000000000000000000fcbdfaa6e21f1c5bf87cac9dd5b6b852", + "newValue": "0xfaf3a64100000000000000000000000060007f12e4b8ae97291f3c029d490751" + }, + "0x897791a5655f5ec3dc6b1775bf97851f9b4fea135ebfde8e682d39e7c118c9ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0xb709eac9c7fdf8062f606c5a101fc4475f4f5d18bae7437917548cab86a0920f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000f01281a6dfde5506c5049c9bbf8c7e087b9bd4bf" + }, + "0xb709eac9c7fdf8062f606c5a101fc4475f4f5d18bae7437917548cab86a09210": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + }, + "0xfa2562e984eff391e1224ec331d0a1bb859b1a831d11c93f340c0cf2571948f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xf1b90aa866f7a751549d639414bf7327c0d0206a": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000037d9dc70bfcd8bc77ec2858836b923c560e891d1" + } + } + }, + "0xf97f4df75117a78c1a5a0dbb814af92458539fb4": { + "label": "AaveV3Arbitrum.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x188e75ad94ee561151988f60a4767fae5897a6063c666d8412f7e2d81bda7989": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3347fea6f3fdd826b4153deac8a7e711c198a00d25c498972c6519a68cf4e996": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x42d0a1298a5abb2ccb2078ebd39d39663c80f3fcd14c47de37b4f4b65adde5f9": { + "previousValue": "0x000000000000000000000000000000000000000000013e3c8cb48daf42e1c7bf", + "newValue": "0x000000000000000000000000000000000000000000013e3ab4dc49d30799c7bf" + }, + "0x4431fe8a45d6138eb361c8f04c1c9463eae0ed708f423c5cb2a60f9ff47e56cf": { + "previousValue": "0x000000000000000000000000000000000000000000000121c5f5537c9b25e688", + "newValue": "0x0000000000000000000000000000000000000000000001239dcd9758d66de688" + }, + "0x529ed493759a67c846fd499fbeac350c7fc90a9d323008df53f6729685ddd392": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd22e5232346cecad68da1056df517e37278dcb499484cde3a717f723d34639e0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfe9ba98bfe1811b21f5e09c9053cb1ffada19e2a2e93d54c9e75283fcd5a89ab": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_before_AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_after.md b/diffs/AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_before_AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_after.md new file mode 100644 index 000000000..f396711c7 --- /dev/null +++ b/diffs/AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_before_AaveV3Arbitrum_DeprecationOfLongTailAssets_20250715_after.md @@ -0,0 +1,142 @@ +## Reserve changes + +### Reserves altered + +#### LUSD ([0x93b346b6BC2548dA6A1E7d98E9a421B42541425b](https://arbiscan.io/address/0x93b346b6BC2548dA6A1E7d98E9a421B42541425b)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 20 % [2000] | 50 % [5000] | +| maxVariableBorrowRate | 55.5 % | 57.5 % | +| baseVariableBorrowRate | 0 % | 2 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=555000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=20000000000000000000000000&maxVariableBorrowRate=575000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": { + "reserveFactor": { + "from": 2000, + "to": 5000 + } + } + }, + "strategies": { + "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": { + "baseVariableBorrowRate": { + "from": "0", + "to": "20000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "555000000000000000000000000", + "to": "575000000000000000000000000" + } + } + }, + "raw": { + "0x118dfd5418890c0332042ab05173db4a2c1d283c": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x6b9240d7ade1f051aed76811ad8dd613b8df4c244b38ce53081de0fea8fec673": { + "previousValue": "0x006876836f000000000002000000000000000000000000000000000000000000", + "newValue": "0x006876836f000000000003000000000000000000000000000000000000000000" + }, + "0x6b9240d7ade1f051aed76811ad8dd613b8df4c244b38ce53081de0fea8fec674": { + "previousValue": "0x000000000000000000093a8000000000000068a4a7f000000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068a4a7f000000000000068768370" + } + } + }, + "0x1adb659ca7eaa45e42dcd257d09b963c5cfbb36f": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x429f16dba3b9e1900087cbaa7b50d38bc60fb73f": { + "label": "AaveV3Arbitrum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.EURS.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.MAI.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.USDCn.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.ARB.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.ezETH.INTEREST_RATE_STRATEGY, AaveV3Arbitrum.ASSETS.rsETH.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x0b802dd8ef10b7199d8583a067e6a339f2cdf2c4173b3505e7604a919519a9e8": { + "previousValue": "0x0000000000000000000000000000000000000000138800000226000000001f40", + "newValue": "0x0000000000000000000000000000000000000000138800000226000000c81f40" + } + } + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x55c53001d0df544c3a6d6fa7010e0b101b0ce7f5c4d0177061aa390617e35e85": { + "previousValue": "0x00000000001363b6e1d816515b60cecc00000000039ce420c063fb6ddaefb33f", + "newValue": "0x00000000001184c249ff8403744d212400000000039ce4a2760b6437898e4992" + }, + "0x55c53001d0df544c3a6d6fa7010e0b101b0ce7f5c4d0177061aa390617e35e86": { + "previousValue": "0x000000000025203012e45287293047e50000000003d853372376d60a7bbadb5f", + "newValue": "0x000000000035ab5db511352642d1aa4d0000000003d8543f753e1ba45f4c05c8" + }, + "0x55c53001d0df544c3a6d6fa7010e0b101b0ce7f5c4d0177061aa390617e35e87": { + "previousValue": "0x000000000000000000000b006876783100000000000000000243211d4f7bdab7", + "newValue": "0x000000000000000000000b006876837000000000000000000243211d4f7bdab7" + }, + "0x55c53001d0df544c3a6d6fa7010e0b101b0ce7f5c4d0177061aa390617e35e8c": { + "previousValue": "0x0000000000001947e9ca71bf712efe1600000000000000002a575ea8b43236b3", + "newValue": "0x0000000000001947e9ca71bf712efe1600000000000000002c9fecc0f3f25468" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Arbitrum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x8145edddf43f50276641b55bd3ad95944510021e": { + "label": "AaveV3Arbitrum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x89644ca1bb8064760312ae4f03ea41b05da3637c": { + "label": "GovernanceV3Arbitrum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Arbitrum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa8669021776bc142dfca87c21b4a52595bcbb40a": { + "label": "AaveV3Arbitrum.ASSETS.LUSD.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa9022f64f4e86f1c9f4c07b248caa06b0af915d9": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x55c53001d0df544c3a6d6fa7010e0b101b0ce7f5c4d0177061aa390617e35e84": { + "previousValue": "0x1000000000000000000000000000019d5480000fde8007d08512000000000000", + "newValue": "0x1000000000000000000000000000019d5480000fde8013888512000000000000" + } + } + }, + "0xa97684ead0e402dc232d5a977953df7ecbab3cdb": { + "label": "AaveV3Arbitrum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xff1137243698caa18ee364cc966cf0e02a4e6327": { + "label": "AaveV3Arbitrum.ACL_ADMIN, GovernanceV3Arbitrum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_July2025FundingUpdate_20250721_before_AaveV3Arbitrum_July2025FundingUpdate_20250721_after.md b/diffs/AaveV3Arbitrum_July2025FundingUpdate_20250721_before_AaveV3Arbitrum_July2025FundingUpdate_20250721_after.md new file mode 100644 index 000000000..7f17715a8 --- /dev/null +++ b/diffs/AaveV3Arbitrum_July2025FundingUpdate_20250721_before_AaveV3Arbitrum_July2025FundingUpdate_20250721_after.md @@ -0,0 +1,86 @@ +## Raw diff + +```json +{ + "raw": { + "0x0000000000000000000000000000000000000064": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000001466d", + "newValue": "0x000000000000000000000000000000000000000000000000000000000001466f" + } + } + }, + "0x096760f208390250649e3e8763348e783aef5562": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000004a50", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000004a51" + } + } + }, + "0x89644ca1bb8064760312ae4f03ea41b05da3637c": { + "label": "GovernanceV3Arbitrum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x95505a17747b834552dc9f252b9911e949b8ffdf7a51d678a6bd11af986b15de": { + "previousValue": "0x006881269f000000000002000000000000000000000000000000000000000000", + "newValue": "0x006881269f000000000003000000000000000000000000000000000000000000" + }, + "0x95505a17747b834552dc9f252b9911e949b8ffdf7a51d678a6bd11af986b15df": { + "previousValue": "0x000000000000000000093a8000000000000068af4b2000000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af4b20000000000000688126a0" + } + } + }, + "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1": { + "label": "AaveV3Arbitrum.ASSETS.DAI.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000001262af813d58fcc78b8ccd", + "newValue": "0x000000000000000000000000000000000000000000125edf4edb773378611520" + }, + "0x57e9ebe6ce9dfa97cd0e43850291319bbebea94a1ba2c5cbba6b78d8a5818f0e": { + "previousValue": "0x000000000000000000000000000000000000000000000217d8e851f6a7477636", + "newValue": "0x0000000000000000000000000000000000000000000003d03261e1c94f2a77ad" + }, + "0xd8d320cb2402b316182beb5ce39522545be898b0624142a908b38f2fdf1c7588": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xeef031566f07e03fd5c31f3ba822e743d3c8ffd3ef87019acaba847600beabd0": { + "previousValue": "0x0000000000000000000000000000000000000000000003d03261e1c94f2a77ad", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8": { + "label": "AaveV3Arbitrum.ASSETS.USDC.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000472c11dd2ee3", + "newValue": "0x000000000000000000000000000000000000000000000000000047281bc01412" + }, + "0x20cab5ee2df02c3b4ec852d89c5c008303c8be76aa80a96a7a4eb7dc49dac52d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3799ad664b4e47e06b1ecc6653f4a61352ac9d8629d566cd49297faddf73aca1": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000003f61d1ad1", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xaa96c5185a42c8041cdc5b63da641eb0b308ff83db6f7a92e955625985bfedd1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000606656156", + "newValue": "0x00000000000000000000000000000000000000000000000000000003f61d1ad1" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..c646577ce --- /dev/null +++ b/diffs/AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Arbitrum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,54 @@ +## Raw diff + +```json +{ + "raw": { + "0x365d47ced3d7eb6a9bdb3814aa23cc06b2d33ef8": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x78e494227227fa19e176dfa452edd5480daa518d2951fdcde18fb43c1a3f92d1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0x89644ca1bb8064760312ae4f03ea41b05da3637c": { + "label": "GovernanceV3Arbitrum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x3219ed562b3fd9188a49dd9a57bec5aecadcb61ea33f29053262442c210d825f": { + "previousValue": "0x006842cf77000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf77000000000003000000000000000000000000000000000000000000" + }, + "0x3219ed562b3fd9188a49dd9a57bec5aecadcb61ea33f29053262442c210d8260": { + "previousValue": "0x000000000000000000093a800000000000006870f3f800000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3f80000000000006842cf78" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Arbitrum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x1526ea4f1289a496e44bc20b6ef06ef501dded9bdef2efc8a18ffb22ee2d9fe1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x1bdcfa9bc2334e8fa1d908c61766cd476ba080ba511ab69ff1135e9858a726bb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb6f7a12f19fc88eb3ae3b93da2b194f6b79d5159a9a33e88877c84e6ce387f7c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd4a01fb09f74586330c34c21d4bd298c2fae45966d6afea9fd258412982b67ef": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_AaveRobotMaintenance_20250330_before_AaveV3Avalanche_AaveRobotMaintenance_20250330_after.md b/diffs/AaveV3Avalanche_AaveRobotMaintenance_20250330_before_AaveV3Avalanche_AaveRobotMaintenance_20250330_after.md new file mode 100644 index 000000000..a7b2e018c --- /dev/null +++ b/diffs/AaveV3Avalanche_AaveRobotMaintenance_20250330_before_AaveV3Avalanche_AaveRobotMaintenance_20250330_after.md @@ -0,0 +1,360 @@ +## Reserve changes + +### Reserves altered + +#### LINK.e ([0x5947BB275c521040051D82396192181b413227A3](https://snowtrace.io/address/0x5947BB275c521040051D82396192181b413227A3)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 184,657.8164 LINK.e [184657816478051257223228] | 184,615.8164 LINK.e [184615816478051257223228] | +| virtualBalance | 184,657.8164 LINK.e [184657816478051257223228] | 184,615.8164 LINK.e [184615816478051257223228] | + + +## Raw diff + +```json +{ + "reserves": { + "0x5947BB275c521040051D82396192181b413227A3": { + "aTokenUnderlyingBalance": { + "from": "184657816478051257223228", + "to": "184615816478051257223228" + }, + "virtualBalance": { + "from": "184657816478051257223228", + "to": "184615816478051257223228" + } + } + }, + "raw": { + "0x06d958772304e7220fc3e463756ce01ed0d24db2": { + "label": "MiscAvalanche.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + "0x28051b39ef84d9153c85621a0697aa029d2b54b302430e2f81b1ee06f4333e29": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002cf0fa5b36f0f89a5ea18f835d1375974a7720b8" + }, + "0x28051b39ef84d9153c85621a0697aa029d2b54b302430e2f81b1ee06f4333e2a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x566f74696e6720436861696e20526f626f740000000000000000000000000024" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0xe6a3494000000000000000000000000098271c406a2fef4e47fd1d1a24f442bc", + "newValue": "0xed964eac000000000000000000000000ad09289f84bf3ced540ae8048bf096e6" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1": { + "previousValue": "0xee900939000000000000000000000000ce9398d5751f6d2aee69c057f159eecc", + "newValue": "0x8264f0ef0000000000000000000000008e88fb5308bc69e7d86e4aa31d824d16" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2": { + "previousValue": "0xed964eac000000000000000000000000ad09289f84bf3ced540ae8048bf096e6", + "newValue": "0x1a57fb4e000000000000000000000000b9ba3aec3b3b162ef3a44a0f959a114e" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3": { + "previousValue": "0x8264f0ef0000000000000000000000008e88fb5308bc69e7d86e4aa31d824d16", + "newValue": "0x6d6aba88000000000000000000000000a895c8fa85679c4cf2ce2d8490e2f3fd" + }, + "0x626af360fbbc7adf41021f039a4fd8f05a81dc31e79b999fd48b867839f0ee2d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000043c6b39669355af93ddedc70e8eb44c226f09bfb" + }, + "0x626af360fbbc7adf41021f039a4fd8f05a81dc31e79b999fd48b867839f0ee2e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + }, + "0x85353c2e2ec8b5300a4eb8e2425e99e02afda25d954391bfdf9cadb91a8509b7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x8ae8d04d916c6b58a653ae2a62382dea1b339c2dd85d267e51a9648af511cdb8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000005", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0xb9f6690f85fe4f8d4907a411e27739918f3bcefac5f27423c7b705be7c090cf7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xe424d6bdd7ed8737610f144197fbb0fbcaca14121a304b1bc41276a6e3c32e07": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + "0xf1efd803a7b3ab144453649a42e5d0aae3d20d411aed103729e05ce8b58638d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfc49b3a20016994cba7c6fe359a540a8d043808b9023f895bcb37e1e551c37ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005" + } + } + }, + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xca1941ffd2876354dca11a76468fb85895321380bff6312dcbd61b110f22031e": { + "previousValue": "0x00686bd1fe000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bd1fe000000000003000000000000000000000000000000000000000000" + }, + "0xca1941ffd2876354dca11a76468fb85895321380bff6312dcbd61b110f22031f": { + "previousValue": "0x000000000000000000093a800000000000006899f67f00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899f67f000000000000686bd1ff" + } + } + }, + "0x191c10aa4af7c30e871e70c95db0e4eb77237530": { + "label": "AaveV3Avalanche.ASSETS.LINKe.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x000000000000000000000000000000000000000000002892a824d6836a5a541d", + "newValue": "0x00000000000000000000000000000000000000000000289062dc00e8d93db355" + }, + "0x345185c3b3b9e3b98b3726e9c0a2c52cef653155e912b0ef400e65977d9c23f2": { + "previousValue": "0x00000000033d6eb95b294395f39b49a4000000000000006b6104d5e113e5e608", + "newValue": "0x00000000033d6ec2958f0aead0d4832c00000000000000691bbc004682c94540" + }, + "0xedc7161985c377cc9bb961eabe0454044d5d653b54bc635dd11bfb6411bea54e": { + "previousValue": "0x00000000033d666c8d8b4cf5c4b1f4fa00000000000000000000000000000000", + "newValue": "0x00000000033d6ec2958f0aead0d4832c00000000000000000000000000000000" + } + } + }, + "0x5947bb275c521040051d82396192181b413227a3": { + "label": "AaveV3Avalanche.ASSETS.LINKe.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x35ba30831a2953c5778d4231dcc2df25bafd8ca8797ad2e4e63246cf48f52475": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3ccf04a97074b4a43dee53fdb8da1642db9542d605641d709ff64a23000e3def": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x4999990bf8de98c9eef067560197871c9f878ddc05190b665e42d0453e3937cf": { + "previousValue": "0x000000000000000000000000000000000000000000000022b5803172c33a528c", + "newValue": "0x000000000000000000000000000000000000000000000024fc5e2aec39a2528c" + }, + "0x617d02fc4ff2f421b8c5a2d7328f541c16344c5b3af0488185c14cc6d8ee9039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x98e5eeb8332143b1c36cdd2376da5ab9dd58b9e7992946963d7c4c8c8e3eec73": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9fbb886754b80c490a3428f7ef796ef659cf6513fdc74f3409accf0f48cc6556": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa9f91410016967625770abe48f9303b10d3a651f0fa72aa0c9237cc3a97e8044": { + "previousValue": "0x00000000000000000000000000000000000000000000271a51fe7fbecebb083c", + "newValue": "0x0000000000000000000000000000000000000000000027180b2086455853083c" + }, + "0xb2ecd71ffb75946d84a0c96669aa576606b26bdd7fe57ed7c1165f38564dfcc4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xbc307da995f75fd3633995447b1d4eb991c38f1ab229751c1bbfb5f82f9241b3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x5cb7b29e621810ce9a04bee137f8427935795d00": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x00000000000000000000000000000000000000000000000000004d000001f402", + "newValue": "0x00000000000000000000000000000000000000000000000000004f000001f402" + } + } + }, + "0x6b36363a14a3324ca014bc97633bacf2c38d0a82": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007f00a3cd4590009c349192510d51f8e6312e08cb" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Avalanche.POOL", + "balanceDiff": null, + "stateDiff": { + "0x25a922d75e2aaab8592dc46a8370195c26f61c233dc944290b27aa0dbd9ef70c": { + "previousValue": "0x00000000000027c15bf540bb48fba77000000000033d6eb6ed2f7c3fc119cca0", + "newValue": "0x00000000000027c5f20ff77046c386f600000000033d6ec2958f0aead0d4832c" + }, + "0x25a922d75e2aaab8592dc46a8370195c26f61c233dc944290b27aa0dbd9ef70d": { + "previousValue": "0x000000000004ff6eb0ed1e7554e4a0a6000000000351e1dd6bb0a52ccc7a8ff4", + "newValue": "0x000000000004ffb87bc9c4d253de88d1000000000351e35dd92b1b858ae792ff" + }, + "0x25a922d75e2aaab8592dc46a8370195c26f61c233dc944290b27aa0dbd9ef70e": { + "previousValue": "0x000000000000000000000100686b4546000000000000000016a8ab62cf24c0e1", + "newValue": "0x000000000000000000000100686bd1ff000000000000000016a8ab62cf24c0e1" + }, + "0x25a922d75e2aaab8592dc46a8370195c26f61c233dc944290b27aa0dbd9ef713": { + "previousValue": "0x000000000000271a51fe7fbecebb083c00000000000000000000000000000000", + "newValue": "0x00000000000027180b2086455853083c000000000000000000247f104074ac51" + }, + "0x2f92f15917a91d013109f79a874ae6c27f2c5a42c9038c89f570c0f78a466474": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x7f00a3cd4590009c349192510d51f8e6312e08cb": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001f", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001f" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x03d359020000000900000051004c4b4000989680000000002ff252b6955ed0b0", + "newValue": "0x03d359020000000900000053004c4b4000989680000000002ff252b6955ed0b0" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x000000000000000000000000000000000000000000000022b5803172c33a528c", + "newValue": "0x000000000000000000000000000000000000000000000024fc5e2aec39a2528c" + }, + "0x0f2752ec6d171f24553527e21fff8799a13a23d927f8f4c35d7a4d7cbc395bcc": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001e", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000013" + }, + "0x13eb4d013d89a37e1f22b4d2416658e196aea3fdfd87dbb6de72d35f5533759c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000006d958772304e7220fc3e463756ce01ed0d24db2" + }, + "0x203fe7d1c7cd23f61a48673a51cfb2926deca388055f8a07d7008b72313ff995": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001f", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000016" + }, + "0x28051b39ef84d9153c85621a0697aa029d2b54b302430e2f81b1ee06f4333e29": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000fad8010cbe80a8d18df062a96db7b94363127686ffffffff004c4b4000" + }, + "0x28051b39ef84d9153c85621a0697aa029d2b54b302430e2f81b1ee06f4333e2a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001bc16d674ec800000000000000000000000000000" + }, + "0x28182a5c45a12e0e49421ef8ca06cd1bcab7f43850b5ab8fa95b07ad2fa09a25": { + "previousValue": "0x0000002adc86cd5360f4ffa38a64fd60eb7faec3498186ffffffff000f424000", + "newValue": "0x0000002adc86cd5360f4ffa38a64fd60eb7faec349818603e12172000f424000" + }, + "0x28182a5c45a12e0e49421ef8ca06cd1bcab7f43850b5ab8fa95b07ad2fa09a26": { + "previousValue": "0x0000000002f1d58d0000000115032d24f330877100000000008b18e4209f788f", + "newValue": "0x0000000002f1d58d0000000115032d24f330877100000000008b18e4209f788f" + }, + "0x3385ccd86fc9de00b93ac7d94a74bf5ac00c39ee4aeadb73699833e4bad7202c": { + "previousValue": "0x000000b5b9b66451f6db6a397a5c3a052eb7308d10e6d9ffffffff004c4b4000", + "newValue": "0x000000b5b9b66451f6db6a397a5c3a052eb7308d10e6d903e12172004c4b4000" + }, + "0x3385ccd86fc9de00b93ac7d94a74bf5ac00c39ee4aeadb73699833e4bad7202d": { + "previousValue": "0x00000000000000000000000270801d946c940000000000000000000000000000", + "newValue": "0x00000000000000000000000270801d946c940000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ae0": { + "previousValue": "0xe6a3494000000000000000000000000098271c406a2fef4e47fd1d1a24f442bc", + "newValue": "0xe805b451c35644dbcd680a3cf0376ec5a9eae0a87fb4d4b834c0fdaaae47f856" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ae3": { + "previousValue": "0xee900939000000000000000000000000ce9398d5751f6d2aee69c057f159eecc", + "newValue": "0x81d6c3dc00000000000000000000000021663370f80669bb56dde7b2179837d3" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aeb": { + "previousValue": "0xe805b451c35644dbcd680a3cf0376ec5a9eae0a87fb4d4b834c0fdaaae47f856", + "newValue": "0x1a57fb4e000000000000000000000000b9ba3aec3b3b162ef3a44a0f959a114e" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aec": { + "previousValue": "0x81d6c3dc00000000000000000000000021663370f80669bb56dde7b2179837d3", + "newValue": "0x6d6aba88000000000000000000000000a895c8fa85679c4cf2ce2d8490e2f3fd" + }, + "0x484dbaca3a816ebf4eb1320e2b18d83cee44cdf46c7935a48b85154317d0a70c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000006d958772304e7220fc3e463756ce01ed0d24db2" + }, + "0x5f95c033fc81a4f3711894e7698c44f1e8e5d9275122686cbc61dbbf8f19187f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x626af360fbbc7adf41021f039a4fd8f05a81dc31e79b999fd48b867839f0ee2d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000006b36363a14a3324ca014bc97633bacf2c38d0a82ffffffff000f424000" + }, + "0x626af360fbbc7adf41021f039a4fd8f05a81dc31e79b999fd48b867839f0ee2e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008ac7230489e80000000000000000000000000000" + }, + "0x653099ee93854e454e918cdd69f6cb21e9db2a12e661c22e7799b36c4d4d14fe": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7fe6fe6f9b35688536457deb813eb4b1f8b98dec333f124aa511c3e42e8ba55a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xab8c9e5fcc92d74b5ef487c752ea066a515ae1b98b51d9e27da3134f9679f174": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb9f6690f85fe4f8d4907a411e27739918f3bcefac5f27423c7b705be7c090cf7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000013", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xe424d6bdd7ed8737610f144197fbb0fbcaca14121a304b1bc41276a6e3c32e07": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001f" + }, + "0xe98ecad4f0b8712aaa3efb3253ac9f84f9d2ab9b47a0d6ad4eef2154fa7f3bca": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xf1efd803a7b3ab144453649a42e5d0aae3d20d411aed103729e05ce8b58638d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000016", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xf461337318e4e4fc4381221a7375539076a221920c20881be7b64c7f50aca4a8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfc49b3a20016994cba7c6fe359a540a8d043808b9023f895bcb37e1e551c37ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001e" + } + } + }, + "0x929ec64c34a17401f460460d4b9390518e5b473e": { + "label": "AaveV3Avalanche.DEFAULT_INCENTIVES_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x1890e4442dac34967587519d0eade5ae8882d7c1378a0433024bb19fe457f06b": { + "previousValue": "0x6428e1a0686b943c000000000000000000000000000000000005c073f9e173b9", + "newValue": "0x6428e1a0686bd1ff000000000000000000000000000000000005c073f9e173b9" + } + } + }, + "0xfad8010cbe80a8d18df062a96db7b94363127686": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007f00a3cd4590009c349192510d51f8e6312e08cb" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_GHOAvalancheLaunch_20250519_before_AaveV3Avalanche_GHOAvalancheLaunch_20250519_after.md b/diffs/AaveV3Avalanche_GHOAvalancheLaunch_20250519_before_AaveV3Avalanche_GHOAvalancheLaunch_20250519_after.md new file mode 100644 index 000000000..646698b68 --- /dev/null +++ b/diffs/AaveV3Avalanche_GHOAvalancheLaunch_20250519_before_AaveV3Avalanche_GHOAvalancheLaunch_20250519_after.md @@ -0,0 +1,288 @@ +## Raw diff + +```json +{ + "raw": { + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b10819": { + "previousValue": "0x006846b992000000000002000000000000000000000000000000000000000000", + "newValue": "0x006846b992000000000003000000000000000000000000000000000000000000" + }, + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b1081a": { + "previousValue": "0x000000000000000000093a800000000000006874de1300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006874de130000000000006846b993" + } + } + }, + "0x2ce400703dacc37b7edfa99d228b8e70a4d3831b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000003": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x3dbda3be5418b2217cfb7a8f3131c8a19573484e33d31f04090307bec9f4a718": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xbe2f5d4e470d773d640fa64679fcb2761d7af6b786ff9a4d2e118552224cd764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Avalanche.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xa468be17ccb04a81200cd39fdb6e4ec81e44858b0e7814526f2643905eae614f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0xc8df5d618c6a59cc6a311e96a39450381001464f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b057": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003c06dce358add17aaf230f2234bccc4afd50d090" + }, + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b058": { + "previousValue": "0x0000000000000000000000003c06dce358add17aaf230f2234bccc4afd50d090", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b059": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + } + } + }, + "0xde6539018b095353a40753dc54c91c68c9487d4e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x000000000000000000003c06dce358add17aaf230f2234bccc4afd50d0900001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003c06dce358add17aaf230f2234bccc4afd50d090" + }, + "0x0000000000000000000000000000000000000000000000000000000000000005": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000009": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000020fd5f3fcac8883a3a0a2bbcd658a2d2c6efa6b6" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000045849994fc9c7b15" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000044ae84d8e9a37444" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000dda641cfe44aff82" + }, + "0x1562a759f38dadd687c76a66b280b167a6625aa5c9dc9ab890f26b5ebb953db7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4022ffcbcc105342b5616796d3f4b6a3b8d846ffa35e402b44080d7804f6f92a" + }, + "0x156cfad9a365e7dbe727f3555339199a5f245c2b2aa30aaa0a7d0108c4bfe3f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x1b93a487e9618b94b9c2582403f62f37366b935fb16b5662f095ef8d4dc9f2f9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x2e1d28cbd79909ab3b781a3b6ed36308538ed5e921eff761e217374e33e3d5e1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x570ba59651bc4978d5dd0af8080856f5a828ccc4c9701178b8e71a42644ae7c5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007dff72693f6a4149b17e7c6314655f6a9f7c8b33" + }, + "0x64813f543e9e6d0745c3a3af9a3c60e2498e805c8ed7cfabec0a723971f1cd37": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xda04a948b3ded5b8c007440e09d0c5fbf733e665881cdda1263ce39a086d3c5c" + }, + "0x7712a94e2d170ad3817db8830681040cb744b9d7bbeb7f1b4e68631c4ecb54d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006bb7a212910682dcfdbd5bcbb3e28fb4e8da10ee" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa620": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x94e3ca688295912fbfc9edffe530980233cf98e49aaaa8ed0a1ed40e46d347f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x975100a3a7525219458f095aea06e943da1f3a875c175269c7e08b138b296af9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x9e623807eecacc367291c7c35b49ec61a342551b4603ac4258a7598ad0a02bff": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xb2b2c0e7786a207a00d4469ca0825637c16b0d402fea95dfe976dade25f0cf98": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x05dda1dc0cfac7d1b238dc7bfb2035432cb17cb970ea6eccfed7c97d5e6cd7f1" + }, + "0xc0cc08974de25f30bc8e557411378c89328786c54ed03dc7a3f682c7b56a6013": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000006179f7c1be40863405f374e7f5f8806c728660a" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fa": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xcb90903d4a6548bec3676fcffdbefe0e301ee549556b5570a325b815e7271c9e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041516": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041517": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041518": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000016846b9930000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041519": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be06804151a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be06804151b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xe08cacc565c769c614e476d4ccf4c6029add84095117a2b614dc884c00913837": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000040d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0xebcbba45421961a613aa8525f049792af76b4a3b9c8cd725fff0451a22d8172d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b94ab28c6869466a46a42aba834ca2b3cecca5eb" + }, + "0xf293d3be32695610199eb8e41697284defa313df24a10638ab2a31b95a75822b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xf50857c0e4d509ee4f4d061a2d9b5c36d92b756fd7b2b402118ad1344deec247": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000098217a06721ebf727f2c8d9ad7718ec28b7aae34" + }, + "0xffac741cc353cc8e05c1f8c328ec18e682b88bec50d99165f3501c0057e802f2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + } + } + }, + "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000009": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x3a946b6ab78094c33cec5e6f1e04962f05f1c858f31987bf3062fbec775d2811": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x3d3783cda24fabbb042ff81e529ac1e598995736f88c30c8eb65f588b72d62d0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + }, + "0x9b3b068d87884c5356c62511a016dad778c18fa41fabe618bdc9ba5a1465b7b0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000002116545850052128000000" + }, + "0x9b3b068d87884c5356c62511a016dad778c18fa41fabe618bdc9ba5a1465b7b1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4343495020546f6b656e506f6f6c2076312e352e31000000000000000000002a" + }, + "0x9f4820aca2eecc040ddfd92911ee95754aede9216d87c544df0eca90e342b7f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xb43fd7f9675fb15886ffa6fe74c541fe58448132827021317796b3e4cffb1a48": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_GHOAvalancheListing_20250519_before_AaveV3Avalanche_GHOAvalancheListing_20250519_after.md b/diffs/AaveV3Avalanche_GHOAvalancheListing_20250519_before_AaveV3Avalanche_GHOAvalancheListing_20250519_after.md new file mode 100644 index 000000000..8ee28db61 --- /dev/null +++ b/diffs/AaveV3Avalanche_GHOAvalancheListing_20250519_before_AaveV3Avalanche_GHOAvalancheListing_20250519_after.md @@ -0,0 +1,314 @@ +## Reserve changes + +### Reserves added + +#### GHO ([0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73](https://snowtrace.io/address/0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 10,000,000 GHO | +| borrowCap | 9,000,000 GHO | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12](https://snowtrace.io/address/0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12) | +| oracleDecimals | 8 | +| oracleLatestAnswer | 1 | +| usageAsCollateralEnabled | false | +| ltv | 0 % [0] | +| liquidationThreshold | 0 % [0] | +| liquidationBonus | 0 % | +| liquidationProtocolFee | 0 % [0] | +| reserveFactor | 10 % [1000] | +| aToken | [0xf611aEb5013fD2c0511c9CD55c7dc5C1140741A6](https://snowtrace.io/address/0xf611aEb5013fD2c0511c9CD55c7dc5C1140741A6) | +| variableDebtToken | [0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5](https://snowtrace.io/address/0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5) | +| borrowingEnabled | true | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da](https://snowtrace.io/address/0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da) | +| aTokenName | Aave Avalanche GHO | +| aTokenSymbol | aAvaGHO | +| aTokenUnderlyingBalance | 100 GHO [100000000000000000000] | +| id | 13 | +| isPaused | false | +| variableDebtTokenName | Aave Avalanche Variable Debt GHO | +| variableDebtTokenSymbol | variableDebtAvaGHO | +| virtualAccountingActive | true | +| virtualBalance | 100 GHO [100000000000000000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 55.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 5.5 % | +| variableRateSlope2 | 50 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=555000000000000000000000000) | + + +## Raw diff + +```json +{ + "reserves": { + "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73": { + "from": null, + "to": { + "aToken": "0xf611aEb5013fD2c0511c9CD55c7dc5C1140741A6", + "aTokenName": "Aave Avalanche GHO", + "aTokenSymbol": "aAvaGHO", + "aTokenUnderlyingBalance": "100000000000000000000", + "borrowCap": 9000000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "id": 13, + "interestRateStrategy": "0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 0, + "liquidationProtocolFee": 0, + "liquidationThreshold": 0, + "ltv": 0, + "oracle": "0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12", + "oracleDecimals": 8, + "oracleLatestAnswer": "100000000", + "reserveFactor": 1000, + "supplyCap": 10000000, + "symbol": "GHO", + "underlying": "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73", + "usageAsCollateralEnabled": false, + "variableDebtToken": "0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5", + "variableDebtTokenName": "Aave Avalanche Variable Debt GHO", + "variableDebtTokenSymbol": "variableDebtAvaGHO", + "virtualAccountingActive": true, + "virtualBalance": "100000000000000000000" + } + } + }, + "strategies": { + "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73": { + "from": null, + "to": { + "address": "0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "555000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "55000000000000000000000000", + "variableRateSlope2": "500000000000000000000000000" + } + } + }, + "raw": { + "0x048f2228d7bf6776f99ab50cb1b1eab4d1d4ca73": { + "label": "AaveV3Avalanche.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x445effbe224b90d291c0e58e0d97293cca096b7d5fb9542db95434fdc8c4f447": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0xdab8913b56a0decbb638fb31209495e26d94170b1e0e66511ce35f0e0f45be65": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7b9": { + "previousValue": "0x006846b992000000000002000000000000000000000000000000000000000000", + "newValue": "0x006846b992000000000003000000000000000000000000000000000000000000" + }, + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7ba": { + "previousValue": "0x000000000000000000093a800000000000006874de1300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006874de130000000000006846b993" + } + } + }, + "0x38d693ce1df5aadf7bc62595a37d667ad57922e5": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xbe87dfd4295b49b776ed5d3903f448d91c5405faf36a56e3a02deb5b9c868c16" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c654465627441766147484f0000000000000000000000000024" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000929ec64c34a17401f460460d4b9390518e5b473e12" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000a0d9c1e9e48ca30c8d8c3b5d69ff5dc1f6dffc24", + "label": "Implementation slot" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x41617665204176616c616e636865205661726961626c6520446562742047484f" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Avalanche.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000000d00000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000000e00000000000009c4" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b907": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x1000000000000000000000000000098968000089544003e88512000000000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b908": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b909": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000d006846b99300000000000000000000000000000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000f611aeb5013fd2c0511c9cd55c7dc5c1140741a6" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000038d693ce1df5aadf7bc62595a37d667ad57922e5" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ce1c5509f2f4d755aa64b8d135b15ec6f12a93da" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b910": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000056bc75e2d6310000000000000000000000000000000000000" + }, + "0xe0d1ddf44d1b58bbd9730933190424ec95782b7368eced03798ebf724278fb88": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + } + } + }, + "0xce1c5509f2f4d755aa64b8d135b15ec6f12a93da": { + "label": "AaveV3Avalanche.ASSETS.DAIe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.LINKe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WBTCe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WETHe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.USDt.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.AAVEe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WAVAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.sAVAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.MAI.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.BTCb.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.AUSD.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x48170ee2220a95ac755cb597c251a388b06c0c2dd4a2065caa0df18822fc5d3f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000138800000226000000002328" + } + } + }, + "0xebd36016b3ed09d4693ed4251c67bd858c3c7c9c": { + "label": "AaveV3Avalanche.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x48170ee2220a95ac755cb597c251a388b06c0c2dd4a2065caa0df18822fc5d3f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000360d8aa8f6b09b7bc57af34db2eb84dd87bf4d12" + } + } + }, + "0xf611aeb5013fd2c0511c9cd55c7dc5c1140741a6": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x41617665204176616c616e6368652047484f0000000000000000000000000024" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x6141766147484f0000000000000000000000000000000000000000000000000e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000929ec64c34a17401f460460d4b9390518e5b473e12" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xa09aae965f7a4b65612ae04e47050eda35a305582230eccbd073125881b121e6" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000005ba7fd868c40c16f7adfae6cf87121e13fc2f7a0" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0x1b0a8b1fefd7a38e70e752f3739d9dc1a8977de346f6e5fbc0ed7b9a89d5fe95": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000056bc75e2d63100000" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001e81af09001ad208bda68ff022544db2102a752d", + "label": "Implementation slot" + } + } + }, + "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x4094e29bb4d2ab497ae45116ccf81759169cb0b131773686f96d66585afe681a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x4e0eee1ab16000b85b96ed59133c153f097f2c84ce137d213965e19664ef098b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8606051a2c7b1bc9af1ea336e22b1d948307e046ffa3d0ff00cb8a09609a62e9": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..f8cf3d4fe --- /dev/null +++ b/diffs/AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Avalanche_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b10819": { + "previousValue": "0x006842cf74000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf74000000000003000000000000000000000000000000000000000000" + }, + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b1081a": { + "previousValue": "0x000000000000000000093a800000000000006870f3f500000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3f50000000000006842cf75" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Avalanche.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x00f42c8efbf79de6a9c7da49529e49b0e46af5a9031e49c39af4a07aef423809": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x1f1e809a639cb54e26fab00203674027f5ae6bdc7e7b95962039f5886b89c0cc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xcf3bf5bfaa20af1df5f8aea3f253ae371f33059bfb009c56e0d8ed3b7373cbc3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xeaa45c3707ac790ad8e6158aed804a0b70b582c728917d2f9846952e70e397cc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_TestVoteOnAvalanche_20250530_before_AaveV3Avalanche_TestVoteOnAvalanche_20250530_after.md b/diffs/AaveV3Avalanche_TestVoteOnAvalanche_20250530_before_AaveV3Avalanche_TestVoteOnAvalanche_20250530_after.md new file mode 100644 index 000000000..baa0dcb36 --- /dev/null +++ b/diffs/AaveV3Avalanche_TestVoteOnAvalanche_20250530_before_AaveV3Avalanche_TestVoteOnAvalanche_20250530_after.md @@ -0,0 +1,22 @@ +## Raw diff + +```json +{ + "raw": { + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b10819": { + "previousValue": "0x006839b95e000000000002000000000000000000000000000000000000000000", + "newValue": "0x006839b95e000000000003000000000000000000000000000000000000000000" + }, + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b1081a": { + "previousValue": "0x000000000000000000093a800000000000006867dddf00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006867dddf0000000000006839b95f" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_after.md b/diffs/AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_after.md new file mode 100644 index 000000000..ec92f192e --- /dev/null +++ b/diffs/AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Avalanche_WSAndBTCBInterestRateCurveOptimization_20250722_after.md @@ -0,0 +1,152 @@ +## Reserve changes + +### Reserves altered + +#### BTC.b ([0x152b9d0FdC40C096757F570A51E494bd4b943E50](https://snowtrace.io/address/0x152b9d0FdC40C096757F570A51E494bd4b943E50)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 20 % [2000] | 50 % [5000] | +| optimalUsageRatio | 45 % | 80 % | +| maxVariableBorrowRate | 307 % | 84 % | +| variableRateSlope1 | 7 % | 4 % | +| variableRateSlope2 | 300 % | 80 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=70000000000000000000000000&variableRateSlope2=3000000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=3070000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=40000000000000000000000000&variableRateSlope2=800000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=840000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0x152b9d0FdC40C096757F570A51E494bd4b943E50": { + "reserveFactor": { + "from": 2000, + "to": 5000 + } + } + }, + "strategies": { + "0x152b9d0FdC40C096757F570A51E494bd4b943E50": { + "maxVariableBorrowRate": { + "from": "3070000000000000000000000000", + "to": "840000000000000000000000000" + }, + "optimalUsageRatio": { + "from": "450000000000000000000000000", + "to": "800000000000000000000000000" + }, + "variableRateSlope1": { + "from": "70000000000000000000000000", + "to": "40000000000000000000000000" + }, + "variableRateSlope2": { + "from": "3000000000000000000000000000", + "to": "800000000000000000000000000" + } + } + }, + "raw": { + "0x1140cb7cafacc745771c2ea31e7b5c653c5d0b80": { + "label": "GovernanceV3Avalanche.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x1adb659ca7eaa45e42dcd257d09b963c5cfbb36f": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x20c10dd73b831f22f0230303c021188863c48937": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xb6daa7f42b4684a81e654680f3320ba6299809dbe8f4089d040ee5cdfce6b64d": { + "previousValue": "0x100000000000000000000003e800000177000000012c07d08508299a1d4c1b58", + "newValue": "0x100000000000000000000003e800000177000000012c13888508299a1d4c1b58" + } + } + }, + "0x3c06dce358add17aaf230f2234bccc4afd50d090": { + "label": "AaveV2Avalanche.POOL_ADMIN, AaveV3Avalanche.ACL_ADMIN, GovernanceV3Avalanche.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xb6daa7f42b4684a81e654680f3320ba6299809dbe8f4089d040ee5cdfce6b64e": { + "previousValue": "0x000000000000a141ba681ff3956d4f4a00000000033e1c2868bd8cb9d8f2056f", + "newValue": "0x000000000000206534641bfc677da27300000000033e1c287be8d5dda069aced" + }, + "0xb6daa7f42b4684a81e654680f3320ba6299809dbe8f4089d040ee5cdfce6b64f": { + "previousValue": "0x00000000000a10c7babc0e995cdf7480000000000351aac4b1d185e25e5fb2c1", + "newValue": "0x0000000000033c4033fae0211ff6e181000000000351aac5eb58424c4c80bb5a" + }, + "0xb6daa7f42b4684a81e654680f3320ba6299809dbe8f4089d040ee5cdfce6b650": { + "previousValue": "0x000000000000000000000b00687fc843000000000000000000000000000ad878", + "newValue": "0x000000000000000000000b00687fc87c000000000000000000000000000ad878" + }, + "0xb6daa7f42b4684a81e654680f3320ba6299809dbe8f4089d040ee5cdfce6b655": { + "previousValue": "0x000000000000000000000042d3d3b35c00000000000000000000000000012ef0", + "newValue": "0x000000000000000000000042d3d3b35c00000000000000000000000000012f5b" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5e06b10b3b9c3e1c0996d2544a35b9839be02922": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x2642cbfa046d8004053cd054e488df5b74257ae1e497e38d227e7244ef11bf2d": { + "previousValue": "0x00687fc87b000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687fc87b000000000003000000000000000000000000000000000000000000" + }, + "0x2642cbfa046d8004053cd054e488df5b74257ae1e497e38d227e7244ef11bf2e": { + "previousValue": "0x000000000000000000093a8000000000000068adecfc00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068adecfc000000000000687fc87c" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Avalanche.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x8145edddf43f50276641b55bd3ad95944510021e": { + "label": "AaveV3Avalanche.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Avalanche.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa8669021776bc142dfca87c21b4a52595bcbb40a": { + "label": "AaveV3Avalanche.ASSETS.BTCb.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa97684ead0e402dc232d5a977953df7ecbab3cdb": { + "label": "AaveV3Avalanche.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xce1c5509f2f4d755aa64b8d135b15ec6f12a93da": { + "label": "AaveV3Avalanche.ASSETS.DAIe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.LINKe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WBTCe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WETHe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.USDt.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.AAVEe.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.WAVAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.sAVAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.MAI.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.BTCb.INTEREST_RATE_STRATEGY, AaveV3Avalanche.ASSETS.AUSD.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x22bdd7992f40d9be13ecde867eccd0cd86e660d3ce9d00c860eb6ca5ef57c4d5": { + "previousValue": "0x00000000000000000000000000000000000000007530000002bc000000001194", + "newValue": "0x00000000000000000000000000000000000000001f4000000190000000001f40" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_AaveRobotMaintenance_Part1_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part1_20250330_after.md b/diffs/AaveV3BNB_AaveRobotMaintenance_Part1_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part1_20250330_after.md new file mode 100644 index 000000000..e4b3570b6 --- /dev/null +++ b/diffs/AaveV3BNB_AaveRobotMaintenance_Part1_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part1_20250330_after.md @@ -0,0 +1,78 @@ +## Raw diff + +```json +{ + "raw": { + "0x51bd3d6011dd0bd88ee1bea1a67be799a6a09d79": { + "label": "MiscBNB.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x2b7b4858000000000000000000000000fedcdd397c03bfe0e0ae1b2ec92565f7", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x93edea243ba19ab8f5ef4e0b9b57a8b867565d345c339a769783d499398f570f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xdc21e279934ff6721cadfdd112dafb3261f09a2c": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000105", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000104" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x03165c1b00000009000002e3004c4b4000989680000000011637778160979a9c", + "newValue": "0x03165c1b00000009000002e3004c4b4000989680000000011637778160979a9c" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b48": { + "previousValue": "0x2b7b4858000000000000000000000000fedcdd397c03bfe0e0ae1b2ec92565f7", + "newValue": "0xd76c6c460000000000000000000000008d46d28c548ec9a65c47c62e6f9a0b89" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bd2": { + "previousValue": "0xd76c6c460000000000000000000000008d46d28c548ec9a65c47c62e6f9a0b89", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x93edea243ba19ab8f5ef4e0b9b57a8b867565d345c339a769783d499398f570f": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000007b", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc4abb8c6e22d5c41b66360e06f966fb597fe2b68d24ca3471a50317ed4192145": { + "previousValue": "0x0000000b8b57f0e4a5609fbedf9e10c909655f618b601bffffffff000f424000", + "newValue": "0x0000000b8b57f0e4a5609fbedf9e10c909655f618b601b032bc9ec000f424000" + }, + "0xc4abb8c6e22d5c41b66360e06f966fb597fe2b68d24ca3471a50317ed4192146": { + "previousValue": "0x000000000000000000000000d02ab486cedc0000000000000000000000000000", + "newValue": "0x000000000000000000000000d02ab486cedc0000000000000000000000000000" + }, + "0xda4e23b443e587cee36b0eb91493d85d3562e65cf44afeb91e1ecac6946fb6db": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000105", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000007b" + } + } + }, + "0xe5ef2dd06755a97e975f7e282f828224f2c3e627": { + "label": "GovernanceV3BNB.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xa7d0f7195d52522be008ca0e9c182cb8d5cdec7c4327b16f8f80417732546566": { + "previousValue": "0x00686bdac6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bdac6000000000003000000000000000000000000000000000000000000" + }, + "0xa7d0f7195d52522be008ca0e9c182cb8d5cdec7c4327b16f8f80417732546567": { + "previousValue": "0x000000000000000000093a800000000000006899ff4700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899ff47000000000000686bdac7" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_AaveRobotMaintenance_Part2_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part2_20250330_after.md b/diffs/AaveV3BNB_AaveRobotMaintenance_Part2_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part2_20250330_after.md new file mode 100644 index 000000000..d79d47914 --- /dev/null +++ b/diffs/AaveV3BNB_AaveRobotMaintenance_Part2_20250330_before_AaveV3BNB_AaveRobotMaintenance_Part2_20250330_after.md @@ -0,0 +1,152 @@ +## Raw diff + +```json +{ + "raw": { + "0x404460c6a5ede2d891e8297795264fde62adbb75": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0723428b97e0ae67aced5aaa6a5450b0b79124a3c3944da27efcb0e473bff69f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x179687b5921aea4f1eceb9caa592429da518d007139bdfacc6ea1f9fc42ca078": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x358fd0ae8f575dd1a0f285466132c4a5ad981a06442642d4a7e9b200e7ef4f9b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x51b9143786ece9bcf814d62735871b17323a3b57fa2d7a06e9d7cfe3f6a21c78": { + "previousValue": "0x00000000000000000000000000000000000000000000027ecb6fabfb5a19fb61", + "newValue": "0x00000000000000000000000000000000000000000000027f9a371b09cb6bfb61" + }, + "0x861bba5279fcf393ca3151a62f89690763fe0ce3cb10280785d2be39c28f1fee": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa0358956cd8f71032b8ed7f2f64f7a1979ffc56707354e540516c86d0f7cc57d": { + "previousValue": "0x000000000000000000000000000000000000000000000000d02ab486cedc0000", + "newValue": "0x000000000000000000000000000000000000000000000000016345785d8a0000" + }, + "0xe2c930b423e3d3174d9833587eb07f9cb1ce2dc87e889229ebf6ce3b27ee5648": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x51bd3d6011dd0bd88ee1bea1a67be799a6a09d79": { + "label": "MiscBNB.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0x3d769198ef64c347101415f5796721f2ac73a18e3e11b79568bb926120e700d0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009062f78b631f33d24ed058cbc116a653452ea82a" + }, + "0x3d769198ef64c347101415f5796721f2ac73a18e3e11b79568bb926120e700d1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x91ce3e0d0000000000000000000000005c4565d76f4fe6cc676fc358b8e8a7fa" + }, + "0xc779993d3d9d3c8448c0c79ed355ce45c177643e43927386fa2d4e576cd65ccc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + } + } + }, + "0xdc21e279934ff6721cadfdd112dafb3261f09a2c": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000104", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000105" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x03165c1b00000009000002e3004c4b4000989680000000011637778160979a9c", + "newValue": "0x03165c1b00000009000002e4004c4b4000989680000000011637778160979a9c" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x00000000000000000000000000000000000000000000027ecb6fabfb5a19fb61", + "newValue": "0x00000000000000000000000000000000000000000000027f9a371b09cb6bfb61" + }, + "0x166d1f7246e806ec57e111fc98fea0c763df5fe992e3110333cf2d724daa8702": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000051bd3d6011dd0bd88ee1bea1a67be799a6a09d79" + }, + "0x3716705b6df1ebc35637f85c0bf0f24fc38923cbe1fea7d13ea14f32dca0b68d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3d769198ef64c347101415f5796721f2ac73a18e3e11b79568bb926120e700d0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000fb16c3cb13e6abfe6a4dbb058646bba573114a54ffffffff000f424000" + }, + "0x3d769198ef64c347101415f5796721f2ac73a18e3e11b79568bb926120e700d1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000cec76f0e71520000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bd2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x91ce3e0d0000000000000000000000005c4565d76f4fe6cc676fc358b8e8a7fa" + }, + "0x58a1aa722487ad4e723f82723076ca729fd396c20fc2ab3d7d36c9b1c032f07a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7e2546041aff62ea0ccc6d884958661a9002908b607cb8576453d46a20e049e0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc779993d3d9d3c8448c0c79ed355ce45c177643e43927386fa2d4e576cd65ccc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000105" + } + } + }, + "0xe5ef2dd06755a97e975f7e282f828224f2c3e627": { + "label": "GovernanceV3BNB.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8a3a0b6f6fa9438554c4aa5bdaf7838f6c90507836aabb33d6ebaeb414e248f9": { + "previousValue": "0x00686bdac6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bdac6000000000003000000000000000000000000000000000000000000" + }, + "0x8a3a0b6f6fa9438554c4aa5bdaf7838f6c90507836aabb33d6ebaeb414e248fa": { + "previousValue": "0x000000000000000000093a800000000000006899ff4700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899ff47000000000000686bdac7" + } + } + }, + "0xf671f60bcc964b309d22424886ff202807381b32": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x0000000000000000000000000000000000000000000000000002de000003e802", + "newValue": "0x0000000000000000000000000000000000000000000000000002df000003e802" + } + } + }, + "0xfb16c3cb13e6abfe6a4dbb058646bba573114a54": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000dc21e279934ff6721cadfdd112dafb3261f09a2c" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md b/diffs/AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md new file mode 100644 index 000000000..de85e01ed --- /dev/null +++ b/diffs/AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3BNB_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md @@ -0,0 +1,158 @@ +## Raw diff + +```json +{ + "raw": { + "0x2d97f8fa96886fd923c065f5457f9ddd494e3877": { + "label": "AaveV3BNB.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xc824c85b100927cf22ad0c1d5048b530a1d82553e3335bfb3de1f58d5673f1fe": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0x404460c6a5ede2d891e8297795264fde62adbb75": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0723428b97e0ae67aced5aaa6a5450b0b79124a3c3944da27efcb0e473bff69f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x179687b5921aea4f1eceb9caa592429da518d007139bdfacc6ea1f9fc42ca078": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x358fd0ae8f575dd1a0f285466132c4a5ad981a06442642d4a7e9b200e7ef4f9b": { + "previousValue": "0x000000000000000000000000000000000000000000000001a055690d9db80000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x51b9143786ece9bcf814d62735871b17323a3b57fa2d7a06e9d7cfe3f6a21c78": { + "previousValue": "0x00000000000000000000000000000000000000000000028412cbd8e019d2d149", + "newValue": "0x000000000000000000000000000000000000000000000285b32141edb78ad149" + }, + "0x861bba5279fcf393ca3151a62f89690763fe0ce3cb10280785d2be39c28f1fee": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xe2c930b423e3d3174d9833587eb07f9cb1ce2dc87e889229ebf6ce3b27ee5648": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x51bd3d6011dd0bd88ee1bea1a67be799a6a09d79": { + "label": "MiscBNB.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xdc05bc43000000000000000000000000e698f30e4c6f48867996d740149d317c" + }, + "0x5a6001e9836c553152d7a96db08cdc37717735c44ab1b564828d050605a8daca": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0xc6e475dc2165e7b5506aad450ef80cdfd1adfd4395e5a14c904c2ec69a68b26c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000054714fac85b0bf627288cc3a186de81a42f1d635" + }, + "0xc6e475dc2165e7b5506aad450ef80cdfd1adfd4395e5a14c904c2ec69a68b26d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x43617073204147525320496e6a6563746f720000000000000000000000000024" + } + } + }, + "0xdc21e279934ff6721cadfdd112dafb3261f09a2c": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000124", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000125" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x03165c1b0000000900000306004c4b4000989680000000011637778160979a9c", + "newValue": "0x03165c1b0000000900000307004c4b4000989680000000011637778160979a9c" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x00000000000000000000000000000000000000000000028412cbd8e019d2d149", + "newValue": "0x000000000000000000000000000000000000000000000285b32141edb78ad149" + }, + "0x0470913d54801aa16484516de6f9afca9add3303ea4f053a166c207bf12cbcbb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000051bd3d6011dd0bd88ee1bea1a67be799a6a09d79" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bf2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xdc05bc43000000000000000000000000e698f30e4c6f48867996d740149d317c" + }, + "0x44c71e57d91db1a6b1bf00331ef86ed3ca70f449293dab8b31082af0e5397282": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5a6001e9836c553152d7a96db08cdc37717735c44ab1b564828d050605a8daca": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000125" + }, + "0x660298fbe774f7bfff2c63004db9335cb0d8fd0005f5d5f7de96c83c84c00b79": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb213403b5748dc9727532903c12bfcd4cf230aa2702618359cc8ffecc19f0715": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc6e475dc2165e7b5506aad450ef80cdfd1adfd4395e5a14c904c2ec69a68b26c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000ed48bcedebdc361f51879be29d094cd9cb3ef1bcffffffff004c4b4000" + }, + "0xc6e475dc2165e7b5506aad450ef80cdfd1adfd4395e5a14c904c2ec69a68b26d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000" + } + } + }, + "0xe5ef2dd06755a97e975f7e282f828224f2c3e627": { + "label": "GovernanceV3BNB.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8a3a0b6f6fa9438554c4aa5bdaf7838f6c90507836aabb33d6ebaeb414e248f9": { + "previousValue": "0x00687f8143000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687f8143000000000003000000000000000000000000000000000000000000" + }, + "0x8a3a0b6f6fa9438554c4aa5bdaf7838f6c90507836aabb33d6ebaeb414e248fa": { + "previousValue": "0x000000000000000000093a8000000000000068ada5c400000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ada5c4000000000000687f8144" + } + } + }, + "0xed48bcedebdc361f51879be29d094cd9cb3ef1bc": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000dc21e279934ff6721cadfdd112dafb3261f09a2c" + } + } + }, + "0xf671f60bcc964b309d22424886ff202807381b32": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000301000003e802", + "newValue": "0x000000000000000000000000000000000000000000000000000302000003e802" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..ad6653738 --- /dev/null +++ b/diffs/AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3BNB_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x2d97f8fa96886fd923c065f5457f9ddd494e3877": { + "label": "AaveV3BNB.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x2a6411fab67204e77c460a1697adce8a581094c1ba38d62d4d5f3f5c9d63319a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5e7541ccf3e1d673a9fe00b50415c14f492bd76c2df487ddfeca81b404865bac": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xad3521a35d5b0fed2e12957a0e7967796ee6336a1646dca801560d265ad5c121": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xd175141e98c9cf7c5d6781ac0f0fbea28eba9f0e3fdd4756da9d42f4196a7dee": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xe5ef2dd06755a97e975f7e282f828224f2c3e627": { + "label": "GovernanceV3BNB.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xf787d5ff306ee7ea1d7b35b5cacd5a837646921c113945dbc3a3b6329ce40033": { + "previousValue": "0x006842cf80000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf80000000000003000000000000000000000000000000000000000000" + }, + "0xf787d5ff306ee7ea1d7b35b5cacd5a837646921c113945dbc3a3b6329ce40034": { + "previousValue": "0x000000000000000000093a800000000000006870f40100000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f4010000000000006842cf81" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_AaveRobotMaintenance_Part1_20250330_before_AaveV3Base_AaveRobotMaintenance_Part1_20250330_after.md b/diffs/AaveV3Base_AaveRobotMaintenance_Part1_20250330_before_AaveV3Base_AaveRobotMaintenance_Part1_20250330_after.md new file mode 100644 index 000000000..21490b51d --- /dev/null +++ b/diffs/AaveV3Base_AaveRobotMaintenance_Part1_20250330_before_AaveV3Base_AaveRobotMaintenance_Part1_20250330_after.md @@ -0,0 +1,86 @@ +## Raw diff + +```json +{ + "raw": { + "0x2dc219e716793fb4b21548c0f009ba3af753ab01": { + "label": "GovernanceV3Base.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b10819": { + "previousValue": "0x00686bd9d2000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bd9d2000000000003000000000000000000000000000000000000000000" + }, + "0xe7defe1a9ee2663e7f593684ebe15b56452e1fa833a7efa12070ad6443b1081a": { + "previousValue": "0x000000000000000000093a800000000000006899fe5300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899fe53000000000000686bd9d3" + } + } + }, + "0x88db99eebb390a2a4dcac2e1ddb09c07e911c5c3": { + "label": "MiscBase.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0x3970e4e22cbadec1894d5abad8bed55daba64db737b1020ad08141e2aa01a7a0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": { + "previousValue": "0x9b8427d4000000000000000000000000b0e2a90eb8a4d7c311e061dea470dcff", + "newValue": "0x7883753b0000000000000000000000001adbc88ed360a081319fe892bab323be" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x7883753b0000000000000000000000001adbc88ed360a081319fe892bab323be", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8c6ce16701289be1f9d5fffa430caaa4eb5ec5e063e3f657ff130ae58f5509cc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xe226d5acae908252cca3f6cefa577527650a9e1e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001f", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x01e59c680000000a00000045004c4b4000989680000000000e97bc1d4e9630ea", + "newValue": "0x01e59c680000000a00000045004c4b4000989680000000000e97bc1d4e9630ea" + }, + "0x3970e4e22cbadec1894d5abad8bed55daba64db737b1020ad08141e2aa01a7a0": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001f", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000015" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ae2": { + "previousValue": "0x9b8427d4000000000000000000000000b0e2a90eb8a4d7c311e061dea470dcff", + "newValue": "0x7883753b0000000000000000000000001adbc88ed360a081319fe892bab323be" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aec": { + "previousValue": "0x7883753b0000000000000000000000001adbc88ed360a081319fe892bab323be", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8c6ce16701289be1f9d5fffa430caaa4eb5ec5e063e3f657ff130ae58f5509cc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000015", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x925a8e70436718385912cfa7935a39461045968c362548765816bf125ec0342c": { + "previousValue": "0x0000006a7f7fd9f8ee3ad5f5e9eaeeb80be0f9fbd6ff5dffffffff000f424000", + "newValue": "0x0000006a7f7fd9f8ee3ad5f5e9eaeeb80be0f9fbd6ff5d01f0beaa000f424000" + }, + "0x925a8e70436718385912cfa7935a39461045968c362548765816bf125ec0342d": { + "previousValue": "0x000000000120eb3e00000000cfe205f66f4973bf000000000048ae905f928c41", + "newValue": "0x000000000120eb3e00000000cfe205f66f4973bf000000000048ae905f928c41" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_AaveRobotMaintenance_Part2_20250330_before_AaveV3Base_AaveRobotMaintenance_Part2_20250330_after.md b/diffs/AaveV3Base_AaveRobotMaintenance_Part2_20250330_before_AaveV3Base_AaveRobotMaintenance_Part2_20250330_after.md new file mode 100644 index 000000000..4a6c48ab4 --- /dev/null +++ b/diffs/AaveV3Base_AaveRobotMaintenance_Part2_20250330_before_AaveV3Base_AaveRobotMaintenance_Part2_20250330_after.md @@ -0,0 +1,152 @@ +## Raw diff + +```json +{ + "raw": { + "0x2dc219e716793fb4b21548c0f009ba3af753ab01": { + "label": "GovernanceV3Base.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7b9": { + "previousValue": "0x00686bd9d2000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bd9d2000000000003000000000000000000000000000000000000000000" + }, + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7ba": { + "previousValue": "0x000000000000000000093a800000000000006899fe5300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899fe53000000000000686bd9d3" + } + } + }, + "0x88db99eebb390a2a4dcac2e1ddb09c07e911c5c3": { + "label": "MiscBase.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4fa3ecf30000000000000000000000007a8506ea2f94e8b59f380325d156fc68" + }, + "0x9602f05380ead59162a5f4979f34d9ac76e4a468592d91d3afb82077e99ccab4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000097cb9e81d480a2ab03299760654c1ddc0c16be07" + }, + "0x9602f05380ead59162a5f4979f34d9ac76e4a468592d91d3afb82077e99ccab5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + }, + "0xfe6a8c94dfa23d5bd74ea9f47cf4646fac79a48127a102350e2dbbee94a93d48": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + } + } + }, + "0x88fb150bdc53a65fe94dea0c9ba0a6daf8c6e196": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x08b46d0c519862db53e2e397494be985e6965bcafad44c7cc1c55e212ffbb566": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x10b5362173766a80d4cfe3e4dddffbd4fbc967f380e2122f66780b1510aed004": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x147837a779d9d0599279e34274b425f49a18a1ad19f396e5cfe77f84c5dd18e2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x1da68e8b7f3c055e7227748fdb5a7b0b93407efbf929924ee5ee70d46e2dea4b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb3083f991f966ef92fd27b5840934004a573b7461495372f685c0f1d1d097d87": { + "previousValue": "0x000000000000000000000000000000000000000000000000cfe205f66f4973bf", + "newValue": "0x0000000000000000000000000000000000000000000000000d98082347d173bf" + }, + "0xbf0ebafb3ccb00590b97dcdb40ca93649d2ade06b617580723c4702fe32bf898": { + "previousValue": "0x00000000000000000000000000000000000000000000004c7d5ab98fa82f0557", + "newValue": "0x00000000000000000000000000000000000000000000004d3fa4b762cfa70557" + }, + "0xd03fc02658e4c4bc9621aefe696d79e1ac4730004268f21e0f81650aa5f57bc5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xd8983a340a96b9c2bb6855e46847ae134db71fb1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000044000001f402", + "newValue": "0x000000000000000000000000000000000000000000000000000045000001f402" + } + } + }, + "0xe226d5acae908252cca3f6cefa577527650a9e1e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000001e", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001f" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x01e59c680000000a00000045004c4b4000989680000000000e97bc1d4e9630ea", + "newValue": "0x01e59c680000000a00000046004c4b4000989680000000000e97bc1d4e9630ea" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x00000000000000000000000000000000000000000000004c7d5ab98fa82f0557", + "newValue": "0x00000000000000000000000000000000000000000000004d3fa4b762cfa70557" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aec": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4fa3ecf30000000000000000000000007a8506ea2f94e8b59f380325d156fc68" + }, + "0x6523f9d115d3946e5b3bf304af96f71625a8ea36a7d86613f0237c7fc498fba9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9602f05380ead59162a5f4979f34d9ac76e4a468592d91d3afb82077e99ccab4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000f9f01f8b69b1232838d3f30e27a330be4626aa69ffffffff000f424000" + }, + "0x9602f05380ead59162a5f4979f34d9ac76e4a468592d91d3afb82077e99ccab5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000c249fdd327780000000000000000000000000000" + }, + "0x9a4c36210bdb1cf1f0f8cac4ae0c0f9392d8a6c4b0bea9bcbed343fd4475bd9a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xacb78ca9ff77c8f23e1e06cd00fa7070236972c062c7482b12509f1e2cfc155c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000088db99eebb390a2a4dcac2e1ddb09c07e911c5c3" + }, + "0xb712e6cd5b7801dc641a7d317e72beffab70a3d4cb0ec120f897d846b705b0e6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfe6a8c94dfa23d5bd74ea9f47cf4646fac79a48127a102350e2dbbee94a93d48": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000001f" + } + } + }, + "0xf9f01f8b69b1232838d3f30e27a330be4626aa69": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000e226d5acae908252cca3f6cefa577527650a9e1e" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md b/diffs/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md new file mode 100644 index 000000000..6065a49e3 --- /dev/null +++ b/diffs/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md @@ -0,0 +1,56 @@ +## Reserve changes + +### Reserves altered + +#### LBTC ([0xecAc9C5F704e954931349Da37F60E39f515c11c1](https://basescan.org/address/0xecAc9C5F704e954931349Da37F60E39f515c11c1)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F](https://basescan.org/address/0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F) | [0xA04669FE5cba4Bb21f265B562D23e562E45A1C67](https://basescan.org/address/0xA04669FE5cba4Bb21f265B562D23e562E45A1C67) | +| oracleDescription | BTC / USD | Capped LBTC / BTC / USD | + + +## Raw diff + +```json +{ + "reserves": { + "0xecAc9C5F704e954931349Da37F60E39f515c11c1": { + "oracle": { + "from": "0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F", + "to": "0xA04669FE5cba4Bb21f265B562D23e562E45A1C67" + }, + "oracleDescription": { + "from": "BTC / USD", + "to": "Capped LBTC / BTC / USD" + } + } + }, + "raw": { + "0x2cc0fc26ed4563a5ce5e8bdcfe1a2878676ae156": { + "label": "AaveV3Base.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x9494584aed5cd751dfda731ce708240f3b44d490b2febee994902cbe485628eb": { + "previousValue": "0x00000000000000000000000064c911996d3c6ac71f9b455b1e8e7266bcbd848f", + "newValue": "0x000000000000000000000000a04669fe5cba4bb21f265b562d23e562e45a1c67" + } + } + }, + "0x2dc219e716793fb4b21548c0f009ba3af753ab01": { + "label": "GovernanceV3Base.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xfd55fc2e9ef63e16e696580fa41a16b1359de042d9d894f9176ffec1c194a986": { + "previousValue": "0x006894a7ca000000000002000000000000000000000000000000000000000000", + "newValue": "0x006894a7ca000000000003000000000000000000000000000000000000000000" + }, + "0xfd55fc2e9ef63e16e696580fa41a16b1359de042d9d894f9176ffec1c194a987": { + "previousValue": "0x000000000000000000093a8000000000000068c2cc4b00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068c2cc4b0000000000006894a7cb" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..da7036609 --- /dev/null +++ b/diffs/AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Base_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x2dc219e716793fb4b21548c0f009ba3af753ab01": { + "label": "GovernanceV3Base.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xea1c8d9962659d05b79d2a74379c386e592caf47911721f070f5587a9f030ffa": { + "previousValue": "0x006842cf7a000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf7a000000000003000000000000000000000000000000000000000000" + }, + "0xea1c8d9962659d05b79d2a74379c386e592caf47911721f070f5587a9f030ffb": { + "previousValue": "0x000000000000000000093a800000000000006870f3fb00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3fb0000000000006842cf7b" + } + } + }, + "0x43955b0899ab7232e3a454cf84aedd22ad46fd33": { + "label": "AaveV3Base.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x0ed6911a8e4731a0ec5abebc2b0fa5abaa9ef63031d5e54766d2f0d5b8f5f843": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x260f200a7bb6357cc6ecd915800fe0a9f44c623a3e79b8433563d7ab1ce65da5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x4eb6853b336a84640b91c4efba0890a1a4f22632be387712426e37341765d892": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc697dd52b70d2119491cf5e364cfc9027cc9f0405305d056230185ec37017946": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..693e56d98 --- /dev/null +++ b/diffs/AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Celo_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,36 @@ +## Raw diff + +```json +{ + "raw": { + "0x7a12dcfd73c1b4cddf294da4cfce75fcabba314c": { + "label": "AaveV3Celo.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x094c567b6e0a3c814f44100b259b1f2a7dd78957786682e88f112b8fadad4c4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xc2f83b1106186a32302a05f21a32d3061a4b94f338e3fa1bbe1392f3c813c52e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xe48e10834c04e394a04bf22a565d063d40b9fa42": { + "label": "GovernanceV3Celo.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3": { + "previousValue": "0x006842cf87000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf87000000000003000000000000000000000000000000000000000000" + }, + "0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f4": { + "previousValue": "0x000000000000000000093a800000000000006870f40800000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f4080000000000006842cf88" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3EthereumLido_CEXEarnFundingProposal_20250625_before_AaveV3EthereumLido_CEXEarnFundingProposal_20250625_after.md b/diffs/AaveV3EthereumLido_CEXEarnFundingProposal_20250625_before_AaveV3EthereumLido_CEXEarnFundingProposal_20250625_after.md new file mode 100644 index 000000000..8da454f4e --- /dev/null +++ b/diffs/AaveV3EthereumLido_CEXEarnFundingProposal_20250625_before_AaveV3EthereumLido_CEXEarnFundingProposal_20250625_after.md @@ -0,0 +1,104 @@ +## Raw diff + +```json +{ + "raw": { + "0x18efe565a5373f430e2f809b97de30335b3ad96a": { + "label": "AaveV3EthereumLido.ASSETS.GHO.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000422ca8b0a00a425000000" + } + } + }, + "0x6bbdfe47a3742fb966424066bbdc1086e81ace4f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x863b14a85bad0e8388c07ebdad69768001c77092db11e706ce430b1ef7d03815" + } + } + }, + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": { + "label": "AaveV2Ethereum.ASSETS.USDC.UNDERLYING, AaveV2EthereumAMM.ASSETS.USDC.UNDERLYING, AaveV2EthereumArc.ASSETS.USDC.UNDERLYING, AaveV3Ethereum.ASSETS.USDC.UNDERLYING, AaveV3EthereumEtherFi.ASSETS.USDC.UNDERLYING, AaveV3EthereumLido.ASSETS.USDC.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x4f5f42308eb505bb367768d921d9ad787d6b433ee8d3b15ce32cfeb0bed816d0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000024824504831", + "newValue": "0x0000000000000000000000000000000000000000000000000000000210b3a031" + }, + "0xa7d8658ed762c1f0262a1b658ae1ceee74ac9befff01617aa911cc34420d912f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000246139ca800" + }, + "0xb4228e1267d41a771c02d2dc44a459ed4029cf242dd46bac8b5c63e7d54f1835": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "0xc0337ee5de50499abcefc51652096bba43e68819081004aec6e17910af7e688b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xe78fa29457c20d2a8eda0bab34aa8d7a4578c50629c45ce2fde885ddf3666287": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x9690e49a8cc516395450b184f91abdba4253a1008b9a709a8932aaf81cf8130d": { + "previousValue": "0x00685ea3ba000000000002000000000000000000000000000000000000000000", + "newValue": "0x00685ea3ba000000000003000000000000000000000000000000000000000000" + }, + "0x9690e49a8cc516395450b184f91abdba4253a1008b9a709a8932aaf81cf8130e": { + "previousValue": "0x000000000000000000093a80000000000000688cc83b00000000000000000000", + "newValue": "0x000000000000000000093a80000000000000688cc83b000000000000685ea3bb" + } + } + }, + "0xdac17f958d2ee523a2206206994597c13d831ec7": { + "label": "AaveV2Ethereum.ASSETS.USDT.UNDERLYING, AaveV2EthereumAMM.ASSETS.USDT.UNDERLYING, AaveV3Ethereum.ASSETS.USDT.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x3b7bda5c429911cea247f8ee7e0c749c54ac681ab94e6006776840c1314e7834": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x46bbb0f3dd94e41ab629eb7fd63b02e3a011c2226f035638fafc954572b40774": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000246139ca800" + }, + "0xb043262f78550b1d3934eb6ae4b704759c10e5c4a5deec44a3ab35d1fd08ed13": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000248fffb811b", + "newValue": "0x00000000000000000000000000000000000000000000000000000002ec5ed91b" + }, + "0xc5aad7295b18cd1a128c4e199d9b35f0febccd50bf9ac0fd47b1a37cd99117a0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "0xd10f697dd3df6a59b9e313e9a4cfe7b521baadeff448fd3b52adcb99b5b6963a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xeef4ea32b5dca9029da350df55dfa2a2eb437104": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0fd2aac1feca02d7c10939c35f17212c1c3d778a4a37909e3a876a65aaa0b9c4" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md b/diffs/AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md new file mode 100644 index 000000000..6ed2192a3 --- /dev/null +++ b/diffs/AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3EthereumLido_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md @@ -0,0 +1,169 @@ +## Reserve changes + +### Reserve altered + +#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 85.55 % | 40.55 % | +| variableRateSlope2 | 85 % | 40 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=5500000000000000000000000&variableRateSlope2=850000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=855500000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=5500000000000000000000000&variableRateSlope2=400000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=405500000000000000000000000) | + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 10 % [1000] | 15 % [1500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "reserveFactor": { + "from": 1000, + "to": 1500 + } + } + }, + "strategies": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "maxVariableBorrowRate": { + "from": "855500000000000000000000000", + "to": "405500000000000000000000000" + }, + "variableRateSlope2": { + "from": "850000000000000000000000000", + "to": "400000000000000000000000000" + } + } + }, + "raw": { + "0x013e2c7567b6231e865bb9273f8c7656103611c0": { + "label": "AaveV3EthereumLido.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x342631c6cefc9cfbf97b2fe4aa242a236e1fd517": { + "label": "AaveV3EthereumLido.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x34fd9638ee82e78f21d66b54bf4d4e61cdb4f7d1": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x4e033931ad43597d96d6bcc25c280717730b58b1": { + "label": "AaveV3EthereumLido.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b3": { + "previousValue": "0x00000000000354e22daa0c7748e6ed7400000000033da8f6366bf9a6f0927cca", + "newValue": "0x00000000000354e22f25c14fb2176dc300000000033da8f9a10f1a3ae9e80f59" + }, + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b4": { + "previousValue": "0x00000000000435dcc2f6477e6228ebac00000000033f7f06edc27a42ef896047", + "newValue": "0x00000000000435dcc3e6368f9b343f8800000000033f7f0b418f7a538077916f" + }, + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b5": { + "previousValue": "0x000000000000000000000000687e206700000000000000000000000000000000", + "newValue": "0x000000000000000000000000687e225300000000000000000000000000000000" + }, + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01ba": { + "previousValue": "0x0000000000000830d5e682ba4aa986c700000000000000000224694fcee67453", + "newValue": "0x0000000000000830d5e682ba4aa986c7000000000000000002271f8e2b894296" + }, + "0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec0": { + "previousValue": "0x000000000030199c8766f015d5d4414d00000000034c57a56cd476b4975a0731", + "newValue": "0x00000000002d6d9ff985d790c1cdf83300000000034c57d79ffbba78f372b6d3" + }, + "0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec1": { + "previousValue": "0x000000000039c4274e36c69b0fb44757000000000351a18c43c3b311668cc77c", + "newValue": "0x000000000039c448858749056f69d01c000000000351a1c8ee2a17b47cf54881" + }, + "0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec2": { + "previousValue": "0x000000000000000000000100687e206700000000000000000000000000000000", + "newValue": "0x000000000000000000000100687e225300000000000000000000000000000000" + }, + "0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec7": { + "previousValue": "0x00000000000001dc9ca575faf72a50040000000000000000191f1182b480354b", + "newValue": "0x00000000000001dc9ca575faf72a5004000000000000000019484c28d6307ecb" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a26": { + "previousValue": "0x00687e2252000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687e2252000000000003000000000000000000000000000000000000000000" + }, + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a27": { + "previousValue": "0x000000000000000000093a8000000000000068ac46d300000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ac46d3000000000000687e2253" + } + } + }, + "0x8958b1c39269167527821f8c276ef7504883f2fa": { + "label": "AaveV3EthereumLido.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.ezETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.rsETH.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xf37caed32e4e49c83636e0f1684f3f4a9a23c463a49eb17cd63abd50680b378b": { + "previousValue": "0x0000000000000000000000000000000000000000213400000037000000002328", + "newValue": "0x00000000000000000000000000000000000000000fa000000037000000002328" + } + } + }, + "0x91b7d78bf92db564221f6b5aee744d1727d1dd1e": { + "label": "AaveV3EthereumLido.ASSETS.WETH.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xcfbf336fe147d643b9cb705648500e101504b16d": { + "label": "AaveV3EthereumLido.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xe439edd2625772aa635b437c099c607b6eb7d35f": { + "label": "AaveV3EthereumLido.ASSETS.wstETH.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xeabd3344f14b4df97611910dd3826b0767bcc588": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ebf": { + "previousValue": "0x100000000000000000000103e80000dbba00000c5c1003e885122904213420d0", + "newValue": "0x100000000000000000000103e80000dbba00000c5c1005dc85122904213420d0" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_before_AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_after.md b/diffs/AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_before_AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_after.md new file mode 100644 index 000000000..e8b6507ba --- /dev/null +++ b/diffs/AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_before_AaveV3EthereumLido_OnboardTETHToAaveV3PrimeInstance_20250617_after.md @@ -0,0 +1,388 @@ +## Reserve changes + +### Reserves added + +#### tETH ([0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8](https://etherscan.io/address/0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 20,000 tETH | +| borrowCap | 1 tETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A](https://etherscan.io/address/0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A) | +| oracleDecimals | 8 | +| oracleDescription | Capped tETH / wstETH / ETH / USD | +| oracleLatestAnswer | 3010.26881458 | +| usageAsCollateralEnabled | true | +| ltv | 0.05 % [5] | +| liquidationThreshold | 0.1 % [10] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 50 % [5000] | +| aToken | [0xce8c60fd8390eFCc3Fc66A3f0bd64BEb969e750E](https://etherscan.io/address/0xce8c60fd8390eFCc3Fc66A3f0bd64BEb969e750E) | +| variableDebtToken | [0xe7ea6125490ae4594aD9B44D05dFF9F2A4343134](https://etherscan.io/address/0xe7ea6125490ae4594aD9B44D05dFF9F2A4343134) | +| borrowingEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x8958b1C39269167527821f8c276Ef7504883f2fa](https://etherscan.io/address/0x8958b1C39269167527821f8c276Ef7504883f2fa) | +| aTokenName | Aave Ethereum Lido tETH | +| aTokenSymbol | aEthLidotETH | +| aTokenUnderlyingBalance | 0.04 tETH [40000000000000000] | +| id | 8 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Lido Variable Debt tETH | +| variableDebtTokenSymbol | variableDebtEthLidotETH | +| virtualAccountingActive | true | +| virtualBalance | 0.04 tETH [40000000000000000] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 310 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 10 % | +| variableRateSlope2 | 300 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=100000000000000000000000000&variableRateSlope2=3000000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=3100000000000000000000000000) | + + +## Emodes changed + +### EMode: wstETH/WETH(id: 1) + + + +### EMode: LRT Stablecoins main(id: 2) + + + +### EMode: LRT wstETH main(id: 3) + + + +### EMode: sUSDe Stablecoins(id: 4) + + + +### EMode: rsETH LST main(id: 5) + + + +### EMode: rsETH/Stablecoins(id: 6) + + + +### EMode: tETH/wstETH(id: 7) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | tETH/wstETH | +| eMode.ltv | - | 92 % | +| eMode.liquidationThreshold | - | 94 % | +| eMode.liquidationBonus | - | 2 % | +| eMode.borrowableBitmap | - | wstETH | +| eMode.collateralBitmap | - | tETH | + + +## Raw diff + +```json +{ + "eModes": { + "7": { + "from": null, + "to": { + "borrowableBitmap": "1", + "collateralBitmap": "256", + "eModeCategory": 7, + "label": "tETH/wstETH", + "liquidationBonus": 10200, + "liquidationThreshold": 9400, + "ltv": 9200 + } + } + }, + "reserves": { + "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8": { + "from": null, + "to": { + "aToken": "0xce8c60fd8390eFCc3Fc66A3f0bd64BEb969e750E", + "aTokenName": "Aave Ethereum Lido tETH", + "aTokenSymbol": "aEthLidotETH", + "aTokenUnderlyingBalance": "40000000000000000", + "borrowCap": 1, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "id": 8, + "interestRateStrategy": "0x8958b1C39269167527821f8c276Ef7504883f2fa", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 10, + "ltv": 5, + "oracle": "0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A", + "oracleDecimals": 8, + "oracleDescription": "Capped tETH / wstETH / ETH / USD", + "oracleLatestAnswer": "301026881458", + "reserveFactor": 5000, + "supplyCap": 20000, + "symbol": "tETH", + "underlying": "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0xe7ea6125490ae4594aD9B44D05dFF9F2A4343134", + "variableDebtTokenName": "Aave Ethereum Lido Variable Debt tETH", + "variableDebtTokenSymbol": "variableDebtEthLidotETH", + "virtualAccountingActive": true, + "virtualBalance": "40000000000000000" + } + } + }, + "strategies": { + "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8": { + "from": null, + "to": { + "address": "0x8958b1C39269167527821f8c276Ef7504883f2fa", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "3100000000000000000000000000", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "100000000000000000000000000", + "variableRateSlope2": "3000000000000000000000000000" + } + } + }, + "raw": { + "0x223d844fc4b006d67c0cdbd39371a9f73f69d974": { + "label": "AaveV3Ethereum.EMISSION_MANAGER, AaveV3EthereumEtherFi.EMISSION_MANAGER, AaveV3EthereumLido.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x2bb01ff981c81d59d6b827710e6cef9693cb1fa05724f2dc4aff50d68f31426d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0xb431460c8a4f27fd28ab49428b9b65bccc51e03e856284c89732d1fd57469446": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x4e033931ad43597d96d6bcc25c280717730b58b1": { + "label": "AaveV3EthereumLido.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000000800000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000000900000000000009c4" + }, + "0x05725f7419f52ac606bc65a60e5ab85095522694ed898882d2777964ee382600": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x1e4061ed12ce1f4439fe6c7922bd1dce45af754358ce2f94214f93749947e40a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000010027d824b823f0" + }, + "0x1e4061ed12ce1f4439fe6c7922bd1dce45af754358ce2f94214f93749947e40b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x744554482f777374455448000000000000000000000000000000000000000016" + }, + "0x1e4061ed12ce1f4439fe6c7922bd1dce45af754358ce2f94214f93749947e40c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c014": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e8000004e200000000011388811229fe000a0005" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c015": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c016": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c017": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000008006855875300000000000000000000000000000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c018": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ce8c60fd8390efcc3fc66a3f0bd64beb969e750e" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000e7ea6125490ae4594ad9b44d05dff9f2a4343134" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008958b1c39269167527821f8c276ef7504883f2fa" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000008e1bc9bf04000000000000000000000000000000000000" + }, + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000008a0a", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000028a0a" + } + } + }, + "0x8958b1c39269167527821f8c276ef7504883f2fa": { + "label": "AaveV3EthereumLido.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.ezETH.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3EthereumLido.ASSETS.rsETH.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xae811e75d50ba33283ff06e4a481d019c723c5fbd03e1a2554bc2d9b02b065bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000007530000003e8000000001194" + } + } + }, + "0xce8c60fd8390efcc3fc66a3f0bd64beb969e750e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000008e1bc9bf040000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d204c69646f207445544800000000000000002e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x614574684c69646f744554480000000000000000000000000000000000000018" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000008164cc65827dcfe994ab23944cbc90e0aa80bfcb12" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x65f6d961a32248d59ec899f7f1f9a8f1f4b375a0a43fd123b42c60a681093352" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce80000000000000000000000008e1bc9bf040000" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007f8fc14d462bdf93c681c1f2fd615389bf969fb2", + "label": "Implementation slot" + } + } + }, + "0xd11c452fc99cf405034ee446803b6f6c1f6d5ed8": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x2a9b9fe90656ad2636666ce3fb10fd3b66ebdc961e8598c46bea11f76203f8dc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x31faaccc375cc214196213bd298e4f0b16d02b9261eb8049291f7b503901f2c6": { + "previousValue": "0x000000000000000000000000000000000000000000000000008e1bc9bf040000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3daafcbad5c9f61bd795a191f1de80749926d2f3ef5207cf5a355cc5b877c3a5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000008e1bc9bf040000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xacadc60d47b3ff7acda1f55244f2dd77100bd73c50fc73c02f9b2be85f5465f8": { + "previousValue": "0x0068558752000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068558752000000000003000000000000000000000000000000000000000000" + }, + "0xacadc60d47b3ff7acda1f55244f2dd77100bd73c50fc73c02f9b2be85f5465f9": { + "previousValue": "0x000000000000000000093a800000000000006883abd300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006883abd300000000000068558753" + } + } + }, + "0xe3c061981870c0c7b1f3c4f4bb36b95f1f260be6": { + "label": "AaveV3EthereumLido.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0xae811e75d50ba33283ff06e4a481d019c723c5fbd03e1a2554bc2d9b02b065bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000085968026294b8f8fb86d6bf3cda079f9376ad05a" + } + } + }, + "0xe7ea6125490ae4594ad9b44d05dff9f2a4343134": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x9b325111b84d157210c0f414a19d347420ae734a7755437e048cba3ebcdb89c4" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000004b" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c65446562744574684c69646f7445544800000000000000002e" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000008164cc65827dcfe994ab23944cbc90e0aa80bfcb12" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003e59212c34588a63350142efad594a20c88c2ced", + "label": "Implementation slot" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d204c69646f205661726961626c652044656274" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x2074455448000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..4e2bd1ade --- /dev/null +++ b/diffs/AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3EthereumLido_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,50 @@ +## Raw diff + +```json +{ + "raw": { + "0x013e2c7567b6231e865bb9273f8c7656103611c0": { + "label": "AaveV3EthereumLido.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x56d5d0280fa21bafeddf66bfb1bc8c74d1ca1062d7cd7b4e1dc790ed4b188770": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xcddcb9028afd0f0922b54dfca74b52ebf7b04595ba0eff9b3e51dfa0d509fdbe": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xea32f03b562c9002ecf34f28d69a0b1d358c4bf14aa435310aa8d94dfbf6bfbb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x7e6a6b115d31d4a837e3c737c49cf6fafe6112c3": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xd3c64b2c7200ce08ba06628e7e0769979e0b61e5f64c65e2cec5978d7e209ec1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x4841d2f892b250bd2fb1f41f429abfa55abeb7d35cf0fc8017b083c3ad98f76a": { + "previousValue": "0x006842cf62000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf62000000000003000000000000000000000000000000000000000000" + }, + "0x4841d2f892b250bd2fb1f41f429abfa55abeb7d35cf0fc8017b083c3ad98f76b": { + "previousValue": "0x000000000000000000093a800000000000006870f3e300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3e30000000000006842cf63" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AaveRobotMaintenance_20250330_before_AaveV3Ethereum_AaveRobotMaintenance_20250330_after.md b/diffs/AaveV3Ethereum_AaveRobotMaintenance_20250330_before_AaveV3Ethereum_AaveRobotMaintenance_20250330_after.md new file mode 100644 index 000000000..a5f350f9c --- /dev/null +++ b/diffs/AaveV3Ethereum_AaveRobotMaintenance_20250330_before_AaveV3Ethereum_AaveRobotMaintenance_20250330_after.md @@ -0,0 +1,424 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 12,495,336.4077 LINK [12495336407711144026013891] | 12,494,786.4077 LINK [12494786407711144026013891] | +| virtualBalance | 12,495,336.4065 LINK [12495336406528732493050903] | 12,494,786.4065 LINK [12494786406528732493050903] | + + +## Raw diff + +```json +{ + "reserves": { + "0x514910771AF9Ca656af840dff83E8264EcF986CA": { + "aTokenUnderlyingBalance": { + "from": "12495336407711144026013891", + "to": "12494786407711144026013891" + }, + "virtualBalance": { + "from": "12495336406528732493050903", + "to": "12494786406528732493050903" + } + } + }, + "raw": { + "0x0b93c36cd1b4954ea0d4e7d5b49c2cfa3454cc91": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006593c7de001fc8542bb1703532ee1e5aa0d458fd" + } + } + }, + "0x1cdf8879ec8be012ba959eb515b11008e0cb6323": { + "label": "MiscEthereum.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000b", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c" + }, + "0x0abd0a7a8395a29fab8c1860ad1047a1e4dfeed8408208848e90d409a8fbfef7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x47617320436170706564205072696d65205374617461546f6b656e2052657761" + }, + "0x0abd0a7a8395a29fab8c1860ad1047a1e4dfeed8408208848e90d409a8fbfef8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x72647320526f626f740000000000000000000000000000000000000000000000" + }, + "0x1915a0aa430c5192b056acb41fcb3f68e5cd33464562cc707795adb60f3daa0e": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000a", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x2e0a4c8ef6d797ea38fa579bfb8f0f44ff0dd747cc43913638b48327bd78cb2a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc3210bfff692a5bbdbb068d42ab4eaf28b01ee0" + }, + "0x2e0a4c8ef6d797ea38fa579bfb8f0f44ff0dd747cc43913638b48327bd78cb2b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4761732043617070656420566f74696e6720436861696e20526f626f7400003a" + }, + "0x31029f37ec6a86bf39503e7e74aaae4bc62d529021a2cd0a08dd1b773041540e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4761732043617070656420436f7265205374617461546f6b656e205265776172" + }, + "0x31029f37ec6a86bf39503e7e74aaae4bc62d529021a2cd0a08dd1b773041540f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x647320526f626f74000000000000000000000000000000000000000000000000" + }, + "0x354984289c3073c4df4d412475d7833b2eb80b84237530a1d6d30164d94482f7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0xb721e94d000000000000000000000000203ae2ee1001daf925bf3d16601d3b9c", + "newValue": "0x39283d9b0000000000000000000000004a0933f63bab418e96e74a5fd218945b" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3": { + "previousValue": "0x0b073430000000000000000000000000d87f0e21c3b9113c7b2e64e425d7b60f", + "newValue": "0x9498f6ec000000000000000000000000215e45cdb71433924e7e26995e9aea88" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": { + "previousValue": "0x39283d9b0000000000000000000000004a0933f63bab418e96e74a5fd218945b", + "newValue": "0xba9d29ca000000000000000000000000e6aaea9fb8236902268b69498d8db343" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": { + "previousValue": "0x9498f6ec000000000000000000000000215e45cdb71433924e7e26995e9aea88", + "newValue": "0x952abf0e000000000000000000000000d1688d059e0be0574422013e10a6016a" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5210b6110000000000000000000000006a163ac9b2b9612c84d9649ea0cc295f" + }, + "0x40ece379f58a326e0cab3b5f68372dca24ccd0f69c128657301ac2861ec8f36a": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000b", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + "0x6cb981f4be97583579a6b01c4b0e0ca63043ba9c735e86a9dfc54c7466226f1e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7bcfe289076b56c28adf8bd5f3c4024d7f536a2eb27bb4d8c6a7b44336a3de9a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000892b74cd3703b427cd90e7f140f358a1de1ea703" + }, + "0x7bcfe289076b56c28adf8bd5f3c4024d7f536a2eb27bb4d8c6a7b44336a3de9b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000051" + }, + "0x8413bcbe1734e982bebd262cd3e7b257c4531d08db88a5aabc5f7dab875ed733": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c" + }, + "0x9d9bf88a79d7d2f2e5f089b7468753d73d193d1edd4a11d67214227261a31d7a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc11e7a402ad957724003c2a4c7c2b05af29d7c26712a44f473e129a930143b49": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a" + }, + "0xc2b4f3316dddea7ceab96bb74b6d43e21741533fc87f82021ad69ebc8eeeea23": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000858f50cb70e6476d37543275af4c738ae8a27893" + }, + "0xc2b4f3316dddea7ceab96bb74b6d43e21741533fc87f82021ad69ebc8eeeea24": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000053" + } + } + }, + "0x514910771af9ca656af840dff83e8264ecf986ca": { + "label": "AaveV2Ethereum.ASSETS.LINK.UNDERLYING, AaveV3Ethereum.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x040e85d679fc53ac947a4a6f5511069b612a8826774610b23ba6efc6f54bf488": { + "previousValue": "0x000000000000000000000000000000000000000000000a7180ac3414883d36af", + "newValue": "0x000000000000000000000000000000000000000000000a8f5174ba0e291536af" + }, + "0x5c582b08904103541653438b3e840fa055a8ca147282c09b21a925650db28c07": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7f08dda3d3cd2857722336f88d3b3c9ed09b910cb3e5757c24e935c7ea336b33": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8cc09dda3ba4cb8121665ea86c158dfc87a15a09a005d2743dcdc05bd7e960da": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x90dd2d19bc9ac5a445da688e434e69aa0f18fa4d13a44ffdf6c19d740d2715ed": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd627b8462386c7c6641100e96939db446cad4b9d8cd6a491dd673446a8f4e1c1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0xdae4082b17861c7d82e21b4a4c7bb9fa7ad9df1c0133f315d870700d9f955f7e": { + "previousValue": "0x0000000000000000000000000000000000000000000a55fd8b40e3a8cd4380c3", + "newValue": "0x0000000000000000000000000000000000000000000a55dfba785daf2c6b80c3" + }, + "0xf272454563483393b219bb452784c2f015a502bf873afd16da25a7043e8c5ffc": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfc403c4b89a2cdf463af8e36426617fcff737ccf5f9c4093be66f882051b9ca7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000f43fc2c04ee0000", + "newValue": "0x0000000000000000000000000000000000000000000000000f43fc2c04ee0000" + } + } + }, + "0x56f8c971a8b8dc24bfce1ef326b8f83f5385c309": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006593c7de001fc8542bb1703532ee1e5aa0d458fd" + } + } + }, + "0x5e8c8a7243651db1384c0ddfdbe39761e8e7e51a": { + "label": "AaveV3Ethereum.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000a985e0229715702ac6846", + "newValue": "0x0000000000000000000000000000000000000000000a984037565714237937df" + }, + "0x14a553e31736f19e3e380cf55bfb2f82dfd6d880cd07235affb68d8d3e0cac4d": { + "previousValue": "0x00000000033bd3a342832c39965087f2000000000000074483ee6432825f7663", + "newValue": "0x00000000033bd3add264d3fa2b66ded30000000000000726b91b49efa32c45fc" + }, + "0x7a79d58a6c2c4214189d78e4be4ba21513d55fd0a4b2ac0c119b9394eb289d20": { + "previousValue": "0x00000000033bd36470cffa289b8eb9ca00000000000000000000000000000000", + "newValue": "0x00000000033bd3add264d3fa2b66ded300000000000000000000000000000000" + } + } + }, + "0x6593c7de001fc8542bb1703532ee1e5aa0d458fd": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000a4", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a5" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x015b184c0000000600000128009896800098968000000000476b78c56f0236dd", + "newValue": "0x015b184c000000060000012b009896800098968000000000476b78c56f0236dd" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x000000000000000000000000000000000000000000000a6e50c150c670e7a2af", + "newValue": "0x000000000000000000000000000000000000000000000a8c2189d6c011bfa2af" + }, + "0x0153c986417a44c69b1b67d7de03642057896fe6035bc9a4cf04bcbc20f50349": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0eb17b895cbe887dc04f199d03e02daa20c9ddcea6ec35288ef602c2e6da818e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001cdf8879ec8be012ba959eb515b11008e0cb6323" + }, + "0x2e0a4c8ef6d797ea38fa579bfb8f0f44ff0dd747cc43913638b48327bd78cb2a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000b93c36cd1b4954ea0d4e7d5b49c2cfa3454cc91ffffffff004c4b4000" + }, + "0x2e0a4c8ef6d797ea38fa579bfb8f0f44ff0dd747cc43913638b48327bd78cb2b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000d8d726b7177a80000000000000000000000000000" + }, + "0x2e8756d385fbb80dd72209bc203031cf7b9d83d5982acfc57a573b32cf35552f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x354984289c3073c4df4d412475d7833b2eb80b84237530a1d6d30164d94482f7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a4" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b0e": { + "previousValue": "0xb721e94d000000000000000000000000203ae2ee1001daf925bf3d16601d3b9c", + "newValue": "0x80195513000000000000000000000000fb173839795ef1db403889c6119383f6" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b18": { + "previousValue": "0x0b073430000000000000000000000000d87f0e21c3b9113c7b2e64e425d7b60f", + "newValue": "0x18cace20000000000000000000000000a0ffd09ae7808609f7b8ffcc353cada0" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b70": { + "previousValue": "0x80195513000000000000000000000000fb173839795ef1db403889c6119383f6", + "newValue": "0xba9d29ca000000000000000000000000e6aaea9fb8236902268b69498d8db343" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b71": { + "previousValue": "0x18cace20000000000000000000000000a0ffd09ae7808609f7b8ffcc353cada0", + "newValue": "0x952abf0e000000000000000000000000d1688d059e0be0574422013e10a6016a" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b72": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5210b6110000000000000000000000006a163ac9b2b9612c84d9649ea0cc295f" + }, + "0x40646816fe7237492928c225e32af3916fd8fb1e5d470ada12e72ff4d02c043f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001cdf8879ec8be012ba959eb515b11008e0cb6323" + }, + "0x4c8f38a5a2c172bb61aeaa741700c1769788728bc1f35179609873a8ffeba8e8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x4f602474e017567d51e5760e7b523814955256d1bead1f2b0a787fa77e40e157": { + "previousValue": "0x0000002da700f9a03238be35c248431650407ace7a029affffffff000f424000", + "newValue": "0x0000002da700f9a03238be35c248431650407ace7a029a015cefd8000f424000" + }, + "0x4f602474e017567d51e5760e7b523814955256d1bead1f2b0a787fa77e40e158": { + "previousValue": "0x00000000000000000000000ad78ebc5ac6200000000000000000000000000000", + "newValue": "0x00000000000000000000000ad78ebc5ac6200000000000000000000000000000" + }, + "0x5417d2de0a6c5a0095662637031e3c0e2eec88ce1fe3e499bcc4229f8c9dbe48": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000a3", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x5ff028fbde8fdcfe056fd9be0841ff2ef7f5990b79f28a4bf388d055095d860a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x6cb981f4be97583579a6b01c4b0e0ca63043ba9c735e86a9dfc54c7466226f1e": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000004b", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7b795e87503e35fdca089d08abc59d406b83c974ca7ce9148e3e3d2d795b0262": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7bcfe289076b56c28adf8bd5f3c4024d7f536a2eb27bb4d8c6a7b44336a3de9a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000056f8c971a8b8dc24bfce1ef326b8f83f5385c309ffffffff000f424000" + }, + "0x7bcfe289076b56c28adf8bd5f3c4024d7f536a2eb27bb4d8c6a7b44336a3de9b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000821ab0d4414980000000000000000000000000000" + }, + "0x8413bcbe1734e982bebd262cd3e7b257c4531d08db88a5aabc5f7dab875ed733": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a5" + }, + "0x8ba74c14f2aa8a9c6759a932ee25d9449408f09193af66bfcfaa9c0feb1b3215": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9125ab4f614e0c8216e1cce49234b94e7ed1380692220a9d888f868eda4447bc": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000a4", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000004b" + }, + "0x9d9bf88a79d7d2f2e5f089b7468753d73d193d1edd4a11d67214227261a31d7a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000041", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xabf297935626b053194d5045c37a18fc93cc52b83d23c095148358a0eb8aa18c": { + "previousValue": "0x000000647b91eae8fd0c77079d53b9cf0365e70ff7f1aeffffffff004c4b4000", + "newValue": "0x000000647b91eae8fd0c77079d53b9cf0365e70ff7f1ae015cefd8004c4b4000" + }, + "0xabf297935626b053194d5045c37a18fc93cc52b83d23c095148358a0eb8aa18d": { + "previousValue": "0x000000000000000000000015af1d78b58c400000000000000000000000000000", + "newValue": "0x000000000000000000000015af1d78b58c400000000000000000000000000000" + }, + "0xbd156abcc7dc9ac7c807e1fe3b7b1e0334b8482a56e4a56cb9223f0ce2dc076a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc11e7a402ad957724003c2a4c7c2b05af29d7c26712a44f473e129a930143b49": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a3" + }, + "0xc2b4f3316dddea7ceab96bb74b6d43e21741533fc87f82021ad69ebc8eeeea23": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000befc32b6d97dc6f74b3e9cbbf8eb28fd44b2d8f1ffffffff000f424000" + }, + "0xc2b4f3316dddea7ceab96bb74b6d43e21741533fc87f82021ad69ebc8eeeea24": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000821ab0d4414980000000000000000000000000000" + }, + "0xd0ff326d66c76618484b5c4dea3b474b151ea04de4145322f9516123e18edd05": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xf4e4b0995ab5b57be81dab1dc8b39a6da30bd93bcd5fb000d17dbce5aeffca68": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001cdf8879ec8be012ba959eb515b11008e0cb6323" + }, + "0xf4ecfa7017452e3269f48921daea7ef396e162596988ac16070c6e1a6b7a1bfa": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x6b0b234fb2f380309d47a7e9391e29e9a179395a": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000121000001f402", + "newValue": "0x000000000000000000000000000000000000000000000000000124000001f402" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea6701e": { + "previousValue": "0x00000000000010c79976fb114ae1e36600000000033bd3ad8a5d76788aa36dc0", + "newValue": "0x00000000000010c7f862ddf0f99b96b600000000033bd3add264d3fa2b66ded3" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea6701f": { + "previousValue": "0x0000000000033f355543fcbcd8422a490000000003427fa4f3c25c5980da9315", + "newValue": "0x0000000000033f3e8441c74cfbfa73ff0000000003427fb30093473dc945cb7a" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea67020": { + "previousValue": "0x000000000000000000000500686bcfc700000000000000002cf28dbecfa7f36e", + "newValue": "0x000000000000000000000500686bd7d700000000000000002cf28dbecfa7f36e" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea67025": { + "previousValue": "0x00000000000a55fd8b3cb04329dcf417000000000000000077736a90152ae707", + "newValue": "0x00000000000a55dfba742a498904f417000000000000000077ae6aad97636094" + }, + "0xf9829112cce780d4a61051cb8a0049abd16e5ef129bad968336a15bba07c032d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000020082", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000020082" + } + } + }, + "0xbefc32b6d97dc6f74b3e9cbbf8eb28fd44b2d8f1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006593c7de001fc8542bb1703532ee1e5aa0d458fd" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xf66305a61ddb824256acb564f9115b8a40970c3a191cb25bf2239e3351c867ad": { + "previousValue": "0x00686bd7d6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bd7d6000000000003000000000000000000000000000000000000000000" + }, + "0xf66305a61ddb824256acb564f9115b8a40970c3a191cb25bf2239e3351c867ae": { + "previousValue": "0x000000000000000000093a800000000000006899fc5700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899fc57000000000000686bd7d7" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AaveV3AptosActivation_20250613_before_AaveV3Ethereum_AaveV3AptosActivation_20250613_after.md b/diffs/AaveV3Ethereum_AaveV3AptosActivation_20250613_before_AaveV3Ethereum_AaveV3AptosActivation_20250613_after.md new file mode 100644 index 000000000..9879c7495 --- /dev/null +++ b/diffs/AaveV3Ethereum_AaveV3AptosActivation_20250613_before_AaveV3Ethereum_AaveV3AptosActivation_20250613_after.md @@ -0,0 +1,22 @@ +## Raw diff + +```json +{ + "raw": { + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31a": { + "previousValue": "0x00684c0226000000000002000000000000000000000000000000000000000000", + "newValue": "0x00684c0226000000000003000000000000000000000000000000000000000000" + }, + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31b": { + "previousValue": "0x000000000000000000093a80000000000000687a26a700000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687a26a7000000000000684c0227" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_before_AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_after.md b/diffs/AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_before_AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_after.md new file mode 100644 index 000000000..c46cf81db --- /dev/null +++ b/diffs/AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_before_AaveV3Ethereum_AddEURCToAaveV3CoreInstance_20250622_after.md @@ -0,0 +1,320 @@ +## Reserve changes + +### Reserves added + +#### EURC ([0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c](https://etherscan.io/address/0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 7,000,000 EURC | +| borrowCap | 6,500,000 EURC | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0xa6aB031A4d189B24628EC9Eb155F0a0f1A0E55a3](https://etherscan.io/address/0xa6aB031A4d189B24628EC9Eb155F0a0f1A0E55a3) | +| oracleDecimals | 8 | +| oracleDescription | Capped EURC/USD | +| oracleLatestAnswer | 1.14806247 | +| usageAsCollateralEnabled | true | +| ltv | 75 % [7500] | +| liquidationThreshold | 78 % [7800] | +| liquidationBonus | 5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 10 % [1000] | +| aToken | [0xAA6e91C82942aeAE040303Bf96c15a6dBcB82CA0](https://etherscan.io/address/0xAA6e91C82942aeAE040303Bf96c15a6dBcB82CA0) | +| variableDebtToken | [0x6c82c66622Eb360FC973D3F492f9D8E9eA538b08](https://etherscan.io/address/0x6c82c66622Eb360FC973D3F492f9D8E9eA538b08) | +| borrowingEnabled | true | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB](https://etherscan.io/address/0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB) | +| aTokenName | Aave Ethereum EURC | +| aTokenSymbol | aEthEURC | +| aTokenUnderlyingBalance | 100 EURC [100000000] | +| id | 47 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Variable Debt EURC | +| variableDebtTokenSymbol | variableDebtEthEURC | +| virtualAccountingActive | true | +| virtualBalance | 100 EURC [100000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 56 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 6 % | +| variableRateSlope2 | 50 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=60000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=560000000000000000000000000) | + + +## Raw diff + +```json +{ + "reserves": { + "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c": { + "from": null, + "to": { + "aToken": "0xAA6e91C82942aeAE040303Bf96c15a6dBcB82CA0", + "aTokenName": "Aave Ethereum EURC", + "aTokenSymbol": "aEthEURC", + "aTokenUnderlyingBalance": "100000000", + "borrowCap": 6500000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "id": 47, + "interestRateStrategy": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10500, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7800, + "ltv": 7500, + "oracle": "0xa6aB031A4d189B24628EC9Eb155F0a0f1A0E55a3", + "oracleDecimals": 8, + "oracleDescription": "Capped EURC/USD", + "oracleLatestAnswer": "114806247", + "reserveFactor": 1000, + "supplyCap": 7000000, + "symbol": "EURC", + "underlying": "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x6c82c66622Eb360FC973D3F492f9D8E9eA538b08", + "variableDebtTokenName": "Aave Ethereum Variable Debt EURC", + "variableDebtTokenSymbol": "variableDebtEthEURC", + "virtualAccountingActive": true, + "virtualBalance": "100000000" + } + } + }, + "strategies": { + "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c": { + "from": null, + "to": { + "address": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "560000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "60000000000000000000000000", + "variableRateSlope2": "500000000000000000000000000" + } + } + }, + "raw": { + "0x1abaea1f7c830bd89acc67ec4af516284b1bc33c": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x45224f360f98ba369ca5a65b2a1aaf0334af584ab8c82b41cd8cff81e9b451d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb45617120d8a4d732e01f690f876a75b970ed6930e41bdcc226f88481e3e3849": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000005f5e100" + }, + "0xc5166159095e8a7c57c7f7e248bc073296fcd4f18cfc6eb1d4d1324f82927b92": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x223d844fc4b006d67c0cdbd39371a9f73f69d974": { + "label": "AaveV3Ethereum.EMISSION_MANAGER, AaveV3EthereumEtherFi.EMISSION_MANAGER, AaveV3EthereumLido.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xcf1dbc63ddff85d6eb5578b981099997b69bbaaf3643c12f2ec16a23c8ace8d5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0xf9fb442904dc12f72a3ae800a9554f879bee287d3e41d600c9b581c36a12da7e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x512d526035d29131a6dce9f9b44e4b7ce0c57a8a373dc86ba09b753b3a99bbd8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000a6ab031a4d189b24628ec9eb155f0a0f1a0e55a3" + } + } + }, + "0x6c82c66622eb360fc973d3f492f9d8e9ea538b08": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xa166e4d59ef6e8cbfa6f611826196c2073f7d6d78e705f2d96a2adf3e56c1973" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001abaea1f7c830bd89acc67ec4af516284b1bc33c" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c65446562744574684555524300000000000000000000000026" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000008164cc65827dcfe994ab23944cbc90e0aa80bfcb06" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac725cb59d16c81061bdea61041a8a5e73da9ec6", + "label": "Implementation slot" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d205661726961626c6520446562742045555243" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000002f00000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000003000000000000009c4" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d2301a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e80006acfc0000632ea003e8850629041e781d4c" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d2301b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d2301c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d2301d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000002f006859300700000000000000000000000000000000" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d2301e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000aa6e91c82942aeae040303bf96c15a6dbcb82ca0" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d23020": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006c82c66622eb360fc973d3f492f9d8e9ea538b08" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d23021": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009ec6f08190dea04a54f8afc53db96134e5e3fdfb" + }, + "0x24a6d6495ab5cae2014f8b8dc5166cee765124c46ed3c651d2361ec301d23023": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000005f5e10000000000000000000000000000000000" + }, + "0xd08db6eea880c34c8281cf6842ad4930fc629fe252408bdb9cdda6963634a943": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001abaea1f7c830bd89acc67ec4af516284b1bc33c" + }, + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x00000000000000000000000000000000000000002a8a2aaa8a802000000aaaaa", + "newValue": "0x0000000000000000000000000000000000000000aa8a2aaa8a802000000aaaaa" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x512d526035d29131a6dce9f9b44e4b7ce0c57a8a373dc86ba09b753b3a99bbd8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000138800000258000000002328" + } + } + }, + "0xaa6e91c82942aeae040303bf96c15a6dbcb82ca0": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000005f5e100" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d20455552430000000000000000000000000024" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x6145746845555243000000000000000000000000000000000000000000000010" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000008164cc65827dcfe994ab23944cbc90e0aa80bfcb06" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x216e5b3df629165663f01d2c75a435d5053a1b94e2313ca217e8e54e2b7219af" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001abaea1f7c830bd89acc67ec4af516284b1bc33c" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000000000000005f5e100" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007effd7b47bfd17e52fb7559d3f924201b9dbff3d", + "label": "Implementation slot" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e1": { + "previousValue": "0x0068593006000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068593006000000000003000000000000000000000000000000000000000000" + }, + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e2": { + "previousValue": "0x000000000000000000093a800000000000006887548700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006887548700000000000068593007" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_before_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_after.md b/diffs/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_before_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_after.md new file mode 100644 index 000000000..172bfaec8 --- /dev/null +++ b/diffs/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_before_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_after.md @@ -0,0 +1,460 @@ +## Reserve changes + +### Reserves added + +#### ezETH ([0xbf5495Efe5DB9ce00f80364C8B423567e58d2110](https://etherscan.io/address/0xbf5495Efe5DB9ce00f80364C8B423567e58d2110)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 50,000 ezETH | +| borrowCap | 0 ezETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0xF3d49021fF3bbBFDfC1992A4b09E5D1d141D044C](https://etherscan.io/address/0xF3d49021fF3bbBFDfC1992A4b09E5D1d141D044C) | +| oracleDecimals | 8 | +| oracleDescription | Capped ezETH / ezETH(ETH) / USD | +| oracleLatestAnswer | 4039.17212043 | +| usageAsCollateralEnabled | true | +| ltv | 0.05 % [5] | +| liquidationThreshold | 0.1 % [10] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 15 % [1500] | +| aToken | [0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7](https://etherscan.io/address/0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7) | +| variableDebtToken | [0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899](https://etherscan.io/address/0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899) | +| borrowingEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB](https://etherscan.io/address/0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB) | +| aTokenName | Aave Ethereum ezETH | +| aTokenSymbol | aEthezETH | +| aTokenUnderlyingBalance | 0.025 ezETH [25000000000000000] | +| id | 50 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Variable Debt ezETH | +| variableDebtTokenSymbol | variableDebtEthezETH | +| virtualBalance | 0.025 ezETH [25000000000000000] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 0 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 0 % | +| variableRateSlope2 | 0 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=0&variableRateSlope2=0&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=0) | + + +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + + + +### EMode: PT-USDe Stablecoins September 2025(id: 19) + + + +### EMode: PT-USDe USDe September 2025(id: 20) + + + +### EMode: ezETH/wstETH(id: 21) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | ezETH/wstETH | +| eMode.ltv | - | 93 % | +| eMode.liquidationThreshold | - | 95 % | +| eMode.liquidationBonus | - | 1 % | +| eMode.borrowableBitmap | - | wstETH | +| eMode.collateralBitmap | - | ezETH | + + +### EMode: ezETH/Stablecoins(id: 22) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | ezETH/Stablecoins | +| eMode.ltv | - | 75 % | +| eMode.liquidationThreshold | - | 78 % | +| eMode.liquidationBonus | - | 7.5 % | +| eMode.borrowableBitmap | - | USDC, USDT | +| eMode.collateralBitmap | - | ezETH | + + +## Raw diff + +```json +{ + "eModes": { + "21": { + "from": null, + "to": { + "borrowableBitmap": "2", + "collateralBitmap": "1125899906842624", + "eModeCategory": 21, + "label": "ezETH/wstETH", + "liquidationBonus": 10100, + "liquidationThreshold": 9500, + "ltv": 9300 + } + }, + "22": { + "from": null, + "to": { + "borrowableBitmap": "264", + "collateralBitmap": "1125899906842624", + "eModeCategory": 22, + "label": "ezETH/Stablecoins", + "liquidationBonus": 10750, + "liquidationThreshold": 7800, + "ltv": 7500 + } + } + }, + "reserves": { + "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110": { + "from": null, + "to": { + "aToken": "0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7", + "aTokenName": "Aave Ethereum ezETH", + "aTokenSymbol": "aEthezETH", + "aTokenUnderlyingBalance": "25000000000000000", + "borrowCap": 0, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "id": 50, + "interestRateStrategy": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 10, + "ltv": 5, + "oracle": "0xF3d49021fF3bbBFDfC1992A4b09E5D1d141D044C", + "oracleDecimals": 8, + "oracleDescription": "Capped ezETH / ezETH(ETH) / USD", + "oracleLatestAnswer": "403917212043", + "reserveFactor": 1500, + "supplyCap": 50000, + "symbol": "ezETH", + "underlying": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899", + "variableDebtTokenName": "Aave Ethereum Variable Debt ezETH", + "variableDebtTokenSymbol": "variableDebtEthezETH", + "virtualBalance": "25000000000000000" + } + } + }, + "strategies": { + "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110": { + "from": null, + "to": { + "address": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "0", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "0", + "variableRateSlope2": "0" + } + } + }, + "raw": { + "0x481a2acf3a72ffdc602a9541896ca1db87f86cf7": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000058d15e17628000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d20657a45544800000000000000000000000026" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x61457468657a4554480000000000000000000000000000000000000000000012" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xd606f29c741d6c6e915bb83b73ee74b890f7e77c5750e1b2af07e45ea0ecfdea" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bf5495efe5db9ce00f80364c8b423567e58d2110" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000000058d15e17628000" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b76cf0f1d2e1a606c14044607c8c44878aae7186", + "label": "Implementation slot" + } + } + }, + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0xdac6437dacbb7cd7f4be454beb1f150c3dd9e2c30718a52f444c7e340f12f6a9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000f3d49021ff3bbbfdfc1992a4b09e5d1d141d044c" + } + } + }, + "0x7ec9afe70f8fd603282ebacbc9058a83623e2899": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0b4bfafa8fb5c437ae4177feda44cdb31b382fac1f713de0963a9705d44e17eb" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bf5495efe5db9ce00f80364c8b423567e58d2110" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000043" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c6544656274457468657a455448000000000000000000000028" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002b31caa35900f4c8fe6151ccaf8d0ea4a89743a1", + "label": "Implementation slot" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d205661726961626c65204465627420657a4554" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4800000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000003200000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000003300000000000009c4" + }, + "0x174bfcac418d313240a60c90a60ef30998dc3532dc3f813e7d899b7e535632ce": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bf5495efe5db9ce00f80364c8b423567e58d2110" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316ee": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e800000c35000000000005dc811229fe000a0005" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316ef": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000032006894c17300000000000000000000000000000000" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000481a2acf3a72ffdc602a9541896ca1db87f86cf7" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007ec9afe70f8fd603282ebacbc9058a83623e2899" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000058d15e1762800000000000000000000000000000000000" + }, + "0x6c3847a02c991876166c8be676e3ca84a3c105eb60433934c4091c1a7cd316f7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ac": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000040000000000002774251c2454" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ad": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x657a4554482f7773744554480000000000000000000000000000000000000018" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0xc41b4a359cb27641212875221810eb6d8e79d1a2806792a4e2a528d39ef7de28": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000400000000000029fe1e781d4c" + }, + "0xc41b4a359cb27641212875221810eb6d8e79d1a2806792a4e2a528d39ef7de29": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x657a4554482f537461626c65636f696e73000000000000000000000000000022" + }, + "0xc41b4a359cb27641212875221810eb6d8e79d1a2806792a4e2a528d39ef7de2a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000108" + }, + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x000000000000000000000000000000000000000aaa8a2aaa8a802000000aaaaa", + "newValue": "0x000000000000000000000000000000000000002aaa8a2aaa8a802000000aaaaa" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xdac6437dacbb7cd7f4be454beb1f150c3dd9e2c30718a52f444c7e340f12f6a9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000001194" + } + } + }, + "0xbf5495efe5db9ce00f80364c8b423567e58d2110": { + "label": "AaveV3EthereumLido.ASSETS.ezETH.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x144dd7a010f3f6465282bebc9f1fadb88476c0e9abefa8a0865fd9c921c7c369": { + "previousValue": "0x0000000000000000000000000000000000000000000000000058d15e17628000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd009ec6c13da0b4c89a84e1103e562efc1140ce59c5c395519bc3dbb152852ef": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xdc0168d7a2682a308784b4437d6256d24634c68d25988872adbb571049b6b557": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000058d15e17628000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c1f": { + "previousValue": "0x006894c172000000000002000000000000000000000000000000000000000000", + "newValue": "0x006894c172000000000003000000000000000000000000000000000000000000" + }, + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c20": { + "previousValue": "0x000000000000000000093a8000000000000068c2e5f300000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068c2e5f30000000000006894c173" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_before_AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_after.md b/diffs/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_before_AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_after.md new file mode 100644 index 000000000..d694ab63f --- /dev/null +++ b/diffs/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_before_AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_after.md @@ -0,0 +1,420 @@ +## Reserve changes + +### Reserves added + +#### tETH ([0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8](https://etherscan.io/address/0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 10,000 tETH | +| borrowCap | 0 tETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A](https://etherscan.io/address/0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A) | +| oracleDecimals | 8 | +| oracleDescription | Capped tETH / wstETH / ETH / USD | +| oracleLatestAnswer | 4910.91716059 | +| usageAsCollateralEnabled | true | +| ltv | 0.05 % [5] | +| liquidationThreshold | 0.1 % [10] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 15 % [1500] | +| aToken | [0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7](https://etherscan.io/address/0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7) | +| variableDebtToken | [0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899](https://etherscan.io/address/0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899) | +| borrowingEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB](https://etherscan.io/address/0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB) | +| aTokenName | Aave Ethereum tETH | +| aTokenSymbol | aEthtETH | +| aTokenUnderlyingBalance | 0.025 tETH [25000000000000000] | +| id | 50 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Variable Debt tETH | +| variableDebtTokenSymbol | variableDebtEthtETH | +| virtualBalance | 0.025 tETH [25000000000000000] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 0 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 0 % | +| variableRateSlope2 | 0 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=0&variableRateSlope2=0&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=0) | + + +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + + + +### EMode: PT-USDe Stablecoins September 2025(id: 19) + + + +### EMode: PT-USDe USDe September 2025(id: 20) + + + +### EMode: tETH/Stablecoins(id: 21) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | tETH/Stablecoins | +| eMode.ltv | - | 72 % | +| eMode.liquidationThreshold | - | 75 % | +| eMode.liquidationBonus | - | 7.5 % | +| eMode.borrowableBitmap | - | USDC, USDT | +| eMode.collateralBitmap | - | tETH | + + +## Raw diff + +```json +{ + "eModes": { + "21": { + "from": null, + "to": { + "borrowableBitmap": "264", + "collateralBitmap": "1125899906842624", + "eModeCategory": 21, + "label": "tETH/Stablecoins", + "liquidationBonus": 10750, + "liquidationThreshold": 7500, + "ltv": 7200 + } + } + }, + "reserves": { + "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8": { + "from": null, + "to": { + "aToken": "0x481a2acf3A72ffDc602A9541896Ca1DB87f86cf7", + "aTokenName": "Aave Ethereum tETH", + "aTokenSymbol": "aEthtETH", + "aTokenUnderlyingBalance": "25000000000000000", + "borrowCap": 0, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "id": 50, + "interestRateStrategy": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 10, + "ltv": 5, + "oracle": "0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A", + "oracleDecimals": 8, + "oracleDescription": "Capped tETH / wstETH / ETH / USD", + "oracleLatestAnswer": "491091716059", + "reserveFactor": 1500, + "supplyCap": 10000, + "symbol": "tETH", + "underlying": "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x7EC9Afe70f8FD603282eBAcbc9058A83623E2899", + "variableDebtTokenName": "Aave Ethereum Variable Debt tETH", + "variableDebtTokenSymbol": "variableDebtEthtETH", + "virtualBalance": "25000000000000000" + } + } + }, + "strategies": { + "0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8": { + "from": null, + "to": { + "address": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "0", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "0", + "variableRateSlope2": "0" + } + } + }, + "raw": { + "0x481a2acf3a72ffdc602a9541896ca1db87f86cf7": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000058d15e17628000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d20744554480000000000000000000000000024" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x6145746874455448000000000000000000000000000000000000000000000010" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x26d6330f720d7b7aef4a5a2943900818ad71bc3a527faa464b50cf34e3848f73" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000000058d15e17628000" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b76cf0f1d2e1a606c14044607c8c44878aae7186", + "label": "Implementation slot" + } + } + }, + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0xae811e75d50ba33283ff06e4a481d019c723c5fbd03e1a2554bc2d9b02b065bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000085968026294b8f8fb86d6bf3cda079f9376ad05a" + } + } + }, + "0x7ec9afe70f8fd603282ebacbc9058a83623e2899": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xd320820f33e49800513f3949c2539088231974dbc8f8a858cd37c02fd814abe5" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c65446562744574687445544800000000000000000000000026" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002b31caa35900f4c8fe6151ccaf8d0ea4a89743a1", + "label": "Implementation slot" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d205661726961626c6520446562742074455448" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000003200000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000003300000000000009c4" + }, + "0x174bfcac418d313240a60c90a60ef30998dc3532dc3f813e7d899b7e535632ce": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d11c452fc99cf405034ee446803b6f6c1f6d5ed8" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ac": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000400000000000029fe1d4c1c20" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ad": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x744554482f537461626c65636f696e7300000000000000000000000000000020" + }, + "0x79c6e29436490262cb24ee8bc0beb79364a1b588e1732d1098b1d9c2838ed8ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000108" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c014": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e800000271000000000005dc811229fe000a0005" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c015": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c016": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c017": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000032006896468f00000000000000000000000000000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c018": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000481a2acf3a72ffdc602a9541896ca1db87f86cf7" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007ec9afe70f8fd603282ebacbc9058a83623e2899" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000058d15e1762800000000000000000000000000000000000" + }, + "0xb175b141cba0cc992ab972ad55e21f463dc10a5251e5513e6498931ace66c01d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x000000000000000000000000000000000000000aaa8a2aaa8a802000000aaaaa", + "newValue": "0x000000000000000000000000000000000000002aaa8a2aaa8a802000000aaaaa" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.EURC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_25SEP2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_25SEP2025.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xae811e75d50ba33283ff06e4a481d019c723c5fbd03e1a2554bc2d9b02b065bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000001194" + } + } + }, + "0xd11c452fc99cf405034ee446803b6f6c1f6d5ed8": { + "label": "AaveV3EthereumLido.ASSETS.tETH.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x2022e56a2d37a0e7b2339f9a850bd446cd2dab30c80988af47a31b0e9fda5cfc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x31faaccc375cc214196213bd298e4f0b16d02b9261eb8049291f7b503901f2c6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "newValue": "0x0000000000000000000000000000000000000000000000000d87e55590018000" + }, + "0x9007446168372b6721ce3ee24ff23355a1ba031f52f23db85b3f344945b27a77": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000058d15e17628000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c1f": { + "previousValue": "0x006896468e000000000002000000000000000000000000000000000000000000", + "newValue": "0x006896468e000000000003000000000000000000000000000000000000000000" + }, + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c20": { + "previousValue": "0x000000000000000000093a8000000000000068c46b0f00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068c46b0f0000000000006896468f" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_before_AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_after.md b/diffs/AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_before_AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_after.md new file mode 100644 index 000000000..6f16ed5c3 --- /dev/null +++ b/diffs/AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_before_AaveV3Ethereum_AddUSDeToTheSUSDeEmodeCategory_20250723_after.md @@ -0,0 +1,157 @@ +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label (unchanged) | sUSDe Stablecoins | sUSDe Stablecoins | +| eMode.ltv (unchanged) | 90 % | 90 % | +| eMode.liquidationThreshold (unchanged) | 92 % | 92 % | +| eMode.liquidationBonus (unchanged) | 4 % | 4 % | +| eMode.borrowableBitmap (unchanged) | USDC, USDT, USDS | USDC, USDT, USDS | +| eMode.collateralBitmap | sUSDe | USDe, sUSDe | + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + + + +## Raw diff + +```json +{ + "eModes": { + "2": { + "collateralBitmap": { + "from": "4294967296", + "to": "5368709120" + } + } + }, + "raw": { + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d86": { + "previousValue": "0x0068813986000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068813986000000000003000000000000000000000000000000000000000000" + }, + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d87": { + "previousValue": "0x000000000000000000093a8000000000000068af5e0700000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af5e0700000000000068813987" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x67dcc86da9aaaf40a183002157e56801115aa6057705e43279b4c1c90942d6b2": { + "previousValue": "0x000000000000000000000000000000000000000000010000000028a023f02328", + "newValue": "0x000000000000000000000000000000000000000000014000000028a023f02328" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_before_AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_after.md b/diffs/AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_before_AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_after.md new file mode 100644 index 000000000..5875c2950 --- /dev/null +++ b/diffs/AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_before_AaveV3Ethereum_AdditionOfUSDeToEthenaPrincipalTokenStablecoinEModes_20250623_after.md @@ -0,0 +1,167 @@ +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label (unchanged) | PT-USDe Stablecoins July 2025 | PT-USDe Stablecoins July 2025 | +| eMode.ltv (unchanged) | 91 % | 91 % | +| eMode.liquidationThreshold (unchanged) | 93 % | 93 % | +| eMode.liquidationBonus (unchanged) | 2.7 % | 2.7 % | +| eMode.borrowableBitmap | USDC, USDT, USDS | USDC, USDT, USDe, USDS | +| eMode.collateralBitmap (unchanged) | USDe, PT-USDe-31JUL2025 | USDe, PT-USDe-31JUL2025 | + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label (unchanged) | PT-eUSDe Stablecoins August 2025 | PT-eUSDe Stablecoins August 2025 | +| eMode.ltv (unchanged) | 91 % | 91 % | +| eMode.liquidationThreshold (unchanged) | 93 % | 93 % | +| eMode.liquidationBonus (unchanged) | 3.2 % | 3.2 % | +| eMode.borrowableBitmap | USDC, USDT, USDS | USDC, USDT, USDe, USDS | +| eMode.collateralBitmap (unchanged) | PT-eUSDE-14AUG2025, eUSDe | PT-eUSDE-14AUG2025, eUSDe | + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +## Raw diff + +```json +{ + "eModes": { + "10": { + "borrowableBitmap": { + "from": "34359738632", + "to": "35433480456" + } + }, + "13": { + "borrowableBitmap": { + "from": "34359738632", + "to": "35433480456" + } + } + }, + "raw": { + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xa6ec75fb559f5d48b779a90884ecf3a5c30c1991569cfc396bc64fdf43341a98": { + "previousValue": "0x00687642be000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687642be000000000003000000000000000000000000000000000000000000" + }, + "0xa6ec75fb559f5d48b779a90884ecf3a5c30c1991569cfc396bc64fdf43341a99": { + "previousValue": "0x000000000000000000093a8000000000000068a4673f00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068a4673f000000000000687642bf" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x04e6a57294bb916b654e5f2a9be58b33bb23f83005593c07f959637b56d00d71": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000800000108", + "newValue": "0x0000000000000000000000000000000000000000000000000000000840000108" + }, + "0xb6395f9c432dd8cece69c29d0bafa901e98160153dacb5e1d5fb45e8d47ba1d8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000800000108", + "newValue": "0x0000000000000000000000000000000000000000000000000000000840000108" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_before_AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_after.md b/diffs/AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_before_AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_after.md new file mode 100644 index 000000000..d819f01c5 --- /dev/null +++ b/diffs/AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_before_AaveV3Ethereum_AmendPTSUSDeSeptemberStablecoinEmode_20250721_after.md @@ -0,0 +1,165 @@ +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label (unchanged) | PT-sUSDe Stablecoins September 2025 | PT-sUSDe Stablecoins September 2025 | +| eMode.ltv (unchanged) | 88 % | 88 % | +| eMode.liquidationThreshold (unchanged) | 90 % | 90 % | +| eMode.liquidationBonus (unchanged) | 5 % | 5 % | +| eMode.borrowableBitmap | USDC, USDT, USDe, USDS | USDC, USDT, USDe, USDS, USDtb | +| eMode.collateralBitmap | PT-sUSDE-25SEP2025 | sUSDe, PT-sUSDE-31JUL2025, PT-sUSDE-25SEP2025 | + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + + + +## Raw diff + +```json +{ + "eModes": { + "17": { + "borrowableBitmap": { + "from": "35433480456", + "to": "4433479991560" + }, + "collateralBitmap": { + "from": "281474976710656", + "to": "283678294933504" + } + } + }, + "raw": { + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a26": { + "previousValue": "0x00687ea016000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687ea016000000000003000000000000000000000000000000000000000000" + }, + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a27": { + "previousValue": "0x000000000000000000093a8000000000000068acc49700000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068acc497000000000000687ea017" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x7635c6f6fb0dc990d132e97ffe82e07606fac72c3d39da71ac41d6a8564addda": { + "previousValue": "0x0000000000000000000000000000000000000001000000000000290423282260", + "newValue": "0x0000000000000000000000000000000000000001020100000000290423282260" + }, + "0x7635c6f6fb0dc990d132e97ffe82e07606fac72c3d39da71ac41d6a8564adddc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000840000108", + "newValue": "0x0000000000000000000000000000000000000000000000000000040840000108" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_AuditReimbursement_before_AaveV3Ethereum_AuditReimbursement_after.md b/diffs/AaveV3Ethereum_AuditReimbursement_before_AaveV3Ethereum_AuditReimbursement_after.md new file mode 100644 index 000000000..ba03e2acb --- /dev/null +++ b/diffs/AaveV3Ethereum_AuditReimbursement_before_AaveV3Ethereum_AuditReimbursement_after.md @@ -0,0 +1,46 @@ +## Raw diff + +```json +{ + "raw": { + "0x23878914efe38d27c4d67ab83ed1b93a74d4086a": { + "label": "AaveV3Ethereum.ASSETS.USDT.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x14a553e31736f19e3e380cf55bfb2f82dfd6d880cd07235affb68d8d3e0cac4d": { + "previousValue": "0x0000000003a41e54854d07f254a47c670000000000000000000009a490296058", + "newValue": "0x0000000003a42560849f7a37e105e22c00000000000000000000097887628902" + }, + "0xf57a0f05777e493f6eb3a9303c3f677c25a62ed0fdbf9d58a277df4680f70afb": { + "previousValue": "0x0000000003a2fff2407c30791bec767a00000000000000000000000000000000", + "newValue": "0x0000000003a42560849f7a37e105e22c00000000000000000000002c08c6d756" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0xb0754737dd7d73f2c2b41766cee7cdd1d344cfedefa667d0549f97273e960a91": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000280", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000020280" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x0ec66851261d57853f2f5bf29b6fdf002ea7b1825ef27ca0f35da137982bd7dc": { + "previousValue": "0x0068518be2000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068518be2000000000003000000000000000000000000000000000000000000" + }, + "0x0ec66851261d57853f2f5bf29b6fdf002ea7b1825ef27ca0f35da137982bd7dd": { + "previousValue": "0x000000000000000000093a80000000000000687fb06300000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687fb06300000000000068518be3" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_before_AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_after.md b/diffs/AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_before_AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_after.md new file mode 100644 index 000000000..26de5307c --- /dev/null +++ b/diffs/AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_before_AaveV3Ethereum_ChaosLabsXAaveDAOEarlyRenewalProposal_20250625_after.md @@ -0,0 +1,136 @@ +## Raw diff + +```json +{ + "raw": { + "0x10c74b37ad4541e394c607d78062e6d22d9ad632": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000186ae", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000186af" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000005c257ca254d360ca66" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08ba": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000003105a7c0309a" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08bb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000005c257ca254d360ca66" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08bc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006872f700" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006a542a7f" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08be": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc540e0729b732fb14afa240aa5a047ae9ba7df0" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08bf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000025f2226b597e8f9514b3f68f00f494cf4f286491" + }, + "0xf00d2af263841a8e822e5fe51db97358213f2b59da23c9b33328d131358f08c0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000017fc66500c84a76ad7e9c93437bfc5ac33e2ddae9" + } + } + }, + "0x25f2226b597e8f9514b3f68f00f494cf4f286491": { + "label": "MiscEthereum.ECOSYSTEM_RESERVE", + "balanceDiff": null, + "stateDiff": {} + }, + "0x3d569673daa0575c936c7c67c4e6aeda69cc630c": { + "label": "MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c": { + "label": "AaveV2Ethereum.COLLECTOR, AaveV2EthereumAMM.COLLECTOR, AaveV2EthereumArc.COLLECTOR, AaveV3Ethereum.COLLECTOR, AaveV3EthereumEtherFi.COLLECTOR, AaveV3EthereumLido.COLLECTOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e1": { + "previousValue": "0x00685b9bce000000000002000000000000000000000000000000000000000000", + "newValue": "0x00685b9bce000000000003000000000000000000000000000000000000000000" + }, + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e2": { + "previousValue": "0x000000000000000000093a800000000000006889c04f00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006889c04f000000000000685b9bcf" + } + } + }, + "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9": { + "label": "AaveV2Ethereum.ASSETS.AAVE.UNDERLYING, AaveV2EthereumArc.ASSETS.AAVE.UNDERLYING, AaveV3Ethereum.ASSETS.AAVE.UNDERLYING", + "balanceDiff": null, + "stateDiff": {} + }, + "0x83b7ce402a0e756e901c4a9d1cafa27ca9572afc": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000186e1", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000186e2" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b0231e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000021bfbc6e8f0f78cfb84d1" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b0231f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000011f45b75aeb2faf" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02320": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000021bfbc6e8f0f78cfb84d1" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02321": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006872f700" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02322": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006a542a7f" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02323": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc540e0729b732fb14afa240aa5a047ae9ba7df0" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02324": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x8705992c1fb85ca877d2f548009012c65a4ee807174306144885a66f77b02325": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000118efe565a5373f430e2f809b97de30335b3ad96a" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_before_AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_after.md b/diffs/AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_before_AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_after.md new file mode 100644 index 000000000..87ed8f6e4 --- /dev/null +++ b/diffs/AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_before_AaveV3Ethereum_DeprecationOfLongTailAssets_20250715_after.md @@ -0,0 +1,152 @@ +## Reserve changes + +### Reserves altered + +#### SNX ([0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F](https://etherscan.io/address/0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F)) + +| description | value before | value after | +| --- | --- | --- | +| debtCeiling | 4,000,000 $ [400000000] | 1 $ [100] | +| ltv | 49 % [4900] | 0 % [0] | +| reserveFactor | 35 % [3500] | 95 % [9500] | +| maxVariableBorrowRate | 168 % | 171 % | +| baseVariableBorrowRate | 3 % | 6 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=150000000000000000000000000&variableRateSlope2=1500000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=30000000000000000000000000&maxVariableBorrowRate=1680000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=150000000000000000000000000&variableRateSlope2=1500000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=60000000000000000000000000&maxVariableBorrowRate=1710000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F": { + "debtCeiling": { + "from": 400000000, + "to": 100 + }, + "ltv": { + "from": 4900, + "to": 0 + }, + "reserveFactor": { + "from": 3500, + "to": 9500 + } + } + }, + "strategies": { + "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F": { + "baseVariableBorrowRate": { + "from": "30000000000000000000000000", + "to": "60000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "1680000000000000000000000000", + "to": "1710000000000000000000000000" + } + } + }, + "raw": { + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xa67202cdd5816eb3aaf4ba690ecc450e266895ca4e1a61ec881c233f7f7ea465": { + "previousValue": "0x00000000000824433c42605f8efa6954000000000350dfa115aa8cb04b7f685a", + "newValue": "0x000000000000d7d0f6517f84e095dd3d00000000035115c86097a61978bb294e" + }, + "0xa67202cdd5816eb3aaf4ba690ecc450e266895ca4e1a61ec881c233f7f7ea466": { + "previousValue": "0x000000000048789442c2a36b367a3fd60000000003b831a49591cc549ba9f741", + "newValue": "0x0000000000615fba05970a10700eab610000000003ba4ef2ca768aac8f03c73c" + }, + "0xa67202cdd5816eb3aaf4ba690ecc450e266895ca4e1a61ec881c233f7f7ea467": { + "previousValue": "0x000000000000000000000d00686a51cb00000000000000000000950090082d92", + "newValue": "0x000000000000000000000d00687680ab00000000000000000000950090082d92" + }, + "0xa67202cdd5816eb3aaf4ba690ecc450e266895ca4e1a61ec881c233f7f7ea46c": { + "previousValue": "0x00000000000084df2d08f43ae8c3cf9300000000000000000000000000000000", + "newValue": "0x00000000000084df2d08f43ae8c3cf93000000000000000561af99200e692cea" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xa6ec75fb559f5d48b779a90884ecf3a5c30c1991569cfc396bc64fdf43341a98": { + "previousValue": "0x00687680aa000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687680aa000000000003000000000000000000000000000000000000000000" + }, + "0xa6ec75fb559f5d48b779a90884ecf3a5c30c1991569cfc396bc64fdf43341a99": { + "previousValue": "0x000000000000000000093a8000000000000068a4a52b00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068a4a52b000000000000687680ab" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x8d0de040e8aad872ec3c33a3776de9152d3c34ca": { + "label": "AaveV3Ethereum.ASSETS.SNX.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xa67202cdd5816eb3aaf4ba690ecc450e266895ca4e1a61ec881c233f7f7ea464": { + "previousValue": "0x10017d784000000000000003e80000000010000000010dac81122a6219641324", + "newValue": "0x100000000640000000000003e8000000001000000001251c81122a6219640000" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FBTC.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x6cd63715d5f0db03eec592ada4e78050279222b9583fb20a52ef8a37c8e911b9": { + "previousValue": "0x00000000000000000000000000000000000000003a98000005dc0000012c1194", + "newValue": "0x00000000000000000000000000000000000000003a98000005dc000002581194" + } + } + }, + "0xb58ed8ec66e43de3fecd27e351485e7efe006f38": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_EnableAdditionalSVROracles_20250613_before_AaveV3Ethereum_EnableAdditionalSVROracles_20250613_after.md b/diffs/AaveV3Ethereum_EnableAdditionalSVROracles_20250613_before_AaveV3Ethereum_EnableAdditionalSVROracles_20250613_after.md new file mode 100644 index 000000000..e2b707096 --- /dev/null +++ b/diffs/AaveV3Ethereum_EnableAdditionalSVROracles_20250613_before_AaveV3Ethereum_EnableAdditionalSVROracles_20250613_after.md @@ -0,0 +1,315 @@ +## Reserve changes + +### Reserve altered + +#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0xB4aB0c94159bc2d8C133946E7241368fc2F2a010](https://etherscan.io/address/0xB4aB0c94159bc2d8C133946E7241368fc2F2a010) | [0xe1D97bF61901B075E9626c8A2340a7De385861Ef](https://etherscan.io/address/0xe1D97bF61901B075E9626c8A2340a7De385861Ef) | +| oracleLatestAnswer | 3044.72756127 | 3041.04944447 | + + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA](https://etherscan.io/address/0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA) | [0x3f73F03aa83B2A48ed27E964eD0fDb590332095B](https://etherscan.io/address/0x3f73F03aa83B2A48ed27E964eD0fDb590332095B) | +| oracleDescription | Capped USDC/USD | Capped USDC / USD | +| oracleLatestAnswer | 0.99973 | 0.99985023 | + + +#### rsETH ([0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7](https://etherscan.io/address/0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x47F52B2e43D0386cF161e001835b03Ad49889e3b](https://etherscan.io/address/0x47F52B2e43D0386cF161e001835b03Ad49889e3b) | [0x7292C95A5f6A501a9c4B34f6393e221F2A0139c3](https://etherscan.io/address/0x7292C95A5f6A501a9c4B34f6393e221F2A0139c3) | +| oracleLatestAnswer | 2644.377825 | 2641.18334198 | + + +#### ETHx ([0xA35b1B31Ce002FBF2058D22F30f95D405200A15b](https://etherscan.io/address/0xA35b1B31Ce002FBF2058D22F30f95D405200A15b)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0xD6270dAabFe4862306190298C2B48fed9e15C847](https://etherscan.io/address/0xD6270dAabFe4862306190298C2B48fed9e15C847) | [0xd7b163B671f8cE9379DF8Ff7F75fA72Ccec1841c](https://etherscan.io/address/0xd7b163B671f8cE9379DF8Ff7F75fA72Ccec1841c) | +| oracleLatestAnswer | 2684.39655154 | 2681.15372477 | + + +#### cbETH ([0xBe9895146f7AF43049ca1c1AE358B0541Ea49704](https://etherscan.io/address/0xBe9895146f7AF43049ca1c1AE358B0541Ea49704)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x6243d2F41b4ec944F731f647589E28d9745a2674](https://etherscan.io/address/0x6243d2F41b4ec944F731f647589E28d9745a2674) | [0x889399C34461b25d70d43931e6cE9E40280E617B](https://etherscan.io/address/0x889399C34461b25d70d43931e6cE9E40280E617B) | +| oracleLatestAnswer | 2786.17851316 | 2782.8127309 | + + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419](https://etherscan.io/address/0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419) | [0x5424384B256154046E9667dDFaaa5e550145215e](https://etherscan.io/address/0x5424384B256154046E9667dDFaaa5e550145215e) | +| oracleLatestAnswer | 2526.1347 | 2523.08305801 | + + +#### weETH ([0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee](https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3](https://etherscan.io/address/0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3) | [0x87625393534d5C102cADB66D37201dF24cc26d4C](https://etherscan.io/address/0x87625393534d5C102cADB66D37201dF24cc26d4C) | +| oracleLatestAnswer | 2702.25779973 | 2698.99339607 | + + +#### rETH ([0xae78736Cd615f374D3085123A210448E74Fc6393](https://etherscan.io/address/0xae78736Cd615f374D3085123A210448E74Fc6393)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x5AE8365D0a30D67145f0c55A08760C250559dB64](https://etherscan.io/address/0x5AE8365D0a30D67145f0c55A08760C250559dB64) | [0x6929706c42d637DF5Ebf7F0BcfF2aF47F84Ea69D](https://etherscan.io/address/0x6929706c42d637DF5Ebf7F0BcfF2aF47F84Ea69D) | +| oracleLatestAnswer | 2876.2497455 | 2872.77515466 | + + +#### osETH ([0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38](https://etherscan.io/address/0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x0A2AF898cEc35197e6944D9E0F525C2626393442](https://etherscan.io/address/0x0A2AF898cEc35197e6944D9E0F525C2626393442) | [0x2b86D519eF34f8Adfc9349CDeA17c09Aa9dB60E2](https://etherscan.io/address/0x2b86D519eF34f8Adfc9349CDeA17c09Aa9dB60E2) | +| oracleLatestAnswer | 2648.43500147 | 2645.23561727 | + + +## Raw diff + +```json +{ + "reserves": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "oracle": { + "from": "0xB4aB0c94159bc2d8C133946E7241368fc2F2a010", + "to": "0xe1D97bF61901B075E9626c8A2340a7De385861Ef" + }, + "oracleLatestAnswer": { + "from": "304472756127", + "to": "304104944447" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "oracle": { + "from": "0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA", + "to": "0x3f73F03aa83B2A48ed27E964eD0fDb590332095B" + }, + "oracleDescription": { + "from": "Capped USDC/USD", + "to": "Capped USDC / USD" + }, + "oracleLatestAnswer": { + "from": "99973000", + "to": "99985023" + } + }, + "0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7": { + "oracle": { + "from": "0x47F52B2e43D0386cF161e001835b03Ad49889e3b", + "to": "0x7292C95A5f6A501a9c4B34f6393e221F2A0139c3" + }, + "oracleLatestAnswer": { + "from": "264437782500", + "to": "264118334198" + } + }, + "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b": { + "oracle": { + "from": "0xD6270dAabFe4862306190298C2B48fed9e15C847", + "to": "0xd7b163B671f8cE9379DF8Ff7F75fA72Ccec1841c" + }, + "oracleLatestAnswer": { + "from": "268439655154", + "to": "268115372477" + } + }, + "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704": { + "oracle": { + "from": "0x6243d2F41b4ec944F731f647589E28d9745a2674", + "to": "0x889399C34461b25d70d43931e6cE9E40280E617B" + }, + "oracleLatestAnswer": { + "from": "278617851316", + "to": "278281273090" + } + }, + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "oracle": { + "from": "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419", + "to": "0x5424384B256154046E9667dDFaaa5e550145215e" + }, + "oracleLatestAnswer": { + "from": "252613470000", + "to": "252308305801" + } + }, + "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": { + "oracle": { + "from": "0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3", + "to": "0x87625393534d5C102cADB66D37201dF24cc26d4C" + }, + "oracleLatestAnswer": { + "from": "270225779973", + "to": "269899339607" + } + }, + "0xae78736Cd615f374D3085123A210448E74Fc6393": { + "oracle": { + "from": "0x5AE8365D0a30D67145f0c55A08760C250559dB64", + "to": "0x6929706c42d637DF5Ebf7F0BcfF2aF47F84Ea69D" + }, + "oracleLatestAnswer": { + "from": "287624974550", + "to": "287277515466" + } + }, + "0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38": { + "oracle": { + "from": "0x0A2AF898cEc35197e6944D9E0F525C2626393442", + "to": "0x2b86D519eF34f8Adfc9349CDeA17c09Aa9dB60E2" + }, + "oracleLatestAnswer": { + "from": "264843500147", + "to": "264523561727" + } + } + }, + "raw": { + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x01e31ce9e26a9ca5180dcb0a75e33e53ef4b11264df43624ffa093ce233c5f10": { + "previousValue": "0x0000000000000000000000005ae8365d0a30d67145f0c55a08760c250559db64", + "newValue": "0x0000000000000000000000006929706c42d637df5ebf7f0bcff2af47f84ea69d" + }, + "0x2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a4": { + "previousValue": "0x0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419", + "newValue": "0x0000000000000000000000005424384b256154046e9667ddfaaa5e550145215e" + }, + "0x4bab9d6e035961cd82876e0c1d0b69f770f01d1e792c0c28ac24c31fb7391ad2": { + "previousValue": "0x000000000000000000000000f112af6f0a332b815fbef3ff932c057e570b62d3", + "newValue": "0x00000000000000000000000087625393534d5c102cadb66d37201df24cc26d4c" + }, + "0x65285aa63221bfb8a5ecec32584c3ebdee0bccf96c4ac69a7295d63eafd4d055": { + "previousValue": "0x0000000000000000000000000a2af898cec35197e6944d9e0f525c2626393442", + "newValue": "0x0000000000000000000000002b86d519ef34f8adfc9349cdea17c09aa9db60e2" + }, + "0x7c8c7843500e748654b05ef999493d1496832459b7b0b518760ab2e273a50fa1": { + "previousValue": "0x000000000000000000000000d6270daabfe4862306190298c2b48fed9e15c847", + "newValue": "0x000000000000000000000000d7b163b671f8ce9379df8ff7f75fa72ccec1841c" + }, + "0x92b1303370d00ac37fc3bf1b6b90981e7ec7d961304389d4b4a33ff8350992b1": { + "previousValue": "0x0000000000000000000000006243d2f41b4ec944f731f647589e28d9745a2674", + "newValue": "0x000000000000000000000000889399c34461b25d70d43931e6ce9e40280e617b" + }, + "0xc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d": { + "previousValue": "0x000000000000000000000000b6557f02f0a5da7b9d3c2d979cc19e00e756f6da", + "newValue": "0x0000000000000000000000003f73f03aa83b2a48ed27e964ed0fdb590332095b" + }, + "0xeaa7881e9c0f663b7ee228884668dd7f4fc65ef5a68443f53a93344905cf4b96": { + "previousValue": "0x00000000000000000000000047f52b2e43d0386cf161e001835b03ad49889e3b", + "newValue": "0x0000000000000000000000007292c95a5f6a501a9c4b34f6393e221f2a0139c3" + }, + "0xf37caed32e4e49c83636e0f1684f3f4a9a23c463a49eb17cd63abd50680b378b": { + "previousValue": "0x000000000000000000000000b4ab0c94159bc2d8c133946e7241368fc2f2a010", + "newValue": "0x000000000000000000000000e1d97bf61901b075e9626c8a2340a7de385861ef" + } + } + }, + "0x8b493f416f5f7933cc146b1899c069f2361cad60": { + "label": "AaveV3Ethereum.SVR_STEWARD", + "balanceDiff": null, + "stateDiff": { + "0x37c5eec85d84da1cf053e48828b531c27553684966639a8ba393ecfe725880fd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b6557f02f0a5da7b9d3c2d979cc19e00e756f6da" + }, + "0x3850ff63f77f3d26142528795648093a9003b582a160ff057e6e013dd80c751e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d7b163b671f8ce9379df8ff7f75fa72ccec1841c" + }, + "0x44c90938b18af7911cb80b5dac1acc182fe08ef24070d8e5fa51b5f5034a6ec9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000889399c34461b25d70d43931e6ce9e40280e617b" + }, + "0x4e0c62681f87e6a48bb56176abcc4bb3a586d3ca16272e6059bc99151f41595b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b4ab0c94159bc2d8c133946e7241368fc2f2a010" + }, + "0x67aa9b7d2b6d14f3837d07b1073399a41e4104b1d98f169f02cc04f44f14f4b0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419" + }, + "0x81422f494d76e81b70300094ce468aba031ea0d448e002f6d5a2627cc854241b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000047f52b2e43d0386cf161e001835b03ad49889e3b" + }, + "0x8a2419dc6ca3e1601cd081ae0a8532c17ca8ea138492da7b47cee09f8e19c257": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002b86d519ef34f8adfc9349cdea17c09aa9db60e2" + }, + "0x8d281ed8e8789c34c542dc7c9bcb10713610073094d7a733a00233223f10a39f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006929706c42d637df5ebf7f0bcff2af47f84ea69d" + }, + "0x8ed037c4316634855da0add44113166d4dd37c7ec1aa0b38f145b21700bf7a46": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000f112af6f0a332b815fbef3ff932c057e570b62d3" + }, + "0xa022f83e56d730748e0b3e31022e72bddd96036d0881dffdd15af56736d6b4a1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000005ae8365d0a30d67145f0c55a08760c250559db64" + }, + "0xb7598821b71eb990d952f174dec3507a6d48dc93be8e23cae785c98ca310bfbb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003f73f03aa83b2a48ed27e964ed0fdb590332095b" + }, + "0xbca962ae33890e329ee8e00e84b5da91e13f18786388f46890e99453239f096a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000d6270daabfe4862306190298c2b48fed9e15c847" + }, + "0xcd9849f8356d3bfbfbbf2418798f22ea2a2eacc15bb7a603cfbf3d1d84a13903": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006243d2f41b4ec944f731f647589e28d9745a2674" + }, + "0xcde86e404a62a85dcfd45efa81946aa50f1384fec1797d6ab4de4a9d2bec2adb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000e1d97bf61901b075e9626c8a2340a7de385861ef" + }, + "0xd4df82b7ad974036c146111f6f75aee6248262858b22bd210da4d156b3effc7b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000a2af898cec35197e6944d9e0f525c2626393442" + }, + "0xde032e96a833a2191f55c5766e34554d9b07734477ea9cb69c40158c1078e793": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000005424384b256154046e9667ddfaaa5e550145215e" + }, + "0xe61be2cc7418d0d567c95413a8d891789e93ac841ea796b182da5f6207798658": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000087625393534d5c102cadb66d37201df24cc26d4c" + }, + "0xe66b6daccdfb02f5665645bc41ead19a827a75ead62951fb01dae7ee1aa1120b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007292c95a5f6a501a9c4b34f6393e221f2a0139c3" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31a": { + "previousValue": "0x00684c0106000000000002000000000000000000000000000000000000000000", + "newValue": "0x00684c0106000000000003000000000000000000000000000000000000000000" + }, + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31b": { + "previousValue": "0x000000000000000000093a80000000000000687a258700000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687a2587000000000000684c0107" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_EventsGrant2025_20250612_before_AaveV3Ethereum_EventsGrant2025_20250612_after.md b/diffs/AaveV3Ethereum_EventsGrant2025_20250612_before_AaveV3Ethereum_EventsGrant2025_20250612_after.md new file mode 100644 index 000000000..badbe0755 --- /dev/null +++ b/diffs/AaveV3Ethereum_EventsGrant2025_20250612_before_AaveV3Ethereum_EventsGrant2025_20250612_after.md @@ -0,0 +1,36 @@ +## Raw diff + +```json +{ + "raw": { + "0x40d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f": { + "label": "AaveV3Ethereum.ASSETS.GHO.UNDERLYING, AaveV3EthereumLido.ASSETS.GHO.UNDERLYING, GhoEthereum.GHO_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x3107e6fb53c93683833e8824cc59e9c9f27821bf7d710a977a825c1959995195": { + "previousValue": "0x000000000000000000000000000000000000000000020ad64130d2d1cd4bdc81", + "newValue": "0x000000000000000000000000000000000000000000016c04ac55b91f948bdc81" + }, + "0x91baf6fc6fd59ab30124d7c94e4c987e053631bb38ad3b5fce49321057576686": { + "previousValue": "0x0000000000000000000000000000000000000000000160aeadaab490db94a612", + "newValue": "0x00000000000000000000000000000000000000000001ff804285ce431454a612" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31a": { + "previousValue": "0x00684ae376000000000002000000000000000000000000000000000000000000", + "newValue": "0x00684ae376000000000003000000000000000000000000000000000000000000" + }, + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31b": { + "previousValue": "0x000000000000000000093a80000000000000687907f700000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687907f7000000000000684ae377" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md b/diffs/AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md new file mode 100644 index 000000000..b52d35c8b --- /dev/null +++ b/diffs/AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_before_AaveV3Ethereum_InterestRateUpdateWETHAndWstETHEthereum_20250721_after.md @@ -0,0 +1,139 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 5 % [500] | 35 % [3500] | +| maxVariableBorrowRate | 86.6 % | 41 % | +| variableRateSlope1 | 1.6 % | 1 % | +| variableRateSlope2 | 85 % | 40 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=16000000000000000000000000&variableRateSlope2=850000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=866000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=10000000000000000000000000&variableRateSlope2=400000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=410000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "reserveFactor": { + "from": 500, + "to": 3500 + } + } + }, + "strategies": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "maxVariableBorrowRate": { + "from": "866000000000000000000000000", + "to": "410000000000000000000000000" + }, + "variableRateSlope1": { + "from": "16000000000000000000000000", + "to": "10000000000000000000000000" + }, + "variableRateSlope2": { + "from": "850000000000000000000000000", + "to": "400000000000000000000000000" + } + } + }, + "raw": { + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b3": { + "previousValue": "0x0000000000009adc2b99f92f8b31cc7a00000000033c481aa41e9356b0beafd6", + "newValue": "0x00000000000042391961d8088aae8f0500000000033c481aa41e9356b0beafd6" + }, + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b4": { + "previousValue": "0x0000000000033ee398e498cb0719512c000000000343e1f71b0e9af814c2257f", + "newValue": "0x000000000002074e3f8edf7ee46fd2bc000000000343e1f71b0e9af814c2257f" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a26": { + "previousValue": "0x00687e21f2000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687e21f2000000000003000000000000000000000000000000000000000000" + }, + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a27": { + "previousValue": "0x000000000000000000093a8000000000000068ac467300000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ac4673000000000000687e21f3" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xc9d7ec48cd0d839522455f78914adfeda8686316bb6819e0888e4bcd349e01b2": { + "previousValue": "0x100000000000000000000103e80001adb0000007530001f4851229681fa41eaa", + "newValue": "0x100000000000000000000103e80001adb000000753000dac851229681fa41eaa" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FBTC.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xf37caed32e4e49c83636e0f1684f3f4a9a23c463a49eb17cd63abd50680b378b": { + "previousValue": "0x00000000000000000000000000000000000000002134000000a0000000001f40", + "newValue": "0x00000000000000000000000000000000000000000fa000000064000000001f40" + } + } + }, + "0xb58ed8ec66e43de3fecd27e351485e7efe006f38": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xc96113eed8cab59cd8a66813bcb0ceb29f06d2e4": { + "label": "AaveV3Ethereum.ASSETS.wstETH.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_July2025FundingUpdate_20250720_before_AaveV3Ethereum_July2025FundingUpdate_20250720_after.md b/diffs/AaveV3Ethereum_July2025FundingUpdate_20250720_before_AaveV3Ethereum_July2025FundingUpdate_20250720_after.md new file mode 100644 index 000000000..28c2408d6 --- /dev/null +++ b/diffs/AaveV3Ethereum_July2025FundingUpdate_20250720_before_AaveV3Ethereum_July2025FundingUpdate_20250720_after.md @@ -0,0 +1,320 @@ +## Raw diff + +```json +{ + "raw": { + "0x09aa30b182488f769a9824f15e6ce58591da4781": { + "label": "AaveV3EthereumLido.ASSETS.USDS.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x1c9219960928272f24f6428ef210f3b2b07d28d1a5e724b7119ecc245cce49b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000034f086f3b33b68400000" + } + } + }, + "0x18efe565a5373f430e2f809b97de30335b3ad96a": { + "label": "AaveV3EthereumLido.ASSETS.GHO.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x1c9219960928272f24f6428ef210f3b2b07d28d1a5e724b7119ecc245cce49b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000034f086f3b33b68400000" + } + } + }, + "0x23878914efe38d27c4d67ab83ed1b93a74d4086a": { + "label": "AaveV3Ethereum.ASSETS.USDT.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x1c9219960928272f24f6428ef210f3b2b07d28d1a5e724b7119ecc245cce49b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000003a35294400" + }, + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000001d1a94a2000" + } + } + }, + "0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x2f0515d3e6804b0792136a69384e701be39b327661d6725ed995364120a01e72": { + "previousValue": "0x0000000000000000002c45bb130e4cfdc8996f0e9738cf15311b6dbd38000000", + "newValue": "0x0000000000000000002c467842ce691557658fae0ea481f3e4f5528b90000000" + }, + "0x58cc793c612fb6e916072ff76b4b0f3ac978855649f6110fc0a6b03ee643d2d2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7adce341587c7ad28f80a9ef54da0d2f0bfd917b11856be2d246a8c66685b1a0": { + "previousValue": "0x00000000000000000026e07d60822ad0028d8308d9d7b25c476d94ca58000000", + "newValue": "0x00000000000000000026dfc030c20eb873c16269626bff7d9393affc00000000" + } + } + }, + "0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c": { + "label": "AaveV2Ethereum.COLLECTOR, AaveV2EthereumAMM.COLLECTOR, AaveV2EthereumArc.COLLECTOR, AaveV3Ethereum.COLLECTOR, AaveV3EthereumEtherFi.COLLECTOR, AaveV3EthereumLido.COLLECTOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000186e2", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000186e5" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b0888": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b0889": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000006da6d2fa1aca4" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006881261f" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000068f7cd1f" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008659d0bb123da6d16d9394c7838ba286c2207d0e" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x4779e50c1835dc830550b0dd9acae87346c2319f2916dd67282fbbcdfd4b088f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000118efe565a5373f430e2f809b97de30335b3ad96a" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ff6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ff7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000006da6d2fa1aca4" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ff8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ff9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006881261f" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ffa": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000068f7cd1f" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ffb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003ddc7d25c7a1dc381443e491bbf1caa8928a05b0" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ffc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x674b43a3d52445b56ffc32f52426590e1f8199a447df4fd48d4d6163bd245ffd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000118efe565a5373f430e2f809b97de30335b3ad96a" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000006da6d2fa1aca4" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b36fc00" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006881261f" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000068f7cd1f" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ecc2a9240268bc7a26386ecb49e1befca2706ac9" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x70ff50ff3918f0439a141492c6068e3d7e0ccecaf746b6d0158eed289c3656a8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000118efe565a5373f430e2f809b97de30335b3ad96a" + } + } + }, + "0x4fc66506a2d2da89337079ebc6b05c42950e6bb6": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x98294819e60efdc1909028c9b44b14e421a205557ca9aecf8fd7fce12540ee75" + } + } + }, + "0x5f98805a4e8be255a32880fdec7f6728c6568ba0": { + "label": "AaveV2Ethereum.ASSETS.LUSD.UNDERLYING, AaveV3Ethereum.ASSETS.LUSD.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x05b03b1801db1f48caf6570b6e15914fb6118fb92f3acad23d33b83ab315f298": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000032d26d12e980b600000" + }, + "0x0fc3b60505bba0712de975bfdfdf1e21eb0cf1e935e4cc3946e0ef9adf3293cb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x794cc19adc5ae8d1b49b898793e448de986c25ccd420d58fbae8f672a869516e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "0xb043262f78550b1d3934eb6ae4b704759c10e5c4a5deec44a3ab35d1fd08ed13": { + "previousValue": "0x00000000000000000000000000000000000000000000032d26d12e980b600000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd10f697dd3df6a59b9e313e9a4cfe7b521baadeff448fd3b52adcb99b5b6963a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x6b175474e89094c44da98b954eedeac495271d0f": { + "label": "AaveV2Ethereum.ASSETS.DAI.UNDERLYING, AaveV2EthereumAMM.ASSETS.DAI.UNDERLYING, AaveV3Ethereum.ASSETS.DAI.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x00000000000000000000000000000000000000000c082579a855c529e4495b5c", + "newValue": "0x00000000000000000000000000000000000000000c07eaecc1bdc123e1d34cd5" + }, + "0x7314768a078c7e4ecfa4d30b300f9033e6f2713928414cca8fa46a14c7bd646e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7cb6e4506081598f16fb15457fdff2454c7ca8d10231b96674847a5e3966f66c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x95eac1a8eacec35a78dc4d2c0a0442c46aa1a42d1845544b5d84bba47199b458": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb043262f78550b1d3934eb6ae4b704759c10e5c4a5deec44a3ab35d1fd08ed13": { + "previousValue": "0x000000000000000000000000000000000000000000003a8ce698040602760e87", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x6c3ea9036406852006290770bedfcaba0e23a0e8": { + "label": "AaveV3Ethereum.ASSETS.PYUSD.UNDERLYING, AaveV3EthereumEtherFi.ASSETS.PYUSD.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0fc3b60505bba0712de975bfdfdf1e21eb0cf1e935e4cc3946e0ef9adf3293cb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa8f8dcb21b951949d1110466235b8c5a51221fd4936a5e673a1794bcad5aa26b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd0e7e597b0325276235f83a1f0d521e20edae0a5eaed77977f59e2001d6140ec": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "0xdc70505685bc4d7a3a4fdf5def4b393626e492fd5e08b1646902bd94c917d671": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000001a1405ee91" + }, + "0xed6ec7e33f59ecec89646b4f7510894329cb37ba69b3bcfebb670859780100f3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000001a1405ee91", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x8259ffbd559b48379c5ebd68229f59737018032d": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x632b290bb7ef52c4a1f02f2d547bf91c1bf91d8e89ad39cb5104bdebdd6eab30" + } + } + }, + "0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c": { + "label": "AaveV3Ethereum.ASSETS.USDC.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x1c9219960928272f24f6428ef210f3b2b07d28d1a5e724b7119ecc245cce49b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000003a35294400" + }, + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000001d1a94a2000" + } + } + }, + "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": { + "label": "AaveV2Ethereum.ASSETS.WETH.UNDERLYING, AaveV2EthereumAMM.ASSETS.WETH.UNDERLYING, AaveV2EthereumArc.ASSETS.WETH.UNDERLYING, AaveV3Ethereum.ASSETS.WETH.UNDERLYING, AaveV3EthereumLido.ASSETS.WETH.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x3107e6fb53c93683833e8824cc59e9c9f27821bf7d710a977a825c1959995195": { + "previousValue": "0x0000000000000000000000000000000000000000000000003d52536a3b129055", + "newValue": "0x00000000000000000000000000000000000000000000000036fdeee1a9045055" + }, + "0x606123db37e4b3e3392b25dc68afb8bc2999fda4fd44a60e23c367afe4669d85": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000006546488920e4000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d86": { + "previousValue": "0x006881261e000000000002000000000000000000000000000000000000000000", + "newValue": "0x006881261e000000000003000000000000000000000000000000000000000000" + }, + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d87": { + "previousValue": "0x000000000000000000093a8000000000000068af4a9f00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af4a9f0000000000006881261f" + } + } + }, + "0xdc035d45d973e3ec169d2276ddab16f1e407384f": { + "label": "AaveV3Ethereum.ASSETS.USDS.UNDERLYING, AaveV3EthereumLido.ASSETS.USDS.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x00000000000000000000000000000000000000000db39ea99a21cd509bf69313", + "newValue": "0x00000000000000000000000000000000000000000db3d93680b9d1569e6ca19a" + }, + "0xb043262f78550b1d3934eb6ae4b704759c10e5c4a5deec44a3ab35d1fd08ed13": { + "previousValue": "0x000000000000000000000000000000000000000000000002010df32691f2c101", + "newValue": "0x000000000000000000000000000000000000000000003a8ee7a5f72c9468cf88" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_JuneFundingUpdate_20250613_before_AaveV3Ethereum_JuneFundingUpdate_20250613_after.md b/diffs/AaveV3Ethereum_JuneFundingUpdate_20250613_before_AaveV3Ethereum_JuneFundingUpdate_20250613_after.md new file mode 100644 index 000000000..d3459737f --- /dev/null +++ b/diffs/AaveV3Ethereum_JuneFundingUpdate_20250613_before_AaveV3Ethereum_JuneFundingUpdate_20250613_after.md @@ -0,0 +1,32 @@ +## Raw diff + +```json +{ + "raw": { + "0x23878914efe38d27c4d67ab83ed1b93a74d4086a": { + "label": "AaveV3Ethereum.ASSETS.USDT.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000001d1a94a2000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31a": { + "previousValue": "0x00684c6df6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00684c6df6000000000003000000000000000000000000000000000000000000" + }, + "0xd8abaed0475c2c5e44e06b0d477ed962c314c5f3c45e24e715a43ba5e79ca31b": { + "previousValue": "0x000000000000000000093a80000000000000687a927700000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687a9277000000000000684c6df7" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_JuneFundingUpdate_20250616_before_AaveV3Ethereum_JuneFundingUpdate_20250616_after.md b/diffs/AaveV3Ethereum_JuneFundingUpdate_20250616_before_AaveV3Ethereum_JuneFundingUpdate_20250616_after.md new file mode 100644 index 000000000..aad479309 --- /dev/null +++ b/diffs/AaveV3Ethereum_JuneFundingUpdate_20250616_before_AaveV3Ethereum_JuneFundingUpdate_20250616_after.md @@ -0,0 +1,134 @@ +## Raw diff + +```json +{ + "raw": { + "0x18efe565a5373f430e2f809b97de30335b3ad96a": { + "label": "AaveV3EthereumLido.ASSETS.GHO.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x3911990350576792b37c6c85e18a679e2335f9d47b7bb4eaa2c98f053978da61": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000027b46536c66c8e3000000" + } + } + }, + "0x23878914efe38d27c4d67ab83ed1b93a74d4086a": { + "label": "AaveV3Ethereum.ASSETS.USDT.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000003a352944000" + } + } + }, + "0x26dad648c05cecd541aba512a289348d8187cb06": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xf9d49086903461915f134e9ddb94d7990caa05959b0303b2ba90b430de8e2860" + } + } + }, + "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8": { + "label": "AaveV3Ethereum.ASSETS.WETH.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x3911990350576792b37c6c85e18a679e2335f9d47b7bb4eaa2c98f053978da61": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000002b5e3af16b18800000" + } + } + }, + "0x7fd235ed399ac5c46a361d8f1e7b66b8d8708a28": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x76ff45dcb942fb02aeab9aa914e2b3c291089b8b9527b42fc0e550bd8604917c" + } + } + }, + "0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c": { + "label": "AaveV3Ethereum.ASSETS.USDC.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0xe81cbc5010bf701c96afcd9e85ab3c1ab37e3b123b04a49f76cc11c5ef1205b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000001d1a94a2000" + } + } + }, + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": { + "label": "AaveV2Ethereum.ASSETS.USDC.UNDERLYING, AaveV2EthereumAMM.ASSETS.USDC.UNDERLYING, AaveV2EthereumArc.ASSETS.USDC.UNDERLYING, AaveV3Ethereum.ASSETS.USDC.UNDERLYING, AaveV3EthereumEtherFi.ASSETS.USDC.UNDERLYING, AaveV3EthereumLido.ASSETS.USDC.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0bd214c34957eccaa478dc1ac22a6c0635ab811d582d9cf9f37164b8a0ecca3d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000001d1a94a2000" + }, + "0x4f5f42308eb505bb367768d921d9ad787d6b433ee8d3b15ce32cfeb0bed816d0": { + "previousValue": "0x000000000000000000000000000000000000000000000000000001d2ad9a904f", + "newValue": "0x000000000000000000000000000000000000000000000000000000010450704f" + }, + "0xc0337ee5de50499abcefc51652096bba43e68819081004aec6e17910af7e688b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc6428943ad7a4565331854eff5addf090c981b113a6864b2373316bc972535ce": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "0xe78fa29457c20d2a8eda0bab34aa8d7a4578c50629c45ce2fde885ddf3666287": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xb0830689e33fd005d90ad4eb2936cdefe67d3be9043c4855a06ca4838ee003f5": { + "previousValue": "0x0068507d46000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068507d46000000000003000000000000000000000000000000000000000000" + }, + "0xb0830689e33fd005d90ad4eb2936cdefe67d3be9043c4855a06ca4838ee003f6": { + "previousValue": "0x000000000000000000093a80000000000000687ea1c700000000000000000000", + "newValue": "0x000000000000000000093a80000000000000687ea1c700000000000068507d47" + } + } + }, + "0xdac17f958d2ee523a2206206994597c13d831ec7": { + "label": "AaveV2Ethereum.ASSETS.USDT.UNDERLYING, AaveV2EthereumAMM.ASSETS.USDT.UNDERLYING, AaveV3Ethereum.ASSETS.USDT.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x3b7bda5c429911cea247f8ee7e0c749c54ac681ab94e6006776840c1314e7834": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x4184e515358dc86d01632adb2e295d62edd55f3a9611d3265dc963f5c2453bf3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000e8d4a51000" + }, + "0xb043262f78550b1d3934eb6ae4b704759c10e5c4a5deec44a3ab35d1fd08ed13": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000e9e4d46a1a", + "newValue": "0x00000000000000000000000000000000000000000000000000000001102f5a1a" + }, + "0xd10f697dd3df6a59b9e313e9a4cfe7b521baadeff448fd3b52adcb99b5b6963a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd6146b2a65e27d1cbc28163b5ae56f8a0e63ac28f510545e63a4ae9f6460e426": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md b/diffs/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md new file mode 100644 index 000000000..e10786a90 --- /dev/null +++ b/diffs/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_before_AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_after.md @@ -0,0 +1,78 @@ +## Reserve changes + +### Reserve altered + +#### eBTC ([0x657e8C867D8B37dCC18fA4Caead9C45EB088C642](https://etherscan.io/address/0x657e8C867D8B37dCC18fA4Caead9C45EB088C642)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0x577C217cB5b1691A500D48aA7F69346409cFd668](https://etherscan.io/address/0x577C217cB5b1691A500D48aA7F69346409cFd668) | [0x03bB418e89B75407585f8198178f253DA3216218](https://etherscan.io/address/0x03bB418e89B75407585f8198178f253DA3216218) | + + +#### LBTC ([0x8236a87084f8B84306f72007F36F2618A5634494](https://etherscan.io/address/0x8236a87084f8B84306f72007F36F2618A5634494)) + +| description | value before | value after | +| --- | --- | --- | +| oracle | [0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A](https://etherscan.io/address/0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A) | [0xf8c04B50499872A5B5137219DEc0F791f7f620D0](https://etherscan.io/address/0xf8c04B50499872A5B5137219DEc0F791f7f620D0) | +| oracleDescription | BTC / USD | Capped LBTC / BTC / USD | +| oracleLatestAnswer | 119665.73 | 119667.05332541 | + + +## Raw diff + +```json +{ + "reserves": { + "0x657e8C867D8B37dCC18fA4Caead9C45EB088C642": { + "oracle": { + "from": "0x577C217cB5b1691A500D48aA7F69346409cFd668", + "to": "0x03bB418e89B75407585f8198178f253DA3216218" + } + }, + "0x8236a87084f8B84306f72007F36F2618A5634494": { + "oracle": { + "from": "0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A", + "to": "0xf8c04B50499872A5B5137219DEc0F791f7f620D0" + }, + "oracleDescription": { + "from": "BTC / USD", + "to": "Capped LBTC / BTC / USD" + }, + "oracleLatestAnswer": { + "from": "11966573000000", + "to": "11966705332541" + } + } + }, + "raw": { + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x0d822d63469ab72b7f00991445ce1436949c97775f8d0e44f498337ae450a252": { + "previousValue": "0x000000000000000000000000b41e773f507f7a7ea890b1afb7d2b660c30c8b0a", + "newValue": "0x000000000000000000000000f8c04b50499872a5b5137219dec0f791f7f620d0" + }, + "0xd3e4f25aaf2a33c02a6679e805658e410a92450da2dfd14fa956d40c26cc3b62": { + "previousValue": "0x000000000000000000000000577c217cb5b1691a500d48aa7f69346409cfd668", + "newValue": "0x00000000000000000000000003bb418e89b75407585f8198178f253da3216218" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c1f": { + "previousValue": "0x006899f056000000000002000000000000000000000000000000000000000000", + "newValue": "0x006899f056000000000003000000000000000000000000000000000000000000" + }, + "0x8613957cb04fd19296f7ee1a2f10d99d956d8f54b02d0981da9848a0b28e8c20": { + "previousValue": "0x000000000000000000093a8000000000000068c814d700000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068c814d70000000000006899f057" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_before_AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_after.md b/diffs/AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_before_AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_after.md new file mode 100644 index 000000000..c809a7b61 --- /dev/null +++ b/diffs/AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_before_AaveV3Ethereum_OnboardSUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250627_after.md @@ -0,0 +1,618 @@ +## Reserve changes + +### Reserves added + +#### PT-sUSDE-25SEP2025 ([0x9F56094C450763769BA0EA9Fe2876070c0fD5F77](https://etherscan.io/address/0x9F56094C450763769BA0EA9Fe2876070c0fD5F77)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 200,000,000 PT-sUSDE-25SEP2025 | +| borrowCap | 1 PT-sUSDE-25SEP2025 | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x7585693910f39df4959912B27D09EAEef06C1a93](https://etherscan.io/address/0x7585693910f39df4959912B27D09EAEef06C1a93) | +| oracleDecimals | 8 | +| oracleDescription | PT Capped sUSDe USDT/USD linear discount 25SEP2025 | +| oracleLatestAnswer | 0.98335005 | +| usageAsCollateralEnabled | true | +| ltv | 0.05 % [5] | +| liquidationThreshold | 0.1 % [10] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 10 % [1000] | +| aToken | [0x5f4a0873a3A02f7C0CB0e13a1d4362a1AD90e751](https://etherscan.io/address/0x5f4a0873a3A02f7C0CB0e13a1d4362a1AD90e751) | +| variableDebtToken | [0xc9AD8Dd111e6384128146467aAf92B81EC422848](https://etherscan.io/address/0xc9AD8Dd111e6384128146467aAf92B81EC422848) | +| borrowingEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB](https://etherscan.io/address/0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB) | +| aTokenName | Aave Ethereum PT_sUSDE_25SEP2025 | +| aTokenSymbol | aEthPT_sUSDE_25SEP2025 | +| aTokenUnderlyingBalance | 100 PT-sUSDE-25SEP2025 [100000000000000000000] | +| id | 48 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Variable Debt PT_sUSDE_25SEP2025 | +| variableDebtTokenSymbol | variableDebtEthPT_sUSDE_25SEP2025 | +| virtualBalance | 100 PT-sUSDE-25SEP2025 [100000000000000000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 56 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 6 % | +| variableRateSlope2 | 50 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=60000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=560000000000000000000000000) | + + +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | PT-sUSDe Stablecoins September 2025 | +| eMode.ltv | - | 87.7 % | +| eMode.liquidationThreshold | - | 89.7 % | +| eMode.liquidationBonus | - | 5 % | +| eMode.borrowableBitmap | - | USDC, USDT, USDe, USDS | +| eMode.collateralBitmap | - | PT-sUSDE-25SEP2025 | + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | PT-sUSDe USDe September 2025 | +| eMode.ltv | - | 89.1 % | +| eMode.liquidationThreshold | - | 91.1 % | +| eMode.liquidationBonus | - | 3 % | +| eMode.borrowableBitmap | - | USDe | +| eMode.collateralBitmap | - | PT-sUSDE-25SEP2025 | + + +## Raw diff + +```json +{ + "eModes": { + "17": { + "from": null, + "to": { + "borrowableBitmap": "35433480456", + "collateralBitmap": "281474976710656", + "eModeCategory": 17, + "label": "PT-sUSDe Stablecoins September 2025", + "liquidationBonus": 10500, + "liquidationThreshold": 8970, + "ltv": 8770 + } + }, + "18": { + "from": null, + "to": { + "borrowableBitmap": "1073741824", + "collateralBitmap": "281474976710656", + "eModeCategory": 18, + "label": "PT-sUSDe USDe September 2025", + "liquidationBonus": 10300, + "liquidationThreshold": 9110, + "ltv": 8910 + } + } + }, + "reserves": { + "0x9F56094C450763769BA0EA9Fe2876070c0fD5F77": { + "from": null, + "to": { + "aToken": "0x5f4a0873a3A02f7C0CB0e13a1d4362a1AD90e751", + "aTokenName": "Aave Ethereum PT_sUSDE_25SEP2025", + "aTokenSymbol": "aEthPT_sUSDE_25SEP2025", + "aTokenUnderlyingBalance": "100000000000000000000", + "borrowCap": 1, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "id": 48, + "interestRateStrategy": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 10, + "ltv": 5, + "oracle": "0x7585693910f39df4959912B27D09EAEef06C1a93", + "oracleDecimals": 8, + "oracleDescription": "PT Capped sUSDe USDT/USD linear discount 25SEP2025", + "oracleLatestAnswer": "98335005", + "reserveFactor": 1000, + "supplyCap": 200000000, + "symbol": "PT-sUSDE-25SEP2025", + "underlying": "0x9F56094C450763769BA0EA9Fe2876070c0fD5F77", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0xc9AD8Dd111e6384128146467aAf92B81EC422848", + "variableDebtTokenName": "Aave Ethereum Variable Debt PT_sUSDE_25SEP2025", + "variableDebtTokenSymbol": "variableDebtEthPT_sUSDE_25SEP2025", + "virtualBalance": "100000000000000000000" + } + } + }, + "strategies": { + "0x9F56094C450763769BA0EA9Fe2876070c0fD5F77": { + "from": null, + "to": { + "address": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "560000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "60000000000000000000000000", + "variableRateSlope2": "500000000000000000000000000" + } + } + }, + "raw": { + "0x0d5f4aadf3fde31bbb55db5f42c080f18ad54df5": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x15885a83936eb943e98eeffb91e9a49040d93993": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009f56094c450763769ba0ea9fe2876070c0fd5f77" + }, + "0xe4d2eb9edf6d23a6a1f84364e48090222bd4ebab14622926099c67ad0bd8cd57": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + } + } + }, + "0x1ef34b91afc368174f579067d1db94325cdc7946": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f804": { + "previousValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f805": { + "previousValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f80b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000056bc75e2d6310000000000000000000000000000000000000" + }, + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x0000000000000000000000000000000000000000aa8a2aaa8a802000000aaaaa", + "newValue": "0x0000000000000000000000000000000000000002aa8a2aaa8a802000000aaaaa" + } + } + }, + "0x223d844fc4b006d67c0cdbd39371a9f73f69d974": { + "label": "AaveV3Ethereum.EMISSION_MANAGER, AaveV3EthereumEtherFi.EMISSION_MANAGER, AaveV3EthereumLido.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xb2ee2cf8a4c69b5c4c8eeebb83f83dd619fa1f5387698d416db0bd87feefe191": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0xdc60e0ac341c0169f1589940771e050beb9462bdeac9f19b3e594624a5eee1aa": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x260326c220e469358846b187ee53328303efe19c": { + "label": "AaveV3Ethereum.ASSETS.USDT.ORACLE", + "balanceDiff": null, + "stateDiff": {} + }, + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x3e7d1eab13ad0104d2750b8863b489d65364e32d": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x60047994dc5a9c6ccd3aa5e34a586be9d37c95c2b71692caadd44f25aa07db34": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007585693910f39df4959912b27d09eaeef06c1a93" + } + } + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000003000000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000003100000000000009c4" + }, + "0xa5f7114836c41fcbc58aff22a20f2daea8b3479583c9cf017bfef6a81d0662ee": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009f56094c450763769ba0ea9fe2876070c0fd5f77" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f804": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f805": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f806": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000003000686be65300000000000000000000000000000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f807": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000005f4a0873a3a02f7c0cb0e13a1d4362a1ad90e751" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f809": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000c9ad8dd111e6384128146467aaf92b81ec422848" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f80c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5f4a0873a3a02f7c0cb0e13a1d4362a1ad90e751": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000097f5b96c7dac8547251330b63760951a4fab448d", + "label": "Implementation slot" + } + } + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xf66305a61ddb824256acb564f9115b8a40970c3a191cb25bf2239e3351c867ad": { + "previousValue": "0x00686be652000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686be652000000000003000000000000000000000000000000000000000000" + }, + "0xf66305a61ddb824256acb564f9115b8a40970c3a191cb25bf2239e3351c867ae": { + "previousValue": "0x000000000000000000093a80000000000000689a0ad300000000000000000000", + "newValue": "0x000000000000000000093a80000000000000689a0ad3000000000000686be653" + } + } + }, + "0x8164cc65827dcfe994ab23944cbc90e0aa80bfcb": { + "label": "AaveV3Ethereum.DEFAULT_INCENTIVES_CONTROLLER, AaveV3EthereumEtherFi.DEFAULT_INCENTIVES_CONTROLLER, AaveV3EthereumLido.DEFAULT_INCENTIVES_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x83ab600ce8a61b43e1757b89c0589928f765c1c4": { + "label": "AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000011" + }, + "0x6a2b6bffaca788160f671fa62d34758b717f75a90ad5a468757c50d61f33c443": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000007" + }, + "0xfc111d09a6e2f0958402cbe16a5aef32c9d8ddb9a4df7271140de57bfed6525a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x7635c6f6fb0dc990d132e97ffe82e07606fac72c3d39da71ac41d6a8564addda": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000010000000000002904230a2242" + }, + "0x7635c6f6fb0dc990d132e97ffe82e07606fac72c3d39da71ac41d6a8564adddb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000047" + }, + "0x7635c6f6fb0dc990d132e97ffe82e07606fac72c3d39da71ac41d6a8564adddc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000840000108" + }, + "0xad685eb1539e227904de4d026e2fa285114f8a6da148661059c13a946d709f4f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000001000000000000283c239622ce" + }, + "0xad685eb1539e227904de4d026e2fa285114f8a6da148661059c13a946d709f50": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x50542d735553446520555344652053657074656d626572203230323500000038" + }, + "0xad685eb1539e227904de4d026e2fa285114f8a6da148661059c13a946d709f51": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000040000000" + }, + "0xc00262ed55c3f8b3ae06bbb28c20fbb0e54ee84605c5c00c4ce60d963f62f803": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e800bebc20000000000103e8811229fe000a0005" + }, + "0xf6ae0d4ae2d98c3ea962f8b70bec8e22a5fee3ba42870edba969d3e15fcee29a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x50542d735553446520537461626c65636f696e732053657074656d6265722032" + }, + "0xf6ae0d4ae2d98c3ea962f8b70bec8e22a5fee3ba42870edba969d3e15fcee29b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x3032350000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x97f5b96c7dac8547251330b63760951a4fab448d": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x6145746850545f73555344455f3235534550323032350000000000000000002c" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xd7d85f8501dd0e4649c4f886c528a1ebbc655e031785ee4292dfbdf07a54f962" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009f56094c450763769ba0ea9fe2876070c0fd5f77" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000056bc75e2d63100000" + }, + "0x42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d2050545f73555344455f323553455032303235" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FBTC.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x60047994dc5a9c6ccd3aa5e34a586be9d37c95c2b71692caadd44f25aa07db34": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000138800000258000000002328" + } + } + }, + "0x9f56094c450763769ba0ea9fe2876070c0fd5f77": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0100000000000000000000000000000000000000003c404c6532e8b020f9e29a", + "newValue": "0x0100000000000000000000000000000000000000003c404c6532e8b020f9e29a" + }, + "0xb3b5463b0790eb375baedc2f4382625d24c919d1a46df67c7b70c880fd4f025e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0xf17bca5f0b79532f5dbd08020f985f432ed777d5ec7fd344c3ad5c249dc24ce7": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xf28b05d7cb1c50f8ef449275074a75213b412b4964112d5fc8ca14bc4785d5eb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xb58ed8ec66e43de3fecd27e351485e7efe006f38": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x117b9f8352c2d8ee8c6c27608f7f271fe36522579835f70162040aec85581b50" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000009f56094c450763769ba0ea9fe2876070c0fd5f77" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000005d" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000043" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d205661726961626c6520446562742050545f73" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x555344455f323553455032303235000000000000000000000000000000000000" + }, + "0xc6bb06cb7f92603de181bf256cd16846b93b752a170ff24824098b31aa008a7e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c654465627445746850545f73555344455f3235534550323032" + }, + "0xc6bb06cb7f92603de181bf256cd16846b93b752a170ff24824098b31aa008a7f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x3500000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xc9ad8dd111e6384128146467aaf92b81ec422848": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b58ed8ec66e43de3fecd27e351485e7efe006f38", + "label": "Implementation slot" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xe7b67f44ea304dd7f6d215b13686637ff64cd2b2": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_before_AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_after.md b/diffs/AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_before_AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_after.md new file mode 100644 index 000000000..f38c04552 --- /dev/null +++ b/diffs/AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_before_AaveV3Ethereum_OnboardUSDeSeptemberExpiryPTTokensOnAaveV3CoreInstance_20250722_after.md @@ -0,0 +1,618 @@ +## Reserve changes + +### Reserves added + +#### PT-USDe-25SEP2025 ([0xBC6736d346a5eBC0dEbc997397912CD9b8FAe10a](https://etherscan.io/address/0xBC6736d346a5eBC0dEbc997397912CD9b8FAe10a)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 50,000,000 PT-USDe-25SEP2025 | +| borrowCap | 1 PT-USDe-25SEP2025 | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x8B17C02d22EE7D6B8D6829ceB710A458de41E84a](https://etherscan.io/address/0x8B17C02d22EE7D6B8D6829ceB710A458de41E84a) | +| oracleDecimals | 8 | +| oracleDescription | PT Capped USDe USDT/USD linear discount 25SEP2025 | +| oracleLatestAnswer | 0.98364972 | +| usageAsCollateralEnabled | true | +| ltv | 0.05 % [5] | +| liquidationThreshold | 0.1 % [10] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 25 % [2500] | +| aToken | [0x38A5357Ce55c81add62aBc84Fb32981e2626ADEf](https://etherscan.io/address/0x38A5357Ce55c81add62aBc84Fb32981e2626ADEf) | +| variableDebtToken | [0x0D8486E1CAbf3C9407B3DdA0cfc4d9C3101fB683](https://etherscan.io/address/0x0D8486E1CAbf3C9407B3DdA0cfc4d9C3101fB683) | +| borrowingEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB](https://etherscan.io/address/0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB) | +| aTokenName | Aave Ethereum PT_USDe_25SEP2025 | +| aTokenSymbol | aEthPT_USDe_25SEP2025 | +| aTokenUnderlyingBalance | 100 PT-USDe-25SEP2025 [100000000000000000000] | +| id | 49 | +| isPaused | false | +| variableDebtTokenName | Aave Ethereum Variable Debt PT_USDe_25SEP2025 | +| variableDebtTokenSymbol | variableDebtEthPT_USDe_25SEP2025 | +| virtualBalance | 100 PT-USDe-25SEP2025 [100000000000000000000] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 310 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 10 % | +| variableRateSlope2 | 300 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=100000000000000000000000000&variableRateSlope2=3000000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=3100000000000000000000000000) | + + +## Emodes changed + +### EMode: ETH correlated(id: 1) + + + +### EMode: sUSDe Stablecoins(id: 2) + + + +### EMode: rsETH LST main(id: 3) + + + +### EMode: LBTC_WBTC(id: 4) + + + +### EMode: LBTC_cbBTC(id: 5) + + + +### EMode: LBTC_tBTC(id: 6) + + + +### EMode: eBTC/WBTC(id: 7) + + + +### EMode: PT-sUSDe Stablecoins Jul 2025(id: 8) + + + +### EMode: PT-eUSDe Stablecoins May 2025(id: 9) + + + +### EMode: PT-USDe Stablecoins July 2025(id: 10) + + + +### EMode: USDe Stablecoin(id: 11) + + + +### EMode: PT-USDe USDe July 2025(id: 12) + + + +### EMode: PT-eUSDe Stablecoins August 2025(id: 13) + + + +### EMode: PT-eUSDe USDe August 2025(id: 14) + + + +### EMode: eUSDe_Stablecoin(id: 15) + + + +### EMode: FBTC/WBTC(id: 16) + + + +### EMode: PT-sUSDe Stablecoins September 2025(id: 17) + + + +### EMode: PT-sUSDe USDe September 2025(id: 18) + + + +### EMode: PT-USDe Stablecoins September 2025(id: 19) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | PT-USDe Stablecoins September 2025 | +| eMode.ltv | - | 90.3 % | +| eMode.liquidationThreshold | - | 92.3 % | +| eMode.liquidationBonus | - | 3.5 % | +| eMode.borrowableBitmap | - | USDC, USDT, USDe, USDS | +| eMode.collateralBitmap | - | USDe, PT-USDe-31JUL2025, PT-eUSDE-14AUG2025, PT-USDe-25SEP2025 | + + +### EMode: PT-USDe USDe September 2025(id: 20) + +| description | value before | value after | +| --- | --- | --- | +| eMode.label | - | PT-USDe USDe September 2025 | +| eMode.ltv | - | 91.2 % | +| eMode.liquidationThreshold | - | 93.2 % | +| eMode.liquidationBonus | - | 2.5 % | +| eMode.borrowableBitmap | - | USDe | +| eMode.collateralBitmap | - | USDe, PT-USDe-31JUL2025, PT-eUSDE-14AUG2025, PT-USDe-25SEP2025 | + + +## Raw diff + +```json +{ + "eModes": { + "19": { + "from": null, + "to": { + "borrowableBitmap": "35433480456", + "collateralBitmap": "589339306229760", + "eModeCategory": 19, + "label": "PT-USDe Stablecoins September 2025", + "liquidationBonus": 10350, + "liquidationThreshold": 9230, + "ltv": 9030 + } + }, + "20": { + "from": null, + "to": { + "borrowableBitmap": "1073741824", + "collateralBitmap": "589339306229760", + "eModeCategory": 20, + "label": "PT-USDe USDe September 2025", + "liquidationBonus": 10250, + "liquidationThreshold": 9320, + "ltv": 9120 + } + } + }, + "reserves": { + "0xBC6736d346a5eBC0dEbc997397912CD9b8FAe10a": { + "from": null, + "to": { + "aToken": "0x38A5357Ce55c81add62aBc84Fb32981e2626ADEf", + "aTokenName": "Aave Ethereum PT_USDe_25SEP2025", + "aTokenSymbol": "aEthPT_USDe_25SEP2025", + "aTokenUnderlyingBalance": "100000000000000000000", + "borrowCap": 1, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "id": 49, + "interestRateStrategy": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 10, + "ltv": 5, + "oracle": "0x8B17C02d22EE7D6B8D6829ceB710A458de41E84a", + "oracleDecimals": 8, + "oracleDescription": "PT Capped USDe USDT/USD linear discount 25SEP2025", + "oracleLatestAnswer": "98364972", + "reserveFactor": 2500, + "supplyCap": 50000000, + "symbol": "PT-USDe-25SEP2025", + "underlying": "0xBC6736d346a5eBC0dEbc997397912CD9b8FAe10a", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x0D8486E1CAbf3C9407B3DdA0cfc4d9C3101fB683", + "variableDebtTokenName": "Aave Ethereum Variable Debt PT_USDe_25SEP2025", + "variableDebtTokenSymbol": "variableDebtEthPT_USDe_25SEP2025", + "virtualBalance": "100000000000000000000" + } + } + }, + "strategies": { + "0xBC6736d346a5eBC0dEbc997397912CD9b8FAe10a": { + "from": null, + "to": { + "address": "0x9ec6F08190DeA04A54f8Afc53Db96134e5E3FdFB", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "3100000000000000000000000000", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "100000000000000000000000000", + "variableRateSlope2": "3000000000000000000000000000" + } + } + }, + "raw": { + "0x0d5f4aadf3fde31bbb55db5f42c080f18ad54df5": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x0d8486e1cabf3c9407b3dda0cfc4d9c3101fb683": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b58ed8ec66e43de3fecd27e351485e7efe006f38", + "label": "Implementation slot" + } + } + }, + "0x15885a83936eb943e98eeffb91e9a49040d93993": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc6736d346a5ebc0debc997397912cd9b8fae10a" + }, + "0xde10b7615bcf2f2557c4e63e09c08e502f7c4bf7cd4aee891abc2347fe31ad08": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005" + } + } + }, + "0x1ef34b91afc368174f579067d1db94325cdc7946": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xdacfe7a8adbf8359f41dcfa7c31c6a0f0553b393d1ed6bae9994c90e5024f1da": { + "previousValue": "0x0000000000000000000000000000000000000002aa8a2aaa8a802000000aaaaa", + "newValue": "0x000000000000000000000000000000000000000aaa8a2aaa8a802000000aaaaa" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abdf": { + "previousValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe0": { + "previousValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000056bc75e2d6310000000000000000000000000000000000000" + } + } + }, + "0x223d844fc4b006d67c0cdbd39371a9f73f69d974": { + "label": "AaveV3Ethereum.EMISSION_MANAGER, AaveV3EthereumEtherFi.EMISSION_MANAGER, AaveV3EthereumLido.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xdfc206ecd6ed33acee311cfaee6b8392ef875e205044fbd226331e82149d467b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0xea079a6724f5e1e276abe7327872cdb57c309fb0ac0b61b76653565d1d42cd35": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x260326c220e469358846b187ee53328303efe19c": { + "label": "AaveV3Ethereum.ASSETS.USDT.ORACLE", + "balanceDiff": null, + "stateDiff": {} + }, + "0x2f39d218133afab8f2b819b1066c7e434ad94e9e": { + "label": "AaveV3Ethereum.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x38a5357ce55c81add62abc84fb32981e2626adef": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000097f5b96c7dac8547251330b63760951a4fab448d", + "label": "Implementation slot" + } + } + }, + "0x3e7d1eab13ad0104d2750b8863b489d65364e32d": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x54586be62e3c3580375ae3723c145253060ca0c2": { + "label": "AaveV3Ethereum.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x8b0fe7fa6cb830097188c837153507b2efc15562bdad34336316f87446225043": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008b17c02d22ee7d6b8d6829ceb710a458de41e84a" + } + } + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000003100000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000003200000000000009c4" + }, + "0x1d280bcdefb321b660b0422182e63c335ba9d4b8bc992ecbbb986c798b08ffa7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc6736d346a5ebc0debc997397912cd9b8fae10a" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abdf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000003100688110b300000000000000000000000000000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000038a5357ce55c81add62abc84fb32981e2626adef" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000d8486e1cabf3c9407b3dda0cfc4d9c3101fb683" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abe7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x64b761d848206f447fe2dd461b0c635ec39ebb27": { + "label": "AaveV3Ethereum.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d86": { + "previousValue": "0x00688110b2000000000002000000000000000000000000000000000000000000", + "newValue": "0x00688110b2000000000003000000000000000000000000000000000000000000" + }, + "0x44f7d9a49ceff454e19daa7554959d1d87dd4128f781ce09cd9b91e348ff5d87": { + "previousValue": "0x000000000000000000093a8000000000000068af353300000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af3533000000000000688110b3" + } + } + }, + "0x8164cc65827dcfe994ab23944cbc90e0aa80bfcb": { + "label": "AaveV3Ethereum.DEFAULT_INCENTIVES_CONTROLLER, AaveV3EthereumEtherFi.DEFAULT_INCENTIVES_CONTROLLER, AaveV3EthereumLido.DEFAULT_INCENTIVES_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x83ab600ce8a61b43e1757b89c0589928f765c1c4": { + "label": "AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a" + }, + "0x0ffe031ee7f67944a037276fd51f48fcc2fe05a729c43144606bc8777da8014f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000009" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000014" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000013" + }, + "0x8a8166be5f30abeb6c91ee2f07eeb0b2eb14b4d59534d10a1c143964bd617919": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x947f0054faed3481ff4e76ca35f12fbe36cc665b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xe55c3f13b314f00b64a1915a394729a6fd51a47772ecb11c61e8f3636e3e1927": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x50542d5553446520537461626c65636f696e732053657074656d626572203230" + }, + "0xe55c3f13b314f00b64a1915a394729a6fd51a47772ecb11c61e8f3636e3e1928": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x3235000000000000000000000000000000000000000000000000000000000000" + }, + "0xec3875d782848366786ea13fe979ec13e106b31c0dcb57d593be99c0884dfb10": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000002180040000000280a246823a0" + }, + "0xec3875d782848366786ea13fe979ec13e106b31c0dcb57d593be99c0884dfb11": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x50542d5553446520555344652053657074656d62657220323032350000000036" + }, + "0xec3875d782848366786ea13fe979ec13e106b31c0dcb57d593be99c0884dfb12": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000040000000" + }, + "0xf5cec5b6ae25aaed9dbe8e5cfa0c1ba29f75af2a8d895f0e848d3b8c11c3abde": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000003e8002faf08000000000109c4811229fe000a0005" + }, + "0xf9a32d67f3f8c78696e247ab205357778797ca26b6edc245827016d71f40901c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000002180040000000286e240e2346" + }, + "0xf9a32d67f3f8c78696e247ab205357778797ca26b6edc245827016d71f40901d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000045" + }, + "0xf9a32d67f3f8c78696e247ab205357778797ca26b6edc245827016d71f40901e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000840000108" + } + } + }, + "0x97f5b96c7dac8547251330b63760951a4fab448d": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d2050545f555344655f3235534550323032353e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x6145746850545f555344655f323553455032303235000000000000000000002a" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x2c666ee35ceabaf7598d6bb501a13b4286214f53c848189cc390b9f958f4f6a4" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc6736d346a5ebc0debc997397912cd9b8fae10a" + }, + "0x2c491f7384cd762770fb659d7290ed7b4da75a7c480a8a5cc401f49c4807de64": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000056bc75e2d63100000" + } + } + }, + "0x9ec6f08190dea04a54f8afc53db96134e5e3fdfb": { + "label": "AaveV3Ethereum.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.MKR.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.SNX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.UNI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LDO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ENS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ONE_INCH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FRAX.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.GHO.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RPL.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.STG.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.KNC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FXS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.crvUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PYUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.weETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.osETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.ETHx.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.sUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.tBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.cbBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDS.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.rsETH.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.LBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eBTC.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.RLUSD.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_29MAY2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_sUSDE_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.USDtb.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_USDe_31JUL2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.PT_eUSDE_14AUG2025.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.eUSDe.INTEREST_RATE_STRATEGY, AaveV3Ethereum.ASSETS.FBTC.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x8b0fe7fa6cb830097188c837153507b2efc15562bdad34336316f87446225043": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000007530000003e8000000001194" + } + } + }, + "0xb58ed8ec66e43de3fecd27e351485e7efe006f38": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xd0699cb94a8f1c2a6af842c45588e546ede8cb5330ed93d2ab272e94ae9d0199" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000bc6736d346a5ebc0debc997397912cd9b8fae10a" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000005b" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520457468657265756d205661726961626c6520446562742050545f55" + }, + "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5344655f32355345503230323500000000000000000000000000000000000000" + }, + "0xc6bb06cb7f92603de181bf256cd16846b93b752a170ff24824098b31aa008a7e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c654465627445746850545f555344655f323553455032303235" + } + } + }, + "0xbc6736d346a5ebc0debc997397912cd9b8fae10a": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0100000000000000000000000000000000000000003dc1c902879311c5630071", + "newValue": "0x0100000000000000000000000000000000000000003dc1c902879311c5630071" + }, + "0xb1a3d0643b916c42296de035a6af81aa8988e04a81f3339fea044ac9f2cf6aa4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0xf17bca5f0b79532f5dbd08020f985f432ed777d5ec7fd344c3ad5c249dc24ce7": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xf28b05d7cb1c50f8ef449275074a75213b412b4964112d5fc8ca14bc4785d5eb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xe7b67f44ea304dd7f6d215b13686637ff64cd2b2": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..d3c9d4a70 --- /dev/null +++ b/diffs/AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Ethereum_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,268 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 12,609,121.6150 LINK [12609121615099550349393717] | 12,608,921.6150 LINK [12608921615099550349393717] | +| virtualBalance | 12,609,121.6139 LINK [12609121613917138816430729] | 12,608,921.6139 LINK [12608921613917138816430729] | + + +## Raw diff + +```json +{ + "reserves": { + "0x514910771AF9Ca656af840dff83E8264EcF986CA": { + "aTokenUnderlyingBalance": { + "from": "12609121615099550349393717", + "to": "12608921615099550349393717" + }, + "virtualBalance": { + "from": "12609121613917138816430729", + "to": "12608921613917138816430729" + } + } + }, + "raw": { + "0x1cdf8879ec8be012ba959eb515b11008e0cb6323": { + "label": "MiscEthereum.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000a", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b" + }, + "0x19d3a1b49ed821901b0e7fbd19dea5a909e016b3b1ccdd4d3f10dbbbc644c1b8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000015885a83936eb943e98eeffb91e9a49040d93993" + }, + "0x19d3a1b49ed821901b0e7fbd19dea5a909e016b3b1ccdd4d3f10dbbbc644c1b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000049" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xb586be0b0000000000000000000000000786471987bd3c265717c060212d5aa6" + }, + "0x6783d18ba6ad4deb475761a3d4e4a6b5fc786748c4b926166b691f1eea8dc858": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b" + }, + "0xc7ef4d112ddc02ba866afb61a59b4f8a701b3b82b6b1a4e8d29114c706d088df": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x50656e646c6520505420446973636f756e7452617465204147525320496e6a65" + }, + "0xc7ef4d112ddc02ba866afb61a59b4f8a701b3b82b6b1a4e8d29114c706d088e0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x63746f7200000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x514910771af9ca656af840dff83e8264ecf986ca": { + "label": "AaveV2Ethereum.ASSETS.LINK.UNDERLYING, AaveV3Ethereum.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x040e85d679fc53ac947a4a6f5511069b612a8826774610b23ba6efc6f54bf488": { + "previousValue": "0x000000000000000000000000000000000000000000000a38a3b087f35877fdef", + "newValue": "0x000000000000000000000000000000000000000000000a437b3f444e1e97fdef" + }, + "0x5c582b08904103541653438b3e840fa055a8ca147282c09b21a925650db28c07": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x7f08dda3d3cd2857722336f88d3b3c9ed09b910cb3e5757c24e935c7ea336b33": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8cc09dda3ba4cb8121665ea86c158dfc87a15a09a005d2743dcdc05bd7e960da": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x90dd2d19bc9ac5a445da688e434e69aa0f18fa4d13a44ffdf6c19d740d2715ed": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xdae4082b17861c7d82e21b4a4c7bb9fa7ad9df1c0133f315d870700d9f955f7e": { + "previousValue": "0x0000000000000000000000000000000000000000000a6e15da379f8c7cf7ff35", + "newValue": "0x0000000000000000000000000000000000000000000a6e0b02a8e331b6d7ff35" + }, + "0xfc403c4b89a2cdf463af8e36426617fcff737ccf5f9c4093be66f882051b9ca7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000f43fc2c04ee0000", + "newValue": "0x0000000000000000000000000000000000000000000000000f43fc2c04ee0000" + } + } + }, + "0x5e8c8a7243651db1384c0ddfdbe39761e8e7e51a": { + "label": "AaveV3Ethereum.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000ab38fecea36692980871d", + "newValue": "0x0000000000000000000000000000000000000000000ab38517839c467b97b11a" + }, + "0x14a553e31736f19e3e380cf55bfb2f82dfd6d880cd07235affb68d8d3e0cac4d": { + "previousValue": "0x00000000033bd2a6b70167ca55ff3d9a000000000000073dc70cd50d1316e811", + "newValue": "0x00000000033bd2e9d6bd436fb17a75fa0000000000000732f1a63aea652e120e" + }, + "0x7a79d58a6c2c4214189d78e4be4ba21513d55fd0a4b2ac0c119b9394eb289d20": { + "previousValue": "0x00000000033bd04403f2a00dbb6788cb00000000000000000000000000000000", + "newValue": "0x00000000033bd2e9d6bd436fb17a75fa00000000000000000000000000000000" + } + } + }, + "0x6593c7de001fc8542bb1703532ee1e5aa0d458fd": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000a1", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a2" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x015b184c0000000600000126009896800098968000000000476b78c56f0236dd", + "newValue": "0x015b184c0000000600000127009896800098968000000000476b78c56f0236dd" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x000000000000000000000000000000000000000000000a3573c5a4a5412269ef", + "newValue": "0x000000000000000000000000000000000000000000000a404b546100074269ef" + }, + "0x19d3a1b49ed821901b0e7fbd19dea5a909e016b3b1ccdd4d3f10dbbbc644c1b8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000088dcf0bffb4d34826cc6ca6eafbeddd8ca9c14a9ffffffff004c4b4000" + }, + "0x19d3a1b49ed821901b0e7fbd19dea5a909e016b3b1ccdd4d3f10dbbbc644c1b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000ad78ebc5ac6200000000000000000000000000000" + }, + "0x21e2dabe4cb9f07b253206ec6bb98396a873e0b4cebf70149e42989b64302362": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x2df7b5a5defeb2e88b8128de3d4f22702c35789f8abe89e6581c3177d5b728f4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b6f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xb586be0b0000000000000000000000000786471987bd3c265717c060212d5aa6" + }, + "0x47248955de75b5bd7b1c5e67769c0df6a2399522e1c452ce18f3c75c7a0cf65e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001cdf8879ec8be012ba959eb515b11008e0cb6323" + }, + "0x6783d18ba6ad4deb475761a3d4e4a6b5fc786748c4b926166b691f1eea8dc858": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000a2" + }, + "0x8f9ec023ec7df1aff141bb904716547082a8f7cfdc851c402455d4088cf56625": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x6b0b234fb2f380309d47a7e9391e29e9a179395a": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x00000000000000000000000000000000000000000000000000011f000001f402", + "newValue": "0x000000000000000000000000000000000000000000000000000120000001f402" + } + } + }, + "0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2": { + "label": "AaveV3Ethereum.POOL", + "balanceDiff": null, + "stateDiff": { + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea6701e": { + "previousValue": "0x00000000000011f9dd79366e902c5c4700000000033bd2e9bbd25781308420ba", + "newValue": "0x00000000000011fa0215546c0d8f52aa00000000033bd2e9d6bd436fb17a75fa" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea6701f": { + "previousValue": "0x0000000000035c546a72f6a961b4858800000000034260f7a394d8e9b258c877", + "newValue": "0x0000000000035c57d68325c5f2400ad900000000034260fcb60e846b15deb55e" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea67020": { + "previousValue": "0x000000000000000000000500685a908700000000000000002cf28dbecfa7f36e", + "newValue": "0x000000000000000000000500685a935700000000000000002cf28dbecfa7f36e" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea67025": { + "previousValue": "0x0000000000000000000000000000000000000000000000003344de15257824a2", + "newValue": "0x000000000000000000000000000000000000000000000000335b23358875c71c" + }, + "0x171656ac53fe6b4f4afb5485494f9f0ac15c89bb5b5e4dc8918a7e575ea67026": { + "previousValue": "0x00000000000a6e15da336c26d991728900000000000000000000000000000000", + "newValue": "0x00000000000a6e0b02a4afcc1371728900000000000000000000000000000000" + }, + "0xf9829112cce780d4a61051cb8a0049abd16e5ef129bad968336a15bba07c032d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000020082", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000020082" + } + } + }, + "0x88dcf0bffb4d34826cc6ca6eafbeddd8ca9c14a9": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006593c7de001fc8542bb1703532ee1e5aa0d458fd" + } + } + }, + "0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0": { + "label": "AaveV3Ethereum.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x0d8bc74e2f6fc706d37d1dc1b5212c05a9ea2ff549c24eeb3c929dab8f787417": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x1494c34e05af1bb8bf017a8df9c61b7cf8e3d586c7008475cd78900d3fabfb27": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x282040439cefbb18b84de4f53be2a4e7a823d0a16418b08ba01bcfec9a6c3407": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xdfbef73ae364c74680d03d2b61daeecc5d1791153347c66c06a24ea92a2284e3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xe9fc652dca0774b6ef37723ca78afda7ff5d11f4a36d2e74f8b50cd971c16a9f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e1": { + "previousValue": "0x00685a9356000000000002000000000000000000000000000000000000000000", + "newValue": "0x00685a9356000000000003000000000000000000000000000000000000000000" + }, + "0x4b5bb5f188f00a30034cddb70659a995ec1639e10dffc4175aba8960e57f09e2": { + "previousValue": "0x000000000000000000093a800000000000006888b7d700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006888b7d7000000000000685a9357" + } + } + }, + "0xfce597866ffaf617efdca1c1ad50ebcb16b5171e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xd3c64b2c7200ce08ba06628e7e0769979e0b61e5f64c65e2cec5978d7e209ec1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_before_AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_after.md b/diffs/AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_before_AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_after.md new file mode 100644 index 000000000..f31fab0f1 --- /dev/null +++ b/diffs/AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_before_AaveV3Ethereum_SafetyModuleEmissionUpdate_20250721_after.md @@ -0,0 +1,76 @@ +## Raw diff + +```json +{ + "raw": { + "0x4da27a545c0c5b758a6ba100e3a049001de870f5": { + "label": "AaveSafetyModule.STK_AAVE", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000050": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000007d0", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000003e8" + }, + "0x2dfea4d26ae12ec86bef88e9ad5401cfe29f0cdab93e593879eb61068442f391": { + "previousValue": "0x000000000000000000000000687e39b70000000000000000000cf3ddb8be5d55", + "newValue": "0x000000000000000000000000687e39e70000000000000000000ab0e7c52f697b" + }, + "0x2dfea4d26ae12ec86bef88e9ad5401cfe29f0cdab93e593879eb61068442f392": { + "previousValue": "0x0000000000000000000000000000000000000000000000016ad20432184e4732", + "newValue": "0x0000000000000000000000000000000000000000000000016ad20440019a8eb8" + } + } + }, + "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9": { + "label": "AaveV2Ethereum.ASSETS.AAVE.UNDERLYING, AaveV2EthereumArc.ASSETS.AAVE.UNDERLYING, AaveV3Ethereum.ASSETS.AAVE.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x495a957a79652a5e0fd2a854635df04aeb86fb136127eba37ff9c7b5a260662d": { + "previousValue": "0x00000000000000000000000000000000000000000000064571161ac8a712865d", + "newValue": "0x00000000000000000000000000000000000000000000077ec8810557b164d15d" + }, + "0x4aede0a4429093ac1f64f523c180bcf8485d339a34f665e9c638e9e941c7af2c": { + "previousValue": "0x0000000000000000000000000000000000000000000001caabe6b62924226757", + "newValue": "0x0000000000000000000000000000000000000000000006bf3022cba5b0a3a457" + } + } + }, + "0x9eda81c21c273a82be9bbc19b6a6182212068101": { + "label": "AaveSafetyModule.STK_AAVE_WSTETH_BPTV2", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000009": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000068a25bb3", + "newValue": "0x0000000000000000000000000000000000000000000000000000000068f4e0e7" + }, + "0x000000000000000000000000000000000000000000000000000000000000000f": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000007d0", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000003e8" + }, + "0xfc8aee8416b692e3581ecb0e469dfb43f6eb58b5c6dba1f8235e29609b3cb8a0": { + "previousValue": "0x000000000000000000000000687df7db00000000000000000008e1bc9bf04000", + "newValue": "0x000000000000000000000000687e39e7000000000000000000055873e297b4bd" + }, + "0xfc8aee8416b692e3581ecb0e469dfb43f6eb58b5c6dba1f8235e29609b3cb8a1": { + "previousValue": "0x00000000000000000000000000000000000000000000000004250fe3e4a3e015", + "newValue": "0x000000000000000000000000000000000000000000000000042552e186904c40" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a26": { + "previousValue": "0x00687e39e6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687e39e6000000000003000000000000000000000000000000000000000000" + }, + "0x5e42e61f6ba243bb2d33351fdcc4ecfed25145016826881fdc8a40a4e9d16a27": { + "previousValue": "0x000000000000000000093a8000000000000068ac5e6700000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ac5e67000000000000687e39e7" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_TestVoteOnEthereum_20250530_before_AaveV3Ethereum_TestVoteOnEthereum_20250530_after.md b/diffs/AaveV3Ethereum_TestVoteOnEthereum_20250530_before_AaveV3Ethereum_TestVoteOnEthereum_20250530_after.md new file mode 100644 index 000000000..609d4653e --- /dev/null +++ b/diffs/AaveV3Ethereum_TestVoteOnEthereum_20250530_before_AaveV3Ethereum_TestVoteOnEthereum_20250530_after.md @@ -0,0 +1,22 @@ +## Raw diff + +```json +{ + "raw": { + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xf3e9bdb17e809d40894019e71fc3cd1caab638876c2f7e53420abc45924bfed5": { + "previousValue": "0x006839b936000000000002000000000000000000000000000000000000000000", + "newValue": "0x006839b936000000000003000000000000000000000000000000000000000000" + }, + "0xf3e9bdb17e809d40894019e71fc3cd1caab638876c2f7e53420abc45924bfed6": { + "previousValue": "0x000000000000000000093a800000000000006867ddb700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006867ddb70000000000006839b937" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md b/diffs/AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md new file mode 100644 index 000000000..f81c3acf9 --- /dev/null +++ b/diffs/AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Gnosis_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md @@ -0,0 +1,32 @@ +## Raw diff + +```json +{ + "raw": { + "0x9a1f491b86d09fc1484b5fab10041b189b60756b": { + "label": "GovernanceV3Gnosis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x7328c223b526ac18a2ca34e3cc928d22c174fde8c81d65ae5d17c01763d134b1": { + "previousValue": "0x006880e75b000000000002000000000000000000000000000000000000000000", + "newValue": "0x006880e75b000000000003000000000000000000000000000000000000000000" + }, + "0x7328c223b526ac18a2ca34e3cc928d22c174fde8c81d65ae5d17c01763d134b2": { + "previousValue": "0x000000000000000000093a8000000000000068af0bdc00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af0bdc0000000000006880e75c" + } + } + }, + "0xec710f59005f48703908bc519d552df5b8472614": { + "label": "AaveV3Gnosis.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xc824c85b100927cf22ad0c1d5048b530a1d82553e3335bfb3de1f58d5673f1fe": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_GHOGnosisLaunch_20250421_before_AaveV3Gnosis_GHOGnosisLaunch_20250421_after.md b/diffs/AaveV3Gnosis_GHOGnosisLaunch_20250421_before_AaveV3Gnosis_GHOGnosisLaunch_20250421_after.md new file mode 100644 index 000000000..4f19dcbbe --- /dev/null +++ b/diffs/AaveV3Gnosis_GHOGnosisLaunch_20250421_before_AaveV3Gnosis_GHOGnosisLaunch_20250421_after.md @@ -0,0 +1,340 @@ +## Raw diff + +```json +{ + "raw": { + "0x6bb7a212910682dcfdbd5bcbb3e28fb4e8da10ee": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000003": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x3dbda3be5418b2217cfb7a8f3131c8a19573484e33d31f04090307bec9f4a718": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xbe2f5d4e470d773d640fa64679fcb2761d7af6b786ff9a4d2e118552224cd764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + } + } + }, + "0x73bc11423cbf14914998c23b0afc9be0cb5b2229": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b057": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001df462e2712496373a347f8ad10802a5e95f053d" + }, + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b058": { + "previousValue": "0x0000000000000000000000001df462e2712496373a347f8ad10802a5e95f053d", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x1b2d903e5b1614d7c1e0ce4f9b0c56427ce0169a95976bacb96d35b2dcf5b059": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + } + } + }, + "0x9a1f491b86d09fc1484b5fab10041b189b60756b": { + "label": "GovernanceV3Gnosis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x22848320af6c4894685e387cf97d56ba798f5dabcd8f3a2db70374776f0f2f93": { + "previousValue": "0x00686c904e000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686c904e000000000003000000000000000000000000000000000000000000" + }, + "0x22848320af6c4894685e387cf97d56ba798f5dabcd8f3a2db70374776f0f2f94": { + "previousValue": "0x000000000000000000093a80000000000000689ab4cf00000000000000000000", + "newValue": "0x000000000000000000093a80000000000000689ab4cf000000000000686c904f" + } + } + }, + "0xde6539018b095353a40753dc54c91c68c9487d4e": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x000000000000000000001df462e2712496373a347f8ad10802a5e95f053d0001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001df462e2712496373a347f8ad10802a5e95f053d" + }, + "0x0000000000000000000000000000000000000000000000000000000000000005": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x0000000000000000000000000000000000000000000000000000000000000009": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000006179f7c1be40863405f374e7f5f8806c728660a" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000045849994fc9c7b15" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000044ae84d8e9a37444" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000dda641cfe44aff82" + }, + "0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000594862ae1802b3d5" + }, + "0x1562a759f38dadd687c76a66b280b167a6625aa5c9dc9ab890f26b5ebb953db7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4022ffcbcc105342b5616796d3f4b6a3b8d846ffa35e402b44080d7804f6f92a" + }, + "0x156cfad9a365e7dbe727f3555339199a5f245c2b2aa30aaa0a7d0108c4bfe3f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x15f016c2ce06d99edfe85a3752d7e8e78fb936be9fda6799ea79e8d62b7910be": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + }, + "0x16d928b3c956021b47fc656196d6ba2ffd183481bdf354a4e3e02a4183f6b92e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x1b8506025c2f48aa652056849bceefe53aca82a6bacacd3f952a2911819485b3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x1b93a487e9618b94b9c2582403f62f37366b935fb16b5662f095ef8d4dc9f2f9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x2e1d28cbd79909ab3b781a3b6ed36308538ed5e921eff761e217374e33e3d5e1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x570ba59651bc4978d5dd0af8080856f5a828ccc4c9701178b8e71a42644ae7c5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000007dff72693f6a4149b17e7c6314655f6a9f7c8b33" + }, + "0x64813f543e9e6d0745c3a3af9a3c60e2498e805c8ed7cfabec0a723971f1cd37": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xda04a948b3ded5b8c007440e09d0c5fbf733e665881cdda1263ce39a086d3c5c" + }, + "0x7712a94e2d170ad3817db8830681040cb744b9d7bbeb7f1b4e68631c4ecb54d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000006bb7a212910682dcfdbd5bcbb3e28fb4e8da10ee" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa61f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0x785a1cd22288cc8a5ce664c50ca5b8ac546d6bfb4ebed8d76a096d29831fa620": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x94e3ca688295912fbfc9edffe530980233cf98e49aaaa8ed0a1ed40e46d347f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x975100a3a7525219458f095aea06e943da1f3a875c175269c7e08b138b296af9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x9e623807eecacc367291c7c35b49ec61a342551b4603ac4258a7598ad0a02bff": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xb2b2c0e7786a207a00d4469ca0825637c16b0d402fea95dfe976dade25f0cf98": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x05dda1dc0cfac7d1b238dc7bfb2035432cb17cb970ea6eccfed7c97d5e6cd7f1" + }, + "0xc0cc08974de25f30bc8e557411378c89328786c54ed03dc7a3f682c7b56a6013": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000006179f7c1be40863405f374e7f5f8806c728660a" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0f9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fa": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xc43d59e5cc2bf8f1b992795c27c2d5bb31adadefc93354955ac0e2ca9c5be0fc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xcb90903d4a6548bec3676fcffdbefe0e301ee549556b5570a325b815e7271c9e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041516": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041517": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041518": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be068041519": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be06804151a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xcf6d12063c5db52d2624adbcd022dea76b8eb3fc156b1e58c6ae4be06804151b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xe08cacc565c769c614e476d4ccf4c6029add84095117a2b614dc884c00913837": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000040d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0xe1ab02057067654b6120a0c1fd963aa58352b33adafb78797aeac19d28e9d1b2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0xe4699c7c4df9fbafaa2618b6b8247e4db4953d671d796c1115825c538f38b14c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xebcbba45421961a613aa8525f049792af76b4a3b9c8cd725fff0451a22d8172d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b94ab28c6869466a46a42aba834ca2b3cecca5eb" + }, + "0xf293d3be32695610199eb8e41697284defa313df24a10638ab2a31b95a75822b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd067d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd067e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd067f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001686c904f0000000000013da329b6336471800000" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd0680": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000001043561a88293000000000000000013da329b6336471800000" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd0681": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000041" + }, + "0xf473f37f2d9aaddac194516551e1bd9928dfe970aa2d145db6f4213e1ccd0682": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xf50857c0e4d509ee4f4d061a2d9b5c36d92b756fd7b2b402118ad1344deec247": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000098217a06721ebf727f2c8d9ad7718ec28b7aae34" + }, + "0xf710c14a930bf78b4a5b9c44d49696330518fe0b0b0a3ffc46b9f4cd5dfd3418": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x3c539990abb86ec1720e44699e7db9c65f5045c358615f7219b35a44bfb6287e" + }, + "0xffac741cc353cc8e05c1f8c328ec18e682b88bec50d99165f3501c0057e802f2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + } + } + }, + "0xec710f59005f48703908bc519d552df5b8472614": { + "label": "AaveV3Gnosis.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x2a846bc7fb8791ca9ee49bd2c1a72d97133725a5437b0cfd974661d3e4cac187": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000009": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x47a909fb6323c7829944f71a1dd6a5a36e2f07bf5a8b12fb516281c1191f5e27": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x5e4c56f669e9beb23252e20433cdb335fb14e2250c1d5c70793dd77198c56190": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000de6539018b095353a40753dc54c91c68c9487d4e" + }, + "0x9b3b068d87884c5356c62511a016dad778c18fa41fabe618bdc9ba5a1465b7b0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000002116545850052128000000" + }, + "0x9b3b068d87884c5356c62511a016dad778c18fa41fabe618bdc9ba5a1465b7b1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4343495020546f6b656e506f6f6c2076312e352e31000000000000000000002a" + }, + "0x9f4820aca2eecc040ddfd92911ee95754aede9216d87c544df0eca90e342b7f6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xeb787cdae03b168a0f044cd56b970bcef0781f4c4aa8e03b55ca3a856a47685f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_GHOGnosisListing_20250421_before_AaveV3Gnosis_GHOGnosisListing_20250421_after.md b/diffs/AaveV3Gnosis_GHOGnosisListing_20250421_before_AaveV3Gnosis_GHOGnosisListing_20250421_after.md new file mode 100644 index 000000000..60ac4f789 --- /dev/null +++ b/diffs/AaveV3Gnosis_GHOGnosisListing_20250421_before_AaveV3Gnosis_GHOGnosisListing_20250421_after.md @@ -0,0 +1,300 @@ +## Reserve changes + +### Reserves added + +#### GHO ([0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73](https://gnosisscan.io/address/0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 2,500,000 GHO | +| borrowCap | 2,250,000 GHO | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| oracle | [0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12](https://gnosisscan.io/address/0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12) | +| oracleDecimals | 8 | +| oracleLatestAnswer | 1 | +| usageAsCollateralEnabled | false | +| ltv | 0 % [0] | +| liquidationThreshold | 0 % [0] | +| liquidationBonus | 0 % | +| liquidationProtocolFee | 0 % [0] | +| reserveFactor | 10 % [1000] | +| aToken | [0x3FdCeC11B4f15C79d483Aedc56F37D302837Cf4d](https://gnosisscan.io/address/0x3FdCeC11B4f15C79d483Aedc56F37D302837Cf4d) | +| variableDebtToken | [0x2766EEFE0311Bf7421cC30155b03d210BCE30dF8](https://gnosisscan.io/address/0x2766EEFE0311Bf7421cC30155b03d210BCE30dF8) | +| borrowingEnabled | true | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x4cE496f0a390745102540faF041EF92FfD588b44](https://gnosisscan.io/address/0x4cE496f0a390745102540faF041EF92FfD588b44) | +| aTokenName | Aave Gnosis GHO | +| aTokenSymbol | aGnoGHO | +| aTokenUnderlyingBalance | 100 GHO [100000000000000000000] | +| id | 8 | +| isPaused | false | +| variableDebtTokenName | Aave Gnosis Variable Debt GHO | +| variableDebtTokenSymbol | variableDebtGnoGHO | +| virtualBalance | 100 GHO [100000000000000000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 56.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 6.5 % | +| variableRateSlope2 | 50 % | +| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=65000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=565000000000000000000000000) | + + +## Raw diff + +```json +{ + "reserves": { + "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73": { + "from": null, + "to": { + "aToken": "0x3FdCeC11B4f15C79d483Aedc56F37D302837Cf4d", + "aTokenName": "Aave Gnosis GHO", + "aTokenSymbol": "aGnoGHO", + "aTokenUnderlyingBalance": "100000000000000000000", + "borrowCap": 2250000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "id": 8, + "interestRateStrategy": "0x4cE496f0a390745102540faF041EF92FfD588b44", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 0, + "liquidationProtocolFee": 0, + "liquidationThreshold": 0, + "ltv": 0, + "oracle": "0x360d8aa8F6b09B7BC57aF34db2Eb84dD87bf4d12", + "oracleDecimals": 8, + "oracleLatestAnswer": "100000000", + "reserveFactor": 1000, + "supplyCap": 2500000, + "symbol": "GHO", + "underlying": "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73", + "usageAsCollateralEnabled": false, + "variableDebtToken": "0x2766EEFE0311Bf7421cC30155b03d210BCE30dF8", + "variableDebtTokenName": "Aave Gnosis Variable Debt GHO", + "variableDebtTokenSymbol": "variableDebtGnoGHO", + "virtualBalance": "100000000000000000000" + } + } + }, + "strategies": { + "0xfc421aD3C883Bf9E7C4f42dE845C4e4405799e73": { + "from": null, + "to": { + "address": "0x4cE496f0a390745102540faF041EF92FfD588b44", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "565000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "65000000000000000000000000", + "variableRateSlope2": "500000000000000000000000000" + } + } + }, + "raw": { + "0x2766eefe0311bf7421cc30155b03d210bce30df8": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x31644c8c4e148ccb6df9976bb75f3b72883c725f00928708955dafe6c2540d71" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520476e6f736973205661726961626c6520446562742047484f00003a" + }, + "0x000000000000000000000000000000000000000000000000000000000000003c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7661726961626c6544656274476e6f47484f0000000000000000000000000024" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000adb599b1858e7738ae760d4dcf8c11cc569af3fb", + "label": "Implementation slot" + } + } + }, + "0x3fdcec11b4f15c79d483aedc56f37d302837cf4d": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0x0000000000000000000000000000000000000000000000000000000000000037": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x4161766520476e6f7369732047484f000000000000000000000000000000001e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000038": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x61476e6f47484f0000000000000000000000000000000000000000000000000e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000039": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x1f2a9723f9316300a9b582f6c6fbcc2d6fa877885aab5c70a5dddd009a4ec1d5" + }, + "0x000000000000000000000000000000000000000000000000000000000000003d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002d23eefc273aabfde4013cd80132e9fc16863069", + "label": "Implementation slot" + }, + "0xbdb8848225282f05c62825b1a543544cfdb3ef431fe7406743c9df31670f2e4a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000033b2e3c9fd0803ce800000000000000000000056bc75e2d63100000" + } + } + }, + "0x41585c50524fb8c3899b43d7d797d9486aac94db": { + "label": "AaveV3Gnosis.EMISSION_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x267a012e3de194c97995cdfab2302d8964f27cc99f5f4ee6ceafaa5e3e88592c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + }, + "0x445effbe224b90d291c0e58e0d97293cca096b7d5fb9542db95434fdc8c4f447": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ac140648435d03f784879cd789130f22ef588fcd" + } + } + }, + "0x4ce496f0a390745102540faf041ef92ffd588b44": { + "label": "AaveV3Gnosis.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.GNO.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.WXDAI.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.EURe.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.sDAI.INTEREST_RATE_STRATEGY, AaveV3Gnosis.ASSETS.USDCe.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x48170ee2220a95ac755cb597c251a388b06c0c2dd4a2065caa0df18822fc5d3f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000013880000028a000000002328" + } + } + }, + "0x9a1f491b86d09fc1484b5fab10041b189b60756b": { + "label": "GovernanceV3Gnosis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x7328c223b526ac18a2ca34e3cc928d22c174fde8c81d65ae5d17c01763d134b1": { + "previousValue": "0x00686c904e000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686c904e000000000003000000000000000000000000000000000000000000" + }, + "0x7328c223b526ac18a2ca34e3cc928d22c174fde8c81d65ae5d17c01763d134b2": { + "previousValue": "0x000000000000000000093a80000000000000689ab4cf00000000000000000000", + "newValue": "0x000000000000000000093a80000000000000689ab4cf000000000000686c904f" + } + } + }, + "0xb50201558b00496a145fe76f7424749556e326d8": { + "label": "AaveV3Gnosis.POOL", + "balanceDiff": null, + "stateDiff": { + "0x000000000000000000000000000000000000000000000000000000000000003b": { + "previousValue": "0x00000000000000000000000000000000000000000000000800000000000009c4", + "newValue": "0x00000000000000000000000000000000000000000000000900000000000009c4" + }, + "0x05725f7419f52ac606bc65a60e5ab85095522694ed898882d2777964ee382600": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000fc421ad3c883bf9e7c4f42de845c4e4405799e73" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b907": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x100000000000000000000000000002625a000022551003e88512000000000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b908": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b909": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000800686c904f00000000000000000000000000000000" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003fdcec11b4f15c79d483aedc56f37d302837cf4d" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000002766eefe0311bf7421cc30155b03d210bce30df8" + }, + "0xd65dfe8da0b5a761df1b1a8535b7c5e4a8bdd40bd305a11fa569ad02c896b90f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000056bc75e2d6310000000000000000000000000000000000000" + } + } + }, + "0xeb0a051be10228213baeb449db63719d6742f7c4": { + "label": "AaveV3Gnosis.ORACLE", + "balanceDiff": null, + "stateDiff": { + "0x48170ee2220a95ac755cb597c251a388b06c0c2dd4a2065caa0df18822fc5d3f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000360d8aa8f6b09b7bc57af34db2eb84dd87bf4d12" + } + } + }, + "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x629d6a5723b2a078ab000f7f107c532a4b8b18e61e48cf969197bfb69fb8521d": { + "previousValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9d4281ea663153c0da1e68d2cc357e674ceb9a6845caa2a8c7be8fbb311d4520": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" + }, + "0xa76adafa3f988cb1886128ff2e220a47b7d3d67265911c845af761d7dcbd88c4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_July2025FundingUpdate_20250721_before_AaveV3Gnosis_July2025FundingUpdate_20250721_after.md b/diffs/AaveV3Gnosis_July2025FundingUpdate_20250721_before_AaveV3Gnosis_July2025FundingUpdate_20250721_after.md new file mode 100644 index 000000000..0aa93b18a --- /dev/null +++ b/diffs/AaveV3Gnosis_July2025FundingUpdate_20250721_before_AaveV3Gnosis_July2025FundingUpdate_20250721_after.md @@ -0,0 +1,32 @@ +## Raw diff + +```json +{ + "raw": { + "0x9a1f491b86d09fc1484b5fab10041b189b60756b": { + "label": "GovernanceV3Gnosis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x22848320af6c4894685e387cf97d56ba798f5dabcd8f3a2db70374776f0f2f93": { + "previousValue": "0x00687e4780000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687e4780000000000003000000000000000000000000000000000000000000" + }, + "0x22848320af6c4894685e387cf97d56ba798f5dabcd8f3a2db70374776f0f2f94": { + "previousValue": "0x000000000000000000093a8000000000000068ac6c0100000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ac6c01000000000000687e4781" + } + } + }, + "0xedbc7449a9b594ca4e053d9737ec5dc4cbccbfb2": { + "label": "AaveV3Gnosis.ASSETS.EURe.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x26254d1fd6f33309b8b2e2c70655e82d797daad8b1d0b4665f0d822c59a8cad0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000014542ba12a337c00000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..3268ca63e --- /dev/null +++ b/diffs/AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Gnosis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x9a1f491b86d09fc1484b5fab10041b189b60756b": { + "label": "GovernanceV3Gnosis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x1c5556a54fe414bb73b8e027c2ff4bb044a11e7ca4f73a8463fd263d06b76aa6": { + "previousValue": "0x006842cf7a000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf7a000000000003000000000000000000000000000000000000000000" + }, + "0x1c5556a54fe414bb73b8e027c2ff4bb044a11e7ca4f73a8463fd263d06b76aa7": { + "previousValue": "0x000000000000000000093a800000000000006870f3fb00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3fb0000000000006842cf7b" + } + } + }, + "0xec710f59005f48703908bc519d552df5b8472614": { + "label": "AaveV3Gnosis.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x3eee2ef91b3ffbf52b7f2e4a52338fff8fe679dd25958576f2efb535504dddbf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x54ad8c47ed0bc5fc972543072b075533a9f0d6fb94281b25f0862ccea9b3576f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x67aed825aa9f623e3ab825a093263a02cff60b8d8009073324f21ccceae1e3c9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x941ed6435ea4f90acf8577f1c3bf81bb44ecc03e52d363cf951da11948393481": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..69afccc13 --- /dev/null +++ b/diffs/AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Linea_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,36 @@ +## Raw diff + +```json +{ + "raw": { + "0x3bce23a1363728091bc57a58a226cf2940c2e074": { + "label": "GovernanceV3Linea.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458": { + "previousValue": "0x006842cf82000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf82000000000003000000000000000000000000000000000000000000" + }, + "0x8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb459": { + "previousValue": "0x000000000000000000093a800000000000006870f40300000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f4030000000000006842cf83" + } + } + }, + "0xbf32c7dfc72b730967072b112927ca0de205dbb5": { + "label": "AaveV3Linea.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x305fce90b81302a1dfcace38e470026c1be9bf60f5f8aa03f7f7ba6f16b01053": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8a7b4beb7c66b87b2832de3b52666a73339e648e6090d558a568e85bd5f8c72b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..bf7d0a501 --- /dev/null +++ b/diffs/AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Metis_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x2233f8a66a728fba6e1dc95570b25360d07d5524": { + "label": "GovernanceV3Metis.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xf787d5ff306ee7ea1d7b35b5cacd5a837646921c113945dbc3a3b6329ce40033": { + "previousValue": "0x006842cf79000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf79000000000003000000000000000000000000000000000000000000" + }, + "0xf787d5ff306ee7ea1d7b35b5cacd5a837646921c113945dbc3a3b6329ce40034": { + "previousValue": "0x000000000000000000093a800000000000006870f3fa00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3fa0000000000006842cf7a" + } + } + }, + "0xcdcb65fc657b701a5100a12efb663978e7e8ffb8": { + "label": "AaveV3Metis.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0xab03fe3d52a2dbaef5978a12095ca095b0b6e45bdc46907b426061111a9f7a0a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xbc895462dee1209646a8a8cd95e8fe3431126f7bf3ace4232efd98236f075999": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xc23d522e76ba7b515f3fa0d31dac2132ce0070134688d5051d5c1456e126f0fb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd632ccca9368b80c65ffd28741d5d660a0747bfb4d5ac8f27141dd7f940800f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_AaveRobotMaintenance_20250330_before_AaveV3Optimism_AaveRobotMaintenance_20250330_after.md b/diffs/AaveV3Optimism_AaveRobotMaintenance_20250330_before_AaveV3Optimism_AaveRobotMaintenance_20250330_after.md new file mode 100644 index 000000000..890dee909 --- /dev/null +++ b/diffs/AaveV3Optimism_AaveRobotMaintenance_20250330_before_AaveV3Optimism_AaveRobotMaintenance_20250330_after.md @@ -0,0 +1,244 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6](https://optimistic.etherscan.io/address/0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 126,850.0752 LINK [126850075218031102463204] | 126,820.0752 LINK [126820075218031102463204] | +| virtualBalance | 126,850.0733 LINK [126850073348872092383679] | 126,820.0733 LINK [126820073348872092383679] | + + +## Raw diff + +```json +{ + "reserves": { + "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6": { + "aTokenUnderlyingBalance": { + "from": "126850075218031102463204", + "to": "126820075218031102463204" + }, + "virtualBalance": { + "from": "126850073348872092383679", + "to": "126820073348872092383679" + } + } + }, + "raw": { + "0x0d3caf33e4577d318466edef373e42cf19815cc1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000696fb0d7d069cc0bb35a7c36115ce63e55cb9aa6" + } + } + }, + "0x0e1a3af1f9cc76a62ed31ededca291e63632e7c4": { + "label": "GovernanceV3Optimism.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7b9": { + "previousValue": "0x00686bdaf6000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bdaf6000000000003000000000000000000000000000000000000000000" + }, + "0x0cc2e7a263101f3ec4cff7d64ef5961ae18d1d70e854cb40c5302bf7c043d7ba": { + "previousValue": "0x000000000000000000093a800000000000006899ff7700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899ff77000000000000686bdaf7" + } + } + }, + "0x191c10aa4af7c30e871e70c95db0e4eb77237530": { + "label": "AaveV3Optimism.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x000000000000000000000000000000000000000000001b4e9a8390dcb2063ed4", + "newValue": "0x000000000000000000000000000000000000000000001b4cfb929d4da010ee54" + }, + "0x8de5b4c9e1ccce84b1f76b67482ce11256c258ced0ff3ce9c36f20fdbd88b36e": { + "previousValue": "0x00000000033df4d2e40e117fc942c33f00000000000000220e04c7a71ebddf50", + "newValue": "0x00000000033df4d56e5a147e9eaa4bb800000000000000206f13d4180cc88ed0" + }, + "0x9ad4ba68d92460835e236d222d0b933ede669f09541a7fc23404c9fc3ae9a34c": { + "previousValue": "0x00000000033d91e9747d2fdd9af921b300000000000000000000000000000000", + "newValue": "0x00000000033df4d56e5a147e9eaa4bb800000000000000000000000000000000" + } + } + }, + "0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6": { + "label": "AaveV3Optimism.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x493258e3da1a8c43d1c1ea21d99d70f574968c202c57de27cdc001e32d0a561b": { + "previousValue": "0x0000000000000000000000000000000000000000000000809884755a0f65387a", + "newValue": "0x00000000000000000000000000000000000000000000008238d9de67ad1d387a" + }, + "0x667a1a9ce9c6f5ed20b2fb9fbc70fa7a1190973a5ba3887622b03f0fb19cd89b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9f7e1d98ee6a46ea63944f55cf9ca42e21be8b65dd6dfba824f184ec68bdd06e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa9f91410016967625770abe48f9303b10d3a651f0fa72aa0c9237cc3a97e8044": { + "previousValue": "0x000000000000000000000000000000000000000000001adc8e6d624bf5590ce4", + "newValue": "0x000000000000000000000000000000000000000000001adaee17f93e57a10ce4" + }, + "0xbbd15e34a42077dbac485deca7ab9d500d0b6dac50a0800a8fe358b8734b2cb1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc6a73c0fcf1da0b5d4275e15a2ad5a8a1b6c72fce26e32b6b13c474d83b48da5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xea512aa0110ca608302ee2bb1b59d6a5b2e9330f71032c296d730930771bf612": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x55cf9583d7d30dc4936baee1f747591dbece5df7": { + "label": "MiscOptimism.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x565f160300000000000000000000000025a98ced2800b60da45afed3376156a7", + "newValue": "0xdf393fa10000000000000000000000005f4e258deed159df5993fbf010dc398e" + }, + "0x55e6ad8f40478615244c671f65abadc19e98eef424a29b72309f2e319f9e00f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0xaf52342877dfac38b590c8d0974e3c575714093d5ba45956c7d5825af9b10dc1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000365d47ced3d7eb6a9bdb3814aa23cc06b2d33ef8" + }, + "0xaf52342877dfac38b590c8d0974e3c575714093d5ba45956c7d5825af9b10dc2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + }, + "0xb0be2daeddc977ea00d143700fa86ef09bdbe0fc67952669233e6b6e68886185": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x696fb0d7d069cc0bb35a7c36115ce63e55cb9aa6": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000004b", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000004b" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x0830d9cd0000000c0000009f004c4b4000989680000000003198bdce56824048", + "newValue": "0x0830d9cd0000000c000000a0004c4b4000989680000000003198bdce56824048" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x0000000000000000000000000000000000000000000000809884755a0f65387a", + "newValue": "0x00000000000000000000000000000000000000000000008238d9de67ad1d387a" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5af9": { + "previousValue": "0x565f160300000000000000000000000025a98ced2800b60da45afed3376156a7", + "newValue": "0x77af4e3a00000000000000000000000025804559094d7299e4e9d75ef6f49c05" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b18": { + "previousValue": "0x77af4e3a00000000000000000000000025804559094d7299e4e9d75ef6f49c05", + "newValue": "0xdf393fa10000000000000000000000005f4e258deed159df5993fbf010dc398e" + }, + "0x55b20fa2eea0284850b4f64db775c1150a9c0392a46ad1a379af0c46e6f7da01": { + "previousValue": "0x000000fa7dbd95a64b912b57d2fc9c70322954f4e546e2ffffffff000f424000", + "newValue": "0x000000fa7dbd95a64b912b57d2fc9c70322954f4e546e2083c00d1000f424000" + }, + "0x55b20fa2eea0284850b4f64db775c1150a9c0392a46ad1a379af0c46e6f7da02": { + "previousValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000", + "newValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000" + }, + "0x55e6ad8f40478615244c671f65abadc19e98eef424a29b72309f2e319f9e00f8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000004b" + }, + "0x9942a4b0acdb21af0b00118b43090aeaa33f89bb2eb31f3be036f593aecec3b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xabb411524d2de1133566a6992970500ce2d5d3b00ff7071c2fed731fc2e44993": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xaf52342877dfac38b590c8d0974e3c575714093d5ba45956c7d5825af9b10dc1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000d3caf33e4577d318466edef373e42cf19815cc1ffffffff000f424000" + }, + "0xaf52342877dfac38b590c8d0974e3c575714093d5ba45956c7d5825af9b10dc2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000" + }, + "0xb0be2daeddc977ea00d143700fa86ef09bdbe0fc67952669233e6b6e68886185": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000002c", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xcab90443af8a0791574fb715e1adc10369ab83f4574c9f68d0ea0c1e60f29ca6": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000004b", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000002c" + }, + "0xe903207c0e7722ee33d7f2a77fc7566971d5ef544f867d6e782e30c48f7410d7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000055cf9583d7d30dc4936baee1f747591dbece5df7" + }, + "0xfdb16089911599908bdc0c8632422f4692bce1a13c3edc8a7680fbacd5c7e2d6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Optimism.POOL", + "balanceDiff": null, + "stateDiff": { + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b5": { + "previousValue": "0x0000000000000a20bb5a7c3e91139b0b00000000033df4d56d40f6329403096f", + "newValue": "0x0000000000000a21ef42b8472857a9ee00000000033df4d56e5a147e9eaa4bb8" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b6": { + "previousValue": "0x00000000000285c4b21242ecd0c685300000000003581efde5ee694a0485d684", + "newValue": "0x00000000000285eb09420a072e5786860000000003581efe2e280a8cf23d0201" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b7": { + "previousValue": "0x000000000000000000000100686bdac30000000000000000000d0d8017c5c36d", + "newValue": "0x000000000000000000000100686bdaf70000000000000000000d0d8017c5c36d" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80bc": { + "previousValue": "0x0000000000001adc8e66be4e7685f9bf0000000000000000000a6516476fd9cb", + "newValue": "0x0000000000001adaee115540d8cdf9bf0000000000000000000a67663be3f220" + }, + "0xa448ebc1fc7bd1ea9dc8c788edf226a39771c0d783bf57949af80885132bc288": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xe601c5837307f07ab39deb0f5516602f045bf14f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000094000001f402", + "newValue": "0x000000000000000000000000000000000000000000000000000095000001f402" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md b/diffs/AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md new file mode 100644 index 000000000..e5cb730bc --- /dev/null +++ b/diffs/AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Optimism_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md @@ -0,0 +1,230 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6](https://optimistic.etherscan.io/address/0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 125,574.8949 LINK [125574894922405990483955] | 125,544.8949 LINK [125544894922405990483955] | +| virtualBalance | 125,574.8930 LINK [125574893053246980404430] | 125,544.8930 LINK [125544893053246980404430] | + + +## Raw diff + +```json +{ + "reserves": { + "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6": { + "aTokenUnderlyingBalance": { + "from": "125574894922405990483955", + "to": "125544894922405990483955" + }, + "virtualBalance": { + "from": "125574893053246980404430", + "to": "125544893053246980404430" + } + } + }, + "raw": { + "0x0d3caf33e4577d318466edef373e42cf19815cc1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000696fb0d7d069cc0bb35a7c36115ce63e55cb9aa6" + } + } + }, + "0x0e1a3af1f9cc76a62ed31ededca291e63632e7c4": { + "label": "GovernanceV3Optimism.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xef8374c201f52e9cadf0358fa9fe81d3b5dc6cfd55611ff392a0f6af5d359a1b": { + "previousValue": "0x00687f70ea000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687f70ea000000000003000000000000000000000000000000000000000000" + }, + "0xef8374c201f52e9cadf0358fa9fe81d3b5dc6cfd55611ff392a0f6af5d359a1c": { + "previousValue": "0x000000000000000000093a8000000000000068ad956b00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ad956b000000000000687f70eb" + } + } + }, + "0x191c10aa4af7c30e871e70c95db0e4eb77237530": { + "label": "AaveV3Optimism.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x000000000000000000000000000000000000000000001b10b146b5d154c02863", + "newValue": "0x000000000000000000000000000000000000000000001b0f1255f9818f8e7a22" + }, + "0x8de5b4c9e1ccce84b1f76b67482ce11256c258ced0ff3ce9c36f20fdbd88b36e": { + "previousValue": "0x00000000033df5424a8d084ba457310c00000000000000221cb71fc41332d692", + "newValue": "0x00000000033df543ef87953ddbf6f6df00000000000000207dc663744e012851" + }, + "0x9ad4ba68d92460835e236d222d0b933ede669f09541a7fc23404c9fc3ae9a34c": { + "previousValue": "0x00000000033d91e9747d2fdd9af921b300000000000000000000000000000000", + "newValue": "0x00000000033df543ef87953ddbf6f6df00000000000000000000000000000000" + } + } + }, + "0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6": { + "label": "AaveV3Optimism.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x493258e3da1a8c43d1c1ea21d99d70f574968c202c57de27cdc001e32d0a561b": { + "previousValue": "0x00000000000000000000000000000000000000000000007ad0b78326682f7463", + "newValue": "0x00000000000000000000000000000000000000000000007c710cec3405e77463" + }, + "0x667a1a9ce9c6f5ed20b2fb9fbc70fa7a1190973a5ba3887622b03f0fb19cd89b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x9f7e1d98ee6a46ea63944f55cf9ca42e21be8b65dd6dfba824f184ec68bdd06e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa9f91410016967625770abe48f9303b10d3a651f0fa72aa0c9237cc3a97e8044": { + "previousValue": "0x000000000000000000000000000000000000000000001a976dbee79ed4f1c7f3", + "newValue": "0x000000000000000000000000000000000000000000001a95cd697e913739c7f3" + }, + "0xbbd15e34a42077dbac485deca7ab9d500d0b6dac50a0800a8fe358b8734b2cb1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc6a73c0fcf1da0b5d4275e15a2ad5a8a1b6c72fce26e32b6b13c474d83b48da5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xea512aa0110ca608302ee2bb1b59d6a5b2e9330f71032c296d730930771bf612": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x55cf9583d7d30dc4936baee1f747591dbece5df7": { + "label": "MiscOptimism.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x3d3fc7bf3b150dd5c4e4310ab646a1972df46bdc9d65bec6429f04898369bb0d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000054714fac85b0bf627288cc3a186de81a42f1d635" + }, + "0x3d3fc7bf3b150dd5c4e4310ab646a1972df46bdc9d65bec6429f04898369bb0e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x43617073204147525320496e6a6563746f720000000000000000000000000024" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xdd7da54f00000000000000000000000053322d9023058cb5ddd6ac066709d0a6" + }, + "0xd64440ee3cc70c90c30ee32d3230e3f39cc0233ca0f7512d854083a272075301": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + } + } + }, + "0x696fb0d7d069cc0bb35a7c36115ce63e55cb9aa6": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000043", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000044" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x0830d9cd0000000c0000009f004c4b4000989680000000003198bdce56824048", + "newValue": "0x0830d9cd0000000c000000a0004c4b4000989680000000003198bdce56824048" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x00000000000000000000000000000000000000000000007ad0b78326682f7463", + "newValue": "0x00000000000000000000000000000000000000000000007c710cec3405e77463" + }, + "0x0c936a3f10c3688d279f7bcad5175a91b11561eae08c4450abe4293e508ebc78": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x37a95b3ecf1cb8a6929eb48c27602ecdb814757f1ab65fb1625c2875aef9323f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x3d3fc7bf3b150dd5c4e4310ab646a1972df46bdc9d65bec6429f04898369bb0d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000d3caf33e4577d318466edef373e42cf19815cc1ffffffff004c4b4000" + }, + "0x3d3fc7bf3b150dd5c4e4310ab646a1972df46bdc9d65bec6429f04898369bb0e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b11": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xdd7da54f00000000000000000000000053322d9023058cb5ddd6ac066709d0a6" + }, + "0x8932bd1a722cb8a492b9aea0f066e5452cbee8114bff686e7d235d7cf7d18e8a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000055cf9583d7d30dc4936baee1f747591dbece5df7" + }, + "0x9250436e9dfd6694e75d88c481b1435496eeae3181ce3c27aac9d18e522b5195": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd64440ee3cc70c90c30ee32d3230e3f39cc0233ca0f7512d854083a272075301": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000044" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Optimism.POOL", + "balanceDiff": null, + "stateDiff": { + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b5": { + "previousValue": "0x0000000000000b63d5c9f02a92dd3ab600000000033df54305992b1c8f6f3044", + "newValue": "0x0000000000000b6534a19fc6c37d372c00000000033df543ef87953ddbf6f6df" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b6": { + "previousValue": "0x000000000002acd320fea86347cd89c10000000003583a8efede89e68f8a107a", + "newValue": "0x000000000002acfc52fdeb9593b1a1da0000000003583ac7ad3ebdfa258c4065" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80b7": { + "previousValue": "0x000000000000000000000100687f4a710000000000000000000d0d8017c5c36d", + "newValue": "0x000000000000000000000100687f70eb0000000000000000000d0d8017c5c36d" + }, + "0x856845219b63e8d45b358ae184fc72e7f8cbde44b8dfca0ddb2b5897366c80bc": { + "previousValue": "0x0000000000001a976db843a1561eb4ce000000000000000000abd5ab360a16fb", + "newValue": "0x0000000000001a95cd62da93b866b4ce000000000000000000adbde5ec1b3e6c" + }, + "0xa448ebc1fc7bd1ea9dc8c788edf226a39771c0d783bf57949af80885132bc288": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Optimism.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x6ca01bde4fe057191d851eb6efb1e20a37ff1923195913c2ea413629163be3cd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0xe601c5837307f07ab39deb0f5516602f045bf14f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x000000000000000000000000000000000000000000000000000094000001f402", + "newValue": "0x000000000000000000000000000000000000000000000000000095000001f402" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_DeprecationOfLongTailAssets_20250715_before_AaveV3Optimism_DeprecationOfLongTailAssets_20250715_after.md b/diffs/AaveV3Optimism_DeprecationOfLongTailAssets_20250715_before_AaveV3Optimism_DeprecationOfLongTailAssets_20250715_after.md new file mode 100644 index 000000000..c9982472d --- /dev/null +++ b/diffs/AaveV3Optimism_DeprecationOfLongTailAssets_20250715_before_AaveV3Optimism_DeprecationOfLongTailAssets_20250715_after.md @@ -0,0 +1,142 @@ +## Reserve changes + +### Reserves altered + +#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 20 % [2000] | 50 % [5000] | +| maxVariableBorrowRate | 55.5 % | 57.5 % | +| baseVariableBorrowRate | 0 % | 2 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=555000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=20000000000000000000000000&maxVariableBorrowRate=575000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": { + "reserveFactor": { + "from": 2000, + "to": 5000 + } + } + }, + "strategies": { + "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": { + "baseVariableBorrowRate": { + "from": "0", + "to": "20000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "555000000000000000000000000", + "to": "575000000000000000000000000" + } + } + }, + "raw": { + "0x0e1a3af1f9cc76a62ed31ededca291e63632e7c4": { + "label": "GovernanceV3Optimism.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x1adb659ca7eaa45e42dcd257d09b963c5cfbb36f": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xd6d0b7b9827920ce783ea0df077a51137f789e17390f39ee341359db9757ae96": { + "previousValue": "0x00000000002b2c9761ced6b6d1cdaf6e0000000003a9bffdb429d2ba8b939f92", + "newValue": "0x000000000021b0241dc3e720407353cd0000000003a9c2a046bfdcd82036b278" + }, + "0xd6d0b7b9827920ce783ea0df077a51137f789e17390f39ee341359db9757ae97": { + "previousValue": "0x0000000000429c0edd03570b7b3a16bb0000000003eb1cd401229508135dc09b", + "newValue": "0x0000000000532899f1d782436c0b5f3e0000000003eb212d4af9ae697d6e7250" + }, + "0xd6d0b7b9827920ce783ea0df077a51137f789e17390f39ee341359db9757ae98": { + "previousValue": "0x000000000000000000000a00687669150000000000000000016bb31f94658518", + "newValue": "0x000000000000000000000a00687682fd0000000000000000016bb31f94658518" + }, + "0xd6d0b7b9827920ce783ea0df077a51137f789e17390f39ee341359db9757ae9d": { + "previousValue": "0x00000000000003896f719ec346ff11630000000000000000133b9d366f356fb7", + "newValue": "0x00000000000003896f719ec346ff11630000000000000000163069434aa1364b" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x746c675dab49bcd5bb9dc85161f2d7eb435009bf": { + "label": "AaveV3Optimism.ACL_ADMIN, GovernanceV3Optimism.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Optimism.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x8145edddf43f50276641b55bd3ad95944510021e": { + "label": "AaveV3Optimism.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x893b4d783e62e8bd46d93eda5599491ff8ad5c40": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xd6d0b7b9827920ce783ea0df077a51137f789e17390f39ee341359db9757ae95": { + "previousValue": "0x1000000000000000000000000000007a120000061a8007d08512000000000000", + "newValue": "0x1000000000000000000000000000007a120000061a8013888512000000000000" + } + } + }, + "0x9359282735496463131139875849d5302fb4bed1": { + "label": "AaveV3Optimism.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.sUSD.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.OP.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.LUSD.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.MAI.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.rETH.INTEREST_RATE_STRATEGY, AaveV3Optimism.ASSETS.USDCn.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x1c7f307829b43601cc9e310d5b7c696a0f5a58e0e5f7e8e14880124f843d7a16": { + "previousValue": "0x0000000000000000000000000000000000000000138800000226000000001f40", + "newValue": "0x0000000000000000000000000000000000000000138800000226000000c81f40" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Optimism.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa97684ead0e402dc232d5a977953df7ecbab3cdb": { + "label": "AaveV3Optimism.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xce186f6cccb0c955445bb9d10c59cae488fea559": { + "label": "AaveV3Optimism.ASSETS.LUSD.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xff1137243698caa18ee364cc966cf0e02a4e6327": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x21a96d7401b4330badc55cca6afdb5531f4ba2a6923da027f434c4639f5c1d71": { + "previousValue": "0x00687682fc000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687682fc000000000003000000000000000000000000000000000000000000" + }, + "0x21a96d7401b4330badc55cca6afdb5531f4ba2a6923da027f434c4639f5c1d72": { + "previousValue": "0x000000000000000000093a8000000000000068a4a77d00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068a4a77d000000000000687682fd" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..127cdaa8b --- /dev/null +++ b/diffs/AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Optimism_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x0e1a3af1f9cc76a62ed31ededca291e63632e7c4": { + "label": "GovernanceV3Optimism.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xf2222d92a706d2b36524284936563927b6d77fb3761e96fdbe8143f444bd785b": { + "previousValue": "0x006842cf76000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf76000000000003000000000000000000000000000000000000000000" + }, + "0xf2222d92a706d2b36524284936563927b6d77fb3761e96fdbe8143f444bd785c": { + "previousValue": "0x000000000000000000093a800000000000006870f3f700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3f70000000000006842cf77" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Optimism.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x574f52b799ee8bbc880512334ecd493ae9e8c8386ff0a77c92cd9ac234cd9087": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa393ad0a67d58f4848e1afd4dbce171e9946cc6a2a40ce82f3dda1474fbe7f16": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa811bd663bf86aa5dcfb922cd5711c3bcc05508d87946a826c6de50e2858c521": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xfd25c0d217df700faab97fd0fb6bdbbbae2b4b92bbcddabe117a022c1465e3b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_after.md b/diffs/AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_after.md new file mode 100644 index 000000000..04000f902 --- /dev/null +++ b/diffs/AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part1_20250330_after.md @@ -0,0 +1,110 @@ +## Raw diff + +```json +{ + "raw": { + "0x08a8eea76d2395807ce7d1fc942382515469cca1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000ea", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000e8" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x045a0cd900000007000001bf004c4b400098968000000000f31530d20d25fd2b", + "newValue": "0x045a0cd900000007000001bf004c4b400098968000000000f31530d20d25fd2b" + }, + "0x21a4135b6ec05283782bed36ddc8e01889b2ab864467f46ab9be410ce725717b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000088", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x256a4385d3b8aa63cc41e2d335128269a3a0da932f4e813698902da032fecd71": { + "previousValue": "0x000000a8465afbe2038030059afae24fe8e3e820fcb5d8ffffffff000f424000", + "newValue": "0x000000a8465afbe2038030059afae24fe8e3e820fcb5d80464761f000f424000" + }, + "0x256a4385d3b8aa63cc41e2d335128269a3a0da932f4e813698902da032fecd72": { + "previousValue": "0x0000000000000000000000015af1d78b58c40000000000000000000000000000", + "newValue": "0x0000000000000000000000015af1d78b58c40000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b55": { + "previousValue": "0x587d3ff80000000000000000000000001be392e39a2f89433e488ff1e3a52d1a", + "newValue": "0x192fd92c00000000000000000000000092cec98da06fb71297c403b9f4dc78e2" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5b58": { + "previousValue": "0x2ebe46ca000000000000000000000000b80cc71f52da0e4196fdb9fd8f50fd45", + "newValue": "0xb019e54e00000000000000000000000049811451310b5e973238b5451f801418" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bb6": { + "previousValue": "0xb019e54e00000000000000000000000049811451310b5e973238b5451f801418", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bb7": { + "previousValue": "0x192fd92c00000000000000000000000092cec98da06fb71297c403b9f4dc78e2", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x672cb6f2ae2f174ba5faef3fbe77dabd60efc1e86f7e543dded60174f8d5c2bc": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000000000008b", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x87d7bf3b47ceff0f9980b6f27ff78ce30bfebe7f96634b2d440650be7a1700a8": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000ea", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000088" + }, + "0xd762ffc4820cf8e5b0f5f615f7c426c33cdf441c93d1497c53b0b63ff5713024": { + "previousValue": "0x000000ed57c06ce1000748969ddfb79c50e767af92255affffffff004c4b4000", + "newValue": "0x000000ed57c06ce1000748969ddfb79c50e767af92255a0464761f004c4b4000" + }, + "0xd762ffc4820cf8e5b0f5f615f7c426c33cdf441c93d1497c53b0b63ff5713025": { + "previousValue": "0x00000000042607940000000266ec207b769ee3b5000000000993fd18f5f51c4b", + "newValue": "0x00000000042607940000000266ec207b769ee3b5000000000993fd18f5f51c4b" + }, + "0xf3c628c2f877c324bc266706f8726fd9035e0cbae32e2a2e379e0ee8f5b46d08": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000e9", + "newValue": "0x000000000000000000000000000000000000000000000000000000000000008b" + } + } + }, + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xb8ffc108b5770692dc6f82cd58a35d7f10f432156bbe6b494657d1d60f3c1122": { + "previousValue": "0x00686bdb3a000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bdb3a000000000003000000000000000000000000000000000000000000" + }, + "0xb8ffc108b5770692dc6f82cd58a35d7f10f432156bbe6b494657d1d60f3c1123": { + "previousValue": "0x000000000000000000093a800000000000006899ffbb00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899ffbb000000000000686bdb3b" + } + } + }, + "0xb4c212f5cd17e200019b07e6b1fdf124d35dbcf5": { + "label": "MiscPolygon.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x21a4135b6ec05283782bed36ddc8e01889b2ab864467f46ab9be410ce725717b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x2ebe46ca000000000000000000000000b80cc71f52da0e4196fdb9fd8f50fd45", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x587d3ff80000000000000000000000001be392e39a2f89433e488ff1e3a52d1a", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x672cb6f2ae2f174ba5faef3fbe77dabd60efc1e86f7e543dded60174f8d5c2bc": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_after.md b/diffs/AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_after.md new file mode 100644 index 000000000..1c10519f1 --- /dev/null +++ b/diffs/AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_before_AaveV3Polygon_AaveRobotMaintenance_Part2_20250330_after.md @@ -0,0 +1,218 @@ +## Raw diff + +```json +{ + "raw": { + "0x08a8eea76d2395807ce7d1fc942382515469cca1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000e8", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000ea" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x045a0cd900000007000001bf004c4b400098968000000000f31530d20d25fd2b", + "newValue": "0x045a0cd900000007000001c1004c4b400098968000000000f31530d20d25fd2b" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x00000000000000000000000000000000000000000000006cefebe27d1e5f3516", + "newValue": "0x00000000000000000000000000000000000000000000007075fa461a9ec33516" + }, + "0x0c25db6153533023826256860748a475993172f9894525fe4f32864603f1d718": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b4c212f5cd17e200019b07e6b1fdf124d35dbcf5" + }, + "0x1e62e6215f72f349a157982ef97a8589738e2b5ee079d232f2ff959c6dfd9912": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x22c2376e01309eb84f7ecc23ae118962253d3ab87281ac045366a7d0c1722059": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x2465cfd05c3465d34f0085075ccd740961e448716e42762b530dc0d673f30edd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000ea" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bb6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7b6214b6000000000000000000000000273fa822d7aa9fafc922951cc00c3912" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bb7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xe054a3b1000000000000000000000000e26f4d6dfa32c09a5122778fe7a0933f" + }, + "0x4c18ea814e1528b74e81ba147d6741da0cd333e511db984a5f2c163ee1d2f22b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000aa0e6331a947c5a073adee7d023b89296f29c045ffffffff004c4b4000" + }, + "0x4c18ea814e1528b74e81ba147d6741da0cd333e511db984a5f2c163ee1d2f22c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000022b1c8c1227a00000000000000000000000000000" + }, + "0x5dd4377e6e1eebfe802b7aad2bd244c34f4afe7ea42cc1dab73b96ad4918cd34": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b4c212f5cd17e200019b07e6b1fdf124d35dbcf5" + }, + "0x6346cedd692e4839cdd507401524552049b13e1c354621779b959ed0898f73a6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x79ac505459190bf132d8dbf89326e59d9fcd59b460c31fea6091353fe60b6e35": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x90b8846f233bb857334ae84007565b97da4db225b45ee62374b43db6b18d6b40": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000e9" + }, + "0xc38d03ee46d3c6ee33884b38a4b62e97d57d8921809c7474665bce69a705fdb7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000068c7876a47c75b4af34ff454382a67eef366facbffffffff000f424000" + }, + "0xc38d03ee46d3c6ee33884b38a4b62e97d57d8921809c7474665bce69a705fdb8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000015af1d78b58c40000000000000000000000000000" + }, + "0xe591387320d87cae5e4e744c76928e3da9ec42b9b48558e867843618709ca2bd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xea1077672652e2c896bb5a94e764d4d7a59aac261defe5bb61f1a03d66065f31": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x0bc5edc7219d272d9dedd919ce2b4726129ac02b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x0000000000000000000000000000000000000000000000000001bb0000025802", + "newValue": "0x0000000000000000000000000000000000000000000000000001bd0000025802" + } + } + }, + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x0c91243f75e216cf1d80d738f653c23abf15a7e3590b83c6e4772e2ddcffe533": { + "previousValue": "0x00686bdb3a000000000002000000000000000000000000000000000000000000", + "newValue": "0x00686bdb3a000000000003000000000000000000000000000000000000000000" + }, + "0x0c91243f75e216cf1d80d738f653c23abf15a7e3590b83c6e4772e2ddcffe534": { + "previousValue": "0x000000000000000000093a800000000000006899ffbb00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006899ffbb000000000000686bdb3b" + } + } + }, + "0x68c7876a47c75b4af34ff454382a67eef366facb": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000008a8eea76d2395807ce7d1fc942382515469cca1" + } + } + }, + "0xaa0e6331a947c5a073adee7d023b89296f29c045": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000008a8eea76d2395807ce7d1fc942382515469cca1" + } + } + }, + "0xb0897686c545045afc77cf20ec7a532e3120e0f1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x27ffc71cdb4055c588b5c959f97373451d17f7ee77684a02cdd71c73a320d6af": { + "previousValue": "0x00000000000000000000000000000000000000000000000278d3be669dd00000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x6c791fb2bde4133dc8380d4d160265a5bf31b2a0496f13c8595f01a126cd3a94": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x77b4777fd618bebf9f1a7c5c50c6a35d199177a77091da0f01b394a50f46d7ac": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8274e46f3a2007bfb5e4ffc2a51903d8106a4a459b57d194c31b7f79eca58488": { + "previousValue": "0x0000000000000000000000000000000000000000000000046746da3eb162cbb7", + "newValue": "0x000000000000000000000000000000000000000000000000e13876a130fecbb7" + }, + "0x83d7af21cf31016fe0a9965491527aa86641f661d5e395a80e2c38aeee334058": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000278d3be669dd00000" + }, + "0x96fc98c218a376733cd25ee57a5c9e62434a44e6b87702cabaf9a5246e667074": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc0395c28ce2135f527539902c1335f9849a5e583881559183b03f863a5e43f5a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xcd3375697538d19c97f533ab527e8cb915e02b0446042b34cc12b5ee8eeb7863": { + "previousValue": "0x00000000000000000000000000000000000000000000006cefebe27d1e5f3516", + "newValue": "0x00000000000000000000000000000000000000000000007075fa461a9ec33516" + }, + "0xeed740142ec9ca22b45078428da07e7d1df623236737c44e9d80c5aa2892be1b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xb4c212f5cd17e200019b07e6b1fdf124d35dbcf5": { + "label": "MiscPolygon.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x2465cfd05c3465d34f0085075ccd740961e448716e42762b530dc0d673f30edd": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x7b6214b6000000000000000000000000273fa822d7aa9fafc922951cc00c3912" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xe054a3b1000000000000000000000000e26f4d6dfa32c09a5122778fe7a0933f" + }, + "0x4c18ea814e1528b74e81ba147d6741da0cd333e511db984a5f2c163ee1d2f22b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001180ee41ec15dd0accc13a1e646b3152becff8f6" + }, + "0x4c18ea814e1528b74e81ba147d6741da0cd333e511db984a5f2c163ee1d2f22c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x566f74696e6720436861696e20526f626f740000000000000000000000000024" + }, + "0x90b8846f233bb857334ae84007565b97da4db225b45ee62374b43db6b18d6b40": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + "0xc38d03ee46d3c6ee33884b38a4b62e97d57d8921809c7474665bce69a705fdb7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000001d8347b427964fad8a742e7f9442a4e89346400a" + }, + "0xc38d03ee46d3c6ee33884b38a4b62e97d57d8921809c7474665bce69a705fdb8": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x5374617461546f6b656e205265776172647320526f626f740000000000000030" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md b/diffs/AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md new file mode 100644 index 000000000..8c268cc18 --- /dev/null +++ b/diffs/AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_before_AaveV3Polygon_CapsRiskOracleActivationOnOptimismBNBGnosisPolygon_20250722_after.md @@ -0,0 +1,270 @@ +## Reserve changes + +### Reserves altered + +#### LINK ([0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39](https://polygonscan.com/address/0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 433,473.6442 LINK [433473644297135167885299] | 433,443.6442 LINK [433443644297135167885299] | +| virtualBalance | 433,473.6377 LINK [433473637775291518950180] | 433,443.6377 LINK [433443637775291518950180] | + + +## Raw diff + +```json +{ + "reserves": { + "0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39": { + "aTokenUnderlyingBalance": { + "from": "433473644297135167885299", + "to": "433443644297135167885299" + }, + "virtualBalance": { + "from": "433473637775291518950180", + "to": "433443637775291518950180" + } + } + }, + "raw": { + "0x08a8eea76d2395807ce7d1fc942382515469cca1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000000e9", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000ea" + }, + "0x0000000000000000000000000000000000000000000000000000000000000014": { + "previousValue": "0x045a0cd900000007000001c4004c4b400098968000000000f31530d20d25fd2b", + "newValue": "0x045a0cd900000007000001c5004c4b400098968000000000f31530d20d25fd2b" + }, + "0x0000000000000000000000000000000000000000000000000000000000000018": { + "previousValue": "0x000000000000000000000000000000000000000000000070f22efeef8e2f06e2", + "newValue": "0x000000000000000000000000000000000000000000000072928467fd2be706e2" + }, + "0x1ad56eb53d68126d4676c26b47705e28cda062e15bf9a0d7265223482d824f18": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x2562364886f5b25e6d4fa0bb28ad7cc8030a7dd5e0aa0d207b1ad1b265348f7b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000b4c212f5cd17e200019b07e6b1fdf124d35dbcf5" + }, + "0x3a40d559817a8708a86e904353b34e88d1af1a4ed9773a21d429b8ec0e8d53c9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000000ea" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5bb7": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xbc77e2380000000000000000000000000ac14cbfc6d81c633c4ba282dc9cf23e" + }, + "0x65f50f450e352ee9e62076b951bd92ccd7d7db9fe47504a070dd2645f6cb3c34": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa74915e08f0dbcd504244f2a4162ba4c2aa2f29b3c5c642182b6a622f71be99b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000bf08fbd52f7729753de880ace39c2d21ae8f9b11ffffffff004c4b4000" + }, + "0xa74915e08f0dbcd504244f2a4162ba4c2aa2f29b3c5c642182b6a622f71be99c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000001a055690d9db80000000000000000000000000000" + }, + "0xd18676f4b476c23c9d961c3de671b7c3953c37ebf7e52a58351ff111465370b9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x0bc5edc7219d272d9dedd919ce2b4726129ac02b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": { + "previousValue": "0x0000000000000000000000000000000000000000000000000001c00000025802", + "newValue": "0x0000000000000000000000000000000000000000000000000001c10000025802" + } + } + }, + "0x191c10aa4af7c30e871e70c95db0e4eb77237530": { + "label": "AaveV3Polygon.ASSETS.LINK.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000036": { + "previousValue": "0x00000000000000000000000000000000000000000000643802ee4f5ec02a5503", + "newValue": "0x0000000000000000000000000000000000000000000064366775a3a50d0816dc" + }, + "0x362ff6c57e9edddc5c568dc1d54741d6e98025f6ea18d715d638f67bcefb9ebc": { + "previousValue": "0x00000000034271f42c00f54f7d198dfa00000000000000000000000000000000", + "newValue": "0x000000000344f48930988e11ae28fb5600000000000000000000000000000000" + }, + "0xaf561f020a8f8c4f072d325aff6aad11decebb5083af314fbbf9748a44965847": { + "previousValue": "0x000000000344f464c9b3de625ae49aac0000000000000082e2f61e04a050016b", + "newValue": "0x000000000344f48930988e11ae28fb560000000000000081477d724aed2dc344" + } + } + }, + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xc6c1f2eeb875766781b69c94cb973ac6e9b00bb16318d283df0af503db0f700d": { + "previousValue": "0x00687f70e3000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687f70e3000000000003000000000000000000000000000000000000000000" + }, + "0xc6c1f2eeb875766781b69c94cb973ac6e9b00bb16318d283df0af503db0f700e": { + "previousValue": "0x000000000000000000093a8000000000000068ad956400000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068ad9564000000000000687f70e4" + } + } + }, + "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39": { + "label": "AaveV2Polygon.ASSETS.LINK.UNDERLYING, AaveV3Polygon.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x03f888f3cc2e3f8848237903c459eac76057dfba62699155b6ecb79c2bdad0b6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x503afc140bd0e1fa114e3190f0bb4edd9df67c6ea21053952603c6c53e34df17": { + "previousValue": "0x000000000000000000000000000000000000000000000494a78bd319d9110391", + "newValue": "0x00000000000000000000000000000000000000000000049647e13c2776c90391" + }, + "0x69101c4f1944917525aeec6ae16e90adcf6c92d9b7b59059977d4be8e5b70c5f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xa9f91410016967625770abe48f9303b10d3a651f0fa72aa0c9237cc3a97e8044": { + "previousValue": "0x000000000000000000000000000000000000000000005bcaa7417e7283dfcff3", + "newValue": "0x000000000000000000000000000000000000000000005bc906ec1564e627cff3" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Polygon.POOL", + "balanceDiff": null, + "stateDiff": { + "0x7106c69342d46bbeee5f28f376a6e3d96f0a8e1d092c714a8fe8243ea96d0a1b": { + "previousValue": "0x000000000000ecbfcc483a25b7135034000000000344f488974538b37c4c08ed", + "newValue": "0x000000000000ecc76891374e26a8ba77000000000344f48930988e11ae28fb56" + }, + "0x7106c69342d46bbeee5f28f376a6e3d96f0a8e1d092c714a8fe8243ea96d0a1c": { + "previousValue": "0x00000000000c323622c4a25a6df9ba4f00000000036a94edf33d6711a34ffe67", + "newValue": "0x00000000000c3268513526a93816193800000000036a94f6342d27d972bbaecc" + }, + "0x7106c69342d46bbeee5f28f376a6e3d96f0a8e1d092c714a8fe8243ea96d0a1d": { + "previousValue": "0x000000000000000000000100687f6fb0000000000000000003a2fcfbf9008d70", + "newValue": "0x000000000000000000000100687f70e4000000000000000003a2fcfbf9008d70" + }, + "0x7106c69342d46bbeee5f28f376a6e3d96f0a8e1d092c714a8fe8243ea96d0a22": { + "previousValue": "0x0000000000005bcaa72a52dd75e61b24000000000000000001e19c4061b4b4a1", + "newValue": "0x0000000000005bc906d4e9cfd82e1b24000000000000000001e63342ebf17eb6" + }, + "0xd67bf10d5c46f1e93f3434747ed13a65c3e7075a81b91f597e14e161086c084e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Polygon.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x5c07757c3f58feaa6a2f4c88e35c12775ac097e18d9544f338c73b910fa2bfca": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + "0xaa1dc356dc4b18f30c347798fd5379f3d77abc5b": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x3d2d9aa626a328c22a4ddb2ccb41f882f88b7901cddbed32b2808af468c8e00c": { + "previousValue": "0x0000000000000000000000000000000000000000000004948c67e0875542d2e4", + "newValue": "0x0000000000000000000000000000000000000000000004962cbd4994f2fad2e4" + }, + "0x73bb3189482dae72706e9b44180fd565bf209f3cd214460c14c03e52474dad20": { + "previousValue": "0x00000000000000000000000000000000000000000000141407143b4da35dd072", + "newValue": "0x00000000000000000000000000000000000000000000141266bed24005a5d072" + } + } + }, + "0xb0897686c545045afc77cf20ec7a532e3120e0f1": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x2d2a14ad46430f8107461807cd6799b2f2bf7ede621cd5a43860a2684cbdf13b": { + "previousValue": "0x00000000000000000000000000000000000000000000141669b3a22e688dd072", + "newValue": "0x000000000000000000000000000000000000000000001414c95e3920cad5d072" + }, + "0x6c791fb2bde4133dc8380d4d160265a5bf31b2a0496f13c8595f01a126cd3a94": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x77b4777fd618bebf9f1a7c5c50c6a35d199177a77091da0f01b394a50f46d7ac": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x96fc98c218a376733cd25ee57a5c9e62434a44e6b87702cabaf9a5246e667074": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xc0395c28ce2135f527539902c1335f9849a5e583881559183b03f863a5e43f5a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xcd3375697538d19c97f533ab527e8cb915e02b0446042b34cc12b5ee8eeb7863": { + "previousValue": "0x000000000000000000000000000000000000000000000070f22efeef8e2f06e2", + "newValue": "0x000000000000000000000000000000000000000000000072928467fd2be706e2" + }, + "0xeed740142ec9ca22b45078428da07e7d1df623236737c44e9d80c5aa2892be1b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xb4c212f5cd17e200019b07e6b1fdf124d35dbcf5": { + "label": "MiscPolygon.AAVE_CL_ROBOT_OPERATOR", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x3a40d559817a8708a86e904353b34e88d1af1a4ed9773a21d429b8ec0e8d53c9": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0xbc77e2380000000000000000000000000ac14cbfc6d81c633c4ba282dc9cf23e" + }, + "0xa74915e08f0dbcd504244f2a4162ba4c2aa2f29b3c5c642182b6a622f71be99b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000054714fac85b0bf627288cc3a186de81a42f1d635" + }, + "0xa74915e08f0dbcd504244f2a4162ba4c2aa2f29b3c5c642182b6a622f71be99c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x43617073204147525320496e6a6563746f720000000000000000000000000024" + } + } + }, + "0xbf08fbd52f7729753de880ace39c2d21ae8f9b11": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000000": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000008a8eea76d2395807ce7d1fc942382515469cca1" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_DeprecationOfLongTailAssets_20250715_before_AaveV3Polygon_DeprecationOfLongTailAssets_20250715_after.md b/diffs/AaveV3Polygon_DeprecationOfLongTailAssets_20250715_before_AaveV3Polygon_DeprecationOfLongTailAssets_20250715_after.md new file mode 100644 index 000000000..58967eaab --- /dev/null +++ b/diffs/AaveV3Polygon_DeprecationOfLongTailAssets_20250715_before_AaveV3Polygon_DeprecationOfLongTailAssets_20250715_after.md @@ -0,0 +1,152 @@ +## Reserve changes + +### Reserves altered + +#### EURS ([0xE111178A87A3BFf0c8d18DECBa5798827539Ae99](https://polygonscan.com/address/0xE111178A87A3BFf0c8d18DECBa5798827539Ae99)) + +| description | value before | value after | +| --- | --- | --- | +| debtCeiling | 675,000 $ [67500000] | 1 $ [100] | +| ltv | 65 % [6500] | 0 % [0] | +| reserveFactor | 20 % [2000] | 50 % [5000] | +| maxVariableBorrowRate | 59 % | 61 % | +| baseVariableBorrowRate | 0 % | 2 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=90000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=590000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=90000000000000000000000000&variableRateSlope2=500000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=20000000000000000000000000&maxVariableBorrowRate=610000000000000000000000000) | + +## Raw diff + +```json +{ + "reserves": { + "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": { + "debtCeiling": { + "from": 67500000, + "to": 100 + }, + "ltv": { + "from": 6500, + "to": 0 + }, + "reserveFactor": { + "from": 2000, + "to": 5000 + } + } + }, + "strategies": { + "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": { + "baseVariableBorrowRate": { + "from": "0", + "to": "20000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "590000000000000000000000000", + "to": "610000000000000000000000000" + } + } + }, + "raw": { + "0x1adb659ca7eaa45e42dcd257d09b963c5cfbb36f": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x56076f960980d453b5b749cb6a1c4d2e4e138b1a": { + "label": "AaveV3Polygon.ASSETS.DAI.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.LINK.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.WBTC.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.USDT.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.AAVE.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.WPOL.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.CRV.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.SUSHI.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.GHST.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.BAL.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.DPI.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.EURS.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.jEUR.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.EURA.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.miMATIC.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.stMATIC.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.MaticX.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.wstETH.INTEREST_RATE_STRATEGY, AaveV3Polygon.ASSETS.USDCn.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0xebab341f8755e41e908427903682896fb6f5295dc81509190f27a340c010d4e0": { + "previousValue": "0x0000000000000000000000000000000000000000138800000384000000001f40", + "newValue": "0x0000000000000000000000000000000000000000138800000384000000c81f40" + } + } + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x4eb4e5a6e8e7d99cfc6b20a4316cf17fcae80ee90389b4de8cfd0d3328359b40": { + "previousValue": "0x00000000001d32215ceaf8f5422a54d80000000003a7714400c22cd351284d06", + "newValue": "0x0000000000176d800f51b9eee02732120000000003a7731f907dbe50c091217f" + }, + "0x4eb4e5a6e8e7d99cfc6b20a4316cf17fcae80ee90389b4de8cfd0d3328359b41": { + "previousValue": "0x00000000003a46bfbc0956ddaa4e11370000000003fa9ee89ed0faf3f35b5885", + "newValue": "0x00000000004ad20000ff175c226a4eed0000000003faa2f24775df5a43a2ceb1" + }, + "0x4eb4e5a6e8e7d99cfc6b20a4316cf17fcae80ee90389b4de8cfd0d3328359b42": { + "previousValue": "0x000000000000000000000d0068766795000000000000000000000000000002f7", + "newValue": "0x000000000000000000000d00687682a8000000000000000000000000000002f7" + }, + "0x4eb4e5a6e8e7d99cfc6b20a4316cf17fcae80ee90389b4de8cfd0d3328359b47": { + "previousValue": "0x00000000000000000000000005a7d59e0000000000000000000000000000117a", + "newValue": "0x00000000000000000000000005a7d59e0000000000000000000000000000132d" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5d557b07776d12967914379c71a1310e917c7555": { + "label": "AaveV3Polygon.ASSETS.EURS.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0x771d2d9420432b8a4c076e6c4721e392c4d3794a": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x4eb4e5a6e8e7d99cfc6b20a4316cf17fcae80ee90389b4de8cfd0d3328359b3f": { + "previousValue": "0x1000405f7e00000000000103e80003d09000002dc6c007d0850229fe1b581964", + "newValue": "0x100000000640000000000103e80003d09000002dc6c01388850229fe1b580000" + } + } + }, + "0x794a61358d6845594f94dc1db02a252b5b4814ad": { + "label": "AaveV3Polygon.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x8145edddf43f50276641b55bd3ad95944510021e": { + "label": "AaveV3Polygon.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Polygon.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xa97684ead0e402dc232d5a977953df7ecbab3cdb": { + "label": "AaveV3Polygon.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0xb962dcd6d9f0bfb4cb2936c6c5e5c7c3f0d3c778": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0c91243f75e216cf1d80d738f653c23abf15a7e3590b83c6e4772e2ddcffe533": { + "previousValue": "0x00687682a7000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687682a7000000000003000000000000000000000000000000000000000000" + }, + "0x0c91243f75e216cf1d80d738f653c23abf15a7e3590b83c6e4772e2ddcffe534": { + "previousValue": "0x000000000000000000093a8000000000000068a4a72800000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068a4a728000000000000687682a8" + } + } + }, + "0xdf7d0e6454db638881302729f5ba99936eaab233": { + "label": "AaveV2Polygon.POOL_ADMIN, AaveV3Polygon.ACL_ADMIN, GovernanceV3Polygon.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_July2025FundingUpdate_20250721_before_AaveV3Polygon_July2025FundingUpdate_20250721_after.md b/diffs/AaveV3Polygon_July2025FundingUpdate_20250721_before_AaveV3Polygon_July2025FundingUpdate_20250721_after.md new file mode 100644 index 000000000..7c9c25539 --- /dev/null +++ b/diffs/AaveV3Polygon_July2025FundingUpdate_20250721_before_AaveV3Polygon_July2025FundingUpdate_20250721_after.md @@ -0,0 +1,112 @@ +## Raw diff + +```json +{ + "raw": { + "0x2791bca1f2de4661ed88a30c99a7a9449aa84174": { + "label": "AaveV2Polygon.ASSETS.USDC.UNDERLYING, AaveV3Polygon.ASSETS.USDC.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000017a42d3b59f1a", + "newValue": "0x00000000000000000000000000000000000000000000000000017a257d7b1d8c" + }, + "0x404c34bd0414065c85c501e22c28753c400c01908285c9c107c0af3f1e3ecd1d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000001d563a818e", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5f68812dcd82c1e957747b26a90603dd5e99daf1ec7fd57c73b20605b8654764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xeed16813d2f65d55dfcd646492ebe0107b86489aa89e1ee58b4c544f69fec4ae": { + "previousValue": "0x006881266e000000000002000000000000000000000000000000000000000000", + "newValue": "0x006881266e000000000003000000000000000000000000000000000000000000" + }, + "0xeed16813d2f65d55dfcd646492ebe0107b86489aa89e1ee58b4c544f69fec4af": { + "previousValue": "0x000000000000000000093a8000000000000068af4aef00000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068af4aef0000000000006881266f" + } + } + }, + "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39": { + "label": "AaveV2Polygon.ASSETS.LINK.UNDERLYING, AaveV3Polygon.ASSETS.LINK.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x0000000000000000000000000000000000000000000152865a663e07f7489d13", + "newValue": "0x0000000000000000000000000000000000000000000152041cddae2960c45b0f" + }, + "0x404c34bd0414065c85c501e22c28753c400c01908285c9c107c0af3f1e3ecd1d": { + "previousValue": "0x0000000000000000000000000000000000000000000000823d888fde96844204", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5f68812dcd82c1e957747b26a90603dd5e99daf1ec7fd57c73b20605b8654764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619": { + "label": "AaveV2Polygon.ASSETS.WETH.UNDERLYING, AaveV3Polygon.ASSETS.WETH.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000184e2d9d7c4e8eed721c", + "newValue": "0x00000000000000000000000000000000000000000000184daf2ba36736c4ba85" + }, + "0x404c34bd0414065c85c501e22c28753c400c01908285c9c107c0af3f1e3ecd1d": { + "previousValue": "0x0000000000000000000000000000000000000000000000007e71d8e75828b797", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5f68812dcd82c1e957747b26a90603dd5e99daf1ec7fd57c73b20605b8654764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063": { + "label": "AaveV2Polygon.ASSETS.DAI.UNDERLYING, AaveV3Polygon.ASSETS.DAI.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000142fc2dfa38301b98f0cc95", + "newValue": "0x00000000000000000000000000000000000000000142f48e5d3ab8e3c02712e7" + }, + "0x404c34bd0414065c85c501e22c28753c400c01908285c9c107c0af3f1e3ecd1d": { + "previousValue": "0x00000000000000000000000000000000000000000000079f9cfd7737d8c9b9ae", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5f68812dcd82c1e957747b26a90603dd5e99daf1ec7fd57c73b20605b8654764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "0xc2132d05d31c914a87c6611c10748aeb04b58e8f": { + "label": "AaveV2Polygon.ASSETS.USDT.UNDERLYING, AaveV3Polygon.ASSETS.USDT.UNDERLYING", + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000002": { + "previousValue": "0x00000000000000000000000000000000000000000000000000049391da7885a1", + "newValue": "0x0000000000000000000000000000000000000000000000000004936aad2b8c2c" + }, + "0x404c34bd0414065c85c501e22c28753c400c01908285c9c107c0af3f1e3ecd1d": { + "previousValue": "0x000000000000000000000000000000000000000000000000000000272d4cf975", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x5f68812dcd82c1e957747b26a90603dd5e99daf1ec7fd57c73b20605b8654764": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..1a7fba424 --- /dev/null +++ b/diffs/AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Polygon_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x401b5d0294e23637c18fcc38b1bca814cda2637c": { + "label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x934d131d2cde113c982d8c5aa4cd3a36418695634bde518aa36ccc61a54277a4": { + "previousValue": "0x006842cf71000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf71000000000003000000000000000000000000000000000000000000" + }, + "0x934d131d2cde113c982d8c5aa4cd3a36418695634bde518aa36ccc61a54277a5": { + "previousValue": "0x000000000000000000093a800000000000006870f3f200000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f3f20000000000006842cf72" + } + } + }, + "0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": { + "label": "AaveV3Polygon.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x30217e1e126b151868a81bb73ea2ec652957cd08e8324b1bb6b57db061292dc0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x89df10509f79825d7b5e5d12185ea936351dc2f875de4256776ac2f91a209d88": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0x8a8628e47ed2df807576d5cc3dded64b4d6aa24aa965a2bd37bf324aa604ed88": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0xe203e6e3ff9ddd5a726feb96317a98834415bce9da4f720b3745f1ce7012acfb": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..e78077bb7 --- /dev/null +++ b/diffs/AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Scroll_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,44 @@ +## Raw diff + +```json +{ + "raw": { + "0x6b6b41c0f8c223715f712be83cec3c37bbfdc3fe": { + "label": "GovernanceV3Scroll.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x47bd603b2672149df187087e649a417345c22ebc601af252344b2472b5a5fea8": { + "previousValue": "0x006842cf80000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf80000000000003000000000000000000000000000000000000000000" + }, + "0x47bd603b2672149df187087e649a417345c22ebc601af252344b2472b5a5fea9": { + "previousValue": "0x000000000000000000093a800000000000006870f40100000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f4010000000000006842cf81" + } + } + }, + "0x7633f981d87dc6307227de9383d2ce7243158081": { + "label": "AaveV3Scroll.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x858e3544d13d16583f5d843df46d14890815496b2014a09dec3ac87e17ae7a75": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xb4ad4148b7048f56c01952346efa6f825f4b3ae54361ef270ff9260f32d0d690": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xd27d83f9e78f5a2a93a8c4c686fa8e1463273c4985966a5c90b277d3a1282084": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "0xfa9a49b8b59d947f3c6b0e0d1aba4b3f5b4cea43624554b0b20e6a4f511942e5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..4b6fbc9b2 --- /dev/null +++ b/diffs/AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3Sonic_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,36 @@ +## Raw diff + +```json +{ + "raw": { + "0x0846c28dd54dea4fd7fb31bcc5eb81673d68c695": { + "label": "GovernanceV3Sonic.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0x83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465": { + "previousValue": "0x006842cf89000000000002000000000000000000000000000000000000000000", + "newValue": "0x006842cf89000000000003000000000000000000000000000000000000000000" + }, + "0x83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772466": { + "previousValue": "0x000000000000000000093a800000000000006870f40a00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006870f40a0000000000006842cf8a" + } + } + }, + "0x3a790a47c4d531fd333fad24f70b0ccb521b3b5a": { + "label": "AaveV3Sonic.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": { + "0x094c567b6e0a3c814f44100b259b1f2a7dd78957786682e88f112b8fadad4c4d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x15f378484649f8a58fcedf083316b6d012da50ada0b680e712d8c0f7344227f1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Sonic_StSLoopIncentiveProgram_20250711_before_AaveV3Sonic_StSLoopIncentiveProgram_20250711_after.md b/diffs/AaveV3Sonic_StSLoopIncentiveProgram_20250711_before_AaveV3Sonic_StSLoopIncentiveProgram_20250711_after.md new file mode 100644 index 000000000..6f061d11d --- /dev/null +++ b/diffs/AaveV3Sonic_StSLoopIncentiveProgram_20250711_before_AaveV3Sonic_StSLoopIncentiveProgram_20250711_after.md @@ -0,0 +1,32 @@ +## Raw diff + +```json +{ + "raw": { + "0x0846c28dd54dea4fd7fb31bcc5eb81673d68c695": { + "label": "GovernanceV3Sonic.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": { + "0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3": { + "previousValue": "0x0068711f0c000000000002000000000000000000000000000000000000000000", + "newValue": "0x0068711f0c000000000003000000000000000000000000000000000000000000" + }, + "0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f4": { + "previousValue": "0x000000000000000000093a80000000000000689f438d00000000000000000000", + "newValue": "0x000000000000000000093a80000000000000689f438d00000000000068711f0d" + } + } + }, + "0x6c5e14a212c1c3e4baf6f871ac9b1a969918c131": { + "label": "AaveV3Sonic.ASSETS.wS.A_TOKEN", + "balanceDiff": null, + "stateDiff": { + "0xd0f4d7cf6e140df926b66d5c2f354d8fa4eff74dcb921b8c0c79f9d743561d44": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000878678326eac9000000" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_after.md b/diffs/AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_after.md new file mode 100644 index 000000000..e04361435 --- /dev/null +++ b/diffs/AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_before_AaveV3Sonic_WSAndBTCBInterestRateCurveOptimization_20250722_after.md @@ -0,0 +1,133 @@ +## Reserve changes + +### Reserves altered + +#### wS ([0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38](https://sonicscan.org//address/0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 45 % | 80 % | +| maxVariableBorrowRate | 307 % | 84 % | +| variableRateSlope1 | 7 % | 4 % | +| variableRateSlope2 | 300 % | 80 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=70000000000000000000000000&variableRateSlope2=3000000000000000000000000000&optimalUsageRatio=450000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=3070000000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=40000000000000000000000000&variableRateSlope2=800000000000000000000000000&optimalUsageRatio=800000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=840000000000000000000000000) | + +## Raw diff + +```json +{ + "strategies": { + "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38": { + "maxVariableBorrowRate": { + "from": "3070000000000000000000000000", + "to": "840000000000000000000000000" + }, + "optimalUsageRatio": { + "from": "450000000000000000000000000", + "to": "800000000000000000000000000" + }, + "variableRateSlope1": { + "from": "70000000000000000000000000", + "to": "40000000000000000000000000" + }, + "variableRateSlope2": { + "from": "3000000000000000000000000000", + "to": "800000000000000000000000000" + } + } + }, + "raw": { + "0x0846c28dd54dea4fd7fb31bcc5eb81673d68c695": { + "label": "GovernanceV3Sonic.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x3a790a47c4d531fd333fad24f70b0ccb521b3b5a": { + "label": "AaveV3Sonic.ACL_MANAGER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x50c70feb95abc1a92fc30b9acc41bd349e5de2f0": { + "label": "AaveV3Sonic.POOL_CONFIGURATOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5362dbb1e601abf3a4c14c22ffeda64042e5eaa3": { + "label": "AaveV3Sonic.POOL", + "balanceDiff": null, + "stateDiff": {} + }, + "0x564c42578a1b270eae16c25da39d901245881d1f": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x1c6109d2bbfbdadfc462a8d70dd8be07bf59af5d98a33599fd824b82f078f1ae": { + "previousValue": "0x0000000000051631432439dd4eaf547800000000033ea04800f63e5af2fe2e09", + "newValue": "0x000000000001a28fd6504704dd43f51000000000033ea0482c70b7bac0e8faf3" + }, + "0x1c6109d2bbfbdadfc462a8d70dd8be07bf59af5d98a33599fd824b82f078f1af": { + "previousValue": "0x00000000001bbfce1d34aabcaf05318d00000000034815f69de0b0efc4dfac70", + "newValue": "0x000000000008eb5daff4e7bd57b7ec1900000000034815f78dc3e50d864e8c1f" + }, + "0x1c6109d2bbfbdadfc462a8d70dd8be07bf59af5d98a33599fd824b82f078f1b0": { + "previousValue": "0x000000000000000000000200687fc8f400000000000000000000000000000000", + "newValue": "0x000000000000000000000200687fc90400000000000000000000000000000000" + }, + "0x1c6109d2bbfbdadfc462a8d70dd8be07bf59af5d98a33599fd824b82f078f1b5": { + "previousValue": "0x0000000000612ad313f1e5495d1fde2a000000000000000c650e2944135e2dc8", + "newValue": "0x0000000000612ad313f1e5495d1fde2a000000000000000c6631e59fc7efff67" + } + } + }, + "0x5793fe4de34532f162b4e207af872729880ec2b6": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0x5c2e738f6e27bce0f7558051bf90605dd6176900": { + "label": "AaveV3Sonic.POOL_ADDRESSES_PROVIDER", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7b62461a3570c6ac8a9f8330421576e417b71ee7": { + "label": "AaveV3Sonic.ACL_ADMIN, GovernanceV3Sonic.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0xc47692016d70496e2e44531aaa8511aa07d4d185": { + "label": null, + "balanceDiff": null, + "stateDiff": {} + }, + "0xdff435bccf782f11187d3a4454d96702ed78e092": { + "label": "AaveV3Sonic.ASSETS.WETH.INTEREST_RATE_STRATEGY, AaveV3Sonic.ASSETS.USDC.INTEREST_RATE_STRATEGY, AaveV3Sonic.ASSETS.wS.INTEREST_RATE_STRATEGY, AaveV3Sonic.ASSETS.stS.INTEREST_RATE_STRATEGY", + "balanceDiff": null, + "stateDiff": { + "0x6c25d4659e21d12be9149fe56708ccaa64adf240a47e26b06a5deef01e2dddf2": { + "previousValue": "0x00000000000000000000000000000000000000007530000002bc000000001194", + "newValue": "0x00000000000000000000000000000000000000001f4000000190000000001f40" + } + } + }, + "0xf6089b790fbf8f4812a79a31cfabeb00b06ba7bd": { + "label": "AaveV3Sonic.ASSETS.wS.V_TOKEN", + "balanceDiff": null, + "stateDiff": {} + }, + "0xff1137243698caa18ee364cc966cf0e02a4e6327": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xf2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2": { + "previousValue": "0x00687fc903000000000002000000000000000000000000000000000000000000", + "newValue": "0x00687fc903000000000003000000000000000000000000000000000000000000" + }, + "0xf2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd3": { + "previousValue": "0x000000000000000000093a8000000000000068aded8400000000000000000000", + "newValue": "0x000000000000000000093a8000000000000068aded84000000000000687fc904" + } + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_after.md b/diffs/AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_after.md new file mode 100644 index 000000000..feec9246c --- /dev/null +++ b/diffs/AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_before_AaveV3ZkSync_PendlePTDiscountRateRiskOracleActivation_20250606_after.md @@ -0,0 +1,7 @@ +## Raw diff + +```json +{ + "raw": {} +} +``` \ No newline at end of file diff --git a/foundry.lock b/foundry.lock new file mode 100644 index 000000000..69d92c261 --- /dev/null +++ b/foundry.lock @@ -0,0 +1,8 @@ +{ + "lib/aave-helpers": { + "branch": { + "name": "main", + "rev": "f6c8d34ed0d956d0b1b61b25d29278c59f7642eb" + } + } +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 3dedbfade..8655c7c80 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,7 +2,7 @@ src = 'src' test = 'tests' script = 'scripts' -solc = '0.8.22' +solc = '0.8.27' optimizer = true optimizer_runs = 200 out = 'out' @@ -14,18 +14,20 @@ fs_permissions = [ { access = "write", path = "./reports" }, { access = "read", path = "./zkout" }, ] -evm_version = 'london' +evm_version = 'shanghai' +cache_path = 'cache/shanghai' [profile.zksync] src = 'zksync' test = 'zksync' libs = ['lib'] -solc = '0.8.22' +solc = '0.8.27' optimizer = true optimizer_runs = 200 fs_permissions = [{ access = "write", path = "./reports" }] ffi = true evm_version = 'shanghai' +cache_path = 'cache/shanghai' [profile.zksync.zksync] bytecode_hash = 'none' @@ -36,9 +38,15 @@ zksolc = '1.5.13' [profile.test] evm_version = 'cancun' +cache_path = 'cache/cancun' [profile.deploy] -evm_version = 'london' # due to linea +evm_version = 'shanghai' +cache_path = 'cache/shanghai' + +[profile.linea] +evm_version = 'london' +cache_path = 'cache/london' [rpc_endpoints] mainnet = "${RPC_MAINNET}" @@ -60,4 +68,4 @@ celo = "${RPC_CELO}" sonic = "${RPC_SONIC}" soneium = "${RPC_SONEIUM}" -# See more config options https://github.com/gakonst/foundry/tree/master/config +# See more config options https://github.com/foundry-rs/foundry/tree/master/crates/config diff --git a/generator/cli.ts b/generator/cli.ts index f12684d46..4a90f5e56 100644 --- a/generator/cli.ts +++ b/generator/cli.ts @@ -21,6 +21,7 @@ import {rateUpdatesV2, rateUpdatesV3} from './features/rateUpdates'; import {collateralsUpdates} from './features/collateralsUpdates'; import {borrowsUpdates} from './features/borrowsUpdates'; import {eModeUpdates} from './features/eModesUpdates'; +import {eModeCreations} from './features/eModesCreation'; import {eModeAssets} from './features/eModesAssets'; import {priceFeedsUpdates} from './features/priceFeedsUpdates'; import {freezeUpdates} from './features/freeze'; @@ -77,6 +78,7 @@ const FEATURE_MODULES_V3 = [ borrowsUpdates, flashBorrower, priceFeedsUpdates, + eModeCreations, eModeUpdates, eModeAssets, assetListing, diff --git a/generator/features/__snapshots__/assetListing.spec.ts.snap b/generator/features/__snapshots__/assetListing.spec.ts.snap index 28fcbce4d..bf894ff8f 100644 --- a/generator/features/__snapshots__/assetListing.spec.ts.snap +++ b/generator/features/__snapshots__/assetListing.spec.ts.snap @@ -115,6 +115,7 @@ import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/ import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; + /** * @title test * @author test @@ -209,6 +210,7 @@ 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_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -244,10 +246,14 @@ contract CreateProposal is EthereumScript { 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_Test_20231023).creationCode); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_Test_20231023).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); @@ -379,6 +385,7 @@ import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/ import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; + /** * @title test * @author test @@ -473,6 +480,7 @@ 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_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -508,10 +516,14 @@ contract CreateProposal is EthereumScript { 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_Test_20231023).creationCode); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_Test_20231023).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); diff --git a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap index cae80704c..7191769e8 100644 --- a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap +++ b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap @@ -58,6 +58,7 @@ pragma solidity ^0.8.0; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; + /** * @title test * @author test @@ -121,6 +122,7 @@ 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_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -156,10 +158,14 @@ contract CreateProposal is EthereumScript { 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_Test_20231023).creationCode); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_Test_20231023).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); diff --git a/generator/features/__snapshots__/rateUpdates.spec.ts.snap b/generator/features/__snapshots__/rateUpdates.spec.ts.snap index d3e41c1d2..7a7bb887c 100644 --- a/generator/features/__snapshots__/rateUpdates.spec.ts.snap +++ b/generator/features/__snapshots__/rateUpdates.spec.ts.snap @@ -114,6 +114,7 @@ import {AaveV2PayloadEthereumAMM} from 'aave-helpers/src/v2-config-engine/AaveV2 import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; + /** * @title test * @author test @@ -227,6 +228,7 @@ 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 {AaveV2EthereumAMM_Test_20231023} from './AaveV2EthereumAMM_Test_20231023.sol'; @@ -262,12 +264,14 @@ contract CreateProposal is EthereumScript { 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(AaveV2EthereumAMM_Test_20231023).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2EthereumAMM_Test_20231023).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); diff --git a/generator/features/eModesCreation.ts b/generator/features/eModesCreation.ts new file mode 100644 index 000000000..d6bedac1c --- /dev/null +++ b/generator/features/eModesCreation.ts @@ -0,0 +1,120 @@ +import {CodeArtifact, FEATURE, FeatureModule, PoolIdentifier} from '../types'; +import {EModeCategoryCreation, EModeCategoryPartial} from './types'; +import {confirm} from '@inquirer/prompts'; +import {stringPrompt} from '../prompts/stringPrompt'; +import {percentPrompt, translateJsPercentToSol} from '../prompts/percentPrompt'; +import { + assetsSelectPrompt, + translateAssetToAssetLibUnderlying, +} from '../prompts/assetsSelectPrompt'; +import {pascalCase} from '../common'; + +export async function fetchEmodeCategoryData( + required?: T, +): Promise { + return { + ltv: await percentPrompt({ + message: 'ltv', + required, + }), + liqThreshold: await percentPrompt({ + message: 'liqThreshold', + required, + }), + liqBonus: await percentPrompt({ + message: 'liqBonus', + required, + }), + label: await stringPrompt({ + message: 'label', + required, + }), + }; +} + +async function fetchEmodeCategoryCreation(pool: PoolIdentifier): Promise { + const eModeData = await fetchEmodeCategoryData(true); + const collateralAssets = await assetsSelectPrompt({ + message: 'Select the assets you want to add as collateral', + pool, + }); + const borrowableAssets = await assetsSelectPrompt({ + message: 'Select the assets you want to add as borrowable', + pool, + }); + return { + ...eModeData, + collateralAssets, + borrowableAssets, + }; +} + +async function subCli(pool: PoolIdentifier) { + const answers: EmodeCreations = []; + let more: boolean = true; + console.log(`Fetching information for Emode creation on ${pool}`); + + while (more) { + answers.push(await fetchEmodeCategoryCreation(pool)); + more = await confirm({message: 'Do you want to add another emode category?', default: false}); + } + + return answers; +} + +type EmodeCreations = EModeCategoryCreation[]; + +export const eModeCreations: FeatureModule = { + value: FEATURE.EMODES_CREATION, + description: 'eModeCategoriesCreation (adding eModes)', + async cli({pool}) { + const response: EmodeCreations = await subCli(pool); + return response; + }, + build({pool, cfg}) { + const response: CodeArtifact = { + code: { + fn: [ + `function eModeCategoryCreations() public pure override returns (IAaveV3ConfigEngine.EModeCategoryCreation[] memory) { + IAaveV3ConfigEngine.EModeCategoryCreation[] memory eModeCreations = new IAaveV3ConfigEngine.EModeCategoryCreation[](${ + cfg.length + }); + + ${cfg + .map( + (cfg, ix) => ` + address[] memory collateralAssets_${pascalCase(cfg.label)} = new address[](${cfg.collateralAssets.length}); + address[] memory borrowableAssets_${pascalCase(cfg.label)} = new address[](${cfg.borrowableAssets.length}); + + ${cfg.collateralAssets + .map( + (asset, i) => + `collateralAssets_${pascalCase(cfg.label)}[${i}] = ${translateAssetToAssetLibUnderlying(asset, pool)};`, + ) + .join('\n')} + ${cfg.borrowableAssets + .map( + (asset, i) => + `borrowableAssets_${pascalCase(cfg.label)}[${i}] = ${translateAssetToAssetLibUnderlying(asset, pool)};`, + ) + .join('\n')} + + eModeCreations[${ix}] = IAaveV3ConfigEngine.EModeCategoryCreation({ + ltv: ${translateJsPercentToSol(cfg.ltv)}, + liqThreshold: ${translateJsPercentToSol(cfg.liqThreshold)}, + liqBonus: ${translateJsPercentToSol(cfg.liqBonus)}, + label: '${cfg.label}', + collaterals: collateralAssets_${pascalCase(cfg.label)}, + borrowables: borrowableAssets_${pascalCase(cfg.label)} + });`, + ) + .join('\n')} + + return eModeCreations; + }`, + ], + }, + }; + return response; + }, +}; diff --git a/generator/features/eModesUpdates.ts b/generator/features/eModesUpdates.ts index c3817b632..c66919819 100644 --- a/generator/features/eModesUpdates.ts +++ b/generator/features/eModesUpdates.ts @@ -1,70 +1,32 @@ import {CodeArtifact, FEATURE, FeatureModule, PoolIdentifier} from '../types'; import {eModesSelect} from '../prompts'; import {EModeCategoryUpdate} from './types'; -import {confirm} from '@inquirer/prompts'; -import {translateJsAddressToSol} from '../prompts/addressPrompt'; -import {stringOrKeepCurrent, stringPrompt} from '../prompts/stringPrompt'; -import {getEModes} from '../common'; -import {percentPrompt, translateJsPercentToSol} from '../prompts/percentPrompt'; +import {stringOrKeepCurrent} from '../prompts/stringPrompt'; +import {translateJsPercentToSol} from '../prompts/percentPrompt'; +import {fetchEmodeCategoryData} from './eModesCreation'; async function fetchEmodeCategoryUpdate( eModeCategory: string | number, required?: T, ): Promise { + const eModeData = await fetchEmodeCategoryData(required); return { eModeCategory, - ltv: await percentPrompt({ - message: 'ltv', - required, - }), - liqThreshold: await percentPrompt({ - message: 'liqThreshold', - required, - }), - liqBonus: await percentPrompt({ - message: 'liqBonus', - required, - }), - label: await stringPrompt({ - message: 'label', - required, - }), + ...eModeData, }; } async function subCli(pool: PoolIdentifier) { const answers: EmodeUpdates = []; - - const shouldAddNewCategory = await confirm({ - message: 'Do you wish to add a new emode category?', - default: false, - }); - if (shouldAddNewCategory) { - let more: boolean = true; - const eModes = getEModes(pool as any); - let highestEmode = Object.values(eModes).length > 0 ? Math.max(...eModes.map((e) => e.id)) : 0; - - while (more) { - answers.push(await fetchEmodeCategoryUpdate(++highestEmode, true)); - more = await confirm({message: 'Do you want to add another emode category?', default: false}); - } - } - - const shouldAmendCategory = await confirm({ - message: 'Do you wish to amend existing emode category?', - default: false, + const eModeCategories = await eModesSelect({ + message: 'Select the eModes you want to amend', + pool, }); - if (shouldAmendCategory) { - const eModeCategories = await eModesSelect({ - message: 'Select the eModes you want to amend', - pool, - }); - if (eModeCategories) { - for (const eModeCategory of eModeCategories) { - console.log(`collecting info for ${eModeCategory}`); - answers.push(await fetchEmodeCategoryUpdate(eModeCategory)); - } + if (eModeCategories) { + for (const eModeCategory of eModeCategories) { + console.log(`collecting info for ${eModeCategory}`); + answers.push(await fetchEmodeCategoryUpdate(eModeCategory)); } } @@ -75,7 +37,7 @@ type EmodeUpdates = EModeCategoryUpdate[]; export const eModeUpdates: FeatureModule = { value: FEATURE.EMODES_UPDATES, - description: 'eModeCategoriesUpdates (altering/adding eModes)', + description: 'eModeCategoriesUpdates (altering eModes)', async cli({pool}) { const response: EmodeUpdates = await subCli(pool); return response; diff --git a/generator/features/types.ts b/generator/features/types.ts index 85348e36b..3decede74 100644 --- a/generator/features/types.ts +++ b/generator/features/types.ts @@ -53,16 +53,23 @@ export interface AssetEModeUpdatePartial { export interface AssetEModeUpdate extends AssetEModeUpdatePartial, AssetSelector {} -export interface EModeCategoryUpdate { - // library accessor or new id - eModeCategory: string | number; +export interface EModeCategoryPartial { ltv: NumberInputValues; liqThreshold: NumberInputValues; liqBonus: NumberInputValues; - priceSource?: Hex | ''; label: string; } +export interface EModeCategoryUpdate extends EModeCategoryPartial { + // library accessor or new id + eModeCategory: string | number; +} + +export interface EModeCategoryCreation extends EModeCategoryPartial { + borrowableAssets: string[]; + collateralAssets: string[]; +} + export interface RateStrategyParams { optimalUtilizationRate: string; baseVariableBorrowRate: string; diff --git a/generator/templates/script.template.ts b/generator/templates/script.template.ts index 96efa5c8c..dd1807e15 100644 --- a/generator/templates/script.template.ts +++ b/generator/templates/script.template.ts @@ -94,7 +94,7 @@ contract CreateProposal is EthereumScript { // compose actions for validation ${Object.keys(poolsToChainsMap) .map((chain, ix) => { - let template = `IPayloadsControllerCore.ExecutionAction[] memory actions${chain} = new IPayloadsControllerCore.ExecutionAction[](${poolsToChainsMap[chain].length});\n`; + let template = `{\nIPayloadsControllerCore.ExecutionAction[] memory actions${chain} = new IPayloadsControllerCore.ExecutionAction[](${poolsToChainsMap[chain].length});\n`; template += poolsToChainsMap[chain] .map(({contractName, pool}, ix) => { return pool == 'AaveV3ZkSync' @@ -104,7 +104,7 @@ contract CreateProposal is EthereumScript { .join('\n'); template += `payloads[${ix}] = GovV3Helpers.build${ chain == 'Ethereum' ? 'Mainnet' : chain - }Payload(vm, actions${chain});\n`; + }Payload(vm, actions${chain});\n}\n`; return template; }) .join('\n')} diff --git a/generator/types.ts b/generator/types.ts index 36f34ca3a..60b2a36b5 100644 --- a/generator/types.ts +++ b/generator/types.ts @@ -2,7 +2,6 @@ import * as addressBook from '@bgd-labs/aave-address-book'; import { AssetEModeUpdate, BorrowUpdate, - BorrowUpdatePartial, CapsUpdate, CollateralUpdate, EModeCategoryUpdate, @@ -12,6 +11,7 @@ import { RateStrategyUpdate, FreezeUpdate, EmissionUpdate, + EModeCategoryCreation, } from './features/types'; import {FlashBorrower} from './features/flashBorrower'; @@ -88,6 +88,7 @@ export enum FEATURE { COLLATERALS_UPDATE = 'COLLATERALS_UPDATE', EMODES_ASSETS = 'EMODES_ASSETS', EMODES_UPDATES = 'EMODES_UPDATES', + EMODES_CREATION = 'EMODES_CREATION', FLASH_BORROWER = 'FLASH_BORROWER', PRICE_FEEDS_UPDATE = 'PRICE_FEEDS_UPDATE', RATE_UPDATE_V3 = 'RATE_UPDATE_V3', @@ -136,6 +137,7 @@ export interface PoolConfig { [FEATURE.CAPS_UPDATE]?: CapsUpdate[]; [FEATURE.COLLATERALS_UPDATE]?: CollateralUpdate[]; [FEATURE.EMODES_ASSETS]?: AssetEModeUpdate[]; + [FEATURE.EMODES_CREATION]?: EModeCategoryCreation[]; [FEATURE.EMODES_UPDATES]?: EModeCategoryUpdate[]; [FEATURE.FLASH_BORROWER]?: FlashBorrower; [FEATURE.PRICE_FEEDS_UPDATE]?: PriceFeedUpdate[]; diff --git a/generator/utils/importsResolver.ts b/generator/utils/importsResolver.ts index 79066bd5b..b38790312 100644 --- a/generator/utils/importsResolver.ts +++ b/generator/utils/importsResolver.ts @@ -3,6 +3,8 @@ * Therefore instead of maintaining imports, we just extract them from the generated code instead. */ +import {POOLS} from '../types'; + const GovernanceImports = [ 'GovV3Helpers', 'IPayloadsControllerCore', @@ -19,7 +21,7 @@ function generateAddressBookImports(code: string) { let root = ''; // lookbehind for I to not match interfaces like IAaveV3ConfigEngine const addressBookMatch = code.match(/(? -More detailed on-chain code diffs can be found below: - -- Ethereum V3 Core: - - - [CURRENT_SDAI_NEW_SDAI](https://contract-diff.swiss-knife.xyz/?contractOld=0x29081f7aB5a644716EfcDC10D5c926c5fEe9F72B&contractNew=0xf83B85205241c3BCCA0a09D32FaE65c16e0CF236&chainIdOld=1&chainIdNew=1): Big diff as feed changed from non-capo to capo - - [CURRENT_USDS_NEW_USDS](https://contract-diff.swiss-knife.xyz/?contractOld=0x4F01b76391A05d32B20FA2d05dD5963eE8db20E6&contractNew=0x94C7FD62fd0506e71d8142E9D36687fC72A86B02&chainIdOld=1&chainIdNew=1): Only unrelated dependency changes - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x736bF902680e68989886e9807CD7Db4B3E015d3C&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x260326c220E469358846b187eE53328303Efe19C&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x5c66322CA59bB61e867B28195576DbD8dA4b08dE&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_DAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xaEb897E1Dc6BbdceD3B9D551C71a8cf172F27AC4&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_LUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xEbb721daf3DA9f1b3dcEc590cDf648137172d7CB&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_LUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x9eCdfaCca946614cc32aF63F3DBe50959244F3af&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_FRAX_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xeF50f8DC65402c3019586bc8725fCD0b99B8AAd7&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_FRAX_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x45D270263BBee500CF8adcf2AbC0aC227097b036&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_CRVUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x9Dc30dc58c72f5B669aEa01d02A2e4da194eE893&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_CRVUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x02AeE5b225366302339748951E1a924617b8814F&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_PYUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x36964C0579D02E0a5AaAb89E24Cf8d7CDF3549EE&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_PYUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - -- Ethereum V3 Prime: - - - [CURRENT_USDS_NEW_USDS](https://contract-diff.swiss-knife.xyz/?contractOld=0x4F01b76391A05d32B20FA2d05dD5963eE8db20E6&contractNew=0x94C7FD62fd0506e71d8142E9D36687fC72A86B02&chainIdOld=1&chainIdNew=1): Only unrelated dependency changes - -- Ethereum V3 EtherFi: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x736bF902680e68989886e9807CD7Db4B3E015d3C&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_PYUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x36964C0579D02E0a5AaAb89E24Cf8d7CDF3549EE&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_PYUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - - [NEW_FRAX_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xeF50f8DC65402c3019586bc8725fCD0b99B8AAd7&contractNew=0xB6557F02F0a5dA7b9D3C2d979cc19e00e756F6dA&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_FRAX_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x45D270263BBee500CF8adcf2AbC0aC227097b036&contractNew=0x736bF902680e68989886e9807CD7Db4B3E015d3C&chainIdOld=1&chainIdNew=1): No diff - -- Ethereum V2: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x9f2817536Cfd48BF59243d9D8802a5670F5Be05d&contractNew=0x0B9a09cc52afc0d38ACcbd649aca1Da299d34454&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_USDT_NEW_USDT](https://contract-diff.swiss-knife.xyz/?contractOld=0xEfF57B0c8987eea8C491bdDD2F64c1c21297Cf74&contractNew=0xCB45B5c861a6468145b1720A620C38f55f736B74&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_DAI_NEW_DAI](https://contract-diff.swiss-knife.xyz/?contractOld=0xd486FE27AAB0b3CAd1462D767292dd7a84F06E58&contractNew=0x53a7856Cb3092E9c7C2c50e05E5b24462B7B9698&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_FRAX_NEW_FRAX](https://contract-diff.swiss-knife.xyz/?contractOld=0x1f7e2ccd6702a5c587160390A52111aF6020ac92&contractNew=0xfD4A67F3c42CCA8ab4De6fba35dc11ffc87EE65e&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_LUSD_NEW_LUSD](https://contract-diff.swiss-knife.xyz/?contractOld=0x3a1b874ec865c466046cf131516d26Cc228dF0b3&contractNew=0xd44d9a2E4643d55c1FA503C01a6cbB874a48Ae2E&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_USDP_NEW_USDP](https://contract-diff.swiss-knife.xyz/?contractOld=0x776292E6eb3eD2D28C0CFa77BaB9378A771424Be&contractNew=0x09e57964e9F314c61aA3614f9DdE037779Fc9ff1&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_SUSD_NEW_SUSD](https://contract-diff.swiss-knife.xyz/?contractOld=0x00753D870Ceda60b38A9efeb47a724160BD8A749&contractNew=0xC3c79aa824373c793E60901428e11884BFeD83Ed&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_BUSD_NEW_BUSD](https://contract-diff.swiss-knife.xyz/?contractOld=0x378E959C0eCBbA793217913cE1D8745f6d6B7aC7&contractNew=0x190be7269f53b4C3d8057b8c7a058A750ded1356&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_TUSD_NEW_TUSD](https://contract-diff.swiss-knife.xyz/?contractOld=0x65f05c3bC078bf24EdeaCFD48D6312c103AC4a61&contractNew=0x34A99cE5B513Baa1e27af7eED8E9E190e0F92ce1&chainIdOld=1&chainIdNew=1): No diff - - [CURRENT_UST_NEW_UST](https://contract-diff.swiss-knife.xyz/?contractOld=0x51d08b4912d33d051b57d784c7CAfC0cD42c0f45&contractNew=0x774a7BC8b395A3F9879197D21cF6e7c6a2639937&chainIdOld=1&chainIdNew=1): No diff - -- Polygon V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb&contractNew=0x31Ebeb03223AaC82C8EB24C77624Ea40F4D849Fb&chainIdOld=137&chainIdNew=137): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x01Aba1Fe7D72a3490bEef7CD0C09e1Ba2dD88D83&contractNew=0x31Ebeb03223AaC82C8EB24C77624Ea40F4D849Fb&chainIdOld=137&chainIdNew=137): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xaA574f4f6E124E77a7a1B5Ed91c8b407000A7730&contractNew=0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb&chainIdOld=137&chainIdNew=137): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xa1913Df228db08F02F3F3Dc0f397Af3A2d2f96A1&contractNew=0x31Ebeb03223AaC82C8EB24C77624Ea40F4D849Fb&chainIdOld=137&chainIdNew=137): No diff - - [CURRENT_DAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xF86577E7d27Ed35b85A7645c58bAaA64453fe32B&contractNew=0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb&chainIdOld=137&chainIdNew=137): No diff - - [NEW_MIMATIC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x1e2Ba4725c6847dC8304466c4eA25A872A7D43a8&contractNew=0x31Ebeb03223AaC82C8EB24C77624Ea40F4D849Fb&chainIdOld=137&chainIdNew=137): No diff - - [CURRENT_MIMATIC_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x4ae2Ab1af7e3b0092dbF3A4B20ec3de8fC834873&contractNew=0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb&chainIdOld=137&chainIdNew=137): No diff - -- Polygon V2: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xB611AA5E98112C7c3711Ca3a5187dC025B83C8e4&contractNew=0xeAa310d63670b8C36699cE53E3e926b23355F3df&chainIdOld=137&chainIdNew=137): No diff - - [CURRENT_USDT_NEW_USDT](https://contract-diff.swiss-knife.xyz/?contractOld=0xf840c80932908EF206056dF0882bC595e7150607&contractNew=0xf44Fee6877F2f1a0b84c8bC49ff4Ec35DF089Ea0&chainIdOld=137&chainIdNew=137): No diff - - [CURRENT_DAI_NEW_DAI](https://contract-diff.swiss-knife.xyz/?contractOld=0x08EDd9E1DF3b0b8498864C60a2FD6cDb13148885&contractNew=0xC368bAB13A2b46D02c20c28AeBaB79bbE7E067AA&chainIdOld=137&chainIdNew=137): No diff - -- Avalanche V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xD8277249e871BE9A402fa286C2C5ec16046dC512&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x5b7810a910B4a878AaA4800a824E5E5796838009&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x39185f2236A6022b682e8BB93C040d125DA093CF&contractNew=0xD8277249e871BE9A402fa286C2C5ec16046dC512&chainIdOld=43114&chainIdNew=43114): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x0b47c51CCD4FaDe1D93C750bFCAB0a5ce8734ED0&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - - [CURRENT_DAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xf82da795727633aFA9BB0f1B08A87c0F6A38723f&contractNew=0xD8277249e871BE9A402fa286C2C5ec16046dC512&chainIdOld=43114&chainIdNew=43114): No diff - - [NEW_FRAX_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x0b7c356de5E68A8A257fcD23Ac1e8204D753A6fb&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - - [CURRENT_FRAX_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x6208576378D06ce69A27987b7A524A9B15d499a4&contractNew=0xD8277249e871BE9A402fa286C2C5ec16046dC512&chainIdOld=43114&chainIdNew=43114): No diff - - [NEW_MAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x85142981C14D98a4B69B04225ca74b764648D443&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - - [CURRENT_MAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xCcC55Db26B78a19Dba1beE0066F9c1665575439A&contractNew=0xD8277249e871BE9A402fa286C2C5ec16046dC512&chainIdOld=43114&chainIdNew=43114): No diff - -- Avalanche V2: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xD8277249e871BE9A402fa286C2C5ec16046dC512&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x5b7810a910B4a878AaA4800a824E5E5796838009&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x0b47c51CCD4FaDe1D93C750bFCAB0a5ce8734ED0&contractNew=0xb0D7A8bbDcdb1203850b742bB4d7f57a1F1C8483&chainIdOld=43114&chainIdNew=43114): No diff - -- Arbitrum V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x476494a850eec47301F74C8c9c2652495c47C56c&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x84dC1C52D7C340AA54B4e8799FBB31C3D28E67aD&contractNew=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&chainIdOld=42161&chainIdNew=42161): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x9F221bfD2d3F226b187d4419b49117aD7E698977&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): No diff - - [CURRENT_DAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x4a838a3Dac6633bB1fd932B6f356DecFCAf7803D&contractNew=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&chainIdOld=42161&chainIdNew=42161): No diff - - [NEW_LUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xc8b3e2776260c7e7A9C158a2344776e65E10ceE8&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): No diff - - [CURRENT_LUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x341B110bDF665A20F0D5f84A92FcAF5EbeEBC629&contractNew=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&chainIdOld=42161&chainIdNew=42161): No diff - - [NEW_FRAX_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xC1d2Faa98935eA2f2eD34Bc84edb00B387061376&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): No diff - - [CURRENT_FRAX_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x06919EB75Bd6BA817D38CC70C1CA588ac7a01C10&contractNew=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&chainIdOld=42161&chainIdNew=42161): No diff - - [NEW_MAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xAF92b0A685a15F4E26B6d7DA86F1a9C8C01E2a09&contractNew=0x6200A5122Af8D5D9e69f4d526311Cd85241ACeC9&chainIdOld=42161&chainIdNew=42161): No diff - - [CURRENT_MAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x7a7cE08a1057723CCEDeA2462407427Ae33FFEb2&contractNew=0xDe25a88F87FEd9F8999fAbF6729dCB121893623C&chainIdOld=42161&chainIdNew=42161): No diff - -- Optimism V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x2daA7078f78485A708003989cBc9a643e3b4B61f&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xDb4E371F8dc7D834D3F1359295c669352ECe7D9c&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x70E6DBBFFc9c3c6fB4a9c349E3101B7dCEE67f4D&contractNew=0x2daA7078f78485A708003989cBc9a643e3b4B61f&chainIdOld=10&chainIdNew=10): No diff - - [NEW_DAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xf116891adaBb21Df94663c8Aa62f87fC1bc19d53&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): No diff - - [CURRENT_DAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x1a96fe91278bcF6F19665F642FE7a88cD5c360bb&contractNew=0x2daA7078f78485A708003989cBc9a643e3b4B61f&chainIdOld=10&chainIdNew=10): No diff - - [NEW_LUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x5a602E33B935415477550c709a79cDF23E1355d5&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): No diff - - [CURRENT_LUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x8f4dAFb6Feb190e7846eb7665fD49FFb1177Ff8e&contractNew=0x2daA7078f78485A708003989cBc9a643e3b4B61f&chainIdOld=10&chainIdNew=10): No diff - - [NEW_SUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x8ea108096AdEA6Ac059cbEaE6862ce9BB52B4E87&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): No diff - - [CURRENT_SUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xC77E9CF9603F5ef5503213229ABB1Fec3001f312&contractNew=0x2daA7078f78485A708003989cBc9a643e3b4B61f&chainIdOld=10&chainIdNew=10): No diff - - [NEW_MAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x1D85F6eB05f618154ac520D2fDa74C40D21BD93e&contractNew=0x6379A975Ef93EC2bE87f56A02CCF8535dFAde201&chainIdOld=10&chainIdNew=10): No diff - - [CURRENT_MAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xc6ac65E8f4F50a6655Efd78A92b6c503B5B625C8&contractNew=0x2daA7078f78485A708003989cBc9a643e3b4B61f&chainIdOld=10&chainIdNew=10): No diff - -- Base V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f&contractNew=0xfcF82bFa2485253263969167583Ea4de09e9993b&chainIdOld=8453&chainIdNew=8453): Addition of `getPriceCap()` method plus unrelated dependency changes - -- BNB V3: - - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1&contractNew=0x9102a9553B470dbD0dC74009a870A5886C92902C&chainIdOld=56&chainIdNew=56): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_USDT_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xee845A7A40A090Da256420A293803C35B7F436b6&contractNew=0x9102a9553B470dbD0dC74009a870A5886C92902C&chainIdOld=56&chainIdNew=56): No diff - - [CURRENT_USDT_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x0F682319Ed4A240b7a2599A48C965049515D9bC3&contractNew=0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1&chainIdOld=56&chainIdNew=56): No diff - - [NEW_FDUSD_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x72Cb7a00D439296A6fC3c9face9Eca96bfdEf825&contractNew=0x9102a9553B470dbD0dC74009a870A5886C92902C&chainIdOld=56&chainIdNew=56): No diff - - [CURRENT_FDUSD_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x60a117Fa5bAbee4d645884fB11E413Da4F893b6D&contractNew=0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1&chainIdOld=56&chainIdNew=56): No diff - -- Gnosis V3: - - - [CURRENT_SDAI_NEW_SDAI](https://contract-diff.swiss-knife.xyz/?contractOld=0x1D0f881Ce1a646E2f27Dec3c57Fa056cB838BCC2&contractNew=0x620424f393dD413c2F8Dc2980905c4daa3619e61&chainIdOld=100&chainIdNew=100): Big diff as feed changed from non-capo to capo - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2&contractNew=0x1450C4BE9dd66889CddAB77e5947B6166ACbfAE2&chainIdOld=100&chainIdNew=100): Addition of `getPriceCap()` method plus unrelated dependency changes - - [NEW_WXDAI_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x7443afE82986d7475Cea0c5b04C6F1581fdAce87&contractNew=0x1450C4BE9dd66889CddAB77e5947B6166ACbfAE2&chainIdOld=100&chainIdNew=100): No diff - - [CURRENT_WXDAI_CURRENT_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0xE5269eF0CE04E509E8134624c7BF043b21e10897&contractNew=0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2&chainIdOld=100&chainIdNew=100): No diff - -- Scroll V3: - - [CURRENT_USDC_NEW_USDC](https://contract-diff.swiss-knife.xyz/?contractOld=0x427Fd98dbD1DbC2D4e792350caBe7c9665F35bee&contractNew=0x1685D81212580DD4cDA287616C2f6F4794927e18&chainIdOld=534352&chainIdNew=534352): Addition of `getPriceCap()` method plus unrelated dependency changes - - - -  - -As suggested by Risk Contributors (Chaos Labs), the following configuration for CAPO has been set for sDAI on Aave V3 Ethereum and Gnosis instances: -| maxYearlyRatioGrowthPercent | MINIMUM_SNAPSHOT_DELAY | -| --- | --- | -| 16% | 7 days | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/7167caf245b4244071fde01d7b402714fecfd39f/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101.t.sol) -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/55) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol b/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol deleted file mode 100644 index a354d3c86..000000000 --- a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol +++ /dev/null @@ -1,346 +0,0 @@ -// 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, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3EthereumLido_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3EthereumLido_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3EthereumEtherFi_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3EthereumEtherFi_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101.sol'; -import {AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101} from './AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - address payload2 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumEtherFi_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](3); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - actions[2] = GovV3Helpers.buildAction(payload2); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Metis - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployMetis chain=metis - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/1088/run-latest.json - */ -contract DeployMetis is MetisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/100/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Scroll - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployScroll chain=scroll - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/534352/run-latest.json - */ -contract DeployScroll is ScrollScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy BNB - * deploy-command: make deploy-ledger contract=src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:DeployBNB chain=bnb - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UpdatePriceCapAdaptersCAPO_20241101.s.sol/56/run-latest.json - */ -contract DeployBNB is BNBScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101).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/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO_20241101.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](3); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - actionsEthereum[2] = GovV3Helpers.buildAction( - type(AaveV3EthereumEtherFi_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsMetis[0] = GovV3Helpers.buildAction( - type(AaveV3Metis_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[6] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[7] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); - actionsScroll[0] = GovV3Helpers.buildAction( - type(AaveV3Scroll_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[8] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBNB[0] = GovV3Helpers.buildAction( - type(AaveV3BNB_UpdatePriceCapAdaptersCAPO_20241101).creationCode - ); - payloads[9] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20241101_Multi_UpdatePriceCapAdaptersCAPO/UpdatePriceCapAdaptersCAPO.md' - ) - ); - } -} diff --git a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/config.ts b/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/config.ts deleted file mode 100644 index 648b5ae4e..000000000 --- a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/config.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: [ - 'AaveV3Ethereum', - 'AaveV3Polygon', - 'AaveV3Avalanche', - 'AaveV3Optimism', - 'AaveV3Arbitrum', - 'AaveV3Metis', - 'AaveV3Base', - 'AaveV3Gnosis', - 'AaveV3Scroll', - 'AaveV3BNB', - ], - title: 'Update Price Cap Adapters (CAPO)', - shortName: 'UpdatePriceCapAdaptersCAPO', - date: '20241101', - author: 'BGD Labs (@bgdlabs)', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 21092620}}, - AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 63752907}}, - AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 52520148}}, - AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 127431611}}, - AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 269904022}}, - AaveV3Metis: {configs: {OTHERS: {}}, cache: {blockNumber: 18853015}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 21836329}}, - AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 36800741}}, - AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 10718504}}, - AaveV3BNB: {configs: {OTHERS: {}}, cache: {blockNumber: 43627345}}, - }, -}; diff --git a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/ICLSynchronicityPriceAdapterBaseToPeg.sol b/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/ICLSynchronicityPriceAdapterBaseToPeg.sol deleted file mode 100644 index 9ab0a189f..000000000 --- a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/ICLSynchronicityPriceAdapterBaseToPeg.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface ICLSynchronicityPriceAdapterBaseToPeg { - /** - * @notice Calculates the current answer based on the aggregators. - * @return int256 latestAnswer - */ - function latestAnswer() external view returns (int256); - - /** - * @notice Returns the description of the feed - * @return string desciption - */ - function description() external view returns (string memory); - - /** - * @notice Returns the feed decimals - * @return uint8 decimals - */ - function decimals() external view returns (uint8); - - /** - * @notice Price feed for (Base / Peg) pair - */ - function BASE_TO_PEG() external view returns (address); - - /** - * @notice Price feed for (Asset / Peg) pair - */ - function ASSET_TO_PEG() external view returns (address); -} diff --git a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/IPriceCapAdapterStable.sol b/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/IPriceCapAdapterStable.sol deleted file mode 100644 index fbbd1f8e8..000000000 --- a/src/20241101_Multi_UpdatePriceCapAdaptersCAPO/interfaces/IPriceCapAdapterStable.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IPriceCapAdapterStable { - /** - * @notice Get price cap value - */ - function getPriceCap() external view returns (int256); - - /** - * @notice Returns if the price is currently capped - */ - function isCapped() external view returns (bool); - - /** - * @notice Price feed for (ASSET / USD) pair - */ - function ASSET_TO_USD_AGGREGATOR() external view returns (address); - - /** - * @notice Calculates the current answer based on the aggregators. - * @return int256 latestAnswer - */ - function latestAnswer() external view returns (int256); - - /** - * @notice Returns the description of the feed - * @return string desciption - */ - function description() external view returns (string memory); - - /** - * @notice Returns the feed decimals - * @return uint8 decimals - */ - function decimals() external view returns (uint8); -} diff --git a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol b/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol deleted file mode 100644 index 52df141e3..000000000 --- a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {ChainlinkEthereum} from 'aave-address-book/ChainlinkEthereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Add FBTC to Aave v3 Main Market on Ethereum - * @author Aave Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x2ca8db490e132cebfec25ddbf460b89abd710456c5177bca784abaae9d6009d9 - * - Discussion: https://governance.aave.com/t/arfc-add-fbtc-to-aave-v3-main-market-on-ethereum/19937 - */ -contract AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant FBTC = 0xC96dE26018A54D51c097160568752c4E3BD6C364; - uint256 public constant FBTC_SEED_AMOUNT = 1e5; - address public constant FBTC_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(FBTC).forceApprove(address(AaveV3Ethereum.POOL), FBTC_SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(FBTC, FBTC_SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aFBTC = AaveV3Ethereum.POOL.getReserveAToken(FBTC); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(FBTC, FBTC_LM_ADMIN); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aFBTC, FBTC_LM_ADMIN); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 16, - ltv: 84_00, - liqThreshold: 86_00, - liqBonus: 3_00, - label: 'FBTC/WBTC' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: FBTC, - eModeCategory: 16, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.WBTC_UNDERLYING, - eModeCategory: 16, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: FBTC, - assetSymbol: 'FBTC', - priceFeed: ChainlinkEthereum.SVR_BTC_USD, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 73_00, - liqThreshold: 78_00, - liqBonus: 7_50, - reserveFactor: 50_00, - supplyCap: 200, - borrowCap: 100, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 4_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.t.sol b/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.t.sol deleted file mode 100644 index b3ebd1467..000000000 --- a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.t.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213} from './AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol'; - -/** - * @dev Test for AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.t.sol -vv - */ -contract AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213_Test is ProtocolV3TestBase { - AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22568883); - proposal = new AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHasFBTCFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.FBTC()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 10 ** 5); - } - - function test_FBTCAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aFBTC = AaveV3Ethereum.POOL.getReserveAToken(proposal.FBTC()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.FBTC()), - proposal.FBTC_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aFBTC), - proposal.FBTC_LM_ADMIN() - ); - } -} diff --git a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum.md b/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum.md deleted file mode 100644 index 8a2a90a09..000000000 --- a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "Add FBTC to Aave v3 Main Market on Ethereum" -author: "Aave Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-add-fbtc-to-aave-v3-main-market-on-ethereum/19937" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0x2ca8db490e132cebfec25ddbf460b89abd710456c5177bca784abaae9d6009d9" ---- - -## Simple Summary - -The proposal aims to onboard Ignition’s FBTC, to the Aave v3 protocol Main Market on Ethereum. - -## Motivation - -FBTC is a cross-chain BTC protocol that uses the Threshold Signature Scheme network to enable secure, decentralized Bitcoin scalability across multiple blockchains. By leveraging multi-party computation, FBTC strengthens bridge security, safeguarding user assets and ensuring robust cross-chain interoperability. This setup also integrates a cross-chain hub, allowing seamless BTC transfers while reducing issues linked to Bitcoin L2 growth. - -This new asset will broaden opportunities for Bitcoin holders aiming to participate in DeFi on Aave v3. The introduction of FBTC offers users more flexibility in leveraging their Bitcoin, enhancing liquidity and driving increased engagement within the Aave protocol. - -With $480M in total value locked (TVL), FBTC is emerging as a compelling solution in Bitcoin bridging, supported by its upcoming Chainlink Oracle integration to accelerate growth across EVM networks. - -Aave is positioned to benefit from a material increase in AUM resulting from FBTC deposits. This capital is being sourced by from within the Ignition team’s network. Several sophisticated investors are looking to user Aave at size and some teams have built products specifical for investors in anticipationg of the Aave listing. The Ignition team is expected to provide incentives supporting Aave users directly and also strategy providers built on top of Aave. @TokenLogic has been coordinating with various prospective users to ensure there is adequate demand ahead of the listing. - -## Specification - -### Listing - -The table below illustrates the configured risk parameters for **FBTC** - -| Parameter | Value | -| ------------------------- | -----------------------------------------------------------------------------------------------: | -| Isolation Mode | false | -| Borrowable | ENABLED | -| Collateral Enabled | true | -| Supply Cap (FBTC) | 200 | -| Borrow Cap (FBTC) | 100 | -| Debt Ceiling | USD 0 | -| LTV | 73 % | -| LT | 78 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 50 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 4 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | [Chainlink SVR BTC/USD](https://etherscan.io/address/0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A) | -| Oracle latest answer | (2025-05-26) 109172.99000000 USD | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for FBTC and the corresponding aToken. - -### Emode - -The following emode will be created: - -| Asset | FBTC | WBTC | -| ----------------- | ----- | ---- | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| LTV | 84% | - | -| LT | 86% | - | -| Liquidation Bonus | 3.00% | - | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/767a67b2255ffa6f52b812068d4c4e3a9a4a2a0c/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/767a67b2255ffa6f52b812068d4c4e3a9a4a2a0c/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x2ca8db490e132cebfec25ddbf460b89abd710456c5177bca784abaae9d6009d9) -- [Discussion](https://governance.aave.com/t/arfc-add-fbtc-to-aave-v3-main-market-on-ethereum/19937) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum_20241213.s.sol b/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum_20241213.s.sol deleted file mode 100644 index 0a3e376d6..000000000 --- a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum_20241213.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_AddFBTCToAaveV3MainMarketOnEthereum_20241213} from './AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum_20241213.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AddFBTCToAaveV3MainMarketOnEthereum_20241213.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum_20241213).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/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum_20241213.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_AddFBTCToAaveV3MainMarketOnEthereum_20241213).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/AddFBTCToAaveV3MainMarketOnEthereum.md' - ) - ); - } -} diff --git a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/config.ts b/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/config.ts deleted file mode 100644 index 8dd4f592f..000000000 --- a/src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/config.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20241213_AaveV3Ethereum_AddFBTCToAaveV3MainMarketOnEthereum/config.ts', - update: true, - author: 'Aave Chan Initiative', - pools: ['AaveV3Ethereum'], - title: 'Add FBTC to Aave v3 Main Market on Ethereum', - shortName: 'AddFBTCToAaveV3MainMarketOnEthereum', - date: '20241213', - discussion: - 'https://governance.aave.com/t/arfc-add-fbtc-to-aave-v3-main-market-on-ethereum/19937', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0x2ca8db490e132cebfec25ddbf460b89abd710456c5177bca784abaae9d6009d9', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - EMODES_UPDATES: [ - {eModeCategory: 8, ltv: '84', liqThreshold: '86', liqBonus: '3', label: 'FBTC/WBTC'}, - ], - EMODES_ASSETS: [ - {asset: 'FBTC', eModeCategory: '8', collateral: 'ENABLED', borrowable: 'DISABLED'}, - {asset: 'WBTC', eModeCategory: '8', collateral: 'DISABLED', borrowable: 'ENABLED'}, - ], - ASSET_LISTING: [ - { - assetSymbol: 'FBTC', - decimals: 8, - priceFeed: '0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c', - ltv: '73', - liqThreshold: '78', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '50', - supplyCap: '200', - borrowCap: '100', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '4', - variableRateSlope2: '300', - }, - asset: '0xC96dE26018A54D51c097160568752c4E3BD6C364', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 22366110}, - }, - }, -}; diff --git a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation.md b/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation.md deleted file mode 100644 index 9c29a02cd..000000000 --- a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Mantle a.DI path activation" -author: "BGD Labs @bgdlabs" -discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/81" ---- - -## Simple Summary - -Proposal to activate the necessary a.DI and governance infrastructure for the Mantle network, a technical prerequisite for an activation vote of Aave v3 Mantle. - -## Motivation - -In order to be able to pass messages from Ethereum to Mantle via a.DI (Aave Delivery Infrastructure), it is necessary to at least have three valid adapters Ethereum → Mantle smart contracts enabled in the system. - -The first case of message passing Ethereum → Mantle is the activation proposal for an Aave v3 Mantle pool, and consequently, to be able to execute on the Mantle side the payload, the Aave governance should approve in advance the a.DI adapters smart contracts. - -This procedure mirrors the requirements of previous networks like ZkSync or Linea. - -## Specification - -The proposal payload simply registers pre-deployed Mantle adapters (with the necessary configurations to communicate with the Mantle a.DI) on the Ethereum a.DI instance. - -This is done by calling the enableBridgeAdapters() function on the Ethereum Cross-chain Controller smart contract. - -The following are the configured adapters for the Ethereum → Mantle path. The required confirmations on the path are 1 out of 1. - -| Network | Mantle Native Adapter | -| -------- | ----------------------------------------------------------------------------------------------------------------------- | -| Ethereum | [0xb66FA987fa7975Cac3d12B629c9c44e459e50990](https://etherscan.io/address/0xb66FA987fa7975Cac3d12B629c9c44e459e50990) | -| Mantle | [0x4E740ac02b866b429738a9e225e92A15F4452521](https://mantlescan.xyz/address/0x4E740ac02b866b429738a9e225e92A15F4452521) | - -The new a.DI deployments on Mantle network are as follows: - -| Contract | Address | -| -------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| CrossChainController | [0x1283C5015B1Fb5616FA3aCb0C18e6879a02869cB](https://mantlescan.xyz/address/0x1283C5015B1Fb5616FA3aCb0C18e6879a02869cB) | -| Granular Guardian | [0xb26670d2800DBB9cfCe2f2660FfDcA48C799c86d](https://mantlescan.xyz/address/0xb26670d2800DBB9cfCe2f2660FfDcA48C799c86d) | - -The new Aave Governance deployments on Mantle network are as follows: - -| Contract | Address | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| PayloadsController | [0xF089f77173A3009A98c45f49D547BF714A7B1e01](https://mantlescan.xyz/address/0xF089f77173A3009A98c45f49D547BF714A7B1e01) | -| Executor Lvl 1 | [0x70884634D0098782592111A2A6B8d223be31CB7b](https://mantlescan.xyz/address/0x70884634D0098782592111A2A6B8d223be31CB7b) | -| Governance Guardian | [0x14816fC7f443A9C834d30eeA64daD20C4f56fBCD](https://mantlescan.xyz/address/0x14816fC7f443A9C834d30eeA64daD20C4f56fBCD) | -| BGD Labs Guardian | [0x0686f59Cc2aEc1ccf891472Dc6C89bB747F6a4A7](https://mantlescan.xyz/address/0x0686f59Cc2aEc1ccf891472Dc6C89bB747F6a4A7) | - -## References - -- Adapter Implementations: [Mantle Native Adapters](https://github.com/bgd-labs/aave-delivery-infrastructure/blob/9a79f7986b5442657f64e41a0ab089e0cdb71e98/src/contracts/adapters/mantle/MantleAdapter.sol) -- Payload Implementation: [Payload](https://github.com/bgd-labs/adi-deploy/blob/54a363eb2d435782f6107ed3bef4fdbec6ff52c1/scripts/payloads/adapters/ethereum/Ethereum_Activate_Mantle_Bridge_Adapter_Payload.s.sol) -- Payload Tests: [tests](https://github.com/bgd-labs/adi-deploy/blob/54a363eb2d435782f6107ed3bef4fdbec6ff52c1/tests/payloads/ethereum/AddMantlePathTest.t.sol) -- Diffs: [a.DI diffs](https://github.com/bgd-labs/adi-deploy/blob/54a363eb2d435782f6107ed3bef4fdbec6ff52c1/diffs/adi_add_mantle_path_to_adiethereum_before_adi_add_mantle_path_to_adiethereum_after.md) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/81) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation_20250212.s.sol b/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation_20250212.s.sol deleted file mode 100644 index 9f89896fb..000000000 --- a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation_20250212.s.sol +++ /dev/null @@ -1,54 +0,0 @@ -// 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'; - -address constant PAYLOAD = address(0x184CA99Cd89313c00a69b9A8E1649D84FBD8D86D); - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation_20250212.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/MantleADIPathActivation_20250212.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(PAYLOAD); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation_20250212.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(PAYLOAD); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250212_AaveV3Ethereum_MantleADIPathActivation/MantleADIPathActivation.md' - ) - ); - } -} diff --git a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/config.ts b/src/20250212_AaveV3Ethereum_MantleADIPathActivation/config.ts deleted file mode 100644 index 0ffce421f..000000000 --- a/src/20250212_AaveV3Ethereum_MantleADIPathActivation/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'BGD Labs @bgdlabs', - pools: ['AaveV3Ethereum'], - title: 'Mantle a.DI path activation', - shortName: 'MantleADIPathActivation', - date: '20250212', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 21830270}}}, -}; diff --git a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol b/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol deleted file mode 100644 index 77326cce2..000000000 --- a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; -import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Enhancements in Aave v3 Gnosis Chain Instance - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x27b21aa2cd21d5e94eb9b9e0232fe875ad45719588ada4b059f67a8834d7408e - * - Discussion: https://governance.aave.com/t/arfc-enhancements-in-aave-v3-gnosis-chain-instance/21214 - */ -contract AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311 is AaveV3PayloadGnosis { - function collateralsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) - { - IAaveV3ConfigEngine.CollateralUpdate[] - memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); - - collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ - asset: AaveV3GnosisAssets.USDC_UNDERLYING, - ltv: 65_00, - liqThreshold: EngineFlags.KEEP_CURRENT, - liqBonus: EngineFlags.KEEP_CURRENT, - debtCeiling: EngineFlags.KEEP_CURRENT, - liqProtocolFee: EngineFlags.KEEP_CURRENT - }); - - return collateralUpdate; - } - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3GnosisAssets.USDC_UNDERLYING, - enabledToBorrow: EngineFlags.KEEP_CURRENT, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: 40_00 - }); - - return borrowUpdates; - } - function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { - IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1); - - capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ - asset: AaveV3GnosisAssets.USDC_UNDERLYING, - supplyCap: 2_500_000, - borrowCap: 2_000_000 - }); - - return capsUpdate; - } - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 3, - ltv: 90_00, - liqThreshold: 92_00, - liqBonus: 4_00, - label: 'sDAI/USDCe' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3GnosisAssets.USDCe_UNDERLYING, - eModeCategory: 3, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3GnosisAssets.sDAI_UNDERLYING, - eModeCategory: 3, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.t.sol b/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.t.sol deleted file mode 100644 index 17fefaa96..000000000 --- a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311} from './AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol'; - -/** - * @dev Test for AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311 - * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.t.sol -vv - */ -contract AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311_Test is ProtocolV3TestBase { - AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('gnosis'), 39102561); - proposal = new AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311', - AaveV3Gnosis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance.md b/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance.md deleted file mode 100644 index 1f4d6c246..000000000 --- a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: "Enhancements in Aave v3 Gnosis Chain Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-enhancements-in-aave-v3-gnosis-chain-instance/21214" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0x27b21aa2cd21d5e94eb9b9e0232fe875ad45719588ada4b059f67a8834d7408e" ---- - -## Simple Summary - -This publication proposes changes in the Gnosis Chain instance to improve the capital efficiency of USDC.e and sDAI assets by promoting changes on its parametrisation. - -## Motivation - -The Gnosis Chain’s DeFi landscape has evolved considerably since these assets were first introduced. With a vibrant ecosystem now in place, it’s time to enhance capital efficiency, reduce capital fragmentation, and create useful debt vs no risk looping within the Aave GC instance to attract more capital and increase utilisation. - -**USDC to USDC.e Transition:** - -Gnosis Chain is committed to making USDC.e (the version that aligns with Circle’s standards) the defacto version of this stablecoin within its ecosystem, by accelerating the transition from USDC and making it the major market within Aave’s GC instance (replacing xDAI). To incentivise this migration and accommodate increased capital inflows, we propose the following adjustments for USDC.e: - -- Supply and Borrowing Cap Increase: Enacted via the Risk Steward. -- Emode Creation: Establish an Emode pairing between USDC.e and sDAI, similar to the existing sDAI/EURe Emode. - -Those changes will incentivise looping strategies with USDC.e similar to those with EURe/xDAI. - -To further promote the transition to USDC.e, we propose reducing the LTV factor for USDC. This measure will prevent the initiation of new borrowings using USDC, thus encouraging users to adopt USDC.e. - -**sDAI Borrowability** - -This proposal also asks to make sDAI a borrowable asset. There is little justification for depositing xDAI into Aave on Gnosis, as sDAI offers the same risk profile. The optimal configuration, then, would be to phase out xDAI in favour of sDAI (this will be presented in a future proposal). sDAI becoming borrowable ensures a more efficient and market-driven borrowing system on the platform. - -## Specification - -The tables below show the current and proposed parameters for each asset. A subsequent AIP will be submitted to implement these changes upon implementing this proposal. - -- USDC.e - -| Parameters | Current | Proposed | -| ------------------------ | ------- | -------- | -| Isolation Mode | No | - | -| Borrowable in Isolation | Yes | - | -| Enable Borrow | Yes | - | -| Enable Collateral | Yes | - | -| Loan To Value (LTV) | 75% | - | -| Liquidation Threshold | 78% | - | -| Liquidation Bonus | 5% | - | -| Reserve Factor | 10% | - | -| Liquidation Protocol Fee | 10% | - | -| Supply Cap | 10M | - | -| Borrow Cap | 9M | - | -| Debt Ceiling | N/A | - | -| Optimal | 90% | - | -| Base | 0% | - | -| Slope1 | 9.5% | - | -| Slope2 | 40% | - | -| Emode | No | Yes | - -- Create sDAI/USDC.e E-mode - -| Parameters | Value | Value | -| --------------------- | ----- | ------ | -| Asset | sDAI | USDC.e | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| Max LTV | 90% | - | -| Liquidation Threshold | 92% | - | -| Liquidation Bonus | 4% | - | - -- USDC - -| Parameters | Current | Proposed | -| -------------- | ------- | -------- | -| Supply Cap | 11m | 2.5m | -| Borrow Cap | 11m | 2m | -| Reserve Factor | 25% | 40% | -| LTV | 75% | 65% | - -- sDAI - -| Parameters | Current | Proposed | -| ------------------------ | ------- | -------- | -| Isolation Mode | No | - | -| Borrowable in Isolation | No | - | -| Enable Borrow | No | - | -| Enable Collateral | Yes | - | -| Loan To Value (LTV) | 75% | - | -| Liquidation Threshold | 78% | - | -| Liquidation Bonus | 5% | - | -| Reserve Factor | 10% | - | -| Liquidation Protocol Fee | 20% | - | -| Supply Cap | 48M | - | -| Borrow Cap | 0 | - | -| Debt Ceiling | N/A | - | -| Optimal | 90% | - | -| Base | 0% | - | -| Slope1 | 4% | - | -| Slope2 | 75% | - | -| Emode | No | Yes | - -## References - -- Implementation: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/1df64075d9de756315cb85fc35b7b9f0d03c83ee/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol) -- Tests: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/1df64075d9de756315cb85fc35b7b9f0d03c83ee/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x27b21aa2cd21d5e94eb9b9e0232fe875ad45719588ada4b059f67a8834d7408e) -- [Discussion](https://governance.aave.com/t/arfc-enhancements-in-aave-v3-gnosis-chain-instance/21214) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance_20250311.s.sol b/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance_20250311.s.sol deleted file mode 100644 index e33c0c812..000000000 --- a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance_20250311.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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, GnosisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311} from './AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311.sol'; - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance_20250311.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/EnhancementsInAaveV3GnosisChainInstance_20250311.s.sol/100/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311).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/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance_20250311.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 actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance_20250311).creationCode - ); - payloads[0] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/EnhancementsInAaveV3GnosisChainInstance.md' - ) - ); - } -} diff --git a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/config.ts b/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/config.ts deleted file mode 100644 index 5c0761f12..000000000 --- a/src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/config.ts +++ /dev/null @@ -1,66 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250311_AaveV3Gnosis_EnhancementsInAaveV3GnosisChainInstance/config.ts', - force: true, - author: 'Aave-Chan Initiative', - pools: ['AaveV3Gnosis'], - title: 'Enhancements in Aave v3 Gnosis Chain Instance', - shortName: 'EnhancementsInAaveV3GnosisChainInstance', - date: '20250311', - discussion: - 'https://governance.aave.com/t/arfc-enhancements-in-aave-v3-gnosis-chain-instance/21214', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0x27b21aa2cd21d5e94eb9b9e0232fe875ad45719588ada4b059f67a8834d7408e', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Gnosis: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'sDAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '', - variableRateSlope2: '20', - }, - }, - ], - COLLATERALS_UPDATE: [ - { - asset: 'USDC', - ltv: '65', - liqThreshold: '', - liqBonus: '', - debtCeiling: '', - liqProtocolFee: '', - }, - ], - BORROWS_UPDATE: [ - { - asset: 'USDC', - enabledToBorrow: 'KEEP_CURRENT', - flashloanable: 'KEEP_CURRENT', - borrowableInIsolation: 'KEEP_CURRENT', - withSiloedBorrowing: 'KEEP_CURRENT', - reserveFactor: '40', - }, - ], - CAPS_UPDATE: [ - {asset: 'USDC', supplyCap: '2500000', borrowCap: '2000000'}, - {asset: 'sDAI', supplyCap: '', borrowCap: '4000000'}, - ], - EMODES_UPDATES: [ - {eModeCategory: 3, ltv: '90', liqThreshold: '92', liqBonus: '4', label: 'sDAI_USDCe'}, - ], - EMODES_ASSETS: [ - {asset: 'USDCe', eModeCategory: '3', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'sDAI', eModeCategory: '3', collateral: 'ENABLED', borrowable: 'DISABLED'}, - ], - }, - cache: {blockNumber: 38986299}, - }, - }, -}; diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 9d1c86313..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadArbitrum { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](5); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ArbitrumAssets.DAI_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ArbitrumAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ArbitrumAssets.LUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 4ceccdb10..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 314995245); - proposal = new AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Arbitrum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 6891824db..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; -import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadAvalanche { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](5); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3AvalancheAssets.DAIe_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3AvalancheAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3AvalancheAssets.USDt_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3AvalancheAssets.FRAX_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3AvalancheAssets.AUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index c9ab74b47..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('avalanche'), 58625240); - proposal = new AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Avalanche.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index adc9acb00..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol'; -import {AaveV3PayloadBNB} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBNB.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadBNB { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3BNBAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3BNBAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3BNBAssets.FDUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 9134957bc..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('bnb'), 47406038); - proposal = new AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3BNB.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 4d219d95d..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadBase { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3BaseAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 223529e37..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=base forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 27505200); - proposal = new AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Base.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index ae338b43c..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumEtherFiAssets} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; -import {AaveV3PayloadEthereumEtherFi} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumEtherFi.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312 is - AaveV3PayloadEthereumEtherFi -{ - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumEtherFiAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumEtherFiAssets.FRAX_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index f35f9c991..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumEtherFi} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312_Test is - ProtocolV3TestBase -{ - AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22032215); - proposal = new AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3EthereumEtherFi.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 38815838b..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {AaveV3PayloadEthereumLido} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumLido.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312 is - AaveV3PayloadEthereumLido -{ - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumLidoAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 00a0e42e9..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22032215); - proposal = new AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index b13d887af..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadEthereum { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](7); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.DAI_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.LUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.FRAX_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[5] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.crvUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[6] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index f40110e83..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22032215); - proposal = new AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 579ca5c88..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; -import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadGnosis { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3GnosisAssets.WXDAI_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3GnosisAssets.EURe_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3GnosisAssets.USDCe_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index c471dd0b3..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('gnosis'), 38999696); - proposal = new AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Gnosis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 0df94162a..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol'; -import {AaveV3PayloadMetis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadMetis.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadMetis { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3MetisAssets.mDAI_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3MetisAssets.mUSDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3MetisAssets.mUSDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 5800e9bb5..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('metis'), 19895916); - proposal = new AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Metis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index f0291457a..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; -import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadOptimism { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](5); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3OptimismAssets.DAI_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3OptimismAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3OptimismAssets.sUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3OptimismAssets.LUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3OptimismAssets.USDCn_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index df747341d..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('optimism'), 133100485); - proposal = new AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Optimism.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index 2067d4950..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; -import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadScroll { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ScrollAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index cd0601503..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('scroll'), 13991707); - proposal = new AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3Scroll.POOL, - address(proposal) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate.md b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate.md deleted file mode 100644 index 99610212f..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: "Stablecoins Interest Rate Curve Update" -author: "Aave Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269" ---- - -## Simple Summary - -In light of recent market changes, Chaos Labs recommends setting the target borrow rate for most stablecoins to 6.50%. These changes would be implemented via the direct-to-AIP process. - -## Motivation - -The utilization for stablecoins across Aave has resumed falling after a brief improvement following the last IR curve adjustment, calling for a further reduction in target rates to better align with the market-priced interest rate. - -A closer look at the largest stablecoin markets indicates that borrow rates have stabilized between 6% and 8%. - -As a result, we recommend setting the target rate for all stablecoins to 6.5%; - -Please note that GHO, USDS, and pyUSD are managed separately and, thus, are not included in these recommendations. - -## Specification - -| Protocol | Instance | Asset | **Current Slope1** | **Rec. Slope1** | -| -------- | ---------------- | ------ | ------------------ | --------------- | -| Aave V3 | Ethereum Core | USDC | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | DAI | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | USDT | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | LUSD | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | FRAX | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | crvUSD | 8.50% | 6.50% | -| Aave V3 | Ethereum Core | USDe | 8.50% | 6.50% | -| Aave V3 | Ethereum Prime | USDC | 8.50% | 6.50% | -| Aave V3 | Ethereum EtherFi | USDC | 8.50% | 6.50% | -| Aave V3 | Ethereum EtherFi | FRAX | 8.50% | 6.50% | -| Aave V3 | Arbitrum | DAI | 9% | 6.50% | -| Aave V3 | Arbitrum | USDT | 9% | 6.50% | -| Aave V3 | Arbitrum | LUSD | 9% | 6.50% | -| Aave V3 | Arbitrum | USDC | 9% | 6.50% | -| Aave V3 | Arbitrum | FRAX | 9% | 6.50% | -| Aave V3 | Optimism | DAI | 9% | 6.50% | -| Aave V3 | Optimism | USDT | 9% | 6.50% | -| Aave V3 | Optimism | sUSD | 9% | 6.50% | -| Aave V3 | Optimism | LUSD | 9% | 6.50% | -| Aave V3 | Optimism | USDC | 9% | 6.50% | -| Aave V3 | Base | USDC | 9% | 6.50% | -| Aave V3 | Metis | m.DAI | 9.50% | 6.50% | -| Aave V3 | Metis | m.USDC | 9.50% | 6.50% | -| Aave V3 | Metis | m.USDT | 9.50% | 6.50% | -| Aave V3 | Avalanche | DAI.e | 8.50% | 6.50% | -| Aave V3 | Avalanche | USDC | 8.50% | 6.50% | -| Aave V3 | Avalanche | USDt | 8.50% | 6.50% | -| Aave V3 | Avalanche | FRAX | 8.50% | 6.50% | -| Aave V3 | Avalanche | AUSD | 8.50% | 6.50% | -| Aave V3 | Gnosis | WXDAI | 9% | 6.50% | -| Aave V3 | Gnosis | EURe | 9% | 6.50% | -| Aave V3 | Gnosis | USDC.e | 9% | 6.50% | -| Aave V3 | BNB | USDC | 8.50% | 6.50% | -| Aave V3 | BNB | USDT | 8.50% | 6.50% | -| Aave V3 | BNB | FDUSD | 8.50% | 6.50% | -| Aave V3 | Scroll | USDC | 8.50% | 6.50% | -| Aave V3 | ZkSync | USDC | 8.50% | 6.50% | -| Aave V3 | ZkSync | USDT | 8.50% | 6.50% | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Polygon_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Polygon_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.t.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/78b4d81bddc1978b7807d39859b806883e087d15/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol deleted file mode 100644 index a229e2c54..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol +++ /dev/null @@ -1,324 +0,0 @@ -// 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 {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; -import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312.sol'; -import {AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - address payload2 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](3); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - actions[2] = GovV3Helpers.buildAction(payload2); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Metis - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployMetis chain=metis - * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/1088/run-latest.json - */ -contract DeployMetis is MetisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/100/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Scroll - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployScroll chain=scroll - * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/534352/run-latest.json - */ -contract DeployScroll is ScrollScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy BNB - * deploy-command: make deploy-ledger contract=src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployBNB chain=bnb - * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/StablecoinsInterestRateCurveUpdate_20250312.s.sol/56/run-latest.json - */ -contract DeployBNB is BNBScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312).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/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](3); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - actionsEthereum[2] = GovV3Helpers.buildAction( - type(AaveV3EthereumEtherFi_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[2] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[3] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsMetis[0] = GovV3Helpers.buildAction( - type(AaveV3Metis_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[4] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); - actionsScroll[0] = GovV3Helpers.buildAction( - type(AaveV3Scroll_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[7] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBNB[0] = GovV3Helpers.buildAction( - type(AaveV3BNB_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - payloads[8] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); - - payloads[9] = PayloadsControllerUtils.Payload({ - chain: ChainIds.ZKSYNC, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3ZkSync.PAYLOADS_CONTROLLER), - payloadId: 19 - }); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate.md' - ) - ); - } -} diff --git a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/config.ts b/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/config.ts deleted file mode 100644 index 58c70c77d..000000000 --- a/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/config.ts +++ /dev/null @@ -1,458 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: '', - force: true, - update: true, - author: 'Aave Chan Initiative', - pools: [ - 'AaveV3Ethereum', - 'AaveV3EthereumLido', - 'AaveV3EthereumEtherFi', - 'AaveV3Avalanche', - 'AaveV3Optimism', - 'AaveV3Arbitrum', - 'AaveV3Metis', - 'AaveV3Base', - 'AaveV3Gnosis', - 'AaveV3Scroll', - 'AaveV3BNB', - 'AaveV3ZkSync', - ], - title: 'Stablecoins Interest Rate Curve Update', - shortName: 'StablecoinsInterestRateCurveUpdate', - date: '20250312', - discussion: - 'https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269', - snapshot: 'Direct-to-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'DAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'LUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'FRAX', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'crvUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDe', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 22032215}, - }, - AaveV3EthereumLido: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 22032215}, - }, - AaveV3EthereumEtherFi: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'FRAX', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 22032215}, - }, - AaveV3Avalanche: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'DAIe', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDt', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'FRAX', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'AUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 58622425}, - }, - AaveV3Optimism: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'DAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'sUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'LUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDCn', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 133100485}, - }, - AaveV3Arbitrum: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'DAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'LUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDCn', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'FRAX', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 68965786}, - }, - AaveV3Metis: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'mDAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'mUSDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'mUSDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 19895916}, - }, - AaveV3Base: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 27505200}, - }, - AaveV3Gnosis: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'WXDAI', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'EURe', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDCe', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 38999696}, - }, - AaveV3Scroll: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 13991707}, - }, - AaveV3BNB: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'FDUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 47406038}, - }, - AaveV3ZkSync: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'USDC', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - { - asset: 'USDT', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '', - variableRateSlope1: '6.5', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 57552347}, - }, - }, -}; diff --git a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance.md b/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance.md deleted file mode 100644 index e864567ed..000000000 --- a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "Gov v3 VotingMachine / VotingPortal maintenance" -author: "BGD Labs @bgdlabs" -discussions: https://governance.aave.com/t/technical-maintenance-proposals/15274/71 ---- - -## Simple Summary - -Proposal to make minor improvements on the Governance v3 VotingMachine smart contracts. - -## Motivation - -After more than 1 year of working in production without changes, the Aave governance v3 Voting Machine smart contracts (Ethereum, Polygon, Avalanche) require minor maintenance to move them to an up-to-date state with the rest of the system, more precisely the a.DI (Aave Delivery Infrastructure) directly connected. - -As they are not upgradeable, it is necessary to deploy new DataWarehouse contracts, new VotingStrategy contracts and new VotingPortals. - -## Specification - -The governance proposal will call `approveSenders()` on the CrossChainController contract on every voting network (Ethereum, Polygon, Avalanche) to register the new VotingMachine contracts. -Additionally, `addVotingPortals()` will be called on the core Governance contract on Ethereum, with the new Voting Portals addresses, so that the Aave Governance can communicate with the new Voting Machines. - -**Voting Machines:** -| Network | VotingMachine | -| ------- | ------------- | -| Ethereum | [0x06a1795a88b82700896583e123F46BE43877bFb6](https://etherscan.io/address/0x06a1795a88b82700896583e123F46BE43877bFb6) | -| Polygon | [0x44c8b753229006A8047A05b90379A7e92185E97C](https://polygonscan.com/address/0x44c8b753229006A8047A05b90379A7e92185E97C) | -| Avalanche | [0x4D1863d22D0ED8579f8999388BCC833CB057C2d6](https://snowscan.xyz/address/0x4D1863d22D0ED8579f8999388BCC833CB057C2d6) | - -**Voting Portals:** -| Network Path | VotingPortals | -| ------- | ------------- | -| Ethereum - Ethereum | [0x6ACe1Bf22D57a33863161bFDC851316Fb0442690](https://etherscan.io/address/0x6ACe1Bf22D57a33863161bFDC851316Fb0442690) | -| Ethereum - Polygon | [0xFe4683C18aaad791B6AFDF0a8e1Ed5C6e2c9ecD6](https://etherscan.io/address/0xFe4683C18aaad791B6AFDF0a8e1Ed5C6e2c9ecD6) | -| Ethereum - Avalanche | [0x9Ded9406f088C10621BE628EEFf40c1DF396c172](https://etherscan.io/address/0x9Ded9406f088C10621BE628EEFf40c1DF396c172) | - -## References - -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/71) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol b/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol deleted file mode 100644 index 273c5a6bd..000000000 --- a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol +++ /dev/null @@ -1,100 +0,0 @@ -// 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, PolygonScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; - -address constant ETHEREUM_PAYLOAD = 0xc15C40D0fb00672152499fa9CDFDC4AF14F31dC8; -address constant POLYGON_PAYLOAD = 0x01FE626182E8f3FB5549919C9923061536eba58B; -address constant AVALANCHE_PAYLOAD = 0xd092B902B3B11CeC912C7CC661316E07b509B6f5; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveGovernanceTechnicalMaintenance_20250317.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(ETHEREUM_PAYLOAD); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/AaveGovernanceTechnicalMaintenance_20250317.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(POLYGON_PAYLOAD); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/AaveGovernanceTechnicalMaintenance_20250317.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(AVALANCHE_PAYLOAD); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance_20250317.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 actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction(ETHEREUM_PAYLOAD); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction(POLYGON_PAYLOAD); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction(AVALANCHE_PAYLOAD); - payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250317_Multi_AaveGovernanceTechnicalMaintenance/AaveGovernanceTechnicalMaintenance.md' - ) - ); - } -} diff --git a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/config.ts b/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/config.ts deleted file mode 100644 index b59810312..000000000 --- a/src/20250317_Multi_AaveGovernanceTechnicalMaintenance/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'BGD Labs @bgdlabs', - pools: ['AaveV3Ethereum', 'AaveV3Polygon', 'AaveV3Avalanche'], - title: 'Aave Governance technical maintenance', - shortName: 'AaveGovernanceTechnicalMaintenance', - date: '20250317', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22067248}}, - AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 69163036}}, - AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 58854210}}, - }, -}; diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol deleted file mode 100644 index 3588645be..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol'; -import {IERC20AaveLM} from 'aave-v3-origin/contracts/extensions/stata-token/interfaces/IERC20AaveLM.sol'; - -import {AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318} from './AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol'; - -/** - * @dev Test for AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol -vv - */ -contract AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318_Test is - ProtocolV3TestBase -{ - address public constant CLAIMER = 0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e; - address public constant BALANCER_VAULT = 0xbA1333333333a1BA1108E8412f11850A5C319bA9; - AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 317036630); - proposal = new AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318( - CLAIMER, - BALANCER_VAULT, - AaveV3Arbitrum.EMISSION_MANAGER - ); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318', - AaveV3Arbitrum.POOL, - address(proposal) - ); - - assertEq( - IRewardsController(AaveV3Arbitrum.DEFAULT_INCENTIVES_CONTROLLER).getClaimer( - proposal.BALANCER_VAULT() - ), - proposal.CLAIMER() - ); - } -} diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol deleted file mode 100644 index 315f75430..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IRewardsController} from 'aave-v3-origin/contracts/rewards/interfaces/IRewardsController.sol'; -import {IERC20AaveLM} from 'aave-v3-origin/contracts/extensions/stata-token/interfaces/IERC20AaveLM.sol'; - -import {AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318} from './AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol'; - -/** - * @dev Test for AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318 - * command: FOUNDRY_PROFILE=base forge test --match-path=src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol -vv - */ -contract AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318_Test is - ProtocolV3TestBase -{ - address public constant CLAIMER = 0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e; - address public constant BALANCER_VAULT = 0xbA1333333333a1BA1108E8412f11850A5C319bA9; - AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 27755124); - proposal = new AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318( - CLAIMER, - BALANCER_VAULT, - AaveV3Base.EMISSION_MANAGER - ); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318', - AaveV3Base.POOL, - address(proposal) - ); - - assertEq( - IRewardsController(AaveV3Base.DEFAULT_INCENTIVES_CONTROLLER).getClaimer( - proposal.BALANCER_VAULT() - ), - proposal.CLAIMER() - ); - } -} diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol deleted file mode 100644 index d574f4083..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title Allow Balancer DAO to Claim Liquidity Mining Rewards (Arbitrum & Base) - * @author @TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-whitelist-balancer-dao-to-claim-liquidity-mining-rewards-arbitrum-base/21280 - */ -contract AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318 is - IProposalGenericExecutor -{ - address public immutable CLAIMER; - address public immutable BALANCER_VAULT; - address public immutable EMISSION_MANAGER; - - constructor(address claimer, address vault, address manager) { - CLAIMER = claimer; - BALANCER_VAULT = vault; - EMISSION_MANAGER = manager; - } - - function execute() external { - IEmissionManager(EMISSION_MANAGER).setClaimer(BALANCER_VAULT, CLAIMER); - } -} diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards.md b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards.md deleted file mode 100644 index 22ae032a2..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "Allow Balancer DAO to Claim Liquidity Mining Rewards (Arbitrum & Base)" -author: "@TokenLogic" -discussions: "https://governance.aave.com/t/arfc-whitelist-balancer-dao-to-claim-liquidity-mining-rewards-arbitrum-base/21280" ---- - -## Simple Summary - -This publication proposes allowing the Balancer DAO to claim liquidity mining rewards generated by Balancer v3 Boosted Pools through the Aave Protocol on Arbitrum and Base. - -## Motivation - -Following on from the earlier proposal, this publication includes additional addresses spanning Arbitrum and Base instances of Balancer v3. - -Recapping, this proposal enables the Balancer DAO to retrieve liquidity mining rewards from Boosted Pools for redistribution to users and the DAO. - -To facilitate this, Aave Protocol’s claimOnBehalfOf function allows designated addresses to claim rewards on behalf of smart contracts. - -Without assigning a specific address as the contract owner, these rewards cannot be claimed, leaving them inaccessible. - -## Specification - -Set Balancer contract `0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e` as the claimer (caller) on behalf of the Balancer v3 vault as the user `0xbA1333333333a1BA1108E8412f11850A5C319bA9`, on both Arbitrum and Base. - -## References - -- Implementation: [AaveV3Multi](https://github.com/bgd-labs/aave-proposals-v3/blob/7eda23327483a3ded404995ebc7963fde66bd967/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol) -- Tests: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7eda23327483a3ded404995ebc7963fde66bd967/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Arbitrum_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/7eda23327483a3ded404995ebc7963fde66bd967/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AaveV3Base_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-whitelist-balancer-dao-to-claim-liquidity-mining-rewards-arbitrum-base/21280) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol deleted file mode 100644 index ac0ca510c..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript, ArbitrumScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318} from './AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.sol'; - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - address public constant CLAIMER = 0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e; - address public constant BALANCER_VAULT = 0xbA1333333333a1BA1108E8412f11850A5C319bA9; - - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318).creationCode, - abi.encode(CLAIMER, BALANCER_VAULT, AaveV3Arbitrum.EMISSION_MANAGER) - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - address public constant CLAIMER = 0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e; - address public constant BALANCER_VAULT = 0xbA1333333333a1BA1108E8412f11850A5C319bA9; - - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318).creationCode, - abi.encode(CLAIMER, BALANCER_VAULT, AaveV3Base.EMISSION_MANAGER) - ); - - // 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/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards_20250318.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - address public constant CLAIMER = 0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e; - address public constant BALANCER_VAULT = 0xbA1333333333a1BA1108E8412f11850A5C319bA9; - - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318).creationCode, - abi.encode(CLAIMER, BALANCER_VAULT, AaveV3Arbitrum.EMISSION_MANAGER) - ); - payloads[0] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Multi_AllowBalancerDAOToClaimLiquidityMiningRewards_20250318).creationCode, - abi.encode(CLAIMER, BALANCER_VAULT, AaveV3Base.EMISSION_MANAGER) - ); - payloads[1] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/AllowBalancerDAOToClaimLiquidityMiningRewards.md' - ) - ); - } -} diff --git a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/config.ts b/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/config.ts deleted file mode 100644 index 9bf9ce89e..000000000 --- a/src/20250318_Multi_AllowBalancerDAOToClaimLiquidityMiningRewards/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Arbitrum', 'AaveV3Base'], - title: 'Allow Balancer DAO to Claim Liquidity Mining Rewards', - shortName: 'AllowBalancerDAOToClaimLiquidityMiningRewards', - date: '20250318', - author: '@TokenLogic', - discussion: - 'https://governance.aave.com/t/arfc-whitelist-balancer-dao-to-claim-liquidity-mining-rewards-arbitrum-base/21280', - snapshot: 'Direct-to-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 69199111}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 27755124}}, - }, -}; diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 3e2eadb1e..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Arbitrum.POOL, - AaveV3Arbitrum.COLLECTOR, - address(AaveV3Arbitrum.ORACLE), - AaveV3Arbitrum.DUST_BIN - ); - - IAccessControl(address(AaveV3Arbitrum.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Arbitrum.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 4d5245c3d..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; - -import {AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 319049030); - proposal = new AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Arbitrum.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Arbitrum.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Arbitrum.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Arbitrum.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Arbitrum.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Arbitrum.POOL, address(AaveV3Arbitrum.ORACLE), AaveV3Arbitrum.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index c8d501384..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; -import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {ReserveConfiguration} from 'aave-v3-origin/contracts/protocol/libraries/configuration/ReserveConfiguration.sol'; - -import {DustBinSender} from './DustBinSender.sol'; -import {Values} from './Values.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Avalanche.POOL, - AaveV3Avalanche.COLLECTOR, - address(AaveV3Avalanche.ORACLE), - AaveV3Avalanche.DUST_BIN - ); - - address[] memory reserves = AaveV2Avalanche.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - (address aToken, , ) = AaveV2Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - uint256 decimals = IERC20D(reserve).decimals(); - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - reserve, - address(AaveV2Avalanche.ORACLE), - decimals, - MIN_DOLLAR_VALUE - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Avalanche.DUST_BIN); - - if (balanceDustBin < tokenAmount) { - uint256 balanceCollector = IERC20(aToken).balanceOf(address(AaveV3Avalanche.COLLECTOR)); - if (balanceCollector > 0) { - uint256 toSend = tokenAmount - balanceDustBin; - AaveV3Avalanche.COLLECTOR.transfer( - IERC20(aToken), - AaveV3Avalanche.DUST_BIN, - balanceCollector >= toSend ? toSend : balanceCollector - ); - } - } - } - - IAccessControl(address(AaveV3Avalanche.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Avalanche.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index f73a5ebc3..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; -import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; -import {IPoolDataProvider, IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; -import {Values} from './Values.sol'; - -/** - * @dev Test for AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319_Test is - BalanceChecker -{ - AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('avalanche'), 58941868); - proposal = new AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Avalanche.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Avalanche.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Avalanche.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Avalanche.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Avalanche.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Avalanche.POOL, address(AaveV3Avalanche.ORACLE), AaveV3Avalanche.DUST_BIN); - } - - function test_allReservesHaveEnoughBalanceOnDustBinV2() public { - executePayload(vm, address(proposal)); - - TestBalance tester = new TestBalance(); - - address[] memory reserves = AaveV2Avalanche.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Avalanche.ORACLE)).getAssetPrice( - AaveV3AvalancheAssets.WETHe_UNDERLYING - ); - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - // Collector does not hold any balance - if (reserve == AaveV2AvalancheAssets.AAVEe_UNDERLYING) { - continue; - } - - (address aToken, , ) = AaveV2Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - (uint256 decimals, , , , , , , , , ) = AaveV2Avalanche - .AAVE_PROTOCOL_DATA_PROVIDER - .getReserveConfigurationData(reserve); - - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - reserve, - address(AaveV2Avalanche.ORACLE), - decimals, - 100, - ethPrice - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Avalanche.DUST_BIN); - - try tester.isGreaterThanOrEqual(balanceDustBin, tokenAmount) {} catch { - assertGt(balanceDustBin, 0, 'v2 aToken does not have greater than 0 balance in dust bin'); - } - } - } -} - -contract TestBalance is ProtocolV3TestBase { - function isGreaterThanOrEqual(uint256 balanceDustBin, uint256 minTokenAmount) public pure { - assertGe(balanceDustBin, minTokenAmount, 'a token does not have greater than $100 in dust bin'); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 86f33ee3b..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send(AaveV3BNB.POOL, AaveV3BNB.COLLECTOR, address(AaveV3BNB.ORACLE), AaveV3BNB.DUST_BIN); - - IAccessControl(address(AaveV3BNB.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3BNB.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 2bc048efd..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3BNB, AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol'; - -import {AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('bnb'), 47600798); - proposal = new AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3BNB.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3BNB.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3BNB.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3BNB.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3BNB.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3BNB.POOL, address(AaveV3BNB.ORACLE), AaveV3BNB.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 6b7e9fc2a..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send(AaveV3Base.POOL, AaveV3Base.COLLECTOR, address(AaveV3Base.ORACLE), AaveV3Base.DUST_BIN); - - IAccessControl(address(AaveV3Base.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Base.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 4406e8a90..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; - -import {AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=base forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 27797204); - proposal = new AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Base.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Base.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Base.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Base.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Base.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Base.POOL, address(AaveV3Base.ORACLE), AaveV3Base.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 3d3901d0e..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3EthereumLido.POOL, - AaveV3EthereumLido.COLLECTOR, - address(AaveV3EthereumLido.ORACLE), - AaveV3EthereumLido.DUST_BIN - ); - - // PoolExposureSteward access control granted on AaveV3Ethereum proposal - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 885c9aec9..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import {AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319_Test is - BalanceChecker -{ - AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22080648); - proposal = new AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances( - AaveV3EthereumLido.POOL, - address(AaveV3EthereumLido.ORACLE), - AaveV3EthereumLido.DUST_BIN - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 2bc8a9f51..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {Values} from './Values.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor -{ - uint256 public constant MIN_DOLLAR_VALUE = 100; - - function execute() external { - address[] memory reserves = AaveV3Ethereum.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - if (reserve == AaveV3EthereumAssets.GHO_UNDERLYING) { - continue; - } - - address aToken = AaveV3Ethereum.POOL.getReserveAToken(reserve); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - reserve, - address(AaveV3Ethereum.ORACLE), - decimals, - MIN_DOLLAR_VALUE - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Ethereum.DUST_BIN); - - if (balanceDustBin < tokenAmount) { - uint256 balanceCollector = IERC20(aToken).balanceOf(address(AaveV3Ethereum.COLLECTOR)); - - if (balanceCollector > 0) { - uint256 toSend = tokenAmount - balanceDustBin; - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(aToken), - AaveV3Ethereum.DUST_BIN, - balanceCollector >= toSend ? toSend : balanceCollector - ); - } - } - } - - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Ethereum.ORACLE)).getAssetPrice( - AaveV3EthereumAssets.WETH_UNDERLYING - ); - - reserves = AaveV2Ethereum.POOL.getReservesList(); - reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - // Cannot be transferred - if (reserve == AaveV2EthereumAssets.AMPL_UNDERLYING) { - continue; - } - - (address aToken, , ) = AaveV2Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - reserve, - address(AaveV2Ethereum.ORACLE), - decimals, - MIN_DOLLAR_VALUE, - ethPrice - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Ethereum.DUST_BIN); - - if (balanceDustBin < tokenAmount) { - uint256 balanceCollector = IERC20(aToken).balanceOf(address(AaveV3Ethereum.COLLECTOR)); - - if (balanceCollector > 0) { - uint256 toSend = tokenAmount - balanceDustBin; - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(aToken), - AaveV3Ethereum.DUST_BIN, - balanceCollector >= toSend ? toSend : balanceCollector - ); - } - } - } - - IAccessControl(address(AaveV3Ethereum.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Ethereum.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 9a1023d79..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,135 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IPoolDataProvider, IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; - -import {AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {Values} from './Values.sol'; - -/** - * @dev Test for AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319_Test is - ProtocolV3TestBase -{ - AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - TestBalance internal tester; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22080648); - proposal = new AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319(); - tester = new TestBalance(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Ethereum.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Ethereum.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Ethereum.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Ethereum.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBinV3() public { - executePayload(vm, address(proposal)); - - address[] memory reserves = AaveV3Ethereum.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - if (reserve == AaveV3EthereumAssets.GHO_UNDERLYING) { - continue; - } - - address aToken = AaveV3Ethereum.POOL.getReserveAToken(reserve); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - reserve, - address(AaveV3Ethereum.ORACLE), - decimals, - 100 - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Ethereum.DUST_BIN); - - try tester.isGreaterThanOrEqual(balanceDustBin, tokenAmount) {} catch { - assertGt(balanceDustBin, 0, 'v3 aToken does not have greater than 0 balance in dust bin'); - } - } - } - - function test_allReservesHaveEnoughBalanceOnDustBinV2() public { - executePayload(vm, address(proposal)); - - address[] memory reserves = AaveV2Ethereum.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Ethereum.ORACLE)).getAssetPrice( - AaveV3EthereumAssets.WETH_UNDERLYING - ); - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - if ( - reserve == AaveV2EthereumAssets.AAVE_UNDERLYING || - reserve == AaveV2EthereumAssets.AMPL_UNDERLYING || - reserve == AaveV2EthereumAssets.stETH_UNDERLYING - ) { - continue; - } - - (address aToken, , ) = AaveV2Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - reserve, - address(AaveV2Ethereum.ORACLE), - decimals, - 100, - ethPrice - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Ethereum.DUST_BIN); - - try tester.isGreaterThanOrEqual(balanceDustBin, tokenAmount) {} catch { - assertGt(balanceDustBin, 0, 'v2 aToken does not have greater than 0 balance in dust bin'); - } - } - } -} - -contract TestBalance is ProtocolV3TestBase { - function isGreaterThanOrEqual(uint256 balanceDustBin, uint256 minTokenAmount) public pure { - assertGe(balanceDustBin, minTokenAmount, 'a token does not have greater than $100 in dust bin'); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 1bca0c12c..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Linea} from 'aave-address-book/AaveV3Linea.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Linea.POOL, - AaveV3Linea.COLLECTOR, - address(AaveV3Linea.ORACLE), - AaveV3Linea.DUST_BIN - ); - - IAccessControl(address(AaveV3Linea.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Linea.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 0deb98f3a..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Linea, AaveV3LineaAssets} from 'aave-address-book/AaveV3Linea.sol'; - -import {AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=linea forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('linea'), 17122442); - proposal = new AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Linea.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Linea.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Linea.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Linea.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Linea.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Linea.POOL, address(AaveV3Linea.ORACLE), AaveV3Linea.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index abb146ea4..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Optimism.POOL, - AaveV3Optimism.COLLECTOR, - address(AaveV3Optimism.ORACLE), - AaveV3Optimism.DUST_BIN - ); - - IAccessControl(address(AaveV3Optimism.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Optimism.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 775c7a446..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; - -import {AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('optimism'), 133392643); - proposal = new AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Optimism.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Optimism.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Optimism.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Optimism.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Optimism.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Optimism.POOL, address(AaveV3Optimism.ORACLE), AaveV3Optimism.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index a9cd22ee8..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {DataTypes} from 'aave-v3-origin/contracts/protocol/libraries/types/DataTypes.sol'; -import {ReserveConfiguration} from 'aave-v3-origin/contracts/protocol/libraries/configuration/ReserveConfiguration.sol'; - -import {DustBinSender} from './DustBinSender.sol'; -import {Values} from './Values.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - using ReserveConfiguration for DataTypes.ReserveConfigurationMap; - - function execute() external { - send( - AaveV3Polygon.POOL, - AaveV3Polygon.COLLECTOR, - address(AaveV3Polygon.ORACLE), - AaveV3Polygon.DUST_BIN - ); - - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Polygon.ORACLE)).getAssetPrice( - AaveV3PolygonAssets.WETH_UNDERLYING - ); - - address[] memory reserves = AaveV2Polygon.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - (address aToken, , ) = AaveV2Polygon.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - uint256 decimals = IERC20D(reserve).decimals(); - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - reserve, - address(AaveV2Polygon.ORACLE), - decimals, - MIN_DOLLAR_VALUE, - ethPrice - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Polygon.DUST_BIN); - - if (balanceDustBin < tokenAmount) { - uint256 balanceCollector = IERC20(aToken).balanceOf(address(AaveV3Polygon.COLLECTOR)); - if (balanceCollector > 0) { - uint256 toSend = tokenAmount - balanceDustBin; - AaveV3Polygon.COLLECTOR.transfer( - IERC20(aToken), - AaveV3Polygon.DUST_BIN, - balanceCollector >= toSend ? toSend : balanceCollector - ); - } - } - } - - IAccessControl(address(AaveV3Polygon.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Polygon.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index c0642b1bc..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,112 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; -import {Values} from './Values.sol'; - -/** - * @dev Test for AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 69238268); - proposal = new AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Polygon.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Polygon.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Polygon.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Polygon.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Polygon.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Polygon.POOL, address(AaveV3Polygon.ORACLE), AaveV3Polygon.DUST_BIN); - } - - function test_allReservesHaveEnoughBalanceOnDustBinV2() public { - executePayload(vm, address(proposal)); - - TestBalance tester = new TestBalance(); - - address[] memory reserves = AaveV2Polygon.POOL.getReservesList(); - uint256 reservesLen = reserves.length; - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Polygon.ORACLE)).getAssetPrice( - AaveV3PolygonAssets.WETH_UNDERLYING - ); - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - - // Collector does not hold any balance - if ( - reserve == AaveV2PolygonAssets.AAVE_UNDERLYING || - reserve == AaveV2PolygonAssets.DPI_UNDERLYING || - reserve == AaveV2PolygonAssets.SUSHI_UNDERLYING - ) { - continue; - } - - (address aToken, , ) = AaveV2Polygon.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - reserve - ); - (uint256 decimals, , , , , , , , , ) = AaveV2Polygon - .AAVE_PROTOCOL_DATA_PROVIDER - .getReserveConfigurationData(reserve); - - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - reserve, - address(AaveV2Polygon.ORACLE), - decimals, - 100, - ethPrice - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(AaveV3Polygon.DUST_BIN); - - try tester.isGreaterThanOrEqual(balanceDustBin, tokenAmount) {} catch { - assertGt(balanceDustBin, 0, 'v2 aToken does not have greater than 0 balance in dust bin'); - } - } - } -} - -contract TestBalance is ProtocolV3TestBase { - function isGreaterThanOrEqual(uint256 balanceDustBin, uint256 minTokenAmount) public pure { - assertGe(balanceDustBin, minTokenAmount, 'a token does not have greater than $100 in dust bin'); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 18def79fb..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Scroll.POOL, - AaveV3Scroll.COLLECTOR, - address(AaveV3Scroll.ORACLE), - AaveV3Scroll.DUST_BIN - ); - - IAccessControl(address(AaveV3Scroll.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Scroll.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 740f822e3..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Scroll, AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; - -import {AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('scroll'), 14111144); - proposal = new AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Scroll.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Scroll.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Scroll.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Scroll.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Scroll.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Scroll.POOL, address(AaveV3Scroll.ORACLE), AaveV3Scroll.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol deleted file mode 100644 index 03ce31cf6..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {DustBinSender} from './DustBinSender.sol'; - -/** - * @title Finance Steward Deployment: Pool Exposure Module - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d - * - Discussion: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 - */ -contract AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319 is - IProposalGenericExecutor, - DustBinSender -{ - function execute() external { - send( - AaveV3Sonic.POOL, - AaveV3Sonic.COLLECTOR, - address(AaveV3Sonic.ORACLE), - AaveV3Sonic.DUST_BIN - ); - - IAccessControl(address(AaveV3Sonic.COLLECTOR)).grantRole( - 'FUNDS_ADMIN', - AaveV3Sonic.POOL_EXPOSURE_STEWARD - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol deleted file mode 100644 index 19c9c480f..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; -import {AaveV3Sonic, AaveV3SonicAssets} from 'aave-address-book/AaveV3Sonic.sol'; - -import {AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {BalanceChecker} from './BalanceChecker.sol'; - -/** - * @dev Test for AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319 - * command: FOUNDRY_PROFILE=sonic forge test --match-path=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol -vv - */ -contract AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319_Test is BalanceChecker { - AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('sonic'), 14619228); - proposal = new AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319', - AaveV3Sonic.POOL, - address(proposal) - ); - } - - function test_accessGranted() public { - assertFalse( - IAccessControl(address(AaveV3Sonic.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Sonic.POOL_EXPOSURE_STEWARD - ) - ); - - executePayload(vm, address(proposal)); - - assertTrue( - IAccessControl(address(AaveV3Sonic.COLLECTOR)).hasRole( - 'FUNDS_ADMIN', - AaveV3Sonic.POOL_EXPOSURE_STEWARD - ) - ); - } - - function test_allReservesHaveEnoughBalanceOnDustBin() public { - executePayload(vm, address(proposal)); - - assertBalances(AaveV3Sonic.POOL, address(AaveV3Sonic.ORACLE), AaveV3Sonic.DUST_BIN); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/BalanceChecker.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/BalanceChecker.sol deleted file mode 100644 index 3648e9ff0..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/BalanceChecker.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IPool} from 'aave-address-book/AaveV3.sol'; - -import {Values} from './Values.sol'; - -contract BalanceChecker is ProtocolV3TestBase { - function assertBalances(IPool pool, address oracle, address dustBin) internal { - TestBalance tester = new TestBalance(); - - address[] memory reserves = pool.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - address aToken = pool.getReserveAToken(reserve); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValue(reserve, oracle, decimals, 100); - uint256 balanceDustBin = IERC20(aToken).balanceOf(dustBin); - - try tester.isGreaterThanOrEqual(balanceDustBin, tokenAmount) {} catch { - assertGt(balanceDustBin, 0, 'a token does not have greater than 0 balance in dust bin'); - } - } - } -} - -contract TestBalance is ProtocolV3TestBase { - function isGreaterThanOrEqual(uint256 balanceDustBin, uint256 minTokenAmount) public pure { - assertGe(balanceDustBin, minTokenAmount, 'a token does not have greater than $100 in dust bin'); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/DustBinSender.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/DustBinSender.sol deleted file mode 100644 index 854ad0efe..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/DustBinSender.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20 as IERC20D} from 'forge-std/interfaces/IERC20.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IPool, ICollector} from 'aave-address-book/AaveV3.sol'; - -import {Values} from './Values.sol'; - -contract DustBinSender { - uint256 public constant MIN_DOLLAR_VALUE = 100; - - function send(IPool pool, ICollector collector, address oracle, address dustBin) internal { - address[] memory reserves = pool.getReservesList(); - uint256 reservesLen = reserves.length; - - for (uint256 i = 0; i < reservesLen; i++) { - address reserve = reserves[i]; - address aToken = pool.getReserveAToken(reserve); - uint256 decimals = IERC20D(reserve).decimals(); - - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - reserve, - oracle, - decimals, - MIN_DOLLAR_VALUE - ); - uint256 balanceDustBin = IERC20(aToken).balanceOf(dustBin); - - if (balanceDustBin < tokenAmount) { - uint256 balanceCollector = IERC20(aToken).balanceOf(address(collector)); - - if (balanceCollector > 0) { - uint256 toSend = tokenAmount - balanceDustBin; - collector.transfer( - IERC20(aToken), - dustBin, - balanceCollector >= toSend ? toSend : balanceCollector - ); - } - } - } - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule.md b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule.md deleted file mode 100644 index 00ce86825..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "Finance Steward Deployment: Pool Exposure Module" -author: "@TokenLogic" -discussions: https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495 -snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d ---- - -## Simple Summary - -This publication details the initial configuration of the [Aave Finance Steward](https://governance.aave.com/t/arfc-aave-finance-steward/17570/1) PoolExposure module. - -The Finance Steward role is comprised of a set of Modules (Smart Contracts) that provide approved signers with the ability to perform DAO approved actions such as swapping tokens or migrating assets from Aave V2 to Aave V3. - -## Motivation - -The Finance Steward modules enables the DAO to define a core set of financial capabilities to be carried out within strict role-based guardrails. As the role matures or new use cases arise, we plan to bring forward additional capabilities for the DAO to discuss. - -The initial set up of the Finance Steward includes deploying two separate modules (smart contracts), the PoolExposureSteward and the MainnetSwapSteward, this publication deploys the PoolExposureSteward smart contract across various chains. - -### PoolExposureModule - -#### Features - -The PoolExposureModule is granted permission to facilitate the following routine operational tasks: - -_Migrations_ - -- Withdraw assets from Aave V2 and deposit into Aave V3. -- Withdraw assets from a given Aave V3 pool and deposit into another Aave V3 pool (ie: Core to Prime). - -_Deposit Passive Assets_ - -- Deposit idle Collector funds into Aave V3. - -_Withdraw Assets_ - -- Withdraw funds from Aave V2 or Aave V3 into the Collector. - These funds can then be used for runway or to perform swaps where applicable. - -## Specification - -The PoolExposureSteward contracts have been deployed, across all chains, with the DAO as the owner of the contracts and the following SAFE acting as the guardian [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://app.safe.global/home?safe=eth:0x22740deBa78d5a0c24C58C740e3715ec29de1bFa). - -The SAFE is configured as a 3-out-of-4 multi-sig, and the signers for the SAFE are the following: - -Marc (AaveChan) - `0x329c54289Ff5D6B7b7daE13592C6B1EDA1543eD4` -Matt (TokenLogic) - `0xb647055A9915bF9c8021a684E175A353525b9890` -Chaos Labs - `0x5d49dBcdd300aECc2C311cFB56593E71c445d60d` -Val (LlamaRisk) - `0xbA037E4746ff58c55dc8F27a328C428F258DDACb` - -The PoolExposureModule will be deployed on the following chains, with the listed pools approved for interaction. - -| Network | Pools | -| --------- | ----------------------------- | -| Mainnet | V2, AMM V2, V3 Core, V3 Prime | -| Polygon | V2, V3 | -| Avalanche | V2, V3 | -| Optimism | V3 | -| Arbitrum | V3 | -| Scroll | V3 | -| Base | V3 | -| BNB | V3 | -| Gnosis | V3 | -| Sonic | V3 | -| Linea | V3 | - -For each pool, ~$100 worth of each reserve will be sent to the DustBinSteward contract. The DustBin is a special contract that, as the name implies, holds a dust amount of tokens. This is done to ensure that the pools are never emptied and the PoolExposure module can operate without having to worry about possibly emptying a given reserve. - -If the corresponding DustBin for a specific reserve holds about ~$100 worth of the token, then that token will not be transferred. If the DustBin does not yet have that token, the mentioned amount will be sent alongside this proposal. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Linea](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol), [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Linea](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol), [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/28abacb4b3002a4801b8f2336ab49cbdc5853e08/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.t.sol) - [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x1730ba3a2dd1f7b0b00cfae01b0c9f1bb7494b848c5de517275e2c72cf8c7b4d) -- [Discussion](https://governance.aave.com/t/arfc-aave-finance-steward-deployment/21495) -- PoolSteward Code and Review: [PoolSteward](https://github.com/bgd-labs/aave-stewards/blob/52bb008fffda95c0afc72d28560fe89625df07a4/src/finance/PoolExposureSteward.sol), [PoolStewardTests](https://github.com/bgd-labs/aave-stewards/blob/52bb008fffda95c0afc72d28560fe89625df07a4/tests/finance/PoolExposureSteward.t.sol), [CertoraReport](https://github.com/bgd-labs/aave-stewards/blob/main/audits/2025_02_16_PoolExposureSteward_Certora.pdf) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol deleted file mode 100644 index 6f05dbf9b..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol +++ /dev/null @@ -1,340 +0,0 @@ -// 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 {ChainIds, EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript, ScrollScript, BNBScript, LineaScript, SonicScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {GovernanceV3Linea} from 'aave-address-book/GovernanceV3Linea.sol'; -import {AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; -import {AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319} from './AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](2); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Scroll - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployScroll chain=scroll - * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/534352/run-latest.json - */ -contract DeployScroll is ScrollScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy BNB - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployBNB chain=bnb - * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/56/run-latest.json - */ -contract DeployBNB is BNBScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Linea - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeployLinea chain=linea - * verify-command: FOUNDRY_PROFILE=linea npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/59144/run-latest.json - */ -contract DeployLinea is LineaScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Linea_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Sonic - * deploy-command: make deploy-ledger contract=src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:DeploySonic chain=sonic - * verify-command: FOUNDRY_PROFILE=sonic npx catapulta-verify -b broadcast/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol/146/run-latest.json - */ -contract DeploySonic is SonicScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319).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/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule_20250319.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](2); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); - actionsScroll[0] = GovV3Helpers.buildAction( - type(AaveV3Scroll_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[6] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBNB[0] = GovV3Helpers.buildAction( - type(AaveV3BNB_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[7] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); - - uint40 lineaPayload = 6; - payloads[8] = PayloadsControllerUtils.Payload({ - chain: ChainIds.LINEA, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3Linea.PAYLOADS_CONTROLLER), - payloadId: lineaPayload - }); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsSonic = new IPayloadsControllerCore.ExecutionAction[](1); - actionsSonic[0] = GovV3Helpers.buildAction( - type(AaveV3Sonic_FinanceStewardDeploymentPoolExposureModule_20250319).creationCode - ); - payloads[9] = GovV3Helpers.buildSonicPayload(vm, actionsSonic); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/FinanceStewardDeploymentPoolExposureModule.md' - ) - ); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.sol deleted file mode 100644 index c8a1b3c04..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; - -library Values { - function getTokenAmountByDollarValue( - address underlying, - address oracle, - uint256 decimals, - uint256 dollarValue - ) internal view returns (uint256) { - dollarValue = decimals > 5 ? dollarValue : dollarValue * 10; - uint256 latestAnswer = IPriceOracleGetter(oracle).getAssetPrice(underlying); - return (dollarValue * 10 ** (8 + decimals)) / latestAnswer; - } - - function getTokenAmountByDollarValueEthOracle( - address underlying, - address oracle, - uint256 decimals, - uint256 dollarValue, - uint256 ethPrice - ) internal view returns (uint256) { - dollarValue = decimals > 5 ? dollarValue : dollarValue * 10; - uint256 latestAnswer = IPriceOracleGetter(oracle).getAssetPrice(underlying); - uint256 tokenUsdPrice = (latestAnswer * ethPrice) / (10 ** 18); - uint256 scaledDollarValue = dollarValue * (10 ** 8); - return (scaledDollarValue * (10 ** decimals)) / tokenUsdPrice; - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.t.sol b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.t.sol deleted file mode 100644 index f38af4bae..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/Values.t.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Test} from 'forge-std/Test.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IPriceOracleGetter} from 'aave-address-book/AaveV3.sol'; - -import {Values} from './Values.sol'; - -contract ValuesTest is Test { - uint256 public constant MIN_DOLLAR_VALUE = 100; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22139430); - } - - function test_getTokenAmountByDollarValue_18decimals() public view { - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - AaveV3EthereumAssets.BAL_UNDERLYING, - address(AaveV3Ethereum.ORACLE), - AaveV3EthereumAssets.BAL_DECIMALS, - MIN_DOLLAR_VALUE - ); - - // BAL/USD is ~1.48 on March 27, 2025 - // $100 worth of BAL is ~67.5 tokens - assertApproxEqAbs(tokenAmount, 67.5 ether, 1 ether); - } - - function test_getTokenAmountByDollarValue_6decimals() public view { - uint256 tokenAmount = Values.getTokenAmountByDollarValue( - AaveV3EthereumAssets.USDC_UNDERLYING, - address(AaveV3Ethereum.ORACLE), - AaveV3EthereumAssets.USDC_DECIMALS, - MIN_DOLLAR_VALUE - ); - - // USDC is ~$1, so $100 worth of USDC is around 100 tokens - assertApproxEqAbs(tokenAmount, 100e6, 1e6); - } - - function test_getTokenAmountByDollarValueEthOracle_18decimals() public view { - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Ethereum.ORACLE)).getAssetPrice( - AaveV3EthereumAssets.WETH_UNDERLYING - ); - - // BAL/USD is ~1.48 on March 27, 2025 - // $100 worth of BAL is ~67.5 tokens - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - AaveV2EthereumAssets.BAL_UNDERLYING, - address(AaveV2Ethereum.ORACLE), - AaveV2EthereumAssets.BAL_DECIMALS, - MIN_DOLLAR_VALUE, - ethPrice - ); - - assertApproxEqAbs(tokenAmount, 67.5 ether, 1 ether); - } - - function test_getTokenAmountByDollarValueEthOracle_6decimals() public view { - uint256 ethPrice = IPriceOracleGetter(address(AaveV3Ethereum.ORACLE)).getAssetPrice( - AaveV3EthereumAssets.WETH_UNDERLYING - ); - - // USDC is ~$1, so $100 worth of USDC is around 100 tokens - uint256 tokenAmount = Values.getTokenAmountByDollarValueEthOracle( - AaveV2EthereumAssets.USDC_UNDERLYING, - address(AaveV2Ethereum.ORACLE), - AaveV2EthereumAssets.USDC_DECIMALS, - MIN_DOLLAR_VALUE, - ethPrice - ); - - assertApproxEqAbs(tokenAmount, 100e6, 1e6); - } -} diff --git a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/config.ts b/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/config.ts deleted file mode 100644 index 1b057dec0..000000000 --- a/src/20250319_Multi_FinanceStewardDeploymentPoolExposureModule/config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: [ - 'AaveV3Ethereum', - 'AaveV3EthereumLido', - 'AaveV3Polygon', - 'AaveV3Avalanche', - 'AaveV3Optimism', - 'AaveV3Arbitrum', - 'AaveV3Base', - 'AaveV3Scroll', - 'AaveV3BNB', - 'AaveV3Linea', - 'AaveV3Sonic', - ], - title: 'Finance Steward Deployment: Pool Exposure Module', - shortName: 'FinanceStewardDeploymentPoolExposureModule', - date: '20250319', - author: '@TokenLogic', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22080648}}, - AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22080648}}, - AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 69238268}}, - AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 58941868}}, - AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 133392643}}, - AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 319049030}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 27797204}}, - AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 14111144}}, - AaveV3BNB: {configs: {OTHERS: {}}, cache: {blockNumber: 47600798}}, - AaveV3Linea: {configs: {OTHERS: {}}, cache: {blockNumber: 17122442}}, - AaveV3Sonic: {configs: {OTHERS: {}}, cache: {blockNumber: 14619228}}, - }, -}; diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 424f58c74..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Arbitrum.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 87e21d9e7..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 317703533); - proposal = new AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Arbitrum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index b203cd762..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Avalanche.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 8a1d240a6..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('avalanche'), 58995903); - proposal = new AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Avalanche.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 08e8034b9..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3BNB.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 3c7335466..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('bnb'), 47633872); - proposal = new AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3BNB.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 8dc8c1b29..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - IRiskSteward(AaveV3Base.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 316cb0bbc..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=base forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 27846092); - proposal = new AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Base.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 17ee12738..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Celo} from 'aave-address-book/AaveV3Celo.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Celo.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 92ec38360..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Celo} from 'aave-address-book/AaveV3Celo.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=celo forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('celo'), 30976502); - proposal = new AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Celo.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 320b6034a..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumEtherFi} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320 is - IProposalGenericExecutor -{ - function execute() external { - // custom code goes here - IRiskSteward(AaveV3EthereumEtherFi.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 7d9105d2f..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumEtherFi} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320_Test is - ProtocolV3TestBase -{ - AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22088870); - proposal = new AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3EthereumEtherFi.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index e2e9fa495..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - IRiskSteward(AaveV3EthereumLido.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 9f9996474..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22088870); - proposal = new AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 8e02af481..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - IRiskSteward(AaveV3Ethereum.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index d8be0e4a3..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,31 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22088870); - proposal = new AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index e4f78bd53..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Gnosis.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index b4a841c90..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('gnosis'), 39148376); - proposal = new AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Gnosis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index ab0eeca37..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Linea} from 'aave-address-book/AaveV3Linea.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Linea.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index e84716d1a..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Linea} from 'aave-address-book/AaveV3Linea.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=linea forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('linea'), 17166485); - proposal = new AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Linea.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 9363813e5..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Metis.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 76aad5068..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('metis'), 19964518); - proposal = new AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Metis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 7116d258c..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Optimism.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 08051d856..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('optimism'), 133478975); - proposal = new AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Optimism.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 4fed9cc8b..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Polygon.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 817a889cb..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 69284452); - proposal = new AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Polygon.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index fcef99276..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Scroll.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 66da97eeb..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('scroll'), 14131490); - proposal = new AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Scroll.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 147d2270e..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from './GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3Sonic.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 64cc00a64..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=sonic forge test --match-path=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('sonic'), 14853533); - proposal = new AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3Sonic.POOL, - address(proposal) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/GetRiskConfig.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/GetRiskConfig.sol deleted file mode 100644 index 286e8439c..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/GetRiskConfig.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; - -library GetRiskConfig { - function _getRiskConfig() internal pure returns (IRiskSteward.Config memory) { - return - IRiskSteward.Config({ - ltv: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 50}), - liquidationThreshold: IRiskSteward.RiskParamConfig({ - minDelay: 3 days, - maxPercentChange: 50 - }), - liquidationBonus: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 50}), - supplyCap: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 100_00}), - borrowCap: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 100_00}), - debtCeiling: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 20_00}), - baseVariableBorrowRate: IRiskSteward.RiskParamConfig({ - minDelay: 3 days, - maxPercentChange: 1_00 - }), - variableRateSlope1: IRiskSteward.RiskParamConfig({ - minDelay: 3 days, - maxPercentChange: 1_00 - }), - variableRateSlope2: IRiskSteward.RiskParamConfig({ - minDelay: 3 days, - maxPercentChange: 20_00 - }), - optimalUsageRatio: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 3_00}), - priceCapLst: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 5_00}), - priceCapStable: IRiskSteward.RiskParamConfig({minDelay: 3 days, maxPercentChange: 50}) - }); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3.md b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3.md deleted file mode 100644 index b1af8cf75..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: "Risk Steward Parameter Updates Phase 3" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff" ---- - -## Simple Summary - -This proposal aims to update the Risk Steward parameters to enhance the efficiency of risk parameter management and reduce governance overhead. - -## Motivation - -The Risk Steward mechanism has proven to be an effective tool for managing risk parameters without requiring full governance proposals. After several months of successful operation, we propose updating the parameters to allow for more responsive risk management while maintaining appropriate safety constraints. - -Technical service providers spend significant time reviewing risk parameter update AIPs, which could be more efficiently handled through the Risk Steward mechanism. With well-defined processes in place and months of successful operation, we can safely expand the scope of parameter adjustments allowed through this system. - -## Specification - -| Parameter | Current | Proposed | -| ------------------------- | -------------- | ------------- | -| Supply & Borrow Caps | 100% relative | (no change) | -| Debt Ceiling | 20% relative | (no change) | -| LST Cap adapter params | 5% relative | (no change) | -| Stable price cap | 0.5% relative | (no change) | -| Base Variable Borrow Rate | 0.5% absolute | 1% absolute | -| Slope 1 | 0.5% absolute | 1% absolute | -| Slope 2 | 5% absolute | 20% absolute | -| Optimal Point (Kink) | 3% absolute | (no change) | -| Loan to Value (LTV) | 0.25% absolute | 0.5% absolute | -| Liquidation Threshold | 0.25% absolute | 0.5% absolute | -| Liquidation Bonus | 0.5% absolute | (no change) | - -(no change to minimum delay) - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Linea](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol), [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Linea](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.t.sol), [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/16997d9caf7e65990c97b6f9afe31399a3e7423a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff) -- [Discussion](https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol deleted file mode 100644 index c6255fbfa..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol +++ /dev/null @@ -1,450 +0,0 @@ -// 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 {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; -import {GovernanceV3Linea} from 'aave-address-book/GovernanceV3Linea.sol'; -import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, GnosisScript, BaseScript, ScrollScript, BNBScript, LineaScript, CeloScript, SonicScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320.sol'; -import {AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - address payload2 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](3); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - actions[2] = GovV3Helpers.buildAction(payload2); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Metis - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployMetis chain=metis - * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/1088/run-latest.json - */ -contract DeployMetis is MetisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/100/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Scroll - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployScroll chain=scroll - * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/534352/run-latest.json - */ -contract DeployScroll is ScrollScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy BNB - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployBNB chain=bnb - * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/56/run-latest.json - */ -contract DeployBNB is BNBScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Linea - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployLinea chain=linea - * verify-command: FOUNDRY_PROFILE=linea npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/59144/run-latest.json - */ -contract DeployLinea is LineaScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Linea_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Celo - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployCelo chain=celo - * verify-command: FOUNDRY_PROFILE=celo npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/42220/run-latest.json - */ -contract DeployCelo is CeloScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Sonic - * deploy-command: make deploy-ledger contract=src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeploySonic chain=sonic - * verify-command: FOUNDRY_PROFILE=sonic npx catapulta-verify -b broadcast/RiskStewardParameterUpdatesPhase3_20250320.s.sol/146/run-latest.json - */ -contract DeploySonic is SonicScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320).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/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function _getPayload() internal returns (PayloadsControllerUtils.Payload[] memory) { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](14); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](3); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - actionsEthereum[2] = GovV3Helpers.buildAction( - type(AaveV3EthereumEtherFi_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsMetis[0] = GovV3Helpers.buildAction( - type(AaveV3Metis_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[7] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); - actionsScroll[0] = GovV3Helpers.buildAction( - type(AaveV3Scroll_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[8] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBNB[0] = GovV3Helpers.buildAction( - type(AaveV3BNB_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[9] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsCelo = new IPayloadsControllerCore.ExecutionAction[](1); - actionsCelo[0] = GovV3Helpers.buildAction( - type(AaveV3Celo_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[10] = GovV3Helpers.buildCeloPayload(vm, actionsCelo); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsSonic = new IPayloadsControllerCore.ExecutionAction[](1); - actionsSonic[0] = GovV3Helpers.buildAction( - type(AaveV3Sonic_RiskStewardParameterUpdatesPhase3_20250320).creationCode - ); - payloads[11] = GovV3Helpers.buildSonicPayload(vm, actionsSonic); - - payloads[12] = PayloadsControllerUtils.Payload({ - chain: ChainIds.ZKSYNC, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3ZkSync.PAYLOADS_CONTROLLER), - payloadId: 20 - }); - - payloads[13] = PayloadsControllerUtils.Payload({ - chain: ChainIds.LINEA, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3Linea.PAYLOADS_CONTROLLER), - payloadId: 8 - }); - - return payloads; - } - - function run() external { - PayloadsControllerUtils.Payload[] memory payloads = _getPayload(); - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3.md' - ) - ); - } -} diff --git a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/config.ts b/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/config.ts deleted file mode 100644 index 7a1b75799..000000000 --- a/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/config.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250320_Multi_RiskStewardParameterUpdatesPhase3/config.ts', - author: 'Aave-Chan Initiative', - title: 'Risk Steward Parameter Updates Phase 3', - discussion: 'https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff', - pools: [ - 'AaveV3Ethereum', - 'AaveV3EthereumLido', - 'AaveV3EthereumEtherFi', - 'AaveV3Polygon', - 'AaveV3Avalanche', - 'AaveV3Optimism', - 'AaveV3Arbitrum', - 'AaveV3Metis', - 'AaveV3Gnosis', - 'AaveV3Base', - 'AaveV3Scroll', - 'AaveV3BNB', - 'AaveV3ZkSync', - 'AaveV3Linea', - 'AaveV3Celo', - 'AaveV3Sonic', - ], - shortName: 'RiskStewardParameterUpdatesPhase3', - date: '20250320', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22088870}}, - AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22088870}}, - AaveV3EthereumEtherFi: {configs: {OTHERS: {}}, cache: {blockNumber: 22088870}}, - AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 69284452}}, - AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 58995903}}, - AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 133442259}}, - AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 317703533}}, - AaveV3Metis: {configs: {OTHERS: {}}, cache: {blockNumber: 19964518}}, - AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 39133948}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 27846092}}, - AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 14131490}}, - AaveV3BNB: {configs: {OTHERS: {}}, cache: {blockNumber: 47633872}}, - AaveV3ZkSync: {configs: {OTHERS: {}}, cache: {blockNumber: 57957473}}, - AaveV3Linea: {configs: {OTHERS: {}}, cache: {blockNumber: 17166485}}, - AaveV3Celo: {configs: {OTHERS: {}}, cache: {blockNumber: 30961744}}, - AaveV3Sonic: {configs: {OTHERS: {}}, cache: {blockNumber: 14853533}}, - }, -}; diff --git a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol b/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol deleted file mode 100644 index 78f4b5670..000000000 --- a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Onboard eBTC and Add eBTC/WBTC E-Mode - * @author ACI - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x564a45f0a2855799d9be329942fa1f5e849058ff4b950f4027ec4666f4b61d9c - * - Discussion: https://governance.aave.com/t/arfc-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/20141 - */ -contract AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant eBTC = 0x657e8C867D8B37dCC18fA4Caead9C45EB088C642; - uint256 public constant eBTC_SEED_AMOUNT = 2e5; - address public constant eBTC_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(eBTC).forceApprove(address(AaveV3Ethereum.POOL), eBTC_SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(eBTC, eBTC_SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aeBTC = AaveV3Ethereum.POOL.getReserveAToken(eBTC); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(eBTC, eBTC_LM_ADMIN); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aeBTC, eBTC_LM_ADMIN); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 7, - ltv: 83_00, - liqThreshold: 85_00, - liqBonus: 3_00, - label: 'eBTC/WBTC' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: eBTC, - eModeCategory: 7, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.WBTC_UNDERLYING, - eModeCategory: 7, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: eBTC, - assetSymbol: 'eBTC', - priceFeed: 0x95a85D0d2f3115702d813549a80040387738A430, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 67_00, - liqThreshold: 72_00, - liqBonus: 10_00, - reserveFactor: 50_00, - supplyCap: 750, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 4_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.t.sol b/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.t.sol deleted file mode 100644 index 36904458c..000000000 --- a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324} from './AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol'; - -/** - * @dev Test for AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.t.sol -vv - */ -contract AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324_Test is ProtocolV3TestBase { - AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22116242); - proposal = new AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHaseBTCFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.eBTC()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 2 * 10 ** 5); - } - - function test_eBTCAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aeBTC = AaveV3Ethereum.POOL.getReserveAToken(proposal.eBTC()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.eBTC()), - proposal.eBTC_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aeBTC), - proposal.eBTC_LM_ADMIN() - ); - } -} diff --git a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode.md b/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode.md deleted file mode 100644 index c6055d896..000000000 --- a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: "Onboard eBTC and Add eBTC/WBTC E-Mode" -author: "ACI" -discussions: "https://governance.aave.com/t/arfc-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/20141" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0x564a45f0a2855799d9be329942fa1f5e849058ff4b950f4027ec4666f4b61d9c" ---- - -## Simple Summary - -This proposal aims to onboard eBTC for the Core Instance, and add a WBTC liquid E-Mode. By implementing this change, we seek to enhance capital efficiency for borrowers using eBTC/WBTC as collateral. - -Both [TEMP CHECK](https://governance.aave.com/t/temp-check-onboard-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/19969) and [TEMP CHECK Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x60c360b61812b9ae96b2f785f9fca7a5461ab45e295f55a695638aef18d96d50) have passed recently. - -## Motivation - -The motivation behind this proposal stems from several key factors: - -- High Utilization: eBTC/WBTC has demonstrated significant usage as collateral for borrowing stablecoins on the platform. -- Capital Efficiency: Enabling liquid E-Mode for eBTC/WBTC will allow borrowers to substantially improve their capital efficiency when using this asset as collateral. -- Controlled Growth: Liquid E-Mode provides a mechanism for more precise control over the growth and borrow demand in relation to the overall stablecoin liquidity within Aave v3 on Core Instance. -- Enhanced Borrowing Capacity: This change will enable users to borrow larger amounts of other stablecoins against their eBTC/WBTC collateral, potentially increasing platform utilization and revenue. - -By implementing this proposal, we aim to optimize the use of eBTC/WBTC within the Aave ecosystem, attracting more liquidity. - -## Specification - -The table below illustrates the configured risk parameters for **eBTC** - -| Parameter | Value | -| ------------------------ | ------------------------------------------ | -| Network | Ethereum | -| Isolation Mode | No | -| Borrowable | No | -| Collateral Enabled | Yes | -| Supply Cap | 750 | -| Borrow Cap | 1 | -| Debt Ceiling | 0 | -| LTV | 67% | -| LT | 72% | -| Liquidation Bonus | 10% | -| Liquidation Protocol Fee | 10% | -| Variable Base | 0% | -| Variable Slope1 | 4% | -| Variable Slope2 | 300% | -| Uoptimal | 45% | -| Reserve Factor | 50% | -| Flashloanable | No | -| Siloed Borrowing | No | -| Oracle | 0x95a85D0d2f3115702d813549a80040387738A430 | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for eBTC and the corresponding aToken. - -Finally, this proposal will add eBTC/WBTC liquid E-Mode - -| Parameter | Value | Value | -| --------------------- | ----- | ----- | -| Asset | eBTC | WBTC | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| Max LTV | 83% | - | -| Liquidation Threshold | 85% | - | -| Liquidation Bonus | 3.0% | - | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bac3765e64971b2394c6ad263899da3be32514b9/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bac3765e64971b2394c6ad263899da3be32514b9/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x564a45f0a2855799d9be329942fa1f5e849058ff4b950f4027ec4666f4b61d9c) -- [Discussion](https://governance.aave.com/t/arfc-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/20141) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode_20250324.s.sol b/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode_20250324.s.sol deleted file mode 100644 index 2f3c0bdd1..000000000 --- a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode_20250324.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_OnboardEBTCAndAddEBTCWBTCEMode_20250324} from './AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode_20250324.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardEBTCAndAddEBTCWBTCEMode_20250324.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode_20250324).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/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode_20250324.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_OnboardEBTCAndAddEBTCWBTCEMode_20250324).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/OnboardEBTCAndAddEBTCWBTCEMode.md' - ) - ); - } -} diff --git a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/config.ts b/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/config.ts deleted file mode 100644 index df7ac72f3..000000000 --- a/src/20250324_AaveV3Ethereum_OnboardEBTCAndAddEBTCWBTCEMode/config.ts +++ /dev/null @@ -1,66 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'Onboard eBTC and Add eBTC/WBTC E-Mode', - shortName: 'OnboardEBTCAndAddEBTCWBTCEMode', - date: '20250324', - author: 'ACI', - discussion: - 'https://governance.aave.com/t/arfc-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/20141', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0x564a45f0a2855799d9be329942fa1f5e849058ff4b950f4027ec4666f4b61d9c', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - EMODES_UPDATES: [ - {eModeCategory: 7, ltv: '83', liqThreshold: '85', liqBonus: '3', label: 'eBTC/WBTC'}, - ], - EMODES_ASSETS: [ - { - asset: 'WETH', - eModeCategory: 'AaveV3EthereumEModes.SUSDE_STABLECOINS', - collateral: 'ENABLED', - borrowable: 'DISABLED', - }, - { - asset: 'WBTC', - eModeCategory: 'AaveV3EthereumEModes.SUSDE_STABLECOINS', - collateral: 'DISABLED', - borrowable: 'ENABLED', - }, - ], - ASSET_LISTING: [ - { - assetSymbol: 'eBTC', - decimals: 8, - priceFeed: '0x95a85D0d2f3115702d813549a80040387738A430', - ltv: '67', - liqThreshold: '72', - liqBonus: '10', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '50', - supplyCap: '80', - borrowCap: '8', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '4', - variableRateSlope2: '300', - }, - asset: '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 22116242}, - }, - }, -}; diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol deleted file mode 100644 index 64ea42879..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; -import {OrbitProgramRenewalData} from './OrbitProgramRenewalData.sol'; -/** - * @title Orbit Program Renewal - * @author Aave-Chan Initiative - * - Snapshot: https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205 - * - Discussion: https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205 - */ -contract AaveV3EthereumLido_OrbitProgramRenewal_20250325 is IProposalGenericExecutor { - function execute() external { - address[] memory orbitAddresses = OrbitProgramRenewalData.getOrbitAddresses(); - - for (uint256 i = 0; i < orbitAddresses.length; i++) { - CollectorUtils.stream( - AaveV3EthereumLido.COLLECTOR, - CollectorUtils.CreateStreamInput({ - underlying: AaveV3EthereumLidoAssets.GHO_A_TOKEN, - receiver: orbitAddresses[i], - amount: OrbitProgramRenewalData.STREAM_AMOUNT, - start: block.timestamp, - duration: OrbitProgramRenewalData.STREAM_DURATION - }) - ); - } - } -} diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.t.sol b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.t.sol deleted file mode 100644 index 4064cdc5a..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.t.sol +++ /dev/null @@ -1,180 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_OrbitProgramRenewal_20250325} from './AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {OrbitProgramRenewalData} from './OrbitProgramRenewalData.sol'; - -/** - * @dev Test for AaveV3EthereumLido_OrbitProgramRenewal_20250325 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.t.sol -vv - */ -contract AaveV3EthereumLido_OrbitProgramRenewal_20250325_Test is ProtocolV3TestBase { - AaveV3EthereumLido_OrbitProgramRenewal_20250325 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22124480); - proposal = new AaveV3EthereumLido_OrbitProgramRenewal_20250325(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_OrbitProgramRenewal_20250325', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } - - function test_wholeProcess() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - uint256[] memory ghoBalancesBeforeUsers = new uint256[](4); - address[] memory ghoPaymentAddresses = OrbitProgramRenewalData.getOrbitAddresses(); - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - ghoBalancesBeforeUsers[i] = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - } - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 91 days); - - uint256[] memory aGHOInterest = new uint256[](4); - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - aGHOInterest[i] = - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(ghoPaymentAddresses[i]) - - ghoBalancesBeforeUsers[i]; - } - // Stream transfers - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId + i, - ghoPaymentAddresses[i] - ); - - assertApproxEqRel( - finalBalanceToWithdraw, - OrbitProgramRenewalData.STREAM_AMOUNT, - maxDeltaStreamBalance, - 'GHO Stream final balance is not correct' - ); - - vm.prank(ghoPaymentAddresses[i]); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId + i, finalBalanceToWithdraw); - assertApproxEqRel( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(ghoPaymentAddresses[i]), - ghoBalancesBeforeUsers[i] + OrbitProgramRenewalData.STREAM_AMOUNT + aGHOInterest[i], - maxDeltaStreamBalance, - 'GHO Stream final withdraw is not correct' - ); - } - } - - function test_directTransfer() public { - uint256[] memory ghoBalancesBeforeUsers = new uint256[](4); - address[] memory ghoPaymentAddresses = OrbitProgramRenewalData.getOrbitAddresses(); - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - ghoBalancesBeforeUsers[i] = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - } - - executePayload(vm, address(proposal)); - - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - assertEq( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(ghoPaymentAddresses[i]), - ghoBalancesBeforeUsers[i], - 'GHO balance of Orbit recipient is not greater than before' - ); - } - } - - function test_streamBalance() public { - address[] memory ghoPaymentAddresses = OrbitProgramRenewalData.getOrbitAddresses(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 1 days); - - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - - vm.prank(ghoPaymentAddresses[i]); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId + i, 1); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - - assertEq(ghoBalanceAfter, ghoBalanceBefore + 1); - } - } - - function test_streamEndBalance() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - address[] memory ghoPaymentAddresses = OrbitProgramRenewalData.getOrbitAddresses(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 91 days); - - for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId + i, - ghoPaymentAddresses[i] - ); - - assertApproxEqRel( - finalBalanceToWithdraw, - OrbitProgramRenewalData.STREAM_AMOUNT, - maxDeltaStreamBalance - ); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - - vm.prank(ghoPaymentAddresses[i]); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId + i, finalBalanceToWithdraw); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses[i] - ); - - assertApproxEqRel( - ghoBalanceAfter, - ghoBalanceBefore + OrbitProgramRenewalData.STREAM_AMOUNT, - maxDeltaStreamBalance - ); - } - } -} diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal.md b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal.md deleted file mode 100644 index 9511195f0..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Orbit Program Renewal" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205" -snapshot: "https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205" ---- - -## Simple Summary - -Proposing the renewal of the Orbit program for recognized delegates, compensating them with GHO, associated with their governance activity during Q1 2025 ( From 2024-12-14, last date, until 2025-03-31). - -## Motivation - -Orbit recognizes the added value of the Delegates in the decentralization & diversity of the Aave DAO. This compensation allows them to focus on Aave and keep their contribution efforts to our governance. The ACI proposes the extension of Orbit for a new quarter, Q1 2025, from 2024-12-14 to 2025-03-31. - -From now on, all renews will be applied strictly by Quarters, and a new cutoff has been set on [AIP 224](https://vote.onaave.com/proposal/?proposalId=224&ipfsHash=0xa4da1c686491e35541aa7e2659d55d0b93e395a89d1b268981aec3b8b2227bc1), to apply again previous rules of a minimum of 20k voting power and 85% vote ratio on all Snapshots and AIP to be considered elegible to Orbit. - -## Specification - -- **Period Coverage:** Q1 2025 from December 14th 2024 to March 31st 2025 -- **Eligible Platforms:** -- EzR3al: [0x8659d0bb123da6d16d9394c7838ba286c2207d0e](https://etherscan.io/address/0x8659d0bb123da6d16d9394c7838ba286c2207d0e) -- areta: [0x8b37a5af68d315cf5a64097d96621f64b5502a22](https://etherscan.io/address/0x8b37a5af68d315cf5a64097d96621f64b5502a22) -- stablelabs: [0xecc2a9240268bc7a26386ecb49e1befca2706ac9](https://etherscan.io/address/0xecc2a9240268bc7a26386ecb49e1befca2706ac9) -- IgnasDefi: [0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0](https://etherscan.io/address/0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0) -- **Budget:** 60,000 GHO (aEthLidoGHO) -- 15k total budget per platform -- 15000 aGHO stream through 90 days -- **Relevant Links:** -- [ACI’s Orbit tracker](https://dapps.aavechan.com/orbit-tracker) - -**Additional considerations:** - -As a reminder, Service Providers will not be considered elegible to Orbit Program. - -A new vote rate cutoff will apply, starting next Orbit Renewal, where a minimum of 20k voting power and 85% vote ratio on all Snapshots and AIP will be considered in order to be elegible to Orbit Program, from [AIP 224](https://vote.onaave.com/proposal/?proposalId=224&ipfsHash=0xa4da1c686491e35541aa7e2659d55d0b93e395a89d1b268981aec3b8b2227bc1). - -Funds are distributed based on 90 days, as seen on budget. - -## References - -- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/7dec14926b6ff35e70cee61ccd091ae8b4af10ee/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol) -- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/7dec14926b6ff35e70cee61ccd091ae8b4af10ee/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/AaveV3EthereumLido_OrbitProgramRenewal_20250325.t.sol) -- [Snapshot](https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205) -- [Discussion](https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewalData.sol b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewalData.sol deleted file mode 100644 index b886c1464..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewalData.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -library OrbitProgramRenewalData { - // stream information - uint256 public constant STREAM_DURATION = 90 days; - // budgets (total budget: 15,000 GHO) - uint256 public constant STREAM_AMOUNT = 15000 ether; - // stream receivers - address public constant EZREAL = 0x8659D0BB123Da6D16D9394C7838BA286c2207d0E; - address public constant ARETA = 0x8b37a5Af68D315cf5A64097D96621F64b5502a22; - address public constant STABLE_LABS = 0xECC2a9240268BC7a26386ecB49E1Befca2706AC9; - address public constant IGNAS_DEFI = 0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0; - - function getOrbitAddresses() internal pure returns (address[] memory) { - address[] memory streamAddresses = new address[](4); - streamAddresses[0] = EZREAL; - streamAddresses[1] = ARETA; - streamAddresses[2] = STABLE_LABS; - streamAddresses[3] = IGNAS_DEFI; - - return streamAddresses; - } -} diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal_20250325.s.sol b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal_20250325.s.sol deleted file mode 100644 index 5eae214d1..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal_20250325.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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 {AaveV3EthereumLido_OrbitProgramRenewal_20250325} from './AaveV3EthereumLido_OrbitProgramRenewal_20250325.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal_20250325.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OrbitProgramRenewal_20250325.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_OrbitProgramRenewal_20250325).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/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal_20250325.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(AaveV3EthereumLido_OrbitProgramRenewal_20250325).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/OrbitProgramRenewal.md' - ) - ); - } -} diff --git a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/config.ts b/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/config.ts deleted file mode 100644 index d1f0a1ba9..000000000 --- a/src/20250325_AaveV3EthereumLido_OrbitProgramRenewal/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3EthereumLido'], - title: 'Orbit Program Renewal', - shortName: 'OrbitProgramRenewal', - date: '20250325', - discussion: 'https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205', - snapshot: 'https://governance.aave.com/t/arfc-orbit-program-renewal-q1-2025/21205', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22124480}}}, -}; diff --git a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol b/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol deleted file mode 100644 index eac7a61de..000000000 --- a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol +++ /dev/null @@ -1,107 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Onboard rsETH to Arbitrum - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x598f7057f445813d75404fae68f3501d76c90064f52ca4b9afb6f20859fa2658 - * - Discussion: https://governance.aave.com/t/arfc-onboard-rseth-to-arbitrum-and-base-v3-instances/20741 - */ -contract AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326 is AaveV3PayloadArbitrum { - using SafeERC20 for IERC20; - - address public constant rsETH = 0x4186BFC76E2E237523CBC30FD220FE055156b41F; - uint256 public constant rsETH_SEED_AMOUNT = 35e15; - address public constant rsETH_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(rsETH).forceApprove(address(AaveV3Arbitrum.POOL), rsETH_SEED_AMOUNT); - AaveV3Arbitrum.POOL.supply(rsETH, rsETH_SEED_AMOUNT, AaveV3Arbitrum.DUST_BIN, 0); - - address arsETH = AaveV3Arbitrum.POOL.getReserveAToken(rsETH); - IEmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).setEmissionAdmin(rsETH, rsETH_LM_ADMIN); - IEmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).setEmissionAdmin(arsETH, rsETH_LM_ADMIN); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 5, - ltv: 92_50, - liqThreshold: 94_50, - liqBonus: 1_00, - label: 'rsETH wstETH' - }); - - return eModeUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.wstETH_UNDERLYING, - eModeCategory: 5, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: rsETH, - eModeCategory: 5, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - - return assetEModeUpdates; - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: rsETH, - assetSymbol: 'rsETH', - priceFeed: 0xb4B0cbcA864c2Eb0C0342608D92490C034aC1089, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 20_00, - supplyCap: 900, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.t.sol b/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.t.sol deleted file mode 100644 index 31797ec38..000000000 --- a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326} from './AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol'; - -/** - * @dev Test for AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.t.sol -vv - */ -contract AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326_Test is ProtocolV3TestBase { - AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 319859244); - proposal = new AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326', - AaveV3Arbitrum.POOL, - address(proposal) - ); - } - - function test_dustBinHasrsETHFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Arbitrum.POOL.getReserveAToken(proposal.rsETH()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Arbitrum.DUST_BIN)), 35 * 10 ** 15); - } - - function test_rsETHAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address arsETH = AaveV3Arbitrum.POOL.getReserveAToken(proposal.rsETH()); - assertEq( - IEmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).getEmissionAdmin(proposal.rsETH()), - proposal.rsETH_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).getEmissionAdmin(arsETH), - proposal.rsETH_LM_ADMIN() - ); - } -} diff --git a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum.md b/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum.md deleted file mode 100644 index 641f4aec2..000000000 --- a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: " Onboard rsETH to Arbitrum" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-onboard-rseth-to-arbitrum-and-base-v3-instances/20741" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0x598f7057f445813d75404fae68f3501d76c90064f52ca4b9afb6f20859fa2658" ---- - -## Simple Summary - -This is an ARFC to onboard rsETH to the Aave V3 Arbitrum. - -## Motivation - -rsETH has seen continued growth across networks, and is currently the only of the onboarded LRT not available on Arbitrum. We expect further growth of this asset with onboarding to this networks. Arbitrum has one of the largest wstETH reserves of any Aave instance. We suggest to onboard rsETH with similar parameters to ezETH and corresponding E-Modes for rsETH / wstETH and rsETH / stablecoins. - -## Specification - -The table below illustrates the configured risk parameters for **rsETH** - -| Parameter | Value | -| ------------------------- | -----------------------------------------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (rsETH) | 900 | -| Borrow Cap (rsETH) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 20 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | 0xb4B0cbcA864c2Eb0C0342608D92490C034aC1089 | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://arbiscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for rsETH and the corresponding aToken. - -### rsETH/wstETH E-Mode on Arbitrum & Base - -| Parameter | Value | Value | -| ------------------- | ------ | ------ | -| Asset | rsETH | wstETH | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| LTV | 92.50% | - | -| LT | 94.50% | - | -| Liquidation Penalty | 1.00% | - | - -## References - -- Implementation: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7141371049e4fff65c91e768e881d93ed0265f64/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol) -- Tests: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7141371049e4fff65c91e768e881d93ed0265f64/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0x598f7057f445813d75404fae68f3501d76c90064f52ca4b9afb6f20859fa2658) -- [Discussion](https://governance.aave.com/t/arfc-onboard-rseth-to-arbitrum-and-base-v3-instances/20741) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum_20250326.s.sol b/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum_20250326.s.sol deleted file mode 100644 index dc09f57a2..000000000 --- a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum_20250326.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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, ArbitrumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326} from './AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326.sol'; - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum_20250326.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/OnboardRsETHToArbitrum_20250326.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326).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/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum_20250326.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 actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_OnboardRsETHToArbitrum_20250326).creationCode - ); - payloads[0] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/OnboardRsETHToArbitrum.md' - ) - ); - } -} diff --git a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/config.ts b/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/config.ts deleted file mode 100644 index 639a732f4..000000000 --- a/src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/config.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250326_AaveV3Arbitrum_OnboardRsETHToArbitrum/config.ts', - author: 'Aave-Chan Initiative', - pools: ['AaveV3Arbitrum'], - title: ' Onboard rsETH to Arbitrum', - shortName: 'OnboardRsETHToArbitrum', - date: '20250326', - discussion: - 'https://governance.aave.com/t/arfc-onboard-rseth-to-arbitrum-and-base-v3-instances/20741', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0x598f7057f445813d75404fae68f3501d76c90064f52ca4b9afb6f20859fa2658', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Arbitrum: { - configs: { - EMODES_UPDATES: [ - { - eModeCategory: 5, - ltv: '92.5', - liqThreshold: '94.5', - liqBonus: '1', - label: 'rsETH/wstETH emode', - }, - ], - ASSET_LISTING: [ - { - assetSymbol: 'rsETH', - decimals: 18, - priceFeed: '0xb4B0cbcA864c2Eb0C0342608D92490C034aC1089', - ltv: '.05', - liqThreshold: '.1', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'DISABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '20', - supplyCap: '900', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0x4186BFC76E2E237523CBC30FD220FE055156b41F', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 69536140}, - }, - }, -}; diff --git a/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.sol b/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.sol deleted file mode 100644 index b64eaf05f..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {GhoEthereum} from 'aave-address-book/GhoEthereum.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IGsm} from 'src/interfaces/IGsm.sol'; - -/** - * @title April Funding update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-april-funding-update/21590 - */ -contract AaveV3Ethereum_AprilFundingUpdate_20250328 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - - address public constant MILKMAN = 0x060373D064d0168931dE2AB8DDA7410923d06E88; - address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c; - // https://etherscan.io/address/0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC - address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC; - - uint256 public constant USDC_SWAP_AMOUNT = 2_000_000e6; - uint256 public constant USDT_SWAP_AMOUNT = 2_000_000e6; - - address public constant FLUID = 0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb; - // https://etherscan.io/address/0xa9e777D56C0Ad861f6a03967E080e767ad8D39b6 - address public constant EMBASSY_SAFE = 0xa9e777D56C0Ad861f6a03967E080e767ad8D39b6; - // https://etherscan.io/address/0xdeadD8aB03075b7FBA81864202a2f59EE25B312b - address public constant MERIT_SAFE = 0xdeadD8aB03075b7FBA81864202a2f59EE25B312b; - uint256 public constant MERIT_ALLOWANCE = 800_000e6; - - uint256 public constant FUNDING_LINK_AMOUNT = 50e18; - uint256 public constant FUNDING_ETH_AMOUNT = 1 ether; - uint128 public constant BUCKET_CAPACITY_GSM = 25_000_000e6; - - // https://etherscan.io/address/0x535b2f7C20B9C83d70e519cf9991578eF9816B7B - address public constant NEW_GSM_USDT = 0x535b2f7C20B9C83d70e519cf9991578eF9816B7B; - - function execute() external { - IGsm(NEW_GSM_USDT).updateExposureCap(BUCKET_CAPACITY_GSM); - - _withdrawAndSwap(); - _transferAndApprove(); - _fundToCrossChainController(); - } - - function _withdrawAndSwap() internal { - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.USDC_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.GHO_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.USDC_ORACLE, - toUnderlyingPriceFeed: GHO_USD_FEED, - amount: USDC_SWAP_AMOUNT, - slippage: 75 - }) - ); - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.USDT_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.GHO_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.USDT_ORACLE, - toUnderlyingPriceFeed: GHO_USD_FEED, - amount: USDT_SWAP_AMOUNT, - slippage: 75 - }) - ); - } - - function _transferAndApprove() internal { - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(FLUID), - EMBASSY_SAFE, - IERC20(FLUID).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - MERIT_SAFE, - MERIT_ALLOWANCE - ); - } - - function _fundToCrossChainController() internal { - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.LINK_UNDERLYING), - GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER, - FUNDING_LINK_AMOUNT - ); - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3Ethereum.COLLECTOR.ETH_MOCK_ADDRESS()), - GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER, - FUNDING_ETH_AMOUNT - ); - } -} diff --git a/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.t.sol b/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.t.sol deleted file mode 100644 index db70047fa..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.t.sol +++ /dev/null @@ -1,157 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {GhoEthereum} from 'aave-address-book/GhoEthereum.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IGsm} from 'src/interfaces/IGsm.sol'; - -import {AaveV3Ethereum_AprilFundingUpdate_20250328} from './AaveV3Ethereum_AprilFundingUpdate_20250328.sol'; - -/** - * @dev Test for AaveV3Ethereum_AprilFundingUpdate_20250328 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.t.sol -vv - */ -contract AaveV3Ethereum_AprilFundingUpdate_20250328_Test is ProtocolV3TestBase { - event SwapRequested( - address milkman, - address indexed fromToken, - address indexed toToken, - address fromOracle, - address toOracle, - uint256 amount, - address indexed recipient, - uint256 slippage - ); - - AaveV3Ethereum_AprilFundingUpdate_20250328 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22217011); - proposal = new AaveV3Ethereum_AprilFundingUpdate_20250328(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_AprilFundingUpdate_20250328', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_updateGhoBucketStewardCapacity() public { - uint128 capacity = IGsm(proposal.NEW_GSM_USDT()).getExposureCap(); - - assertEq(25e6, capacity); - - executePayload(vm, address(proposal)); - - capacity = IGsm(proposal.NEW_GSM_USDT()).getExposureCap(); - - assertEq(proposal.BUCKET_CAPACITY_GSM(), capacity); - } - - function test_withdrawAndSwap() public { - uint256 usdcAmountBefore = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 usdtAmountBefore = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.USDC_UNDERLYING, - AaveV3EthereumAssets.GHO_UNDERLYING, - AaveV3EthereumAssets.USDC_ORACLE, - proposal.GHO_USD_FEED(), - proposal.USDC_SWAP_AMOUNT(), - address(AaveV3Ethereum.COLLECTOR), - 75 - ); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.USDT_UNDERLYING, - AaveV3EthereumAssets.GHO_UNDERLYING, - AaveV3EthereumAssets.USDT_ORACLE, - proposal.GHO_USD_FEED(), - proposal.USDT_SWAP_AMOUNT(), - address(AaveV3Ethereum.COLLECTOR), - 75 - ); - - executePayload(vm, address(proposal)); - - uint256 usdcAmountAfter = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 usdtAmountAfter = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - assertApproxEqAbs(usdcAmountBefore, usdcAmountAfter + proposal.USDC_SWAP_AMOUNT(), 1e6); - assertApproxEqAbs(usdtAmountBefore, usdtAmountAfter + proposal.USDT_SWAP_AMOUNT(), 1e6); - } - - function test_transferAndApprove() public { - uint256 fluidCollectorBalanceBefore = IERC20(proposal.FLUID()).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 fluidEmbassyBalanceBefore = IERC20(proposal.FLUID()).balanceOf(proposal.EMBASSY_SAFE()); - - executePayload(vm, address(proposal)); - - uint256 fluidCollectorBalanceAfter = IERC20(proposal.FLUID()).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 fluidEmbassyBalanceAfter = IERC20(proposal.FLUID()).balanceOf(proposal.EMBASSY_SAFE()); - uint256 aUsdcAllowance = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_SAFE() - ); - - assertEq(fluidCollectorBalanceAfter, 0); - assertEq(fluidCollectorBalanceBefore, fluidEmbassyBalanceAfter - fluidEmbassyBalanceBefore); - assertEq(aUsdcAllowance, proposal.MERIT_ALLOWANCE()); - - vm.startPrank(proposal.MERIT_SAFE()); - uint256 aEthUsdcBalanceBefore = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf( - proposal.MERIT_SAFE() - ); - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_SAFE(), - proposal.MERIT_ALLOWANCE() - ); - uint256 aEthUsdcBalanceAfter = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf( - proposal.MERIT_SAFE() - ); - - assertEq(aEthUsdcBalanceAfter, aEthUsdcBalanceBefore + proposal.MERIT_ALLOWANCE()); - vm.stopPrank(); - } - - function test_funding() public { - uint256 linkBalanceBefore = IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).balanceOf( - GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER - ); - uint256 ethBalanceBefore = payable(GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER).balance; - - executePayload(vm, address(proposal)); - - uint256 linkBalanceAfter = IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).balanceOf( - GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER - ); - uint256 ethBalanceAfter = payable(GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER).balance; - - assertEq(linkBalanceAfter, linkBalanceBefore + proposal.FUNDING_LINK_AMOUNT()); - assertEq(ethBalanceAfter, ethBalanceBefore + proposal.FUNDING_ETH_AMOUNT()); - } -} diff --git a/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.sol b/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.sol deleted file mode 100644 index 9cd86393a..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; -import {IAavePolEthERC20Bridge} from 'aave-helpers/src/bridges/polygon/IAavePolEthERC20Bridge.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title April Funding update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-april-funding-update/21590 - */ -contract AaveV3Polygon_AprilFundingUpdate_20250328 is IProposalGenericExecutor { - function execute() external { - _prepareBridge(); - _bridge(); - } - - function _prepareBridge() internal { - // usdc.e - AaveV2Polygon.COLLECTOR.transfer( - IERC20(AaveV2PolygonAssets.USDC_UNDERLYING), - MiscPolygon.AAVE_POL_ETH_BRIDGE, - IERC20(AaveV2PolygonAssets.USDC_UNDERLYING).balanceOf(address(AaveV2Polygon.COLLECTOR)) - ); - - // usdt - AaveV2Polygon.COLLECTOR.transfer( - IERC20(AaveV2PolygonAssets.USDT_UNDERLYING), - MiscPolygon.AAVE_POL_ETH_BRIDGE, - IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).balanceOf(address(AaveV2Polygon.COLLECTOR)) - ); - - // weth - AaveV2Polygon.COLLECTOR.transfer( - IERC20(AaveV2PolygonAssets.WETH_UNDERLYING), - MiscPolygon.AAVE_POL_ETH_BRIDGE, - IERC20(AaveV2PolygonAssets.WETH_UNDERLYING).balanceOf(address(AaveV2Polygon.COLLECTOR)) - ); - - // dai - AaveV2Polygon.COLLECTOR.transfer( - IERC20(AaveV2PolygonAssets.DAI_UNDERLYING), - MiscPolygon.AAVE_POL_ETH_BRIDGE, - IERC20(AaveV2PolygonAssets.DAI_UNDERLYING).balanceOf(address(AaveV2Polygon.COLLECTOR)) - ); - } - - function _bridge() internal { - // usdc - IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE).bridge( - AaveV3PolygonAssets.USDC_UNDERLYING, - IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf(MiscPolygon.AAVE_POL_ETH_BRIDGE) - ); - - // usdt - IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE).bridge( - AaveV3PolygonAssets.USDT_UNDERLYING, - IERC20(AaveV3PolygonAssets.USDT_UNDERLYING).balanceOf(MiscPolygon.AAVE_POL_ETH_BRIDGE) - ); - - // WETH - IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE).bridge( - AaveV3PolygonAssets.WETH_UNDERLYING, - IERC20(AaveV3PolygonAssets.WETH_UNDERLYING).balanceOf(MiscPolygon.AAVE_POL_ETH_BRIDGE) - ); - - // DAI - IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE).bridge( - AaveV3PolygonAssets.DAI_UNDERLYING, - IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf(MiscPolygon.AAVE_POL_ETH_BRIDGE) - ); - } -} diff --git a/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.t.sol b/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.t.sol deleted file mode 100644 index df33e6c62..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.t.sol +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Polygon_AprilFundingUpdate_20250328} from './AaveV3Polygon_AprilFundingUpdate_20250328.sol'; - -/** - * @dev Test for AaveV3Polygon_AprilFundingUpdate_20250328 - * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.t.sol -vv - */ -contract AaveV3Polygon_AprilFundingUpdate_20250328_Test is ProtocolV3TestBase { - event Bridge(address token, uint256 amount); - - AaveV3Polygon_AprilFundingUpdate_20250328 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 70007673); - proposal = new AaveV3Polygon_AprilFundingUpdate_20250328(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Polygon_AprilFundingUpdate_20250328', AaveV3Polygon.POOL, address(proposal)); - } - - function test_balanceAfter() public { - executePayload(vm, address(proposal)); - - // usdc - uint256 usdcBalanceAfter = IERC20(AaveV2PolygonAssets.USDC_UNDERLYING).balanceOf( - address(AaveV2Polygon.COLLECTOR) - ); - - assertEq(usdcBalanceAfter, 0); - - // usdt - uint256 usdtBalanceAfter = IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).balanceOf( - address(AaveV2Polygon.COLLECTOR) - ); - - assertEq(usdtBalanceAfter, 0); - - // DAI - uint256 daiBalanceAfter = IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - - assertEq(daiBalanceAfter, 0); - - // WETH - uint256 wETHBalanceAfter = IERC20(AaveV3PolygonAssets.WETH_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - - assertEq(wETHBalanceAfter, 0); - } - - function test_log() public { - vm.expectEmit(true, true, false, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.USDC_UNDERLYING, 128255461879); - - vm.expectEmit(true, true, false, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.USDT_UNDERLYING, 2230512605644); - - vm.expectEmit(true, true, false, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.WETH_UNDERLYING, 9737956185483774043); - - vm.expectEmit(true, true, false, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.DAI_UNDERLYING, 104510078595292261372824); - executePayload(vm, address(proposal)); - } -} diff --git a/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate.md b/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate.md deleted file mode 100644 index f5b925718..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "April Funding update" -author: "TokenLogic" -discussions: "https://governance.aave.com/t/arfc-april-funding-update/21590" ---- - -## Simple Summary - -This publication presents the April Funding Update, consisting of the following key activities: - -- Bridge funds to Ethereum; -- Fund Sonic incentive campaign; -- Acquire GHO for Operations; and, -- Transfer FLUID to Aave Protocol Embassy. -- Fund to [CrossChainController](https://etherscan.io/address/0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1) -- Update stataUSDT GSM Exposure Cap as it has successfully drawn swaps from aggregators - -## Motivation - -This publication combines near term operational needs and migrating assets held on Polygon in preparation for funding future incentive campaigns. The below outlines the three objectives of this publication: - -- Consolidating funds to Ethereum; -- Fulfilling near term operation requirements; and, - -### Bridge Funds to Ethereum - -Each month the DAO’s funds held on Polygon are to be bridged to Ethereum where they will be used to support various incentive and buyback programs. With the pending Umbrella, Horizon and AAVE buybacks to start in the near future, consolidating assets on Ethereum ensures sufficient capital is readily available if required. - -### Acquire GHO - -In the near term we expect several initiatives to request funding from the DAO. This proposal when implemented will acquire sufficient GHO to sustain the DAO until the Finance Steward is deployed ensuring the DAO is well capitalised at all times. - -Examples of near term expenses include: - -- Service Provider renewal; -- Merit and ALC; and, -- Incentive campaign(s). - -## Specification - -This proposal shall be submitted as several AIPs that align with operational readiness timelines and ease of review given the volume of funds being moved. - -### Polygon - Bridge Assets to Ethereum - -Bridge the following assets to Ethereum. - -| Polygon | -| :-----: | -| USDC.e | -| USDT | -| WETH | -| DAI | - -### Ethereum - Acquire GHO - -Swap to GHO and deposit into Aave v3 Prime instance. - -| Ethereum v2 | Amount | -| :---------: | :----: | -| aUSDT | 2.00M | -| aUSDC | 2.00M | - -This GHO will provide sufficient runway to cover the next few months of Merit and Service Provider expenses being paid from Aave v3 Prime instance. - -### Ethereum - Aave Protocol Embassy & Sonic Incentives - -Transfer FLUID held in the Treasury to Aave Protocol Embassy SAFE on Ethereum: - -SAFE: `0xa9e777D56C0Ad861f6a03967E080e767ad8D39b6` - -Create an Allowance to fund Sonic Incentive Campaign, 0.8M aEthUSDC, from Aave v3 Core instance to Merit address: - -SAFE: `0xdeadD8aB03075b7FBA81864202a2f59EE25B312b` - -### Fund to [CrossChainController](https://etherscan.io/address/0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1) - -Funding to [CrossChainController](https://etherscan.io/address/0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1) on mainnet with 50 LINK and 1 native ETH - -### Update stataUSDT GSM Exposure Cap - -Set the stataUSDT GSM exposure cap to 25M units. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a80115e1f957060534c1a4237eb0c50b42279ce6/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/a80115e1f957060534c1a4237eb0c50b42279ce6/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a80115e1f957060534c1a4237eb0c50b42279ce6/src/20250328_Multi_AprilFundingUpdate/AaveV3Ethereum_AprilFundingUpdate_20250328.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/a80115e1f957060534c1a4237eb0c50b42279ce6/src/20250328_Multi_AprilFundingUpdate/AaveV3Polygon_AprilFundingUpdate_20250328.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-april-funding-update/21590) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol b/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol deleted file mode 100644 index b53f5cfce..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol +++ /dev/null @@ -1,87 +0,0 @@ -// 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, PolygonScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_AprilFundingUpdate_20250328} from './AaveV3Ethereum_AprilFundingUpdate_20250328.sol'; -import {AaveV3Polygon_AprilFundingUpdate_20250328} from './AaveV3Polygon_AprilFundingUpdate_20250328.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AprilFundingUpdate_20250328.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AprilFundingUpdate_20250328).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/AprilFundingUpdate_20250328.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_AprilFundingUpdate_20250328).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/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate_20250328.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_AprilFundingUpdate_20250328).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_AprilFundingUpdate_20250328).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile(vm, 'src/20250328_Multi_AprilFundingUpdate/AprilFundingUpdate.md') - ); - } -} diff --git a/src/20250328_Multi_AprilFundingUpdate/config.ts b/src/20250328_Multi_AprilFundingUpdate/config.ts deleted file mode 100644 index a722d7c9e..000000000 --- a/src/20250328_Multi_AprilFundingUpdate/config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum', 'AaveV3Polygon'], - title: 'April Funding update', - shortName: 'AprilFundingUpdate', - date: '20250328', - author: 'TokenLogic', - discussion: 'https://governance.aave.com/t/arfc-april-funding-update/21590', - snapshot: 'Direct-to-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {}, cache: {blockNumber: 22217011}}, - AaveV3Polygon: {configs: {}, cache: {blockNumber: 70007673}}, - }, -}; diff --git a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation.md b/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation.md deleted file mode 100644 index 17bde4328..000000000 --- a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "AAVE Buybacks allocation" -author: "ACI" -discussions: "https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248" -snapshot: "https://snapshot.box/#/s:aave.eth/proposal/0xf0591fe8e54900da9929fe25c466c2b4a0fac6e8f7a3a000087797363847fb65" ---- - -## Simple Summary - -This proposal approves a specific allowance of **aEthUSDT** from the Aave Collector contract to the **Aave Finance Committee (AFC)**, enabling the committee to initiate AAVE buybacks as part of the Aavenomics implementation. - -## Motivation - -As outlined in the [Aavenomics Part One proposal](https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248), the Aave DAO is launching a structured AAVE Buy and Distribute program. The goal is to sustainably increase AAVE acquisition from the open market and distribute it to the Ecosystem Reserve. - -This initial proposal enables the AFC to begin executing the first phase of the buyback program by approving $4M in aEthUSDT, allowing for approximately one month of AAVE buybacks. While the full program targets up to $1M/week over six months, this limited approval serves as a first step. It also gives us time to finalize and deploy the updated Aave Swapper contract, which will be used for future buybacks. - -This allowance mechanism ensures: - -- Treasury operations remain secure, with no direct token transfer. -- The AFC can operate within clearly defined, governance-approved budgets. -- Buyback operations can begin without delay, supporting protocol alignment and tokenomics upgrades. - -## Specification - -- **Asset**: aEthUSDT: 0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a -- **Amount**: 4M -- **Spender**: [Aave Finance Committee (AFC)](https://etherscan.io/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa): 0x22740deBa78d5a0c24C58C740e3715ec29de1bFa -- **Method**: `approve()` aEthUSDT on the Aave Collector contract to the AFC address - -Once approved, the AFC will be able to pull USDT from the Collector contract to perform AAVE purchases on secondary markets or via market makers. - -This operation does **not** transfer any tokens at execution, and the allowance can be adjusted or revoked at any time through a new governance vote. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5bf5796951820701d82d50530c71fcf1edd0d091/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5bf5796951820701d82d50530c71fcf1edd0d091/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.t.sol) -- [Snapshot](https://snapshot.box/#/s:aave.eth/proposal/0xf0591fe8e54900da9929fe25c466c2b4a0fac6e8f7a3a000087797363847fb65) -- [Discussion](https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation_20250403.s.sol b/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation_20250403.s.sol deleted file mode 100644 index bef6bccb5..000000000 --- a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation_20250403.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_AAVEBuybacksAllocation_20250403} from './AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation_20250403.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AAVEBuybacksAllocation_20250403.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AAVEBuybacksAllocation_20250403).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/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation_20250403.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_AAVEBuybacksAllocation_20250403).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AAVEBuybacksAllocation.md' - ) - ); - } -} diff --git a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol b/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol deleted file mode 100644 index d2f968a4b..000000000 --- a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -/** - * @title AAVE Buybacks allocation - * @author ACI - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0xf0591fe8e54900da9929fe25c466c2b4a0fac6e8f7a3a000087797363847fb65 - * - Discussion: https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248 - */ -contract AaveV3Ethereum_AAVEBuybacksAllocation_20250403 is IProposalGenericExecutor { - address public constant AFC = 0x22740deBa78d5a0c24C58C740e3715ec29de1bFa; - - uint256 public constant USDT_AMOUNT = 4_000_000 * 10 ** 6; // 4M USDT - - function execute() external { - // Approve USDT from Collector to AFC - AaveV3Ethereum.COLLECTOR.approve(IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), AFC, USDT_AMOUNT); - } -} diff --git a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.t.sol b/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.t.sol deleted file mode 100644 index d95c16280..000000000 --- a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.t.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_AAVEBuybacksAllocation_20250403} from './AaveV3Ethereum_AAVEBuybacksAllocation_20250403.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; - -/** - * @dev Test for AaveV3Ethereum_AAVEBuybacksAllocation_20250403 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/AaveV3Ethereum_AAVEBuybacksAllocation_20250403.t.sol -vv - */ -contract AaveV3Ethereum_AAVEBuybacksAllocation_20250403_Test is ProtocolV3TestBase { - AaveV3Ethereum_AAVEBuybacksAllocation_20250403 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22189779); - proposal = new AaveV3Ethereum_AAVEBuybacksAllocation_20250403(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_AAVEBuybacksAllocation_20250403', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_allowance() external { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC() - ); - - GovV3Helpers.executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC() - ); - - uint256 diffAllowance = allowanceAfter - allowanceBefore; - assertEq(diffAllowance, proposal.USDT_AMOUNT()); - } - - function test_claim() external { - uint256 balanceCollectorBefore = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 balanceAFCBefore = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf(proposal.AFC()); - - // execute approval - GovV3Helpers.executePayload(vm, address(proposal)); - - // execute transfer - vm.startPrank(proposal.AFC()); - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC(), - proposal.USDT_AMOUNT() - ); - vm.stopPrank(); - - uint256 balanceCollectorAfter = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 balanceAFCAfter = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf(proposal.AFC()); - - uint256 diffBalanceAFC = balanceAFCAfter - balanceAFCBefore; - uint256 diffBalanceCollector = balanceCollectorBefore - balanceCollectorAfter; - - // -1 because of low decimal precision of USDT - assertEq(diffBalanceAFC, proposal.USDT_AMOUNT() - 1); - assertEq(diffBalanceCollector, proposal.USDT_AMOUNT()); - } -} diff --git a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/config.ts b/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/config.ts deleted file mode 100644 index 15ad08725..000000000 --- a/src/20250403_AaveV3Ethereum_AAVEBuybacksAllocation/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'AAVE Buybacks allocation', - shortName: 'AAVEBuybacksAllocation', - date: '20250403', - author: 'ACI', - discussion: 'https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248', - snapshot: - 'https://snapshot.box/#/s:aave.eth/proposal/0xf0591fe8e54900da9929fe25c466c2b4a0fac6e8f7a3a000087797363847fb65', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22189779}}}, -}; diff --git a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol b/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol deleted file mode 100644 index 42809e778..000000000 --- a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; - -/** - * @title Request for Bounty Payout - March 2025 - * @author BGD Labs @bgdlabs - * - Snapshot: N/A - * - Discussion: https://governance.aave.com/t/bgd-request-for-bounty-payout-march-2025/21656 - */ -contract AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404 is IProposalGenericExecutor { - struct Bounty { - address asset; - address recipient; - uint256 amount; - } - - function execute() external { - Bounty[3] memory bounties = getBounties(); - for (uint256 i = 0; i < bounties.length; i++) { - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(bounties[i].asset), - bounties[i].recipient, - bounties[i].amount - ); - } - } - - function getBounties() public pure returns (Bounty[3] memory) { - return [ - Bounty({ - asset: AaveV3EthereumAssets.GHO_UNDERLYING, - recipient: 0x62566e81CcDFF9407E840d5ec3056e7354D44012, - amount: 20_000e18 - }), - Bounty({ - asset: AaveV3EthereumAssets.GHO_UNDERLYING, - recipient: 0xF5BED21BD285CBe352737F686766cCC19BeE7acC, - amount: 1_000e18 - }), - // Immunefi fee - Bounty({ - asset: AaveV3EthereumAssets.GHO_UNDERLYING, - recipient: 0x7119f398b6C06095c6E8964C1f58e7C1BAa79E18, - amount: 2_100e18 - }) - ]; - } -} diff --git a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.t.sol b/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.t.sol deleted file mode 100644 index 2f4cbc946..000000000 --- a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.t.sol +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; - -import 'forge-std/Test.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404} from './AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol'; - -/** - * @dev Test for AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.t.sol -vv - */ -contract AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404_Test is ProtocolV3TestBase { - AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404 internal proposal; - - uint256 TOTAL_AMOUNT = 23_100e18; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22194992); - proposal = new AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - /** - * @dev Checking: - * - Balances post-transfer are correct - * - Collector has enough funds - */ - function test_consistentBalances() public { - AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.Bounty[3] memory bounties = proposal - .getBounties(); - - uint256[] memory balancesRecipientsBefore = new uint256[](3); - uint256 balanceCollectorBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - // Validate the Collector has enough GHO tokens - assertGe(balanceCollectorBefore, TOTAL_AMOUNT); - - for (uint256 i = 0; i < bounties.length; i++) { - balancesRecipientsBefore[i] = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( - bounties[i].recipient - ); - } - - executePayload(vm, address(proposal)); - - for (uint256 i = 0; i < bounties.length; i++) { - assertApproxEqAbs( - IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(bounties[i].recipient), - balancesRecipientsBefore[i] + bounties[i].amount, - 1 - ); - } - - uint256 balanceCollectorAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - assertEq(balanceCollectorAfter, balanceCollectorBefore - TOTAL_AMOUNT); - } -} diff --git a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025.md b/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025.md deleted file mode 100644 index 84946cc9c..000000000 --- a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Request for Bounty Payout - March 2025" -author: "BGD Labs @bgdlabs" -discussions: "https://governance.aave.com/t/bgd-request-for-bounty-payout-march-2025/21656" -snapshot: "Direct to AIP" ---- - -## Simple Summary - -Proposal to release a total of $21’000 as bounty for four outstanding Aave <> Immunefi valid submissions, together with $2’100 as the fee to the Immunefi platform; amounting to a grand total of $23'100. - -The asset of payment will be GHO. - -## Motivation - -After the previous Request for Bounty Payout on January 2025, there have been only two valid bug submissions on the Aave <> Immunefi program, which should be paid now with the month finished, cleaning up the pipeline. - -## Specification - -This proposal will release the following funds to white-hat addresses and the Immunefi platform: - -- 20’000 GHO to 0x62566e81CcDFF9407E840d5ec3056e7354D44012 -- 1’000 GHO to 0xF5BED21BD285CBe352737F686766cCC19BeE7acC -- 2’100 GHO to 0x7119f398b6C06095c6E8964C1f58e7C1BAa79E18 (immunefi.eth). This is the fee corresponding to the 10% of the previous bounties. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/201af608e17edc2cffd972ddc27b6dd7246a59ee/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/201af608e17edc2cffd972ddc27b6dd7246a59ee/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.t.sol) -- [Snapshot](N/A) -- [Discussion](https://governance.aave.com/t/bgd-request-for-bounty-payout-march-2025/21656) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025_20250404.s.sol b/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025_20250404.s.sol deleted file mode 100644 index 8b19f9841..000000000 --- a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025_20250404.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_RequestForBountyPayoutMarch2025_20250404} from './AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025_20250404.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RequestForBountyPayoutMarch2025_20250404.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_RequestForBountyPayoutMarch2025_20250404).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/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025_20250404.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_RequestForBountyPayoutMarch2025_20250404).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/RequestForBountyPayoutMarch2025.md' - ) - ); - } -} diff --git a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/config.ts b/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/config.ts deleted file mode 100644 index 5129a1185..000000000 --- a/src/20250404_AaveV3Ethereum_RequestForBountyPayoutMarch2025/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'Request for Bounty Payout - March 2025', - shortName: 'RequestForBountyPayoutMarch2025', - date: '20250404', - author: 'BGD Labs @bgdlabs', - discussion: 'https://governance.aave.com/t/bgd-request-for-bounty-payout-march-2025/21656', - snapshot: 'N/A', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22194992}}}, -}; diff --git a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol b/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol deleted file mode 100644 index 41be9d7de..000000000 --- a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; - -/** - * @title Removal of legacy VotingPortals from Governance v3 - * @author BGD Labs @bgdlabs - * - Discussion: TODO - */ -contract AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405 is - IProposalGenericExecutor -{ - address public constant VOTING_PORTAL_ETH_ETH = 0xf23f7De3AC42F22eBDA17e64DC4f51FB66b8E21f; - address public constant VOTING_PORTAL_ETH_AVAX = 0x33aCEf7365809218485873B7d0d67FeE411B5D79; - address public constant VOTING_PORTAL_ETH_POL = 0x9b24C168d6A76b5459B1d47071a54962a4df36c3; - - function execute() external { - address[] memory votingPortalsToRemove = new address[](3); - votingPortalsToRemove[0] = VOTING_PORTAL_ETH_ETH; - votingPortalsToRemove[1] = VOTING_PORTAL_ETH_AVAX; - votingPortalsToRemove[2] = VOTING_PORTAL_ETH_POL; - - GovernanceV3Ethereum.GOVERNANCE.removeVotingPortals(votingPortalsToRemove); - } -} diff --git a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.t.sol b/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.t.sol deleted file mode 100644 index f4e5e4cfe..000000000 --- a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.t.sol +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405} from './AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; - -/** - * @dev Test for AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.t.sol -vv - */ -contract AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405_Test is - ProtocolV3TestBase -{ - AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22201396); - proposal = new AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_removeVotingPortals() public { - address votingPortal_eth_eth = proposal.VOTING_PORTAL_ETH_ETH(); - address votingPortal_eth_avax = proposal.VOTING_PORTAL_ETH_AVAX(); - address votingPortal_eth_pol = proposal.VOTING_PORTAL_ETH_POL(); - - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_eth), true); - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_avax), true); - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_pol), true); - - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_ETH - ), - true - ); - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_AVAX - ), - true - ); - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL - ), - true - ); - - assertEq(GovernanceV3Ethereum.GOVERNANCE.getVotingPortalsCount(), 6); - - // execute approval - GovV3Helpers.executePayload(vm, address(proposal)); - - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_eth), false); - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_avax), false); - assertEq(GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved(votingPortal_eth_pol), false); - - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_ETH - ), - true - ); - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_AVAX - ), - true - ); - assertEq( - GovernanceV3Ethereum.GOVERNANCE.isVotingPortalApproved( - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL - ), - true - ); - - assertEq(GovernanceV3Ethereum.GOVERNANCE.getVotingPortalsCount(), 3); - } -} diff --git a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance.md b/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance.md deleted file mode 100644 index a151928aa..000000000 --- a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "Removal of legacy VotingPortals from Governance v3" -author: "BGD Labs @bgdlabs" -discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/77" ---- - -## Simple Summary - -Proposal to remove the deprecated `VotingPortals` from the Aave Governance. - -## Motivation - -[Proposal 273](https://vote.onaave.com/proposal/?proposalId=273) enabled new VotingPortal contracts on the Aave Governance, but without removing the previous ones to be sure no issues during the transition would happen. - -As the new `VotingPortals` have already been proven to be working by using them for voting on at least 4 new proposals (279 - 282), it is time to remove the old ones, so that there is no confusion or possibility of using the old `VotingPortals` on new proposals. - -## Specification - -The payload calls `removeVotingPortals()` on the Aave Governance contract, with the list of old VotingPortals. - -VotingPortals to remove: - -| Network | Path | Address | -| -------- | ---------- | --------------------------------------------------------------------------------------------------------------------- | -| Ethereum | Eth - Eth | [0xf23f7De3AC42F22eBDA17e64DC4f51FB66b8E21f](https://etherscan.io/address/0xf23f7De3AC42F22eBDA17e64DC4f51FB66b8E21f) | -| Ethereum | Eth - Avax | [0x33aCEf7365809218485873B7d0d67FeE411B5D79](https://etherscan.io/address/0x33aCEf7365809218485873B7d0d67FeE411B5D79) | -| Ethereum | Eth - Pol | [0x9b24C168d6A76b5459B1d47071a54962a4df36c3](https://etherscan.io/address/0x9b24C168d6A76b5459B1d47071a54962a4df36c3) | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/2275c79af1b114017e2305ca31e88b238154ccc3/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/2275c79af1b114017e2305ca31e88b238154ccc3/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.t.sol) -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/77) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance_20250405.s.sol b/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance_20250405.s.sol deleted file mode 100644 index 15c647a8e..000000000 --- a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance_20250405.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_RemoveOldVotingPortalsFromAaveGovernance_20250405} from './AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance_20250405.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RemoveOldVotingPortalsFromAaveGovernance_20250405.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance_20250405).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/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance_20250405.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_RemoveOldVotingPortalsFromAaveGovernance_20250405).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/RemoveOldVotingPortalsFromAaveGovernance.md' - ) - ); - } -} diff --git a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/config.ts b/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/config.ts deleted file mode 100644 index 02b2989b8..000000000 --- a/src/20250405_AaveV3Ethereum_RemoveOldVotingPortalsFromAaveGovernance/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'BGD Labs @bgdlabs', - pools: ['AaveV3Ethereum'], - title: 'Remove old VotingPortals from Aave Governance', - shortName: 'RemoveOldVotingPortalsFromAaveGovernance', - date: '20250405', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22201396}}}, -}; diff --git a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.sol b/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.sol deleted file mode 100644 index dfa5404ef..000000000 --- a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLidoEModes} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {AaveV3PayloadEthereumLido} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumLido.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Update Prime RsETH LST eMode on Aave V3 Ethereum Lido - * @author ACI - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xd3e9abb877952861eb14a70a89fd01bdeccec1f6d159807acfaa514200831769 - * - Discussion: https://governance.aave.com/t/arfc-lrt-and-wsteth-unification/21739#p-55276-rseth-ltv-lt-update-4 - */ -contract AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602 is AaveV3PayloadEthereumLido { - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: AaveV3EthereumLidoEModes.RSETH_LST_MAIN, - ltv: 93_00, - liqThreshold: 95_00, - liqBonus: 1_00, - label: EngineFlags.KEEP_CURRENT_STRING - }); - - return eModeUpdates; - } -} diff --git a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.t.sol b/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.t.sol deleted file mode 100644 index 78a924291..000000000 --- a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602} from './AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.sol'; - -/** - * @dev Test for AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.t.sol -vv - */ -contract AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602_Test is ProtocolV3TestBase { - AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22617492); - proposal = new AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } -} diff --git a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance.md b/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance.md deleted file mode 100644 index 3db14e79f..000000000 --- a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Onboard wrsETH to ZKsync V3 Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-onboard-wrseth-to-zksync-v3-instance/20727" -snapshot: Direct-to-AIP ---- - -## Simple Summary - -This is a proposal to onboard wrsETH to the Aave V3 ZKsync Instance allowing Aave users to supply wrsETH as collateral. This proposal will be under Direct to AIP, as there are already on other Aave Instances. - -Additionally, this AIP will update the rsETH LST E-Mode of the Prime instance. - -## Motivation - -In order to benefit from the ongoing ZKsync Ignite incentives program, we propose onboarding assets which have proven popular on other Aave instances and are either whitelisted for Ignite incentives, or are good candidates for future whitelisting. - -wrsETH is currently the only whitelisted liquid restaking token on ZKsync and has proven popular on the Aave Prime instance, therefore we believe should be onboarded to the Aave Instance on ZKsync too. - -## Specification - -The table below illustrates the configured risk parameters for **wrsETH** - -| Parameter | Value | -| ------------------------- | -----------------------------------------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (wrsETH) | 700 | -| Borrow Cap (wrsETH) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 10 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | 0x8d25c9de6DBAd9a9eadfB2CA4706034F6721d555 | - -**Pricefeed details** - -| Parameter | Value | -| -------------------- | ---------------------------------------------------------------------------------------------------------: | -| Oracle | [Capped rsETH / ETH / USD ](https://era.zksync.network/address/0x8d25c9de6DBAd9a9eadfB2CA4706034F6721d555) | -| BASE/USD Oracle | [Chainlink ETH/USD](https://era.zksync.network/address/0x6D41d1dc818112880b40e26BD6FD347E41008eDA) | -| Ratio Provider | [rsETH](https://era.zksync.network/address/0x7024c64Ad30Ebf224e417CfDE4438606d2b9B690) | -| Oracle Latest Answer | (2025-05-27) USD 2726.41712463 | -| min snapshot | 14 days | -| max yearly growth | 9.83% | - -### wrsETH/wstETH E-Mode - -| Parameter | Value | Value | -| ------------------- | ------ | ------ | -| Asset | wrsETH | wstETH | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| LTV | 92.50% | - | -| LT | 94.50% | - | -| Liquidation Penalty | 1.00% | - | - -Additionally [0x95Cbff6e45C499d45dd8627f3ce179057B5Fbfcc](https://era.zksync.network/address/0x95Cbff6e45C499d45dd8627f3ce179057B5Fbfcc) has been set as the emission admin for wrsETH and the corresponding aToken. - -### Prime rsETH LST E-Mode Update - -| Parameter | Value | Value | -| ------------------- | -------------- | ------ | -| Asset | rsETH | wstETH | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| LTV | ~~92.50%~~ 93% | - | -| LT | ~~94.50%~~ 95% | - | -| Liquidation Penalty | 1.00% | - | - -This E-Mode update come from this [AIP](https://governance.aave.com/t/arfc-lrt-and-wsteth-unification/21739#p-55276-rseth-ltv-lt-update-4). It wasn’t included in the AIP itself because it could be executed via the Risk Steward. However, since the new version of the Risk Steward has not yet been deployed on the Ethereum Prime instance, we’re currently unable to update the E-mode through it. As a result, we are proposing to bundle this change into the current rsETH ZkSync onboarding AIP. - -## References - -- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/1adee2dd31ea242f53628752df3184646e931ab7/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol) -- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/1adee2dd31ea242f53628752df3184646e931ab7/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-onboard-wrseth-to-zksync-v3-instance/20727) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol b/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol deleted file mode 100644 index 2c3431241..000000000 --- a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol +++ /dev/null @@ -1,69 +0,0 @@ -// 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 {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; -import {EthereumScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; -import {AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602} from './AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602.sol'; - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); - - payloads[0] = PayloadsControllerUtils.Payload({ - chain: ChainIds.ZKSYNC, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3ZkSync.PAYLOADS_CONTROLLER), - payloadId: 27 - }); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602).creationCode - ); - payloads[1] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance.md' - ) - ); - } -} - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_UpdatePrimeRsETHLSTEmode_20250602).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/config.ts b/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/config.ts deleted file mode 100644 index d8c63868a..000000000 --- a/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/config.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/config.ts', - author: 'Aave-Chan Initiative', - pools: ['AaveV3ZkSync'], - title: 'Onboard wrsETH to ZKsync V3 Instance', - shortName: 'OnboardWrsETHToZKsyncV3Instance', - date: '20250408', - discussion: 'https://governance.aave.com/t/arfc-onboard-wrseth-to-zksync-v3-instance/20727', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3ZkSync: { - configs: { - EMODES_UPDATES: [ - { - eModeCategory: 3, - ltv: '92.5', - liqThreshold: '94.5', - liqBonus: '1', - label: 'wrsETH/wstETH', - }, - ], - EMODES_ASSETS: [ - {asset: 'wrsETH', eModeCategory: '3', collateral: 'ENABLED', borrowable: 'DISABLED'}, - {asset: 'wstETH', eModeCategory: '3', collateral: 'DISABLED', borrowable: 'ENABLED'}, - ], - ASSET_LISTING: [ - { - assetSymbol: 'wrsETH', - decimals: 18, - priceFeed: '0x8d25c9de6DBAd9a9eadfB2CA4706034F6721d555', - ltv: '0.05', - liqThreshold: '0.1', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'DISABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '700', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0x6bE2425C381eb034045b527780D2Bf4E21AB7236', - admin: '0x95Cbff6e45C499d45dd8627f3ce179057B5Fbfcc', - }, - ], - }, - cache: {blockNumber: 58835283}, - }, - }, -}; diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol deleted file mode 100644 index efac19e6c..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/interfaces/IERC20.sol'; -import {AaveV3Avalanche, AaveV3AvalancheAssets, ICollector} from 'aave-address-book/AaveV3Avalanche.sol'; -import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol'; -import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; - -import {IAaveCLRobotOperator} from '../interfaces/IAaveCLRobotOperator.sol'; - -/** - * @title Caps Risk Oracle Activation on Base, Avalanche - * @author BGD Labs (@bgdlabs) - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/78 - */ -contract AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408 is - IProposalGenericExecutor -{ - using SafeCast for uint256; - using CollectorUtils for ICollector; - using SafeERC20 for IERC20; - - address public constant EDGE_RISK_STEWARD = 0x57218F3aB422A39115951c3Eb06881a7A719DfdD; - address public constant AAVE_STEWARD_INJECTOR = 0x54714FAc85b0bf627288CC3a186dE81A42f1D635; - uint96 public constant LINK_AMOUNT = 50 ether; - - function execute() external { - AaveV3Avalanche.ACL_MANAGER.addRiskAdmin(EDGE_RISK_STEWARD); - - uint256 linkAmountWithdrawn = AaveV3Avalanche.COLLECTOR.withdrawFromV3( - CollectorUtils.IOInput({ - pool: address(AaveV3Avalanche.POOL), - underlying: AaveV3AvalancheAssets.LINKe_UNDERLYING, - amount: LINK_AMOUNT - }), - address(this) - ); - IERC20(AaveV3AvalancheAssets.LINKe_UNDERLYING).forceApprove( - MiscAvalanche.AAVE_CL_ROBOT_OPERATOR, - linkAmountWithdrawn - ); - - IAaveCLRobotOperator(MiscAvalanche.AAVE_CL_ROBOT_OPERATOR).register( - 'Caps AGRS Injector', - AAVE_STEWARD_INJECTOR, - '', - 5_000_000, - linkAmountWithdrawn.toUint96(), - 0, - '' - ); - } -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol deleted file mode 100644 index b25119d77..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol +++ /dev/null @@ -1,118 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408, IAaveCLRobotOperator} from './AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol'; -import {AutomationCompatibleInterface} from './interfaces/AutomationCompatibleInterface.sol'; -import {IAaveStewardInjector} from './interfaces/IAaveStewardInjector.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {IRiskOracle} from '../interfaces/IRiskOracle.sol'; - -/** - * @dev Test for AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408 - * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol -vv - */ -contract AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408_Test is - ProtocolV3TestBase -{ - AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408 internal proposal; - - address public constant RISK_ORACLE_OWNER = 0x42939e82DF15afc586bb95f7dD69Afb6Dc24A6f9; - IRiskOracle public RISK_ORACLE; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('avalanche'), 59903029); - proposal = new AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408(); - - RISK_ORACLE = IRiskOracle(IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()).RISK_ORACLE()); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408', - AaveV3Avalanche.POOL, - address(proposal) - ); - } - - function test_permissions() public { - assertEq(AaveV3Avalanche.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), false); - executePayload(vm, address(proposal)); - - assertEq(AaveV3Avalanche.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), true); - assertEq( - IRiskSteward(proposal.EDGE_RISK_STEWARD()).RISK_COUNCIL(), - proposal.AAVE_STEWARD_INJECTOR() - ); - } - - function test_robotRegistered() public { - vm.expectEmit(false, true, true, true); - emit IAaveCLRobotOperator.KeeperRegistered( - uint256(0), - proposal.AAVE_STEWARD_INJECTOR(), - uint96(proposal.LINK_AMOUNT()) - ); - executePayload(vm, address(proposal)); - } - - /// forge-config: default.evm_version = 'cancun' - function test_injectUpdateToProtocol() public { - executePayload(vm, address(proposal)); - (, uint256 supplyCap) = AaveV3Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps( - AaveV3AvalancheAssets.WETHe_UNDERLYING - ); - uint256 supplyCapToSet = (supplyCap * 130) / 100; // increase caps by 30% - - _addUpdateToRiskOracle(supplyCapToSet); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - proposal.AAVE_STEWARD_INJECTOR() - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(proposal.AAVE_STEWARD_INJECTOR()).performUpkeep(performData); - - (, uint256 currentSupplyCap) = AaveV3Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps( - AaveV3AvalancheAssets.WETHe_UNDERLYING - ); - assertEq(supplyCapToSet, currentSupplyCap); - } - - function test_injectorConfigurations() public view { - address[] memory configuredMarkets = IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()) - .getMarkets(); - - address[] memory listedAssets = AaveV3Avalanche.POOL.getReservesList(); - address[] memory expectedMarkets = new address[](listedAssets.length); - for (uint256 i = 0; i < listedAssets.length; i++) { - expectedMarkets[i] = AaveV3Avalanche.POOL.getReserveAToken(listedAssets[i]); - } - - // all aTokens listed are configured on the injector - assertEq(configuredMarkets, expectedMarkets); - - string[] memory updateTypes = IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()) - .getUpdateTypes(); - assertEq(updateTypes.length, 2); - assertEq(updateTypes[0], 'supplyCap'); - assertEq(updateTypes[1], 'borrowCap'); - } - - function _addUpdateToRiskOracle(uint256 value) internal { - vm.startPrank(RISK_ORACLE_OWNER); - RISK_ORACLE.publishRiskParameterUpdate( - 'referenceId', - abi.encodePacked(value * 1e18), - 'supplyCap', - address(AaveV3AvalancheAssets.WETHe_A_TOKEN), - 'additionalData' - ); - vm.stopPrank(); - } -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol deleted file mode 100644 index 7ba7f5145..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/interfaces/IERC20.sol'; -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {MiscBase} from 'aave-address-book/MiscBase.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; - -import {IAaveCLRobotOperator} from '../interfaces/IAaveCLRobotOperator.sol'; - -/** - * @title Caps Risk Oracle Activation on Base, Avalanche - * @author BGD Labs (@bgdlabs) - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/78 - */ -contract AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408 is IProposalGenericExecutor { - using SafeERC20 for IERC20; - - address public constant EDGE_RISK_STEWARD = 0xB892202d9Ce2C16C565A492a5168689b215Eb269; - address public constant AAVE_STEWARD_INJECTOR = 0x4f84A364B66Eb6280350da011829a6BD02B4712f; - - address public constant LINK_TOKEN = 0x88Fb150BDc53A65fe94Dea0c9BA0a6dAf8C6e196; - uint96 public constant LINK_AMOUNT = 30 ether; - - function execute() external { - AaveV3Base.ACL_MANAGER.addRiskAdmin(EDGE_RISK_STEWARD); - - IERC20(LINK_TOKEN).forceApprove(MiscBase.AAVE_CL_ROBOT_OPERATOR, LINK_AMOUNT); - IAaveCLRobotOperator(MiscBase.AAVE_CL_ROBOT_OPERATOR).register( - 'Caps AGRS Injector', - AAVE_STEWARD_INJECTOR, - '', - 5_000_000, - LINK_AMOUNT, - 0, - '' - ); - } -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol deleted file mode 100644 index f1b3860d5..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408, IAaveCLRobotOperator} from './AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol'; -import {AutomationCompatibleInterface} from './interfaces/AutomationCompatibleInterface.sol'; -import {IAaveStewardInjector} from './interfaces/IAaveStewardInjector.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {IRiskOracle} from '../interfaces/IRiskOracle.sol'; - -/** - * @dev Test for AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408 - * command: FOUNDRY_PROFILE=base forge test --match-path=src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol -vv - */ -contract AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408_Test is ProtocolV3TestBase { - AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408 internal proposal; - - address public constant RISK_ORACLE_OWNER = 0x42939e82DF15afc586bb95f7dD69Afb6Dc24A6f9; - IRiskOracle public RISK_ORACLE; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 28696835); - proposal = new AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408(); - - RISK_ORACLE = IRiskOracle(IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()).RISK_ORACLE()); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408', - AaveV3Base.POOL, - address(proposal) - ); - } - - function test_permissions() public { - assertEq(AaveV3Base.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), false); - executePayload(vm, address(proposal)); - - assertEq(AaveV3Base.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), true); - assertEq( - IRiskSteward(proposal.EDGE_RISK_STEWARD()).RISK_COUNCIL(), - proposal.AAVE_STEWARD_INJECTOR() - ); - } - - function test_robotRegistered() public { - vm.expectEmit(false, true, true, true); - emit IAaveCLRobotOperator.KeeperRegistered( - uint256(0), - proposal.AAVE_STEWARD_INJECTOR(), - uint96(proposal.LINK_AMOUNT()) - ); - executePayload(vm, address(proposal)); - } - - /// forge-config: default.evm_version = 'cancun' - function test_injectUpdateToProtocol() public { - executePayload(vm, address(proposal)); - (, uint256 supplyCap) = AaveV3Base.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps( - AaveV3BaseAssets.WETH_UNDERLYING - ); - uint256 supplyCapToSet = (supplyCap * 130) / 100; // increase caps by 30% - - _addUpdateToRiskOracle(supplyCapToSet); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - proposal.AAVE_STEWARD_INJECTOR() - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(proposal.AAVE_STEWARD_INJECTOR()).performUpkeep(performData); - - (, uint256 currentSupplyCap) = AaveV3Base.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps( - AaveV3BaseAssets.WETH_UNDERLYING - ); - assertEq(supplyCapToSet, currentSupplyCap); - } - - function test_injectorConfigurations() public view { - address[] memory configuredMarkets = IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()) - .getMarkets(); - - address[] memory listedAssets = AaveV3Base.POOL.getReservesList(); - address[] memory expectedMarkets = new address[](listedAssets.length - 2); - uint256 count; - for (uint256 i = 0; i < listedAssets.length; i++) { - if ( - listedAssets[i] == AaveV3BaseAssets.wrsETH_UNDERLYING || - listedAssets[i] == AaveV3BaseAssets.ezETH_UNDERLYING - ) continue; - expectedMarkets[count] = AaveV3Base.POOL.getReserveAToken(listedAssets[i]); - count++; - } - - // all aTokens listed are configured on the injector except for wrsETH and ezETH - assertEq(configuredMarkets, expectedMarkets); - - string[] memory updateTypes = IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()) - .getUpdateTypes(); - assertEq(updateTypes.length, 2); - assertEq(updateTypes[0], 'supplyCap'); - assertEq(updateTypes[1], 'borrowCap'); - } - - function _addUpdateToRiskOracle(uint256 value) internal { - vm.startPrank(RISK_ORACLE_OWNER); - RISK_ORACLE.publishRiskParameterUpdate( - 'referenceId', - abi.encodePacked(value * 1e18), - 'supplyCap', - address(AaveV3BaseAssets.WETH_A_TOKEN), - 'additionalData' - ); - vm.stopPrank(); - } -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche.md b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche.md deleted file mode 100644 index 343b563e2..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Caps Risk Oracle Activation on Base, Avalanche" -author: "BGD Labs (@bgdlabs)" -discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/78" -snapshot: "Direct To AIP" ---- - -## Simple Summary - -Following the successful operation of the cap risk stewards (AGRS) on Aave v3 Arbitrum since end of February, this proposal enables exactly the same constraint system on Base and Avalanche. - -## Motivation - -[Proposal 253](https://vote.onaave.com/proposal/?proposalId=253) approved by governance and executed February 25th enabled an automated AGRS (Aave Generalised Risk Stewards) system to allow modification of supply and borrow caps in Aave v3 Arbitrum as pilot, in order to make caps maintenance more efficient, reducing the overall overhead of updating them via manual stewards or governance proposals, while having a more dynamic system reducing the delta between caps and supplies/borrowings. - -Since then, the system has been working [flawlessly on Arbitrum](https://governance.aave.com/t/chaos-labs-monthly-community-update/11174/26?u=chaoslabs#p-55100-supply-and-borrow-caps-7), with 55 caps updates. So following the plan it is reasonable to continue optimizing by introducing the same on other networks, more precisely Base and Avalanche. - -## Specification - -_This new Base and Avalanche instances of AGRS will mirror exactly the same infrastructure as the currently active on Arbitrum_, but a summary of specifications is the following: - -- The AGRS will only have two configurable parameters: supply and borrow caps. -- Recommendation of these parameters will be submitted to a RiskOracle smart contract, from the Edge off-chain infrastructure. -- Between the risk oracle smart contract and the AGRS contract, there will be a thin middleware AaveStewardCapsInjector, with the following logic: - - Takes recommendations from the Edge Risk Oracle side and propagate them to the AGRS contract. - - Enforce that only the whitelisted assets can be acted upon. - - Given the protections (percentage constraints and time delay) on the AGRS side and that it is an assumption that risk recommendations will be timed correctly on the Edge Risk Oracle side, the propagation will be permissionless. -- The AaveStewardCapsInjector will be part of the Aave Robot infrastructure, running on Chainlink Automation and consuming LINK from the Aave Collector on each network. -- The new AGRS contract will be given RISK_ADMIN role. -- All currently listed assets on Base and Arbitrum will be automated, aside from rsETH and ezETH on Base, as those have pretty ad-hoc caps dynamics. -- Constraints on both Base and Avalanche will be the same as on the system currently live on Arbitrum: maximum 30% increase/decrease each 3 days -- The off-chain caps methodology description can be found on the Aave governance forum [here](https://governance.aave.com/t/arfc-supply-and-borrow-cap-risk-oracle-activation/20834) - -**Base** - -| Contract | Address | -| ----------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| EdgeRiskStewardCaps | [0xB892202d9Ce2C16C565A492a5168689b215Eb269](https://basescan.org/address/0xB892202d9Ce2C16C565A492a5168689b215Eb269#code) | -| AaveStewardInjectorCaps | [0x4f84A364B66Eb6280350da011829a6BD02B4712f](https://basescan.org/address/0x4f84A364B66Eb6280350da011829a6BD02B4712f#code) | -| RiskOracle | [0x239d3Bc5fa247337287cb03f53B8bc63DBBc332D](https://basescan.org/address/0x239d3Bc5fa247337287cb03f53B8bc63DBBc332D#code) | - -**Avalanche** - -| Contract | Address | -| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| EdgeRiskStewardCaps | [0x57218F3aB422A39115951c3Eb06881a7A719DfdD](https://snowtrace.io/address/0x57218F3aB422A39115951c3Eb06881a7A719DfdD#code) | -| AaveStewardInjectorCaps | [0x54714FAc85b0bf627288CC3a186dE81A42f1D635](https://snowtrace.io/address/0x54714FAc85b0bf627288CC3a186dE81A42f1D635#code) | -| RiskOracle | [0x1273f29204fC102bD4620485B13cFE27a794fF32](https://snowtrace.io/address/0x1273f29204fC102bD4620485B13cFE27a794fF32/contract/43114/code) | - -## References - -- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/42be49cad384faa1815aed5cf546d3b5f1bd8f02/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/42be49cad384faa1815aed5cf546d3b5f1bd8f02/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol) -- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/42be49cad384faa1815aed5cf546d3b5f1bd8f02/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/42be49cad384faa1815aed5cf546d3b5f1bd8f02/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.t.sol) -- Code Diffs: [Base-Arbitrum-AaveStewardInjectorCaps](https://contract-diff.swiss-knife.xyz/?contractOld=0x4f84A364B66Eb6280350da011829a6BD02B4712f&contractNew=0x35d53dEB2F6f40Ea7af32B6F8BEd88eA966DF1D9&chainIdOld=8453&chainIdNew=42161), [Avalanche-Arbitrum-AaveStewardInjectorCaps](https://contract-diff.swiss-knife.xyz/?contractOld=0x54714FAc85b0bf627288CC3a186dE81A42f1D635&contractNew=0x35d53dEB2F6f40Ea7af32B6F8BEd88eA966DF1D9&chainIdOld=43114&chainIdNew=42161), [Base-Arbitrum-EdgeRiskStewardCaps](https://contract-diff.swiss-knife.xyz/?contractOld=0xB892202d9Ce2C16C565A492a5168689b215Eb269&contractNew=0x085E34722e04567Df9E6d2c32e82fd74f3342e79&chainIdOld=8453&chainIdNew=42161), [Avalanche-Arbitrum-EdgeRiskStewardCaps](https://contract-diff.swiss-knife.xyz/?contractOld=0x57218F3aB422A39115951c3Eb06881a7A719DfdD&contractNew=0x085E34722e04567Df9E6d2c32e82fd74f3342e79&chainIdOld=43114&chainIdNew=42161) -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/78) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol deleted file mode 100644 index 670f755f5..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol +++ /dev/null @@ -1,90 +0,0 @@ -// 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, AvalancheScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408} from './AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol'; -import {AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408} from './AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408.sol'; - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408).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/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche_20250408.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_CapsRiskOracleActivationOnBaseAvalanche_20250408).creationCode - ); - payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_CapsRiskOracleActivationOnBaseAvalanche_20250408).creationCode - ); - payloads[1] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/CapsRiskOracleActivationOnBaseAvalanche.md' - ) - ); - } -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/config.ts b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/config.ts deleted file mode 100644 index 658e6693b..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Avalanche', 'AaveV3Base'], - title: 'Caps Risk Oracle Activation on Base, Avalanche', - shortName: 'CapsRiskOracleActivationOnBaseAvalanche', - date: '20250408', - author: 'BGD Labs (@bgdlabs)', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 59897799}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 28665693}}, - }, -}; diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/AutomationCompatibleInterface.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/AutomationCompatibleInterface.sol deleted file mode 100644 index 6d30ab5d5..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/AutomationCompatibleInterface.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface AutomationCompatibleInterface { - /** - * @notice method that is simulated by the keepers to see if any work actually - * needs to be performed. This method does does not actually need to be - * executable, and since it is only ever simulated it can consume lots of gas. - * @dev To ensure that it is never called, you may want to add the - * cannotExecute modifier from KeeperBase to your implementation of this - * method. - * @param checkData specified in the upkeep registration so it is always the - * same for a registered upkeep. This can easily be broken down into specific - * arguments using `abi.decode`, so multiple upkeeps can be registered on the - * same contract and easily differentiated by the contract. - * @return upkeepNeeded boolean to indicate whether the keeper should call - * performUpkeep or not. - * @return performData bytes that the keeper should call performUpkeep with, if - * upkeep is needed. If you would like to encode data to decode later, try - * `abi.encode`. - */ - function checkUpkeep( - bytes calldata checkData - ) external returns (bool upkeepNeeded, bytes memory performData); - - /** - * @notice method that is actually executed by the keepers, via the registry. - * The data returned by the checkUpkeep simulation will be passed into - * this method to actually be executed. - * @dev The input to this method should not be trusted, and the caller of the - * method should not even be restricted to any single registry. Anyone should - * be able call it, and the input should be validated, there is no guarantee - * that the data passed in is the performData returned from checkUpkeep. This - * could happen due to malicious keepers, racing keepers, or simply a state - * change while the performUpkeep transaction is waiting for confirmation. - * Always validate the data passed in. - * @param performData is the data which was passed back from the checkData - * simulation. If it is encoded, it can easily be decoded into other types by - * calling `abi.decode`. This data should not be trusted, and should be - * validated against the contract's current state. - */ - function performUpkeep(bytes calldata performData) external; -} diff --git a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/IAaveStewardInjector.sol b/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/IAaveStewardInjector.sol deleted file mode 100644 index 2d4024bbc..000000000 --- a/src/20250408_Multi_CapsRiskOracleActivationOnBaseAvalanche/interfaces/IAaveStewardInjector.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IAaveStewardInjector { - function getMarkets() external view returns (address[] memory); - - function removeMarkets(address[] calldata markets) external; - - function getUpdateTypes() external pure returns (string[] memory updateTypes); - - function RISK_STEWARD() external view returns (address); - - function RISK_ORACLE() external view returns (address); -} diff --git a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol b/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol deleted file mode 100644 index c925ac025..000000000 --- a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Add rlUSD to Core Instance - * @author ACI - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x539ad30f3d3d531702bb7619fc0a9a44dc2da6a8e022eff7ffdc678032e0a8b9 - * - Discussion: https://governance.aave.com/t/arfc-add-rlusd-to-core-instance/20214 - */ -contract AaveV3Ethereum_AddRlUSDToCoreInstance_20250409 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant RLUSD = 0x8292Bb45bf1Ee4d140127049757C2E0fF06317eD; - uint256 public constant RLUSD_SEED_AMOUNT = 100e18; - address public constant RLUSD_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(RLUSD).forceApprove(address(AaveV3Ethereum.POOL), RLUSD_SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(RLUSD, RLUSD_SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aRLUSD = AaveV3Ethereum.POOL.getReserveAToken(RLUSD); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(RLUSD, RLUSD_LM_ADMIN); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aRLUSD, RLUSD_LM_ADMIN); - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: RLUSD, - assetSymbol: 'RLUSD', - priceFeed: 0xf0eaC18E908B34770FDEe46d069c846bDa866759, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 0, - liqThreshold: 0, - liqBonus: 0, - reserveFactor: 10_00, - supplyCap: 50_000_000, - borrowCap: 5_000_000, - debtCeiling: 0, - liqProtocolFee: 0, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 80_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 6_50, - variableRateSlope2: 50_00 - }) - }); - - return listings; - } -} diff --git a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.t.sol b/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.t.sol deleted file mode 100644 index 6b5970e1c..000000000 --- a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.t.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_AddRlUSDToCoreInstance_20250409} from './AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol'; - -/** - * @dev Test for AaveV3Ethereum_AddRlUSDToCoreInstance_20250409 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.t.sol -vv - */ -contract AaveV3Ethereum_AddRlUSDToCoreInstance_20250409_Test is ProtocolV3TestBase { - AaveV3Ethereum_AddRlUSDToCoreInstance_20250409 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22266958); - - proposal = new AaveV3Ethereum_AddRlUSDToCoreInstance_20250409(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_AddRlUSDToCoreInstance_20250409', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHasRLUSDFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.RLUSD()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 100 * 10 ** 18); - } - - function test_RLUSDAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aRLUSD = AaveV3Ethereum.POOL.getReserveAToken(proposal.RLUSD()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.RLUSD()), - proposal.RLUSD_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aRLUSD), - proposal.RLUSD_LM_ADMIN() - ); - } -} diff --git a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance.md b/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance.md deleted file mode 100644 index 9b2b01e33..000000000 --- a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Add rlUSD to Core Instance" -author: "ACI" -discussions: "https://governance.aave.com/t/arfc-add-rlusd-to-core-instance/20214" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x539ad30f3d3d531702bb7619fc0a9a44dc2da6a8e022eff7ffdc678032e0a8b9" ---- - -## Simple Summary - -This AIP seeks governance approval to onboard Ripple’s rlUSD stablecoin to the Core instance of Aave v3 on Ethereum. - -## Motivation - -rlUSD is Ripple's stablecoin it's onboarding in the Aave ecosystem is a strategic growth opportunity to reach new audiences. - -## Specification - -The table below illustrates the configured risk parameters for **RLUSD** - -| Parameter | Value | -| ------------------------- | -----------------------------------------: | -| Isolation Mode | false | -| Borrowable | ENABLED | -| Collateral Enabled | true | -| Supply Cap (RLUSD) | 50,000,000 | -| Borrow Cap (RLUSD) | 5,000,000 | -| Debt Ceiling | USD 0 | -| LTV | 0 % | -| LT | 0 % | -| Liquidation Bonus | 0 % | -| Liquidation Protocol Fee | 0 % | -| Reserve Factor | 10 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 6.5 % | -| Variable Slope 2 | 50 % | -| Uoptimal | 80 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | 0xf0eaC18E908B34770FDEe46d069c846bDa866759 | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for RLUSD and the corresponding aToken. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/0a32d800b0425cdbf163787daf34c4b72fd2e69d/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/0a32d800b0425cdbf163787daf34c4b72fd2e69d/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x539ad30f3d3d531702bb7619fc0a9a44dc2da6a8e022eff7ffdc678032e0a8b9) -- [Discussion](https://governance.aave.com/t/arfc-add-rlusd-to-core-instance/20214) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance_20250409.s.sol b/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance_20250409.s.sol deleted file mode 100644 index 37481551f..000000000 --- a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance_20250409.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_AddRlUSDToCoreInstance_20250409} from './AaveV3Ethereum_AddRlUSDToCoreInstance_20250409.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance_20250409.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AddRlUSDToCoreInstance_20250409.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AddRlUSDToCoreInstance_20250409).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/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance_20250409.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_AddRlUSDToCoreInstance_20250409).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/AddRlUSDToCoreInstance.md' - ) - ); - } -} diff --git a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/config.ts b/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/config.ts deleted file mode 100644 index a77c07181..000000000 --- a/src/20250409_AaveV3Ethereum_AddRlUSDToCoreInstance/config.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'Add rlUSD to Core Instance', - shortName: 'AddRlUSDToCoreInstance', - date: '20250409', - author: 'ACI', - discussion: 'https://governance.aave.com/t/arfc-add-rlusd-to-core-instance/20214', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0x539ad30f3d3d531702bb7619fc0a9a44dc2da6a8e022eff7ffdc678032e0a8b9', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - ASSET_LISTING: [ - { - assetSymbol: 'RLUSD', - decimals: 18, - priceFeed: '0x26C46B7aD0012cA71F2298ada567dC9Af14E7f2A', - ltv: '0', - liqThreshold: '0', - liqBonus: '0', - debtCeiling: '0', - liqProtocolFee: '0', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '50000000', - borrowCap: '40000000', - rateStrategyParams: { - optimalUtilizationRate: '80', - baseVariableBorrowRate: '0', - variableRateSlope1: '6.5', - variableRateSlope2: '50', - }, - asset: '0x8292Bb45bf1Ee4d140127049757C2E0fF06317eD', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 22231967}, - }, - }, -}; diff --git a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI.md b/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI.md deleted file mode 100644 index 807be5574..000000000 --- a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "Aave Liquidity Committee Funding Phase VI" -author: "TokenLogic" -discussions: "https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-vi/21682" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x2af009587f8c624f798ec36e20572a69be7fc6321882b1ba19143da29d45f1ac" ---- - -## Simple Summary - -This publication presents the Aave Liquidity Committee (ALC) Phase VI Funding request. - -## Motivation - -### Phase V Update - -#### GHO Supply - -Over the course of the last quarter, the market dynamics surrounding GHO experienced a notable shift. As yield opportunities in the broader DeFi landscape became less attractive due to declining funding rates, users began redirecting their capital in search of alternative sources of return. - -GHO, particularly through its liquidity provision use cases, emerged as a compelling destination. This resurgence in interest was further reinforced by the reactivation and full replenishment of the GSMs, which had previously been nearly emptied. These modules went from holding negligible balances to over $28M in total during the period. - -![Screenshot 2025-04-03 at 20.01.51](https://hackmd.io/_uploads/BkpQj8ha1e.png) - -### Ethereum - -#### DEX Liquidity - -On Ethereum, GHO's peg has been resilient and consistent during Q1 of 2025 and the deeper DEX liquidity has enabled larger swap sizes to be processed with minimal price impact. - -With perp funding rates and broader DeFi liquidity costs trending lower, Liquidity Provider (LPs) deposits across GHO DEX pools experienced significant growth, surpassing $85M. - -![Screenshot 2025-04-03 at 19.28.53](https://hackmd.io/_uploads/HJs_7Un6kl.png) - -In addition, USDT volatility helped grow GSM TVL to over $28M, ensuring continuous, on-demand support for GHO's peg. - -![Screenshot 2025-04-03 at 19.37.44](https://hackmd.io/_uploads/rJUtSIh6yg.png) - -#### Balancer v3 - -GHO became the centerpiece asset within the new generation of Balancer pools, reflecting its growing systemic importance. On Ethereum, the primary GHO 3pool successfully migrated to the v3 boosted model, is approaching $30M in TVL. - -The new Aave Boosted 3pool has exceeded the previous v2 pool’s performance, whilst also delivering superior capital efficiency and deeper liquidity provisioning. On Arbitrum liquidity was migrated from v2 to v3 liquidity and new v3 pools created on Base. - -On Arbitrum and Base, these pools incorporated the new “surge” pricing mechanism, which dynamically increases swap fees as the pool diverges from the peg. This mechanism adds an additional layer of price defense, reinforcing the GHO's peg on L2s. - -![Screenshot 2025-04-03 at 19.43.34](https://hackmd.io/_uploads/HJQywLh6Jl.png) - -#### Prime Instance - -Another major milestone during Phase V was the introduction of the GHO and the Gho Mint facilitator on the Prime instance. This new market brought new multifaceted utility to GHO. - -- Created a structure in which GHO could be pre-minted and held by the DAO, providing operational flexibility and improving responsiveness to market demand. -- Enables GHO to earn yield directly through variable-rate borrow mechanisms, enabling more capital-efficient stablecoin management. -- Unlocked additional yield opportunities for Balancer v3 pools to deposit into, incentivizing further liquidity provisioning. - -Lastly, the Prime instance permitted a portion of the GHO allowances allocated to service providers and ecosystem initiatives to be deposited into yield-bearing positions, improving overall capital efficiency of the assets held in the DAO's treasury. - -![Screenshot 2025-04-03 at 19.46.58](https://hackmd.io/_uploads/S1G3vI261g.png) - -#### Fluid and Rings Integration - -Fluid has been whitelisted to be the home of GHO from the backing of scUSD. It has grown to over 6M without incentive on Fluid directly with a very low acquisition cost due to a deposit campaign featuring Bungee to encourage GHO deposits in Rings. - -Over the coming weeks, Rings is expected to onboard Gearbox by Veda. As GHO deposits continue to grow, GHO liquidity is expected to be distributed across Fluid and Gearbox. - -Reference: https://x.com/Token_Logic/status/1905352281027166589 - -#### PYUSD/GHO Liquidity - -7.5M liquidity was sourced for the PYUSD/GHO Balancer v3 liquidity pool. - -#### Resolv Collaboration - -One of the most innovative integrations of the quarter was GHO’s entry into the Resolv ecosystem. In collaboration with Resolv, the ALC deployed a campaign centered on the Curve GHO/USR LP token, and worked with both Pendle and Spectra to create yield markets enabling the ALC to receive a higher ROI on bribe spend, ~x2.2-2.4 multiplier compared to x1.1-1.3 directly on DEXs. - -This was a great success knowing that no other asset of its kind had previously gained such traction in structured yield products. The campaign was enhanced by a one-month point-boost from Resolv, supplemented by strategic incentives from the ALC. The result was unprecedented: the initiative led to the formation of the largest GHO and USR liquidity pools, reaching up to $35 million in TVL. - -![Screenshot 2025-04-03 at 19.48.37](https://hackmd.io/_uploads/Sk_zuLhTJg.png) - -#### Arbitrum - -Despite the broader success seen on Ethereum and Base, GHO’s growth on Arbitrum remains modest. The lack of meaningful traction can be attributed to delays in strategic integrations, most notably the anticipated collaboration with Synthetix, which ultimately opted to shift its primary focus and development efforts to the Base network. As a result, the GHO ecosystem on Arbitrum has yet to reach critical mass, although foundational infrastructure remains in place for future expansion. - -#### Base - -Phase V also saw the deployment of GHO on Base, a move that has already begun to bear fruit. GHO’s main liquidity pool on Base, the Balancer v3 GHO/USDC pool, has surpassed $13.5 million in TVL within a relatively short period. This rapid growth reflects strong initial interest and suggests high potential for deeper integrations. One such opportunity lies in the upcoming collaboration with Synthetix, which is now in advanced planning stages with Odos soon to integrate the stataToken factory enabling the waBasGHO integration to advance with Synthetixs. - -## Phase VI Lookahead - -### Ethereum - -GHO has already secured a strong presence on Ethereum mainnet, with integrations across a wide range of protocols. It is now actively used within lending protocols such as Gearbox and Fluid, offering users capital-efficient strategies centered on GHO. In the DEX landscape, GHO is supported across Balancer, Curve, Maverick, and Fluid, demonstrating its growing utility and liquidity footprint across various automated market makers. - -GHO will remain at the front stage of Ethereum's DeFi, ALC members are actively looking for collaboration with promising projects at early stage to give access to interesting opportunities for GHO holders. The latest best example was the Resolv collaboration. This will continue during Phase VI as well. - -#### L2s and Multichain Strategies - -A core priority for Phase VI will be the continued development of GHO’s multichain strategy, centered around the use of one facilitator on mainnet, the use of the CCIP bridge, and the implementation of GSMs on destination chains. These Stability Modules will be pre-filled by the mainnet facilitator, enabling native swaps into GHO on arrival chains and eliminating the need for inefficient bridging. - -This architecture significantly enhances capital efficiency by allowing users to mint or swap GHO directly on their preferred chain. It also addresses one of the key friction points observed in Phase V, as bridging has proven to be a major brake on growth. By enabling native, trust-minimized GHO access across chains, the stataGSMs will remove barriers to adoption and improve user experience across ecosystems. - -The modified stataGSM is currently in the last stages of review with @TokenLogic and @AaveLabs. - -#### Sonic, Avalanche and Gnosis - -Three key chains are being targeted for GHO deployment in the near future: Sonic, Avalanche, and Gnosis. Each of these networks offers a unique opportunity to tailor GHO’s integration to the strengths of the local ecosystem. - -On Sonic with @TokenLogic leading the deployment, the ALC plans to position GHO at the heart of one of the most innovative DeFi environments currently emerging. The goal is to create strong synergies with leading protocols such as Pendle, Rings, Beets, and Silo. Sonic offers a highly composable, fast-moving landscape where GHO can fit perfectly. - -On Avalanche, with @AaveLabs leading the deployment, GHO will benefit from the support of the Avalanche Foundation, which is preparing to launch new incentive programs at the chain level. The ALC is working to ensure that GHO is a key participant in these initiatives. The playbook established with Balancer v3 on Ethereum may be replicated here, with additional attention to exploring synergies with Avalanche’s native stablecoin AUSD. This deployment will be focused on ecosystem-wide coordination. - -On Gnosis, the vision is centered on integrating GHO into the Gnosis Card ecosystem. The objective is to streamline both on- and off-ramping processes. The ALC will work closely with KPK and the Gnosis Foundation to facilitate this integration, creating a seamless user experience for payments, transfers, and financial access via GHO on Gnosis. - -### Performance Metrics - -The below details some high-level GHO metrics: - -| Description | Ethereum | Arbitrum | Avalanche | Base | -| ------------------------------------------ | :--------------------------: | :--------------------------: | :--------------------------: | :--------------------------: | -| TVL DEX Liquidity Pools | 85M | 10M | 10M | 20M | -| TVL Utility Liquidity Pools (Excl. stkGHO) | 15M | 5M | 5M | 5M | -| DEX Liquidity Composition | < 50% GHO (< 33% for 3pools) | < 50% GHO (< 33% for 3pools) | < 50% GHO (< 33% for 3pools) | < 50% GHO (< 33% for 3pools) | -| Swap Price Impact $5M Swap (GHO to USDC) | < 0.10% | < 0.25% | < 0.25% | < 0.25% | -| Annualised Peg Volatility | < 5.00% | < 5.00% | < 5.00% | < 5.00% | -| Price level for >90% time | $0.995 | $0.995 | $0.995 | $0.995 | - -Please note, each of the above targets has external dependencies beyond the control of the ALC. The above table serves as a North Star for the ALC to strive towards over the next three months. Having measurable targets provides a clear direction and goal to achieve. - -## Specification - -Create allowance for the ALC to withdraw 3,500,000 aEthLidoGHO from the Ethereum collector. -ALC Ethereum SAFE: `0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b` - -## References - -- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/ab657563c4c7dc2e33947cf1f3a49e26828b1135/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol) -- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/ab657563c4c7dc2e33947cf1f3a49e26828b1135/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x2af009587f8c624f798ec36e20572a69be7fc6321882b1ba19143da29d45f1ac) -- [Discussion](https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-vi/21682) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI_20250410.s.sol b/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI_20250410.s.sol deleted file mode 100644 index 17e7372da..000000000 --- a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI_20250410.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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 {AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410} from './AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI_20250410.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveLiquidityCommitteeFundingPhaseVI_20250410.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410).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/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI_20250410.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(AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveLiquidityCommitteeFundingPhaseVI.md' - ) - ); - } -} diff --git a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol b/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol deleted file mode 100644 index 458d172af..000000000 --- a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -/** - * @title Aave Liquidity Committee Funding Phase VI - * @author TokenLogic - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x2af009587f8c624f798ec36e20572a69be7fc6321882b1ba19143da29d45f1ac - * - Discussion: https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-vi/21682 - */ -contract AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410 is - IProposalGenericExecutor -{ - // https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b - address public constant ALC_SAFE = 0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b; - uint256 public constant GHO_ALLOWANCE = 3_500_000e18; - - function execute() external { - AaveV3EthereumLido.COLLECTOR.approve( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN), - ALC_SAFE, - GHO_ALLOWANCE - ); - } -} diff --git a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.t.sol b/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.t.sol deleted file mode 100644 index 703471ac5..000000000 --- a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.t.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410} from './AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.sol'; - -/** - * @dev Test for AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410.t.sol -vv - */ -contract AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410_Test is - ProtocolV3TestBase -{ - AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22283030); - proposal = new AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI_20250410', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } - - function test_allowance() public { - executePayload(vm, address(proposal)); - - assertEq( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).allowance( - address(AaveV3EthereumLido.COLLECTOR), - proposal.ALC_SAFE() - ), - proposal.GHO_ALLOWANCE() - ); - - vm.startPrank(proposal.ALC_SAFE()); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - proposal.ALC_SAFE() - ); - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).transferFrom( - address(AaveV3EthereumLido.COLLECTOR), - proposal.ALC_SAFE(), - proposal.GHO_ALLOWANCE() - ); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - proposal.ALC_SAFE() - ); - - assertEq(ghoBalanceAfter, ghoBalanceBefore + proposal.GHO_ALLOWANCE()); - } -} diff --git a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/config.ts b/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/config.ts deleted file mode 100644 index da094f457..000000000 --- a/src/20250410_AaveV3EthereumLido_AaveLiquidityCommitteeFundingPhaseVI/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3EthereumLido'], - title: 'Aave Liquidity Committee Funding Phase VI', - shortName: 'AaveLiquidityCommitteeFundingPhaseVI', - date: '20250410', - author: 'TokenLogic', - discussion: - 'https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-vi/21682', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0x2af009587f8c624f798ec36e20572a69be7fc6321882b1ba19143da29d45f1ac', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3EthereumLido: {configs: {}, cache: {blockNumber: 22242008}}}, -}; diff --git a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol b/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol deleted file mode 100644 index 631996ed5..000000000 --- a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; - -/** - * @title Renew LlamaRisk as Risk Service Provider - epoch 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x70ce585823c2c1a60cb6bbd64750682a2a9a4b501e3f4342812ebf6bb5d51892 - * - Discussion: https://governance.aave.com/t/arfc-renew-llamarisk-as-risk-service-provider-epoch-3/21666 - */ -contract AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413 is - IProposalGenericExecutor -{ - // stream information - uint256 public constant STREAM_DURATION = 365 days; - // budgets - uint256 public constant STREAM_AMOUNT = 1_000_000 ether; - // stream receivers - address public constant LLAMA_RISK = 0x9eE16dBDE572886342fc1e2Db8525DEFB007b27c; - function execute() external { - CollectorUtils.stream( - AaveV3EthereumLido.COLLECTOR, - CollectorUtils.CreateStreamInput({ - underlying: AaveV3EthereumLidoAssets.GHO_A_TOKEN, - receiver: LLAMA_RISK, - amount: STREAM_AMOUNT, - start: block.timestamp, - duration: STREAM_DURATION - }) - ); - } -} diff --git a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.t.sol b/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.t.sol deleted file mode 100644 index a70b06314..000000000 --- a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.t.sol +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413} from './AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -/** - * @dev Test for AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.t.sol -vv - */ -contract AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413_Test is - ProtocolV3TestBase -{ - AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22262655); - proposal = new AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } - - function test_wholeProcess() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - address ghoPaymentAddresses = proposal.LLAMA_RISK(); - uint256 ghoBalancesBeforeUsers = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 365 days); - - uint256 aGHOInterest = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ) - ghoBalancesBeforeUsers; - // Stream transfers - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId, - ghoPaymentAddresses - ); - - assertApproxEqRel( - finalBalanceToWithdraw, - proposal.STREAM_AMOUNT(), - maxDeltaStreamBalance, - 'GHO Stream final balance is not correct' - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, finalBalanceToWithdraw); - assertApproxEqRel( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(ghoPaymentAddresses), - ghoBalancesBeforeUsers + proposal.STREAM_AMOUNT() + aGHOInterest, - maxDeltaStreamBalance, - 'GHO Stream final withdraw is not correct' - ); - } - - function test_streamBalance() public { - address ghoPaymentAddresses = proposal.LLAMA_RISK(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 1 days); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, 1); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - assertEq(ghoBalanceAfter, ghoBalanceBefore + 1); - } - - function test_streamEndBalance() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - address ghoPaymentAddresses = proposal.LLAMA_RISK(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 365 days); - - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId, - ghoPaymentAddresses - ); - - assertApproxEqRel(finalBalanceToWithdraw, proposal.STREAM_AMOUNT(), maxDeltaStreamBalance); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, finalBalanceToWithdraw); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - assertApproxEqRel( - ghoBalanceAfter, - ghoBalanceBefore + proposal.STREAM_AMOUNT(), - maxDeltaStreamBalance - ); - } -} diff --git a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3.md b/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3.md deleted file mode 100644 index 4b320c6e7..000000000 --- a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: "Renew LlamaRisk as Risk Service Provider - epoch 3" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-renew-llamarisk-as-risk-service-provider-epoch-3/21666" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x70ce585823c2c1a60cb6bbd64750682a2a9a4b501e3f4342812ebf6bb5d51892" ---- - -## Simple Summary - -This proposal offers the opportunity to renew LLamaRisk engagement as a service provider for a year. - -## Motivation - -> LlamaRisk submits this proposal to renew our role as an Aave Service Provider. Over the past year, we have delivered consistent value to the DAO through independent risk analysis and proactive contributions to Aave’s security and strategic decision-making. We cherish the opportunity to work for an organization that encourages public debate and believe that retaining the services of two risk providers is part of Aave’s moat. -> -> For this next epoch, we propose a service fee of $1m for one year, a 25% increase from the previous term. This adjustment reflects our expanded engagement, the need to retain specialized talent dedicated to Aave’s risk management, and our commitment to upholding the highest service standards. -> -> Our contributions are fully transparent and verifiable through our daily engagement on the [forum](https://governance.aave.com/u/llamarisk/activity), monthly [community updates](https://governance.aave.com/t/llamarisk-monthly-community-update/17935), and [research publications](https://www.llamarisk.com/research). Below, we review our key achievements in Epoch 2 and outline our vision for this renewal. -> -> ### Epoch 2 retrospective -> -> **Consistency & responsiveness**: -> -> - Supported **90 ARFCs**, opined on **9 new chains** deployments, and served as a reliable signer for the Aave Guardian. -> - Responded to over **100 forum posts** with technical analysis and risk recommendations. -> - Maintained an average of **91h response time for ARFCs**, generally complying with the established 5-day windows. -> -> **Legal & regulatory content**: -> -> - Published relevant and informing legal research, including: -> - [Coinbase’s MiCA-Driven Stablecoin Restrictions](https://www.llamarisk.com/research/coinbase-s-mica-driven-stablecoin-restrictions-aave-s-strategic-opening-in-europe) -> - [Regulatory Pressure on USDT and Legal Features of USDT0](https://governance.aave.com/t/llamarisk-insights-regulatory-pressure-on-usdt-and-legal-features-of-usdt0/20839) -> - [Tether’s Regulatory Status in El Salvador](https://governance.aave.com/t/llamarisk-insights-tethers-regulatory-status-in-el-salvador/20761) -> - [wBTC BitGo Custody Update - Community Update](https://governance.aave.com/t/chaos-labs-wbtc-bitgo-custody-update/18607/11) -> - [sGHO Legal Implications](https://governance.aave.com/t/llamarisk-insights-sgho-legal-implications/21578) -> - [Borrowing/Lending tokenized RWAs (Horizon)](https://governance.aave.com/t/temp-check-building-horizon-s-rwa-product-an-aave-licensed-instance-for-institutions/21384/101) -> -> **Uncompromising independence**: -> -> - Advised [halting sUSDe cap increases and raising liquidation penalties](https://governance.aave.com/t/arfc-temporary-halt-further-susde-cap-increase-and-raise-the-liquidation-penalty/20252). Although we serve on the Ethena risk committee, which can pose potential conflicts of interest, we prioritize Aave’s solvency and users’ safety above all. -> -> **Research & tooling**: -> -> - [Balancing Act: LST Pricing Mechanisms for DeFi Lending](https://www.llamarisk.com/research/lst-pricing) -> - [Ethereum Staking Penalty Simulator](https://x.com/LlamaRisk/status/1851732313920372751) -> - [Aave 3.2 Liquid E-mode short explainer](https://www.llamarisk.com/research/understanding-aave-v3-2-s-liquid-e-mode-a-deep-dive-into-enhanced-capital-efficiency) -> - [Ethena Reserve Fund Drawdown Methodology V2](https://www.llamarisk.com/research/ethena-drawdown-methodology-v2) -> - [MPCs in Protocol Treasury and Operational Context](https://www.llamarisk.com/research/mpc-explainer) -> - [Research on Smart Value Recapture (SVR)](https://governance.aave.com/t/arfc-aave-chainlink-svr-v1-phase-1-activation/21247/5) -> -> **Elevating security standards**: -> -> - Actively advocated for and succeeded in establishing several critical bug bounty programs for protocols seeking Aave integration ([Stakestone](https://governance.aave.com/t/arfc-onboard-stone-to-aave-v3-on-scroll/18862/4), [bCSPX](https://governance.aave.com/t/arfc-add-bcspx-to-aave-v3-gnosis-instance/21113/5), [Botanix Labs](https://governance.aave.com/t/arfc-aave-v3-deployment-on-the-spiderchain-botanix-labs/19978/2), [rsETH](https://governance.aave.com/t/arfc-add-rseth-to-aave-v3-ethereum/17696/12), [Origin Sonic](https://governance.aave.com/t/arfc-add-support-for-wrapped-origin-sonic-wos-to-aave-v3/21179/5), [Resolv](https://governance.aave.com/t/arfc-add-rlusd-to-core-instance/20214/8), [Rings](https://docs.rings.money/developers/bug-bounties), and many others in progress) -> - Championed _Operation Spring Cleaning_, an initiative to address qualitative risks (e.g., [rsETH vulnerability](https://governance.aave.com/t/arfc-onboard-rseth-to-scroll-v3-instance/20742/6) in legacy function, [stS access controls](https://governance.aave.com/t/arfc-add-sts-to-aave-v3-sonic-instance/21445/4) oversight) and raise the standards. Presented at EthDenver ([Beyond Numbers: Qualitative Risk Analysis in DeFi](https://www.youtube.com/watch?v=Hed5hUMmhcY)). -> - Released the first version of our risk metrics dashboard: [score.llamarisk.com](http://score.llamarisk.com) -> -> **Community engagement**: -> -> - Launched [This Week In Aave](https://x.com/aaveweekly), a weekly X thread summarizing protocol developments. -> -> ## Scope -> -> Building on [Epoch 2’s foundation](https://governance.aave.com/t/arfc-renew-llamarisk-as-risk-service-provider/19277), we will continue centering our services to Aave DAO around producing in-depth and actionable risk assessments in recommendations for all current and prospective assets on Aave instances. We will continue working closely with other service providers, especially @ChaosLabs, ensuring comprehensive risk coverage and prioritize the following strategic initiatives: -> -> - **Umbrella parametrization**: Provide dedicated support as members of the newly established [Aave Finance Committee](https://governance.aave.com/t/arfc-aavenomics-implementation-part-one/21248), applying our data-driven capitalization methodology developed through months of research. This approach uses rigorous analysis of market-wide price shocks to determine optimal insurance caps -> - **Smart Value Recapture (SVR)**: Support and monitor SVR implementation. -> - **RWA collaboration**: Work with @AaveLabs on the Horizon program, leveraging our domain expertise in RWA risk assessment. -> - **Aptos Deployment**: Support Aave’s expansion to Aptos with a comprehensive risk analysis of the ecosystem. -> - **sGHO**: Continue supporting the GHO Savings rollout, building on our GSM fee methodology work. We’ll provide risk parametrization and supply target estimations to support @TokenLogic and @kpk’s integration plans. -> -> We propose a 1-year term to underscore our long-term commitment to Aave DAO—performance will dictate continuity. - -## Specification - -A 1 million aEthLidoGho stream directed to the address`0x9eE16dBDE572886342fc1e2Db8525DEFB007b27c` will be created starting immediately for a duration of one year. - -## References - -- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/dd0d8d990c3c1869c3be2602b6c264c8eb04cbed/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol) -- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/dd0d8d990c3c1869c3be2602b6c264c8eb04cbed/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x70ce585823c2c1a60cb6bbd64750682a2a9a4b501e3f4342812ebf6bb5d51892) -- [Discussion](https://governance.aave.com/t/arfc-renew-llamarisk-as-risk-service-provider-epoch-3/21666) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.s.sol b/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.s.sol deleted file mode 100644 index 6cae85e82..000000000 --- a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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 {AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413} from './AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413).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/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413.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(AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3_20250413).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/RenewLlamaRiskAsRiskServiceProviderEpoch3.md' - ) - ); - } -} diff --git a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/config.ts b/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/config.ts deleted file mode 100644 index 867d074ca..000000000 --- a/src/20250413_AaveV3EthereumLido_RenewLlamaRiskAsRiskServiceProviderEpoch3/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3EthereumLido'], - title: 'Renew LlamaRisk as Risk Service Provider - epoch 3', - shortName: 'RenewLlamaRiskAsRiskServiceProviderEpoch3', - date: '20250413', - discussion: - 'https://governance.aave.com/t/arfc-renew-llamarisk-as-risk-service-provider-epoch-3/21666', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0x70ce585823c2c1a60cb6bbd64750682a2a9a4b501e3f4342812ebf6bb5d51892', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22262655}}}, -}; diff --git a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80.md b/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80.md deleted file mode 100644 index 293bb2fde..000000000 --- a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: "ACI Phase IV – “Road to 80”" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-aci-phase-iv-road-to-80/21830" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x7bfe8ade2b8835f30655ca9b908e921ef89ba5061d8d6a64b422dc3643d83c14" ---- - -## Simple Summary - -This ARFC proposes renewing and expanding the Aave Chan Initiative’s (ACI) mandate as the Aave DAO’s Growth and Governance Coordination service provider. Focusing on sustained protocol growth, strategic alignment, and governance operational excellence. - -## Motivation - -Since its inception, ACI has served as the growth engine and governance orchestrator for the Aave DAO. Through managing incentive programs, launching key protocol initiatives, building strategic partnerships, and contributing to governance frameworks, ACI has delivered consistent, high-impact results. During 2024, Aave’s share of the active loan market increased from **below 50%** to **71.2%**, significantly outperforming competitors across the DeFi landscape. - -To keep this proposal concise, a retrospective of ACI’s past mandate has been [published separately](https://governance.aave.com/t/aci-retrospective-2024-present/21825) - -## Strategic Objectives of the next mandate - -### 1. **“Road to 80” – Market Share Leadership** - -Our core KPI: reach 80% of total active DeFi loans across all tracked platforms by expanding Aave’s competitive edge through product innovation, liquidity programs, and strategic onboarding and business development. - -### 2. **MASIv Expansion** - -Extend the Merit-as-a-Service Incentive Vault model as the **standard growth and incentives engine** for partners using Aave and DeFi in general. Building on early adoption from Circle, Tether, Ava Labs, Stader and others, Phase IV will onboard new MASIv clients and create synergistic feedback loops for the Aave ecosystem. - -### 3. **CeDeFi partnership Launch** - -Deliver a CeDeFi partnership with a top-tier centralized exchange providing CeFi access to DeFi-native yield. - -### 4. **Node Infrastructure via Frontier** - -Continue developing Frontier, our Aave-native node infrastructure, on a larger scale. Ensure DAO readiness for Ethereum’s Pectra upgrade and expand node partnerships with Lido, EtherFi, and others. - -### 5. **Multi-Chain Capability** - -Establish ACI’s readiness to operate across non-EVM chains, beginning with Aptos, in preparation for a multi-VM DeFi future. - -### 6. **Team Scaling & Increased Alignment** - -Expand the ACI core team (currently 8 members) with new hires in technical, governance, and ecosystem roles. - ---- - -## ACI Deliverables - -ACI deliverables are executed on a best-effort basis, with transparency and proactive communication regarding any limitations or delays, while aiming to exceed expectations whenever possible. - -### A. Growth & Governance - -- Strategy, design, and execution of growth programs in partnership with Aave DAO’s service providers (Tokenlogic) -- CeDeFi partnerships. -- Coordination of incentive frameworks (MASIv, Liquidity Mining) -- ARFC & AIP drafting and governance operations via Skywards services - -### B. Infrastructure - -- Frontier node services compatible for LSTs and re-staking protocols -- Technical contribution to GHO, MASIv, and DAO tooling as requested and in sync with service providers relevant leads -- Partnership integrations. - -### C. Community & Coordination - -- Management of Snapshot and Discourse (via Dolce Vita) -- Delegate onboarding & incentive structuring (Orbit) -- Proposal escalation and support (Skywards) -- Aave Protocol Embassy (APE) coordination and expansion (delegation-aware aTokens) - ---- - -## Limitation Of Scope - -ACI is not a core developer or maintainer of the Aave protocol codebase. We rely on technical service providers’ tooling and infrastructure. While we have provided support in the past, ACI will not develop protocol infrastructure tools during this mandate. - -For non-EVM ecosystems and Aave V4 (whose codebase is currently unknown to ACI), we will fully depend on technical service providers like @aavelabs to provide the necessary tooling and documentation to fulfill our responsibilities. - ---- - -## Out of Scope - -The ACI clearly defines the following activities as out of scope, based on either our internal capabilities or to respect the roles of other Aave DAO service providers: - -- Direct smart contract development (except for AIP payloads within our scope), auditing, or formal verification (delegated to technical and audit service providers) -- Protocol-level parameter tuning (delegated to technical and Risk Service Providers) -- DAO Treasury or financial operations not governed by ACI mandates (leadership delegated to TokenLogic) - -## Specification - -- **Proposal Duration:** 12 months (365 days) -- **Budget Requested:** 3M aEthLidoGHO -- **Stream Method:** Yearly linear stream - -## References - -- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/3706521bfb92d48ed567d589f35570fdb32b823e/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol) -- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/3706521bfb92d48ed567d589f35570fdb32b823e/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.t.sol) - [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x7bfe8ade2b8835f30655ca9b908e921ef89ba5061d8d6a64b422dc3643d83c14) -- [Discussion](https://governance.aave.com/t/arfc-aci-phase-iv-road-to-80/21830) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol b/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol deleted file mode 100644 index 1602740f2..000000000 --- a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; - -/** - * @title ACI Phase IV – “Road to 80” - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x58ba7872571d324f9ac6f56c0aa87d1393b9712d853e95096545afa965da2e2d - * - Discussion: https://governance.aave.com/t/arfc-aci-phase-iv-road-to-80/21830 - */ -contract AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418 is IProposalGenericExecutor { - // duration - uint256 public constant STREAM_DURATION = 365 days; - // budgets - uint256 public constant STREAM_AMOUNT = 3_000_000 ether; - // stream receivers - address public constant ACI = 0x55Ac902cb75cC15288D473ed8E3E185a75b3f330; // treasury.aci.eth - function execute() external { - CollectorUtils.stream( - AaveV3EthereumLido.COLLECTOR, - CollectorUtils.CreateStreamInput({ - underlying: AaveV3EthereumLidoAssets.GHO_A_TOKEN, - receiver: ACI, - amount: STREAM_AMOUNT, - start: block.timestamp, - duration: STREAM_DURATION - }) - ); - } -} diff --git a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.t.sol b/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.t.sol deleted file mode 100644 index ff188421f..000000000 --- a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.t.sol +++ /dev/null @@ -1,141 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418} from './AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -/** - * @dev Test for AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.t.sol -vv - */ -contract AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418_Test is ProtocolV3TestBase { - AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22348667); - proposal = new AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } - - function test_wholeProcess() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - address ghoPaymentAddresses = proposal.ACI(); - uint256 ghoBalancesBeforeUsers = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 365 days); - - uint256 aGHOInterest = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ) - ghoBalancesBeforeUsers; - // Stream transfers - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId, - ghoPaymentAddresses - ); - - assertApproxEqRel( - finalBalanceToWithdraw, - proposal.STREAM_AMOUNT(), - maxDeltaStreamBalance, - 'GHO Stream final balance is not correct' - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, finalBalanceToWithdraw); - assertApproxEqRel( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(ghoPaymentAddresses), - ghoBalancesBeforeUsers + proposal.STREAM_AMOUNT() + aGHOInterest, - maxDeltaStreamBalance, - 'GHO Stream final withdraw is not correct' - ); - } - - function test_streamBalance() public { - address ghoPaymentAddresses = proposal.ACI(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 1 days); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, 1); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - assertEq(ghoBalanceAfter, ghoBalanceBefore + 1); - } - - function test_streamEndBalance() public { - // 0.001% tolerance due to stream computation inaccuracy - uint256 maxDeltaStreamBalance = 0.00001e18; // 0.001% - - address ghoPaymentAddresses = proposal.ACI(); - - uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); - - executePayload(vm, address(proposal)); - - vm.warp(block.timestamp + 365 days); - - uint256 finalBalanceToWithdraw = AaveV3EthereumLido.COLLECTOR.balanceOf( - nextStreamId, - ghoPaymentAddresses - ); - - assertApproxEqRel(finalBalanceToWithdraw, proposal.STREAM_AMOUNT(), maxDeltaStreamBalance); - - uint256 ghoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - vm.prank(ghoPaymentAddresses); - AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId, finalBalanceToWithdraw); - - uint256 ghoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - ghoPaymentAddresses - ); - - assertApproxEqRel( - ghoBalanceAfter, - ghoBalanceBefore + proposal.STREAM_AMOUNT(), - maxDeltaStreamBalance - ); - } -} diff --git a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/config.ts b/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/config.ts deleted file mode 100644 index ce70e1564..000000000 --- a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3EthereumLido'], - title: 'ACI Phase IV – “Road to 80”', - shortName: 'ACIPhaseIVRoadTo80', - date: '20250418', - discussion: 'https://governance.aave.com/t/arfc-aci-phase-iv-road-to-80/21830', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22294313}}}, -}; diff --git a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol b/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol deleted file mode 100644 index 807dae2e7..000000000 --- a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Sonic, AaveV3SonicAssets} from 'aave-address-book/AaveV3Sonic.sol'; -import {AaveV3PayloadSonic} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadSonic.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Add stS to Aave v3 Sonic Instance - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xb49491fa374865c309723a992da4d2b1f24e96f310b8842a01cf6215a48e5c6d - * - Discussion: https://governance.aave.com/t/arfc-add-sts-to-aave-v3-sonic-instance/21445 - */ -contract AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418 is AaveV3PayloadSonic { - using SafeERC20 for IERC20; - - address public constant stS = 0xE5DA20F15420aD15DE0fa650600aFc998bbE3955; - uint256 public constant stS_SEED_AMOUNT = 200e18; - address public constant stS_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(stS).forceApprove(address(AaveV3Sonic.POOL), stS_SEED_AMOUNT); - AaveV3Sonic.POOL.supply(stS, stS_SEED_AMOUNT, AaveV3Sonic.DUST_BIN, 0); - - address astS = AaveV3Sonic.POOL.getReserveAToken(stS); - IEmissionManager(AaveV3Sonic.EMISSION_MANAGER).setEmissionAdmin(stS, stS_LM_ADMIN); - IEmissionManager(AaveV3Sonic.EMISSION_MANAGER).setEmissionAdmin(astS, stS_LM_ADMIN); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 1, - ltv: 87_00, - liqThreshold: 90_00, - liqBonus: 1_00, - label: 'stS/wS' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: stS, - eModeCategory: 1, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3SonicAssets.wS_UNDERLYING, - eModeCategory: 1, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: stS, - assetSymbol: 'stS', - priceFeed: 0x5BA5D5213B47DFE020B1F8d6fB54Db3F74F9ea9a, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 66_00, - liqThreshold: 68_00, - liqBonus: 10_00, - reserveFactor: 10_00, - supplyCap: 30_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.t.sol b/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.t.sol deleted file mode 100644 index a77e3bf28..000000000 --- a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418} from './AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol'; - -/** - * @dev Test for AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418 - * command: FOUNDRY_PROFILE=sonic forge test --match-path=src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.t.sol -vv - */ -contract AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418_Test is ProtocolV3TestBase { - AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('sonic'), 22210973); - proposal = new AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418', - AaveV3Sonic.POOL, - address(proposal) - ); - } - - function test_dustBinHasstSFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Sonic.POOL.getReserveAToken(proposal.stS()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Sonic.DUST_BIN)), 200 * 10 ** 18); - } - - function test_stSAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address astS = AaveV3Sonic.POOL.getReserveAToken(proposal.stS()); - assertEq( - IEmissionManager(AaveV3Sonic.EMISSION_MANAGER).getEmissionAdmin(proposal.stS()), - proposal.stS_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Sonic.EMISSION_MANAGER).getEmissionAdmin(astS), - proposal.stS_LM_ADMIN() - ); - } -} diff --git a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance.md b/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance.md deleted file mode 100644 index 133cdbb11..000000000 --- a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: "Add stS to Aave v3 Sonic Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-add-sts-to-aave-v3-sonic-instance/21445" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xb49491fa374865c309723a992da4d2b1f24e96f310b8842a01cf6215a48e5c6d" ---- - -## Simple Summary - -The proposal aims to onboard [Beets](https://beets.fi/)’s stS, to Aave v3 Sonic instance. - -## Motivation - -Launched in December 2024, Beets Staked Sonic (stS) is an ERC-20 Liquid Staked Token offering seamless exposure to Sonic network staking rewards via validator delegation, while remaining fully liquid in users’ wallets. - -Similar to wstETH, stS passively accrues value—each time delegation rewards are added to the staking pool, the stS-to-S exchange rate increases automatically, with no action needed from holders. The underlying S delegation enhances Sonic’s decentralization across a [diverse set of validators](https://dune.com/queries/4534324/7569460) and strengthens the network’s economic security. - -Previously known as sFTMx, the leading LST on Fantom Opera, stS quickly established itself as the kingmaker LST in the Sonic ecosystem, capturing over [12% of all staked S liquidity and 76% of S LST liquidity](https://www.defiwars.xyz/wars/sonic). Demand for leverage looping strategies using stS has been steadily rising, with over $160 million already deployed across other lending markets. Despite this strong demand for leveraged positions, stS has maintained a solid peg, currently trading at [99.72%](https://www.defiwars.xyz/wars/sonic). - -Users can easily convert their S into stS via the [Beets minting UI](https://beets.fi/stake) and redeem their stS with a 14-day unbonding period. Alternatively, they can trade stS directly on any of the following DEXs: - -- [Odos](https://www.odos.xyz/) -- [Beets](https://beets.fi/swap/sonic/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) -- [Shadow](https://www.shadow.so/trade) - -### Security Considerations - -Security is at the forefront of stS operations. Beets Staked Sonic was launched in December 2024, with its contracts originally audited by [Spearbit](https://cantina.xyz/portfolio/71a6f59b-7533-4ae9-87c5-d1d1bf6d675a), and then further audited by [Trail of Bits](https://github.com/trailofbits/publications/blob/master/reviews/2025-01-beethovenx-sonicstaking-securityreview.pdf) in January. Beets maintains an Immunefi bug bounty of up to $200,000. - -Regarding Oracles stS currently integrates a Redstone, Pyth, and Stork stS/S price feed, with a Api3 and Chainlink Oracle integration currently being worked on. Aave will use a CAPO oracle leveraging chainlink’s infrastructure. - -### Beets in numbers - -Beets Staked Sonic has seen continuous growth since launching on December 16th 2024, with 138.65m S and $86.20m currently staked within the protocol. - -Beets Staked Sonic is growing at a steady rate and is currently the number one spot by TVL on [Defillama](https://defillama.com/protocols/Liquid%20Staking/Sonic) for LST projects on Sonic, with over 3.4x as much TVL as the second largest protocol: - -Beets also runs a DEX on Sonic, resulting in it being the 2nd largest source of TVL across [all protocols](https://defillama.com/chain/Sonic) on Sonic: - -### Points program - -Due to both the underlying exposure to APR (currently ~5%), and the current Sonic points program which offers 4x passive points and 8x activity points on stS, S borrows vs stS have a seen continuous growth with users seeking efficient means to leverage capital. - -Being the largest LST on the network, stS is integrated into a variety of protocol verticals, including DEXs, Vaults, Yield Tokenization, and Lending markets: - -- [Spectra](https://app.spectra.finance/pools/sonic:0xb2b0b641af3efbb495837323f74d962c534c1f51) -- [Shadow](https://www.shadow.so/liquidity) -- [Beefy](https://app.beefy.com/) -- [Stability](https://stability.farm/vaults/vault/146/0x709833e5b4b98aab812d175510f94bc91cfabd89) -- [Vicuna](https://vicunafinance.com/vaults) -- [Silo v2](https://v2.silo.finance/) -- [Euler](https://app.euler.finance/vault/0x2De851E60e428106fC98fE94017466F8D71793d1?network=sonic) -- [Stablejack](https://app.stablejack.xyz/markets/stS/token?name=yield) - -### Benefits of listing Beets Staked Sonic - -Adding lending and borrowing support for stS on Aave would allow users to supply, borrow, and leverage Sonic’s flagship LST. - -A dedicated stS market on Aave’s Sonic deployment would drive meaningful TVL growth and generate additional revenue for the Aave DAO through active S loans and liquidations. This integration would also position Aave as the go-to venue for risk-adjusted capital efficiency, enabling advanced looping strategies while providing exposure to Sonic points. - -It’s worth noting that Beets also operates a DEX on Sonic, powered by Balancer technology. Beets contributors operate as technical Service Providers to the Balancer DAO and have played a key role in the development and deployment of [100% Boosted Pools](https://www.theblock.co/post/330379/balancer-v3-launches-aave), which have successfully re-hypothicated over [$50M](https://balancer.fi/pools?poolTags=BOOSTED) in liquidity to Aave. - -With the launch of Aave on Sonic, Beets will deploy Aave Boosted Pools, creating a highly efficient mechanism for simultaneously growing Aave’s supply-side liquidity and strengthening Sonic Swap markets. - -Alongside stablecoin liquidity such as USDC.e, scUSD and GHO, an stS | S Boosted Pool would likely see strong adoption from Sonic users—helping bootstrap supply while keeping borrowing costs low in leverage markets. - -### Proof of Liquidity (POL) and Deposit Commitments - -As mentioned, Beets can deploy Aave Boosted Pools to help seed Aave’s capital markets on Sonic. While Beets would not directly supply stS or S POL to Aave, it would deposit POL from the DAO treasury into these pools, effectively routing 100% of capital straight to Aave. - -Additionally, Beets is in discussions with Sonic Money Managers regarding the bootstrapping of the stS market through stS <> S looping strategies, as well as Boosted Pool POL deposits. Specific amounts will be determined in collaboration with the Aave team and the ACI. - -## Specification - -The table below illustrates the configured risk parameters for **stS** - -| Parameter | Value | -| ------------------------- | -----------------------------------------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (stS) | 30,000,000 | -| Borrow Cap (stS) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 66 % | -| LT | 68 % | -| Liquidation Bonus | 10 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 10 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | 0x5BA5D5213B47DFE020B1F8d6fB54Db3F74F9ea9a | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://sonicscan.org/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for stS and the corresponding aToken. - -**stS/wS Liquid E-mode Configuration** - -| **Parameter** | **Value** | **Value** | -| --------------------- | --------- | --------- | -| Asset | stS | wS | -| Collateral | Yes | No | -| Borrowable | No | Yes | -| Max LTV | 87% | - | -| Liquidation Threshold | 90% | - | -| Liquidation Bonus | 1% | - | - -**CAPO** - -| **maxYearlyRatioGrowthPercent** | **ratioReferenceTime** | **MINIMUM_SNAPSHOT_DELAY** | -| ------------------------------- | ---------------------- | -------------------------- | -| 11.04% | monthly | 7 | - -## References - -- Implementation: [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/a6351081bdc8e95114cef3391179ad72fa58cddd/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol) -- Tests: [AaveV3Sonic](https://github.com/bgd-labs/aave-proposals-v3/blob/a6351081bdc8e95114cef3391179ad72fa58cddd/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xb49491fa374865c309723a992da4d2b1f24e96f310b8842a01cf6215a48e5c6d) -- [Discussion](https://governance.aave.com/t/arfc-add-sts-to-aave-v3-sonic-instance/21445) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance_20250418.s.sol b/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance_20250418.s.sol deleted file mode 100644 index ae525895b..000000000 --- a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance_20250418.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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 {GovernanceV3Sonic} from 'aave-address-book/GovernanceV3Sonic.sol'; -import {EthereumScript, SonicScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418} from './AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418.sol'; - -/** - * @dev Deploy Sonic - * deploy-command: make deploy-ledger contract=src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance_20250418.s.sol:DeploySonic chain=sonic - * verify-command: FOUNDRY_PROFILE=sonic npx catapulta-verify -b broadcast/AddStSToAaveV3SonicInstance_20250418.s.sol/146/run-latest.json - */ -contract DeploySonic is SonicScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Sonic_AddStSToAaveV3SonicInstance_20250418).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/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance_20250418.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); - - payloads[0] = PayloadsControllerUtils.Payload({ - chain: ChainIds.SONIC, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3Sonic.PAYLOADS_CONTROLLER), - payloadId: 3 - }); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/AddStSToAaveV3SonicInstance.md' - ) - ); - } -} diff --git a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/config.ts b/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/config.ts deleted file mode 100644 index 7f78776cc..000000000 --- a/src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/config.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250418_AaveV3Sonic_AddStSToAaveV3SonicInstance/config.ts', - author: 'Aave-Chan Initiative', - pools: ['AaveV3Sonic'], - title: 'Add stS to Aave v3 Sonic Instance', - shortName: 'AddStSToAaveV3SonicInstance', - date: '20250418', - discussion: 'https://governance.aave.com/t/arfc-add-sts-to-aave-v3-sonic-instance/21445', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xb49491fa374865c309723a992da4d2b1f24e96f310b8842a01cf6215a48e5c6d', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Sonic: { - configs: { - EMODES_UPDATES: [ - {eModeCategory: 1, ltv: '87', liqThreshold: '90', liqBonus: '1', label: 'stS/wS'}, - ], - EMODES_ASSETS: [ - {asset: 'stS', eModeCategory: '1', collateral: 'ENABLED', borrowable: 'DISABLED'}, - {asset: 'wS', eModeCategory: '1', collateral: 'DISABLED', borrowable: 'ENABLED'}, - ], - ASSET_LISTING: [ - { - assetSymbol: 'stS', - decimals: 18, - priceFeed: '0x5BA5D5213B47DFE020B1F8d6fB54Db3F74F9ea9a', - ltv: '66', - liqThreshold: '68', - liqBonus: '10', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '30000000', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0xE5DA20F15420aD15DE0fa650600aFc998bbE3955', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 20871419}, - }, - }, -}; diff --git a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol b/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol deleted file mode 100644 index fb59a4b59..000000000 --- a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; - -/** - * @title Lower stkABPT Emissions - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x8dbeee9b489266cfefb8cb3c75fb0791d364975eed48cee951ff04fd17ee57c1 - * - Discussion: https://governance.aave.com/t/arfc-stkabpt-emissions-update/21683 - */ -contract AaveV3Ethereum_LowerStkABPTEmissions_20250423 is IProposalGenericExecutor { - uint128 public constant CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT = uint128(360 ether) / 1 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_STK_BPT = uint128(240 ether) / 1 days; - - function execute() external { - uint256 distributionTimeLeft = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .distributionEnd() - block.timestamp; - - // Excess allowance that has not been claimed - uint256 allowanceToKeep = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - address(MiscEthereum.ECOSYSTEM_RESERVE), - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ) - (distributionTimeLeft * CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT); - - uint256 newAllowance = distributionTimeLeft * AAVE_EMISSION_PER_SECOND_STK_BPT; - - IStakeToken.AssetConfigInput[] memory bptConfigs = new IStakeToken.AssetConfigInput[](1); - bptConfigs[0] = IStakeToken.AssetConfigInput({ - emissionPerSecond: AAVE_EMISSION_PER_SECOND_STK_BPT, - totalStaked: 0, // it's overwritten internally - underlyingAsset: AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - }); - IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2).configureAssets(bptConfigs); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2, - 0 - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2, - newAllowance + allowanceToKeep - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.t.sol b/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.t.sol deleted file mode 100644 index d412e199e..000000000 --- a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.t.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; - -import {AaveV3Ethereum_LowerStkABPTEmissions_20250423} from './AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol'; - -/** - * @dev Test for AaveV3Ethereum_LowerStkABPTEmissions_20250423 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.t.sol -vv - */ -contract AaveV3Ethereum_LowerStkABPTEmissions_20250423_Test is ProtocolV3TestBase { - AaveV3Ethereum_LowerStkABPTEmissions_20250423 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22331915); - proposal = new AaveV3Ethereum_LowerStkABPTEmissions_20250423(); - } - - function test_checkConfig() public { - (uint128 emissionPerSecondBeforeStkBPT, , ) = IStakeToken( - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ).assets(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2); - - assertEq( - emissionPerSecondBeforeStkBPT, - proposal.CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT(), - 'emissions before not equal stkBPT' - ); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterStkBPT, , ) = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .assets(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2); - - assertEq( - emissionPerSecondAfterStkBPT, - proposal.AAVE_EMISSION_PER_SECOND_STK_BPT(), - 'emissions after not equal stkBPT' - ); - } - - function test_checkDistributionEnd() public { - uint256 endTimestampBefore = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .distributionEnd(); - - assertGt( - endTimestampBefore, - block.timestamp, - 'New distribution duration is lower than current timestamp' - ); - - executePayload(vm, address(proposal)); - - uint256 endTimestampAfter = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .distributionEnd(); - - assertEq(endTimestampBefore, endTimestampAfter, 'New distribution duration differs'); - } - - function test_checkAllowance() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ); - - // New allowance is less than before - assertLt(allowanceAfter, allowanceBefore); - } - - function test_checkRewards_stkBPT() public { - address stakedToken = 0x3de27EFa2F1AA663Ae5D458857e731c129069F29; - address staker = 0xce88686553686DA562CE7Cea497CE749DA109f9F; - uint256 rewardsPerDay = 240e18; - - executePayload(vm, address(proposal)); - - vm.startPrank(staker); - IERC20(stakedToken).approve(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2, 1 ether); - IERC20(stakedToken).balanceOf(staker); - IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2).stake(staker, 1 ether); - vm.stopPrank(); - - vm.warp(block.timestamp + 1 days); - - uint256 rewardsBalance = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .getTotalRewardsBalance(staker); - - assertTrue(rewardsBalance > 0 && rewardsBalance <= rewardsPerDay); - - vm.stopPrank(); - } -} diff --git a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions.md b/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions.md deleted file mode 100644 index aeb5608d5..000000000 --- a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Lower stkABPT Emissions" -author: "@TokenLogic" -discussions: "https://governance.aave.com/t/arfc-stkabpt-emissions-update/21683" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x8dbeee9b489266cfefb8cb3c75fb0791d364975eed48cee951ff04fd17ee57c1" ---- - -## Simple Summary - -This publication proposes reducing AAVE emissions to the stkABPT Safety Module category. - -## Motivation - -During 2025, AAVE liquidity is expected to transition away from stkABPT to a more diversified liquidity base. - -The below outlines an overview of what to expect during 2025: - -- Reduction stkABPT emissions, eventually to 0; -- Support AAVE liquidity across several networks; -- Improved liquidity distribution amongst LPs; and, -- Introduce Aave DAO liquidity provisions. - -Thanks to a coordinated effort between Service Providers, AAVE token holders and Aerodrome, there is now AAVE liquidity on the Base network. The liquidity on Aerodrome was key to supporting the onboarding of AAVE to Aave Protocol on Base. - -This publication focuses on implementing the first significant AAVE emission reduction to stkABPT holders. - -![Screenshot 2025-04-03 at 21.55.51](https://hackmd.io/_uploads/SJ8k8uhaJg.png) -Source: https://aave.tokenlogic.xyz/stkbpt - -### stkABPT Emissions - -The Aave DAO currently emitting 360 AAVE per day to stkBPT holders. Assuming a spot price of $150/AAVE, this is equivalent to $19.71M a year. - -The yield from holding stkABPT relative to the underlying, 18.21%, compares favorable to holding stkAAVE at 4.72%. Given the slashing risk is 30% for both stkAAVE and stkBPT, the delta of 13.49% represents compensation for the additional Balancer exposure. - -This publication proposes reducing AAVE emissions by one-third, to 240 AAVE/day. The resulting AAVE yield on stkBPT is estimated to reduce by 4.67%, to 11.96% at current rates whilst still comparing favorably to stkAAVE at a time when swap fees and the Lido Index rate is below historical averages. - -Based upon the swap size distribution routing through the pool, an overall reduction in TVL would not adversely affect users seeking to acquire AAVE. However, earning near 12% for providing liquidity in the current market is also an attractive investment option for LPs to consider. - -## Specification - -This AIP reduces the AAVE emission rate to the following: - -| SM Category | Current | Proposed | -| :---------- | :-----: | :------: | -| stkABPT | 360/day | 240/day | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8ab49d57df2c1d8a49e2da72a59a4921a1203ccc/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8ab49d57df2c1d8a49e2da72a59a4921a1203ccc/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/AaveV3Ethereum_LowerStkABPTEmissions_20250423.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x8dbeee9b489266cfefb8cb3c75fb0791d364975eed48cee951ff04fd17ee57c1) -- [Discussion](https://governance.aave.com/t/arfc-stkabpt-emissions-update/21683) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions_20250423.s.sol b/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions_20250423.s.sol deleted file mode 100644 index b0110065f..000000000 --- a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions_20250423.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_LowerStkABPTEmissions_20250423} from './AaveV3Ethereum_LowerStkABPTEmissions_20250423.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions_20250423.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/LowerStkABPTEmissions_20250423.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_LowerStkABPTEmissions_20250423).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/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions_20250423.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_LowerStkABPTEmissions_20250423).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/LowerStkABPTEmissions.md' - ) - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/config.ts b/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/config.ts deleted file mode 100644 index ba3a08213..000000000 --- a/src/20250423_AaveV3Ethereum_LowerStkABPTEmissions/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'Lower stkABPT Emissions', - shortName: 'LowerStkABPTEmissions', - date: '20250423', - author: '@TokenLogic', - discussion: 'https://governance.aave.com/t/arfc-stkabpt-emissions-update/21683', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0x8dbeee9b489266cfefb8cb3c75fb0791d364975eed48cee951ff04fd17ee57c1', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22331915}}}, -}; diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.sol deleted file mode 100644 index a863c0acc..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol'; -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; - -import {IAaveCLRobotOperator} from '../interfaces/IAaveCLRobotOperator.sol'; -import {IAaveStewardInjector} from './interfaces/IAaveStewardInjector.sol'; - -/** - * @title Onboard PT sUSDe July and PT eUSDe May on Core Instance - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0 - * - Discussion: https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878 - */ -contract AaveV3Ethereum_ActivateAGRS_20250423 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - using SafeCast for uint256; - using SafeERC20 for IERC20; - - address public constant MANUAL_RISK_STEWARD = 0x46Ab47bA01EF627ce47F2ED61C9482794a6109c4; - address public constant EDGE_RISK_STEWARD = 0xf721bE7AA57a987F3e4D05DAc6fcb5aBF9F7cE9A; - address public constant AAVE_STEWARD_INJECTOR = 0x83ab600cE8a61b43e1757b89C0589928f765c1C4; - - uint96 public constant LINK_AMOUNT = 200 ether; - - function execute() external { - // replace manual steward with new one, new one having e-mode and pendle pt changes - AaveV3Ethereum.ACL_MANAGER.removeRiskAdmin(AaveV3Ethereum.RISK_STEWARD); - AaveV3Ethereum.ACL_MANAGER.addRiskAdmin(MANUAL_RISK_STEWARD); - - // activate injector - AaveV3Ethereum.ACL_MANAGER.addRiskAdmin(EDGE_RISK_STEWARD); - - // we whitelist eModeId 9 on the injector - address[] memory marketsToWhitelist = new address[](1); - marketsToWhitelist[0] = address(uint160(9)); // on the injector we encode eModeId to address - IAaveStewardInjector(AAVE_STEWARD_INJECTOR).addMarkets(marketsToWhitelist); - - uint256 linkAmountWithdrawn = AaveV3Ethereum.COLLECTOR.withdrawFromV3( - CollectorUtils.IOInput({ - pool: address(AaveV3Ethereum.POOL), - underlying: AaveV3EthereumAssets.LINK_UNDERLYING, - amount: LINK_AMOUNT - }), - address(this) - ); - IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).forceApprove( - MiscEthereum.AAVE_CL_ROBOT_OPERATOR, - linkAmountWithdrawn - ); - IAaveCLRobotOperator(MiscEthereum.AAVE_CL_ROBOT_OPERATOR).register( - 'Pendle EMode AGRS Injector', - AAVE_STEWARD_INJECTOR, - '', - 5_000_000, - linkAmountWithdrawn.toUint96(), - 0, - '' - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.t.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.t.sol deleted file mode 100644 index 8a970ec38..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.t.sol +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {DataTypes} from 'aave-v3-origin/contracts/protocol/libraries/types/DataTypes.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol'; -import {AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol'; -import {AaveV3Ethereum_ActivateAGRS_20250423, IAaveStewardInjector, IAaveCLRobotOperator} from './AaveV3Ethereum_ActivateAGRS_20250423.sol'; -import {IRiskOracle} from '../interfaces/IRiskOracle.sol'; -import {IRiskSteward} from '../interfaces/IRiskSteward.sol'; -import {AutomationCompatibleInterface} from '../interfaces/AutomationCompatibleInterface.sol'; - -/** - * @dev Test for AaveV3Ethereum_ActivateAGRS_20250423 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.t.sol -vv - */ -contract AaveV3Ethereum_ActivateAGRS_20250423_Test is ProtocolV3TestBase { - AaveV3Ethereum_ActivateAGRS_20250423 internal proposal; - - address public constant RISK_ORACLE_OWNER = 0x42939e82DF15afc586bb95f7dD69Afb6Dc24A6f9; - IRiskOracle public RISK_ORACLE; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22330904); - proposal = new AaveV3Ethereum_ActivateAGRS_20250423(); - - executePayload(vm, address(new AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423())); - executePayload(vm, address(new AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423())); - - RISK_ORACLE = IRiskOracle(IAaveStewardInjector(proposal.AAVE_STEWARD_INJECTOR()).RISK_ORACLE()); - } - - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_ActivateAGRS_20250423', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_permissions() public { - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), false); - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(proposal.MANUAL_RISK_STEWARD()), false); - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(AaveV3Ethereum.RISK_STEWARD), true); - executePayload(vm, address(proposal)); - - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(proposal.EDGE_RISK_STEWARD()), true); - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(proposal.MANUAL_RISK_STEWARD()), true); - - // we revoke old risk steward permission - assertEq(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(AaveV3Ethereum.RISK_STEWARD), false); - assertEq( - IRiskSteward(proposal.EDGE_RISK_STEWARD()).RISK_COUNCIL(), - proposal.AAVE_STEWARD_INJECTOR() - ); - } - - function test_robotRegistered() public { - vm.expectEmit(false, true, true, true); - emit IAaveCLRobotOperator.KeeperRegistered( - uint256(0), - proposal.AAVE_STEWARD_INJECTOR(), - uint96(proposal.LINK_AMOUNT()) - ); - executePayload(vm, address(proposal)); - } - - function test_inject_sUSDeEModeUpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 8; - uint256 ltv = 87_90; - uint256 liqThreshold = 89_90; - uint256 liqBonus = 5_10; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - proposal.AAVE_STEWARD_INJECTOR() - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(proposal.AAVE_STEWARD_INJECTOR()).performUpkeep(performData); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function test_inject_eUSDeEModeUpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 9; - uint256 ltv = 91_50; - uint256 liqThreshold = 93_50; - uint256 liqBonus = 3_80; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - proposal.AAVE_STEWARD_INJECTOR() - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(proposal.AAVE_STEWARD_INJECTOR()).performUpkeep(performData); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function _addUpdateToRiskOracle(uint8 eModeId, uint256 ltv, uint256 lt, uint256 lb) internal { - IAaveStewardInjector.EModeCategoryUpdate memory eModeParam = IAaveStewardInjector - .EModeCategoryUpdate({ltv: ltv, liqThreshold: lt, liqBonus: lb}); - - vm.startPrank(RISK_ORACLE_OWNER); - RISK_ORACLE.publishRiskParameterUpdate( - 'referenceId', - abi.encode(eModeParam), - 'EModeCategoryUpdate_Core', - address(uint160(eModeId)), - 'additionalData' - ); - vm.stopPrank(); - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol deleted file mode 100644 index 354de97ed..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -/** - * @title Onboard PT sUSDe July and PT eUSDe May on Core Instance - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0 - * - Discussion: https://governance.aave.com/t/arfc-onboard-eusde-pt-tokens-to-aave-v3-core-instance/21767 - */ -contract AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant PT_eUSDE_29MAY2025 = 0x50D2C7992b802Eef16c04FeADAB310f31866a545; - address public constant PT_eUSDE_29MAY2025_PRICE_FEED = - 0x5292AB3292D076271f853Ed8e05e61cc02F0A2C6; - - address public constant LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - uint256 public constant SEED_AMOUNT = 10e18; - - function _postExecute() internal override { - IERC20(PT_eUSDE_29MAY2025).forceApprove(address(AaveV3Ethereum.POOL), SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(PT_eUSDE_29MAY2025, SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aPT_eUSDE_29MAY2025 = AaveV3Ethereum.POOL.getReserveAToken(PT_eUSDE_29MAY2025); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - PT_eUSDE_29MAY2025, - LM_ADMIN - ); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - aPT_eUSDE_29MAY2025, - LM_ADMIN - ); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 9, - ltv: 91_00, - liqThreshold: 93_00, - liqBonus: 3_30, - label: 'PT-eUSDe Stablecoins May 2025' - }); - - return eModeUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](4); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_eUSDE_29MAY2025, - eModeCategory: 9, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 9, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 9, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 9, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: PT_eUSDE_29MAY2025, - assetSymbol: 'PT_eUSDE_29MAY2025', - priceFeed: PT_eUSDE_29MAY2025_PRICE_FEED, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 20_00, - supplyCap: 150_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 7_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.t.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.t.sol deleted file mode 100644 index c36250c67..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol'; - -/** - * @dev Test for AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.t.sol -vv - */ -contract AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423_Test is ProtocolV3TestBase { - AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22330904); - proposal = new AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423(); - } - - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHasPT_eUSDE_29MAY2025Funds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_eUSDE_29MAY2025()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 10 ** 18); - } - - function test_PT_eUSDE_29MAY2025Admin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aPT_eUSDE_29MAY2025 = AaveV3Ethereum.POOL.getReserveAToken( - proposal.PT_eUSDE_29MAY2025() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin( - proposal.PT_eUSDE_29MAY2025() - ), - proposal.LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aPT_eUSDE_29MAY2025), - proposal.LM_ADMIN() - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol deleted file mode 100644 index 0fb16208f..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -/** - * @title Onboard PT sUSDe July and PT eUSDe May on Core Instance - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0 - * - Discussion: https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878 - */ -contract AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant PT_sUSDE_31JUL2025 = 0x3b3fB9C57858EF816833dC91565EFcd85D96f634; - address public constant PT_sUSDE_31JUL2025_PRICE_FEED = - 0xfB2d51573d97fEbA5E2Ad7cc447e76CBad153878; - - address public constant LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - uint256 public constant SEED_AMOUNT = 10e18; - - function _postExecute() internal override { - IERC20(PT_sUSDE_31JUL2025).forceApprove(address(AaveV3Ethereum.POOL), SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(PT_sUSDE_31JUL2025, SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aPT_sUSDE_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken(PT_sUSDE_31JUL2025); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - PT_sUSDE_31JUL2025, - LM_ADMIN - ); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - aPT_sUSDE_31JUL2025, - LM_ADMIN - ); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 8, - ltv: 87_40, - liqThreshold: 89_40, - liqBonus: 4_60, - label: 'PT-sUSDe Stablecoins Jul 2025' - }); - - return eModeUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](4); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_sUSDE_31JUL2025, - eModeCategory: 8, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: PT_sUSDE_31JUL2025, - assetSymbol: 'PT-sUSDe-31JUL2025', - priceFeed: PT_sUSDE_31JUL2025_PRICE_FEED, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 20_00, - supplyCap: 85_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 7_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.t.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.t.sol deleted file mode 100644 index ca4f5daaa..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.t.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol'; - -/** - * @dev Test for AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.t.sol -vv - */ -contract AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423_Test is ProtocolV3TestBase { - AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22330904); - proposal = new AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423(); - } - - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423', - AaveV3Ethereum.POOL, - address(proposal), - false - ); - } - - function test_dustBinHasPT_sUSDE_31JUL2025Funds() public { - executePayload(vm, address(proposal)); - - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_sUSDE_31JUL2025()); - assertGe( - IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), - proposal.SEED_AMOUNT() - ); - } - - function test_PT_sUSDE_31JUL2025Admin() public { - executePayload(vm, address(proposal)); - - address aPT_sUSDE_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken( - proposal.PT_sUSDE_31JUL2025() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin( - proposal.PT_sUSDE_31JUL2025() - ), - proposal.LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aPT_sUSDE_31JUL2025), - proposal.LM_ADMIN() - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance.md b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance.md deleted file mode 100644 index a8e315768..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: "Onboard PT sUSDe July and PT eUSDe May on Core Instance" -author: "ACI and BGD Labs" -discussions: "https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0" ---- - -## Simple Summary - -This proposal seeks to onboard pendle [PT-sUSDe-31July2025](https://etherscan.io/address/0x3b3fB9C57858EF816833dC91565EFcd85D96f634) and [PT-eUSDe-29May2025](https://etherscan.io/address/0x50D2C7992b802Eef16c04FeADAB310f31866a545) on the Aave V3 core instance and activate Edge AGRS system to automate updating eMode category params for these assets. - -## Motivation - -Pendle allows users to split yield bearing tokens into principal (PT) and yield (YT) components. This opens the door to trading yield for the growing number of yield bearing tokens, and gives users additional options for yield farming strategies. A notable feature of the PT tokens is that at the maturity date, the value of the PT equals the value of the underlying asset and can be redeemed for the underlying. This means PT tokens, which can be bought at a discount within Pendle pools, represent the fixed rate part of a Pendle asset pair. - -Pendle has seen extremely high growth this year, with current TVL of circa $4.5 billion. Along with this growth has come the desire for yield traders to borrow against their Pendle PT tokens. This represents a multi-billion dollar growth opportunity for Aave, without a large increase in risk if PT tokens are onboarded for already listed assets such as sUSDe. With this, it makes sense to onboard PT-sUSDe-31July2025 and PT-eUSDe-29May2025 assets. - -The RiskSteward has been quite successful to update risk params in a controlled way in the past for rates, caps and other params. The new iteration of the RiskSteward allows to update eMode category collateral params such as LT, LTV and LB in a constrained manner, while also allowing to change the discountRate of pendle pt feeds. With this we activate the new RiskSteward on the core instance only for now, gradually migrating to newer RiskSteward on other instances as well. - -## Specification - -The table below illustrates the configured risk parameters for assets listed: - -| Parameter | PT_sUSDE_31JUL2025 | PT_eUSDe_29MAR2025 | -| ------------------------- | --------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------: | -| Borrowable | DISABLED | DISABLED | -| Collateral Enabled | true | true | -| Supply Cap | 85,000,000 | 150,000,000 | -| Borrow Cap | 1 | 1 | -| Isolation Mode | false | false | -| Debt Ceiling | USD 0 | USD 0 | -| LTV | 0.05 % | 0.05 % | -| LT | 0.1 % | 0.1 % | -| Liquidation Bonus | 7.5 % | 7.5 % | -| Liquidation Protocol Fee | 10 % | 10 % | -| Reserve Factor | 20 % | 20 % | -| Base Variable Borrow Rate | 0 % | 0 % | -| Variable Slope 1 | 7 % | 7 % | -| Variable Slope 2 | 300 % | 300 % | -| Uoptimal | 45 % | 45 % | -| Flashloanable | ENABLED | ENABLED | -| Siloed Borrowing | DISABLED | DISABLED | -| Borrowable in Isolation | DISABLED | DISABLED | -| Oracle | [0xfB2d51573d97fEbA5E2Ad7cc447e76CBad153878](https://etherscan.io/address/0xfB2d51573d97fEbA5E2Ad7cc447e76CBad153878) | [0x5292AB3292D076271f853Ed8e05e61cc02F0A2C6](https://etherscan.io/address/0x5292AB3292D076271f853Ed8e05e61cc02F0A2C6) | - -The following EMode categories will be created for the assets listed: - -**PT-sUSDe Stablecoins E-Mode (id: 8)**: - -| Asset | PT-sUSDe | USDC | USDT | USDS | -| ----------------- | -------- | ---- | ---- | ---- | -| Collateral | Yes | No | No | No | -| Borrowable | No | Yes | Yes | Yes | -| LTV | 87.4% | - | - | - | -| LT | 89.4% | - | - | - | -| Liquidation Bonus | 4.6% | - | - | - | - -**PT-eUSDe Stablecoins E-Mode (id: 9)**: - -| Asset | PT-eUSDe | USDC | USDT | USDS | -| ----------------- | -------- | ---- | ---- | ---- | -| Collateral | Yes | No | No | No | -| Borrowable | No | Yes | Yes | Yes | -| LTV | 91% | - | - | - | -| LT | 93% | - | - | - | -| Liquidation Bonus | 3.3% | - | - | - | - -The Pendle PT Capo with linear discount have been deployed with the following configurations: - -| **Parameter** | **PT_eUSDe_29MAR2025** | **PT_sUSDE_31JUL2025** | -| ---------------------- | ---------------------- | ---------------------- | -| discountRatePerYear | 7.87% | 7.5124% | -| maxDiscountRatePerYear | 39.22% | 21.22% | - -We activate the next iteration of RiskSteward on core instance (audited by Certora), which allows updating the eMode category and the discount rate of pendle pt feeds. In addition we also activate the Edge AGRS system using a new instance of RiskSteward to automate updating eMode LT, LTV, LB of the new PT-sUSDe Stablecoins and PT-eUSDe Stablecoins Emodes using the [AaveStewardInjectorEMode](https://etherscan.io/address/0x83ab600cE8a61b43e1757b89C0589928f765c1C4) middleware. -Please note, the Automated Edge AGRS system will only be able to do EMode updates on the new pendle eModes categories and no change will be allowed on other eModes. The manual RiskSteward however would be able to change eMode configurations for all the eModes on the core instance within the configured bounds. - -The new RiskStewards will have the following configuration: - -**Manual RiskSteward**: -|**Parameter**|**Percent change allowed**|**minimumDelay**| -| --- | --- | ---| -|EMode LTV |0.5% absolute change| 3 days | -|EMode LiquidationThreshold|0.1% absolute change| 3 days | -|EMode LiquidationBonus|0.5% absolute change| 3 days | -|Pendle PT Feed Discount Rate|5% relative change| 2 days | - -**Automated RiskSteward**: -|**Parameter**|**Percent change allowed**|**minimumDelay**| -| --- | --- | ---| -|EMode LTV |0.5% absolute change| 3 days | -|EMode LiquidationThreshold|0.5% absolute change| 3 days | -|EMode LiquidationBonus|0.5% absolute change| 3 days | - -The `RISK_ADMIN` role will be revoked from the legacy RiskSteward via `ACL_MANAGER.removeRiskAdmin()` and the role will be given to the new Manual and Automated RiskSteward via `ACL_MANAGER.addRiskAdmin()`. Please note, all configuration except for EMode and Pendle discount rate will be same on the new RiskSteward as before. - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for PT_sUSDE_31JUL2025, PT_eUSDe_29MAR2025 and the corresponding aTokens. - -## References - -- Implementation: [PTsUSDeListing](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol), [PTeUSDeListing](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol) - [EdgeAGRSActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.sol) -- Tests: [PTsUSDeListing](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.t.sol), [PTeUSDeListing](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.t.sol) - [EdgeAGRSActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/9f7dc27340c1e3864165314e509cd575c703f8cb/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0) -- [PT-sUSDe-31July2025 Discussion](https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878) -- [PT-eUSDe-29May2025 Discussion](https://governance.aave.com/t/arfc-onboard-eusde-pt-tokens-to-aave-v3-core-instance/21767) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.s.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.s.sol deleted file mode 100644 index 9ac1fef5f..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.s.sol +++ /dev/null @@ -1,71 +0,0 @@ -// 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_OnboardPTSUSDeJulyOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423.sol'; -import {AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423} from './AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol'; -import {AaveV3Ethereum_ActivateAGRS_20250423} from './AaveV3Ethereum_ActivateAGRS_20250423.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423).creationCode - ); - address payload2 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_ActivateAGRS_20250423).creationCode - ); - - // register action at payloadsController - GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload0)); - GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload1)); - GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload2)); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance_20250423.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 action0 = GovV3Helpers.buildAction( - type(AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250423).creationCode - ); - IPayloadsControllerCore.ExecutionAction memory action1 = GovV3Helpers.buildAction( - type(AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423).creationCode - ); - IPayloadsControllerCore.ExecutionAction memory action2 = GovV3Helpers.buildAction( - type(AaveV3Ethereum_ActivateAGRS_20250423).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, action0); - payloads[1] = GovV3Helpers.buildMainnetPayload(vm, action1); - payloads[2] = GovV3Helpers.buildMainnetPayload(vm, action2); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance.md' - ) - ); - } -} diff --git a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/interfaces/IAaveStewardInjector.sol b/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/interfaces/IAaveStewardInjector.sol deleted file mode 100644 index 2e659c35f..000000000 --- a/src/20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/interfaces/IAaveStewardInjector.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IAaveStewardInjector { - struct EModeCategoryUpdate { - uint256 ltv; - uint256 liqThreshold; - uint256 liqBonus; - } - - function getMarkets() external view returns (address[] memory); - - function addMarkets(address[] calldata markets) external; - - function removeMarkets(address[] calldata markets) external; - - function getUpdateTypes() external pure returns (string[] memory updateTypes); - - function RISK_STEWARD() external view returns (address); - - function RISK_ORACLE() external view returns (address); -} diff --git a/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5.md b/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5.md deleted file mode 100644 index d69c057a8..000000000 --- a/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Aave BGD Phase 5" -author: "BGD Labs (@bgdlabs)" -discussions: "https://governance.aave.com/t/arfc-aave-bored-ghosts-developing-phase-5/21803" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xcad607fa0b4cc00eb09d8af5a6506d64b74a0713b4261014ca3f23fa8afe4c07" ---- - -## Simple Summary - -Proposal for an engagement of development and security services between the Aave DAO and BGD Labs, from 1st April 2025 until 1st October 2025. - -## Motivation - -For the last three years, BGD Labs has been a service provider of the Aave DAO, contributing with multiple developments, technical maintenance, and security coordination tasks. - -The motivation/goal of this new engagement is same as the previous Phase 4: - -- Keep the stability and trust in the Aave technology. -- Innovate responsibly on production systems. -- Support all other non-tech contributors to the DAO, accelerating progress. - -In summary, the same as before, but always striving for better. - -## Specification - -A full description of the scope can be found on the Aave Governance Forum [HERE](https://governance.aave.com/t/arfc-aave-bored-ghosts-developing-phase-5/21803) or on the pre-approval on ARFC (Aave Request For Comments) [HERE](https://snapshot.box/#/s:aavedao.eth/proposal/0xcad607fa0b4cc00eb09d8af5a6506d64b74a0713b4261014ca3f23fa8afe4c07). - -In terms of implementation, this proposal sets up the payment schedule defined: - -- From the Aave DAO's treasury (Collector smart contract), an upfront transfer for a value of 1'150'000 aUSDT (v3 Ethereum), 50% of the stablecoins budget. -- From the Aave DAO AAVE Ecosystem Reserve, an upfront transfer for a value of 2'000 AAVE tokens, 50% of the tokens budget. -- From the Aave DAO's treasury, the creation of a payment stream for a value of 1'150'000 aGHO Prime (v3 Ethereum Prime), from the execution time of this proposal until 1st October 2025 (from proposal execution), completing the 6-month duration, for the other 50% of the stablecoins budget. -- From the Aave DAO AAVE Ecosystem Reserve, the creation of a payment stream for a value of 2'000 AAVE tokens, from the execution time of this proposal until 1st October 2025 (from proposal execution), completing the 6-month duration, for the other 50% of the tokens budget. - -**The approval of this proposal by Aave governance acts as a binding agreement between the Aave DAO and BGD Labs**. Detailed terms of service can be found [HERE](https://bgdlabs.com/aave-dao-tos-phase5). - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0cf6f266ca0389ca104aafdd9715b2a3803a9eb/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/e0cf6f266ca0389ca104aafdd9715b2a3803a9eb/src/20250426_Multi_AaveBGDPhase5/AaveV3EthereumLido_AaveBGDPhase5_20250426.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0cf6f266ca0389ca104aafdd9715b2a3803a9eb/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.t.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/e0cf6f266ca0389ca104aafdd9715b2a3803a9eb/src/20250426_Multi_AaveBGDPhase5/AaveV3EthereumLido_AaveBGDPhase5_20250426.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xcad607fa0b4cc00eb09d8af5a6506d64b74a0713b4261014ca3f23fa8afe4c07) -- [Discussion](https://governance.aave.com/t/arfc-aave-bored-ghosts-developing-phase-5/21803) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5_20250426.s.sol b/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5_20250426.s.sol deleted file mode 100644 index 20b84233e..000000000 --- a/src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5_20250426.s.sol +++ /dev/null @@ -1,57 +0,0 @@ -// 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_AaveBGDPhase5_20250426} from './AaveV3Ethereum_AaveBGDPhase5_20250426.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5_20250426.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveBGDPhase5_20250426.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AaveBGDPhase5_20250426).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/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5_20250426.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_AaveBGDPhase5_20250426).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile(vm, 'src/20250426_Multi_AaveBGDPhase5/AaveBGDPhase5.md') - ); - } -} diff --git a/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.sol b/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.sol deleted file mode 100644 index a5e2120a0..000000000 --- a/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.sol +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets, ICollector} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -/** - * @title Aave BGD Phase 5 - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xcad607fa0b4cc00eb09d8af5a6506d64b74a0713b4261014ca3f23fa8afe4c07 - * - Discussion: https://governance.aave.com/t/arfc-aave-bored-ghosts-developing-phase-5/21803 - */ -contract AaveV3Ethereum_AaveBGDPhase5_20250426 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - - address public constant BGD_RECEIVER = 0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF; - uint256 public constant STOP_TIME = 1759276800; // ends on 1 October 2025 - - uint256 public constant UPFRONT_AUSDT_AMOUNT = 1_150_000e6; - uint256 public constant UPFRONT_AAVE_AMOUNT = 2_000e18; - - uint256 public constant STREAM_AGHO_AMOUNT = 1_150_000e18; - uint256 public constant STREAM_AAVE_AMOUNT = UPFRONT_AAVE_AMOUNT; - - function execute() external { - // -- Upfront - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - BGD_RECEIVER, - UPFRONT_AUSDT_AMOUNT - ); - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.transfer( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - BGD_RECEIVER, - UPFRONT_AAVE_AMOUNT - ); - - // -- Streams - uint256 streamsDuration = STOP_TIME - block.timestamp; - - AaveV3Ethereum.COLLECTOR.stream( - CollectorUtils.CreateStreamInput({ - underlying: AaveV3EthereumLidoAssets.GHO_A_TOKEN, - receiver: BGD_RECEIVER, - amount: STREAM_AGHO_AMOUNT, - start: block.timestamp, - duration: streamsDuration - }) - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.createStream( - MiscEthereum.ECOSYSTEM_RESERVE, - BGD_RECEIVER, - (STREAM_AAVE_AMOUNT / streamsDuration) * streamsDuration, - AaveV3EthereumAssets.AAVE_UNDERLYING, - block.timestamp, - STOP_TIME - ); - } -} diff --git a/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.t.sol b/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.t.sol deleted file mode 100644 index 3967f2047..000000000 --- a/src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.t.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import 'forge-std/Test.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_AaveBGDPhase5_20250426} from './AaveV3Ethereum_AaveBGDPhase5_20250426.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IStreamable} from 'aave-address-book/common/IStreamable.sol'; - -/** - * @dev Test for AaveV3Ethereum_AaveBGDPhase5_20250426 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250426_Multi_AaveBGDPhase5/AaveV3Ethereum_AaveBGDPhase5_20250426.t.sol -vv - */ -contract AaveV3Ethereum_AaveBGDPhase5_20250426_Test is ProtocolV3TestBase { - AaveV3Ethereum_AaveBGDPhase5_20250426 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22365609); - proposal = new AaveV3Ethereum_AaveBGDPhase5_20250426(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_AaveBGDPhase5_20250426', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_upfrontAmounts() public { - address receiverAddress = proposal.BGD_RECEIVER(); - uint256 aUsdtBalanceBefore = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - receiverAddress - ); - uint256 aaveBalanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf( - receiverAddress - ); - - executePayload(vm, address(proposal)); - - uint256 aUsdtBalanceAfter = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - receiverAddress - ); - uint256 aaveBalanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf( - receiverAddress - ); - - assertApproxEqAbs(aUsdtBalanceAfter - aUsdtBalanceBefore, 1_150_000e6, 1); - assertEq(aaveBalanceAfter - aaveBalanceBefore, 2_000e18); - } - - function test_streamAmounts() public { - address receiverAddress = proposal.BGD_RECEIVER(); - IStreamable ecosystemReserve = IStreamable(MiscEthereum.ECOSYSTEM_RESERVE); - - uint256 streamId = AaveV3Ethereum.COLLECTOR.getNextStreamId(); - uint256 streamIdAave = ecosystemReserve.getNextStreamId(); - - uint256 streamsDuration = proposal.STOP_TIME() - block.timestamp; - uint256 aGHOStreamed = (1_150_000e18 / streamsDuration) * streamsDuration; - uint256 AAVEStreamed = (2000e18 / streamsDuration) * streamsDuration; - - executePayload(vm, address(proposal)); - - // Warping after end of stream - vm.warp(proposal.STOP_TIME() + 1); - vm.startPrank(receiverAddress); - - uint256 aGhoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - receiverAddress - ); - uint256 aaveBalanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf( - receiverAddress - ); - - AaveV3Ethereum.COLLECTOR.withdrawFromStream( - streamId, - AaveV3Ethereum.COLLECTOR.balanceOf(streamId, receiverAddress) - ); - ecosystemReserve.withdrawFromStream( - streamIdAave, - ecosystemReserve.balanceOf(streamIdAave, receiverAddress) - ); - - uint256 aGhoBalanceAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - receiverAddress - ); - uint256 aaveBalanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf( - receiverAddress - ); - - assertApproxEqAbs(aGhoBalanceAfter, aGhoBalanceBefore + aGHOStreamed, 1); - assertEq(aaveBalanceAfter, aaveBalanceBefore + AAVEStreamed); - } -} diff --git a/src/20250426_Multi_AaveBGDPhase5/config.ts b/src/20250426_Multi_AaveBGDPhase5/config.ts deleted file mode 100644 index 25b237fc4..000000000 --- a/src/20250426_Multi_AaveBGDPhase5/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum', 'AaveV3EthereumLido'], - title: 'Aave BGD Phase 5', - shortName: 'AaveBGDPhase5', - date: '20250426', - author: 'BGD Labs (@bgdlabs)', - discussion: 'https://governance.aave.com/t/arfc-aave-bored-ghosts-developing-phase-5/21803', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xcad607fa0b4cc00eb09d8af5a6506d64b74a0713b4261014ca3f23fa8afe4c07', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22351541}}, - AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22351542}}, - }, -}; diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.sol deleted file mode 100644 index a7110f884..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; -import {IAaveArbEthERC20Bridge} from 'aave-helpers/src/bridges/arbitrum/IAaveArbEthERC20Bridge.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -/** - * @title May Funding Update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906 - */ -contract AaveV3Arbitrum_MayFundingUpdate_20250426 is IProposalGenericExecutor { - /// https://arbiscan.io/address/0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65 - address public constant DAI_GATEWAY = 0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65; - - /// https://arbiscan.io/address/0x096760F208390250649E3e8763348E783AEF5562 - address public constant USDC_GATEWAY = 0x096760F208390250649E3e8763348E783AEF5562; - - address public constant BRIDGE = MiscArbitrum.AAVE_ARB_ETH_BRIDGE; - address public constant COLLECTOR = address(AaveV3Arbitrum.COLLECTOR); - - function execute() external { - /// DAI - uint256 daiBalance = IERC20(AaveV3ArbitrumAssets.DAI_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Arbitrum.COLLECTOR.transfer( - IERC20(AaveV3ArbitrumAssets.DAI_UNDERLYING), - BRIDGE, - daiBalance - ); - IAaveArbEthERC20Bridge(BRIDGE).bridge( - AaveV3ArbitrumAssets.DAI_UNDERLYING, - AaveV3EthereumAssets.DAI_UNDERLYING, - DAI_GATEWAY, - daiBalance - ); - - /// USDC - uint256 usdcBalance = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Arbitrum.COLLECTOR.transfer( - IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING), - BRIDGE, - usdcBalance - ); - IAaveArbEthERC20Bridge(BRIDGE).bridge( - AaveV3ArbitrumAssets.USDC_UNDERLYING, - AaveV3EthereumAssets.USDC_UNDERLYING, - USDC_GATEWAY, - usdcBalance - ); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.t.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.t.sol deleted file mode 100644 index 5b1991542..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.t.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; -import {ArbSysMock} from 'aave-helpers/tests/bridges/arbitrum/ArbSysMock.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Arbitrum_MayFundingUpdate_20250426} from './AaveV3Arbitrum_MayFundingUpdate_20250426.sol'; - -/** - * @dev Test for AaveV3Arbitrum_MayFundingUpdate_20250426 - * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.t.sol -vv - */ -contract AaveV3Arbitrum_MayFundingUpdate_20250426_Test is ProtocolV3TestBase { - AaveV3Arbitrum_MayFundingUpdate_20250426 internal proposal; - - event Bridge(address indexed token, uint256 amount); - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 331207896); - proposal = new AaveV3Arbitrum_MayFundingUpdate_20250426(); - - ArbSysMock arbsys = new ArbSysMock(); - vm.etch(address(0x0000000000000000000000000000000000000064), address(arbsys).code); - } - - function test_Bridges() public { - uint256 daiCollectorBalanceBefore = IERC20(AaveV3ArbitrumAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Arbitrum.COLLECTOR) - ); - - uint256 usdcCollectorBalanceBefore = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Arbitrum.COLLECTOR) - ); - - assertGt(daiCollectorBalanceBefore, 0); - assertGt(usdcCollectorBalanceBefore, 0); - - vm.expectEmit(true, true, true, true, MiscArbitrum.AAVE_ARB_ETH_BRIDGE); - emit Bridge(AaveV3ArbitrumAssets.DAI_UNDERLYING, daiCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscArbitrum.AAVE_ARB_ETH_BRIDGE); - emit Bridge(AaveV3ArbitrumAssets.USDC_UNDERLYING, usdcCollectorBalanceBefore); - executePayload(vm, address(proposal)); - - uint256 daiCollectorBalanceAfter = IERC20(AaveV3ArbitrumAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Arbitrum.COLLECTOR) - ); - - uint256 usdcCollectorBalanceAfter = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Arbitrum.COLLECTOR) - ); - - assertEq(daiCollectorBalanceAfter, 0); - assertEq(usdcCollectorBalanceAfter, 0); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.sol deleted file mode 100644 index 4a6041a1a..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.sol +++ /dev/null @@ -1,240 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; - -interface WETH { - function deposit() external payable; -} - -/** - * @title May Funding Update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906 - */ -contract AaveV3Ethereum_MayFundingUpdate_20250426 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - - address public constant COLLECTOR = address(AaveV3Ethereum.COLLECTOR); - - /// https://etherscan.io/address/0xdef1FA4CEfe67365ba046a7C630D6B885298E210 - address public constant ACI = 0xdef1FA4CEfe67365ba046a7C630D6B885298E210; - - /// https://etherscan.io/address/0xdeadD8aB03075b7FBA81864202a2f59EE25B312b - address public constant MERIT_SAFE = 0xdeadD8aB03075b7FBA81864202a2f59EE25B312b; - - /// https://etherscan.io/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa - address public constant AAVE_FINANCE_COMMITEE = 0x22740deBa78d5a0c24C58C740e3715ec29de1bFa; - - /// https://etherscan.io/address/0x060373D064d0168931dE2AB8DDA7410923d06E88 - address public constant MILKMAN = 0x060373D064d0168931dE2AB8DDA7410923d06E88; - - /// https://etherscan.io/address/0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c - address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c; - - /// https://etherscan.io/address/0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC - address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC; - - /// https://etherscan.io/address/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0 - IERC20 public constant MATIC_MAINNET = IERC20(0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0); - - /// https://etherscan.io/address/0x9ee91f9f426fa633d227f7a9b000e28b9dfd8599 - IERC20 public constant STMATIC_MAINNET = IERC20(0x9ee91F9f426fA633d227f7a9b000E28b9dfd8599); - - /// https://etherscan.io/address/0xd962fC30A72A84cE50161031391756Bf2876Af5D - address public constant CVX_USD_ORACLE = 0xd962fC30A72A84cE50161031391756Bf2876Af5D; - - /// https://etherscan.io/address/0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD - address public constant FRAX_USD_ORACLE = 0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD; - - uint256 public constant USDT_SWAP_AMOUNT = 2_000_000e6; - uint256 public constant USDC_SWAP_AMOUNT = 2_000_000e6; - - uint256 public constant USDT_BUYBACK_AMOUNT = 3_000_000e6; - uint256 public constant USDC_BUYBACK_AMOUNT = 3_000_000e6; - - uint256 public constant GHO_ALLOWANCE_AMOUNT = 3_000_000e6; - uint256 public constant WETH_ALLOWANCE_AMOUNT = 800e18; - - uint256 public constant ETH_TRANSFER_AMOUNT = 0.5847 ether; - uint256 public constant ETH_DEPOSIT_AMOUNT = 115 ether; - - function execute() external { - _depositETH(); - _transfers(); - _swaps(); - _allowances(); - } - - function _depositETH() internal { - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3Ethereum.COLLECTOR.ETH_MOCK_ADDRESS()), - address(this), - ETH_DEPOSIT_AMOUNT - ); - WETH(AaveV3EthereumAssets.WETH_UNDERLYING).deposit{value: ETH_DEPOSIT_AMOUNT}(); - IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).transfer( - address(AaveV3Ethereum.COLLECTOR), - ETH_DEPOSIT_AMOUNT - ); - CollectorUtils.depositToV3( - AaveV3Ethereum.COLLECTOR, - CollectorUtils.IOInput({ - pool: address(AaveV3Ethereum.POOL), - underlying: AaveV3EthereumAssets.WETH_UNDERLYING, - amount: ETH_DEPOSIT_AMOUNT - }) - ); - } - - function _transfers() internal { - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING), - MiscEthereum.ECOSYSTEM_RESERVE, - IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf(COLLECTOR) - ); - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3Ethereum.COLLECTOR.ETH_MOCK_ADDRESS()), - ACI, - ETH_TRANSFER_AMOUNT - ); - } - - function _swaps() internal { - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.USDT_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.GHO_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.USDT_ORACLE, - toUnderlyingPriceFeed: GHO_USD_FEED, - amount: USDT_SWAP_AMOUNT, - slippage: 75 - }) - ); - - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.USDC_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.GHO_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.USDC_ORACLE, - toUnderlyingPriceFeed: GHO_USD_FEED, - amount: USDC_SWAP_AMOUNT, - slippage: 75 - }) - ); - - /// ~ 2.3M - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.DAI_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.USDS_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.DAI_ORACLE, - toUnderlyingPriceFeed: AaveV3EthereumAssets.USDS_ORACLE, - amount: IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(COLLECTOR), - slippage: 75 - }) - ); - - /// ~7k - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV3EthereumAssets.LUSD_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.WETH_UNDERLYING, - fromUnderlyingPriceFeed: AaveV3EthereumAssets.LUSD_ORACLE, - toUnderlyingPriceFeed: AaveV3EthereumAssets.WETH_ORACLE, - amount: IERC20(AaveV3EthereumAssets.LUSD_UNDERLYING).balanceOf(COLLECTOR), - slippage: 350 - }) - ); - - /// ~20k - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV2EthereumAssets.CVX_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.WETH_UNDERLYING, - fromUnderlyingPriceFeed: CVX_USD_ORACLE, - toUnderlyingPriceFeed: AaveV3EthereumAssets.WETH_ORACLE, - amount: IERC20(AaveV2EthereumAssets.CVX_UNDERLYING).balanceOf(COLLECTOR), - slippage: 200 - }) - ); - - /// ~7k - AaveV3Ethereum.COLLECTOR.swap( - MiscEthereum.AAVE_SWAPPER, - CollectorUtils.SwapInput({ - milkman: MILKMAN, - priceChecker: PRICE_CHECKER, - fromUnderlying: AaveV2EthereumAssets.FRAX_UNDERLYING, - toUnderlying: AaveV3EthereumAssets.WETH_UNDERLYING, - fromUnderlyingPriceFeed: FRAX_USD_ORACLE, - toUnderlyingPriceFeed: AaveV3EthereumAssets.WETH_ORACLE, - amount: IERC20(AaveV2EthereumAssets.FRAX_UNDERLYING).balanceOf(COLLECTOR), - slippage: 350 - }) - ); - } - - function _allowances() internal { - /// Acquire ETH allowances - AaveV3Ethereum.COLLECTOR.approve( - MATIC_MAINNET, - AAVE_FINANCE_COMMITEE, - MATIC_MAINNET.balanceOf(COLLECTOR) - ); - - AaveV3Ethereum.COLLECTOR.approve( - STMATIC_MAINNET, - AAVE_FINANCE_COMMITEE, - STMATIC_MAINNET.balanceOf(COLLECTOR) - ); - - /// Aave buyback allowance - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - AAVE_FINANCE_COMMITEE, - USDT_BUYBACK_AMOUNT - ); - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - AAVE_FINANCE_COMMITEE, - USDC_BUYBACK_AMOUNT - ); - - /// Merit + Ahab Programs - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN), - MERIT_SAFE, - GHO_ALLOWANCE_AMOUNT - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN), - MERIT_SAFE, - WETH_ALLOWANCE_AMOUNT - ); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.t.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.t.sol deleted file mode 100644 index 19469e0b5..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.t.sol +++ /dev/null @@ -1,203 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_MayFundingUpdate_20250426} from './AaveV3Ethereum_MayFundingUpdate_20250426.sol'; - -/** - * @dev Test for AaveV3Ethereum_MayFundingUpdate_20250426 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.t.sol -vv - */ -contract AaveV3Ethereum_MayFundingUpdate_20250426_Test is ProtocolV3TestBase { - AaveV3Ethereum_MayFundingUpdate_20250426 internal proposal; - - event SwapRequested( - address milkman, - address indexed fromToken, - address indexed toToken, - address fromOracle, - address toOracle, - uint256 amount, - address indexed recipient, - uint256 slippage - ); - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22369914); - proposal = new AaveV3Ethereum_MayFundingUpdate_20250426(); - } - - function test_DepositAndTransfers() public { - uint256 ethAmountBefore = address(AaveV3Ethereum.COLLECTOR).balance; - uint256 wethBalanceBefore = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - executePayload(vm, address(proposal)); - uint256 aaveAmountAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 ethAmountAfter = address(AaveV3Ethereum.COLLECTOR).balance; - uint256 wethBalanceAfter = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - assertEq(aaveAmountAfter, 0); - assertEq( - ethAmountAfter, - ethAmountBefore - proposal.ETH_TRANSFER_AMOUNT() - proposal.ETH_DEPOSIT_AMOUNT() - ); - assertApproxEqAbs(wethBalanceAfter, wethBalanceBefore + proposal.ETH_DEPOSIT_AMOUNT(), 100); - } - - function test_Swaps() public { - uint256 usdtAmountBefore = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 usdcAmountBefore = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.USDT_UNDERLYING, - AaveV3EthereumAssets.GHO_UNDERLYING, - AaveV3EthereumAssets.USDT_ORACLE, - proposal.GHO_USD_FEED(), - proposal.USDT_SWAP_AMOUNT(), - address(AaveV3Ethereum.COLLECTOR), - 75 - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.USDC_UNDERLYING, - AaveV3EthereumAssets.GHO_UNDERLYING, - AaveV3EthereumAssets.USDC_ORACLE, - proposal.GHO_USD_FEED(), - proposal.USDC_SWAP_AMOUNT(), - address(AaveV3Ethereum.COLLECTOR), - 75 - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.DAI_UNDERLYING, - AaveV3EthereumAssets.USDS_UNDERLYING, - AaveV3EthereumAssets.DAI_ORACLE, - AaveV3EthereumAssets.USDS_ORACLE, - 2861611664172656320323082, - address(AaveV3Ethereum.COLLECTOR), - 75 - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV3EthereumAssets.LUSD_UNDERLYING, - AaveV3EthereumAssets.WETH_UNDERLYING, - AaveV3EthereumAssets.LUSD_ORACLE, - AaveV3EthereumAssets.WETH_ORACLE, - 10425959241049955563153, - address(AaveV3Ethereum.COLLECTOR), - 350 - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV2EthereumAssets.CVX_UNDERLYING, - AaveV3EthereumAssets.WETH_UNDERLYING, - proposal.CVX_USD_ORACLE(), - AaveV3EthereumAssets.WETH_ORACLE, - 6750896131895957468591, - address(AaveV3Ethereum.COLLECTOR), - 200 - ); - - vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); - emit SwapRequested( - proposal.MILKMAN(), - AaveV2EthereumAssets.FRAX_UNDERLYING, - AaveV3EthereumAssets.WETH_UNDERLYING, - proposal.FRAX_USD_ORACLE(), - AaveV3EthereumAssets.WETH_ORACLE, - 6248759763460068743065, - address(AaveV3Ethereum.COLLECTOR), - 350 - ); - - executePayload(vm, address(proposal)); - - uint256 usdtAmountAfter = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 usdcAmountAfter = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 daiAmountAfter = IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 lusdAmountAfter = IERC20(AaveV3EthereumAssets.LUSD_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 cvxAmountAfter = IERC20(AaveV2EthereumAssets.CVX_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - assertEq(usdtAmountAfter, usdtAmountBefore - proposal.USDT_SWAP_AMOUNT()); - assertEq(usdcAmountAfter, usdcAmountBefore - proposal.USDC_SWAP_AMOUNT()); - assertEq(daiAmountAfter, 0); - assertEq(lusdAmountAfter, 0); - assertEq(cvxAmountAfter, 0); - } - - function test_approvals() public { - executePayload(vm, address(proposal)); - - uint256 maticAllowance = IERC20(proposal.MATIC_MAINNET()).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AAVE_FINANCE_COMMITEE() - ); - uint256 stmaticAllowance = IERC20(proposal.STMATIC_MAINNET()).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AAVE_FINANCE_COMMITEE() - ); - uint256 usdtAllowance = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AAVE_FINANCE_COMMITEE() - ); - uint256 usdcAllowance = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AAVE_FINANCE_COMMITEE() - ); - uint256 ghoAllowance = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_SAFE() - ); - uint256 wethAllowance = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_SAFE() - ); - - assertEq( - maticAllowance, - IERC20(proposal.MATIC_MAINNET()).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - assertEq( - stmaticAllowance, - IERC20(proposal.STMATIC_MAINNET()).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - assertEq(usdtAllowance, proposal.USDT_BUYBACK_AMOUNT()); - assertEq(usdcAllowance, proposal.USDC_BUYBACK_AMOUNT()); - assertEq(ghoAllowance, proposal.GHO_ALLOWANCE_AMOUNT()); - assertEq(wethAllowance, proposal.WETH_ALLOWANCE_AMOUNT()); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.sol deleted file mode 100644 index df73c5f1d..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Gnosis, AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -/** - * @title May Funding Update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906 - */ -contract AaveV3Gnosis_MayFundingUpdate_20250426 is IProposalGenericExecutor { - /// https://gnosisscan.io/address/0xdef1FA4CEfe67365ba046a7C630D6B885298E210 - address public constant ACI = 0xdef1FA4CEfe67365ba046a7C630D6B885298E210; - uint256 public constant EURE_AMOUNT = 25_000e18; - - function execute() external { - AaveV3Gnosis.COLLECTOR.approve(IERC20(AaveV3GnosisAssets.EURe_A_TOKEN), ACI, EURE_AMOUNT); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.t.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.t.sol deleted file mode 100644 index 80c6f5d27..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.t.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Gnosis, AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Gnosis_MayFundingUpdate_20250426} from './AaveV3Gnosis_MayFundingUpdate_20250426.sol'; - -/** - * @dev Test for AaveV3Gnosis_MayFundingUpdate_20250426 - * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20250426_Multi_MayFundingUpdate/AaveV3Gnosis_MayFundingUpdate_20250426.t.sol -vv - */ -contract AaveV3Gnosis_MayFundingUpdate_20250426_Test is ProtocolV3TestBase { - AaveV3Gnosis_MayFundingUpdate_20250426 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('gnosis'), 39797083); - proposal = new AaveV3Gnosis_MayFundingUpdate_20250426(); - } - - function test_Allowance() public { - executePayload(vm, address(proposal)); - uint256 eureAllowance = IERC20(AaveV3GnosisAssets.EURe_A_TOKEN).allowance( - address(AaveV3Gnosis.COLLECTOR), - proposal.ACI() - ); - - assertEq(eureAllowance, proposal.EURE_AMOUNT()); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.sol deleted file mode 100644 index 1b855fa60..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IAaveOpEthERC20Bridge} from 'aave-helpers/src/bridges/optimism/IAaveOpEthERC20Bridge.sol'; -import {MiscOptimism} from 'aave-address-book/MiscOptimism.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -/** - * @title May Funding Update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906 - */ -contract AaveV3Optimism_MayFundingUpdate_20250426 is IProposalGenericExecutor { - address public constant COLLECTOR = address(AaveV3Optimism.COLLECTOR); - address public constant BRIDGE = MiscOptimism.AAVE_OPT_ETH_BRIDGE; - - function execute() external { - /// DAI - uint256 daiBalance = IERC20(AaveV3OptimismAssets.DAI_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Optimism.COLLECTOR.transfer( - IERC20(AaveV3OptimismAssets.DAI_UNDERLYING), - BRIDGE, - daiBalance - ); - IAaveOpEthERC20Bridge(BRIDGE).bridge( - AaveV3OptimismAssets.DAI_UNDERLYING, - AaveV3EthereumAssets.DAI_UNDERLYING, - daiBalance - ); - - /// USDT - uint256 usdtBalance = IERC20(AaveV3OptimismAssets.USDT_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Optimism.COLLECTOR.transfer( - IERC20(AaveV3OptimismAssets.USDT_UNDERLYING), - BRIDGE, - usdtBalance - ); - IAaveOpEthERC20Bridge(BRIDGE).bridge( - AaveV3OptimismAssets.USDT_UNDERLYING, - AaveV3EthereumAssets.USDT_UNDERLYING, - usdtBalance - ); - - /// USDC - uint256 usdcBalance = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Optimism.COLLECTOR.transfer( - IERC20(AaveV3OptimismAssets.USDC_UNDERLYING), - BRIDGE, - usdcBalance - ); - IAaveOpEthERC20Bridge(BRIDGE).bridge( - AaveV3OptimismAssets.USDC_UNDERLYING, - AaveV3EthereumAssets.USDC_UNDERLYING, - usdcBalance - ); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.t.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.t.sol deleted file mode 100644 index 99a9e695f..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.t.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; -import {MiscOptimism} from 'aave-address-book/MiscOptimism.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Optimism_MayFundingUpdate_20250426} from './AaveV3Optimism_MayFundingUpdate_20250426.sol'; - -/** - * @dev Test for AaveV3Optimism_MayFundingUpdate_20250426 - * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.t.sol -vv - */ -contract AaveV3Optimism_MayFundingUpdate_20250426_Test is ProtocolV3TestBase { - AaveV3Optimism_MayFundingUpdate_20250426 internal proposal; - - event Bridge(address indexed token, uint256 amount); - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('optimism'), 135164971); - proposal = new AaveV3Optimism_MayFundingUpdate_20250426(); - } - - function test_Bridges() public { - uint256 daiCollectorBalanceBefore = IERC20(AaveV3OptimismAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - uint256 usdtCollectorBalanceBefore = IERC20(AaveV3OptimismAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - uint256 usdcCollectorBalanceBefore = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - assertGt(daiCollectorBalanceBefore, 0); - assertGt(usdtCollectorBalanceBefore, 0); - assertGt(usdcCollectorBalanceBefore, 0); - - vm.expectEmit(true, true, true, true, MiscOptimism.AAVE_OPT_ETH_BRIDGE); - emit Bridge(AaveV3OptimismAssets.DAI_UNDERLYING, daiCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscOptimism.AAVE_OPT_ETH_BRIDGE); - emit Bridge(AaveV3OptimismAssets.USDT_UNDERLYING, usdtCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscOptimism.AAVE_OPT_ETH_BRIDGE); - emit Bridge(AaveV3OptimismAssets.USDC_UNDERLYING, usdcCollectorBalanceBefore); - executePayload(vm, address(proposal)); - - uint256 daiCollectorBalanceAfter = IERC20(AaveV3OptimismAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - uint256 usdtCollectorBalanceAfter = IERC20(AaveV3OptimismAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - uint256 usdcCollectorBalanceAfter = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Optimism.COLLECTOR) - ); - - assertEq(daiCollectorBalanceAfter, 0); - assertEq(usdtCollectorBalanceAfter, 0); - assertEq(usdcCollectorBalanceAfter, 0); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.sol deleted file mode 100644 index d1072e86f..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.sol +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {IAavePolEthERC20Bridge} from 'aave-helpers/src/bridges/polygon/IAavePolEthERC20Bridge.sol'; -import {IAavePolEthPlasmaBridge} from 'aave-helpers/src/bridges/polygon/IAavePolEthPlasmaBridge.sol'; -import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -interface WPOL { - function withdraw(uint256 wad) external; -} - -/** - * @title May Funding Update - * @author TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906 - */ -contract AaveV3Polygon_MayFundingUpdate_20250426 is IProposalGenericExecutor { - address public constant COLLECTOR = address(AaveV3Polygon.COLLECTOR); - address public constant BRIDGE = MiscPolygon.AAVE_POL_ETH_BRIDGE; - - /// https://polygonscan.com/address/0xc980508cC8866f726040Da1C0C61f682e74aBc39 - address public constant PLASMA_BRIDGE = 0xc980508cC8866f726040Da1C0C61f682e74aBc39; - - function execute() external { - /// DAI - uint256 daiBalance = IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.DAI_UNDERLYING), - BRIDGE, - daiBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.DAI_UNDERLYING, daiBalance); - - /// USDT - uint256 usdtBalance = IERC20(AaveV3PolygonAssets.USDT_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.USDT_UNDERLYING), - BRIDGE, - usdtBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.USDT_UNDERLYING, usdtBalance); - - /// USDC - uint256 usdcBalance = IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.USDC_UNDERLYING), - BRIDGE, - usdcBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.USDC_UNDERLYING, usdcBalance); - - /// WPOL - uint256 wpolBalance = IERC20(AaveV3PolygonAssets.WPOL_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.WPOL_UNDERLYING), - address(this), - wpolBalance - ); - WPOL(AaveV3PolygonAssets.WPOL_UNDERLYING).withdraw(wpolBalance); - (bool success, ) = payable(PLASMA_BRIDGE).call{value: wpolBalance}(''); - require(success); - IAavePolEthPlasmaBridge(PLASMA_BRIDGE).bridge(wpolBalance); - - /// WBTC - uint256 wbtcBalance = IERC20(AaveV3PolygonAssets.WBTC_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.WBTC_UNDERLYING), - BRIDGE, - wbtcBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.WBTC_UNDERLYING, wbtcBalance); - - /// MATICX - uint256 maticxBalance = IERC20(AaveV3PolygonAssets.MaticX_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.MaticX_UNDERLYING), - BRIDGE, - maticxBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.MaticX_UNDERLYING, maticxBalance); - - /// WETH - uint256 wethBalance = IERC20(AaveV3PolygonAssets.WETH_UNDERLYING).balanceOf(COLLECTOR); - AaveV3Polygon.COLLECTOR.transfer( - IERC20(AaveV3PolygonAssets.WETH_UNDERLYING), - BRIDGE, - wethBalance - ); - IAavePolEthERC20Bridge(BRIDGE).bridge(AaveV3PolygonAssets.WETH_UNDERLYING, wethBalance); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.t.sol b/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.t.sol deleted file mode 100644 index 5f9daa8e1..000000000 --- a/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.t.sol +++ /dev/null @@ -1,102 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Polygon_MayFundingUpdate_20250426} from './AaveV3Polygon_MayFundingUpdate_20250426.sol'; - -/** - * @dev Test for AaveV3Polygon_MayFundingUpdate_20250426 - * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.t.sol -vv - */ -contract AaveV3Polygon_MayFundingUpdate_20250426_Test is ProtocolV3TestBase { - AaveV3Polygon_MayFundingUpdate_20250426 internal proposal; - - event Bridge(address token, uint256 amount); - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 70871207); - proposal = new AaveV3Polygon_MayFundingUpdate_20250426(); - } - - function test_Bridges() public { - uint256 daiCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 usdtCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 usdcCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wpolCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.WPOL_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wbtcCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.WBTC_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 maticxCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.MaticX_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wethCollectorBalanceBefore = IERC20(AaveV3PolygonAssets.WETH_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - - assertGt(daiCollectorBalanceBefore, 0); - assertGt(usdtCollectorBalanceBefore, 0); - assertGt(usdcCollectorBalanceBefore, 0); - assertGt(wpolCollectorBalanceBefore, 0); - assertGt(wbtcCollectorBalanceBefore, 0); - assertGt(maticxCollectorBalanceBefore, 0); - assertGt(wethCollectorBalanceBefore, 0); - - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.DAI_UNDERLYING, daiCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.USDT_UNDERLYING, usdtCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.USDC_UNDERLYING, usdcCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, proposal.PLASMA_BRIDGE()); - emit Bridge(0x0000000000000000000000000000000000001010, wpolCollectorBalanceBefore); /// native bridge - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.WBTC_UNDERLYING, wbtcCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.MaticX_UNDERLYING, maticxCollectorBalanceBefore); - vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE); - emit Bridge(AaveV3PolygonAssets.WETH_UNDERLYING, wethCollectorBalanceBefore); - executePayload(vm, address(proposal)); - - uint256 daiCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 usdtCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.USDT_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 usdcCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wpolCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.WPOL_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wbtcCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.WBTC_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 maticxCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.MaticX_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - uint256 wethCollectorBalanceAfter = IERC20(AaveV3PolygonAssets.WETH_UNDERLYING).balanceOf( - address(AaveV3Polygon.COLLECTOR) - ); - - assertEq(daiCollectorBalanceAfter, 0); - assertEq(usdtCollectorBalanceAfter, 0); - assertEq(usdcCollectorBalanceAfter, 0); - assertEq(wpolCollectorBalanceAfter, 0); - assertEq(wbtcCollectorBalanceAfter, 0); - assertEq(maticxCollectorBalanceAfter, 0); - assertEq(wethCollectorBalanceAfter, 0); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate.md b/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate.md deleted file mode 100644 index 1f7d39b71..000000000 --- a/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "May Funding Update" -author: "TokenLogic" -discussions: "https://governance.aave.com/t/arfc-may-2025-funding-update/21906" ---- - -## Simple Summary - -This publication presents the May Funding Update, consisting of the following key activities: - -- Bridge funds to Ethereum; -- Consolidate funds from the Collector; -- Merit, Ahab allowances -- Create 6M USD Allowance for AAVE buybacks; and, -- Acquire 4M GHO for Operations. - -## Motivation - -This publication combines near term operational needs and migrating assets held on L2s and side chains in preparation for funding future incentive campaigns. - -The below outlines the objectives of this publication: - -- Consolidating funds to Ethereum; and, -- Support near term operational requirements; - -### Bridge Funds to Ethereum - -Each month, the DAO will bridge its funds held on sidechains and Layer 2 networks back to Ethereum, where they will be allocated to support ongoing incentive and buyback programs. With the Umbrella upgrade pending, Horizon and AAVE buybacks already underway, consolidating assets on Ethereum ensures that sufficient capital is available and accessible when needed. - -### Acquire GHO - -In the short term, we anticipate multiple initiatives will seek funding from the DAO. This proposal, once enacted, will secure a sufficient amount of GHO to support the DAO’s operations. This ensures the DAO remains consistently well-capitalized. - -Upcoming anticipated expenses include: - -- Renewal of Service Provider agreements; -- Merit and ALC distributions; and, -- Incentive campaign(s). - -### Acquire ETH - -The Aave DAO continues its treasury rebalancing by converting a portion of its MATIC holdings into ETH. This action builds upon the funding update initiated in April, during which the first batch of Polygon-based assets was bridged back to Ethereum mainnet. - -The ETH acquired through this reallocation will be directed toward the Frontier program, where it will support Ethereum decentralization efforts while simultaneously generating yield for the DAO. - -## Specification - -This proposal shall be submitted as several AIPs that align with operational readiness timelines and ease of review given the volume of funds being moved. - -### Bridge Assets to Ethereum - -Bridge the following assets to Ethereum. - -| Polygon | Arbitrum | Optimism | -| :---------------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | -| [DAI](https://polygonscan.com/token/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063) | [DAI](https://arbiscan.io/token/0xda10009cbd5d07dd0cecc66161fc93d7c9000da1) | [DAI](https://optimistic.etherscan.io/token/0xda10009cbd5d07dd0cecc66161fc93d7c9000da1) | -| [USDT](https://polygonscan.com/token/0xc2132d05d31c914a87c6611c10748aeb04b58e8f) | [USDC.e](https://arbiscan.io/token/0xff970a61a04b1ca14834a43f5de4533ebddb5cc8) | [USDT](https://optimistic.etherscan.io/token/0x94b008aa00579c1307b0ef2c499ad98a8ce58e58) | -| [ USDC.e](https://polygonscan.com/token/0x2791bca1f2de4661ed88a30c99a7a9449aa84174) | | [USDC.e](https://optimistic.etherscan.io/token/0x7f5c764cbc14f9669b88837ca1490cca17c31607) | -| [WPOL](https://polygonscan.com/token/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270) | | -| [WBTC](https://polygonscan.com/token/0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6) | | -| [MATICX](https://polygonscan.com/token/0xfa68fb4628dff1028cfec22b4162fccd0d45efb6) | | -| [ETH](https://polygonscan.com/token/0xe50fa9b3c56ffb159cb0fca61f5c9d750e8128c8) | - -### Transfer Assets - -Transfer all AAVE to the Ecosystem Reserve. - -### Deposit Assets - -Deposit 115 ETH held on the Treasury into the Core instance of Aave. - -### Ethereum - Swaps - -Swap the following from the Collector as outlined in the table below: - -| Ethereum | Amount | Swap | -| :------: | :----: | :--: | -| USDT | 2.00M | GHO | -| USDC | 2.00M | GHO | -| DAI | All | USDS | -| LUSD | All | WETH | -| CVX | All | WETH | -| FRAX | All | WETH | - -### Create Allowances - -**Acquire WETH** - -Create a MATIC and stMATIC allowance for the Aave Finance Committee to then swap each asset to ETH and transfer to the Treasury. - -- Asset: `MATIC` [0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0](https://etherscan.io/address/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0) -- Amount: All Available Balance ~580,156 -- Asset: `stMATIC` [0x9ee91F9f426fA633d227f7a9b000E28b9dfd8599](https://etherscan.io/address/0x9ee91f9f426fa633d227f7a9b000e28b9dfd8599) -- Amount: All Available Balance ~28,547 -- Spender: AFC [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://app.safe.global/home?safe=eth:0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) -- Method: `approve()` MATIC and stMATIC on the Aave Collector contract to the AFC safe - -**AAVE Buybacks** - -Create a 3M aEthUSDT and 3M aEthUSDC allowance for the Aave Finance Committee to perform 6 weeks of AAVE buybacks. - -- Asset: `aEthUSDT` [0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a](https://etherscan.io/address/0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a) -- Amount: 3M -- Asset: `aEthUSDC` [0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c](https://etherscan.io/address/0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c) -- Amount: 3M -- Spender: AFC [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://app.safe.global/home?safe=eth:0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) -- Method: `approve()` aEthUSDT and `aEthUSDC on the Aave Collector contract to the AFC safe - -**Merit + Ahab Programs** - -Create allowances to the Merit and Ahab, 3M aEthLidoGHO and 800 aEthWETH from Aave v3 Prime and Core respectively on Ethereum: - -- Asset: `aEthLidoGHO` [0x18eFE565A5373f430e2F809b97De30335B3ad96A](https://etherscan.io/address/0x18eFE565A5373f430e2F809b97De30335B3ad96A) -- Amount: 3M -- Asset: `aEthWETH` [0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8](https://etherscan.io/address/0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8) -- Amount: 800 -- Spender: Merit [0xdeadD8aB03075b7FBA81864202a2f59EE25B312b](https://app.safe.global/transactions/history?safe=eth:0xdeadD8aB03075b7FBA81864202a2f59EE25B312b) -- Method: `approve()` aEthLidoGHO and aEthWETH on the Aave Collector contract to the Merit safe - -**Gnosis Liquidity Mining Rewards** - -- Asset: `aGnoEURe` [0xEdBC7449a9b594CA4E053D9737EC5Dc4CbCcBfb2](https://gnosisscan.io/address/0xedbc7449a9b594ca4e053d9737ec5dc4cbccbfb2) -- Amount: 25k -- Spender: Merit [0xdef1FA4CEfe67365ba046a7C630D6B885298E210](https://app.safe.global/home?safe=gno:0xdef1FA4CEfe67365ba046a7C630D6B885298E210) -- Method: `approve()` aEthLidoGHO and aEthWETH on the Aave Collector contract to the Merit safe - -**Gas Reimbursement** -Transfer 0.5847 ETH to ACI to reimburse expenses incurred. - -This reimburses associated gas costs linked to AIP submissions and administering various incentive reward programs. - -ACI Receiving Address: [0xdef1FA4CEfe67365ba046a7C630D6B885298E210](https://app.safe.global/home?safe=eth:0xdef1FA4CEfe67365ba046a7C630D6B885298E210) - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20250426.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20250426.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20250426.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/3836ce93caef8c43b8d1a9566a67f709a5618ab1/src/20250426_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20250426.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-may-2025-funding-update/21906) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol b/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol deleted file mode 100644 index 4f3a76685..000000000 --- a/src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol +++ /dev/null @@ -1,177 +0,0 @@ -// 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, PolygonScript, OptimismScript, ArbitrumScript, GnosisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_MayFundingUpdate_20250426} from './AaveV3Ethereum_MayFundingUpdate_20250426.sol'; -import {AaveV3Polygon_MayFundingUpdate_20250426} from './AaveV3Polygon_MayFundingUpdate_20250426.sol'; -import {AaveV3Optimism_MayFundingUpdate_20250426} from './AaveV3Optimism_MayFundingUpdate_20250426.sol'; -import {AaveV3Arbitrum_MayFundingUpdate_20250426} from './AaveV3Arbitrum_MayFundingUpdate_20250426.sol'; -import {AaveV3Gnosis_MayFundingUpdate_20250426} from './AaveV3Gnosis_MayFundingUpdate_20250426.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/MayFundingUpdate_20250426.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_MayFundingUpdate_20250426).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/MayFundingUpdate_20250426.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_MayFundingUpdate_20250426).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/MayFundingUpdate_20250426.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_MayFundingUpdate_20250426).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/MayFundingUpdate_20250426.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_MayFundingUpdate_20250426).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/MayFundingUpdate_20250426.s.sol/42161/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_MayFundingUpdate_20250426).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/20250426_Multi_MayFundingUpdate/MayFundingUpdate_20250426.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](5); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_MayFundingUpdate_20250426).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_MayFundingUpdate_20250426).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_MayFundingUpdate_20250426).creationCode - ); - payloads[2] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_MayFundingUpdate_20250426).creationCode - ); - payloads[3] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_MayFundingUpdate_20250426).creationCode - ); - payloads[4] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile(vm, 'src/20250426_Multi_MayFundingUpdate/MayFundingUpdate.md') - ); - } -} diff --git a/src/20250426_Multi_MayFundingUpdate/config.ts b/src/20250426_Multi_MayFundingUpdate/config.ts deleted file mode 100644 index 6e4617252..000000000 --- a/src/20250426_Multi_MayFundingUpdate/config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum', 'AaveV3Polygon', 'AaveV3Optimism', 'AaveV3Arbitrum', 'AaveV3Gnosis'], - title: 'May Funding Update', - shortName: 'MayFundingUpdate', - date: '20250426', - author: 'TokenLogic', - discussion: 'https://governance.aave.com/t/arfc-may-2025-funding-update/21906', - snapshot: 'Direct-to-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22369914}}, - AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 70871207}}, - AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 135164971}}, - AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 331207896}}, - AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 39797083}}, - }, -}; diff --git a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol b/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol deleted file mode 100644 index 6105e682d..000000000 --- a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol +++ /dev/null @@ -1,126 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; - -/** - * @title Onboard PT sUSDe July on Core Instance - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0 - * - Discussion: https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878 - */ -contract AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant PT_sUSDE_31JUL2025 = 0x3b3fB9C57858EF816833dC91565EFcd85D96f634; - address public constant LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - uint256 public constant SEED_AMOUNT = 10e18; - - function _postExecute() internal override { - IERC20(PT_sUSDE_31JUL2025).forceApprove(address(AaveV3Ethereum.POOL), SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(PT_sUSDE_31JUL2025, SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aPT_sUSDE_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken(PT_sUSDE_31JUL2025); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - PT_sUSDE_31JUL2025, - LM_ADMIN - ); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - aPT_sUSDE_31JUL2025, - LM_ADMIN - ); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 8, - ltv: 87_40, - liqThreshold: 89_40, - liqBonus: 4_60, - label: 'PT-sUSDe Stablecoins Jul 2025' - }); - - return eModeUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](4); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_sUSDE_31JUL2025, - eModeCategory: 8, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 8, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: PT_sUSDE_31JUL2025, - assetSymbol: 'PT_sUSDE_31JUL2025', - priceFeed: 0x759B9B72700A129CD7AD8e53F9c99cb48Fd57105, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 20_00, - supplyCap: 85_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 7_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.t.sol b/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.t.sol deleted file mode 100644 index bdadf43b2..000000000 --- a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.t.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428} from './AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol'; -import {AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423} from '../20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423.sol'; -import {AaveV3Ethereum_ActivateAGRS_20250423} from '../20250423_AaveV3Ethereum_OnboardPTSUSDeJulyAndPTEUSDeMayOnCoreInstance/AaveV3Ethereum_ActivateAGRS_20250423.sol'; - -/** - * @dev Test for AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.t.sol -vv - */ -contract AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428_Test is ProtocolV3TestBase { - AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22365369); - proposal = new AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428(); - - // as these payloads will be executed before - executePayload(vm, address(new AaveV3Ethereum_OnboardPTEUSDeMayOnCoreInstance_20250423())); - executePayload(vm, address(new AaveV3Ethereum_ActivateAGRS_20250423())); - } - - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHasPT_sUSDE_31JUL2025Funds() public { - executePayload(vm, address(proposal)); - - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_sUSDE_31JUL2025()); - assertGe( - IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), - proposal.SEED_AMOUNT() - ); - } - - function test_PT_sUSDE_31JUL2025Admin() public { - executePayload(vm, address(proposal)); - - address aPT_sUSDE_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken( - proposal.PT_sUSDE_31JUL2025() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin( - proposal.PT_sUSDE_31JUL2025() - ), - proposal.LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aPT_sUSDE_31JUL2025), - proposal.LM_ADMIN() - ); - } -} diff --git a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance.md b/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance.md deleted file mode 100644 index da6b62db8..000000000 --- a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "Onboard PT sUSDe July on Core Instance" -author: "ACI and BGD Labs" -discussions: "https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0" ---- - -## Simple Summary - -This proposal seeks to onboard pendle PT-sUSDe-31July2025 on the Aave V3 core instance. -This is a resubmission of PT-sUSDe-31July2025 listing payload of [Proposal 299](https://vote.onaave.com/proposal/?proposalId=299), which was cancelled due to a detected misconfiguration. - -## Motivation - -Pendle allows users to split yield bearing tokens into principal (PT) and yield (YT) components. This opens the door to trading yield for the growing number of yield bearing tokens, and gives users additional options for yield farming strategies. A notable feature of the PT tokens is that at the maturity date, the value of the PT equals the value of the underlying asset and can be redeemed for the underlying. This means PT tokens, which can be bought at a discount within Pendle pools, represent the fixed rate part of a Pendle asset pair. - -Pendle has seen extremely high growth this year, with current TVL of circa $4.5 billion. Along with this growth has come the desire for yield traders to borrow against their Pendle PT tokens. This represents a multi-billion dollar growth opportunity for Aave, without a large increase in risk if PT tokens are onboarded for already listed assets such as sUSDe. With this, it makes sense to onboard PT-sUSDe-31July2025 asset. - -## Specification - -The table below illustrates the configured risk parameters for **PT_sUSDE_31JUL2025**: - -| Parameter | PT_sUSDE_31JUL2025 | -| ------------------------- | -----------------: | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap | 85,000,000 | -| Borrow Cap | 1 | -| Isolation Mode | false | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 20 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 7 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | - -The following EMode categories will be created for the assets listed: - -**PT-sUSDe Stablecoins E-Mode (id: 8)**: - -| Asset | PT-sUSDe | USDC | USDT | USDS | -| ----------------- | -------- | ---- | ---- | ---- | -| Collateral | Yes | No | No | No | -| Borrowable | No | Yes | Yes | Yes | -| LTV | 87.4% | - | - | - | -| LT | 89.4% | - | - | - | -| Liquidation Bonus | 4.6% | - | - | - | - -The Pendle PT Capo with linear discount have been deployed with the following configurations: - -| **Parameter** | **Value** | -| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| Oracle | [PT Capped sUSDe USDT/USD linear discount 31JUL2025](https://etherscan.io/address/0x759B9B72700A129CD7AD8e53F9c99cb48Fd57105) | -| Underlying Oracle | [Capped USDT/USD](https://etherscan.io/address/0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8) | -| Underlying Oracle | [Chainlink USDT/USD](https://etherscan.io/address/0x3E7d1eAB13ad0104d2750B8863b489D65364e32D) | -| OracleLatestAnswer (28 April 25) | USD 0.98089311 | -| discountRatePerYear | 7.5124% | -| maxDiscountRatePerYear | 21.22% | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for PT_sUSDE_31JUL2025 and its aToken. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/73ed5a749ac9f57abecc3879729b1e3d6cd79f7a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/73ed5a749ac9f57abecc3879729b1e3d6cd79f7a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0) -- [Discussion](https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance_20250428.s.sol b/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance_20250428.s.sol deleted file mode 100644 index a2dc50178..000000000 --- a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance_20250428.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_OnboardPTSUSDeJulyOnCoreInstance_20250428} from './AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance_20250428.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardPTSUSDeJulyOnCoreInstance_20250428.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance_20250428).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/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance_20250428.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_OnboardPTSUSDeJulyOnCoreInstance_20250428).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/OnboardPTSUSDeJulyOnCoreInstance.md' - ) - ); - } -} diff --git a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/config.ts b/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/config.ts deleted file mode 100644 index ece80eb31..000000000 --- a/src/20250428_AaveV3Ethereum_OnboardPTSUSDeJulyOnCoreInstance/config.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'Onboard PT sUSDe July on Core Instance', - shortName: 'OnboardPTSUSDeJulyOnCoreInstance', - date: '20250428', - author: 'BGD Labs (@bgdlabs)', - discussion: - 'https://governance.aave.com/t/arfc-onboard-susde-july-expiry-pt-tokens-on-aave-v3-core-instance/21878', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xc039953e4f18804bb017876d27621da1ab3e4de53acd3b32d0f1fe94d4bbb6a0', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - EMODES_UPDATES: [ - { - eModeCategory: 7, - ltv: '87.4', - liqThreshold: '89.4', - liqBonus: '4.6', - label: 'PT-sUSDe Stablecoins Jul 2025', - }, - ], - ASSET_LISTING: [ - { - assetSymbol: 'PT_sUSDE_31JUL2025', - decimals: 18, - priceFeed: '0x759B9B72700A129CD7AD8e53F9c99cb48Fd57105', - ltv: '0.05', - liqThreshold: '0.1', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '20', - supplyCap: '85000000', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '7', - variableRateSlope2: '300', - }, - asset: '0x3b3fB9C57858EF816833dC91565EFcd85D96f634', - admin: '', - }, - ], - }, - cache: {blockNumber: 22365369}, - }, - }, -}; diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol deleted file mode 100644 index a04dc6c47..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {ISvrOracleSteward} from '../interfaces/ISvrOracleSteward.sol'; - -/** - * @title Extend SVR V1 to more reserves - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/direct-to-aip-aave-chainlink-svr-v1-activation-phase-2/21940 - */ -contract AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429 is IProposalGenericExecutor { - address public constant SVR_rsETH = 0x7292C95A5f6A501a9c4B34f6393e221F2A0139c3; - address public constant SVR_ezETH = 0xF3d49021fF3bbBFDfC1992A4b09E5D1d141D044C; - address public constant SVR_WETH = 0x5424384B256154046E9667dDFaaa5e550145215e; - address public constant SVR_wstETH = 0xe1D97bF61901B075E9626c8A2340a7De385861Ef; - address public constant SVR_USDC = 0x3f73F03aa83B2A48ed27E964eD0fDb590332095B; - - function execute() external { - AaveV3EthereumLido.ACL_MANAGER.addAssetListingAdmin(AaveV3EthereumLido.SVR_STEWARD); - ISvrOracleSteward.AssetOracle[] memory configInput = new ISvrOracleSteward.AssetOracle[](5); - configInput[0] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumLidoAssets.rsETH_UNDERLYING, - svrOracle: SVR_rsETH - }); - configInput[1] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumLidoAssets.ezETH_UNDERLYING, - svrOracle: SVR_ezETH - }); - configInput[2] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumLidoAssets.WETH_UNDERLYING, - svrOracle: SVR_WETH - }); - configInput[3] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumLidoAssets.wstETH_UNDERLYING, - svrOracle: SVR_wstETH - }); - configInput[4] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumLidoAssets.USDC_UNDERLYING, - svrOracle: SVR_USDC - }); - ISvrOracleSteward(AaveV3EthereumLido.SVR_STEWARD).enableSvrOracles(configInput); - } -} diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.t.sol b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.t.sol deleted file mode 100644 index 115882729..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429} from './AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol'; - -/** - * @dev Test for AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.t.sol -vv - */ -contract AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429_Test is ProtocolV3TestBase { - AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22374933); - proposal = new AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429', - AaveV3EthereumLido.POOL, - address(proposal) - ); - } -} diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol deleted file mode 100644 index 554cad2a6..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {ISvrOracleSteward} from '../interfaces/ISvrOracleSteward.sol'; - -/** - * @title Extend SVR V1 to more reserves - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/direct-to-aip-aave-chainlink-svr-v1-activation-phase-2/21940 - */ -contract AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429 is IProposalGenericExecutor { - address public constant SVR_BTC_USD = 0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A; - address public constant SVR_eBTC = 0x577C217cB5b1691A500D48aA7F69346409cFd668; - address public constant SVR_WBTC = 0xDaa4B74C6bAc4e25188e64ebc68DB5050b690cAc; - - function execute() external { - ISvrOracleSteward.AssetOracle[] memory configInput = new ISvrOracleSteward.AssetOracle[](3); - configInput[0] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumAssets.cbBTC_UNDERLYING, - svrOracle: SVR_BTC_USD - }); - configInput[1] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumAssets.eBTC_UNDERLYING, - svrOracle: SVR_eBTC - }); - configInput[2] = ISvrOracleSteward.AssetOracle({ - asset: AaveV3EthereumAssets.WBTC_UNDERLYING, - svrOracle: SVR_WBTC - }); - ISvrOracleSteward(AaveV3Ethereum.SVR_STEWARD).enableSvrOracles(configInput); - } -} diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.t.sol b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.t.sol deleted file mode 100644 index 410023f46..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429} from './AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol'; - -/** - * @dev Test for AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.t.sol -vv - */ -contract AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429_Test is ProtocolV3TestBase { - AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22376975); - proposal = new AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves.md b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves.md deleted file mode 100644 index 14e1e26e9..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "Extend SVR V1 to more reserves" -author: "BGD Labs @bgdlabs" -discussions: "https://governance.aave.com/t/direct-to-aip-aave-chainlink-svr-v1-activation-phase-2/21940" ---- - -## Simple Summary - -Enable SVR feeds on the following assets: - -- `eBTC`, `cbBTC` and `WBTC` on the Aave V3 Core instance -- `USDC`, `WETH`, `rsETH`, `ezETH` and `wstETH` on the Aave V3 Prime instance - -## Motivation - -In [proposal 274](https://vote.onaave.com/proposal/?proposalId=274) a fist set of SVR feeds was enabled. -Over the recent weeks, the oracles were monitored and as expected no relevant deviations were monitored and SVR updates arrived in time. Therefore, in order to make integrating with SVR more attractive, this proposal aims to enable the next set of SVR feeds on ethereum mainnet. - -## Specification - -Given the new introduction of SVR feeds on the prime instance, this proposal will perform the activation through a dedicated instance of the previously introduced SVR_STEWARD steward. -The SVR_STEWARD, ensures there is minimal derivation between the current price feed and the svr price feed at activation. -Also the SVR_STEWARD allows for the Protocol guardian to revert to the previous oracle in case any unforeseen issue arises. - -- grant the "ASSET LISTING ADMIN" role to the [Prime SVR_STEWARD](https://etherscan.io/address/0x84f2C90f2D66E700baA4CF3cbF66bE7D8f21Bd87) -- call the `SVR_STEWARD.enableSvrOracles`, replacing the oracle of - - `eBTC`, `cbBTC` and `WBTC` on the Aave V3 Core instance - - `USDC`, `WETH`, `rsETH`, `ezETH` and `wstETH` on the Aave V3 Prime instance - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7dfaeee8e64d904f3350186e0e6159dccb944f41/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/7dfaeee8e64d904f3350186e0e6159dccb944f41/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7dfaeee8e64d904f3350186e0e6159dccb944f41/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.t.sol), [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/7dfaeee8e64d904f3350186e0e6159dccb944f41/src/20250429_Multi_ExtendSVRV1ToMoreReserves/AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.t.sol) -- [Discussion](https://governance.aave.com/t/direct-to-aip-aave-chainlink-svr-v1-activation-phase-2/21940) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves_20250429.s.sol b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves_20250429.s.sol deleted file mode 100644 index 25397d8bb..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves_20250429.s.sol +++ /dev/null @@ -1,68 +0,0 @@ -// 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_ExtendSVRV1ToMoreReserves_20250429} from './AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429.sol'; -import {AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429} from './AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves_20250429.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ExtendSVRV1ToMoreReserves_20250429.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](2); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves_20250429.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[](2); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_ExtendSVRV1ToMoreReserves_20250429).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3EthereumLido_ExtendSVRV1ToMoreReserves_20250429).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250429_Multi_ExtendSVRV1ToMoreReserves/ExtendSVRV1ToMoreReserves.md' - ) - ); - } -} diff --git a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/config.ts b/src/20250429_Multi_ExtendSVRV1ToMoreReserves/config.ts deleted file mode 100644 index b1139d364..000000000 --- a/src/20250429_Multi_ExtendSVRV1ToMoreReserves/config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'BGD Labs @bgdlabs', - pools: ['AaveV3Ethereum', 'AaveV3EthereumLido'], - title: 'Extend SVR V1 to more reserves', - shortName: 'ExtendSVRV1ToMoreReserves', - date: '20250429', - discussion: 'https://governance.aave.com/t/arfc-aave-chainlink-svr-v1-phase-1-activation/21247', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22374621}}, - AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 22374622}}, - }, -}; diff --git a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol b/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol deleted file mode 100644 index 82b23aef5..000000000 --- a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Onboard USDtb to Aave v3 Core Instance - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xf7ff963e0572d684bfd0c6d572a070d1b6ea60f4bcebbd6f68fc2af9c1e46659 - * - Discussion: https://governance.aave.com/t/arfc-onboard-usdtb-to-aave-v3-core-instance/21746 - */ -contract AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430 is AaveV3PayloadEthereum { - using SafeERC20 for IERC20; - - address public constant USDtb = 0xC139190F447e929f090Edeb554D95AbB8b18aC1C; - uint256 public constant USDtb_SEED_AMOUNT = 100e18; - address public constant USDtb_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(USDtb).forceApprove(address(AaveV3Ethereum.POOL), USDtb_SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(USDtb, USDtb_SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - address aUSDtb = AaveV3Ethereum.POOL.getReserveAToken(USDtb); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(USDtb, USDtb_LM_ADMIN); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aUSDtb, USDtb_LM_ADMIN); - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: USDtb, - assetSymbol: 'USDtb', - priceFeed: 0x2FA6A78E3d617c1013a22938411602dc9Da98dBa, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 0, - liqThreshold: 0, - liqBonus: 0, - reserveFactor: 10_00, - supplyCap: 50_000_000, - borrowCap: 40_000_000, - debtCeiling: 0, - liqProtocolFee: 0, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 80_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 6_00, - variableRateSlope2: 50_00 - }) - }); - - return listings; - } -} diff --git a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.t.sol b/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.t.sol deleted file mode 100644 index a5c2810cf..000000000 --- a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.t.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430} from './AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol'; - -/** - * @dev Test for AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430 - * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.t.sol -vv - */ -contract AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430_Test is ProtocolV3TestBase { - AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22416484); - proposal = new AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - /// forge-config: default.evm_version = 'cancun' - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_dustBinHasUSDtbFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.USDtb()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 100 * 10 ** 18); - } - - function test_USDtbAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aUSDtb = AaveV3Ethereum.POOL.getReserveAToken(proposal.USDtb()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.USDtb()), - proposal.USDtb_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aUSDtb), - proposal.USDtb_LM_ADMIN() - ); - } -} diff --git a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance.md b/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance.md deleted file mode 100644 index a1193e45b..000000000 --- a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Onboard USDtb to Aave v3 Core Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-onboard-usdtb-to-aave-v3-core-instance/21746" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xf7ff963e0572d684bfd0c6d572a070d1b6ea60f4bcebbd6f68fc2af9c1e46659" ---- - -## Simple Summary - -We propose to onboard USDtb to the v3 Core Instance with borrow enabled, collateral disabled. - -## Motivation - -USDtb is a digital dollar, otherwise known as a USD stablecoin. USDtb can be used the same way a holder would use any other dollar, whether to send and receive payments, acquire and trade assets, or to simply hold dollars. - -Unlike actual dollars, USDtb is a blockchain-based token, which enables faster and cheaper spending than the traditional fiat banking system. Unlike many digital assets, USDtb is fully backed by institutional-grade tokenized U.S. treasury fund products (alongside a stablecoin reserve designed to facilitate rapid redemptions) to support stability. Initially, USDtb will be backed by BlackRock’s USD Institutional Digital Liquidity Fund Token, BUIDL. - -By onboarding USDtb, deeper borrow liquidity will be generated to allow sUSDe leverage at an attractive borrow rate. We believe this will help revitalise and accelerate growth in sUSDe activity on the Core Instance. - -Backed by BUIDL issued by Blackrock, one of the largest asset managers in the world we believe this asset aligns well with Aave’s history of providing liquidity to the highest quality assets in DeFi and should attract significant deposits. - -## Specification - -The table below illustrates the configured risk parameters for **USDtb** - -| Parameter | Value | -| ------------------------- | -----------------------------------------: | -| Isolation Mode | false | -| Borrowable | ENABLED | -| Collateral Enabled | true | -| Supply Cap (USDtb) | 50,000,000 | -| Borrow Cap (USDtb) | 40,000,000 | -| Debt Ceiling | USD 0 | -| LTV | 0 % | -| LT | 0 % | -| Liquidation Bonus | 0 % | -| Liquidation Protocol Fee | 0 % | -| Reserve Factor | 10 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 6 % | -| Variable Slope 2 | 50 % | -| Uoptimal | 80 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | 0x2FA6A78E3d617c1013a22938411602dc9Da98dBa | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for USDtb and the corresponding aToken. - -### CAPO feed - -| Parameter | Value | -| ------------------------------ | -----------------------------------------------------------------------------------------------: | -| Contract | [Capped USDtb / USD](https://etherscan.io/address/0x2fa6a78e3d617c1013a22938411602dc9da98dba) | -| Underlying Oracle | [Chainlink USDtb / USD](https://etherscan.io/address/0x66704DAD467A7cA508B3be15865D9B9F3E186c90) | -| OracleLatestAnswer (05 may 25) | USD 0.99983211 | -| Capped Price | USD 1.04 | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4f77f232f2bed02e5c0ed869cec911dbdd76f8be/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4f77f232f2bed02e5c0ed869cec911dbdd76f8be/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xf7ff963e0572d684bfd0c6d572a070d1b6ea60f4bcebbd6f68fc2af9c1e46659) -- [Discussion](https://governance.aave.com/t/arfc-onboard-usdtb-to-aave-v3-core-instance/21746) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance_20250430.s.sol b/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance_20250430.s.sol deleted file mode 100644 index bc59c0ab9..000000000 --- a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance_20250430.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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_OnboardUSDtbToAaveV3CoreInstance_20250430} from './AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance_20250430.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardUSDtbToAaveV3CoreInstance_20250430.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance_20250430).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/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance_20250430.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_OnboardUSDtbToAaveV3CoreInstance_20250430).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/OnboardUSDtbToAaveV3CoreInstance.md' - ) - ); - } -} diff --git a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/config.ts b/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/config.ts deleted file mode 100644 index b4ff3e7b9..000000000 --- a/src/20250430_AaveV3Ethereum_OnboardUSDtbToAaveV3CoreInstance/config.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3Ethereum'], - title: 'Onboard USDtb to Aave v3 Core Instance', - shortName: 'OnboardUSDtbToAaveV3CoreInstance', - date: '20250430', - discussion: 'https://governance.aave.com/t/arfc-onboard-usdtb-to-aave-v3-core-instance/21746', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xf7ff963e0572d684bfd0c6d572a070d1b6ea60f4bcebbd6f68fc2af9c1e46659', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - ASSET_LISTING: [ - { - assetSymbol: 'USDtb', - decimals: 18, - priceFeed: '0x2FA6A78E3d617c1013a22938411602dc9Da98dBa', - ltv: '0', - liqThreshold: '0', - liqBonus: '0', - debtCeiling: '0', - liqProtocolFee: '0', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '50000000', - borrowCap: '40000000', - rateStrategyParams: { - optimalUtilizationRate: '80', - baseVariableBorrowRate: '0', - variableRateSlope1: '6', - variableRateSlope2: '50', - }, - asset: '0xC139190F447e929f090Edeb554D95AbB8b18aC1C', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 22384430}, - }, - }, -}; diff --git a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol b/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol deleted file mode 100644 index 150708cf7..000000000 --- a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Remove USDe Debt Ceiling and Introduce USDe Stablecoins E-mode - * @author Aave-Chan Initiative - * - Snapshot: Direct-To-AIP - * - Discussion: https://governance.aave.com/t/arfc-remove-usde-debt-ceiling-and-introduce-usde-stablecoins-e-mode/21876 - */ -contract AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505 is - AaveV3PayloadEthereum -{ - function collateralsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) - { - IAaveV3ConfigEngine.CollateralUpdate[] - memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); - - collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - ltv: EngineFlags.KEEP_CURRENT, - liqThreshold: EngineFlags.KEEP_CURRENT, - liqBonus: EngineFlags.KEEP_CURRENT, - debtCeiling: 0, - liqProtocolFee: EngineFlags.KEEP_CURRENT - }); - - return collateralUpdate; - } - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 11, - ltv: 90_00, - liqThreshold: 93_00, - liqBonus: 2_00, - label: 'USDe Stablecoin' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](4); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 11, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 11, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - eModeCategory: 11, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 11, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.t.sol b/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.t.sol deleted file mode 100644 index 7afa1628b..000000000 --- a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505} from './AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol'; - -/** - * @dev Test for AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.t.sol -vv - */ -contract AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505_Test is - ProtocolV3TestBase -{ - AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22416856); - proposal = new AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode.md b/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode.md deleted file mode 100644 index 1f7747c9a..000000000 --- a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: " Remove USDe Debt Ceiling and Introduce USDe Stablecoins E-mode" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-remove-usde-debt-ceiling-and-introduce-usde-stablecoins-e-mode/21876" ---- - -## Simple Summary - -Given the significant demand for USDe and its safe usage profile on Aave V3’s Ethereum Core deployment, Chaos Labs recommends removing the asset’s debt ceiling and introducing a new E-Mode configuration tailored to its current primary use case. - -## Motivation - -The proposal to lift the debt ceiling on USDe stems from its growing user demand and consistently strong risk profile. USDe’s appeal has been further amplified by the recent decline in the underlying yield of sUSDe, making the unstaked version (USDe) more attractive due to its deliberately enhanced points-earning potential in an effort to shift the incentive structure in accordance with aggregate revenue generation, earning 25x points as opposed to sUSDe’s 5x. - -Over the past 30 days, the total supply of USDe has surged to 410M, led by two primary whitelisted USDe redemption addresses leveraging the reserve, periodically performing redemptions. However, its growth on Aave has been relatively capped at $86.4M due to the limitations imposed by the debt ceiling and its steward-governed constraints. - -Conversely, due to dwindling yields, the sUSDe market has seen considerable outflows from Aave over the last 90 days, decreasing from nearly 1B to 175M today, with $135M in collateralized stablecoin debt. - -Furthermore, USDe offers a lower risk profile compared to its staked counterpart, sUSDe, primarily due to the absence of the 7-day unstaking period as well as the use of an aggregate oracle that incorporates an exchange rate introduced through staking. This unstaking delay introduces liquidity constraints and potential exposure to short-term price volatility for sUSDe holders. - -The initial implementation of a debt ceiling was intended as a protective measure to limit systemic exposure during the initial adoption period. However, historical data and recent [analyses](https://governance.aave.com/t/chaos-labs-update-on-bybit-security-event-and-usde-market-reaction/21158), including extensive stress tests and active redemption patterns, have shown robust stabilization mechanisms inherent to USDe, which effectively mitigate potential risks associated with price deviations. By eliminating the debt ceiling, Aave can better accommodate growing market demand and with the introduction of a custom E-Mode, provide users with greater flexibility to leverage USDe efficiently. - -The recommended parameters for the USDe/Stablecoin E-Mode are slightly more aggressive than those for sUSDe/Stablecoin E-Mode, reflecting the lower risk profile. - -## Specification - -USDe on Aave V3 Ethereum Core - -| Parameter | Current Value | Recommended Value | -| -------------- | ------------- | ----------------- | -| Isolation-mode | Yes | No | -| Debt Ceiling | 103,680,000 | - | - -USDe/Stablecoin E-Mode - -| Asset | USDe | USDC | USDT | USDS | -| ----------------- | ---- | ---- | ---- | ---- | -| Collateral | Yes | No | No | No | -| Borrowable | No | Yes | Yes | Yes | -| LTV | 90% | | | | -| LT | 93% | | | | -| Liquidation Bonus | 2% | | | | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5013a4eb986252fb975a44a7841ccc490dbf7bb9/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5013a4eb986252fb975a44a7841ccc490dbf7bb9/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-remove-usde-debt-ceiling-and-introduce-usde-stablecoins-e-mode/21876) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.s.sol b/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.s.sol deleted file mode 100644 index 78bf2a083..000000000 --- a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.s.sol +++ /dev/null @@ -1,62 +0,0 @@ -// 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_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505} from './AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505) - .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/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505.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_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode_20250505) - .creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode.md' - ) - ); - } -} diff --git a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/config.ts b/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/config.ts deleted file mode 100644 index 5bbfe03f8..000000000 --- a/src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/config.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: - 'src/20250505_AaveV3Ethereum_RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode/config.ts', - author: 'Aave-Chan Initiative', - pools: ['AaveV3Ethereum'], - title: ' Remove USDe Debt Ceiling and Introduce USDe Stablecoins E-mode', - shortName: 'RemoveUSDeDebtCeilingAndIntroduceUSDeStablecoinsEMode', - date: '20250505', - discussion: - 'https://governance.aave.com/t/arfc-remove-usde-debt-ceiling-and-introduce-usde-stablecoins-e-mode/21876', - snapshot: 'Direct-To-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - COLLATERALS_UPDATE: [ - { - asset: 'USDe', - ltv: '', - liqThreshold: '', - liqBonus: '', - debtCeiling: '0', - liqProtocolFee: '', - }, - ], - EMODES_UPDATES: [ - { - eModeCategory: 11, - ltv: '90', - liqThreshold: '93', - liqBonus: '2', - label: 'USDe Stablecoin', - }, - ], - EMODES_ASSETS: [ - {asset: 'USDC', eModeCategory: '11', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDT', eModeCategory: '11', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDe', eModeCategory: '11', collateral: 'ENABLED', borrowable: 'DISABLED'}, - {asset: 'USDS', eModeCategory: '11', collateral: 'DISABLED', borrowable: 'ENABLED'}, - ], - }, - cache: {blockNumber: 22416856}, - }, - }, -}; diff --git a/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.sol b/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.sol deleted file mode 100644 index 00cbe6909..000000000 --- a/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title stkGHO Emissions - * @author @TokenLogic - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/18 - */ -contract AaveV3Ethereum_StkGHOEmissions_20250505 is IProposalGenericExecutor { - uint256 public constant DISTRIBUTION_DURATION = 180 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_STK_GHO = uint128(100 ether) / 1 days; - - function execute() external { - uint256 remainingAllowance = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - address(MiscEthereum.ECOSYSTEM_RESERVE), - AaveSafetyModule.STK_GHO - ); - - uint256 newAllowance = DISTRIBUTION_DURATION * - AAVE_EMISSION_PER_SECOND_STK_GHO + - remainingAllowance; - - IStakeToken.AssetConfigInput[] memory config = new IStakeToken.AssetConfigInput[](1); - config[0] = IStakeToken.AssetConfigInput({ - emissionPerSecond: AAVE_EMISSION_PER_SECOND_STK_GHO, - totalStaked: 0, // it's overwritten internally - underlyingAsset: AaveSafetyModule.STK_GHO - }); - IStakeToken(AaveSafetyModule.STK_GHO).configureAssets(config); - - IStakeToken(AaveSafetyModule.STK_GHO).setDistributionEnd( - block.timestamp + DISTRIBUTION_DURATION - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_GHO, - 0 - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_GHO, - newAllowance - ); - } -} diff --git a/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.t.sol b/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.t.sol deleted file mode 100644 index c4b3ef7cf..000000000 --- a/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.t.sol +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; - -import {AaveV3Ethereum_StkGHOEmissions_20250505} from './AaveV3Ethereum_StkGHOEmissions_20250505.sol'; - -/** - * @dev Test for AaveV3Ethereum_StkGHOEmissions_20250505 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.t.sol -vv - */ -contract AaveV3Ethereum_StkGHOEmissions_20250505_Test is ProtocolV3TestBase { - AaveV3Ethereum_StkGHOEmissions_20250505 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22420134); - proposal = new AaveV3Ethereum_StkGHOEmissions_20250505(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_StkGHOEmissions_20250505', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_checkConfig() public { - (uint128 emissionPerSecondBeforestkGHO, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets( - AaveSafetyModule.STK_GHO - ); - - assertEq( - emissionPerSecondBeforestkGHO, - proposal.AAVE_EMISSION_PER_SECOND_STK_GHO(), - 'emissions before not equal stkGHO' - ); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterstkGHO, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets( - AaveSafetyModule.STK_GHO - ); - - assertEq( - emissionPerSecondAfterstkGHO, - proposal.AAVE_EMISSION_PER_SECOND_STK_GHO(), - 'emissions after not equal stkGHO' - ); - assertApproxEqAbs( - emissionPerSecondAfterstkGHO, - emissionPerSecondBeforestkGHO, - 1, - 'stkGHO emissions not same as previous' - ); - } - - function test_checkDistributionEnd() public { - uint256 endTimestampBefore = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd(); - - assertLt( - endTimestampBefore, - block.timestamp + proposal.DISTRIBUTION_DURATION(), - 'New distribution duration is lower than previously configured' - ); - - executePayload(vm, address(proposal)); - - uint256 endTimestampAfter = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd(); - - assertEq( - endTimestampAfter, - block.timestamp + proposal.DISTRIBUTION_DURATION(), - 'New distribution duration has not been set correctly' - ); - } - - function test_checkAllowance() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_GHO - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_GHO - ); - - assertGt(allowanceAfter, allowanceBefore); - // With previous remaining allowance, this can be greater than or equal to - assertGe( - allowanceAfter, - proposal.DISTRIBUTION_DURATION() * proposal.AAVE_EMISSION_PER_SECOND_STK_GHO() - ); - } - - function test_checkRewards_stkGHO() public { - address stakedToken = AaveV3EthereumAssets.GHO_UNDERLYING; - address staker = 0xDD62115f601dAeBCCfDd2aEED834513D8DC2F4E2; - uint256 rewardsPerDay = 100 ether; - - executePayload(vm, address(proposal)); - - vm.startPrank(staker); - IERC20(stakedToken).approve(AaveSafetyModule.STK_GHO, 1 ether); - IERC20(stakedToken).balanceOf(staker); - IStakeToken(AaveSafetyModule.STK_GHO).stake(staker, 1 ether); - vm.stopPrank(); - - vm.warp(block.timestamp + 1 days); - - uint256 rewardsBalance = IStakeToken(AaveSafetyModule.STK_GHO).getTotalRewardsBalance(staker); - - assertTrue(rewardsBalance > 0 && rewardsBalance <= rewardsPerDay); - - vm.stopPrank(); - } -} diff --git a/src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions.md b/src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions.md deleted file mode 100644 index ba32c84d1..000000000 --- a/src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "stkGHO Emissions" -author: "@TokenLogic" -discussions: https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/18 -snapshot: Direct-to-AIP ---- - -## Simple Summary - -Re-enable stkGHO incentives emissions for 180 days after previous period ended. - -## Motivation - -To support the GHO peg and to pave the way for future GHO supply expansion, this publication proposes maintaining the daily AAVE emission going to stkGHO holders. - -## Specification - -- Set new allowance to 100 AAVE per day for 180 days -- Include prior remaining allowance -- Set distribution end for 180 days from execution date - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c8180be42db546bc6b11dfddd6fa48f649c6a3df/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c8180be42db546bc6b11dfddd6fa48f649c6a3df/src/20250505_AaveV3Ethereum_StkGHOEmissions/AaveV3Ethereum_StkGHOEmissions_20250505.t.sol) - [Snapshot](Direct-to-AIP) -- [Discussion](https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/18) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250505_AaveV3Ethereum_StkGHOEmissions/config.ts b/src/20250505_AaveV3Ethereum_StkGHOEmissions/config.ts deleted file mode 100644 index cc2ab29ca..000000000 --- a/src/20250505_AaveV3Ethereum_StkGHOEmissions/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'stkGHO Emissions', - shortName: 'StkGHOEmissions', - date: '20250505', - author: '@TokenLogic', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22420134}}}, -}; diff --git a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation.md b/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation.md deleted file mode 100644 index d2b73f2a4..000000000 --- a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Soneium aDI path activation" -author: "BGD Labs @bgdlabs" -discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/83" ---- - -## Simple Summary - -Proposal to register the necessary Soneium adapters on a.DI, a technical pre-requirement for an activation vote of Aave v3 Soneium. - -## Motivation - -In order to be able to pass messages from Ethereum to Soneium via a.DI (Aave Delivery Infrastructure), it is necessary to at least have one valid adapter Ethereum → Soneium smart contract enabled in the system (native adapter). - -The first case of message passing Ethereum → Soneium is the activation proposal for an Aave v3 Soneium pool and consequently, to be able to execute on the Soneium side the payload, the Aave governance should approve in advance the a.DI adapters smart contracts. - -This procedure mirrors the requirements on previous networks like ZkSync or Linea. - -## Specification - -The proposal payload simply registers pre-deployed Soneium adapters (with the necessary configurations to communicate with the Soneium a.DI) on the Ethereum a.DI instance. - -This is done by calling the enableBridgeAdapters() function on the Ethereum Cross-chain Controller smart contract. - -The following are the configured adapters for the Ethereum → Soneium path. The required confirmations on the path are 1 out of 1. - -| Network | Soneium Native Adapter | -| -------- | ------------------------------------------------------------------------------------------------------------------------------- | -| Ethereum | [0xe66973c4571F733CafEb1BDE1fa58Ff35416d901](https://etherscan.io/address/0xe66973c4571F733CafEb1BDE1fa58Ff35416d901) | -| Soneium | [0x5698e43Ef1be85C68Dec568B5925dD5DB7903e39](https://soneium.blockscout.com/address/0x5698e43Ef1be85C68Dec568B5925dD5DB7903e39) | - -The new a.DI deployments on Soneium network are as follows: - -| Contract | Address | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| CrossChainController | [0xD92b37a5114b33F668D274Fb48f23b726a854d6E](https://soneium.blockscout.com/address/0xD92b37a5114b33F668D274Fb48f23b726a854d6E) | -| Granular Guardian | [0xD8E6956718784B914740267b7A50B952fb516656](https://soneium.blockscout.com/address/0xD8E6956718784B914740267b7A50B952fb516656) | - -The new Aave Governance deployments on Soneium network are as follows: - -| Contract | Address | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| PayloadsController | [0x44D73D7C4b2f98F426Bf8B5e87628d9eE38ef0Cf](https://soneium.blockscout.com/address/0x44D73D7C4b2f98F426Bf8B5e87628d9eE38ef0Cf) | -| Executor Lvl 1 | [0x47aAdaAE1F05C978E6aBb7568d11B7F6e0FC4d6A](https://soneium.blockscout.com/address/0x47aAdaAE1F05C978E6aBb7568d11B7F6e0FC4d6A) | -| Governance Guardian | [0x19CE4363FEA478Aa04B9EA2937cc5A2cbcD44be6](https://soneium.blockscout.com/address/0x19CE4363FEA478Aa04B9EA2937cc5A2cbcD44be6) | -| BGD Labs Guardian | [0xdc62E0e65b2251Dc66404ca717FD32dcC365Be3A](https://soneium.blockscout.com/address/0xdc62E0e65b2251Dc66404ca717FD32dcC365Be3A) | - -## References - -- Adapter Implementations: [Soneium Native Adapters](https://github.com/bgd-labs/aave-delivery-infrastructure/blob/4509fff1467c02488296a47f617afaafd82d1454/src/contracts/adapters/soneium/soneiumAdapter.sol) -- Payload Implementation: [Payload](https://github.com/bgd-labs/adi-deploy/blob/be5cbd5c5daf24b07ff9f4906ad69cef129838c4/scripts/payloads/adapters/ethereum/Ethereum_Activate_Soneium_Bridge_Adapter_Payload.s.sol) -- Payload Tests: [tests](https://github.com/bgd-labs/adi-deploy/blob/be5cbd5c5daf24b07ff9f4906ad69cef129838c4/tests/payloads/ethereum/AddSoneiumPathTest.t.sol) -- Diffs: [a.DI diffs](https://github.com/bgd-labs/adi-deploy/blob/be5cbd5c5daf24b07ff9f4906ad69cef129838c4/diffs/adi_add_soneium_path_to_adiethereum_before_adi_add_soneium_path_to_adiethereum_after.md) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/83) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation_20250506.s.sol b/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation_20250506.s.sol deleted file mode 100644 index 7e95fed37..000000000 --- a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation_20250506.s.sol +++ /dev/null @@ -1,55 +0,0 @@ -// 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'; - -address constant PAYLOAD = 0xD934A9034C95f9c31e1D6077DFed49B0F4d36FC3; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation_20250506.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/SoneiumADIPathActivation_20250506.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(PAYLOAD); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation_20250506.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(PAYLOAD); - - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/SoneiumADIPathActivation.md' - ) - ); - } -} diff --git a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol b/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol deleted file mode 100644 index ca6950f6f..000000000 --- a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {ChainlinkBase} from 'aave-address-book/ChainlinkBase.sol'; -import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Add AAVE token to Aave V3 Base Instance - * @author Aave-Chan Initiative - * - Snapshot: snapshot.box/#/s:aavedao.eth/proposal/0x54efdfaaccf429320071c7e56dd8f14759f2027c8f1c1fb4ef0596374c7558d8 - * - Discussion: https://governance.aave.com/t/arfc-add-aave-token-to-aave-v3-base-instance/21105 - */ -contract AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507 is AaveV3PayloadBase { - using SafeERC20 for IERC20; - - address public constant AAVE = 0x63706e401c06ac8513145b7687A14804d17f814b; - uint256 public constant AAVE_SEED_AMOUNT = 0.65e18; - address public constant AAVE_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(AAVE).forceApprove(address(AaveV3Base.POOL), AAVE_SEED_AMOUNT); - AaveV3Base.POOL.supply(AAVE, AAVE_SEED_AMOUNT, AaveV3Base.DUST_BIN, 0); - - address aAAVE = AaveV3Base.POOL.getReserveAToken(AAVE); - IEmissionManager(AaveV3Base.EMISSION_MANAGER).setEmissionAdmin(AAVE, AAVE_LM_ADMIN); - IEmissionManager(AaveV3Base.EMISSION_MANAGER).setEmissionAdmin(aAAVE, AAVE_LM_ADMIN); - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: AAVE, - assetSymbol: 'AAVE', - priceFeed: ChainlinkBase.AAVE_USD, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 60_00, - liqThreshold: 65_00, - liqBonus: 10_00, - reserveFactor: 20_00, - supplyCap: 30_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.t.sol b/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.t.sol deleted file mode 100644 index ddb5900d5..000000000 --- a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507} from './AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol'; - -/** - * @dev Test for AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.t.sol -vv - */ -contract AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507_Test is ProtocolV3TestBase { - AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 29923469); - proposal = new AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507', - AaveV3Base.POOL, - address(proposal) - ); - } - - function test_dustBinHasAAVEFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Base.POOL.getReserveAToken(proposal.AAVE()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Base.DUST_BIN)), 65 * 10 ** 16); - } - - function test_AAVEAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aAAVE = AaveV3Base.POOL.getReserveAToken(proposal.AAVE()); - assertEq( - IEmissionManager(AaveV3Base.EMISSION_MANAGER).getEmissionAdmin(proposal.AAVE()), - proposal.AAVE_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Base.EMISSION_MANAGER).getEmissionAdmin(aAAVE), - proposal.AAVE_LM_ADMIN() - ); - } -} diff --git a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance.md b/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance.md deleted file mode 100644 index 041b6da2d..000000000 --- a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "Add AAVE token to Aave V3 Base Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-add-aave-token-to-aave-v3-base-instance/21105" -snapshot: "snapshot.box/#/s:aavedao.eth/proposal/0x54efdfaaccf429320071c7e56dd8f14759f2027c8f1c1fb4ef0596374c7558d8" ---- - -## Simple Summary - -This publication presents the community an opportunity to expand AAVE governance token integration on the AAVE platform by adding AAVE collateral option to Base. - -AAVE token has wide integrations into all other major AAVE instances including ETH Mainnet, Arbitrum, Optimism, Polygon, and Avalanche. Adding AAVE to the Base instance is the next logical step in AAVE token integration within the AAVE lending platform. - -## Motivation - -- AAVE token is a versatile governance token which is already accepted collateral on all major AAVE instances. -- The Base Market is growing in TVL, the addition of collateral options already found on other AAVE instances will increase Base Market growth. -- There is deep liquidity on Base chain for the AAVE token already. Price impact of just **0.77%** for $1m ETH/AAVE trades using jumper.exchange on Base. -- Aerodrome (Base DEX) has $10m TVL in WETH/AAVE concentrated liquidity. - -Base has seen expansion in its TVL now surpassing Arbitrum by ~15%. Base chain is a small but significant part of total Defi TVL (all chains) of 3%. -Source: https://defillama.com/chains - -## Specification - -The table below illustrates the configured risk parameters for **AAVE** - -| Parameter | Value | -| ------------------------- | --------------------------------------------------------------------------------------------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (AAVE) | 30,000 | -| Borrow Cap (AAVE) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 60 % | -| LT | 65 % | -| Liquidation Bonus | 10 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 20 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | [Chainlink AAVE/USD](https://basescan.org/address/0x3d6774EF702A10b20FCa8Ed40FC022f7E4938e07) | -| Oracle Latest Answer | (2025-05-07) USD 169.65627000 | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://basescan.org/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for AAVE and the corresponding aToken. - -## References - -- Implementation: [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/d469f07acb3dbec77ecfe0a9ac6d03d819b5ab43/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol) -- Tests: [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/d469f07acb3dbec77ecfe0a9ac6d03d819b5ab43/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.t.sol) -- [Snapshot](snapshot.box/#/s:aavedao.eth/proposal/0x54efdfaaccf429320071c7e56dd8f14759f2027c8f1c1fb4ef0596374c7558d8) -- [Discussion](https://governance.aave.com/t/arfc-add-aave-token-to-aave-v3-base-instance/21105) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance_20250507.s.sol b/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance_20250507.s.sol deleted file mode 100644 index 32a914cee..000000000 --- a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance_20250507.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507} from './AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507.sol'; - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance_20250507.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AddAAVETokenToAaveV3BaseInstance_20250507.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507).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/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance_20250507.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 actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_AddAAVETokenToAaveV3BaseInstance_20250507).creationCode - ); - payloads[0] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/AddAAVETokenToAaveV3BaseInstance.md' - ) - ); - } -} diff --git a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/config.ts b/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/config.ts deleted file mode 100644 index da237003f..000000000 --- a/src/20250507_AaveV3Base_AddAAVETokenToAaveV3BaseInstance/config.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3Base'], - title: 'Add AAVE token to Aave V3 Base Instance', - shortName: 'AddAAVETokenToAaveV3BaseInstance', - date: '20250507', - discussion: 'https://governance.aave.com/t/arfc-add-aave-token-to-aave-v3-base-instance/21105', - snapshot: - 'snapshot.box/#/s:aavedao.eth/proposal/0x54efdfaaccf429320071c7e56dd8f14759f2027c8f1c1fb4ef0596374c7558d8', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Base: { - configs: { - ASSET_LISTING: [ - { - assetSymbol: 'AAVE', - decimals: 18, - priceFeed: '0x3d6774EF702A10b20FCa8Ed40FC022f7E4938e07', - ltv: '60', - liqThreshold: '65', - liqBonus: '10', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '20', - supplyCap: '30000', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0x63706e401c06ac8513145b7687A14804d17f814b', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 29923469}, - }, - }, -}; diff --git a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol b/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol deleted file mode 100644 index f2ba49d81..000000000 --- a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Celo} from 'aave-address-book/AaveV3Celo.sol'; -import {ChainlinkCelo} from 'aave-address-book/ChainlinkCelo.sol'; -import {AaveV3PayloadCelo} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadCelo.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Onboarding wETH to Aave V3 Celo Instance - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xcf4e56350b6dc4615f4206a02d41c8f5958bc9a71594bed975e2657c9bc0b9b8 - * - Discussion: https://governance.aave.com/t/arfc-onboarding-weth-to-aave-v3-celo-instance/21750 - */ -contract AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515 is AaveV3PayloadCelo { - using SafeERC20 for IERC20; - - address public constant WETH = 0xD221812de1BD094f35587EE8E174B07B6167D9Af; - uint256 public constant WETH_SEED_AMOUNT = 5e16; - address public constant WETH_LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - function _postExecute() internal override { - IERC20(WETH).forceApprove(address(AaveV3Celo.POOL), WETH_SEED_AMOUNT); - AaveV3Celo.POOL.supply(WETH, WETH_SEED_AMOUNT, AaveV3Celo.DUST_BIN, 0); - - address aWETH = AaveV3Celo.POOL.getReserveAToken(WETH); - IEmissionManager(AaveV3Celo.EMISSION_MANAGER).setEmissionAdmin(WETH, WETH_LM_ADMIN); - IEmissionManager(AaveV3Celo.EMISSION_MANAGER).setEmissionAdmin(aWETH, WETH_LM_ADMIN); - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: WETH, - assetSymbol: 'WETH', - priceFeed: ChainlinkCelo.ETH_USD, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 78_00, - liqThreshold: 80_00, - liqBonus: 7_50, - reserveFactor: 15_00, - supplyCap: 500, - borrowCap: 450, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 90_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 2_70, - variableRateSlope2: 80_00 - }) - }); - - return listings; - } -} diff --git a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.t.sol b/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.t.sol deleted file mode 100644 index 953deb8e6..000000000 --- a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.t.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Celo} from 'aave-address-book/AaveV3Celo.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515} from './AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol'; - -/** - * @dev Test for AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.t.sol -vv - */ -contract AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515_Test is ProtocolV3TestBase { - AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('celo'), 35741475); - proposal = new AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515', - AaveV3Celo.POOL, - address(proposal) - ); - } - - function test_dustBinHasWETHFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Celo.POOL.getReserveAToken(proposal.WETH()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Celo.DUST_BIN)), 5 * 10 ** 16); - } - - function test_WETHAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aWETH = AaveV3Celo.POOL.getReserveAToken(proposal.WETH()); - assertEq( - IEmissionManager(AaveV3Celo.EMISSION_MANAGER).getEmissionAdmin(proposal.WETH()), - proposal.WETH_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Celo.EMISSION_MANAGER).getEmissionAdmin(aWETH), - proposal.WETH_LM_ADMIN() - ); - } -} diff --git a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance.md b/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance.md deleted file mode 100644 index 300cd3086..000000000 --- a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: " Onboarding wETH to Aave V3 Celo Instance" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-onboarding-weth-to-aave-v3-celo-instance/21750" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xcf4e56350b6dc4615f4206a02d41c8f5958bc9a71594bed975e2657c9bc0b9b8" ---- - -## Simple Summary - -This AIP proposes the onboarding of Wrapped Ether (wETH) as a supported asset on the Aave V3 Celo Instance. The integration aims to expand the protocol’s utility and provide users with additional opportunities for lending and borrowing. - -## Motivation - -The addition of wETH to Aave V3 on Celo would: - -- Increase TVL and protocol revenue -- Provide users with a major DeFi asset for lending/borrowing -- Enable cross-chain strategies involving ETH -- Enhance the protocol’s competitive position in the Celo ecosystem - -## Specification - -The table below illustrates the configured risk parameters for **WETH** - -| Parameter | Value | -| ------------------------- | ------------------------------------------------------------------------------------------: | -| Isolation Mode | false | -| Borrowable | ENABLED | -| Collateral Enabled | true | -| Supply Cap (WETH) | 500 | -| Borrow Cap (WETH) | 450 | -| Debt Ceiling | USD 0 | -| LTV | 78 % | -| LT | 80 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 15 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 2.7 % | -| Variable Slope 2 | 80 % | -| Uoptimal | 90 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | -| Oracle | [Chainlink ETH/USD](https://celoscan.io/address/0x1FcD30A73D67639c1cD89ff5746E7585731c083B) | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://celoscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for WETH and the corresponding aToken. - -## References - -- Implementation: [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/c0799d67effe7821ec97fefc8d61ffb703280eba/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol) -- Tests: [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/c0799d67effe7821ec97fefc8d61ffb703280eba/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xcf4e56350b6dc4615f4206a02d41c8f5958bc9a71594bed975e2657c9bc0b9b8) -- [Discussion](https://governance.aave.com/t/arfc-onboarding-weth-to-aave-v3-celo-instance/21750) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance_20250515.s.sol b/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance_20250515.s.sol deleted file mode 100644 index 8eccd0232..000000000 --- a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance_20250515.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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, CeloScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515} from './AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515.sol'; - -/** - * @dev Deploy Celo - * deploy-command: make deploy-ledger contract=src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance_20250515.s.sol:DeployCelo chain=celo - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/OnboardingWETHToAaveV3CeloInstance_20250515.s.sol/42220/run-latest.json - */ -contract DeployCelo is CeloScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515).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/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance_20250515.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 actionsCelo = new IPayloadsControllerCore.ExecutionAction[](1); - actionsCelo[0] = GovV3Helpers.buildAction( - type(AaveV3Celo_OnboardingWETHToAaveV3CeloInstance_20250515).creationCode - ); - payloads[0] = GovV3Helpers.buildCeloPayload(vm, actionsCelo); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/OnboardingWETHToAaveV3CeloInstance.md' - ) - ); - } -} diff --git a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/config.ts b/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/config.ts deleted file mode 100644 index 32fc9b4c0..000000000 --- a/src/20250515_AaveV3Celo_OnboardingWETHToAaveV3CeloInstance/config.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'Aave-Chan Initiative', - pools: ['AaveV3Celo'], - title: ' Onboarding wETH to Aave V3 Celo Instance', - shortName: 'OnboardingWETHToAaveV3CeloInstance', - date: '20250515', - discussion: 'https://governance.aave.com/t/arfc-onboarding-weth-to-aave-v3-celo-instance/21750', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xcf4e56350b6dc4615f4206a02d41c8f5958bc9a71594bed975e2657c9bc0b9b8', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Celo: { - configs: { - ASSET_LISTING: [ - { - assetSymbol: 'WETH', - decimals: 18, - priceFeed: '0x1FcD30A73D67639c1cD89ff5746E7585731c083B', - ltv: '78', - liqThreshold: '80', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'ENABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '15', - supplyCap: '500', - borrowCap: '450', - rateStrategyParams: { - optimalUtilizationRate: '90', - baseVariableBorrowRate: '0', - variableRateSlope1: '2.7', - variableRateSlope2: '80', - }, - asset: '0xD221812de1BD094f35587EE8E174B07B6167D9Af', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 35444298}, - }, - }, -}; diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.sol deleted file mode 100644 index 5daa2074c..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol'; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; - -import {IAaveCLRobotOperator} from '../interfaces/IAaveCLRobotOperator.sol'; - -/** - * @title UmbrellaActivation - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596 - * - Discussion: https://governance.aave.com/t/arfc-aave-umbrella-activation/21521 - * @notice This payload registers and activates `SlashingRobot` and `UmbrellaPPCRobot`. - */ -contract AaveV3Ethereum_RobotActivation_20250515 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - using SafeERC20 for IERC20; - using SafeCast for uint256; - - address public constant UMBRELLA_PPC_ROBOT = 0x4a672f57D724e310d7d0c7b64fd9D734832FD3E9; - address public constant SLASHING_ROBOT = 0x4216d695070ce243e48A3bB0646CaA4DDB81B957; - - uint96 public constant SLASHING_ROBOT_LINK_AMOUNT = 200 * 1e18; - uint96 public constant UMBRELLA_PPC_ROBOT_LINK_AMOUNT = 200 * 1e18; - - function execute() external { - AaveV3Ethereum.COLLECTOR.withdrawFromV3( - CollectorUtils.IOInput({ - pool: address(AaveV3Ethereum.POOL), - underlying: AaveV3EthereumAssets.LINK_UNDERLYING, - amount: SLASHING_ROBOT_LINK_AMOUNT + UMBRELLA_PPC_ROBOT_LINK_AMOUNT - }), - address(this) - ); - uint96 linkBalance = IERC20(AaveV3EthereumAssets.LINK_UNDERLYING) - .balanceOf(address(this)) - .toUint96(); - IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).forceApprove( - MiscEthereum.AAVE_CL_ROBOT_OPERATOR, - linkBalance - ); - - IAaveCLRobotOperator(MiscEthereum.AAVE_CL_ROBOT_OPERATOR).register( - 'Slashing robot', - SLASHING_ROBOT, - '', // check data - 5_000_000, // gas limit - SLASHING_ROBOT_LINK_AMOUNT, - 0, - '' - ); - IAaveCLRobotOperator(MiscEthereum.AAVE_CL_ROBOT_OPERATOR).register( - 'Umbrella PermissionedPayloadsController robot', - UMBRELLA_PPC_ROBOT, - '', // check data - 5_000_000, // gas limit - linkBalance - SLASHING_ROBOT_LINK_AMOUNT, - 0, - '' - ); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.t.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.t.sol deleted file mode 100644 index eba0bc36d..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.t.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum, AaveV3Ethereum_RobotActivation_20250515, IAaveCLRobotOperator} from './AaveV3Ethereum_RobotActivation_20250515.sol'; - -/** - * @dev Test for AaveV3Ethereum_UmbrellaActivation_20250515 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.t.sol -vv - */ -contract AaveV3Ethereum_RobotActivation_20250515_Test is ProtocolV3TestBase { - AaveV3Ethereum_RobotActivation_20250515 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22581600); - proposal = new AaveV3Ethereum_RobotActivation_20250515(); - } - - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_RobotActivation_20250515', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_newRobotsRegistered() public { - vm.expectEmit(false, true, true, true); - emit IAaveCLRobotOperator.KeeperRegistered( - uint256(0), - proposal.SLASHING_ROBOT(), - proposal.SLASHING_ROBOT_LINK_AMOUNT() - ); - - vm.expectEmit(false, true, true, true); - emit IAaveCLRobotOperator.KeeperRegistered( - uint256(0), - proposal.UMBRELLA_PPC_ROBOT(), - proposal.UMBRELLA_PPC_ROBOT_LINK_AMOUNT() - ); - - executePayload(vm, address(proposal)); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.sol deleted file mode 100644 index 5cb8ce91d..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.sol +++ /dev/null @@ -1,113 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title UmbrellaActivation - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596 - * - Discussion: https://governance.aave.com/t/arfc-aave-umbrella-activation/21521 - * @notice This payload decreases rewards distribution for the legacy stkTokens. - */ -contract AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515 is IProposalGenericExecutor { - uint128 public constant CURRENT_AAVE_EMISSION_PER_SECOND_AAVE = uint128(360 ether) / 1 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_AAVE = uint128(315 ether) / 1 days; - - uint128 public constant CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT = uint128(240 ether) / 1 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_STK_BPT = uint128(216 ether) / 1 days; - - uint128 public constant CURRENT_AAVE_EMISSION_PER_SECOND_GHO = uint128(100 ether) / 1 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_GHO = uint128(0); - - uint256 public constant STK_AAVE_MAX_SLASHABLE_PERCENTAGE = 20_00; - uint256 public constant STK_BPT_MAX_SLASHABLE_PERCENTAGE = 20_00; - - function execute() external { - _decreaseAaveEmission( - AaveSafetyModule.STK_AAVE, - CURRENT_AAVE_EMISSION_PER_SECOND_AAVE, - AAVE_EMISSION_PER_SECOND_AAVE - ); - _decreaseAaveEmission( - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2, - CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT, - AAVE_EMISSION_PER_SECOND_STK_BPT - ); - _decreaseAaveEmission( - AaveSafetyModule.STK_GHO, - CURRENT_AAVE_EMISSION_PER_SECOND_GHO, - AAVE_EMISSION_PER_SECOND_GHO - ); - - // Decrease `maxSlashablePercentage` to 20% - IStakeToken(AaveSafetyModule.STK_AAVE).setMaxSlashablePercentage( - STK_AAVE_MAX_SLASHABLE_PERCENTAGE - ); - IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2).setMaxSlashablePercentage( - STK_BPT_MAX_SLASHABLE_PERCENTAGE - ); - - // Since Emission will be zero for StkGho, there's no sense not to end distribution at all - IStakeToken(AaveSafetyModule.STK_GHO).setDistributionEnd(block.timestamp); - // Set `maxSlashablePercentage` and `cooldown` to zero - IStakeToken(AaveSafetyModule.STK_GHO).setMaxSlashablePercentage(0); - IStakeToken(AaveSafetyModule.STK_GHO).setCooldownSeconds(0); - } - - function _decreaseAaveEmission( - address legacyStkToken, - uint128 currentEmission, - uint128 newEmission - ) internal { - uint256 newAllowance; - - if (legacyStkToken == AaveSafetyModule.STK_AAVE) { - // stkAave rewards were extended just before `UmbrellaActivation` payload for 90 days with 360 Aave/day - // If we leave as it's, then with new rate (315) this will result in +- 102 days, which is fine - // so we wont update allowance in this case - } else { - // Both other legacy stk have not infinite `distributionEnd` and their distributions haven't skipped yet - uint256 distributionTimeLeft = IStakeToken(legacyStkToken).distributionEnd() - - block.timestamp; - - // Excess allowance that has not been claimed - uint256 allowanceToKeep = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - address(MiscEthereum.ECOSYSTEM_RESERVE), - legacyStkToken - ) - (distributionTimeLeft * currentEmission); - - newAllowance = allowanceToKeep + distributionTimeLeft * newEmission; - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - legacyStkToken, - 0 - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - legacyStkToken, - newAllowance - ); - } - - IStakeToken.AssetConfigInput[] memory stkConfigs = new IStakeToken.AssetConfigInput[](1); - stkConfigs[0] = IStakeToken.AssetConfigInput({ - emissionPerSecond: newEmission, - totalStaked: 0, // it's overwritten internally - underlyingAsset: legacyStkToken - }); - - IStakeToken(legacyStkToken).configureAssets(stkConfigs); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.t.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.t.sol deleted file mode 100644 index 6e782b263..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.t.sol +++ /dev/null @@ -1,221 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; - -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515} from './AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.sol'; - -interface IStkAave { - function DISTRIBUTION_END() external view returns (uint256); -} - -/** - * @dev Test for AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.t.sol -vv - */ -contract AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515_Test is ProtocolV3TestBase { - AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22581600); - proposal = new AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515(); - } - - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - // Emission tests - ///////////////////////////////////////////////////////////////////////////////////////// - - function test_checkEmissionsStkAAVE() public { - (uint128 emissionPerSecondBeforeStkAave, , ) = IStakeToken(AaveSafetyModule.STK_AAVE).assets( - AaveSafetyModule.STK_AAVE - ); - - assertEq(emissionPerSecondBeforeStkAave, proposal.CURRENT_AAVE_EMISSION_PER_SECOND_AAVE()); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterStkAave, , ) = IStakeToken(AaveSafetyModule.STK_AAVE).assets( - AaveSafetyModule.STK_AAVE - ); - - assertEq(emissionPerSecondAfterStkAave, proposal.AAVE_EMISSION_PER_SECOND_AAVE()); - } - - function test_checkEmissionsStkBPT() public { - (uint128 emissionPerSecondBeforeStkBPT, , ) = IStakeToken( - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ).assets(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2); - - assertEq(emissionPerSecondBeforeStkBPT, proposal.CURRENT_AAVE_EMISSION_PER_SECOND_STK_BPT()); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterStkBPT, , ) = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .assets(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2); - - assertEq(emissionPerSecondAfterStkBPT, proposal.AAVE_EMISSION_PER_SECOND_STK_BPT()); - } - - function test_checkEmissionsStkGHO() public { - (uint128 emissionPerSecondBeforeStkGho, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets( - AaveSafetyModule.STK_GHO - ); - - assertEq(emissionPerSecondBeforeStkGho, proposal.CURRENT_AAVE_EMISSION_PER_SECOND_GHO()); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterStkGho, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets( - AaveSafetyModule.STK_GHO - ); - - assertEq(emissionPerSecondAfterStkGho, proposal.AAVE_EMISSION_PER_SECOND_GHO()); - } - - // Distribution end tests - ///////////////////////////////////////////////////////////////////////////////////////// - - function test_checkDistributionEndStkAave() public { - uint256 distributionEndBefore = IStkAave(AaveSafetyModule.STK_AAVE).DISTRIBUTION_END(); - - executePayload(vm, address(proposal)); - - uint256 distributionEndAfter = IStkAave(AaveSafetyModule.STK_AAVE).DISTRIBUTION_END(); - - assertEq(distributionEndBefore, distributionEndAfter); - } - - function test_checkDistributionEndStkBPT() public { - uint256 endTimestampBefore = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .distributionEnd(); - - assertGt(endTimestampBefore, block.timestamp); - - executePayload(vm, address(proposal)); - - uint256 endTimestampAfter = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .distributionEnd(); - - assertEq(endTimestampBefore, endTimestampAfter); - } - - function test_checkDistributionEndStkGHO() public { - uint256 endTimestampBefore = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd(); - - assertGt(endTimestampBefore, block.timestamp); - - executePayload(vm, address(proposal)); - - uint256 endTimestampAfter = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd(); - - assertEq(endTimestampAfter, block.timestamp); - } - - // Allowance check - ///////////////////////////////////////////////////////////////////////////////////////// - - function test_checkAllowanceStkAave() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE - ); - - // allowance wasn't changed - assertEq(allowanceAfter, allowanceBefore); - } - - function test_checkAllowanceStkBPT() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE_WSTETH_BPTV2 - ); - - assertLt(allowanceAfter, allowanceBefore); - } - - function test_checkAllowanceStkGHO() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_GHO - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_GHO - ); - - assertLt(allowanceAfter, allowanceBefore); - } - - // `MaxSlashablePercentage` check - ///////////////////////////////////////////////////////////////////////////////////////// - - function test_checkMaxSlashablePercentage() public { - uint256 maxSlashableBPT = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .getMaxSlashablePercentage(); - uint256 maxSlashableAave = IStakeToken(AaveSafetyModule.STK_AAVE).getMaxSlashablePercentage(); - uint256 maxSlashableGho = IStakeToken(AaveSafetyModule.STK_GHO).getMaxSlashablePercentage(); - - assertEq(maxSlashableBPT, 30_00); - assertEq(maxSlashableAave, 30_00); - assertEq(maxSlashableGho, 99_00); - - executePayload(vm, address(proposal)); - - uint256 maxSlashableBPTAfter = IStakeToken(AaveSafetyModule.STK_AAVE_WSTETH_BPTV2) - .getMaxSlashablePercentage(); - uint256 maxSlashableAaveAfter = IStakeToken(AaveSafetyModule.STK_AAVE) - .getMaxSlashablePercentage(); - uint256 maxSlashableGhoAfter = IStakeToken(AaveSafetyModule.STK_GHO) - .getMaxSlashablePercentage(); - - assertEq(maxSlashableBPTAfter, proposal.STK_BPT_MAX_SLASHABLE_PERCENTAGE()); - assertEq(maxSlashableAaveAfter, proposal.STK_AAVE_MAX_SLASHABLE_PERCENTAGE()); - assertEq(maxSlashableGhoAfter, 0); - } - - // `Cooldown` check - ///////////////////////////////////////////////////////////////////////////////////////// - - function test_checkCooldownGho() public { - uint256 cooldownGho = IStakeToken(AaveSafetyModule.STK_GHO).getCooldownSeconds(); - - assertEq(cooldownGho, 20 days); - - executePayload(vm, address(proposal)); - - uint256 cooldownGhoAfter = IStakeToken(AaveSafetyModule.STK_GHO).getCooldownSeconds(); - - assertEq(cooldownGhoAfter, 0); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.sol deleted file mode 100644 index 4ee862b17..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.sol +++ /dev/null @@ -1,362 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AccessControlUpgradeable} from 'openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {UmbrellaEthereum} from 'aave-address-book/UmbrellaEthereum.sol'; - -import {IStataTokenV2} from 'aave-v3-origin/contracts/extensions/stata-token/interfaces/IStataTokenV2.sol'; - -import {UmbrellaExtendedPayload} from 'aave-umbrella/payloads/UmbrellaExtendedPayload.sol'; -import {ISMStructs, IStructs} from 'aave-umbrella/payloads/UmbrellaBasePayload.sol'; -import {IRewardsStructs} from 'aave-umbrella/rewards/interfaces/IRewardsStructs.sol'; - -/** - * @title UmbrellaActivation - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596 - * - Discussion: https://governance.aave.com/t/arfc-aave-umbrella-activation/21521 - * @notice Executes a batch of actions to activate the Aave Umbrella framework. - * - * The payload performs the following actions: - * - Registers the `Umbrella` contract in the `POOL_ADDRESSES_PROVIDER` - * - Eliminates reserve deficits fot USDC, USDT, WETH and GHO - * - Deploys four `UmbrellaStakeToken`s: - * + Three backed by waTokens - * + One (stkGho) backed by GHO - * - Configures slashing parameters and reward mechanisms during stkToken setup, increases `deficitOffset`s - * - Grants allowance from the `Collector` to the `RewardsController` to fund rewards for the next 180 days - * - Assigns the `REWARDS_ADMIN_ROLE` to the `PERMISSIONED_PAYLOADS_CONTROLLER_EXECUTOR` - * - Assigns the `COVERAGE_MANAGER_ROLE` to the `DEFICIT_OFFSET_CLINIC_STEWARD` - * - Grants allowance to the `DEFICIT_OFFSET_CLINIC_STEWARD` for `deficitOffset` elimination - */ -contract AaveV3Ethereum_UmbrellaActivation_20250515 is - UmbrellaExtendedPayload(UmbrellaEthereum.UMBRELLA_CONFIG_ENGINE) -{ - uint256 public constant DEFICIT_OFFSET_USDC = 100_000 * 1e6; - uint256 public constant DEFICIT_OFFSET_USDT = 100_000 * 1e6; - uint256 public constant DEFICIT_OFFSET_WETH = 50 * 1e18; - uint256 public constant DEFICIT_OFFSET_GHO = 100_000 * 1e18; - - uint256 public constant DEFAULT_COOLDOWN = 20 days; - uint256 public constant DEFAULT_UNSTAKE_WINDOW = 2 days; - - uint256 public constant DISTRIBUTION_DURATION = 365 days; - - uint256 public constant USDC_MAX_EMISSION_PER_SECOND = uint256(2_330_000 * 1e6) / 365 days; // ~3_000_000 * 66 / 85 - uint256 public constant USDC_TARGET_LIQUIDITY = 66_000_000 * 1e6; // Will be recalculated during setup considering the exchange rate of stata - - uint256 public constant USDT_MAX_EMISSION_PER_SECOND = uint256(3_670_000 * 1e6) / 365 days; // ~3_000_000 * 104 / 85 - uint256 public constant USDT_TARGET_LIQUIDITY = 104_000_000 * 1e6; // Will be recalculated during setup considering the exchange rate of stata - - uint256 public constant WETH_MAX_EMISSION_PER_SECOND = uint256(550 * 1e18) / 365 days; - uint256 public constant WETH_TARGET_LIQUIDITY = 25_000 * 1e18; // Will be recalculated during setup considering the exchange rate of stata - - uint256 public constant GHO_MAX_EMISSION_PER_SECOND = uint256(1_200_000 * 1e18) / 365 days; - uint256 public constant GHO_TARGET_LIQUIDITY = 12_000_000 * 1e18; - - bytes32 public constant REWARDS_ADMIN_ROLE = keccak256('REWARDS_ADMIN_ROLE'); - bytes32 public constant COVERAGE_MANAGER_ROLE = keccak256('COVERAGE_MANAGER_ROLE'); - - bytes32 public constant UMBRELLA = 'UMBRELLA'; - - address public constant BGD_LABS_MULTISIG = 0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF; - uint256 public constant TOTAL_COST_OF_AUDITS = 249_000 * 1e6; - - function _preExecute() internal override { - // Give `UMBRELLA` to the `Umbrella` contract, so `Umbrella` could start eliminating deficit for this `POOL` - AaveV3Ethereum.POOL_ADDRESSES_PROVIDER.setAddress(UMBRELLA, address(UmbrellaEthereum.UMBRELLA)); - - // Cache current reserve deficit amounts - ///////////////////////////////////////////////////////////////////////////////////////// - - uint256 currentReserveDeficitToCoverUSDC = AaveV3Ethereum.POOL.getReserveDeficit( - AaveV3EthereumAssets.USDC_UNDERLYING - ); - - uint256 currentReserveDeficitToCoverUSDT = AaveV3Ethereum.POOL.getReserveDeficit( - AaveV3EthereumAssets.USDT_UNDERLYING - ); - - uint256 currentReserveDeficitToCoverWETH = AaveV3Ethereum.POOL.getReserveDeficit( - AaveV3EthereumAssets.WETH_UNDERLYING - ); - - uint256 currentReserveDeficitToCoverGHO = AaveV3Ethereum.POOL.getReserveDeficit( - AaveV3EthereumAssets.GHO_UNDERLYING - ); - - // Transfer current reserve deficit amounts to this address, so it could be used to eliminate `ReserveDeficit` later - // +1 to avoid precision error with aToken transfers - ///////////////////////////////////////////////////////////////////////////////////////// - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - address(this), - currentReserveDeficitToCoverUSDC + 1 - ); - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - address(this), - currentReserveDeficitToCoverUSDT + 1 - ); - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN), - address(this), - currentReserveDeficitToCoverWETH + 1 - ); - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.GHO_UNDERLYING), - address(this), - currentReserveDeficitToCoverGHO - ); - } - - function coverReserveDeficit() public view override returns (IStructs.CoverDeficit[] memory) { - // Will eliminate reserve deficit before configuring anything, using funds, that were transferred during `_preExecute` phase - IStructs.CoverDeficit[] memory coverReserveDeficits = new IStructs.CoverDeficit[](4); - - coverReserveDeficits[0] = IStructs.CoverDeficit({ - reserve: AaveV3EthereumAssets.USDC_UNDERLYING, - amount: AaveV3Ethereum.POOL.getReserveDeficit(AaveV3EthereumAssets.USDC_UNDERLYING), - approve: true - }); - - coverReserveDeficits[1] = IStructs.CoverDeficit({ - reserve: AaveV3EthereumAssets.USDT_UNDERLYING, - amount: AaveV3Ethereum.POOL.getReserveDeficit(AaveV3EthereumAssets.USDT_UNDERLYING), - approve: true - }); - - coverReserveDeficits[2] = IStructs.CoverDeficit({ - reserve: AaveV3EthereumAssets.WETH_UNDERLYING, - amount: AaveV3Ethereum.POOL.getReserveDeficit(AaveV3EthereumAssets.WETH_UNDERLYING), - approve: true - }); - - coverReserveDeficits[3] = IStructs.CoverDeficit({ - reserve: AaveV3EthereumAssets.GHO_UNDERLYING, - amount: AaveV3Ethereum.POOL.getReserveDeficit(AaveV3EthereumAssets.GHO_UNDERLYING), - approve: true - }); - - return coverReserveDeficits; - } - - function complexTokenCreations() public view override returns (IStructs.TokenSetup[] memory) { - IStructs.TokenSetup[] memory tokensCreation = new IStructs.TokenSetup[](4); - - // stkwaUSDC.V1 creation - ///////////////////////////////////////////////////////////////////////////////////////// - - ISMStructs.StakeTokenSetup memory stkUsdcSetup = ISMStructs.StakeTokenSetup({ - underlying: AaveV3EthereumAssets.USDC_STATA_TOKEN, - cooldown: DEFAULT_COOLDOWN, - unstakeWindow: DEFAULT_UNSTAKE_WINDOW, - suffix: 'v1' - }); - - IRewardsStructs.RewardSetupConfig[] - memory stkUsdcRewards = new IRewardsStructs.RewardSetupConfig[](1); - - stkUsdcRewards[0] = IRewardsStructs.RewardSetupConfig({ - reward: AaveV3EthereumAssets.USDC_A_TOKEN, - rewardPayer: address(AaveV3Ethereum.COLLECTOR), - maxEmissionPerSecond: USDC_MAX_EMISSION_PER_SECOND, - distributionEnd: block.timestamp + DISTRIBUTION_DURATION - }); - - tokensCreation[0] = IStructs.TokenSetup({ - stakeSetup: stkUsdcSetup, - targetLiquidity: (USDC_TARGET_LIQUIDITY * - IStataTokenV2(AaveV3EthereumAssets.USDC_STATA_TOKEN).previewDeposit(1e6)) / 1e6, - rewardConfigs: stkUsdcRewards, - reserve: AaveV3EthereumAssets.USDC_UNDERLYING, - liquidationFee: 0, - umbrellaStakeUnderlyingOracle: AaveV3EthereumAssets.USDC_STATA_TOKEN, - deficitOffsetIncrease: DEFICIT_OFFSET_USDC - }); - - // stkwaUSDT.V1 creation - ///////////////////////////////////////////////////////////////////////////////////////// - - ISMStructs.StakeTokenSetup memory stkUsdtSetup = ISMStructs.StakeTokenSetup({ - underlying: AaveV3EthereumAssets.USDT_STATA_TOKEN, - cooldown: DEFAULT_COOLDOWN, - unstakeWindow: DEFAULT_UNSTAKE_WINDOW, - suffix: 'v1' - }); - - IRewardsStructs.RewardSetupConfig[] - memory stkUsdtRewards = new IRewardsStructs.RewardSetupConfig[](1); - - stkUsdtRewards[0] = IRewardsStructs.RewardSetupConfig({ - reward: AaveV3EthereumAssets.USDT_A_TOKEN, - rewardPayer: address(AaveV3Ethereum.COLLECTOR), - maxEmissionPerSecond: USDT_MAX_EMISSION_PER_SECOND, - distributionEnd: block.timestamp + DISTRIBUTION_DURATION - }); - - tokensCreation[1] = IStructs.TokenSetup({ - stakeSetup: stkUsdtSetup, - targetLiquidity: (USDT_TARGET_LIQUIDITY * - IStataTokenV2(AaveV3EthereumAssets.USDT_STATA_TOKEN).previewDeposit(1e6)) / 1e6, - rewardConfigs: stkUsdtRewards, - reserve: AaveV3EthereumAssets.USDT_UNDERLYING, - liquidationFee: 0, - umbrellaStakeUnderlyingOracle: AaveV3EthereumAssets.USDT_STATA_TOKEN, - deficitOffsetIncrease: DEFICIT_OFFSET_USDT - }); - - // stkwaWETH.V1 creation - ///////////////////////////////////////////////////////////////////////////////////////// - - ISMStructs.StakeTokenSetup memory stkWethSetup = ISMStructs.StakeTokenSetup({ - underlying: AaveV3EthereumAssets.WETH_STATA_TOKEN, - cooldown: DEFAULT_COOLDOWN, - unstakeWindow: DEFAULT_UNSTAKE_WINDOW, - suffix: 'v1' - }); - - IRewardsStructs.RewardSetupConfig[] - memory stkWethRewards = new IRewardsStructs.RewardSetupConfig[](1); - - stkWethRewards[0] = IRewardsStructs.RewardSetupConfig({ - reward: AaveV3EthereumAssets.WETH_A_TOKEN, - rewardPayer: address(AaveV3Ethereum.COLLECTOR), - maxEmissionPerSecond: WETH_MAX_EMISSION_PER_SECOND, - distributionEnd: block.timestamp + DISTRIBUTION_DURATION - }); - - tokensCreation[2] = IStructs.TokenSetup({ - stakeSetup: stkWethSetup, - targetLiquidity: (WETH_TARGET_LIQUIDITY * - IStataTokenV2(AaveV3EthereumAssets.WETH_STATA_TOKEN).previewDeposit(1e18)) / 1e18, - rewardConfigs: stkWethRewards, - reserve: AaveV3EthereumAssets.WETH_UNDERLYING, - liquidationFee: 0, - umbrellaStakeUnderlyingOracle: AaveV3EthereumAssets.WETH_STATA_TOKEN, - deficitOffsetIncrease: DEFICIT_OFFSET_WETH - }); - - // stkGHO.V1 creation - ///////////////////////////////////////////////////////////////////////////////////////// - - ISMStructs.StakeTokenSetup memory stkGhoSetup = ISMStructs.StakeTokenSetup({ - underlying: AaveV3EthereumAssets.GHO_UNDERLYING, - cooldown: DEFAULT_COOLDOWN, - unstakeWindow: DEFAULT_UNSTAKE_WINDOW, - suffix: 'v1' - }); - - IRewardsStructs.RewardSetupConfig[] - memory stkGhoRewards = new IRewardsStructs.RewardSetupConfig[](1); - - stkGhoRewards[0] = IRewardsStructs.RewardSetupConfig({ - reward: AaveV3EthereumAssets.GHO_UNDERLYING, - rewardPayer: address(AaveV3Ethereum.COLLECTOR), - maxEmissionPerSecond: GHO_MAX_EMISSION_PER_SECOND, - distributionEnd: block.timestamp + DISTRIBUTION_DURATION - }); - - tokensCreation[3] = IStructs.TokenSetup({ - stakeSetup: stkGhoSetup, - targetLiquidity: GHO_TARGET_LIQUIDITY, - rewardConfigs: stkGhoRewards, - reserve: AaveV3EthereumAssets.GHO_UNDERLYING, - liquidationFee: 0, - umbrellaStakeUnderlyingOracle: AaveV3EthereumAssets.GHO_ORACLE, - deficitOffsetIncrease: DEFICIT_OFFSET_GHO - }); - - return tokensCreation; - } - - function _postExecute() internal override { - // Give roles - ///////////////////////////////////////////////////////////////////////////////////////// - - // Give role to limited reward updates inside `RewardsController` for `FinancialCommittee` - // `FinancialCommittee` is the payload manager inside `PERMISSIONED_PAYLOADS_CONTROLLER` - AccessControlUpgradeable(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).grantRole( - REWARDS_ADMIN_ROLE, - UmbrellaEthereum.PERMISSIONED_PAYLOADS_CONTROLLER_EXECUTOR - ); - - // Give role to cover deficit offset for `FinancialCommittee` - // `FinancialCommittee` has the `FINANCE_COMMITTEE_ROLE` role inside `DeficitOffsetClinicSteward` - AccessControlUpgradeable(address(UmbrellaEthereum.UMBRELLA)).grantRole( - COVERAGE_MANAGER_ROLE, - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD - ); - - // Give allowance to `DeficitOffsetClinicSteward` - // So `deficitOffset` could be closed using `Collector` funds - ///////////////////////////////////////////////////////////////////////////////////////// - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD, - DEFICIT_OFFSET_USDC - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD, - DEFICIT_OFFSET_USDT - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN), - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD, - DEFICIT_OFFSET_WETH - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.GHO_UNDERLYING), - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD, - DEFICIT_OFFSET_GHO - ); - - // Give allowance to `RewardController` for the next 180 days of rewards - ///////////////////////////////////////////////////////////////////////////////////////// - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER, - USDC_MAX_EMISSION_PER_SECOND * 180 days - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER, - USDT_MAX_EMISSION_PER_SECOND * 180 days - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER, - WETH_MAX_EMISSION_PER_SECOND * 180 days - ); - - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.GHO_UNDERLYING), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER, - GHO_MAX_EMISSION_PER_SECOND * 180 days - ); - - // Cover audits expenses - ///////////////////////////////////////////////////////////////////////////////////////// - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.USDT_A_TOKEN), - BGD_LABS_MULTISIG, - TOTAL_COST_OF_AUDITS - ); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.t.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.t.sol deleted file mode 100644 index a7cb812d7..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.t.sol +++ /dev/null @@ -1,404 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AccessControlUpgradeable} from 'openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; - -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {UmbrellaEthereum} from 'aave-address-book/UmbrellaEthereum.sol'; - -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {IStataTokenV2} from 'aave-v3-origin/contracts/extensions/stata-token/interfaces/IStataTokenV2.sol'; - -import {IDeficitOffsetClinicSteward} from 'aave-umbrella/stewards/interfaces/IDeficitOffsetClinicSteward.sol'; -import {IUmbrellaStakeToken} from 'aave-umbrella/stakeToken/interfaces/IUmbrellaStakeToken.sol'; -import {IRewardsController} from 'aave-umbrella/rewards/interfaces/IRewardsController.sol'; - -import {AaveV3Ethereum_UmbrellaActivation_20250515} from './AaveV3Ethereum_UmbrellaActivation_20250515.sol'; - -/** - * @dev Test for AaveV3Ethereum_UmbrellaActivation_20250515 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.t.sol -vv - */ -contract AaveV3Ethereum_UmbrellaActivation_20250515_Test is ProtocolV3TestBase { - AaveV3Ethereum_UmbrellaActivation_20250515 internal proposal; - - address user = vm.addr(0xDEAD); - uint256 snapshotState; - uint256 snapshotStateAfterPayload; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22581600); - proposal = new AaveV3Ethereum_UmbrellaActivation_20250515(); - - snapshotState = vm.snapshotState(); - } - - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_UmbrellaActivation_20250515', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_reserveDeficitsElimination() public { - _reserveCheck(AaveV3EthereumAssets.USDC_UNDERLYING, 168401963, 1); - _reserveCheck(AaveV3EthereumAssets.USDT_UNDERLYING, 197155140, 1); - _reserveCheck(AaveV3EthereumAssets.WETH_UNDERLYING, 42022976677445873, 1); - _reserveCheck(AaveV3EthereumAssets.GHO_UNDERLYING, 132211052243180416981, 0); - } - - function test_deficitOffsetClinicSteward() public { - _allowanceToDeficitClinicCheck( - AaveV3EthereumAssets.USDC_UNDERLYING, - proposal.DEFICIT_OFFSET_USDC() - ); - _allowanceToDeficitClinicCheck( - AaveV3EthereumAssets.USDT_UNDERLYING, - proposal.DEFICIT_OFFSET_USDT() - ); - _allowanceToDeficitClinicCheck( - AaveV3EthereumAssets.WETH_UNDERLYING, - proposal.DEFICIT_OFFSET_WETH() - ); - _allowanceToDeficitClinicCheck( - AaveV3EthereumAssets.GHO_UNDERLYING, - proposal.DEFICIT_OFFSET_GHO() - ); - } - - function test_umbrellaTokenCreation() public { - address[] memory stkTokens = UmbrellaEthereum.UMBRELLA.getStkTokens(); - assertEq(stkTokens.length, 0); - - executePayload(vm, address(proposal)); - - address[] memory stkTokensAfter = UmbrellaEthereum.UMBRELLA.getStkTokens(); - assertEq(stkTokensAfter.length, 4); - - for (uint256 i; i < stkTokensAfter.length; ++i) { - assertEq(IUmbrellaStakeToken(stkTokensAfter[i]).getCooldown(), proposal.DEFAULT_COOLDOWN()); - assertEq( - IUmbrellaStakeToken(stkTokensAfter[i]).getUnstakeWindow(), - proposal.DEFAULT_UNSTAKE_WINDOW() - ); - assertGe( - IUmbrellaStakeToken(stkTokensAfter[i]).latestAnswer(), - 1e8 // all stake tokens should worth more or equal to 1 usd, cause their underlying is wrapped - ); - } - - assertEq(IUmbrellaStakeToken(stkTokensAfter[0]).asset(), AaveV3EthereumAssets.USDC_STATA_TOKEN); - assertEq(IUmbrellaStakeToken(stkTokensAfter[1]).asset(), AaveV3EthereumAssets.USDT_STATA_TOKEN); - assertEq(IUmbrellaStakeToken(stkTokensAfter[2]).asset(), AaveV3EthereumAssets.WETH_STATA_TOKEN); - assertEq(IUmbrellaStakeToken(stkTokensAfter[3]).asset(), AaveV3EthereumAssets.GHO_UNDERLYING); - - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[0]).reserve, - AaveV3EthereumAssets.USDC_UNDERLYING - ); - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[0]).underlyingOracle, - AaveV3EthereumAssets.USDC_STATA_TOKEN - ); - - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[1]).reserve, - AaveV3EthereumAssets.USDT_UNDERLYING - ); - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[1]).underlyingOracle, - AaveV3EthereumAssets.USDT_STATA_TOKEN - ); - - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[2]).reserve, - AaveV3EthereumAssets.WETH_UNDERLYING - ); - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[2]).underlyingOracle, - AaveV3EthereumAssets.WETH_STATA_TOKEN - ); - - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[3]).reserve, - AaveV3EthereumAssets.GHO_UNDERLYING - ); - assertEq( - UmbrellaEthereum.UMBRELLA.getStakeTokenData(stkTokensAfter[3]).underlyingOracle, - AaveV3EthereumAssets.GHO_ORACLE - ); - - assertEq( - UmbrellaEthereum - .UMBRELLA - .getReserveSlashingConfig(AaveV3EthereumAssets.USDC_UNDERLYING, stkTokensAfter[0]) - .liquidationFee, - 0 - ); - - assertEq( - UmbrellaEthereum - .UMBRELLA - .getReserveSlashingConfig(AaveV3EthereumAssets.USDT_UNDERLYING, stkTokensAfter[1]) - .liquidationFee, - 0 - ); - - assertEq( - UmbrellaEthereum - .UMBRELLA - .getReserveSlashingConfig(AaveV3EthereumAssets.WETH_UNDERLYING, stkTokensAfter[2]) - .liquidationFee, - 0 - ); - - assertEq( - UmbrellaEthereum - .UMBRELLA - .getReserveSlashingConfig(AaveV3EthereumAssets.GHO_UNDERLYING, stkTokensAfter[3]) - .liquidationFee, - 0 - ); - } - - function test_deficitOffset() public { - _deficitOffsetCheck(AaveV3EthereumAssets.USDC_UNDERLYING, proposal.DEFICIT_OFFSET_USDC(), 1); - _deficitOffsetCheck(AaveV3EthereumAssets.USDT_UNDERLYING, proposal.DEFICIT_OFFSET_USDT(), 1); - _deficitOffsetCheck(AaveV3EthereumAssets.WETH_UNDERLYING, proposal.DEFICIT_OFFSET_WETH(), 1); - _deficitOffsetCheck(AaveV3EthereumAssets.GHO_UNDERLYING, proposal.DEFICIT_OFFSET_GHO(), 0); - } - - function test_rewardsAllowance() public { - _rewardsAllowanceCheck( - AaveV3EthereumAssets.USDC_A_TOKEN, - proposal.USDC_MAX_EMISSION_PER_SECOND() * 180 days - ); - _rewardsAllowanceCheck( - AaveV3EthereumAssets.USDT_A_TOKEN, - proposal.USDT_MAX_EMISSION_PER_SECOND() * 180 days - ); - _rewardsAllowanceCheck( - AaveV3EthereumAssets.WETH_A_TOKEN, - proposal.WETH_MAX_EMISSION_PER_SECOND() * 180 days - ); - _rewardsAllowanceCheck( - AaveV3EthereumAssets.GHO_UNDERLYING, - proposal.GHO_MAX_EMISSION_PER_SECOND() * 180 days - ); - } - - function test_checkRewards() public { - executePayload(vm, address(proposal)); - - address[] memory stkTokens = UmbrellaEthereum.UMBRELLA.getStkTokens(); - - _rewardsDistributionCheck( - stkTokens[0], - AaveV3EthereumAssets.USDC_STATA_TOKEN, - AaveV3EthereumAssets.USDC_A_TOKEN, - 1_000 * 1e6 - ); - _rewardsDistributionCheck( - stkTokens[1], - AaveV3EthereumAssets.USDT_STATA_TOKEN, - AaveV3EthereumAssets.USDT_A_TOKEN, - 1_000 * 1e6 - ); - _rewardsDistributionCheck( - stkTokens[2], - AaveV3EthereumAssets.WETH_STATA_TOKEN, - AaveV3EthereumAssets.WETH_A_TOKEN, - 1_000 * 1e18 - ); - _rewardsDistributionCheck( - stkTokens[3], - AaveV3EthereumAssets.GHO_UNDERLYING, - AaveV3EthereumAssets.GHO_UNDERLYING, - 1_000 * 1e18 - ); - } - - function test_umbrellaRoles() public { - address umbrella = AaveV3Ethereum.POOL_ADDRESSES_PROVIDER.getAddress(proposal.UMBRELLA()); - assert(umbrella == address(0)); - - bool hasRolePermissionedPayloadsController = AccessControlUpgradeable( - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER - ).hasRole( - proposal.REWARDS_ADMIN_ROLE(), - UmbrellaEthereum.PERMISSIONED_PAYLOADS_CONTROLLER_EXECUTOR - ); - - assert(!hasRolePermissionedPayloadsController); - - bool hasRoleCoverageManager = AccessControlUpgradeable(address(UmbrellaEthereum.UMBRELLA)) - .hasRole(proposal.COVERAGE_MANAGER_ROLE(), UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD); - - assert(!hasRoleCoverageManager); - - executePayload(vm, address(proposal)); - - umbrella = AaveV3Ethereum.POOL_ADDRESSES_PROVIDER.getAddress(proposal.UMBRELLA()); - assert(umbrella == address(UmbrellaEthereum.UMBRELLA)); - - hasRolePermissionedPayloadsController = AccessControlUpgradeable( - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER - ).hasRole( - proposal.REWARDS_ADMIN_ROLE(), - UmbrellaEthereum.PERMISSIONED_PAYLOADS_CONTROLLER_EXECUTOR - ); - - assert(hasRolePermissionedPayloadsController); - - hasRoleCoverageManager = AccessControlUpgradeable(address(UmbrellaEthereum.UMBRELLA)).hasRole( - proposal.COVERAGE_MANAGER_ROLE(), - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD - ); - - assert(hasRoleCoverageManager); - } - - function test_refundForAudits() public { - uint256 amount = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - proposal.BGD_LABS_MULTISIG() - ); - - executePayload(vm, address(proposal)); - - uint256 amountAfter = IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).balanceOf( - proposal.BGD_LABS_MULTISIG() - ); - - assertEq(amountAfter, amount + proposal.TOTAL_COST_OF_AUDITS()); - } - - function _reserveCheck( - address reserve, - uint256 reserveDeficit, - uint256 newMaxReserveDeficit - ) internal { - uint256 currentReserveDeficit = AaveV3Ethereum.POOL.getReserveDeficit(reserve); - assertGe(currentReserveDeficit, reserveDeficit); - - executePayload(vm, address(proposal)); - - uint256 newReserveDeficit = AaveV3Ethereum.POOL.getReserveDeficit(reserve); - assertLe(newReserveDeficit, newMaxReserveDeficit); - - vm.revertToState(snapshotState); - } - - function _allowanceToDeficitClinicCheck(address reserve, uint256 allowanceAfter) internal { - uint256 allowanceBefore = IDeficitOffsetClinicSteward( - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD - ).getRemainingAllowance(reserve); - - assertEq(allowanceBefore, 0); - executePayload(vm, address(proposal)); - - uint256 remainingAllowanceAfter = IDeficitOffsetClinicSteward( - UmbrellaEthereum.DEFICIT_OFFSET_CLINIC_STEWARD - ).getRemainingAllowance(reserve); - - assertEq(remainingAllowanceAfter, allowanceAfter); - - vm.revertToState(snapshotState); - } - - function _deficitOffsetCheck( - address reserve, - uint256 deficitOffsetIncrease, - uint256 precisionLoss - ) internal { - uint256 deficitOffset = UmbrellaEthereum.UMBRELLA.getDeficitOffset(reserve); - assertEq(deficitOffset, 0); - - executePayload(vm, address(proposal)); - - uint256 deficitOffsetAfter = UmbrellaEthereum.UMBRELLA.getDeficitOffset(reserve); - assertLe(deficitOffsetAfter - deficitOffsetIncrease, precisionLoss); // precisionLoss could occur during aToken transfers - - (bool isSlashable, uint256 newDeficit) = UmbrellaEthereum.UMBRELLA.isReserveSlashable(reserve); - - assert(!isSlashable); - assertEq(newDeficit, 0); - - vm.revertToState(snapshotState); - } - - function _rewardsAllowanceCheck(address reward, uint256 allowanceAfterExecution) internal { - uint256 allowanceBefore = IERC20(reward).allowance( - address(AaveV3Ethereum.COLLECTOR), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER - ); - assertEq(allowanceBefore, 0); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(reward).allowance( - address(AaveV3Ethereum.COLLECTOR), - UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER - ); - assertEq(allowanceAfter, allowanceAfterExecution); - - vm.revertToState(snapshotState); - } - - function _rewardsDistributionCheck( - address asset, - address underlyingAsset, - address reward, - uint256 dealAmount - ) internal { - deal(underlyingAsset, user, dealAmount); - - vm.startPrank(user); - - IERC20(underlyingAsset).approve(asset, dealAmount); - IUmbrellaStakeToken(asset).deposit(dealAmount, user); - - assertEq( - IRewardsController(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).calculateRewardIndex( - asset, - reward - ), - 0 - ); - assertEq( - IRewardsController(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).calculateCurrentUserReward( - asset, - reward, - user - ), - 0 - ); - - skip(1 days); - - assertGt( - IRewardsController(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).calculateRewardIndex( - asset, - reward - ), - 0 - ); - assertGt( - IRewardsController(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).calculateCurrentUserReward( - asset, - reward, - user - ), - 0 - ); - - assertEq(IERC20(reward).balanceOf(user), 0); - - IRewardsController(UmbrellaEthereum.UMBRELLA_REWARDS_CONTROLLER).claimAllRewards(asset, user); - assertGt(IERC20(reward).balanceOf(user), 0); - - vm.stopPrank(); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation.md b/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation.md deleted file mode 100644 index 2bfebc313..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: "Aave Umbrella Activation" -author: "BGD Labs (@bgdlabs)" -discussions: "https://governance.aave.com/t/arfc-aave-umbrella-activation/21521" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596" ---- - -## Simple Summary - -This payload activates the `Umbrella` system, introducing new staking tokens tailored for Aave’s risk management needs, along with their reward and slashing configurations. It also includes adjustments to the legacy `Safety Module` to ensure a smooth transition and continued protocol coverage. - -## Motivation - -The `Umbrella` project was developed to improve capital efficiency and enhance the protocol’s ability to cover potential shortfalls in the event of a bad debt. It represents a significant evolution of the existing `Safety Module`, offering broader coverage, improved fund utilization, and greater operational flexibility — ultimately serving as its full replacement. - -## Specification - -For simplicity, the payload is divided into 3 parts. - -1. **Umbrella Activation** -2. **Legacy stk tokens adjustment** -3. **Robot activation** - -### 1. **Umbrella Activation** - -This payload handles the deployment and configuration of the new Umbrella system for deficit elimination and staking. - -#### Contract registration - -- Registers the `Umbrella` contract in the `POOL_ADDRESSES_PROVIDER`. - - Enables the `Umbrella` to be used for reserve deficit elimination. - -#### Reserve Deficit Elimination - -- Eliminates existing reserve deficits for the following assets: USDC, USDT, WETH and GHO. - - Calculates current reserve deficits amounts. - - Transfers the required amounts from the `Collector` to the `Executor` contract. - - Executes deficit elimination using the transferred funds. - -#### Stk Tokens Creation - -- Creates `stk` tokens for the above assets: - - `stkwaUSDC.V1`, `stkwaUSDT.V1`, `stkwaWETH.V1` are backed by their respective stata tokens. - - `stkGHO.V1` is backed by the GHO underlying token. - -#### Reward Configuration - -- Sets up reward emissions for each `stk` token: - - `stkwaUSDC.V1` -> `aUSDC`, `stkwaUSDT.V1` -> `aUSDT`, `stkwaWETH.V1` -> `aWETH` - - `stkGHO.V1` -> `GHO` - - For each: - - `maxEmissionPerSecond` and `targetLiquidity` are configured using values from the governance discussion, check the [summary table](#summary-table) for more details - - `distributionEnd` is set to 1 year from the execution. - - `rewardPayer` is st to the `Collector`. - -#### Slashing Configuration - -- Sets up `SlashingConfig` for each `stk` token: - - `reserve`: Corresponds to the base token (e.g., `USDT` for `stkwaUSDT.V1`, `GHO` for `stkGHO.V1`). - - `liquidationFee`: Set to zero for all stk tokens. - - `deficitOffset`: Values sourced from the governance discussion. - - `umbrellaStakeUnderlyingOracle`: - - For stata-based tokens: the stata token itself. - - For `GHO`: a `GHO` oracle with a mocked price. - -#### Role and Permission Management - -- Grants `REWARDS_ADMIN_ROLE` in `RewardsController` to `PERMISSIONED_PAYLOADS_CONTROLLER_EXECUTOR`: - - Allows the `FinancialCommittee` to limited modification of rewards without requiring governance proposals. -- Grants `COVERAGE_MANAGER_ROLE` to `DEFICIT_OFFSET_CLINIC_STEWARD`. - - Allows the `FinancialCommittee` to eliminate `deficitOffset` using `Collector` funds directly. - -#### Allowances - -- `Collector` grants allowance to: - - `DEFICIT_OFFSET_CLINIC_STEWARD` - for deficit offset amounts as per forum. - - `RewardsController` - to fund reward emissions for 180 days post-execution. - -#### Coverage of audit expenses - -- `Collector` transfers 249_000 `aUSDT` to the BGD Labs to cover external security reviews of the entire `Umbrella` system. - -#### Summary Table - -| Staked asset | Covered asset | Target Liquidity\* | Max emission | Cooldown / Unstake window | Deficit offset | -| :----------: | :-----------: | :----------------: | :----------: | :-----------------------: | :------------: | -| waUSDC | USDC | 66_000_000 | 2_330_000 | 20 days / 2 days | 100_000 | -| waUSDT | USDT | 104_000_000 | 3_670_000 | 20 days / 2 days | 100_000 | -| waWETH | WETH | 25_000 | 550 | 20 days / 2 days | 50 | -| GHO | GHO | 12_000_000 | 1_200_000 | 20 days / 2 days | 100_000 | - -- Target Liquidity is denominated in the contracts in wrapped aTokens, increasing over time in exchange rate. That means the Target Liquidity itself will grow slightly over time and rewards will need to be periodically adjusted. For the sake of simplicity, the number on the table is in equivalent terms of underlying (USDC, USDT, WETH), not in wrapped aTokens. - -### 2. **Legacy stk tokens adjustment** - -This payload introduces updates to the legacy Safety Module staking tokens to align with the activation of the new Umbrella system. - -#### Emission Reductions - -- Reduces (`AAVE`/day) reward emissions for the following tokens: - - `stkGHO`: 100 -> 0 - - `stkAAVE`: 360 -> 315 - - `stkBPT`: 240 -> 216 - -#### Slashing Parameter Updates - -- Lowers the `maxSlashablePercentage` for the legacy stk tokens: - - `stkGHO`: 99.00% -> 0% - - `stkAAVE`: 30.00% -> 20.00% - - `stkBPT`: 30.00% -> 20.00% - -#### stkGHO Deactivation - -- Fully stops reward emissions for `stkGho` -- Reduces `cooldown` period to 0, enabling immediate unstaking - -#### Summary Table - -| Staked asset | Rewards/day | Rewards/year | Slashing eligibility | -| :----------: | :---------: | :----------------: | :------------------: | -| AAVE | 360 -> 315 | 131_400 -> 114_975 | 30% -> 20% | -| BPT | 240 -> 216 | 87_600 -> 78_840 | 30% -> 20% | -| GHO | 100 -> 0 | 36_500 -> 0 | 100% -> 0% | - -### 3. **Robot activation** - -This payload handles the `SlashingRobot` and `UmbrellaPPCRobot` activation process. - -- Withdraws 400 `LINK` from `AaveV3` on Ethereum Network. -- Registers `SlashingRobot` and `UmbrellaPPCRobot` in the `AAVE_CL_ROBOT_OPERATOR`. - - Sets `gasLimit` to `5_000_000`. - - Funds with all tokens withdrawn. - -## Audit Summary of the Aave Umbrella Contracts - -The new contracts of the Aave Umbrella system were audited by four independent auditors: MixBytes, Stermi, Certora, and Ackee. The audited and deployed version of the contracts is publicly accessible at the following link: https://github.com/aave-dao/aave-umbrella/tree/62f3850816b257087e92f41a7f37a698f00fa96e. - -Subsequent changes made in this GitHub repository (aave-dao/aave-umbrella) pertain either to auxiliary contracts that do not affect the core functionality of the Umbrella system or to interface improvements aimed at enhancing integration with external systems. These updates did not introduce any changes to the deployed core contracts. - -The audit reports provided by each auditor can be found at the following links: - -- [MixBytes](https://github.com/aave-dao/aave-umbrella/tree/main/audits/MixBytes) -- [Stermi](https://github.com/aave-dao/aave-umbrella/tree/main/audits/Stermi) -- [Certora](https://github.com/aave-dao/aave-umbrella/tree/main/audits/Certora) -- [Ackee](https://github.com/aave-dao/aave-umbrella/tree/main/audits/Ackee) - -## References - -- Implementation: [AaveV3Ethereum_UmbrellaActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.sol), [AaveV3Ethereum_SafetyModuleRewardsDecrease](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_2025.sol), [AaveV3Ethereum_RobotActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.sol) -- Tests: [AaveV3Ethereum_UmbrellaActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_UmbrellaActivation_20250515.t.sol), [AaveV3Ethereum_SafetyModuleRewardsDecrease](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_SafetyModuleRewardsDecrease_2025.t.sol), [AaveV3Ethereum_RobotActivation](https://github.com/bgd-labs/aave-proposals-v3/blob/568d9fec9ed22e7d2b97991e9aacfd8f7dfe19df/src/20250515_AaveV3Ethereum_UmbrellaActivation/AaveV3Ethereum_RobotActivation_20250515.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596) -- [Discussion](https://governance.aave.com/t/arfc-aave-umbrella-activation/21521) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation_20250515.s.sol b/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation_20250515.s.sol deleted file mode 100644 index 021e77eb7..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation_20250515.s.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; - -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; - -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; - -import {AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515} from './AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515.sol'; -import {AaveV3Ethereum_RobotActivation_20250515} from './AaveV3Ethereum_RobotActivation_20250515.sol'; -import {AaveV3Ethereum_UmbrellaActivation_20250515} from './AaveV3Ethereum_UmbrellaActivation_20250515.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation_20250515.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/UmbrellaActivation_20250515.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_UmbrellaActivation_20250515).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515).creationCode - ); - address payload2 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_RobotActivation_20250515).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](3); - - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - actions[2] = GovV3Helpers.buildAction(payload2); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Create Proposal - * command: make deploy-ledger contract=src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation_20250515.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[](3); - - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_UmbrellaActivation_20250515).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_SafetyModuleRewardsDecrease_20250515).creationCode - ); - actionsEthereum[2] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_RobotActivation_20250515).creationCode - ); - - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250515_AaveV3Ethereum_UmbrellaActivation/UmbrellaActivation.md' - ) - ); - } -} diff --git a/src/20250515_AaveV3Ethereum_UmbrellaActivation/config.ts b/src/20250515_AaveV3Ethereum_UmbrellaActivation/config.ts deleted file mode 100644 index 27e2ee465..000000000 --- a/src/20250515_AaveV3Ethereum_UmbrellaActivation/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'UmbrellaActivation', - shortName: 'UmbrellaActivation', - date: '20250515', - author: 'BGD Labs (@bgdlabs)', - discussion: 'https://governance.aave.com/t/arfc-aave-umbrella-activation/21521', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xbe792a1db33cd7803e23810553e5a6a728c3ac15827ad2652aa6de1858fa5596', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22487573}}}, -}; diff --git a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation.md b/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation.md deleted file mode 100644 index b848cd9b2..000000000 --- a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "Aave V3.3 Soneium Activation" -author: "BGD Labs (@bgdlabs)" -discussions: "https://governance.aave.com/t/arfc-deploy-aave-on-soneium/21204/9" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0xb996bda7e60f85de7f6f2d9f7f6c15ddddfbd871465d8f00b846f8ab014a5953" ---- - -## Simple Summary - -This proposal allows the Aave governance to activate the Aave V3 Soneium pool (3.3) by completing all the initial setup and listing USDCe, USDT, WETH as suggested by the risk service providers engaged with the DAO on the governance forum. - -All the Aave Soneium V3 addresses can be found in the [aave-address-book](https://github.com/bgd-labs/aave-address-book/blob/18ac617a151d271c9c41d3565c8e4422d1fc6e18/src/AaveV3Soneium.sol). - -## Motivation - -All the governance procedures for the expansion of Aave v3 to Soneium have been finished, said: - -- Positive signaling and approval regarding the expansion on the [governance forum](https://governance.aave.com/t/arfc-deploy-aave-on-soneium/21204), and [snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xb996bda7e60f85de7f6f2d9f7f6c15ddddfbd871465d8f00b846f8ab014a5953). -- Positive technical evaluation done by BGD Labs of the Soneium network, as described in the [forum](https://governance.aave.com/t/bgd-aave-soneium-infrastructure-technical-evaluation/21968) in detail. -- Positive risk analysis and assets/parameters recommendation by the risk service providers. - -## Specification - -The proposal will do the following: - -- List the following assets on Aave V3 Soneium: USDCe, USDT, WETH. -- Set the risk steward as the risk admin by executing `ACL_MANAGER.addRiskAdmin()`. -- Set the guardian address as the pool admin by executing `ACL_MANAGER.addPoolAdmin()`. This is following the standard procedure of keeping pool admin on the Aave Guardian during the bootstrap period, for security. -- Set ACI [multi-sig](https://soneium.blockscout.com/address/0xac140648435d03f784879cd789130F22Ef588Fcd) as liquidity mining admin for all aTokens and underlying tokens by calling `EMISSION_MANAGER.setEmissionAdmin()` method. - -The table below illustrates the configured risk parameters for the assets to be listed: - -| Parameter | [USDCe](https://soneium.blockscout.com/address/0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369) | [USDT](https://soneium.blockscout.com/address/0x3A337a6adA9d885b6Ad95ec48F9b75f197b5AE35) | [WETH](https://soneium.blockscout.com/address/0x4200000000000000000000000000000000000006) | -| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------: | -----------------------------------------------------------------------------------------------------: | -| Isolation Mode | false | false | false | -| Borrowable | ENABLED | ENABLED | ENABLED | -| Collateral Enabled | true | true | true | -| Supply Cap | 8,000,000 | 5,000,000 | 800 | -| Borrow Cap | 7,200,000 | 4,500,000 | 720 | -| Debt Ceiling | USD 0 | USD 0 | USD 0 | -| LTV | 75 % | 75 % | 80 % | -| LT | 78 % | 78 % | 83 % | -| Liquidation Bonus | 5 % | 5 % | 6 % | -| Liquidation Protocol Fee | 10 % | 10 % | 10 % | -| Reserve Factor | 10 % | 10 % | 15 % | -| Base Variable Borrow Rate | 0 % | 0 % | 0 % | -| Variable Slope 1 | 5.5 % | 5.5 % | 2.7 % | -| Variable Slope 2 | 40 % | 40 % | 80 % | -| Uoptimal | 90 % | 90 % | 90 % | -| Flashloanable | ENABLED | ENABLED | ENABLED | -| Siloed Borrowing | DISABLED | DISABLED | DISABLED | -| Borrowable in Isolation | DISABLED | DISABLED | DISABLED | -| Oracle | [Capped USDC/USD](https://soneium.blockscout.com/address/0xe9d6696fc74a8ef545d2c9c842f820763407e778?tab=read_write_contract) | [Capped USDT/USD](https://soneium.blockscout.com/address/0x01bcEb741614D4388028EaF3284DCB04386c30D2) | [Chainlink ETH/USD](https://soneium.blockscout.com/address/0x291cF980BA12505D65ee01BDe0882F1d5e533525) | -| Oracle Underlying feed | [Chainlink USDC/USD](https://soneium.blockscout.com/address/0x46522a7fD5bD5E7aaFF862C17E116152e07d7158) | [Chainlink USDT/USD](https://soneium.blockscout.com/address/0xE92d289831823c96C22592952C1cfA2584a65038) | N/A | -| Oracle Latest Answer (18MAY2025) | $0.99987956 | $1.00022312 | $2499.1478 | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://soneium.blockscout.com/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for the underlying tokens listed and their corresponding aTokens. - -### Security procedures - -- The proposal execution is simulated within the tests and the resulting pool configuration is tested for correctness. -- The deployed pool and other permissions have been programmatically verified, which can be found on the [aave-permissions-book](TODO) -- In addition, we have also checked the code diffs of the deployed sonic contracts with the production instance, which can be found [here](https://github.com/bgd-labs/aave-v3-origin/pull/58). - -## References - -- Implementation: [AaveV3Soneium](https://github.com/bgd-labs/aave-proposals-v3/blob/4b5e8cd726fd68ad45bfec57cda17fe8d7be319c/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol) -- Tests: [AaveV3Soneium](https://github.com/bgd-labs/aave-proposals-v3/blob/4b5e8cd726fd68ad45bfec57cda17fe8d7be319c/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0xb996bda7e60f85de7f6f2d9f7f6c15ddddfbd871465d8f00b846f8ab014a5953) -- [Discussion](https://governance.aave.com/t/arfc-deploy-aave-on-soneium/21204/9) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation_20250518.s.sol b/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation_20250518.s.sol deleted file mode 100644 index 3feb65cc7..000000000 --- a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation_20250518.s.sol +++ /dev/null @@ -1,60 +0,0 @@ -// 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, SoneiumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Soneium_AaveV33SoneiumActivation_20250518} from './AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol'; - -/** - * @dev Deploy Soneium - * deploy-command: make deploy-ledger contract=src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation_20250518.s.sol:DeploySoneium chain=soneium - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AaveV33SoneiumActivation_20250518.s.sol/1868/run-latest.json - */ -contract DeploySoneium is SoneiumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Soneium_AaveV33SoneiumActivation_20250518).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/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation_20250518.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 actionsSoneium = new IPayloadsControllerCore.ExecutionAction[](1); - actionsSoneium[0] = GovV3Helpers.buildAction( - type(AaveV3Soneium_AaveV33SoneiumActivation_20250518).creationCode - ); - payloads[0] = GovV3Helpers.buildSoneiumPayload(vm, actionsSoneium); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV33SoneiumActivation.md' - ) - ); - } -} diff --git a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol b/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol deleted file mode 100644 index 337cfa08e..000000000 --- a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol +++ /dev/null @@ -1,126 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Soneium} from 'aave-address-book/AaveV3Soneium.sol'; -import {MiscSoneium} from 'aave-address-book/MiscSoneium.sol'; -import {AaveV3PayloadSoneium} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadSoneium.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -/** - * @title Aave V3.3 Soneium Activation - * @author BGD Labs (@bgdlabs) - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0xb996bda7e60f85de7f6f2d9f7f6c15ddddfbd871465d8f00b846f8ab014a5953 - * - Discussion: https://governance.aave.com/t/arfc-deploy-aave-on-soneium/21204/9 - */ -contract AaveV3Soneium_AaveV33SoneiumActivation_20250518 is AaveV3PayloadSoneium { - using SafeERC20 for IERC20; - - address public constant LM_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - address public constant USDCe = 0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369; - uint256 public constant USDCe_SEED_AMOUNT = 10e6; - - address public constant USDT = 0x3A337a6adA9d885b6Ad95ec48F9b75f197b5AE35; - uint256 public constant USDT_SEED_AMOUNT = 10e6; - - address public constant WETH = 0x4200000000000000000000000000000000000006; - uint256 public constant WETH_SEED_AMOUNT = 0.01e18; - - function _postExecute() internal override { - _supplyAndConfigureLMAdmin(USDCe, USDCe_SEED_AMOUNT); - _supplyAndConfigureLMAdmin(USDT, USDT_SEED_AMOUNT); - _supplyAndConfigureLMAdmin(WETH, WETH_SEED_AMOUNT); - - AaveV3Soneium.ACL_MANAGER.addPoolAdmin(MiscSoneium.PROTOCOL_GUARDIAN); - AaveV3Soneium.ACL_MANAGER.addRiskAdmin(AaveV3Soneium.RISK_STEWARD); - } - - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](3); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: WETH, - assetSymbol: 'WETH', - priceFeed: 0x291cF980BA12505D65ee01BDe0882F1d5e533525, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 80_00, - liqThreshold: 83_00, - liqBonus: 6_00, - reserveFactor: 15_00, - supplyCap: 800, - borrowCap: 720, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 90_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 2_70, - variableRateSlope2: 80_00 - }) - }); - listings[1] = IAaveV3ConfigEngine.Listing({ - asset: USDCe, - assetSymbol: 'USDCe', - priceFeed: 0xe9d6696fc74A8ef545D2c9C842f820763407E778, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 75_00, - liqThreshold: 78_00, - liqBonus: 5_00, - reserveFactor: 10_00, - supplyCap: 8_000_000, - borrowCap: 7_200_000, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 90_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 5_50, - variableRateSlope2: 40_00 - }) - }); - listings[2] = IAaveV3ConfigEngine.Listing({ - asset: USDT, - assetSymbol: 'USDT', - priceFeed: 0x01bcEb741614D4388028EaF3284DCB04386c30D2, - enabledToBorrow: EngineFlags.ENABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 75_00, - liqThreshold: 78_00, - liqBonus: 5_00, - reserveFactor: 10_00, - supplyCap: 5_000_000, - borrowCap: 4_500_000, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 90_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 5_50, - variableRateSlope2: 40_00 - }) - }); - - return listings; - } - - function _supplyAndConfigureLMAdmin(address asset, uint256 seedAmount) internal { - IERC20(asset).forceApprove(address(AaveV3Soneium.POOL), seedAmount); - AaveV3Soneium.POOL.supply(asset, seedAmount, address(AaveV3Soneium.DUST_BIN), 0); - - address aToken = AaveV3Soneium.POOL.getReserveAToken(asset); - IEmissionManager(AaveV3Soneium.EMISSION_MANAGER).setEmissionAdmin(asset, LM_ADMIN); - IEmissionManager(AaveV3Soneium.EMISSION_MANAGER).setEmissionAdmin(aToken, LM_ADMIN); - } -} diff --git a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.t.sol b/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.t.sol deleted file mode 100644 index 77ac38cf5..000000000 --- a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.t.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Soneium} from 'aave-address-book/AaveV3Soneium.sol'; -import {MiscSoneium} from 'aave-address-book/MiscSoneium.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Soneium_AaveV33SoneiumActivation_20250518} from './AaveV3Soneium_AaveV33SoneiumActivation_20250518.sol'; - -/** - * @dev Test for AaveV3Soneium_AaveV33SoneiumActivation_20250518 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/AaveV3Soneium_AaveV33SoneiumActivation_20250518.t.sol -vv - */ -contract AaveV3Soneium_AaveV33SoneiumActivation_20250518_Test is ProtocolV3TestBase { - AaveV3Soneium_AaveV33SoneiumActivation_20250518 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('soneium'), 7218882); - proposal = new AaveV3Soneium_AaveV33SoneiumActivation_20250518(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Soneium_AaveV33SoneiumActivation_20250518', - AaveV3Soneium.POOL, - address(proposal) - ); - } - - function test_collectorHasFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - - _validateCollectorFundsAndLMAdmin(proposal.USDCe(), proposal.USDCe_SEED_AMOUNT()); - _validateCollectorFundsAndLMAdmin(proposal.USDT(), proposal.USDT_SEED_AMOUNT()); - _validateCollectorFundsAndLMAdmin(proposal.WETH(), proposal.WETH_SEED_AMOUNT()); - } - - function test_guardianPoolAdmin() public { - assertFalse(AaveV3Soneium.ACL_MANAGER.isPoolAdmin(MiscSoneium.PROTOCOL_GUARDIAN)); - executePayload(vm, address(proposal)); - assertTrue(AaveV3Soneium.ACL_MANAGER.isPoolAdmin(MiscSoneium.PROTOCOL_GUARDIAN)); - } - - function test_riskStewardRiskAdmin() public { - assertFalse(AaveV3Soneium.ACL_MANAGER.isRiskAdmin(AaveV3Soneium.RISK_STEWARD)); - executePayload(vm, address(proposal)); - assertTrue(AaveV3Soneium.ACL_MANAGER.isRiskAdmin(AaveV3Soneium.RISK_STEWARD)); - } - - function _validateCollectorFundsAndLMAdmin(address asset, uint256 seedAmount) internal view { - (address aToken, , ) = AaveV3Soneium.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( - asset - ); - assertGe(IERC20(aToken).balanceOf(address(AaveV3Soneium.DUST_BIN)), seedAmount); - - assertEq( - IEmissionManager(AaveV3Soneium.EMISSION_MANAGER).getEmissionAdmin(asset), - proposal.LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3Soneium.EMISSION_MANAGER).getEmissionAdmin(aToken), - proposal.LM_ADMIN() - ); - } -} diff --git a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/config.ts b/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/config.ts deleted file mode 100644 index ba35eda99..000000000 --- a/src/20250518_AaveV3Soneium_AaveV33SoneiumActivation/config.ts +++ /dev/null @@ -1,98 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Soneium'], - title: 'Aave V3.3 Soneium Activation', - shortName: 'AaveV33SoneiumActivation', - date: '20250518', - author: 'BGD Labs (@bgdlabs)', - discussion: 'https://governance.aave.com/t/arfc-deploy-aave-on-soneium/21204/9', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0xb996bda7e60f85de7f6f2d9f7f6c15ddddfbd871465d8f00b846f8ab014a5953', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Soneium: { - configs: { - ASSET_LISTING: [ - { - assetSymbol: 'USDCe', - decimals: 6, - priceFeed: '0xe9d6696fc74a8ef545d2c9c842f820763407e778', - ltv: '75', - liqThreshold: '78', - liqBonus: '5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '8000000', - borrowCap: '7200000', - rateStrategyParams: { - optimalUtilizationRate: '90', - baseVariableBorrowRate: '0', - variableRateSlope1: '5.5', - variableRateSlope2: '40', - }, - asset: '0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - { - assetSymbol: 'USDT', - decimals: 6, - priceFeed: '0x01bcEb741614D4388028EaF3284DCB04386c30D2', - ltv: '75', - liqThreshold: '78', - liqBonus: '5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '10', - supplyCap: '5000000', - borrowCap: '4500000', - rateStrategyParams: { - optimalUtilizationRate: '90', - baseVariableBorrowRate: '0', - variableRateSlope1: '5.5', - variableRateSlope2: '40', - }, - asset: '0x3A337a6adA9d885b6Ad95ec48F9b75f197b5AE35', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - { - assetSymbol: 'WETH', - decimals: 18, - priceFeed: '0x291cF980BA12505D65ee01BDe0882F1d5e533525', - ltv: '80', - liqThreshold: '83', - liqBonus: '6', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'ENABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '15', - supplyCap: '800', - borrowCap: '720', - rateStrategyParams: { - optimalUtilizationRate: '90', - baseVariableBorrowRate: '0', - variableRateSlope1: '2.7', - variableRateSlope2: '80', - }, - asset: '0x4200000000000000000000000000000000000006', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 7217831}, - }, - }, -}; diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index a6990707c..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV2Ethereum_ConfigurationMaintenance_20250519 is IProposalGenericExecutor { - function execute() external { - AaveV2Ethereum.POOL_CONFIGURATOR.setReserveInterestRateStrategyAddress( - AaveV2EthereumAssets.renFIL_UNDERLYING, - 0x311C866D55456e465e314A3E9830276B438A73f0 - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 18ebf45e5..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; -import {AaveV2Ethereum_ConfigurationMaintenance_20250519} from './AaveV2Ethereum_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV2Ethereum_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV2Ethereum_ConfigurationMaintenance_20250519_Test is ProtocolV2TestBase { - AaveV2Ethereum_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22516931); - proposal = new AaveV2Ethereum_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV2Ethereum_ConfigurationMaintenance_20250519', - AaveV2Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 711754640..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ArbitrumAssets, AaveV3ArbitrumEModes} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Arbitrum_ConfigurationMaintenance_20250519 is AaveV3PayloadArbitrum { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - return borrowUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](7); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.DAI_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.USDC_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.USDT_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.EURS_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[6] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ArbitrumAssets.weETH_UNDERLYING, - eModeCategory: AaveV3ArbitrumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index df437ca53..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Arbitrum_ConfigurationMaintenance_20250519} from './AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Arbitrum_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Arbitrum_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Arbitrum_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('arbitrum'), 338308542); - proposal = new AaveV3Arbitrum_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Arbitrum_ConfigurationMaintenance_20250519', - AaveV3Arbitrum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 11c3e9487..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3AvalancheAssets, AaveV3AvalancheEModes} from 'aave-address-book/AaveV3Avalanche.sol'; -import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Avalanche_ConfigurationMaintenance_20250519 is AaveV3PayloadAvalanche { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3AvalancheAssets.FRAX_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - return borrowUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](6); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.DAIe_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.USDC_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.USDt_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.sAVAX_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.AVAX_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.FRAX_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3AvalancheAssets.MAI_UNDERLYING, - eModeCategory: AaveV3AvalancheEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 24353f741..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Avalanche_ConfigurationMaintenance_20250519} from './AaveV3Avalanche_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Avalanche_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Avalanche_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Avalanche_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('avalanche'), 62326137); - proposal = new AaveV3Avalanche_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Avalanche_ConfigurationMaintenance_20250519', - AaveV3Avalanche.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index ce6d62b32..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3BaseAssets, AaveV3BaseEModes} from 'aave-address-book/AaveV3Base.sol'; -import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Base_ConfigurationMaintenance_20250519 is AaveV3PayloadBase { - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](3); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3BaseAssets.cbETH_UNDERLYING, - eModeCategory: AaveV3BaseEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3BaseAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3BaseEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3BaseAssets.weETH_UNDERLYING, - eModeCategory: AaveV3BaseEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 0c689b1a1..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Base_ConfigurationMaintenance_20250519} from './AaveV3Base_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Base_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Base_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Base_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 30434021); - proposal = new AaveV3Base_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Base_ConfigurationMaintenance_20250519', AaveV3Base.POOL, address(proposal)); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 3ca23c420..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumAssets, AaveV3EthereumEModes} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Ethereum_ConfigurationMaintenance_20250519 is AaveV3PayloadEthereum { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](4); - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.LBTC_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - borrowUpdates[1] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.rsETH_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - borrowUpdates[2] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.SNX_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - borrowUpdates[3] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.FRAX_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - return borrowUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](6); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.cbETH_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.rETH_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.weETH_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.osETH_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.ETHx_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 2606cf7e9..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_ConfigurationMaintenance_20250519} from './AaveV3Ethereum_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Ethereum_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Ethereum_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Ethereum_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22516931); - proposal = new AaveV3Ethereum_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_ConfigurationMaintenance_20250519', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 13372b8b5..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3GnosisAssets, AaveV3GnosisEModes} from 'aave-address-book/AaveV3Gnosis.sol'; -import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Gnosis_ConfigurationMaintenance_20250519 is AaveV3PayloadGnosis { - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](1); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3GnosisAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3GnosisEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 86c184b48..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Gnosis_ConfigurationMaintenance_20250519} from './AaveV3Gnosis_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Gnosis_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Gnosis_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Gnosis_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('gnosis'), 40141257); - proposal = new AaveV3Gnosis_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Gnosis_ConfigurationMaintenance_20250519', - AaveV3Gnosis.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 4366b5dd5..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3OptimismAssets, AaveV3OptimismEModes} from 'aave-address-book/AaveV3Optimism.sol'; -import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Optimism_ConfigurationMaintenance_20250519 is AaveV3PayloadOptimism { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3OptimismAssets.sUSD_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - return borrowUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](7); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.DAI_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.USDC_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.USDT_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.sUSD_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.rETH_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[6] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3OptimismAssets.USDCn_UNDERLYING, - eModeCategory: AaveV3OptimismEModes.STABLECOINS, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 3211117e1..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Optimism_ConfigurationMaintenance_20250519} from './AaveV3Optimism_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Optimism_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Optimism_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Optimism_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('optimism'), 136029207); - proposal = new AaveV3Optimism_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Optimism_ConfigurationMaintenance_20250519', - AaveV3Optimism.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 601b259d3..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3PolygonAssets, AaveV3PolygonEModes} from 'aave-address-book/AaveV3Polygon.sol'; -import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Polygon_ConfigurationMaintenance_20250519 is AaveV3PayloadPolygon { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3PolygonAssets.MaticX_UNDERLYING, - enabledToBorrow: EngineFlags.DISABLED, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: EngineFlags.KEEP_CURRENT - }); - return borrowUpdates; - } - - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](3); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3PolygonAssets.stMATIC_UNDERLYING, - eModeCategory: AaveV3PolygonEModes.MATIC_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3PolygonAssets.MaticX_UNDERLYING, - eModeCategory: AaveV3PolygonEModes.MATIC_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3PolygonAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3PolygonEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 7b5c4ed73..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Polygon_ConfigurationMaintenance_20250519} from './AaveV3Polygon_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Polygon_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Polygon_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Polygon_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 71707823); - proposal = new AaveV3Polygon_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Polygon_ConfigurationMaintenance_20250519', - AaveV3Polygon.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index 261a49d39..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ScrollAssets, AaveV3ScrollEModes} from 'aave-address-book/AaveV3Scroll.sol'; -import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3Scroll_ConfigurationMaintenance_20250519 is AaveV3PayloadScroll { - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ScrollAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3ScrollEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ScrollAssets.weETH_UNDERLYING, - eModeCategory: AaveV3ScrollEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.t.sol b/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index 063d81422..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Scroll_ConfigurationMaintenance_20250519} from './AaveV3Scroll_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3Scroll_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3Scroll_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3Scroll_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('scroll'), 15635366); - proposal = new AaveV3Scroll_ConfigurationMaintenance_20250519(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Scroll_ConfigurationMaintenance_20250519', - AaveV3Scroll.POOL, - address(proposal) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance.md b/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance.md deleted file mode 100644 index 2ef93d68e..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "Configuration maintenance" -author: "BGD Labs @bgdlabs" -discussions: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 ---- - -## Simple Summary - -This proposal aims to fix inconsistent / suboptimal configurations across various pools. - -## Motivation - -### eModes - -When Aave v3.2 went live, the existing eModes were just migrated to liquid eModes. What this means that if an asset was flagged as e.g. eMode `1` on v3.2 it was enabled as borrowable and as collateral on eMode `1`. -This was done to not disrupt existing positions and also to isolate the upgrade from any configuration changes. -As some time has passed now, it is a good idea to disable unintended eMode configurations, namely we propose to: - -- deprecate stablecoin eModes by disabling all borrowable assets -- deprecated LSTs from being borrowable in the "correlated" eModes category - -This will not have any effects on existing positions, but will prevent increased borrows of the disabled assets within the eMode. - -### Borrowable - -Some assets that were originally listed as borrowable have later been "disabled" by setting their borrowCap to 1 via risk stewards. -While this workaround suits the needs, the "correct" thing to do, is to disable borrowing. Therefore this proposal permanently disables borrowing for: - -- FRAX, SNX, LBTC and rsETH on Mainnet -- sUSD on Optimism -- MaticX on Polygon -- FRAX on Arbitrum -- FRAX on Avalanche - -### v2 Rates - -In [aip 261](https://vote.onaave.com/proposal/?proposalId=261) the rates for v2 assets were aligned to standardize interest rates. -This resulted in some unintended increase in interest rate on renFil, which has close to zero secondary market liquidity and thus makes it almost impossible for borrowers to repay their debt. -Therefore we recommend reverting to the previous ZeroInterestRateStrategy to cut growth. - -## Specification - -The proposal uses the config engine to implemented the described changes. - -| description | borrowable before | borrowable after | -| -------------------------- | --------------------------------------------- | ---------------- | -| Arbitrum: Stablecoins | DAI, USDC, USD₮0, EURS, USDC | | -| Arbitrum: ETH correlated | WETH, wstETH, weETH | WETH | -| Avalanche: Stablecoins | DAI.e, USDC, USDt, FRAX, MAI | | -| Avalanche: AVAX correlated | WAVAX, sAVAX | WAVAX | -| Base: ETH correlated | WETH, cbETH, wstETH, weETH | WETH | -| Ethereum: ETH correlated | WETH, wstETH, cbETH, rETH, weETH, osETH, ETHx | WETH | -| Gnosis: ETH correlated | WETH, wstETH | WETH | -| Optimism:Stablecoins | DAI, USDC, USDT, sUSD, USDC | | -| Optimism: ETH correlated | WETH, wstETH, rETH | WETH | -| Polygon: Matic correlated | WPOL, stMATIC, MaticX | WPOL | -| Polygon: ETH correlated | WETH, wstETH | WETH | -| Scroll: ETH correlated | WETH, wstETH, weETH | WETH | -| ZkSync: ETH correlated | WETH, wstETH | WETH | - -In addition it calls to revert the interest rate on Aave V2 Ethereum: - -``` -AaveV2Ethereum.POOL_CONFIGURATOR.setReserveInterestRateStrategyAddress( - AaveV2EthereumAssets.renFIL_UNDERLYING, - 0x311C866D55456e465e314A3E9830276B438A73f0 -); -``` - -## References - -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV2Ethereum_ConfigurationMaintenance_20250519.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Ethereum_ConfigurationMaintenance_20250519.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Polygon_ConfigurationMaintenance_20250519.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Avalanche_ConfigurationMaintenance_20250519.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Optimism_ConfigurationMaintenance_20250519.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Arbitrum_ConfigurationMaintenance_20250519.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Base_ConfigurationMaintenance_20250519.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Gnosis_ConfigurationMaintenance_20250519.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/src/20250519_Multi_ConfigurationMaintenance/AaveV3Scroll_ConfigurationMaintenance_20250519.t.sol), [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/fc13a3759c6a119fb02bb260978af839e1616b4a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.t.sol) -- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/86) -- [SNX, sUSD & FRAX risk-off](https://governance.aave.com/t/chaos-labs-risk-stewards-adjustment-of-supply-caps-borrow-caps-and-debt-ceiling-on-aave-v3-05-19-25/22114) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol b/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol deleted file mode 100644 index c2d7f9c4d..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol +++ /dev/null @@ -1,286 +0,0 @@ -// 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 {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; -import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript, ScrollScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV2Ethereum_ConfigurationMaintenance_20250519} from './AaveV2Ethereum_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Ethereum_ConfigurationMaintenance_20250519} from './AaveV3Ethereum_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Polygon_ConfigurationMaintenance_20250519} from './AaveV3Polygon_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Avalanche_ConfigurationMaintenance_20250519} from './AaveV3Avalanche_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Optimism_ConfigurationMaintenance_20250519} from './AaveV3Optimism_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Arbitrum_ConfigurationMaintenance_20250519} from './AaveV3Arbitrum_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Base_ConfigurationMaintenance_20250519} from './AaveV3Base_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Gnosis_ConfigurationMaintenance_20250519} from './AaveV3Gnosis_ConfigurationMaintenance_20250519.sol'; -import {AaveV3Scroll_ConfigurationMaintenance_20250519} from './AaveV3Scroll_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV2Ethereum_ConfigurationMaintenance_20250519).creationCode - ); - address payload1 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](2); - actions[0] = GovV3Helpers.buildAction(payload0); - actions[1] = GovV3Helpers.buildAction(payload1); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Avalanche - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployAvalanche chain=avalanche - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/43114/run-latest.json - */ -contract DeployAvalanche is AvalancheScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Avalanche_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Optimism - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployOptimism chain=optimism - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/10/run-latest.json - */ -contract DeployOptimism is OptimismScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Optimism_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Arbitrum - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployArbitrum chain=arbitrum - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/42161/run-latest.json - */ -contract DeployArbitrum is ArbitrumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Arbitrum_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/8453/run-latest.json - */ -contract DeployBase is BaseScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Gnosis - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployGnosis chain=gnosis - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/100/run-latest.json - */ -contract DeployGnosis is GnosisScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Gnosis_ConfigurationMaintenance_20250519).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Scroll - * deploy-command: make deploy-ledger contract=src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployScroll chain=scroll - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/ConfigurationMaintenance_20250519.s.sol/534352/run-latest.json - */ -contract DeployScroll is ScrollScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Scroll_ConfigurationMaintenance_20250519).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/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:CreateProposal chain=mainnet - */ -contract CreateProposal is EthereumScript { - function run() external { - // create payloads - PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](9); - - // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](2); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV2Ethereum_ConfigurationMaintenance_20250519).creationCode - ); - actionsEthereum[1] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_ConfigurationMaintenance_20250519).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_ConfigurationMaintenance_20250519).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); - actionsAvalanche[0] = GovV3Helpers.buildAction( - type(AaveV3Avalanche_ConfigurationMaintenance_20250519).creationCode - ); - payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); - actionsOptimism[0] = GovV3Helpers.buildAction( - type(AaveV3Optimism_ConfigurationMaintenance_20250519).creationCode - ); - payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsArbitrum[0] = GovV3Helpers.buildAction( - type(AaveV3Arbitrum_ConfigurationMaintenance_20250519).creationCode - ); - payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_ConfigurationMaintenance_20250519).creationCode - ); - payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); - actionsGnosis[0] = GovV3Helpers.buildAction( - type(AaveV3Gnosis_ConfigurationMaintenance_20250519).creationCode - ); - payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); - actionsScroll[0] = GovV3Helpers.buildAction( - type(AaveV3Scroll_ConfigurationMaintenance_20250519).creationCode - ); - payloads[7] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); - - payloads[8] = PayloadsControllerUtils.Payload({ - chain: ChainIds.ZKSYNC, - accessLevel: PayloadsControllerUtils.AccessControl.Level_1, - payloadsController: address(GovernanceV3ZkSync.PAYLOADS_CONTROLLER), - payloadId: 24 - }); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance.md' - ) - ); - } -} diff --git a/src/20250519_Multi_ConfigurationMaintenance/config.ts b/src/20250519_Multi_ConfigurationMaintenance/config.ts deleted file mode 100644 index 5a6c2ac42..000000000 --- a/src/20250519_Multi_ConfigurationMaintenance/config.ts +++ /dev/null @@ -1,306 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - author: 'BGD Labs @bgdlabs', - pools: [ - 'AaveV2Ethereum', - 'AaveV3Ethereum', - 'AaveV3Polygon', - 'AaveV3Avalanche', - 'AaveV3Optimism', - 'AaveV3Arbitrum', - 'AaveV3Base', - 'AaveV3Gnosis', - 'AaveV3Scroll', - 'AaveV3ZkSync', - ], - title: 'Configuration maintenance', - shortName: 'ConfigurationMaintenance', - date: '20250519', - discussion: '', - snapshot: '', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV2Ethereum: {configs: {}, cache: {blockNumber: 22516931}}, - AaveV3Ethereum: { - configs: { - EMODES_ASSETS: [ - { - asset: 'wstETH', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'cbETH', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'rETH', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'weETH', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'osETH', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'ETHx', - eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 22516931}, - }, - AaveV3Polygon: { - configs: { - EMODES_ASSETS: [ - { - asset: 'stMATIC', - eModeCategory: 'AaveV3PolygonEModes.MATIC_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'MaticX', - eModeCategory: 'AaveV3PolygonEModes.MATIC_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'wstETH', - eModeCategory: 'AaveV3PolygonEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 71707823}, - }, - AaveV3Avalanche: { - configs: { - EMODES_ASSETS: [ - { - asset: 'DAIe', - eModeCategory: 'AaveV3AvalancheEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDC', - eModeCategory: 'AaveV3AvalancheEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDt', - eModeCategory: 'AaveV3AvalancheEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'sAVAX', - eModeCategory: 'AaveV3AvalancheEModes.AVAX_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'FRAX', - eModeCategory: 'AaveV3AvalancheEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'MAI', - eModeCategory: 'AaveV3AvalancheEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 62326137}, - }, - AaveV3Optimism: { - configs: { - EMODES_ASSETS: [ - { - asset: 'DAI', - eModeCategory: 'AaveV3OptimismEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDC', - eModeCategory: 'AaveV3OptimismEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDT', - eModeCategory: 'AaveV3OptimismEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'sUSD', - eModeCategory: 'AaveV3OptimismEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'wstETH', - eModeCategory: 'AaveV3OptimismEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'rETH', - eModeCategory: 'AaveV3OptimismEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDCn', - eModeCategory: 'AaveV3OptimismEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 136029207}, - }, - AaveV3Arbitrum: { - configs: { - EMODES_ASSETS: [ - { - asset: 'DAI', - eModeCategory: 'AaveV3ArbitrumEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDC', - eModeCategory: 'AaveV3ArbitrumEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDT', - eModeCategory: 'AaveV3ArbitrumEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'EURS', - eModeCategory: 'AaveV3ArbitrumEModes.STABLECOINS', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'wstETH', - eModeCategory: 'AaveV3ArbitrumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'USDCn', - eModeCategory: 'AaveV3ArbitrumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'weETH', - eModeCategory: 'AaveV3ArbitrumEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 338308542}, - }, - AaveV3Base: { - configs: { - EMODES_ASSETS: [ - { - asset: 'cbETH', - eModeCategory: 'AaveV3BaseEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'wstETH', - eModeCategory: 'AaveV3BaseEModes.ETH_CORRELATED', - collateral: 'DISABLED', - borrowable: 'DISABLED', - }, - { - asset: 'weETH', - eModeCategory: 'AaveV3BaseEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 30434021}, - }, - AaveV3Gnosis: { - configs: { - EMODES_ASSETS: [ - { - asset: 'wstETH', - eModeCategory: 'AaveV3GnosisEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 40141257}, - }, - AaveV3Scroll: { - configs: { - EMODES_ASSETS: [ - { - asset: 'wstETH', - eModeCategory: 'AaveV3ScrollEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - { - asset: 'weETH', - eModeCategory: 'AaveV3ScrollEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 15635366}, - }, - AaveV3ZkSync: { - configs: { - EMODES_ASSETS: [ - { - asset: 'wstETH', - eModeCategory: 'AaveV3ZkSyncEModes.ETH_CORRELATED', - collateral: 'KEEP_CURRENT', - borrowable: 'DISABLED', - }, - ], - }, - cache: {blockNumber: 60633796}, - }, - }, -}; diff --git a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol b/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol deleted file mode 100644 index b195aa138..000000000 --- a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol +++ /dev/null @@ -1,377 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Ethereum, AaveV3EthereumAssets, AaveV3EthereumEModes} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol'; -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; - -import {IAaveStewardInjector} from '../interfaces/IAaveStewardInjector.sol'; -/** - * @title Onboard USDe July expiry PT tokens and eUSDe August expiry PT tokens on V3 Core - * @author Aave-Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-onboard-usde-july-expiry-pt-tokens-on-aave-v3-core-instance/22041 - */ -contract AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520 is - AaveV3PayloadEthereum -{ - using CollectorUtils for ICollector; - using SafeCast for uint256; - using SafeERC20 for IERC20; - - address public constant LM_ACI_ETH = 0xac140648435d03f784879cd789130F22Ef588Fcd; - - address public constant eUSDe = 0x90D2af7d622ca3141efA4d8f1F24d86E5974Cc8F; - uint256 public constant eUSDe_SEED_AMOUNT = 100e18; - - address public constant PT_USDe_31JUL2025 = 0x917459337CaAC939D41d7493B3999f571D20D667; - uint256 public constant PT_USDe_31JUL2025_SEED_AMOUNT = 100e18; - - address public constant PT_eUSDe_14AUG2025 = 0x14Bdc3A3AE09f5518b923b69489CBcAfB238e617; - uint256 public constant PT_eUSDe_14AUG2025_SEED_AMOUNT = 100e18; - - function _postExecute() internal override { - // we whitelist eModeId 10, 12-14 on the injector - address[] memory marketsToWhitelist = new address[](4); - marketsToWhitelist[0] = address(uint160(10)); // on the injector we encode eModeId to address - marketsToWhitelist[1] = address(uint160(12)); // on the injector we encode eModeId to address - marketsToWhitelist[2] = address(uint160(13)); // on the injector we encode eModeId to address - marketsToWhitelist[3] = address(uint160(14)); // on the injector we encode eModeId to address - IAaveStewardInjector(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).addMarkets(marketsToWhitelist); - - // we supply the seed amount of eUSDe - IERC20(eUSDe).forceApprove(address(AaveV3Ethereum.POOL), eUSDe_SEED_AMOUNT); - AaveV3Ethereum.POOL.supply(eUSDe, eUSDe_SEED_AMOUNT, AaveV3Ethereum.DUST_BIN, 0); - - // we set ACI as emission admin - address aeUSDe = AaveV3Ethereum.POOL.getReserveAToken(eUSDe); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(eUSDe, LM_ACI_ETH); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aeUSDe, LM_ACI_ETH); - - // we supply the seed amount of PT-USDe-31JUL2025 - IERC20(PT_USDe_31JUL2025).forceApprove( - address(AaveV3Ethereum.POOL), - PT_USDe_31JUL2025_SEED_AMOUNT - ); - AaveV3Ethereum.POOL.supply( - PT_USDe_31JUL2025, - PT_USDe_31JUL2025_SEED_AMOUNT, - AaveV3Ethereum.DUST_BIN, - 0 - ); - - // we set ACI as emission admin - address aPT_USDe_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken(PT_USDe_31JUL2025); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - PT_USDe_31JUL2025, - LM_ACI_ETH - ); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - aPT_USDe_31JUL2025, - LM_ACI_ETH - ); - - // we supply the seed amount of PT-eUSDe-14AUG2025 - IERC20(PT_eUSDe_14AUG2025).forceApprove( - address(AaveV3Ethereum.POOL), - PT_eUSDe_14AUG2025_SEED_AMOUNT - ); - AaveV3Ethereum.POOL.supply( - PT_eUSDe_14AUG2025, - PT_eUSDe_14AUG2025_SEED_AMOUNT, - AaveV3Ethereum.DUST_BIN, - 0 - ); - - // we set ACI as emission admin - address aPT_eUSDe_14AUG2025 = AaveV3Ethereum.POOL.getReserveAToken(PT_eUSDe_14AUG2025); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - PT_eUSDe_14AUG2025, - LM_ACI_ETH - ); - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin( - aPT_eUSDe_14AUG2025, - LM_ACI_ETH - ); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](5); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 10, - ltv: 88_10, - liqThreshold: 91_10, - liqBonus: 3_90, - label: 'PT-USDe Stablecoins July 2025' - }); - eModeUpdates[1] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 12, - ltv: 90_10, - liqThreshold: 92_10, - liqBonus: 2_80, - label: 'PT-USDe USDe July 2025' - }); - eModeUpdates[2] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 13, - ltv: 87_10, - liqThreshold: 90_10, - liqBonus: 4_10, - label: 'PT-eUSDe Stablecoins August 2025' - }); - eModeUpdates[3] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 14, - ltv: 89_00, - liqThreshold: 91_00, - liqBonus: 3_10, - label: 'PT-eUSDe USDe August 2025' - }); - eModeUpdates[4] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 15, - ltv: 90_00, - liqThreshold: 93_00, - liqBonus: 2_00, - label: 'eUSDe_Stablecoin' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](21); - - // PT-USDe JUL 2025 stablecoin - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_USDe_31JUL2025, - eModeCategory: 10, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - eModeCategory: 10, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 10, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 10, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 10, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - // PT-USDe JUL 2025 USDe - assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_USDe_31JUL2025, - eModeCategory: 12, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[6] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - eModeCategory: 12, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.ENABLED - }); - - // PT-eUSDe AUG 2025 stablecoin - assetEModeUpdates[7] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_eUSDe_14AUG2025, - eModeCategory: 13, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[8] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: eUSDe, - eModeCategory: 13, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[9] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 13, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[10] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 13, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[11] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 13, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - // PT-eUSDe AUG 2025 USDe - assetEModeUpdates[12] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: PT_eUSDe_14AUG2025, - eModeCategory: 14, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[13] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: eUSDe, - eModeCategory: 14, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[14] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDe_UNDERLYING, - eModeCategory: 14, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - // eUSDe stablecoin - assetEModeUpdates[15] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDC_UNDERLYING, - eModeCategory: 15, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[16] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: eUSDe, - eModeCategory: 15, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[17] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDT_UNDERLYING, - eModeCategory: 15, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - assetEModeUpdates[18] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.USDS_UNDERLYING, - eModeCategory: 15, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - // ARCF addendum - assetEModeUpdates[19] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: eUSDe, - eModeCategory: AaveV3EthereumEModes.PT_EUSDE_STABLECOINS_MAY_2025, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[20] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3EthereumAssets.sUSDe_UNDERLYING, - eModeCategory: AaveV3EthereumEModes.PT_SUSDE_STABLECOINS_JUL_2025, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - - return assetEModeUpdates; - } - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](3); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: PT_USDe_31JUL2025, - assetSymbol: 'PT_USDe_31JUL2025', - priceFeed: 0x6b99e86B48Fee533B7Bee602e7959f024051Eca0, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 45_00, - supplyCap: 40_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - listings[1] = IAaveV3ConfigEngine.Listing({ - asset: PT_eUSDe_14AUG2025, - assetSymbol: 'PT_eUSDe_14AUG2025', - priceFeed: 0x03f9bA9A897241985c1f12bCe97fAC1B0bd4a7A7, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 45_00, - supplyCap: 100_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - listings[2] = IAaveV3ConfigEngine.Listing({ - asset: eUSDe, - assetSymbol: 'eUSDe', - priceFeed: 0xc7Ad695ac0ae38Ae308640897E51468977A862a2, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 45_00, - supplyCap: 550_000_000, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.t.sol b/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.t.sol deleted file mode 100644 index 58ff6fb87..000000000 --- a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.t.sol +++ /dev/null @@ -1,226 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -import {DataTypes} from 'aave-v3-origin/contracts/protocol/libraries/types/DataTypes.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520} from './AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol'; - -import {AutomationCompatibleInterface} from '../interfaces/AutomationCompatibleInterface.sol'; -import {IAaveStewardInjector} from '../interfaces/IAaveStewardInjector.sol'; -import {IRiskOracle} from '../interfaces/IRiskOracle.sol'; -/** - * @dev Test for AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.t.sol -vv - */ -contract AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520_Test is - ProtocolV3TestBase -{ - AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520 - internal proposal; - address public constant RISK_ORACLE_OWNER = 0x42939e82DF15afc586bb95f7dD69Afb6Dc24A6f9; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22531404); - proposal = new AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520', - AaveV3Ethereum.POOL, - address(proposal) - ); - } - - function test_inject_EMode10UpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 10; - uint256 ltv = 88_10; - uint256 liqThreshold = 91_10; - uint256 liqBonus = 3_90; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).performUpkeep( - performData - ); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function test_inject_EMode12UpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 12; - uint256 ltv = 90_10; - uint256 liqThreshold = 92_10; - uint256 liqBonus = 2_80; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).performUpkeep( - performData - ); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function test_inject_EMode13UpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 13; - uint256 ltv = 87_10; - uint256 liqThreshold = 90_10; - uint256 liqBonus = 4_10; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).performUpkeep( - performData - ); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function test_inject_EMode14UpdateToProtocol() public { - executePayload(vm, address(proposal)); - - uint8 eModeId = 14; - uint256 ltv = 89_00; - uint256 liqThreshold = 91_00; - uint256 liqBonus = 3_10; - _addUpdateToRiskOracle(eModeId, ltv, liqThreshold, liqBonus); - - (bool upkeepNeeded, bytes memory performData) = AutomationCompatibleInterface( - AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE - ).checkUpkeep(''); - assertTrue(upkeepNeeded); - - AutomationCompatibleInterface(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).performUpkeep( - performData - ); - DataTypes.CollateralConfig memory eModeConfig = AaveV3Ethereum - .POOL - .getEModeCategoryCollateralConfig(eModeId); - - assertEq(eModeConfig.ltv, ltv); - assertEq(eModeConfig.liquidationThreshold, liqThreshold); - assertEq(eModeConfig.liquidationBonus, 100_00 + liqBonus); - } - - function test_dustBinHasPT_USDe_31JUL2025Funds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_USDe_31JUL2025()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 100 * 10 ** 18); - } - - function test_PT_USDe_31JUL2025Admin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aPT_USDe_31JUL2025 = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_USDe_31JUL2025()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin( - proposal.PT_USDe_31JUL2025() - ), - proposal.LM_ACI_ETH() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aPT_USDe_31JUL2025), - proposal.LM_ACI_ETH() - ); - } - - function test_dustBinHasPT_eUSDe_14AUG2025Funds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.PT_eUSDe_14AUG2025()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 100 * 10 ** 18); - } - - function test_PT_eUSDe_14AUG2025Admin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aPT_eUSDe_14AUG2025 = AaveV3Ethereum.POOL.getReserveAToken( - proposal.PT_eUSDe_14AUG2025() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin( - proposal.PT_eUSDe_14AUG2025() - ), - proposal.LM_ACI_ETH() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aPT_eUSDe_14AUG2025), - proposal.LM_ACI_ETH() - ); - } - - function test_dustBinHaseUSDeFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken(proposal.eUSDe()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 100 * 10 ** 18); - } - - function test_eUSDeAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aeUSDe = AaveV3Ethereum.POOL.getReserveAToken(proposal.eUSDe()); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.eUSDe()), - proposal.LM_ACI_ETH() - ); - assertEq( - IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aeUSDe), - proposal.LM_ACI_ETH() - ); - } - - function _addUpdateToRiskOracle(uint8 eModeId, uint256 ltv, uint256 lt, uint256 lb) internal { - IAaveStewardInjector.EModeCategoryUpdate memory eModeParam = IAaveStewardInjector - .EModeCategoryUpdate({ltv: ltv, liqThreshold: lt, liqBonus: lb}); - - vm.startPrank(RISK_ORACLE_OWNER); - IRiskOracle(IAaveStewardInjector(AaveV3Ethereum.EDGE_INJECTOR_PENDLE_EMODE).RISK_ORACLE()) - .publishRiskParameterUpdate( - 'referenceId', - abi.encode(eModeParam), - 'EModeCategoryUpdate_Core', - address(uint160(eModeId)), - 'additionalData' - ); - vm.stopPrank(); - } -} diff --git a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core.md b/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core.md deleted file mode 100644 index 617d2d988..000000000 --- a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core.md +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: "Onboard eUSDe and eUSDe based PT token to Aave V3 Core" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/arfc-onboard-usde-july-expiry-pt-tokens-on-aave-v3-core-instance/22041" ---- - -## Simple Summary - -This proposal aims to onboard the eUSDe token as well as the USDe July expiry PT tokens and eUSDe August expiry PT tokens on the Aave V3 Core Instance. - -## Motivation - -Last month listing of various PT tokens where met with massive support from the community and growth for the protocol. To capitalize on this interest we suggest onboard two additional PT tokens to the Core instances. The two PT tokens selected are the same as previously onboarded with a later expiry date. - -## Specification - -### eUSDe - -The table below illustrates the configured risk parameters for **eUSDe** - -| Parameter | Value | -| ------------------------- | ----------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (eUSDe) | 550,000,000 | -| Borrow Cap (eUSDe) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 45 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | - -**Pricefeed details** - -| Parameter | Value | -| -------------------- | ----------------------------------------------------------------------------------------------------: | -| Oracle | [Capped eUSDe / USDe / USD ](https://etherscan.io/address/0xc7Ad695ac0ae38Ae308640897E51468977A862a2) | -| BASE/USD Oracle | [Chainlink USDT/USD](https://etherscan.io/address/0x3E7d1eAB13ad0104d2750B8863b489D65364e32D) | -| Ratio Provider | [eUSDe](https://etherscan.io/address/0x90D2af7d622ca3141efA4d8f1F24d86E5974Cc8F) | -| Oracle Latest Answer | (2025-05-20) USD 1.0002 | -| min snapshot | 1 day | -| max yearly growth | 0% | - -**eUSDe/Stablecoin E-Mode(id:15)** - -| Asset | eUSDe | USDC | USDT | USDS | -| ----------------- | ----- | ---- | ---- | ---- | -| Collateral | Yes | No | No | No | -| Borrowable | No | Yes | Yes | Yes | -| LTV | 90% | - | - | - | -| LT | 93% | - | - | - | -| Liquidation Bonus | 2% | - | - | - | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for eUSDe and the corresponding aToken. - -### PT_USDe_31JUL2025 - -The table below illustrates the configured risk parameters for **PT_USDe_31JUL2025** - -| Parameter | Value | -| ------------------------------ | ---------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (PT_USDe_31JUL2025) | 40,000,000 | -| Borrow Cap (PT_USDe_31JUL2025) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 45 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | - -**Pricefeed details** - -| Parameter | Value | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------: | -| Oracle | [PT Capped USDe USDT/USD linear discount 31JUL2025](https://etherscan.io/address/0x6b99e86b48fee533b7bee602e7959f024051eca0) | -| Underlying Oracle | [Capped USDT/USD](https://etherscan.io/address/0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8) | -| Underlying Oracle | [Chainlink USDT/USD](https://etherscan.io/address/0x3E7d1eAB13ad0104d2750B8863b489D65364e32D) | -| Oracle Latest Answer | (2025-05-21) USD .98398009 | -| discountRatePerYear | 8.47% | -| maxDiscountRatePerYear | 29.21% | - -**PT-USDe Stablecoins E-mode(id:10)** - -| **Asset** | **PT-USDe** | **USDe** | **USDC** | **USDT** | **USDS** | -| ----------------- | ---------------------- | -------- | -------- | -------- | -------- | -| Collateral | Yes | Yes | No | No | No | -| Borrowable | No | No | Yes | Yes | Yes | -| LTV | Subject to Risk Oracle | - | - | - | - | -| LT | Subject to Risk Oracle | - | - | - | - | -| Liquidation Bonus | Subject to Risk Oracle | - | - | - | - | - -**PT-USDe USDe E-mode(id:12)** - -| **Asset** | **PT-USDe** | **USDe** | -| ----------------- | ---------------------- | -------- | -| Collateral | Yes | Yes | -| Borrowable | No | Yes | -| LTV | Subject to Risk Oracle | - | -| LT | Subject to Risk Oracle | - | -| Liquidation Bonus | Subject to Risk Oracle | - | - -**Initial E-mode Risk Oracle** - -| Parameter | Value | Value | -| --------- | ---------- | ----- | -| E-Mode | Stablecoin | USDe | -| LTV | 88.1% | 90.1% | -| LT | 91.1% | 92.1% | -| LB | 3.9% | 2.8% | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for PT_USDe_31JUL2025 and the corresponding aToken. - -### PT_eUSDe_14AUG2025 - -The table below illustrates the configured risk parameters for **PT_eUSDe_14AUG2025** - -| Parameter | Value | -| ------------------------------- | ----------: | -| Isolation Mode | false | -| Borrowable | DISABLED | -| Collateral Enabled | true | -| Supply Cap (PT_eUSDe_14AUG2025) | 100,000,000 | -| Borrow Cap (PT_eUSDe_14AUG2025) | 1 | -| Debt Ceiling | USD 0 | -| LTV | 0.05 % | -| LT | 0.1 % | -| Liquidation Bonus | 7.5 % | -| Liquidation Protocol Fee | 10 % | -| Reserve Factor | 45 % | -| Base Variable Borrow Rate | 0 % | -| Variable Slope 1 | 10 % | -| Variable Slope 2 | 300 % | -| Uoptimal | 45 % | -| Flashloanable | ENABLED | -| Siloed Borrowing | DISABLED | -| Borrowable in Isolation | DISABLED | - -**Pricefeed details** - -| Parameter | Value | -| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------: | -| Oracle | [PT Capped eUSDe USDT/USD linear discount 14AUG2025](https://etherscan.io/address/0x03f9ba9a897241985c1f12bce97fac1b0bd4a7a7) | -| Underlying Oracle | [Capped USDT/USD](https://etherscan.io/address/0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8) | -| Underlying Oracle | [Chainlink USDT/USD](https://etherscan.io/address/0x3E7d1eAB13ad0104d2750B8863b489D65364e32D) | -| Oracle Latest Answer | (2025-05-21) USD .97942094 | -| discountRatePerYear | 9.037% | -| maxDiscountRatePerYear | 29.781% | - -**PT-eUSDe Stablecoins E-mode(id:13)** - -| **Asset** | **PT-eUSDe** | **eUSDe** | **USDC** | **USDT** | **USDS** | -| ----------------- | ---------------------- | --------- | -------- | -------- | -------- | -| Collateral | Yes | Yes | No | No | No | -| Borrowable | No | No | Yes | Yes | Yes | -| LTV | Subject to Risk Oracle | - | - | - | - | -| LT | Subject to Risk Oracle | - | - | - | - | -| Liquidation Bonus | Subject to Risk Oracle | - | - | - | - | - -**PT-eUSDe USDe E-mode(id:14)** - -| **Asset** | **PT-eUSDe** | **eUSDe** | **USDe** | -| ----------------- | ---------------------- | --------- | -------- | -| Collateral | Yes | Yes | No | -| Borrowable | No | No | Yes | -| LTV | Subject to Risk Oracle | - | - | -| LT | Subject to Risk Oracle | - | - | -| Liquidation Bonus | Subject to Risk Oracle | - | - | - -**Initial E-mode Risk Oracle** - -| Parameter | Value | Value | -| --------- | ---------- | ----- | -| E-Mode | Stablecoin | USDe | -| LTV | 87.1% | 89% | -| LT | 90.1% | 91% | -| LB | 4.1% | 3.1% | - -Additionally [0xac140648435d03f784879cd789130F22Ef588Fcd](https://etherscan.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for PT_eUSDe_14AUG2025 and the corresponding aToken. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/285af774868a38deaae3e1ddbab7fde6a03de302/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/285af774868a38deaae3e1ddbab7fde6a03de302/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.t.sol) -- Snapshot: Direct-to-AIP -- Discussion: [eUSDe](https://governance.aave.com/t/arfc-onboard-eusde-to-aave-v3-core-instance/21766), [PT-USDe-31JUL2025](https://governance.aave.com/t/arfc-onboard-usde-july-expiry-pt-tokens-on-aave-v3-core-instance/22041), [PT-eUSDe-14AUG2025](https://governance.aave.com/t/arfc-onboard-eusde-august-expiry-pt-tokens-on-aave-v3-core-instance/22076), [EMODE for PT Collateral](https://governance.aave.com/t/arfc-addendum-modify-e-modes-for-pt-token-collateral/22128) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.s.sol b/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.s.sol deleted file mode 100644 index cca991fd5..000000000 --- a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.s.sol +++ /dev/null @@ -1,64 +0,0 @@ -// 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_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520} from './AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type( - AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520 - ).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/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520.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_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core_20250520 - ).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core.md' - ) - ); - } -} diff --git a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/config.ts b/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/config.ts deleted file mode 100644 index 5d00bc58d..000000000 --- a/src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/config.ts +++ /dev/null @@ -1,140 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: - 'src/20250520_AaveV3Ethereum_OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core/config.ts', - force: true, - author: 'Aave-Chan Initiative', - pools: ['AaveV3Ethereum'], - title: 'Onboard USDe July expiry PT tokens and eUSDe August expiry PT tokens on V3 Core', - shortName: 'OnboardUSDeJulyExpiryPTTokensAndEUSDeAugustExpiryPTTokensOnV3Core', - date: '20250520', - discussion: - 'https://governance.aave.com/t/arfc-onboard-usde-july-expiry-pt-tokens-on-aave-v3-core-instance/22041', - snapshot: 'Direct-to-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - EMODES_UPDATES: [ - { - eModeCategory: 10, - ltv: '88.1', - liqThreshold: '91.1', - liqBonus: '3.9', - label: 'PT-USDe Stablecoins July 2025', - }, - { - eModeCategory: 11, - ltv: '90.1', - liqThreshold: '92.1', - liqBonus: '2.8', - label: 'PT-USDe USDe July 2025', - }, - { - eModeCategory: 12, - ltv: '87.1', - liqThreshold: '90.1', - liqBonus: '4.1', - label: 'PT-eUSDe Stablecoins August 2025', - }, - { - eModeCategory: 13, - ltv: '89', - liqThreshold: '91', - liqBonus: '3.1', - label: 'PT-eUSDe USDe August 2025', - }, - ], - EMODES_ASSETS: [ - { - asset: 'PT_USDe_31JUL2025', - eModeCategory: '10', - collateral: 'ENABLED', - borrowable: 'DISABLED', - }, - { - asset: 'PT_USDe_31JUL2025', - eModeCategory: '11', - collateral: 'ENABLED', - borrowable: 'DISABLED', - }, - { - asset: 'PT_eUSDe_14AUG2025', - eModeCategory: '12', - collateral: 'ENABLED', - borrowable: 'DISABLED', - }, - { - asset: 'PT_eUSDe_14AUG2025', - eModeCategory: '13', - collateral: 'ENABLED', - borrowable: 'DISABLED', - }, - {asset: 'USDC', eModeCategory: '10', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDT', eModeCategory: '10', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDe', eModeCategory: '11', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDS', eModeCategory: '10', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDC', eModeCategory: '12', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDT', eModeCategory: '12', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDe', eModeCategory: '13', collateral: 'DISABLED', borrowable: 'ENABLED'}, - {asset: 'USDS', eModeCategory: '12', collateral: 'DISABLED', borrowable: 'ENABLED'}, - ], - ASSET_LISTING: [ - { - assetSymbol: 'PT_USDe_31JUL2025', - decimals: 18, - priceFeed: '0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8', - ltv: '0.05', - liqThreshold: '0.1', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '45', - supplyCap: '40000000', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0x917459337caac939d41d7493b3999f571d20d667', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - { - assetSymbol: 'PT_eUSDe_14AUG2025', - decimals: 18, - priceFeed: '0x5292AB3292D076271f853Ed8e05e61cc02F0A2C6', - ltv: '0.05', - liqThreshold: '0.1', - liqBonus: '7.5', - debtCeiling: '0', - liqProtocolFee: '10', - enabledToBorrow: 'DISABLED', - flashloanable: 'ENABLED', - borrowableInIsolation: 'DISABLED', - withSiloedBorrowing: 'DISABLED', - reserveFactor: '45', - supplyCap: '100000000', - borrowCap: '1', - rateStrategyParams: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '0', - variableRateSlope1: '10', - variableRateSlope2: '300', - }, - asset: '0x14bdc3a3ae09f5518b923b69489cbcafb238e617', - admin: '0xac140648435d03f784879cd789130F22Ef588Fcd', - }, - ], - }, - cache: {blockNumber: 22523957}, - }, - }, -}; diff --git a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.sol b/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.sol deleted file mode 100644 index ac1a86e53..000000000 --- a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title stkAAVE Emissions - * @author @TokenLogic - * - Snapshot: Direct-To-AIP - * - Discussion: https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/26 - */ -contract AaveV3Ethereum_StkAAVEEmissions_20250520 is IProposalGenericExecutor { - uint256 public constant DISTRIBUTION_DURATION = 90 days; - uint128 public constant AAVE_EMISSION_PER_SECOND_STK_AAVE = uint128(360 ether) / 1 days; - uint256 public constant ALLOWANCE_MARGIN = 7200 ether; - uint256 public constant TOTAL_ALLOWANCE = - (DISTRIBUTION_DURATION * AAVE_EMISSION_PER_SECOND_STK_AAVE) + ALLOWANCE_MARGIN; - - function execute() external { - // Approval needs to be reset in order to increase it - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_AAVE, - 0 - ); - - MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveV3EthereumAssets.AAVE_UNDERLYING, - AaveSafetyModule.STK_AAVE, - TOTAL_ALLOWANCE - ); - } -} diff --git a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.t.sol b/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.t.sol deleted file mode 100644 index f6df30801..000000000 --- a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.t.sol +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; -import {IStakeToken} from 'aave-address-book/common/IStakeToken.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum_StkAAVEEmissions_20250520} from './AaveV3Ethereum_StkAAVEEmissions_20250520.sol'; - -interface IStakeAave { - function DISTRIBUTION_END() external view returns (uint256); -} - -/** - * @dev Test for AaveV3Ethereum_StkAAVEEmissions_20250520 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.t.sol -vv - */ -contract AaveV3Ethereum_StkAAVEEmissions_20250520_Test is ProtocolV3TestBase { - AaveV3Ethereum_StkAAVEEmissions_20250520 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22523454); - proposal = new AaveV3Ethereum_StkAAVEEmissions_20250520(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_StkAAVEEmissions_20250520', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_checkConfig() public { - (uint128 emissionPerSecondBeforeStkAAVE, , ) = IStakeToken(AaveSafetyModule.STK_AAVE).assets( - AaveSafetyModule.STK_AAVE - ); - - assertEq( - emissionPerSecondBeforeStkAAVE, - proposal.AAVE_EMISSION_PER_SECOND_STK_AAVE(), - 'emissions before not equal stkAAVE' - ); - - executePayload(vm, address(proposal)); - - (uint128 emissionPerSecondAfterStkAAVE, , ) = IStakeToken(AaveSafetyModule.STK_AAVE).assets( - AaveSafetyModule.STK_AAVE - ); - - assertEq( - emissionPerSecondAfterStkAAVE, - proposal.AAVE_EMISSION_PER_SECOND_STK_AAVE(), - 'emissions after not equal stkAAVE' - ); - assertApproxEqAbs( - emissionPerSecondAfterStkAAVE, - emissionPerSecondBeforeStkAAVE, - 1, - 'stkAAVE emissions not same as previous' - ); - } - - function test_checkDistributionEnd() public { - uint256 endTimestampBefore = IStakeAave(AaveSafetyModule.STK_AAVE).DISTRIBUTION_END(); - - executePayload(vm, address(proposal)); - - uint256 endTimestampAfter = IStakeAave(AaveSafetyModule.STK_AAVE).DISTRIBUTION_END(); - - assertEq( - endTimestampAfter, - endTimestampBefore, - 'New distribution duration has not been set correctly' - ); - } - - function test_checkAllowance_stkAAVE() public { - uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( - MiscEthereum.ECOSYSTEM_RESERVE, - AaveSafetyModule.STK_AAVE - ); - - assertGt(allowanceAfter, allowanceBefore); - // With previous remaining allowance, this can be greater than or equal to - assertGe( - allowanceAfter, - proposal.DISTRIBUTION_DURATION() * - proposal.AAVE_EMISSION_PER_SECOND_STK_AAVE() + - proposal.ALLOWANCE_MARGIN() - ); - } - - function test_checkRewards_stkAAVE() public { - address staker = 0x5a801a9418D036fD453078c3ADCB761fdc5Ae695; - uint256 rewardsPerDay = proposal.AAVE_EMISSION_PER_SECOND_STK_AAVE(); - - executePayload(vm, address(proposal)); - - vm.startPrank(staker); - IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).approve(AaveSafetyModule.STK_AAVE, 1e18); - - IStakeToken(AaveSafetyModule.STK_AAVE).stake(staker, 1e18); - - vm.warp(block.timestamp + 1 days); - - uint256 rewardsBalance = IStakeToken(AaveSafetyModule.STK_AAVE).getTotalRewardsBalance(staker); - - assertTrue(rewardsBalance > 0 && rewardsBalance <= rewardsPerDay); - - vm.stopPrank(); - } -} diff --git a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions.md b/src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions.md deleted file mode 100644 index 09596083c..000000000 --- a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "stkAAVE Emissions" -author: "@TokenLogic" -discussions: "https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/26" ---- - -## Simple Summary - -Re-enable stkAAVE incentives emissions for 90 days in anticipation of the launch of Umbrella. - -## Motivation - -With the recent reward cycle allowance coming to an end soon, this proposal aims to renew $AAVE emissions for stkAAVE holders. The stkAAVE module has proven to be a crucial mechanism as an AAVE supply sink, currently holding a TVL of $480M and accounting for 18.8% of the supply. It is recommended to maintain these emissions in anticipation of upcoming Umbrella developments, with adjustments to be made following the outcomes of the Umbrella upgrade. - -More information on stkAAVE can be found in these dashboards, [here](https://dune.com/xmc2/aave-safety-module) and [here](https://dune.com/KARTOD/AAVE-Staking). - -## Specification - -- Set new allowance to 360 AAVE per day for 90 days -- Include prior remaining allowance - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/425f3ad5a7a1c78472ec153cfbd319fa3f996d95/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/425f3ad5a7a1c78472ec153cfbd319fa3f996d95/src/20250520_AaveV3Ethereum_StkAAVEEmissions/AaveV3Ethereum_StkAAVEEmissions_20250520.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/26) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/config.ts b/src/20250520_AaveV3Ethereum_StkAAVEEmissions/config.ts deleted file mode 100644 index fd69df326..000000000 --- a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum'], - title: 'stkAAVE Emissions', - shortName: 'StkAAVEEmissions', - date: '20250520', - author: '@TokenLogic', - discussion: 'https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640/26', - snapshot: 'Direct-To-AIP', - votingNetwork: 'POLYGON', - }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22523454}}}, -}; diff --git a/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.sol b/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.sol deleted file mode 100644 index fe3c6cf70..000000000 --- a/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -/** - * @title May Funding Part B - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x4dfc398fabb63305900572dff38b2ff8e104b0710077f6b7e48049de173d186b - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906/5 - */ -contract AaveV3Base_MayFundingPartB_20250524 is IProposalGenericExecutor { - /// https://basescan.org/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa - address public constant AFC_SAFE = 0x22740deBa78d5a0c24C58C740e3715ec29de1bFa; - - function execute() external { - AaveV3Base.COLLECTOR.approve( - IERC20(AaveV3BaseAssets.USDC_A_TOKEN), - AFC_SAFE, - IERC20(AaveV3BaseAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Base.COLLECTOR)) - ); - - AaveV3Base.COLLECTOR.approve( - IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN), - AFC_SAFE, - IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN).balanceOf(address(AaveV3Base.COLLECTOR)) - ); - - AaveV3Base.COLLECTOR.approve( - IERC20(AaveV3BaseAssets.USDbC_A_TOKEN), - AFC_SAFE, - IERC20(AaveV3BaseAssets.USDbC_A_TOKEN).balanceOf(address(AaveV3Base.COLLECTOR)) - ); - } -} diff --git a/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.t.sol b/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.t.sol deleted file mode 100644 index 091c35534..000000000 --- a/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.t.sol +++ /dev/null @@ -1,107 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Base_MayFundingPartB_20250524} from './AaveV3Base_MayFundingPartB_20250524.sol'; - -/** - * @dev Test for AaveV3Base_MayFundingPartB_20250524 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.t.sol -vv - */ -contract AaveV3Base_MayFundingPartB_20250524_Test is ProtocolV3TestBase { - AaveV3Base_MayFundingPartB_20250524 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('base'), 30647717); - proposal = new AaveV3Base_MayFundingPartB_20250524(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Base_MayFundingPartB_20250524', AaveV3Base.POOL, address(proposal)); - } - - function test_approvals() public { - assertEq( - IERC20(AaveV3BaseAssets.USDC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ), - 0 - ); - - assertEq( - IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ), - 0 - ); - - assertEq( - IERC20(AaveV3BaseAssets.USDbC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ), - 0 - ); - - uint256 balanceUsdcBefore = IERC20(AaveV3BaseAssets.USDC_A_TOKEN).balanceOf( - address(AaveV3Base.COLLECTOR) - ); - - uint256 balanceCbBtcBefore = IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN).balanceOf( - address(AaveV3Base.COLLECTOR) - ); - - uint256 balanceUsdBcBefore = IERC20(AaveV3BaseAssets.USDbC_A_TOKEN).balanceOf( - address(AaveV3Base.COLLECTOR) - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceUsdcAfter = IERC20(AaveV3BaseAssets.USDC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ); - - uint256 allowanceCbBtcAfter = IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ); - - uint256 allowanceUsdBcAfter = IERC20(AaveV3BaseAssets.USDbC_A_TOKEN).allowance( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE() - ); - - assertEq(allowanceUsdcAfter, balanceUsdcBefore); - assertEq(allowanceCbBtcAfter, balanceCbBtcBefore); - assertEq(allowanceUsdBcAfter, balanceUsdBcBefore); - - vm.startPrank(proposal.AFC_SAFE()); - IERC20(AaveV3BaseAssets.USDC_A_TOKEN).transferFrom( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE(), - allowanceUsdcAfter - ); - - IERC20(AaveV3BaseAssets.cbBTC_A_TOKEN).transferFrom( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE(), - allowanceCbBtcAfter - ); - - IERC20(AaveV3BaseAssets.USDbC_A_TOKEN).transferFrom( - address(AaveV3Base.COLLECTOR), - proposal.AFC_SAFE(), - allowanceUsdBcAfter - ); - vm.stopPrank(); - } -} diff --git a/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.sol b/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.sol deleted file mode 100644 index 0c03ed5fe..000000000 --- a/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.sol +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {CollectorUtils, ICollector} from 'aave-helpers/src/CollectorUtils.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; - -// https://etherscan.io/address/0xf86141a5657Cf52AEB3E30eBccA5Ad3a8f714B89#code#F1#L63 -interface IMigrationActions { - /** - * @notice Migrate `assetsIn` of `DAI` to `USDS`. - * @param receiver The receiver of `USDS`. - * @param assetsIn The amount of `DAI` to migrate. - */ - function migrateDAIToUSDS(address receiver, uint256 assetsIn) external; -} - -/** - * @title May Funding Part B - * @author @TokenLogic - * - Snapshot: https://snapshot.box/#/s:aavedao.eth/proposal/0x4dfc398fabb63305900572dff38b2ff8e104b0710077f6b7e48049de173d186b - * - Discussion: https://governance.aave.com/t/arfc-may-2025-funding-update/21906/5 - */ -contract AaveV3Ethereum_MayFundingPartB_20250524 is IProposalGenericExecutor { - using CollectorUtils for ICollector; - - /// https://etherscan.io/address/0xf86141a5657Cf52AEB3E30eBccA5Ad3a8f714B89 - address public constant MIGRATION_ACTIONS = 0xf86141a5657Cf52AEB3E30eBccA5Ad3a8f714B89; - - /// https://etherscan.io/address/0xdeadD8aB03075b7FBA81864202a2f59EE25B312b - address public constant MERIT_AHAB_SAFE = 0xdeadD8aB03075b7FBA81864202a2f59EE25B312b; - - /// https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b - address public constant ALC_SAFE = 0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b; - - /// https://etherscan.io/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa - address public constant AFC_SAFE = 0x22740deBa78d5a0c24C58C740e3715ec29de1bFa; - - /// https://etherscan.io/address/0xAA088dfF3dcF619664094945028d44E779F19894 - address public constant NEW_TOKENLOGIC_SAFE = 0xAA088dfF3dcF619664094945028d44E779F19894; - - uint256 public constant MERIT_LIDO_GHO_ALLOWANCE = 3_000_000 ether; - uint256 public constant AHAB_WETH_ALLOWANCE = 800 ether; - uint256 public constant AFC_A_ETH_USDC_ALLOWANCE = 2_400_000e6; - uint256 public constant TOKENLOGIC_STREAM_ID = 100055; - - function execute() external { - _updateTokenLogicStream(); - _migrateDaiToUsds(); - _approvals(); - } - - function _approvals() internal { - // Merit aEthLidoGHO Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN), - MERIT_AHAB_SAFE, - MERIT_LIDO_GHO_ALLOWANCE - ); - - // Ahab aEthWETH Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN), - MERIT_AHAB_SAFE, - AHAB_WETH_ALLOWANCE - ); - - // RAI Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV2EthereumAssets.RAI_UNDERLYING), - AFC_SAFE, - IERC20(AaveV2EthereumAssets.RAI_UNDERLYING).balanceOf(address(AaveV2Ethereum.COLLECTOR)) - ); - - // CRV Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.CRV_UNDERLYING), - ALC_SAFE, - IERC20(AaveV3EthereumAssets.CRV_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - - // BAL Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.BAL_UNDERLYING), - ALC_SAFE, - IERC20(AaveV3EthereumAssets.BAL_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - - // aEthUSDC Approval - AaveV3Ethereum.COLLECTOR.approve( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN), - AFC_SAFE, - AFC_A_ETH_USDC_ALLOWANCE - ); - } - - function _migrateDaiToUsds() internal { - AaveV3Ethereum.COLLECTOR.withdrawFromV2( - CollectorUtils.IOInput({ - pool: address(AaveV2Ethereum.POOL), - underlying: AaveV2EthereumAssets.DAI_UNDERLYING, - amount: IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf( - address(AaveV2Ethereum.COLLECTOR) - ) - }), - address(this) - ); - AaveV3Ethereum.COLLECTOR.withdrawFromV3( - CollectorUtils.IOInput({ - pool: address(AaveV3Ethereum.POOL), - underlying: AaveV3EthereumAssets.DAI_UNDERLYING, - amount: IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ) - }), - address(this) - ); - - AaveV3Ethereum.COLLECTOR.transfer( - IERC20(AaveV3EthereumAssets.DAI_UNDERLYING), - address(this), - IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - ); - - uint256 daiAmount = IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(this)); - - IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).approve(MIGRATION_ACTIONS, daiAmount); - IMigrationActions(MIGRATION_ACTIONS).migrateDAIToUSDS( - address(AaveV3Ethereum.COLLECTOR), - daiAmount - ); - - AaveV3Ethereum.COLLECTOR.depositToV3( - CollectorUtils.IOInput({ - pool: address(AaveV3Ethereum.POOL), - underlying: AaveV3EthereumAssets.USDS_UNDERLYING, - amount: type(uint256).max - }) - ); - } - - function _updateTokenLogicStream() internal { - (, , , address tokenAddress, , uint256 stopTime, uint256 remainingBalance, ) = AaveV3Ethereum - .COLLECTOR - .getStream(TOKENLOGIC_STREAM_ID); - - uint256 timeLeft = stopTime - block.timestamp; - AaveV3Ethereum.COLLECTOR.cancelStream(TOKENLOGIC_STREAM_ID); - - CollectorUtils.stream( - AaveV3Ethereum.COLLECTOR, - CollectorUtils.CreateStreamInput({ - underlying: tokenAddress, - receiver: NEW_TOKENLOGIC_SAFE, - amount: remainingBalance, - start: block.timestamp, - duration: timeLeft - }) - ); - } -} diff --git a/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.t.sol b/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.t.sol deleted file mode 100644 index c18e14300..000000000 --- a/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.t.sol +++ /dev/null @@ -1,291 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; -import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; -import {GhoEthereum} from 'aave-address-book/GhoEthereum.sol'; -import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; - -import {AaveV3Ethereum_MayFundingPartB_20250524} from './AaveV3Ethereum_MayFundingPartB_20250524.sol'; - -/** - * @dev Test for AaveV3Ethereum_MayFundingPartB_20250524 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.t.sol -vv - */ -contract AaveV3Ethereum_MayFundingPartB_20250524_Test is ProtocolV3TestBase { - AaveV3Ethereum_MayFundingPartB_20250524 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22596260); - proposal = new AaveV3Ethereum_MayFundingPartB_20250524(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest('AaveV3Ethereum_MayFundingPartB_20250524', AaveV3Ethereum.POOL, address(proposal)); - } - - function test_approvals() public { - assertLt( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE() - ), - 1 ether - ); - - assertEq( - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE() - ), - 0 - ); - - uint256 balanceRaiBefore = IERC20(AaveV2EthereumAssets.RAI_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - assertEq( - IERC20(AaveV2EthereumAssets.RAI_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE() - ), - 0 - ); - - uint256 balanceCrvBefore = IERC20(AaveV3EthereumAssets.CRV_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - assertEq( - IERC20(AaveV3EthereumAssets.CRV_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE() - ), - 0 - ); - - uint256 balanceBalBefore = IERC20(AaveV3EthereumAssets.BAL_UNDERLYING).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - assertEq( - IERC20(AaveV3EthereumAssets.BAL_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE() - ), - 0 - ); - - uint256 allowanceAEthUSDCBefore = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE() - ); - assertEq( - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE() - ), - 0 - ); - - executePayload(vm, address(proposal)); - - uint256 allowanceGhoAfter = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE() - ); - - uint256 allowanceWethAfter = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE() - ); - - uint256 allowanceRaiAfter = IERC20(AaveV2EthereumAssets.RAI_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE() - ); - - uint256 allowanceAEthUSDCfter = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE() - ); - - uint256 allowanceCrvAfter = IERC20(AaveV3EthereumAssets.CRV_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE() - ); - - uint256 allowanceBalAfter = IERC20(AaveV3EthereumAssets.BAL_UNDERLYING).allowance( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE() - ); - - assertEq(allowanceGhoAfter, proposal.MERIT_LIDO_GHO_ALLOWANCE()); - assertEq(allowanceWethAfter, proposal.AHAB_WETH_ALLOWANCE()); - assertEq(allowanceRaiAfter, balanceRaiBefore); - assertEq(allowanceCrvAfter, balanceCrvBefore); - assertEq(allowanceBalAfter, balanceBalBefore); - assertEq(allowanceAEthUSDCfter, allowanceAEthUSDCBefore + proposal.AFC_A_ETH_USDC_ALLOWANCE()); - - vm.startPrank(proposal.MERIT_AHAB_SAFE()); - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE(), - proposal.MERIT_LIDO_GHO_ALLOWANCE() - ); - IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.MERIT_AHAB_SAFE(), - proposal.AHAB_WETH_ALLOWANCE() - ); - vm.stopPrank(); - - vm.startPrank(proposal.AFC_SAFE()); - IERC20(AaveV2EthereumAssets.RAI_UNDERLYING).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE(), - balanceRaiBefore - ); - - IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.AFC_SAFE(), - proposal.AFC_A_ETH_USDC_ALLOWANCE() - ); - vm.stopPrank(); - - vm.startPrank(proposal.ALC_SAFE()); - IERC20(AaveV3EthereumAssets.CRV_UNDERLYING).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE(), - balanceCrvBefore - ); - - IERC20(AaveV3EthereumAssets.BAL_UNDERLYING).transferFrom( - address(AaveV3Ethereum.COLLECTOR), - proposal.ALC_SAFE(), - balanceBalBefore - ); - vm.stopPrank(); - } - - function test_daiUsdsMigration() public { - assertGt( - IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 0 - ); - assertGt( - IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 0 - ); - assertGt( - IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 0 - ); - - uint256 balanceAUsdsBefore = IERC20(AaveV3EthereumAssets.USDS_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - executePayload(vm, address(proposal)); - - assertEq( - IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 0 - ); - - assertEq( - IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 0 - ); - - // Withdrawing from V2 isn't exact - assertLt( - IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - 300 ether - ); - - uint256 balanceAUsdsAfter = IERC20(AaveV3EthereumAssets.USDS_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - - assertGt(balanceAUsdsAfter, balanceAUsdsBefore); - } - - function test_streamMigration() public { - ( - , - , - uint256 deposit, - address tokenAddress, - , - uint256 stopTime, - uint256 remainingBalance, - - ) = AaveV3Ethereum.COLLECTOR.getStream(proposal.TOKENLOGIC_STREAM_ID()); - - uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId(); - - vm.expectRevert(); - AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID); - - executePayload(vm, address(proposal)); - - ( - address newSender, - address newRecipient, - uint256 newDeposit, - address newTokenAddress, - uint256 newStartTime, - uint256 newStopTime, - uint256 newRemainingBalance, - - ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID); - - assertEq(newSender, address(AaveV3Ethereum.COLLECTOR)); - assertEq(newRecipient, proposal.NEW_TOKENLOGIC_SAFE()); - assertNotEq(deposit, newDeposit); - assertEq(newTokenAddress, AaveV3EthereumLidoAssets.GHO_A_TOKEN); - assertEq(tokenAddress, newTokenAddress); - assertEq(newStartTime, block.timestamp); - assertEq(stopTime, newStopTime); - assertApproxEqAbs(remainingBalance, newRemainingBalance, 0.0000000001 ether); - - uint256 collectorGhoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - address(AaveV3Ethereum.COLLECTOR) - ); - uint256 receiverGhoBalanceBefore = IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf( - proposal.NEW_TOKENLOGIC_SAFE() - ); - - // Can withdraw post stream all remaining funds - vm.warp(newStopTime); - - (, , , , , , uint256 remaining, ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID); - - vm.startPrank(proposal.NEW_TOKENLOGIC_SAFE()); - AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, remaining); - vm.stopPrank(); - - assertGt( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(proposal.NEW_TOKENLOGIC_SAFE()), - receiverGhoBalanceBefore - ); - - assertLt( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)), - collectorGhoBalanceBefore - ); - - assertEq( - IERC20(AaveV3EthereumLidoAssets.GHO_A_TOKEN).balanceOf(proposal.NEW_TOKENLOGIC_SAFE()), - receiverGhoBalanceBefore + newRemainingBalance, - 'Unexpected ending balance' - ); - } -} diff --git a/src/20250524_Multi_MayFundingPartB/MayFundingPartB.md b/src/20250524_Multi_MayFundingPartB/MayFundingPartB.md deleted file mode 100644 index 9be565ab7..000000000 --- a/src/20250524_Multi_MayFundingPartB/MayFundingPartB.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: "May Funding Part B" -author: "@TokenLogic" -discussions: "https://governance.aave.com/t/arfc-may-2025-funding-update/21906/5" -snapshot: "https://snapshot.box/#/s:aavedao.eth/proposal/0x4dfc398fabb63305900572dff38b2ff8e104b0710077f6b7e48049de173d186b" ---- - -## Simple Summary - -This publication finalizes the May Funding Update and provides the funding required to support the upcoming Base Incentive Campaign, which includes the following key components: - -- Allocation for Base Incentive Campaign allowances; -- Allowances for Merit and Ahab contributors; and, -- Consolidation of funds from the Collector. - -## Motivation - -This publication outlines several near-term operational actions required to support both ongoing and upcoming initiatives. Specifically, it includes the following components: - -**Base Incentive Campaign** -Upon execution, this AIP will establish the necessary allowances on both Ethereum and Base networks, enabling the Aave Finance Committee (AFC) to transfer funds from the Collector to the AFC SAFE. From there, the AFC will periodically disburse funds to the ACI team for the implementation of the Base Incentive Campaign. - -**Asset Consolidation** -Consistent with previous AIPs, this proposal facilitates the conversion of DAI, aDAI, and aEthDAI balances held in the Collector into USDS. The converted USDS will be deposited into Aave v3 to generate yield on idle assets. - -**Ahab and Merit Incentive Programs** -The current budgets for the Merit and Ahab programs are due for renewal. Upon execution, this AIP will extend funding for both programs through May, June, and July to ensure continued operation and alignment with ACI’s incentive framework. - -## Specification - -Base: - -The payload creates the following allowances. - -| Token | Amount | Recipient | -| ---------- | --------------------- | --------------------------------------------------------------------------------------------------------------------- | -| aBaseUSDC | ALL Collector Balance | [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://basescan.org/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) | -| aBaseCbBTC | ALL Collector Balance | [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://basescan.org/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) | -| aBaseUSDbC | ALL Collector Balance | [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://basescan.org/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) | - -Ethereum: - -The payload creates the following allowances. - -| Token | Amount | Recipient | -| ----------- | --------------------- | --------------------------------------------------------------------------------------------------------------------- | -| aEthLidoGHO | 3,000,000 | [0xdeadD8aB03075b7FBA81864202a2f59EE25B312b](https://etherscan.io/address/0xdeadD8aB03075b7FBA81864202a2f59EE25B312b) | -| aEthWETH | 800 | [0xdeadD8aB03075b7FBA81864202a2f59EE25B312b](https://etherscan.io/address/0xdeadD8aB03075b7FBA81864202a2f59EE25B312b) | -| aEthUSDC | 2,400,000 | [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://etherscan.io/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) | -| RAI | ALL Collector Balance | [0x22740deBa78d5a0c24C58C740e3715ec29de1bFa](https://etherscan.io/address/0x22740deBa78d5a0c24C58C740e3715ec29de1bFa) | -| CRV | ALL Collector Balance | [0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b](https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b) | -| BAL | ALL Collector Balance | [0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b](https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b) | - -Migrates TokenLogic stream to new SAFE: [`0xAA088dfF3dcF619664094945028d44E779F19894`](https://etherscan.io/address/0xAA088dfF3dcF619664094945028d44E779F19894) - -Withdraws all aDAI, aEthDAI and couples with the collector's DAI to migrate all to USDS via the Spark migration contract. - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/195c48496edb707a402990f31202f0b280fe28ac/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/195c48496edb707a402990f31202f0b280fe28ac/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/195c48496edb707a402990f31202f0b280fe28ac/src/20250524_Multi_MayFundingPartB/AaveV3Ethereum_MayFundingPartB_20250524.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/195c48496edb707a402990f31202f0b280fe28ac/src/20250524_Multi_MayFundingPartB/AaveV3Base_MayFundingPartB_20250524.t.sol) -- [Snapshot](https://snapshot.box/#/s:aavedao.eth/proposal/0x4dfc398fabb63305900572dff38b2ff8e104b0710077f6b7e48049de173d186b) -- [Discussion](https://governance.aave.com/t/arfc-may-2025-funding-update/21906/5) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250524_Multi_MayFundingPartB/config.ts b/src/20250524_Multi_MayFundingPartB/config.ts deleted file mode 100644 index 310821181..000000000 --- a/src/20250524_Multi_MayFundingPartB/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - pools: ['AaveV3Ethereum', 'AaveV3Base'], - title: 'May Funding Part B', - shortName: 'MayFundingPartB', - date: '20250524', - author: '@TokenLogic', - discussion: 'https://governance.aave.com/t/arfc-may-2025-funding-update/21906', - snapshot: - 'https://snapshot.box/#/s:aavedao.eth/proposal/0x4dfc398fabb63305900572dff38b2ff8e104b0710077f6b7e48049de173d186b', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22552293}}, - AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 30647717}}, - }, -}; diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.sol deleted file mode 100644 index f46c6203f..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3CeloAssets} from 'aave-address-book/AaveV3Celo.sol'; -import {AaveV3PayloadCelo} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadCelo.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Asset Parameters Optimization - * @author Aave-Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178 - */ -contract AaveV3Celo_AssetParametersOptimization_20250527 is AaveV3PayloadCelo { - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); - - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3CeloAssets.USDT_UNDERLYING, - enabledToBorrow: EngineFlags.KEEP_CURRENT, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: 20_00 - }); - - return borrowUpdates; - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.t.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.t.sol deleted file mode 100644 index 959de6cfc..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Celo} from 'aave-address-book/AaveV3Celo.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Celo_AssetParametersOptimization_20250527} from './AaveV3Celo_AssetParametersOptimization_20250527.sol'; - -/** - * @dev Test for AaveV3Celo_AssetParametersOptimization_20250527 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.t.sol -vv - */ -contract AaveV3Celo_AssetParametersOptimization_20250527_Test is ProtocolV3TestBase { - AaveV3Celo_AssetParametersOptimization_20250527 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('celo'), 37085611); - proposal = new AaveV3Celo_AssetParametersOptimization_20250527(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Celo_AssetParametersOptimization_20250527', - AaveV3Celo.POOL, - address(proposal) - ); - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.sol deleted file mode 100644 index c9a637c7a..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Asset Parameters Optimization - * @author Aave-Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178 - */ -contract AaveV3Ethereum_AssetParametersOptimization_20250527 is AaveV3PayloadEthereum { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](4); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.CRV_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 10_00, - variableRateSlope2: 150_00 - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.SNX_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: EngineFlags.KEEP_CURRENT, - variableRateSlope2: 150_00 - }) - }); - rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.BAL_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 15_00, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3EthereumAssets.RLUSD_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: 4_00, - variableRateSlope1: 2_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } - function borrowsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) - { - IAaveV3ConfigEngine.BorrowUpdate[] - memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](3); - - borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.crvUSD_UNDERLYING, - enabledToBorrow: EngineFlags.KEEP_CURRENT, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: 20_00 - }); - borrowUpdates[1] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.RLUSD_UNDERLYING, - enabledToBorrow: EngineFlags.KEEP_CURRENT, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: 20_00 - }); - borrowUpdates[2] = IAaveV3ConfigEngine.BorrowUpdate({ - asset: AaveV3EthereumAssets.USDtb_UNDERLYING, - enabledToBorrow: EngineFlags.KEEP_CURRENT, - flashloanable: EngineFlags.KEEP_CURRENT, - borrowableInIsolation: EngineFlags.KEEP_CURRENT, - withSiloedBorrowing: EngineFlags.KEEP_CURRENT, - reserveFactor: 20_00 - }); - - return borrowUpdates; - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.t.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.t.sol deleted file mode 100644 index 1d2e503cb..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// 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/src/ProtocolV3TestBase.sol'; -import {AaveV3Ethereum_AssetParametersOptimization_20250527} from './AaveV3Ethereum_AssetParametersOptimization_20250527.sol'; - -/** - * @dev Test for AaveV3Ethereum_AssetParametersOptimization_20250527 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.t.sol -vv - */ -contract AaveV3Ethereum_AssetParametersOptimization_20250527_Test is ProtocolV3TestBase { - AaveV3Ethereum_AssetParametersOptimization_20250527 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('mainnet'), 22626835); - proposal = new AaveV3Ethereum_AssetParametersOptimization_20250527(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Ethereum_AssetParametersOptimization_20250527', - AaveV3Ethereum.POOL, - address(proposal) - ); - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.sol deleted file mode 100644 index 15dbaad10..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Asset Parameters Optimization - * @author Aave-Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178 - */ -contract AaveV3Polygon_AssetParametersOptimization_20250527 is AaveV3PayloadPolygon { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3PolygonAssets.CRV_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 10_00, - variableRateSlope2: 150_00 - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3PolygonAssets.BAL_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 15_00, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.t.sol b/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.t.sol deleted file mode 100644 index f38be0a53..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.t.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; -import {AaveV3Polygon_AssetParametersOptimization_20250527} from './AaveV3Polygon_AssetParametersOptimization_20250527.sol'; - -/** - * @dev Test for AaveV3Polygon_AssetParametersOptimization_20250527 - * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.t.sol -vv - */ -contract AaveV3Polygon_AssetParametersOptimization_20250527_Test is ProtocolV3TestBase { - AaveV3Polygon_AssetParametersOptimization_20250527 internal proposal; - - function setUp() public { - vm.createSelectFork(vm.rpcUrl('polygon'), 72328112); - proposal = new AaveV3Polygon_AssetParametersOptimization_20250527(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3Polygon_AssetParametersOptimization_20250527', - AaveV3Polygon.POOL, - address(proposal) - ); - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization.md b/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization.md deleted file mode 100644 index ef080be09..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "Asset Parameters Optimization" -author: "Aave-Chan Initiative" -discussions: "https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178" ---- - -## Simple Summary - -This proposal aims to optimize parameters of certain assets across networks where it is supported. - -## Motivation - -This proposal aims to optimize the Reserver Factor of various stables and also optimize the Optimal Utilization of various assets to better reflect the market mechanisms. - -The key changes include: - -- **Adjusting Reserve Factor (RF)** of various stables from 10% to 20%: increasing the RF routes a larger portion of the interest paid by users to Aave DAO’s Treasury. This does not impact users’ health factor directly while providing better cushion for assets at low utilization. -- **Adjusting Optimal Utilization (Uoptimal)** of various assets to 45%: We recommend to decrease Uoptimal of CRV, BAL and SNX to 45%, to better reflect the borrow and supply dynamism for these assets. - -## Specification - -| **Market** | **Asset** | **Current RF** | **Rec. RF** | -| ------------- | --------- | -------------- | ----------- | -| Ethereum Core | crvUSD | 10% | 20% | -| Ethereum Core | RLUSD | 10% | 20% | -| Ethereum Core | USDtb | 10% | 20% | -| Celo | USDT | 10% | 20% | - -| Deployment | Asset | Current UOptimal | Rec. UOptimal | Current Base | Rec. Base | Current Slope 1 | Rec. Slope 1 | Current Slope 2 | Rec. Slope 2 | -| ------------- | ----- | ---------------- | ------------- | ------------ | --------- | --------------- | ------------ | --------------- | ------------ | -| Ethereum Core | CRV | 70% | 45% | 3% | - | 14% | 10% | 300% | 150% | -| Ethereum Core | SNX | 80% | 45% | 3% | - | 15% | - | 100% | 150% | -| Ethereum Core | BAL | 80% | 45% | 5% | - | 22% | 15% | 150% | - | -| Ethereum Core | RLUSD | 80% | - | 0% | 4% | 6.5% | 2.5% | 50% | - | -| Polygon | CRV | 70% | 45% | 3% | - | 14% | 10% | 300% | 150% | -| Polygon | BAL | 80% | 45% | 5% | - | 22% | 15% | 150% | - | - -## References - -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.sol), [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Ethereum_AssetParametersOptimization_20250527.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Polygon_AssetParametersOptimization_20250527.t.sol), [AaveV3Celo](https://github.com/bgd-labs/aave-proposals-v3/blob/dd08d7de4c2b6b2fe3c81e67e450decd2ee6ea8f/src/20250527_Multi_AssetParametersOptimization/AaveV3Celo_AssetParametersOptimization_20250527.t.sol) -- Snapshot: Direct-to-AIP -- [Discussion](https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178) - -## Copyright - -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol b/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol deleted file mode 100644 index 4969a4f8f..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol +++ /dev/null @@ -1,120 +0,0 @@ -// 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, PolygonScript, CeloScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_AssetParametersOptimization_20250527} from './AaveV3Ethereum_AssetParametersOptimization_20250527.sol'; -import {AaveV3Polygon_AssetParametersOptimization_20250527} from './AaveV3Polygon_AssetParametersOptimization_20250527.sol'; -import {AaveV3Celo_AssetParametersOptimization_20250527} from './AaveV3Celo_AssetParametersOptimization_20250527.sol'; - -/** - * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AssetParametersOptimization_20250527.s.sol/1/run-latest.json - */ -contract DeployEthereum is EthereumScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_AssetParametersOptimization_20250527).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Polygon - * deploy-command: make deploy-ledger contract=src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol:DeployPolygon chain=polygon - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AssetParametersOptimization_20250527.s.sol/137/run-latest.json - */ -contract DeployPolygon is PolygonScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Polygon_AssetParametersOptimization_20250527).creationCode - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} - -/** - * @dev Deploy Celo - * deploy-command: make deploy-ledger contract=src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.s.sol:DeployCelo chain=celo - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AssetParametersOptimization_20250527.s.sol/42220/run-latest.json - */ -contract DeployCelo is CeloScript { - function run() external broadcast { - // deploy payloads - address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Celo_AssetParametersOptimization_20250527).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/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization_20250527.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 actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_AssetParametersOptimization_20250527).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); - actionsPolygon[0] = GovV3Helpers.buildAction( - type(AaveV3Polygon_AssetParametersOptimization_20250527).creationCode - ); - payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); - - IPayloadsControllerCore.ExecutionAction[] - memory actionsCelo = new IPayloadsControllerCore.ExecutionAction[](1); - actionsCelo[0] = GovV3Helpers.buildAction( - type(AaveV3Celo_AssetParametersOptimization_20250527).creationCode - ); - payloads[2] = GovV3Helpers.buildCeloPayload(vm, actionsCelo); - - // create proposal - vm.startBroadcast(); - GovV3Helpers.createProposal( - vm, - payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile( - vm, - 'src/20250527_Multi_AssetParametersOptimization/AssetParametersOptimization.md' - ) - ); - } -} diff --git a/src/20250527_Multi_AssetParametersOptimization/config.ts b/src/20250527_Multi_AssetParametersOptimization/config.ts deleted file mode 100644 index 16017d31b..000000000 --- a/src/20250527_Multi_AssetParametersOptimization/config.ts +++ /dev/null @@ -1,127 +0,0 @@ -import {ConfigFile} from '../../generator/types'; -export const config: ConfigFile = { - rootOptions: { - configFile: 'src/20250527_Multi_AssetParametersOptimization/config.ts', - force: true, - update: true, - author: 'Aave-Chan Initiative', - title: 'Asset Parameters Optimization', - discussion: 'https://governance.aave.com/t/direct-to-aip-asset-parameters-optimization/22178', - snapshot: 'Direct-to-AIP', - pools: ['AaveV3Ethereum', 'AaveV3Polygon', 'AaveV3Celo'], - shortName: 'AssetParametersOptimization', - date: '20250527', - votingNetwork: 'POLYGON', - }, - poolOptions: { - AaveV3Ethereum: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'CRV', - params: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '', - variableRateSlope1: '10', - variableRateSlope2: '150', - }, - }, - { - asset: 'SNX', - params: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '', - variableRateSlope1: '', - variableRateSlope2: '150', - }, - }, - { - asset: 'BAL', - params: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '', - variableRateSlope1: '15', - variableRateSlope2: '', - }, - }, - { - asset: 'RLUSD', - params: { - optimalUtilizationRate: '', - baseVariableBorrowRate: '4', - variableRateSlope1: '2.5', - variableRateSlope2: '', - }, - }, - ], - BORROWS_UPDATE: [ - { - enabledToBorrow: 'KEEP_CURRENT', - flashloanable: 'KEEP_CURRENT', - borrowableInIsolation: 'KEEP_CURRENT', - withSiloedBorrowing: 'KEEP_CURRENT', - reserveFactor: '20', - asset: 'crvUSD', - }, - { - enabledToBorrow: 'KEEP_CURRENT', - flashloanable: 'KEEP_CURRENT', - borrowableInIsolation: 'KEEP_CURRENT', - withSiloedBorrowing: 'KEEP_CURRENT', - reserveFactor: '20', - asset: 'RLUSD', - }, - { - enabledToBorrow: 'KEEP_CURRENT', - flashloanable: 'KEEP_CURRENT', - borrowableInIsolation: 'KEEP_CURRENT', - withSiloedBorrowing: 'KEEP_CURRENT', - reserveFactor: '20', - asset: 'USDtb', - }, - ], - }, - cache: {blockNumber: 22626835}, - }, - AaveV3Polygon: { - configs: { - RATE_UPDATE_V3: [ - { - asset: 'CRV', - params: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '', - variableRateSlope1: '10', - variableRateSlope2: '150', - }, - }, - { - asset: 'BAL', - params: { - optimalUtilizationRate: '45', - baseVariableBorrowRate: '', - variableRateSlope1: '15', - variableRateSlope2: '', - }, - }, - ], - }, - cache: {blockNumber: 72328112}, - }, - AaveV3Celo: { - configs: { - BORROWS_UPDATE: [ - { - enabledToBorrow: 'KEEP_CURRENT', - flashloanable: 'KEEP_CURRENT', - borrowableInIsolation: 'KEEP_CURRENT', - withSiloedBorrowing: 'KEEP_CURRENT', - reserveFactor: '20', - asset: 'USDT', - }, - ], - }, - cache: {blockNumber: 37085611}, - }, - }, -}; diff --git a/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.sol b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.sol new file mode 100644 index 000000000..af28a6fa6 --- /dev/null +++ b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +/** + * @title Test vote on Ethereum + * @author BGD Labs @bgdlabs + * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/91 + */ +contract AaveV3Ethereum_TestVoteOnEthereum_20250530 is IProposalGenericExecutor { + function execute() external {} +} diff --git a/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol new file mode 100644 index 000000000..2a7e693b4 --- /dev/null +++ b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_TestVoteOnEthereum_20250530} from './AaveV3Ethereum_TestVoteOnEthereum_20250530.sol'; + +/** + * @dev Test for AaveV3Ethereum_TestVoteOnEthereum_20250530 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol -vv + */ +/// forge-config: default.evm_version = 'cancun' +contract AaveV3Ethereum_TestVoteOnEthereum_20250530_Test is ProtocolV3TestBase { + AaveV3Ethereum_TestVoteOnEthereum_20250530 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 22595989); + proposal = new AaveV3Ethereum_TestVoteOnEthereum_20250530(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_TestVoteOnEthereum_20250530', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum.md b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum.md new file mode 100644 index 000000000..57f624bc3 --- /dev/null +++ b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum.md @@ -0,0 +1,33 @@ +--- +title: "Fire drill proposal Ethereum VotingMachine" +author: "BGD Labs @bgdlabs" +discussions: "https://governance.aave.com/t/technical-maintenance-proposals/15274/91" +--- + +## Simple Summary + +Do a fire drill voting flow with a mock governance proposal using Ethereum as the voting network instead of Polygon as usual, to test that all peripheral systems are properly functioning. + +## Motivation + +One of the design principles of the currently running Aave Governance v3 system is to inherit Ethereum’s security at its core, delegating the voting stage to more cost-efficient networks (currently Polygon PoS and Avalanche C-Chain), while avoiding full dependency on them. + +Partially, this is achieved by replicating the same voting infrastructure on Ethereum itself: if, for any reason, all the more optimal voting networks would not be operative, a governance proposal can still be created and voted on (even if more expensive) directly on Ethereum itself. + +Given that this flow is only to be used in some very edge emergency scenario, we think it is healthy to make a fire drill: creating a proposal executing a payload without any meaningful content, but using the Ethereum voting infrastructure. + +## Specification + +The governance proposal will be created using the [Ethereum → Ethereum Voting Portal](https://etherscan.io/address/0x6ACe1Bf22D57a33863161bFDC851316Fb0442690) so that voting will happen on the Ethereum network. + +The payload executed will just contain an empty execute() function, as the purpose of this fire drill is testing the full flow, and not any execution content. + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/12b567e8939bbd8297d73225fae9b5a6a4e0d5ec/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/12b567e8939bbd8297d73225fae9b5a6a4e0d5ec/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/AaveV3Ethereum_TestVoteOnEthereum_20250530.t.sol) +- [Discussion](https://governance.aave.com/t/technical-maintenance-proposals/15274/91) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions_20250505.s.sol b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum_20250530.s.sol similarity index 67% rename from src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions_20250505.s.sol rename to src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum_20250530.s.sol index 2c2590e1e..5622509a7 100644 --- a/src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions_20250505.s.sol +++ b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum_20250530.s.sol @@ -4,18 +4,18 @@ 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_StkGHOEmissions_20250505} from './AaveV3Ethereum_StkGHOEmissions_20250505.sol'; +import {AaveV3Ethereum_TestVoteOnEthereum_20250530} from './AaveV3Ethereum_TestVoteOnEthereum_20250530.sol'; /** * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions_20250505.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/StkGHOEmissions_20250505.s.sol/1/run-latest.json + * deploy-command: make deploy-ledger contract=src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum_20250530.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/TestVoteOnEthereum_20250530.s.sol/1/run-latest.json */ contract DeployEthereum is EthereumScript { function run() external broadcast { // deploy payloads address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_StkGHOEmissions_20250505).creationCode + type(AaveV3Ethereum_TestVoteOnEthereum_20250530).creationCode ); // compose action @@ -30,7 +30,7 @@ contract DeployEthereum is EthereumScript { /** * @dev Create Proposal - * command: make deploy-ledger contract=src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions_20250505.s.sol:CreateProposal chain=mainnet + * command: make deploy-ledger contract=src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum_20250530.s.sol:CreateProposal chain=mainnet */ contract CreateProposal is EthereumScript { function run() external { @@ -41,7 +41,7 @@ contract CreateProposal is EthereumScript { IPayloadsControllerCore.ExecutionAction[] memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_StkGHOEmissions_20250505).creationCode + type(AaveV3Ethereum_TestVoteOnEthereum_20250530).creationCode ); payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); @@ -50,10 +50,10 @@ contract CreateProposal is EthereumScript { GovV3Helpers.createProposal( vm, payloads, - GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_ETH, GovV3Helpers.ipfsHashFile( vm, - 'src/20250505_AaveV3Ethereum_StkGHOEmissions/StkGHOEmissions.md' + 'src/20250530_AaveV3Ethereum_TestVoteOnEthereum/TestVoteOnEthereum.md' ) ); } diff --git a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/config.ts b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/config.ts similarity index 69% rename from src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/config.ts rename to src/20250530_AaveV3Ethereum_TestVoteOnEthereum/config.ts index 36e34af41..69c965790 100644 --- a/src/20250506_AaveV3Ethereum_SoneiumADIPathActivation/config.ts +++ b/src/20250530_AaveV3Ethereum_TestVoteOnEthereum/config.ts @@ -3,12 +3,12 @@ export const config: ConfigFile = { rootOptions: { author: 'BGD Labs @bgdlabs', pools: ['AaveV3Ethereum'], - title: 'Soneium aDI path activation', - shortName: 'SoneiumADIPathActivation', - date: '20250506', + title: 'Test vote on Ethereum', + shortName: 'TestVoteOnEthereum', + date: '20250530', discussion: '', snapshot: '', votingNetwork: 'ETHEREUM', }, - poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22424729}}}, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 22595989}}}, }; diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol new file mode 100644 index 000000000..535164089 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title LBTC and eBTC Price Feeds Update + * @author BGD Labs @bgdlabs + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614 + */ +contract AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717 is AaveV3PayloadBase { + // https://basescan.org/address/0xA04669FE5cba4Bb21f265B562D23e562E45A1C67 + address public constant LBTC_CAPO_ADAPTER = 0xA04669FE5cba4Bb21f265B562D23e562E45A1C67; + + function priceFeedsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.PriceFeedUpdate[] memory) + { + IAaveV3ConfigEngine.PriceFeedUpdate[] + memory priceFeedUpdates = new IAaveV3ConfigEngine.PriceFeedUpdate[](1); + + priceFeedUpdates[0] = IAaveV3ConfigEngine.PriceFeedUpdate({ + asset: AaveV3BaseAssets.LBTC_UNDERLYING, + priceFeed: LBTC_CAPO_ADAPTER + }); + + return priceFeedUpdates; + } +} diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol new file mode 100644 index 000000000..743dcc4b3 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol'; + +/** + * @dev Test for AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol -vv + */ +contract AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717_Test is ProtocolV3TestBase { + AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 33891700); + proposal = new AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717', + AaveV3Base.POOL, + address(proposal) + ); + } + + function test_LBTC_priceFeedAdapter() public { + address feedBefore = AaveV3Base.ORACLE.getSourceOfAsset(AaveV3BaseAssets.LBTC_UNDERLYING); + + GovV3Helpers.executePayload(vm, address(proposal)); + + address feedAfter = AaveV3Base.ORACLE.getSourceOfAsset(AaveV3BaseAssets.LBTC_UNDERLYING); + + assertNotEq(feedBefore, feedAfter); + + assertEq(feedAfter, proposal.LBTC_CAPO_ADAPTER()); + } +} diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol new file mode 100644 index 000000000..8c29d2e75 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IPriceCapAdapter} from '../interfaces/IPriceCapAdapter.sol'; + +/** + * @title LBTC and eBTC Price Feeds Update + * @author BGD Labs @bgdlabs + * - Snapshot: Direct-To-AIP + * - Discussion: https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614 + */ +contract AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717 is AaveV3PayloadEthereum { + // https://etherscan.io/address/0xf8c04B50499872A5B5137219DEc0F791f7f620D0 + address public constant LBTC_CAPO_ADAPTER = 0xf8c04B50499872A5B5137219DEc0F791f7f620D0; + // https://etherscan.io/address/0x03bB418e89B75407585f8198178f253DA3216218 + address public constant EBTC_CAPO_ADAPTER = 0x03bB418e89B75407585f8198178f253DA3216218; + + function priceFeedsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.PriceFeedUpdate[] memory) + { + IAaveV3ConfigEngine.PriceFeedUpdate[] + memory priceFeedUpdates = new IAaveV3ConfigEngine.PriceFeedUpdate[](2); + + priceFeedUpdates[0] = IAaveV3ConfigEngine.PriceFeedUpdate({ + asset: AaveV3EthereumAssets.LBTC_UNDERLYING, + priceFeed: LBTC_CAPO_ADAPTER + }); + + priceFeedUpdates[1] = IAaveV3ConfigEngine.PriceFeedUpdate({ + asset: AaveV3EthereumAssets.eBTC_UNDERLYING, + priceFeed: EBTC_CAPO_ADAPTER + }); + + return priceFeedUpdates; + } +} diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol new file mode 100644 index 000000000..f455543b6 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {IPriceCapAdapter} from '../interfaces/IPriceCapAdapter.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol'; + +/** + * @dev Test for AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol -vv + */ +contract AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717_Test is ProtocolV3TestBase { + AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 23118114); + proposal = new AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_eBTC_priceFeedAdapter() public { + address feedBefore = AaveV3Ethereum.ORACLE.getSourceOfAsset( + AaveV3EthereumAssets.eBTC_UNDERLYING + ); + + GovV3Helpers.executePayload(vm, address(proposal)); + + address feedAfter = AaveV3Ethereum.ORACLE.getSourceOfAsset( + AaveV3EthereumAssets.eBTC_UNDERLYING + ); + + assertNotEq(feedBefore, feedAfter); + + assertEq(feedAfter, proposal.EBTC_CAPO_ADAPTER()); + } + + function test_LBTC_priceFeedAdapter() public { + address feedBefore = AaveV3Ethereum.ORACLE.getSourceOfAsset( + AaveV3EthereumAssets.LBTC_UNDERLYING + ); + + GovV3Helpers.executePayload(vm, address(proposal)); + + address feedAfter = AaveV3Ethereum.ORACLE.getSourceOfAsset( + AaveV3EthereumAssets.LBTC_UNDERLYING + ); + + assertNotEq(feedBefore, feedAfter); + + assertEq(feedAfter, proposal.LBTC_CAPO_ADAPTER()); + } +} diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate.md b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate.md new file mode 100644 index 000000000..2d4f61c95 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate.md @@ -0,0 +1,73 @@ +--- +title: "LBTC and eBTC Price Feeds Update" +author: "BGD Labs @bgdlabs" +discussions: https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614 +snapshot: Direct-to-AIP +--- + +## Simple Summary + +AIP for updating the price feeds of LBTC and eBTC, ensuring accurate prices for both assets that will be upgraded to yield-bearing tokens. + +## Motivation + +Lombard is upgrading LBTC into a yield-bearing asset launching on August 11th, 2025. The asset will start accruing BABY rewards from Babylon; therefore, we need to upgrade the LBTC price strategy to reflect value accrual after the upgrade. + +Currently, LBTC has been priced with the BTC / USD price feed as previously recommended in the [LBTC analysis](https://governance.aave.com/t/arfc-onboard-lbtc-on-aave-v3-core-instance/20142/8). In the price strategy section, it was mentioned that in the future, the asset would start generating yield from Babylon stake rewards and would need to upgrade the price strategy. + +eBTC is an LRT that is mainly backed by LBTC. We also highlight in the [eBTC technical analysis](https://governance.aave.com/t/arfc-enable-ebtc-wbtc-liquid-e-mode-on-aave-v3-core-instance/20141/9) that the price cap adapter must be updated as soon as restaking rewards start accruing. + +## Specification + +The table below illustrates the configuration parameters recommended by Chaos Labs: + +**Price feed details** + +
+ +**LBTC** + +| Parameter (Mainnet) | Value | +| --------------------------- | -------------------------------------------------------------------------------------------------: | +| Oracle | [Capped LBTC / BTC / USD](https://etherscan.io/address/0xf8c04B50499872A5B5137219DEc0F791f7f620D0) | +| Ratio Provider | [StakedLBTCOracle](https://etherscan.io/address/0x1De9fcfeDF3E51266c188ee422fbA1c7860DA0eF) | +| Underlying Feed | [Chainlink SVR BTC/USD](https://etherscan.io/address/0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A) | +| Oracle Latest Answer | (Aug-11-2025) USD 119,667.05332541 | +| Snapshot Ratio | 1.00 | +| Snapshot Timestamp | Jun-15-2025 | +| maxYearlyRatioGrowthPercent | 2.00% | + +| Parameter (Base) | Value | +| --------------------------- | -------------------------------------------------------------------------------------------------: | +| Oracle | [Capped LBTC / BTC / USD](https://basescan.org/address/0xA04669FE5cba4Bb21f265B562D23e562E45A1C67) | +| Ratio Provider | [StakedLBTCOracle](https://basescan.org/address/0x1De9fcfeDF3E51266c188ee422fbA1c7860DA0eF) | +| Underlying Feed | [Chainlink BTC/USD](https://basescan.org/address/0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F) | +| Oracle Latest Answer | (Aug-11-2025) USD 119,714.02384483 | +| Snapshot Ratio | 1.00 | +| Snapshot Timestamp | Jun-15-2025 | +| maxYearlyRatioGrowthPercent | 2.00% | + +
+ +**eBTC** + +| Parameter (Mainnet) | Value | +| --------------------------- | -----------------------------------------------------------------------------------------------------: | +| Oracle | [Capped eBTC / BTC / USD](https://etherscan.io/address/0x03bB418e89B75407585f8198178f253DA3216218) | +| Ratio Provider | [AccountantWithRateProviders](https://etherscan.io/address/0x1b293DC39F94157fA0D1D36d7e0090C8B8B8c13F) | +| Underlying Feed | [Chainlink SVR BTC/USD](https://etherscan.io/address/0xb41E773f507F7a7EA890b1afB7d2b660c30C8B0A) | +| Oracle Latest Answer | (Aug-11-2025) USD 119,665.73000000 | +| Snapshot Ratio | 1.00 | +| Snapshot Timestamp | Jul-12-2025 | +| maxYearlyRatioGrowthPercent | 1.90% | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1f7fdad01de6d4d123e87ba6a34fe0c82b7c4e75/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/1f7fdad01de6d4d123e87ba6a34fe0c82b7c4e75/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1f7fdad01de6d4d123e87ba6a34fe0c82b7c4e75/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/1f7fdad01de6d4d123e87ba6a34fe0c82b7c4e75/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.t.sol) +- Snapshot: Direct-to-AIP +- [Discussion](https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol similarity index 50% rename from src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol rename to src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol index 4ad6c54c7..074179ac2 100644 --- a/src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol @@ -3,20 +3,21 @@ 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, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3Ethereum_MayFundingPartB_20250524} from './AaveV3Ethereum_MayFundingPartB_20250524.sol'; -import {AaveV3Base_MayFundingPartB_20250524} from './AaveV3Base_MayFundingPartB_20250524.sol'; +import {AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717.sol'; +import {AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717} from './AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717.sol'; /** * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/MayFundingPartB_20250524.s.sol/1/run-latest.json + * deploy-command: make deploy-ledger contract=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol/1/run-latest.json */ contract DeployEthereum is EthereumScript { function run() external broadcast { // deploy payloads address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_MayFundingPartB_20250524).creationCode + type(AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717).creationCode ); // compose action @@ -31,14 +32,14 @@ contract DeployEthereum is EthereumScript { /** * @dev Deploy Base - * deploy-command: make deploy-ledger contract=src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol:DeployBase chain=base - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/MayFundingPartB_20250524.s.sol/8453/run-latest.json + * deploy-command: make deploy-ledger contract=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol/8453/run-latest.json */ contract DeployBase is BaseScript { function run() external broadcast { // deploy payloads address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Base_MayFundingPartB_20250524).creationCode + type(AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717).creationCode ); // compose action @@ -53,7 +54,7 @@ contract DeployBase is BaseScript { /** * @dev Create Proposal - * command: make deploy-ledger contract=src/20250524_Multi_MayFundingPartB/MayFundingPartB_20250524.s.sol:CreateProposal chain=mainnet + * command: make deploy-ledger contract=src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate_20250717.s.sol:CreateProposal chain=mainnet */ contract CreateProposal is EthereumScript { function run() external { @@ -61,19 +62,23 @@ contract CreateProposal is EthereumScript { PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); - actionsEthereum[0] = GovV3Helpers.buildAction( - type(AaveV3Ethereum_MayFundingPartB_20250524).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_LBTCAndEBTCPriceFeedsUpdate_20250717).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } - IPayloadsControllerCore.ExecutionAction[] - memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); - actionsBase[0] = GovV3Helpers.buildAction( - type(AaveV3Base_MayFundingPartB_20250524).creationCode - ); - payloads[1] = GovV3Helpers.buildBasePayload(vm, actionsBase); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_LBTCAndEBTCPriceFeedsUpdate_20250717).creationCode + ); + payloads[1] = GovV3Helpers.buildBasePayload(vm, actionsBase); + } // create proposal vm.startBroadcast(); @@ -81,7 +86,10 @@ contract CreateProposal is EthereumScript { vm, payloads, GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, - GovV3Helpers.ipfsHashFile(vm, 'src/20250524_Multi_MayFundingPartB/MayFundingPartB.md') + GovV3Helpers.ipfsHashFile( + vm, + 'src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/LBTCAndEBTCPriceFeedsUpdate.md' + ) ); } } diff --git a/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/config.ts b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/config.ts new file mode 100644 index 000000000..89f3d5a46 --- /dev/null +++ b/src/20250717_Multi_LBTCAndEBTCPriceFeedsUpdate/config.ts @@ -0,0 +1,33 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'BGD Labs @bgdlabs', + pools: ['AaveV3Ethereum', 'AaveV3Base'], + title: 'LBTC and eBTC Price Feeds Update', + shortName: 'LBTCAndEBTCPriceFeedsUpdate', + date: '20250717', + discussion: + 'https://governance.aave.com/t/direct-to-aip-lbtc-oracle-and-capo-implementation-update/22614', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + PRICE_FEEDS_UPDATE: [ + {asset: 'LBTC', priceFeed: '0xf8c04B50499872A5B5137219DEc0F791f7f620D0'}, + ], + OTHERS: {}, + }, + cache: {blockNumber: 22937843}, + }, + AaveV3Base: { + configs: { + PRICE_FEEDS_UPDATE: [ + {asset: 'LBTC', priceFeed: '0xA04669FE5cba4Bb21f265B562D23e562E45A1C67'}, + ], + }, + cache: {blockNumber: 32976516}, + }, + }, +}; diff --git a/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol new file mode 100644 index 000000000..d89c110c2 --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol @@ -0,0 +1,109 @@ +// 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 {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; +import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; + +/** + * @title Add ezETH to Aave v3 Core Instance + * @author @TokenLogic + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/direct-to-aip-add-ezeth-to-aave-v3-core-instance/22732 + */ +contract AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801 is AaveV3PayloadEthereum { + using SafeERC20 for IERC20; + using AaveV3EthereumLido for IERC20; + + uint256 public constant ezETH_SEED_AMOUNT = 0.025 ether; + + function _postExecute() internal override { + IERC20(AaveV3EthereumLidoAssets.ezETH_UNDERLYING).forceApprove( + address(AaveV3Ethereum.POOL), + ezETH_SEED_AMOUNT + ); + AaveV3Ethereum.POOL.supply( + AaveV3EthereumLidoAssets.ezETH_UNDERLYING, + ezETH_SEED_AMOUNT, + AaveV3Ethereum.DUST_BIN, + 0 + ); + } + + function eModeCategoryCreations() + public + pure + override + returns (IAaveV3ConfigEngine.EModeCategoryCreation[] memory) + { + IAaveV3ConfigEngine.EModeCategoryCreation[] + memory eModeCreations = new IAaveV3ConfigEngine.EModeCategoryCreation[](2); + + address[] memory collateralAssets_EzETHWstETH = new address[](1); + address[] memory borrowableAssets_EzETHWstETH = new address[](1); + + collateralAssets_EzETHWstETH[0] = AaveV3EthereumLidoAssets.ezETH_UNDERLYING; + borrowableAssets_EzETHWstETH[0] = AaveV3EthereumAssets.wstETH_UNDERLYING; + + eModeCreations[0] = IAaveV3ConfigEngine.EModeCategoryCreation({ + ltv: 93_00, + liqThreshold: 95_00, + liqBonus: 1_00, + label: 'ezETH/wstETH', + collaterals: collateralAssets_EzETHWstETH, + borrowables: borrowableAssets_EzETHWstETH + }); + + address[] memory collateralAssets_EzETHStablecoin = new address[](1); + address[] memory borrowableAssets_EzETHStablecoin = new address[](2); + + collateralAssets_EzETHStablecoin[0] = AaveV3EthereumLidoAssets.ezETH_UNDERLYING; + borrowableAssets_EzETHStablecoin[0] = AaveV3EthereumAssets.USDC_UNDERLYING; + borrowableAssets_EzETHStablecoin[1] = AaveV3EthereumAssets.USDT_UNDERLYING; + + eModeCreations[1] = IAaveV3ConfigEngine.EModeCategoryCreation({ + ltv: 75_00, + liqThreshold: 78_00, + liqBonus: 7_50, + label: 'ezETH/Stablecoins', + collaterals: collateralAssets_EzETHStablecoin, + borrowables: borrowableAssets_EzETHStablecoin + }); + + return eModeCreations; + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); + + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: AaveV3EthereumLidoAssets.ezETH_UNDERLYING, + assetSymbol: 'ezETH', + priceFeed: AaveV3EthereumLidoAssets.ezETH_ORACLE, + enabledToBorrow: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 5, + liqThreshold: 10, + liqBonus: 7_50, + reserveFactor: 15_00, + supplyCap: 50_000, + borrowCap: 0, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 45_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 0, + variableRateSlope2: 0 + }) + }); + + return listings; + } +} diff --git a/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.t.sol b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.t.sol new file mode 100644 index 000000000..57db8cf3c --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.t.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {GovernanceV3Ethereum} from 'aave-helpers/lib/aave-address-book/src/GovernanceV3Ethereum.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801} from './AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol'; + +/** + * @dev Test for AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.t.sol -vv + */ +contract AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801_Test is ProtocolV3TestBase { + AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 23089977); + proposal = new AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801(); + deal( + AaveV3EthereumLidoAssets.ezETH_UNDERLYING, + GovernanceV3Ethereum.EXECUTOR_LVL_1, + 0.025 ether + ); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_dustBinHasezETHFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken( + AaveV3EthereumLidoAssets.ezETH_UNDERLYING + ); + assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), 0.025 ether); + } +} diff --git a/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance.md b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance.md new file mode 100644 index 000000000..f1de40e93 --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance.md @@ -0,0 +1,87 @@ +--- +title: "Add ezETH to Aave v3 Core Instance" +author: "@TokenLogic" +discussions: "https://governance.aave.com/t/direct-to-aip-add-ezeth-to-aave-v3-core-instance/22732" +snapshot: Direct-to-AIP +--- + +### Summary + +This publication proposes onboarding ezETH as collateral to the Aave V3 Core Instance. + +### Motivation + +With the recent onboarding of weETH to the Prime instance, the wstETH Borrow Rate has increased to above 0.50% at times and adversely affected the yield strategies utilizing wstETH debt. Whilst rsETH users can migrate to Core, ezETH users are not yet able to migrate positions and optimize for the lowest cost of capital. + +Upon listing ezETH on Core and reducing the wstETH borrow rate, users are expected to arbitrage the wstETH borrow rate across the markets, enabling weETH to continue growing on Prime. Given the yield-maximizing nature of the strategies, a degree of size needs to be able to move freely between the markets, which adding ezETH to Core enables. + +The Renzo team has expressed specifically that investors are requesting access to USDC and USDT on the Core instance, and only on Ethereum. To support this request, an ezETH stablecoin eMode has been proposed below. + +This proposal will be under Direct to AIP, as ezETH is already listed on other Aave instances. + +### Specification + +**ezETH Ethereum Address:** `0xbf5495efe5db9ce00f80364c8b423567e58d2110` + +#### General Parameters + +| Parameter | Value | +| :------------------------------------- | :---------------- | +| **Chain (instance)** | Ethereum (Core) | +| **Isolation Mode** | No | +| **Borrowable** | No | +| **Collateral Enabled** | Yes | +| **Supply Cap (ezETH)** | 50,000 | +| **Borrow Cap (ezETH)** | 0 | +| **Debt Ceiling** | USD 0 | +| **LTV** | 0.05% | +| **LT** | 0.10% | +| **Liquidation Bonus** | 7.5% | +| **Liquidation Protocol Fee** | 10% | +| **Reserve Factor** | 15% | +| **Base Variable Borrow Rate** | - | +| **Variable Slope 1** | - | +| **Variable Slope 2** | - | +| **Uoptimal** | 45% | +| **Stable Borrowing** | DISABLED | +| **Stable Slope1** | 0% | +| **Stable Slope2** | 0% | +| **Base Stable Rate Offset** | 0% | +| **Stable Rate Excess Offset** | 0% | +| **Optimal Stable To Total Debt Ratio** | 0% | +| **Flashloanable** | ENABLED | +| **Siloed Borrowing** | DISABLED | +| **Borrowable in Isolation** | DISABLED | +| **eMode Category** | ezETH/wstETH | +| **eMode Category** | ezETH/stablecoins | + +#### ezETH/wstETH liquid eMode + +| Parameter | ezETH | wstETH | +| :------------------------ | :----- | :----- | +| **Collateral** | Yes | No | +| **Borrowable** | No | Yes | +| **Max LTV** | 93.00% | - | +| **Liquidation Threshold** | 95.00% | - | +| **Liquidation Penalty** | 1.00% | - | + +#### ezETH/stablecoin liquid eMode + +| Parameter | ezETH | USDC | USDT | +| :------------------------ | :----- | :--- | :--- | +| **Collateral** | Yes | No | No | +| **Borrowable** | No | Yes | Yes | +| **Max LTV** | 75.00% | - | - | +| **Liquidation Threshold** | 78.00% | - | - | +| **Liquidation Penalty** | 7.50% | - | - | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f48c182543a1abbac35114af7f1807bd5ecb5da6/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f48c182543a1abbac35114af7f1807bd5ecb5da6/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.t.sol) + [Snapshot](Direct-to-AIP) +- [Discussion](https://governance.aave.com/t/direct-to-aip-add-ezeth-to-aave-v3-core-instance/22732) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions_20250520.s.sol b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance_20250801.s.sol similarity index 55% rename from src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions_20250520.s.sol rename to src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance_20250801.s.sol index 9583c2c84..90db34e81 100644 --- a/src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions_20250520.s.sol +++ b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance_20250801.s.sol @@ -3,19 +3,20 @@ 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_StkAAVEEmissions_20250520} from './AaveV3Ethereum_StkAAVEEmissions_20250520.sol'; +import {AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801} from './AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801.sol'; /** * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions_20250520.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/StkAAVEEmissions_20250520.s.sol/1/run-latest.json + * deploy-command: make deploy-ledger contract=src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance_20250801.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AddEzETHToAaveV3CoreInstance_20250801.s.sol/1/run-latest.json */ contract DeployEthereum is EthereumScript { function run() external broadcast { // deploy payloads address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3Ethereum_StkAAVEEmissions_20250520).creationCode + type(AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801).creationCode ); // compose action @@ -30,7 +31,7 @@ contract DeployEthereum is EthereumScript { /** * @dev Create Proposal - * command: make deploy-ledger contract=src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions_20250520.s.sol:CreateProposal chain=mainnet + * command: make deploy-ledger contract=src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance_20250801.s.sol:CreateProposal chain=mainnet */ contract CreateProposal is EthereumScript { function run() external { @@ -38,12 +39,14 @@ contract CreateProposal is EthereumScript { 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_StkAAVEEmissions_20250520).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_AddEzETHToAaveV3CoreInstance_20250801).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); @@ -53,7 +56,7 @@ contract CreateProposal is EthereumScript { GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, GovV3Helpers.ipfsHashFile( vm, - 'src/20250520_AaveV3Ethereum_StkAAVEEmissions/StkAAVEEmissions.md' + 'src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/AddEzETHToAaveV3CoreInstance.md' ) ); } diff --git a/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/config.ts b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/config.ts new file mode 100644 index 000000000..f0aa12f9b --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddEzETHToAaveV3CoreInstance/config.ts @@ -0,0 +1,66 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Add ezETH to Aave v3 Core Instance', + shortName: 'AddEzETHToAaveV3CoreInstance', + date: '20250801', + author: '@TokenLogic', + discussion: + 'https://governance.aave.com/t/direct-to-aip-add-ezeth-to-aave-v3-core-instance/22732', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + EMODES_CREATION: [ + { + ltv: '93', + liqThreshold: '95', + liqBonus: '1', + label: 'ezETH/wstETH', + collateralAssets: [], + borrowableAssets: ['wstETH'], + }, + { + ltv: '75', + liqThreshold: '78', + liqBonus: '7.50', + label: 'ezETH/stablecoin', + collateralAssets: [], + borrowableAssets: ['USDC', 'USDT'], + }, + ], + ASSET_LISTING: [ + { + assetSymbol: 'ezETH', + decimals: 18, + priceFeed: '0xF3d49021fF3bbBFDfC1992A4b09E5D1d141D044C', + ltv: '.05', + liqThreshold: '.1', + liqBonus: '7.5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'DISABLED', + flashloanable: 'ENABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '15', + supplyCap: '50000', + borrowCap: '0', + rateStrategyParams: { + optimalUtilizationRate: '0', + baseVariableBorrowRate: '0', + variableRateSlope1: '0', + variableRateSlope2: '0', + }, + asset: '0xbf5495efe5db9ce00f80364c8b423567e58d2110', + admin: '', + }, + ], + }, + cache: {blockNumber: 23089977}, + }, + }, +}; diff --git a/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol new file mode 100644 index 000000000..a93b201bd --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; +import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; + +/** + * @title Add tETH to Core Instance Ethereum + * @author @TokenLogic + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/direct-to-aip-add-teth-to-core-instance-ethereum/22594/3 + */ +contract AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801 is AaveV3PayloadEthereum { + using SafeERC20 for IERC20; + + uint256 public constant tETH_SEED_AMOUNT = 0.025 ether; + + function _postExecute() internal override { + IERC20(address(AaveV3EthereumLidoAssets.tETH_UNDERLYING)).forceApprove( + address(AaveV3Ethereum.POOL), + tETH_SEED_AMOUNT + ); + AaveV3Ethereum.POOL.supply( + AaveV3EthereumLidoAssets.tETH_UNDERLYING, + tETH_SEED_AMOUNT, + AaveV3Ethereum.DUST_BIN, + 0 + ); + } + + function eModeCategoryCreations() + public + pure + override + returns (IAaveV3ConfigEngine.EModeCategoryCreation[] memory) + { + IAaveV3ConfigEngine.EModeCategoryCreation[] + memory eModeCreations = new IAaveV3ConfigEngine.EModeCategoryCreation[](1); + + address[] memory collateralAssets_tETHStablecoin = new address[](1); + address[] memory borrowableAssets_tETHStablecoin = new address[](2); + + collateralAssets_tETHStablecoin[0] = AaveV3EthereumLidoAssets.tETH_UNDERLYING; + borrowableAssets_tETHStablecoin[0] = AaveV3EthereumAssets.USDC_UNDERLYING; + borrowableAssets_tETHStablecoin[1] = AaveV3EthereumAssets.USDT_UNDERLYING; + + eModeCreations[0] = IAaveV3ConfigEngine.EModeCategoryCreation({ + ltv: 72_00, + liqThreshold: 75_00, + liqBonus: 7_50, + label: 'tETH/Stablecoins', + collaterals: collateralAssets_tETHStablecoin, + borrowables: borrowableAssets_tETHStablecoin + }); + + return eModeCreations; + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); + + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: AaveV3EthereumLidoAssets.tETH_UNDERLYING, + assetSymbol: 'tETH', + priceFeed: AaveV3EthereumLidoAssets.tETH_ORACLE, + enabledToBorrow: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 5, + liqThreshold: 10, + liqBonus: 7_50, + reserveFactor: 15_00, + supplyCap: 10_000, + borrowCap: 0, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 45_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 0, + variableRateSlope2: 0 + }) + }); + + return listings; + } +} diff --git a/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.t.sol b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.t.sol new file mode 100644 index 000000000..76c97f49e --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801} from './AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol'; + +/** + * @dev Test for AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.t.sol -vv + */ +contract AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801_Test is ProtocolV3TestBase { + AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801 internal proposal; + address public constant EXECUTOR = 0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 23098230); + proposal = new AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801(); + deal(AaveV3EthereumLidoAssets.tETH_UNDERLYING, EXECUTOR, 10 ** 18); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_dustBinHastETHFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + address aTokenAddress = AaveV3Ethereum.POOL.getReserveAToken( + AaveV3EthereumLidoAssets.tETH_UNDERLYING + ); + assertGe( + IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.DUST_BIN)), + proposal.tETH_SEED_AMOUNT() + ); + } +} diff --git a/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum.md b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum.md new file mode 100644 index 000000000..a7cc0b470 --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum.md @@ -0,0 +1,75 @@ +--- +title: "Add tETH to Core Instance Ethereum" +author: "@TokenLogic" +discussions: "https://governance.aave.com/t/direct-to-aip-add-teth-to-core-instance-ethereum/22594/3" +--- + +### Summary + +This publication proposes onboarding tETH as collateral to the Aave V3 Core Instance. + +### Motivation + +After successfully onboard tETH to the Prime instance this publication proposes enabling tETH collateral holders to borrow stablecoins via v3.2 Liquid eModes. tETH was listed on the Prime instance on the 28th June 2025 and since then has provided over 129M of User deposit, mostly from four unique addresses, and has been a significant wstETH liquidity consumer. + +Discussions with the TreeHouse team indicate there is strong demand for stablecoins. With insufficient stablecoin liquidity on Prime to support growing tETH, this publication proposes onboarding tETH to Core allow users access to stablecoin liquidity. + +Subject to Risk Service providers approval, this publication propose enabling tETH users to access stablecoin liquidity on Core instance. + +### Specification + +The following outlines the initial tETH onboarding parameters. + +**tETH Ethereum Address:** `0xd11c452fc99cf405034ee446803b6f6c1f6d5ed8` + +#### General Parameters + +| Parameter | Value | +| ---------------------------------- | ------------------------------------------ | +| Chain (instance) | Ethereum (Core) | +| Isolation Mode | false | +| Borrowable | DISABLED | +| Collateral Enabled | true | +| Supply Cap (tETH) | 10,000 | +| Borrow Cap (tETH) | 0 | +| Debt Ceiling | USD 0 | +| LTV | 0.05 % | +| LT | 0.10 % | +| Liquidation Bonus | 7.5 % | +| Liquidation Protocol Fee | 10 % | +| Reserve Factor | 15 % | +| Base Variable Borrow Rate | 0 % | +| Variable Slope 1 | 0 % | +| Variable Slope 2 | 0 % | +| Uoptimal | 45 % | +| Stable Borrowing | DISABLED | +| Stable Slope1 | 0 % | +| Stable Slope2 | 0 % | +| Base Stable Rate Offset | 0 % | +| Stable Rate Excess Offset | 0 % | +| Optimal Stable To Total Debt Ratio | 0 % | +| Flashloanable | ENABLED | +| Siloed Borrowing | DISABLED | +| Borrowable in Isolation | DISABLED | +| Oracle | 0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A | + +#### tETH/stablecoins liquid eMode + +| Parameter | Value | +| --------------------- | ---------- | +| Collateral | tETH | +| Borrowable | USDT, USDC | +| Max LTV | 72.00% | +| Liquidation Threshold | 75.00% | +| Liquidation Penalty | 7.50% | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7a68746f7f5755bffbe21967edf3ed062acf8bbc/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7a68746f7f5755bffbe21967edf3ed062acf8bbc/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.t.sol) +- Snapshot: Direct-to-AIP +- [Discussion](https://governance.aave.com/t/direct-to-aip-add-teth-to-core-instance-ethereum/22594/3) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80_20250418.s.sol b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum_20250801.s.sol similarity index 53% rename from src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80_20250418.s.sol rename to src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum_20250801.s.sol index 2131c5734..61ba16de1 100644 --- a/src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80_20250418.s.sol +++ b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum_20250801.s.sol @@ -3,19 +3,20 @@ 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 {AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418} from './AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418.sol'; +import {AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801} from './AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801.sol'; /** * @dev Deploy Ethereum - * deploy-command: make deploy-ledger contract=src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80_20250418.s.sol:DeployEthereum chain=mainnet - * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ACIPhaseIVRoadTo80_20250418.s.sol/1/run-latest.json + * deploy-command: make deploy-ledger contract=src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum_20250801.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/AddTETHToCoreInstanceEthereum_20250801.s.sol/1/run-latest.json */ contract DeployEthereum is EthereumScript { function run() external broadcast { // deploy payloads address payload0 = GovV3Helpers.deployDeterministic( - type(AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418).creationCode + type(AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801).creationCode ); // compose action @@ -30,7 +31,7 @@ contract DeployEthereum is EthereumScript { /** * @dev Create Proposal - * command: make deploy-ledger contract=src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80_20250418.s.sol:CreateProposal chain=mainnet + * command: make deploy-ledger contract=src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum_20250801.s.sol:CreateProposal chain=mainnet */ contract CreateProposal is EthereumScript { function run() external { @@ -38,12 +39,14 @@ contract CreateProposal is EthereumScript { 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(AaveV3EthereumLido_ACIPhaseIVRoadTo80_20250418).creationCode - ); - payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + { + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_AddTETHToCoreInstanceEthereum_20250801).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } // create proposal vm.startBroadcast(); @@ -53,7 +56,7 @@ contract CreateProposal is EthereumScript { GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, GovV3Helpers.ipfsHashFile( vm, - 'src/20250418_AaveV3EthereumLido_ACIPhaseIVRoadTo80/ACIPhaseIVRoadTo80.md' + 'src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/AddTETHToCoreInstanceEthereum.md' ) ); } diff --git a/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/config.ts b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/config.ts new file mode 100644 index 000000000..275283365 --- /dev/null +++ b/src/20250801_AaveV3Ethereum_AddTETHToCoreInstanceEthereum/config.ts @@ -0,0 +1,58 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Add tETH to Core Instance Ethereum', + shortName: 'AddTETHToCoreInstanceEthereum', + date: '20250801', + author: '@TokenLogic', + discussion: + 'https://governance.aave.com/t/direct-to-aip-add-teth-to-core-instance-ethereum/22594/3', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + EMODES_CREATION: [ + { + ltv: '72', + liqThreshold: '75', + liqBonus: '7.5', + label: 'tETH/Stablecoins', + collateralAssets: ['tETH'], + borrowableAssets: ['USDC', 'USDT'], + }, + ], + ASSET_LISTING: [ + { + assetSymbol: 'tETH', + decimals: 18, + priceFeed: '0x85968026294b8f8Fb86d6bF3Cda079f9376aD05A', + ltv: '.05', + liqThreshold: '.1', + liqBonus: '7.5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'DISABLED', + flashloanable: 'ENABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '15', + supplyCap: '10000', + borrowCap: '0', + rateStrategyParams: { + optimalUtilizationRate: '45', + baseVariableBorrowRate: '0', + variableRateSlope1: '0', + variableRateSlope2: '0', + }, + asset: '0xD11c452fc99cF405034ee446803b6F6c1F6d5ED8', + admin: '', + }, + ], + }, + cache: {blockNumber: 23046913}, + }, + }, +}; diff --git a/src/interfaces/ArbSys.sol b/src/interfaces/ArbSys.sol new file mode 100644 index 000000000..9bcca96c6 --- /dev/null +++ b/src/interfaces/ArbSys.sol @@ -0,0 +1,24 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity >=0.4.21 <0.9.0; + +/** + * @title System level functionality + * @notice For use by contracts to interact with core L2-specific functionality. + * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064. + */ +interface ArbSys { + /** + * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0) + * @return block number as int + */ + function arbBlockNumber() external view returns (uint256); + + /** + * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum) + * @return block hash + */ + function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32); +} diff --git a/src/interfaces/IPendlePriceCapAdapter.sol b/src/interfaces/IPendlePriceCapAdapter.sol new file mode 100644 index 000000000..641fc3499 --- /dev/null +++ b/src/interfaces/IPendlePriceCapAdapter.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IPendlePriceCapAdapter { + /** + * @notice Returns the current discount rate set for a given asset (should be greater than zero and less than `MAX_DISCOUNT_RATE_PER_YEAR`) + * @dev The value may exceed 100%, but only if the period to maturity is less than an year + * @dev The parameter should be set based on the maximum possible APY value of the underlying asset + * @return discountRatePerYear The discount rate for the asset pricing + */ + function discountRatePerYear() external view returns (uint64 discountRatePerYear); +} diff --git a/src/interfaces/IPriceCapAdapter.sol b/src/interfaces/IPriceCapAdapter.sol new file mode 100644 index 000000000..29ba243f2 --- /dev/null +++ b/src/interfaces/IPriceCapAdapter.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IPriceCapAdapter { + /** + * @notice Parameters to update price cap + * @param priceCapParams parameters to set price cap + */ + struct PriceCapUpdateParams { + uint104 snapshotRatio; + uint48 snapshotTimestamp; + uint16 maxYearlyRatioGrowthPercent; + } + + /** + * @notice Updates price cap parameters + * @param priceCapParams parameters to set price cap + */ + function setCapParameters(PriceCapUpdateParams memory priceCapParams) external; + + /** + * @notice Returns the current exchange ratio of lst to the underlying(base) asset + */ + function getRatio() external view returns (int256); + + /** + * @notice Returns the latest snapshot ratio + */ + function getSnapshotRatio() external view returns (uint256); + + /** + * @notice Returns the latest snapshot timestamp + */ + function getSnapshotTimestamp() external view returns (uint256); + + /** + * @notice Returns the max ratio growth per second + */ + function getMaxRatioGrowthPerSecond() external view returns (uint256); + + /** + * @notice Returns the max yearly ratio growth + */ + function getMaxYearlyGrowthRatePercent() external view returns (uint256); +} diff --git a/src/interfaces/IRiskOracle.sol b/src/interfaces/IRiskOracle.sol index 16d757589..269647efa 100644 --- a/src/interfaces/IRiskOracle.sol +++ b/src/interfaces/IRiskOracle.sol @@ -2,50 +2,6 @@ pragma solidity ^0.8.0; interface IRiskOracle { - struct RiskParameterUpdate { - uint256 timestamp; // Timestamp of the update - bytes newValue; // Encoded parameters, flexible for various data types - string referenceId; // External reference, potentially linking to a document or off-chain data - bytes previousValue; // Previous value of the parameter for historical comparison - string updateType; // Classification of the update for validation purposes - uint256 updateId; // Unique identifier for this specific update - address market; // Address for market of the parameter update - bytes additionalData; // Additional data for the update - } - - event ParameterUpdated( - string referenceId, - bytes newValue, - bytes previousValue, - uint256 timestamp, - string indexed updateType, - uint256 indexed updateId, - address indexed market, - bytes additionalData - ); - - event AuthorizedSenderAdded(address indexed sender); - event AuthorizedSenderRemoved(address indexed sender); - event UpdateTypeAdded(string indexed updateType); - - /** - * @notice Adds a new sender to the list of addresses authorized to perform updates. - * @param sender Address to be authorized. - */ - function addAuthorizedSender(address sender) external; - - /** - * @notice Removes an address from the list of authorized senders. - * @param sender Address to be unauthorized. - */ - function removeAuthorizedSender(address sender) external; - - /** - * @notice Method to fetch the counter which tracks of the total number of updates. - * @return The latest update counter. - */ - function updateCounter() external view returns (uint256); - /** * @notice Adds a new type of update to the list of authorized update types. * @param newUpdateType New type of update to allow. @@ -67,48 +23,4 @@ interface IRiskOracle { address market, bytes memory additionalData ) external; - - /** - * @notice Publishes multiple risk parameter updates in a single transaction. - * @param referenceIds Array of external reference IDs. - * @param newValues Array of new values for each update. - * @param updateTypes Array of types for each update, all must be authorized. - * @param markets Array of addresses for markets of the parameter updates - * @param additionalData Array of additional data for the updates - * - */ - function publishBulkRiskParameterUpdates( - string[] memory referenceIds, - bytes[] memory newValues, - string[] memory updateTypes, - address[] memory markets, - bytes[] memory additionalData - ) external; - - function getAllUpdateTypes() external view returns (string[] memory); - - /** - * @notice Fetches the most recent update for a specific parameter in a specific market. - * @param updateType The identifier for the parameter. - * @param market The market identifier. - * @return The most recent RiskParameterUpdate for the specified parameter and market. - */ - function getLatestUpdateByParameterAndMarket( - string memory updateType, - address market - ) external view returns (RiskParameterUpdate memory); - - /* - * @notice Fetches the update for a provided updateId. - * @param updateId Update ID. - * @return The most recent RiskParameterUpdate for the specified id. - */ - function getUpdateById(uint256 updateId) external view returns (RiskParameterUpdate memory); - - /** - * @notice Checks if an address is authorized to perform updates. - * @param sender Address to check. - * @return Boolean indicating whether the address is authorized. - */ - function isAuthorized(address sender) external view returns (bool); } diff --git a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.sol b/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.sol deleted file mode 100644 index 6b00f903e..000000000 --- a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title wstETH Borrow Rate Update - * @author TokenLogic - * - Snapshot: https://snapshot.org/#/s:aave.eth/proposal/0xcb271a2308f78eeab5cbf5576938b61e7437c99781320c1340c885a656c9dbdc - * - Discussion: https://governance.aave.com/t/arfc-wsteth-borrow-rate-update/20762 - */ -contract AaveV3ZkSync_WstETHBorrowRateUpdate_20250128 is AaveV3PayloadZkSync { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ZkSyncAssets.wstETH_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 90_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 75, - variableRateSlope2: 85_00 - }) - }); - - return rateStrategies; - } -} diff --git a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.t.sol b/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.t.sol deleted file mode 100644 index e26cbc0c3..000000000 --- a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_WstETHBorrowRateUpdate_20250128} from './AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.sol'; - -/** - * @dev Test for AaveV3ZkSync_WstETHBorrowRateUpdate_20250128 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250128_Multi_WstETHBorrowRateUpdate/AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.t.sol -vv - */ -contract AaveV3ZkSync_WstETHBorrowRateUpdate_20250128_Test is ProtocolV3TestBase { - AaveV3ZkSync_WstETHBorrowRateUpdate_20250128 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 54743911); - proposal = new AaveV3ZkSync_WstETHBorrowRateUpdate_20250128(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_WstETHBorrowRateUpdate_20250128', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/WstETHBorrowRateUpdate_20250128.s.sol b/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/WstETHBorrowRateUpdate_20250128.s.sol deleted file mode 100644 index dfaa007ce..000000000 --- a/zksync/src/20250128_Multi_WstETHBorrowRateUpdate/WstETHBorrowRateUpdate_20250128.s.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_WstETHBorrowRateUpdate_20250128} from './AaveV3ZkSync_WstETHBorrowRateUpdate_20250128.sol'; - -// @dev wrapper factory contract for deploying the payload -contract Deploy_AaveV3ZkSync_WstETHBorrowRateUpdate_20250128 { - address public immutable PAYLOAD; - - constructor() { - PAYLOAD = GovV3Helpers.deployDeterministicZkSync( - type(AaveV3ZkSync_WstETHBorrowRateUpdate_20250128).creationCode - ); - } -} - -/** - * @dev Deploy ZkSync - * deploy-command: make deploy-pk FOUNDRY_PROFILE=contract=zksync/src/20250128_Multi_WstETHBorrowRateUpdate/WstETHBorrowRateUpdate_20250128.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = new Deploy_AaveV3ZkSync_WstETHBorrowRateUpdate_20250128().PAYLOAD(); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.sol b/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.sol deleted file mode 100644 index 42a1c80e6..000000000 --- a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Decrease Slope1 Parameter for Stablecoins on Aave V3 - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-stewards-decrease-slope1-parameter-for-stablecoins-on-aave-v3-01-29-25/20841 - */ -contract AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203 is - AaveV3PayloadZkSync -{ - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ZkSyncAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 9_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ZkSyncAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 9_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.t.sol b/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.t.sol deleted file mode 100644 index 7116596e7..000000000 --- a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.t.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203} from './AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.sol'; - -/** - * @dev Test for AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.t.sol -vv - */ -contract AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203_Test is - ProtocolV3TestBase -{ - AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 55203165); - proposal = new AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.s.sol b/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.s.sol deleted file mode 100644 index b9bdc6342..000000000 --- a/zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.s.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203} from './AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.sol'; - -// @dev wrapper factory contract for deploying the payload -contract Deploy_AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203 { - address public immutable PAYLOAD; - - constructor() { - PAYLOAD = GovV3Helpers.deployDeterministicZkSync( - type(AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203).creationCode - ); - } -} - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-pk contract=zksync/src/20250203_Multi_DecreaseSlope1ParameterforStablecoinsonAaveV3/DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = new Deploy_AaveV3ZkSync_DecreaseSlope1ParameterforStablecoinsonAaveV3_20250203() - .PAYLOAD(); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250205_Multi_UpgradeAaveInstancesToV33/UpgradeAaveInstancesToV33_20250205.s.sol b/zksync/src/20250205_Multi_UpgradeAaveInstancesToV33/UpgradeAaveInstancesToV33_20250205.s.sol deleted file mode 100644 index e19f302ef..000000000 --- a/zksync/src/20250205_Multi_UpgradeAaveInstancesToV33/UpgradeAaveInstancesToV33_20250205.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250205_Multi_UpgradeAaveInstancesToV33/UpgradeAaveInstancesToV33_20250205.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = 0xcE69DAb549C757432B7e4b62ec496fdc50a66218; - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.sol b/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.sol deleted file mode 100644 index b42d7afd8..000000000 --- a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title sUSDe and USDe Price Feed Update - * @author Aave-chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0xd09ac8571db4d8e70b57162d526e2e088295f6372d37eb0f2b68c5dfbf16d316 - * - Discussion: https://governance.aave.com/t/arfc-susde-and-usde-price-feed-update/20495 - */ -contract AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213 is AaveV3PayloadZkSync { - function priceFeedsUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.PriceFeedUpdate[] memory) - { - IAaveV3ConfigEngine.PriceFeedUpdate[] - memory priceFeedUpdates = new IAaveV3ConfigEngine.PriceFeedUpdate[](1); - - priceFeedUpdates[0] = IAaveV3ConfigEngine.PriceFeedUpdate({ - asset: AaveV3ZkSyncAssets.sUSDe_UNDERLYING, - priceFeed: 0x9172A80ed668D3097D45350ffF71F4421ff572e1 - }); - - return priceFeedUpdates; - } -} diff --git a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.t.sol b/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.t.sol deleted file mode 100644 index 4ae57df9e..000000000 --- a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213} from './AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.sol'; - -/** - * @dev Test for AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.t.sol -vv - */ -contract AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213_Test is ProtocolV3TestBase { - AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 55890667); - proposal = new AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/SUSDeAndUSDePriceFeedUpdate_20250213.s.sol b/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/SUSDeAndUSDePriceFeedUpdate_20250213.s.sol deleted file mode 100644 index 6d30221f9..000000000 --- a/zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/SUSDeAndUSDePriceFeedUpdate_20250213.s.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213} from './AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213.sol'; - -// @dev wrapper factory contract for deploying the payload -contract Deploy_AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213 { - address public immutable PAYLOAD; - - constructor() { - PAYLOAD = GovV3Helpers.deployDeterministicZkSync( - type(AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213).creationCode - ); - } -} - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250213_Multi_SUSDeAndUSDePriceFeedUpdate/SUSDeAndUSDePriceFeedUpdate_20250213.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = new Deploy_AaveV3ZkSync_SUSDeAndUSDePriceFeedUpdate_20250213().PAYLOAD(); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250228_Multi_ClinicStewardActivation/ActivationPayload_20250228.sol b/zksync/src/20250228_Multi_ClinicStewardActivation/ActivationPayload_20250228.sol deleted file mode 100644 index 856442478..000000000 --- a/zksync/src/20250228_Multi_ClinicStewardActivation/ActivationPayload_20250228.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {IAccessControl} from 'aave-v3-origin/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol'; -import {ICollector} from 'aave-v3-origin/contracts/treasury/Collector.sol'; - -/** - * @title Clinic steward activation - * @author BGD Labs @bgdlabs - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0xee0249fea0fecbeb2d2cab90ae3e6d9c5e21d5456417048c49aea9f48f970afe - * - Discussion: https://governance.aave.com/t/arfc-bgd-aave-clinicsteward/21209 - */ -contract ActivationPayload_20250228 is IProposalGenericExecutor { - address public immutable COLLECTOR; - address public immutable STEWARD; - address public immutable CLEANUP_BOT; - - constructor(address collector, address steward, address cleanupBot) { - COLLECTOR = collector; - STEWARD = steward; - CLEANUP_BOT = cleanupBot; - } - - function execute() external { - // 1. give steward funds admin - IAccessControl(COLLECTOR).grantRole(ICollector(COLLECTOR).FUNDS_ADMIN_ROLE(), STEWARD); - // 2. give bot CLEANUP_ROLE - IAccessControl(STEWARD).grantRole(keccak256('CLEANUP_ROLE'), CLEANUP_BOT); - } -} diff --git a/zksync/src/20250228_Multi_ClinicStewardActivation/ClinicStewardActivation_20250228.s.sol b/zksync/src/20250228_Multi_ClinicStewardActivation/ClinicStewardActivation_20250228.s.sol deleted file mode 100644 index 74976bf5c..000000000 --- a/zksync/src/20250228_Multi_ClinicStewardActivation/ClinicStewardActivation_20250228.s.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {ActivationPayload_20250228} from './ActivationPayload_20250228.sol'; - -address constant BOT = 0x3Cbded22F878aFC8d39dCD744d3Fe62086B76193; - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250228_Multi_ClinicStewardActivation/ClinicStewardActivation_20250228.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = address( - new ActivationPayload_20250228{salt: 'v1'}( - address(AaveV3ZkSync.COLLECTOR), - AaveV3ZkSync.CLINIC_STEWARD, - BOT - ) - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol b/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol deleted file mode 100644 index b9f84f7a1..000000000 --- a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -/** - * @title Stablecoins Interest Rate Curve Update - * @author Aave Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-stablecoin-interest-rate-curve-update-03-04-2025/21269 - */ -contract AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312 is AaveV3PayloadZkSync { - function rateStrategiesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) - { - IAaveV3ConfigEngine.RateStrategyUpdate[] - memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2); - rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ZkSyncAssets.USDC_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ - asset: AaveV3ZkSyncAssets.USDT_UNDERLYING, - params: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: EngineFlags.KEEP_CURRENT, - baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, - variableRateSlope1: 6_50, - variableRateSlope2: EngineFlags.KEEP_CURRENT - }) - }); - - return rateStrategies; - } -} diff --git a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.t.sol b/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.t.sol deleted file mode 100644 index 89e580550..000000000 --- a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -/** - * @dev Test for AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.t.sol -vv - */ -contract AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312_Test is ProtocolV3TestBase { - AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 57552347); - proposal = new AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol b/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol deleted file mode 100644 index 6ec85fbbd..000000000 --- a/zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312} from './AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312.sol'; - -// @dev wrapper factory contract for deploying the payload -contract Deploy_AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312 { - address public immutable PAYLOAD; - - constructor() { - PAYLOAD = GovV3Helpers.deployDeterministicZkSync( - type(AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312).creationCode - ); - } -} - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250312_Multi_StablecoinsInterestRateCurveUpdate/StablecoinsInterestRateCurveUpdate_20250312.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = new Deploy_AaveV3ZkSync_StablecoinsInterestRateCurveUpdate_20250312() - .PAYLOAD(); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol b/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol deleted file mode 100644 index 7b12a885b..000000000 --- a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; -import {IRiskSteward} from '../../../src/interfaces/IRiskSteward.sol'; -import {GetRiskConfig} from '../../../src/20250320_Multi_RiskStewardParameterUpdatesPhase3/GetRiskConfig.sol'; - -/** - * @title Risk Steward Parameter Updates Phase 3 - * @author Aave-Chan Initiative - * - Snapshot: https://snapshot.box/#/s:aave.eth/proposal/0x29d176e4d36f38c665ac39775577982339c6a3fcc488a36af73fbd5edfd422ff - * - Discussion: https://governance.aave.com/t/arfc-risk-steward-parameter-updates-phase-3/21135 - */ -contract AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320 is IProposalGenericExecutor { - function execute() external { - // custom code goes here - IRiskSteward(AaveV3ZkSync.RISK_STEWARD).setRiskConfig(GetRiskConfig._getRiskConfig()); - } -} diff --git a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.t.sol b/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.t.sol deleted file mode 100644 index 1584a4449..000000000 --- a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Test for AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.t.sol -vv - */ -contract AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320_Test is ProtocolV3TestBase { - AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 57957473); - proposal = new AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol b/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol deleted file mode 100644 index e1c9af5a1..000000000 --- a/zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320} from './AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320.sol'; - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250320_Multi_RiskStewardParameterUpdatesPhase3/RiskStewardParameterUpdatesPhase3_20250320.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = address( - new AaveV3ZkSync_RiskStewardParameterUpdatesPhase3_20250320{salt: 'aave'}() - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol b/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol deleted file mode 100644 index 17be0273e..000000000 --- a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync, AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; -/** - * @title Onboard wrsETH to ZKsync V3 Instance - * @author Aave-Chan Initiative - * - Snapshot: Direct-to-AIP - * - Discussion: https://governance.aave.com/t/arfc-onboard-wrseth-to-zksync-v3-instance/20727 - */ -contract AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408 is AaveV3PayloadZkSync { - using SafeERC20 for IERC20; - - address public constant wrsETH = 0xd4169E045bcF9a86cC00101225d9ED61D2F51af2; - uint256 public constant wrsETH_SEED_AMOUNT = 0.035e18; - address public constant wrsETH_LM_ADMIN = 0x95Cbff6e45C499d45dd8627f3ce179057B5Fbfcc; - - function _postExecute() internal override { - IERC20(wrsETH).forceApprove(address(AaveV3ZkSync.POOL), wrsETH_SEED_AMOUNT); - AaveV3ZkSync.POOL.supply(wrsETH, wrsETH_SEED_AMOUNT, AaveV3ZkSync.DUST_BIN, 0); - - address awrsETH = AaveV3ZkSync.POOL.getReserveAToken(wrsETH); - IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).setEmissionAdmin(wrsETH, wrsETH_LM_ADMIN); - IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).setEmissionAdmin(awrsETH, wrsETH_LM_ADMIN); - } - - function eModeCategoriesUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) - { - IAaveV3ConfigEngine.EModeCategoryUpdate[] - memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); - - eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ - eModeCategory: 3, - ltv: 92_50, - liqThreshold: 94_50, - liqBonus: 1_00, - label: 'wrsETH/wstETH' - }); - - return eModeUpdates; - } - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](2); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: wrsETH, - eModeCategory: 3, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.ENABLED - }); - assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ZkSyncAssets.wstETH_UNDERLYING, - eModeCategory: 3, - borrowable: EngineFlags.ENABLED, - collateral: EngineFlags.DISABLED - }); - - return assetEModeUpdates; - } - function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { - IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); - - listings[0] = IAaveV3ConfigEngine.Listing({ - asset: wrsETH, - assetSymbol: 'wrsETH', - priceFeed: 0x8d25c9de6DBAd9a9eadfB2CA4706034F6721d555, - enabledToBorrow: EngineFlags.DISABLED, - borrowableInIsolation: EngineFlags.DISABLED, - withSiloedBorrowing: EngineFlags.DISABLED, - flashloanable: EngineFlags.ENABLED, - ltv: 5, - liqThreshold: 10, - liqBonus: 7_50, - reserveFactor: 10_00, - supplyCap: 700, - borrowCap: 1, - debtCeiling: 0, - liqProtocolFee: 10_00, - rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ - optimalUsageRatio: 45_00, - baseVariableBorrowRate: 0, - variableRateSlope1: 10_00, - variableRateSlope2: 300_00 - }) - }); - - return listings; - } -} diff --git a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.t.sol b/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.t.sol deleted file mode 100644 index 18e85c302..000000000 --- a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; -import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; -import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408} from './AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol'; - -/** - * @dev Test for AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.t.sol -vv - */ -contract AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408_Test is ProtocolV3TestBase { - AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 58835283); - proposal = new AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408', - AaveV3ZkSync.POOL, - address(proposal) - ); - } - - function test_dustBinHaswrsETHFunds() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address aTokenAddress = AaveV3ZkSync.POOL.getReserveAToken(proposal.wrsETH()); - assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3ZkSync.DUST_BIN)), 35 * 10 ** 15); - } - - function test_wrsETHAdmin() public { - GovV3Helpers.executePayload(vm, address(proposal)); - address awrsETH = AaveV3ZkSync.POOL.getReserveAToken(proposal.wrsETH()); - assertEq( - IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).getEmissionAdmin(proposal.wrsETH()), - proposal.wrsETH_LM_ADMIN() - ); - assertEq( - IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).getEmissionAdmin(awrsETH), - proposal.wrsETH_LM_ADMIN() - ); - } -} diff --git a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol b/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol deleted file mode 100644 index 4a1e9e7d8..000000000 --- a/zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408} from './AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408.sol'; - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250408_AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance/OnboardWrsETHToZKsyncV3Instance_20250408.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = address( - new AaveV3ZkSync_OnboardWrsETHToZKsyncV3Instance_20250408{salt: 'aave'}() - ); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.sol b/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.sol deleted file mode 100644 index ed15a5dac..000000000 --- a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSyncAssets, AaveV3ZkSyncEModes} from 'aave-address-book/AaveV3ZkSync.sol'; -import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; -import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; -import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; - -/** - * @title Configuration maintenance - * @author BGD Labs @bgdlabs - * - Discussion: https://governance.aave.com/t/technical-maintenance-proposals/15274/86 - */ -contract AaveV3ZkSync_ConfigurationMaintenance_20250519 is AaveV3PayloadZkSync { - function assetsEModeUpdates() - public - pure - override - returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory) - { - IAaveV3ConfigEngine.AssetEModeUpdate[] - memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](1); - - assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({ - asset: AaveV3ZkSyncAssets.wstETH_UNDERLYING, - eModeCategory: AaveV3ZkSyncEModes.ETH_CORRELATED, - borrowable: EngineFlags.DISABLED, - collateral: EngineFlags.KEEP_CURRENT - }); - - return assetEModeUpdates; - } -} diff --git a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.t.sol b/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.t.sol deleted file mode 100644 index e3663eefb..000000000 --- a/zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; - -import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; -import {AaveV3ZkSync_ConfigurationMaintenance_20250519} from './AaveV3ZkSync_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Test for AaveV3ZkSync_ConfigurationMaintenance_20250519 - * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20250519_Multi_ConfigurationMaintenance/AaveV3ZkSync_ConfigurationMaintenance_20250519.t.sol -vv - */ -contract AaveV3ZkSync_ConfigurationMaintenance_20250519_Test is ProtocolV3TestBase { - AaveV3ZkSync_ConfigurationMaintenance_20250519 internal proposal; - - function setUp() public override { - vm.createSelectFork(vm.rpcUrl('zksync'), 60633796); - proposal = new AaveV3ZkSync_ConfigurationMaintenance_20250519(); - - super.setUp(); - } - - /** - * @dev executes the generic test suite including e2e and config snapshots - */ - function test_defaultProposalExecution() public { - defaultTest( - 'AaveV3ZkSync_ConfigurationMaintenance_20250519', - AaveV3ZkSync.POOL, - address(proposal) - ); - } -} diff --git a/zksync/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol b/zksync/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol deleted file mode 100644 index 24f254b48..000000000 --- a/zksync/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; -import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; -import {AaveV3ZkSync_ConfigurationMaintenance_20250519} from './AaveV3ZkSync_ConfigurationMaintenance_20250519.sol'; - -/** - * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250519_Multi_ConfigurationMaintenance/ConfigurationMaintenance_20250519.s.sol:DeployZkSync chain=zksync - */ -contract DeployZkSync is ZkSyncScript { - function run() external broadcast { - // deploy payloads - address payload0 = address(new AaveV3ZkSync_ConfigurationMaintenance_20250519{salt: 'aave'}()); - - // compose action - IPayloadsControllerCore.ExecutionAction[] - memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(payload0); - - // register action at payloadsController - GovV3Helpers.createPayload(actions); - } -} diff --git a/zksync/src/20250124_Multi_CollectorUpgrade/CollectorUpgrade_20250124.s.sol b/zksync/src/20250722_Multi_UpgradeAaveInstancesToV35/UpgradeAaveInstancesToV35_20250722.s.sol similarity index 68% rename from zksync/src/20250124_Multi_CollectorUpgrade/CollectorUpgrade_20250124.s.sol rename to zksync/src/20250722_Multi_UpgradeAaveInstancesToV35/UpgradeAaveInstancesToV35_20250722.s.sol index 715312522..24e51f0cc 100644 --- a/zksync/src/20250124_Multi_CollectorUpgrade/CollectorUpgrade_20250124.s.sol +++ b/zksync/src/20250722_Multi_UpgradeAaveInstancesToV35/UpgradeAaveInstancesToV35_20250722.s.sol @@ -2,18 +2,19 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; + import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; /** * @dev Deploy ZkSync - * deploy-command: FOUNDRY_PROFILE=zksync make deploy-ledger contract=zksync/src/20250124_Multi_CollectorUpgrade/CollectorUpgrade_20250124.s.sol:DeployZkSync chain=zksync + * deploy-command: make deploy-ledger-zk contract=zksync/src/20250722_Multi_UpgradeAaveInstancesToV35/UpgradeAaveInstancesToV35_20250722.s.sol:DeployZkSync chain=zksync */ contract DeployZkSync is ZkSyncScript { function run() external broadcast { // compose action IPayloadsControllerCore.ExecutionAction[] memory actions = new IPayloadsControllerCore.ExecutionAction[](1); - actions[0] = GovV3Helpers.buildAction(0xa5569DA53e95dD6311f01CCE03FA0BAD56d04125); + actions[0] = GovV3Helpers.buildAction(0x1bC646CD1Fc56024f16B1Abf2197Fc0100c00Cf8); // register action at payloadsController GovV3Helpers.createPayload(actions);