diff --git a/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg b/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg
new file mode 100644
index 000000000..85a982918
--- /dev/null
+++ b/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg b/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg
new file mode 100644
index 000000000..e66de2390
--- /dev/null
+++ b/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_SetPriceCapAdapters_20240227_before_AaveV3Arbitrum_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Arbitrum_SetPriceCapAdapters_20240227_before_AaveV3Arbitrum_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..739feda9a
--- /dev/null
+++ b/diffs/AaveV3Arbitrum_SetPriceCapAdapters_20240227_before_AaveV3Arbitrum_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,174 @@
+## Reserve changes
+
+### Reserve altered
+
+#### FRAX ([0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F](https://arbiscan.io/address/0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x0809E3d38d1B4214958faf06D8b1B1a2b73f2ab8](https://arbiscan.io/address/0x0809E3d38d1B4214958faf06D8b1B1a2b73f2ab8) | [0x06919EB75Bd6BA817D38CC70C1CA588ac7a01C10](https://arbiscan.io/address/0x06919EB75Bd6BA817D38CC70C1CA588ac7a01C10) |
+| oracleDescription | FRAX / USD | Capped FRAX/USD |
+
+
+#### MAI ([0x3F56e0c36d275367b8C502090EDF38289b3dEa0d](https://arbiscan.io/address/0x3F56e0c36d275367b8C502090EDF38289b3dEa0d))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x59644ec622243878d1464A9504F9e9a31294128a](https://arbiscan.io/address/0x59644ec622243878d1464A9504F9e9a31294128a) | [0x7a7cE08a1057723CCEDeA2462407427Ae33FFEb2](https://arbiscan.io/address/0x7a7cE08a1057723CCEDeA2462407427Ae33FFEb2) |
+| oracleDescription | MIMATIC / USD | Capped MAI/USD |
+
+
+#### wstETH ([0x5979D7b546E38E414F7E9822514be443A4800529](https://arbiscan.io/address/0x5979D7b546E38E414F7E9822514be443A4800529))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x945fD405773973d286De54E44649cc0d9e264F78](https://arbiscan.io/address/0x945fD405773973d286De54E44649cc0d9e264F78) | [0x87fE1503beFBF98C35c7526B0c488d950F822C0F](https://arbiscan.io/address/0x87fE1503beFBF98C35c7526B0c488d950F822C0F) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### LUSD ([0x93b346b6BC2548dA6A1E7d98E9a421B42541425b](https://arbiscan.io/address/0x93b346b6BC2548dA6A1E7d98E9a421B42541425b))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x0411D28c94d85A36bC72Cb0f875dfA8371D8fFfF](https://arbiscan.io/address/0x0411D28c94d85A36bC72Cb0f875dfA8371D8fFfF) | [0x341B110bDF665A20F0D5f84A92FcAF5EbeEBC629](https://arbiscan.io/address/0x341B110bDF665A20F0D5f84A92FcAF5EbeEBC629) |
+| oracleDescription | LUSD / USD | Capped LUSD/USD |
+
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xc5C8E77B397E531B8EC06BFb0048328B30E9eCfB](https://arbiscan.io/address/0xc5C8E77B397E531B8EC06BFb0048328B30E9eCfB) | [0x4a838a3Dac6633bB1fd932B6f356DecFCAf7803D](https://arbiscan.io/address/0x4a838a3Dac6633bB1fd932B6f356DecFCAf7803D) |
+| oracleDescription | DAI / USD | Capped DAI/USD |
+
+
+#### rETH ([0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8](https://arbiscan.io/address/0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x04c28D6fE897859153eA753f986cc249Bf064f71](https://arbiscan.io/address/0x04c28D6fE897859153eA753f986cc249Bf064f71) | [0x256f33FC0110B1297f78f48524631D30B752480D](https://arbiscan.io/address/0x256f33FC0110B1297f78f48524631D30B752480D) |
+| oracleDescription | rETH/ETH/USD | Capped rETH / ETH / USD |
+
+
+#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3](https://arbiscan.io/address/0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3) | [0xDe25a88F87FEd9F8999fAbF6729dCB121893623C](https://arbiscan.io/address/0xDe25a88F87FEd9F8999fAbF6729dCB121893623C) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x3f3f5dF88dC9F13eac63DF89EC16ef6e7E25DdE7](https://arbiscan.io/address/0x3f3f5dF88dC9F13eac63DF89EC16ef6e7E25DdE7) | [0x84dC1C52D7C340AA54B4e8799FBB31C3D28E67aD](https://arbiscan.io/address/0x84dC1C52D7C340AA54B4e8799FBB31C3D28E67aD) |
+| oracleDescription | USDT / USD | Capped USDT/USD |
+
+
+#### USDC ([0xaf88d065e77c8cC2239327C5EDb3A432268e5831](https://arbiscan.io/address/0xaf88d065e77c8cC2239327C5EDb3A432268e5831))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3](https://arbiscan.io/address/0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3) | [0xDe25a88F87FEd9F8999fAbF6729dCB121893623C](https://arbiscan.io/address/0xDe25a88F87FEd9F8999fAbF6729dCB121893623C) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": {
+ "oracle": {
+ "from": "0x0809E3d38d1B4214958faf06D8b1B1a2b73f2ab8",
+ "to": "0x06919EB75Bd6BA817D38CC70C1CA588ac7a01C10"
+ },
+ "oracleDescription": {
+ "from": "FRAX / USD",
+ "to": "Capped FRAX/USD"
+ }
+ },
+ "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d": {
+ "oracle": {
+ "from": "0x59644ec622243878d1464A9504F9e9a31294128a",
+ "to": "0x7a7cE08a1057723CCEDeA2462407427Ae33FFEb2"
+ },
+ "oracleDescription": {
+ "from": "MIMATIC / USD",
+ "to": "Capped MAI/USD"
+ }
+ },
+ "0x5979D7b546E38E414F7E9822514be443A4800529": {
+ "oracle": {
+ "from": "0x945fD405773973d286De54E44649cc0d9e264F78",
+ "to": "0x87fE1503beFBF98C35c7526B0c488d950F822C0F"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": {
+ "oracle": {
+ "from": "0x0411D28c94d85A36bC72Cb0f875dfA8371D8fFfF",
+ "to": "0x341B110bDF665A20F0D5f84A92FcAF5EbeEBC629"
+ },
+ "oracleDescription": {
+ "from": "LUSD / USD",
+ "to": "Capped LUSD/USD"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "oracle": {
+ "from": "0xc5C8E77B397E531B8EC06BFb0048328B30E9eCfB",
+ "to": "0x4a838a3Dac6633bB1fd932B6f356DecFCAf7803D"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped DAI/USD"
+ }
+ },
+ "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8": {
+ "oracle": {
+ "from": "0x04c28D6fE897859153eA753f986cc249Bf064f71",
+ "to": "0x256f33FC0110B1297f78f48524631D30B752480D"
+ },
+ "oracleDescription": {
+ "from": "rETH/ETH/USD",
+ "to": "Capped rETH / ETH / USD"
+ }
+ },
+ "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
+ "oracle": {
+ "from": "0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3",
+ "to": "0xDe25a88F87FEd9F8999fAbF6729dCB121893623C"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
+ "oracle": {
+ "from": "0x3f3f5dF88dC9F13eac63DF89EC16ef6e7E25DdE7",
+ "to": "0x84dC1C52D7C340AA54B4e8799FBB31C3D28E67aD"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDT/USD"
+ }
+ },
+ "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": {
+ "oracle": {
+ "from": "0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3",
+ "to": "0xDe25a88F87FEd9F8999fAbF6729dCB121893623C"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_SetPriceCapAdapters_20240227_before_AaveV3Avalanche_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Avalanche_SetPriceCapAdapters_20240227_before_AaveV3Avalanche_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..170e7c9ab
--- /dev/null
+++ b/diffs/AaveV3Avalanche_SetPriceCapAdapters_20240227_before_AaveV3Avalanche_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,125 @@
+## Reserve changes
+
+### Reserve altered
+
+#### sAVAX ([0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE](https://snowtrace.io/address/0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xc9245871D69BF4c36c6F2D15E0D68Ffa883FE1A7](https://snowtrace.io/address/0xc9245871D69BF4c36c6F2D15E0D68Ffa883FE1A7) | [0xB2B332f27e4B7305649a228C31Ed9858c5a6bAD9](https://snowtrace.io/address/0xB2B332f27e4B7305649a228C31Ed9858c5a6bAD9) |
+| oracleDecimals | null | 8 |
+| oracleDescription | null | Capped sAVAX / AVAX / USD |
+
+
+#### MAI ([0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b](https://snowtrace.io/address/0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x5D1F504211c17365CA66353442a74D4435A8b778](https://snowtrace.io/address/0x5D1F504211c17365CA66353442a74D4435A8b778) | [0xCcC55Db26B78a19Dba1beE0066F9c1665575439A](https://snowtrace.io/address/0xCcC55Db26B78a19Dba1beE0066F9c1665575439A) |
+| oracleDescription | MIMATIC / USD | Capped MAI/USD |
+
+
+#### USDt ([0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7](https://snowtrace.io/address/0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xEBE676ee90Fe1112671f19b6B7459bC678B67e8a](https://snowtrace.io/address/0xEBE676ee90Fe1112671f19b6B7459bC678B67e8a) | [0x39185f2236A6022b682e8BB93C040d125DA093CF](https://snowtrace.io/address/0x39185f2236A6022b682e8BB93C040d125DA093CF) |
+| oracleDescription | USDT / USD | Capped USDt/USD |
+
+
+#### USDC ([0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E](https://snowtrace.io/address/0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xF096872672F44d6EBA71458D74fe67F9a77a23B9](https://snowtrace.io/address/0xF096872672F44d6EBA71458D74fe67F9a77a23B9) | [0xD8277249e871BE9A402fa286C2C5ec16046dC512](https://snowtrace.io/address/0xD8277249e871BE9A402fa286C2C5ec16046dC512) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### FRAX ([0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64](https://snowtrace.io/address/0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xbBa56eF1565354217a3353a466edB82E8F25b08e](https://snowtrace.io/address/0xbBa56eF1565354217a3353a466edB82E8F25b08e) | [0x6208576378D06ce69A27987b7A524A9B15d499a4](https://snowtrace.io/address/0x6208576378D06ce69A27987b7A524A9B15d499a4) |
+| oracleDescription | FRAX / USD | Capped FRAX/USD |
+
+
+#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x51D7180edA2260cc4F6e4EebB82FEF5c3c2B8300](https://snowtrace.io/address/0x51D7180edA2260cc4F6e4EebB82FEF5c3c2B8300) | [0xf82da795727633aFA9BB0f1B08A87c0F6A38723f](https://snowtrace.io/address/0xf82da795727633aFA9BB0f1B08A87c0F6A38723f) |
+| oracleDescription | DAI / USD | Capped DAI.e/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE": {
+ "oracle": {
+ "from": "0xc9245871D69BF4c36c6F2D15E0D68Ffa883FE1A7",
+ "to": "0xB2B332f27e4B7305649a228C31Ed9858c5a6bAD9"
+ },
+ "oracleDecimals": {
+ "from": null,
+ "to": 8
+ },
+ "oracleDescription": {
+ "from": null,
+ "to": "Capped sAVAX / AVAX / USD"
+ }
+ },
+ "0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b": {
+ "oracle": {
+ "from": "0x5D1F504211c17365CA66353442a74D4435A8b778",
+ "to": "0xCcC55Db26B78a19Dba1beE0066F9c1665575439A"
+ },
+ "oracleDescription": {
+ "from": "MIMATIC / USD",
+ "to": "Capped MAI/USD"
+ }
+ },
+ "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
+ "oracle": {
+ "from": "0xEBE676ee90Fe1112671f19b6B7459bC678B67e8a",
+ "to": "0x39185f2236A6022b682e8BB93C040d125DA093CF"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDt/USD"
+ }
+ },
+ "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
+ "oracle": {
+ "from": "0xF096872672F44d6EBA71458D74fe67F9a77a23B9",
+ "to": "0xD8277249e871BE9A402fa286C2C5ec16046dC512"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": {
+ "oracle": {
+ "from": "0xbBa56eF1565354217a3353a466edB82E8F25b08e",
+ "to": "0x6208576378D06ce69A27987b7A524A9B15d499a4"
+ },
+ "oracleDescription": {
+ "from": "FRAX / USD",
+ "to": "Capped FRAX/USD"
+ }
+ },
+ "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
+ "oracle": {
+ "from": "0x51D7180edA2260cc4F6e4EebB82FEF5c3c2B8300",
+ "to": "0xf82da795727633aFA9BB0f1B08A87c0F6A38723f"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped DAI.e/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3BNB_SetPriceCapAdapters_20240227_before_AaveV3BNB_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3BNB_SetPriceCapAdapters_20240227_before_AaveV3BNB_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..344a282bb
--- /dev/null
+++ b/diffs/AaveV3BNB_SetPriceCapAdapters_20240227_before_AaveV3BNB_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,66 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDT ([0x55d398326f99059fF775485246999027B3197955](https://bscscan.com/address/0x55d398326f99059fF775485246999027B3197955))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xB97Ad0E74fa7d920791E90258A6E2085088b4320](https://bscscan.com/address/0xB97Ad0E74fa7d920791E90258A6E2085088b4320) | [0x0F682319Ed4A240b7a2599A48C965049515D9bC3](https://bscscan.com/address/0x0F682319Ed4A240b7a2599A48C965049515D9bC3) |
+| oracleDescription | USDT / USD | Capped USDT/USD |
+
+
+#### USDC ([0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d](https://bscscan.com/address/0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x51597f405303C4377E36123cBc172b13269EA163](https://bscscan.com/address/0x51597f405303C4377E36123cBc172b13269EA163) | [0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1](https://bscscan.com/address/0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### FDUSD ([0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409](https://bscscan.com/address/0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x390180e80058A8499930F0c13963AD3E0d86Bfc9](https://bscscan.com/address/0x390180e80058A8499930F0c13963AD3E0d86Bfc9) | [0x60a117Fa5bAbee4d645884fB11E413Da4F893b6D](https://bscscan.com/address/0x60a117Fa5bAbee4d645884fB11E413Da4F893b6D) |
+| oracleDescription | FDUSD / USD | Capped fdUSD/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x55d398326f99059fF775485246999027B3197955": {
+ "oracle": {
+ "from": "0xB97Ad0E74fa7d920791E90258A6E2085088b4320",
+ "to": "0x0F682319Ed4A240b7a2599A48C965049515D9bC3"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDT/USD"
+ }
+ },
+ "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": {
+ "oracle": {
+ "from": "0x51597f405303C4377E36123cBc172b13269EA163",
+ "to": "0xaFcFF74AE956f4c23c27Db49659D4a7F350415C1"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409": {
+ "oracle": {
+ "from": "0x390180e80058A8499930F0c13963AD3E0d86Bfc9",
+ "to": "0x60a117Fa5bAbee4d645884fB11E413Da4F893b6D"
+ },
+ "oracleDescription": {
+ "from": "FDUSD / USD",
+ "to": "Capped fdUSD/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_SetPriceCapAdapters_20240227_before_AaveV3Base_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Base_SetPriceCapAdapters_20240227_before_AaveV3Base_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..0afef352a
--- /dev/null
+++ b/diffs/AaveV3Base_SetPriceCapAdapters_20240227_before_AaveV3Base_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,89 @@
+## Reserve changes
+
+### Reserve altered
+
+#### cbETH ([0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22](https://basescan.org/address/0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x80f2c02224a2E548FC67c0bF705eBFA825dd5439](https://basescan.org/address/0x80f2c02224a2E548FC67c0bF705eBFA825dd5439) | [0x8e11Ad4531826ff47BD8157a2c705F5422Da6A61](https://basescan.org/address/0x8e11Ad4531826ff47BD8157a2c705F5422Da6A61) |
+| oracleDescription | cbETH/ETH/USD | Capped cbETH / ETH / USD |
+| oracleLatestAnswer | 3773.85227086 | 3794.50527887 |
+
+
+#### USDC ([0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913](https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x7e860098F58bBFC8648a4311b374B1D669a2bc6B](https://basescan.org/address/0x7e860098F58bBFC8648a4311b374B1D669a2bc6B) | [0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f](https://basescan.org/address/0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### wstETH ([0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452](https://basescan.org/address/0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x945fD405773973d286De54E44649cc0d9e264F78](https://basescan.org/address/0x945fD405773973d286De54E44649cc0d9e264F78) | [0x56038D3998C42db18ba3B821bD1EbaB9B678e657](https://basescan.org/address/0x56038D3998C42db18ba3B821bD1EbaB9B678e657) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x7e860098F58bBFC8648a4311b374B1D669a2bc6B](https://basescan.org/address/0x7e860098F58bBFC8648a4311b374B1D669a2bc6B) | [0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f](https://basescan.org/address/0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22": {
+ "oracle": {
+ "from": "0x80f2c02224a2E548FC67c0bF705eBFA825dd5439",
+ "to": "0x8e11Ad4531826ff47BD8157a2c705F5422Da6A61"
+ },
+ "oracleDescription": {
+ "from": "cbETH/ETH/USD",
+ "to": "Capped cbETH / ETH / USD"
+ },
+ "oracleLatestAnswer": {
+ "from": 377385227086,
+ "to": 379450527887
+ }
+ },
+ "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
+ "oracle": {
+ "from": "0x7e860098F58bBFC8648a4311b374B1D669a2bc6B",
+ "to": "0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452": {
+ "oracle": {
+ "from": "0x945fD405773973d286De54E44649cc0d9e264F78",
+ "to": "0x56038D3998C42db18ba3B821bD1EbaB9B678e657"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": {
+ "oracle": {
+ "from": "0x7e860098F58bBFC8648a4311b374B1D669a2bc6B",
+ "to": "0x978D8878b53Fbe40dab7D4AB47b97AB622FFeF9f"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_SetPriceCapAdapters_20240227_before_AaveV3Ethereum_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Ethereum_SetPriceCapAdapters_20240227_before_AaveV3Ethereum_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..6154e3877
--- /dev/null
+++ b/diffs/AaveV3Ethereum_SetPriceCapAdapters_20240227_before_AaveV3Ethereum_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,202 @@
+## Reserve changes
+
+### Reserve altered
+
+#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x3D7aE7E594f2f2091Ad8798313450130d0Aba3a0](https://etherscan.io/address/0x3D7aE7E594f2f2091Ad8798313450130d0Aba3a0) | [0x9eCdfaCca946614cc32aF63F3DBe50959244F3af](https://etherscan.io/address/0x9eCdfaCca946614cc32aF63F3DBe50959244F3af) |
+| oracleDescription | LUSD / USD | Capped LUSD/USD |
+
+
+#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9](https://etherscan.io/address/0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9) | [0xaEb897E1Dc6BbdceD3B9D551C71a8cf172F27AC4](https://etherscan.io/address/0xaEb897E1Dc6BbdceD3B9D551C71a8cf172F27AC4) |
+| oracleDescription | DAI / USD | Capped DAI/USD |
+
+
+#### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x8f1dF6D7F2db73eECE86a18b4381F4707b918FB1](https://etherscan.io/address/0x8f1dF6D7F2db73eECE86a18b4381F4707b918FB1) | [0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022](https://etherscan.io/address/0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022) |
+| oracleDescription | PYUSD / USD | Capped pyUSD/USD |
+
+
+#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x8B6851156023f4f5A66F68BEA80851c3D905Ac93](https://etherscan.io/address/0x8B6851156023f4f5A66F68BEA80851c3D905Ac93) | [0xB4aB0c94159bc2d8C133946E7241368fc2F2a010](https://etherscan.io/address/0xB4aB0c94159bc2d8C133946E7241368fc2F2a010) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD](https://etherscan.io/address/0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD) | [0x45D270263BBee500CF8adcf2AbC0aC227097b036](https://etherscan.io/address/0x45D270263BBee500CF8adcf2AbC0aC227097b036) |
+| oracleDescription | FRAX / USD | Capped FRAX/USD |
+
+
+#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6](https://etherscan.io/address/0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6) | [0x736bF902680e68989886e9807CD7Db4B3E015d3C](https://etherscan.io/address/0x736bF902680e68989886e9807CD7Db4B3E015d3C) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### cbETH ([0xBe9895146f7AF43049ca1c1AE358B0541Ea49704](https://etherscan.io/address/0xBe9895146f7AF43049ca1c1AE358B0541Ea49704))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x5f4d15d761528c57a5C30c43c1DAb26Fc5452731](https://etherscan.io/address/0x5f4d15d761528c57a5C30c43c1DAb26Fc5452731) | [0x6243d2F41b4ec944F731f647589E28d9745a2674](https://etherscan.io/address/0x6243d2F41b4ec944F731f647589E28d9745a2674) |
+| oracleDescription | null | Capped cbETH / ETH / USD |
+| oracleLatestAnswer | 4250.44712602 | 4272.48373554 |
+
+
+#### rETH ([0xae78736Cd615f374D3085123A210448E74Fc6393](https://etherscan.io/address/0xae78736Cd615f374D3085123A210448E74Fc6393))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x05225Cd708bCa9253789C1374e4337a019e99D56](https://etherscan.io/address/0x05225Cd708bCa9253789C1374e4337a019e99D56) | [0x5AE8365D0a30D67145f0c55A08760C250559dB64](https://etherscan.io/address/0x5AE8365D0a30D67145f0c55A08760C250559dB64) |
+| oracleDecimals | null | 8 |
+| oracleDescription | null | Capped rETH / ETH / USD |
+
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x3E7d1eAB13ad0104d2750B8863b489D65364e32D](https://etherscan.io/address/0x3E7d1eAB13ad0104d2750B8863b489D65364e32D) | [0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8](https://etherscan.io/address/0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8) |
+| oracleDescription | USDT / USD | Capped USDT/USD |
+
+
+#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xEEf0C605546958c1f899b6fB336C20671f9cD49F](https://etherscan.io/address/0xEEf0C605546958c1f899b6fB336C20671f9cD49F) | [0x02AeE5b225366302339748951E1a924617b8814F](https://etherscan.io/address/0x02AeE5b225366302339748951E1a924617b8814F) |
+| oracleDescription | CRVUSD / USD | Capped crvUSD/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
+ "oracle": {
+ "from": "0x3D7aE7E594f2f2091Ad8798313450130d0Aba3a0",
+ "to": "0x9eCdfaCca946614cc32aF63F3DBe50959244F3af"
+ },
+ "oracleDescription": {
+ "from": "LUSD / USD",
+ "to": "Capped LUSD/USD"
+ }
+ },
+ "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
+ "oracle": {
+ "from": "0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9",
+ "to": "0xaEb897E1Dc6BbdceD3B9D551C71a8cf172F27AC4"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped DAI/USD"
+ }
+ },
+ "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": {
+ "oracle": {
+ "from": "0x8f1dF6D7F2db73eECE86a18b4381F4707b918FB1",
+ "to": "0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022"
+ },
+ "oracleDescription": {
+ "from": "PYUSD / USD",
+ "to": "Capped pyUSD/USD"
+ }
+ },
+ "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": {
+ "oracle": {
+ "from": "0x8B6851156023f4f5A66F68BEA80851c3D905Ac93",
+ "to": "0xB4aB0c94159bc2d8C133946E7241368fc2F2a010"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
+ "oracle": {
+ "from": "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD",
+ "to": "0x45D270263BBee500CF8adcf2AbC0aC227097b036"
+ },
+ "oracleDescription": {
+ "from": "FRAX / USD",
+ "to": "Capped FRAX/USD"
+ }
+ },
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
+ "oracle": {
+ "from": "0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6",
+ "to": "0x736bF902680e68989886e9807CD7Db4B3E015d3C"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704": {
+ "oracle": {
+ "from": "0x5f4d15d761528c57a5C30c43c1DAb26Fc5452731",
+ "to": "0x6243d2F41b4ec944F731f647589E28d9745a2674"
+ },
+ "oracleLatestAnswer": {
+ "from": 425044712602,
+ "to": 427248373554
+ },
+ "oracleDescription": {
+ "from": null,
+ "to": "Capped cbETH / ETH / USD"
+ }
+ },
+ "0xae78736Cd615f374D3085123A210448E74Fc6393": {
+ "oracle": {
+ "from": "0x05225Cd708bCa9253789C1374e4337a019e99D56",
+ "to": "0x5AE8365D0a30D67145f0c55A08760C250559dB64"
+ },
+ "oracleDecimals": {
+ "from": null,
+ "to": 8
+ },
+ "oracleDescription": {
+ "from": null,
+ "to": "Capped rETH / ETH / USD"
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "oracle": {
+ "from": "0x3E7d1eAB13ad0104d2750B8863b489D65364e32D",
+ "to": "0xC26D4a1c46d884cfF6dE9800B6aE7A8Cf48B4Ff8"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDT/USD"
+ }
+ },
+ "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": {
+ "oracle": {
+ "from": "0xEEf0C605546958c1f899b6fB336C20671f9cD49F",
+ "to": "0x02AeE5b225366302339748951E1a924617b8814F"
+ },
+ "oracleDescription": {
+ "from": "CRVUSD / USD",
+ "to": "Capped crvUSD/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_SetPriceCapAdapters_20240227_before_AaveV3Gnosis_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Gnosis_SetPriceCapAdapters_20240227_before_AaveV3Gnosis_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..d3cb8d305
--- /dev/null
+++ b/diffs/AaveV3Gnosis_SetPriceCapAdapters_20240227_before_AaveV3Gnosis_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,66 @@
+## Reserve changes
+
+### Reserve altered
+
+#### wstETH ([0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6](https://gnosisscan.io/address/0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xcb0670258e5961CCA85D8F71D29C1167Ef20De99](https://gnosisscan.io/address/0xcb0670258e5961CCA85D8F71D29C1167Ef20De99) | [0x8Ee42Ba520cA106294163fb8b1ffE9C6Fba35507](https://gnosisscan.io/address/0x8Ee42Ba520cA106294163fb8b1ffE9C6Fba35507) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### USDC ([0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83](https://gnosisscan.io/address/0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x26C31ac71010aF62E6B486D1132E266D6298857D](https://gnosisscan.io/address/0x26C31ac71010aF62E6B486D1132E266D6298857D) | [0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2](https://gnosisscan.io/address/0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### WXDAI ([0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d](https://gnosisscan.io/address/0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x678df3415fc31947dA4324eC63212874be5a82f8](https://gnosisscan.io/address/0x678df3415fc31947dA4324eC63212874be5a82f8) | [0xE5269eF0CE04E509E8134624c7BF043b21e10897](https://gnosisscan.io/address/0xE5269eF0CE04E509E8134624c7BF043b21e10897) |
+| oracleDescription | DAI / USD | Capped wXDAI/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6": {
+ "oracle": {
+ "from": "0xcb0670258e5961CCA85D8F71D29C1167Ef20De99",
+ "to": "0x8Ee42Ba520cA106294163fb8b1ffE9C6Fba35507"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": {
+ "oracle": {
+ "from": "0x26C31ac71010aF62E6B486D1132E266D6298857D",
+ "to": "0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d": {
+ "oracle": {
+ "from": "0x678df3415fc31947dA4324eC63212874be5a82f8",
+ "to": "0xE5269eF0CE04E509E8134624c7BF043b21e10897"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped wXDAI/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Metis_SetPriceCapAdapters_20240304_before_AaveV3Metis_SetPriceCapAdapters_20240304_after.md b/diffs/AaveV3Metis_SetPriceCapAdapters_20240304_before_AaveV3Metis_SetPriceCapAdapters_20240304_after.md
new file mode 100644
index 000000000..2b79e7444
--- /dev/null
+++ b/diffs/AaveV3Metis_SetPriceCapAdapters_20240304_before_AaveV3Metis_SetPriceCapAdapters_20240304_after.md
@@ -0,0 +1,66 @@
+## Reserve changes
+
+### Reserve altered
+
+#### m.DAI ([0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0](https://andromeda-explorer.metis.io/address/0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xe0351cAAE70B5AdBD0107cD5331AD1D79c4c1CA1](https://andromeda-explorer.metis.io/address/0xe0351cAAE70B5AdBD0107cD5331AD1D79c4c1CA1) | [0xB3721282cd62Ba8F7bB02Cb843F3a34f9e109ef8](https://andromeda-explorer.metis.io/address/0xB3721282cd62Ba8F7bB02Cb843F3a34f9e109ef8) |
+| oracleDescription | DAI / USD | Capped mDAI/USD |
+
+
+#### m.USDC ([0xEA32A96608495e54156Ae48931A7c20f0dcc1a21](https://andromeda-explorer.metis.io/address/0xEA32A96608495e54156Ae48931A7c20f0dcc1a21))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x663855969c85F3BE415807250414Ca9129533a5f](https://andromeda-explorer.metis.io/address/0x663855969c85F3BE415807250414Ca9129533a5f) | [0xF2acD6aE4fcf662161eA354dA844f224bf91FF8c](https://andromeda-explorer.metis.io/address/0xF2acD6aE4fcf662161eA354dA844f224bf91FF8c) |
+| oracleDescription | USDC / USD | Capped mUSDC/USD |
+
+
+#### m.USDT ([0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC](https://andromeda-explorer.metis.io/address/0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x51864b8948Aa5e35aace2BaDaF901D63418A3b9D](https://andromeda-explorer.metis.io/address/0x51864b8948Aa5e35aace2BaDaF901D63418A3b9D) | [0xD1D7DCBDE72916646A7F8AcE6Ad8C5179D8ddFbB](https://andromeda-explorer.metis.io/address/0xD1D7DCBDE72916646A7F8AcE6Ad8C5179D8ddFbB) |
+| oracleDescription | USDT / USD | Capped mUSDT/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0": {
+ "oracle": {
+ "from": "0xe0351cAAE70B5AdBD0107cD5331AD1D79c4c1CA1",
+ "to": "0xB3721282cd62Ba8F7bB02Cb843F3a34f9e109ef8"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped mDAI/USD"
+ }
+ },
+ "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21": {
+ "oracle": {
+ "from": "0x663855969c85F3BE415807250414Ca9129533a5f",
+ "to": "0xF2acD6aE4fcf662161eA354dA844f224bf91FF8c"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped mUSDC/USD"
+ }
+ },
+ "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC": {
+ "oracle": {
+ "from": "0x51864b8948Aa5e35aace2BaDaF901D63418A3b9D",
+ "to": "0xD1D7DCBDE72916646A7F8AcE6Ad8C5179D8ddFbB"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped mUSDT/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_SetPriceCapAdapters_20240227_before_AaveV3Optimism_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Optimism_SetPriceCapAdapters_20240227_before_AaveV3Optimism_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..012a19d8c
--- /dev/null
+++ b/diffs/AaveV3Optimism_SetPriceCapAdapters_20240227_before_AaveV3Optimism_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,174 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3](https://optimistic.etherscan.io/address/0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3) | [0x2daA7078f78485A708003989cBc9a643e3b4B61f](https://optimistic.etherscan.io/address/0x2daA7078f78485A708003989cBc9a643e3b4B61f) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### wstETH ([0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb](https://optimistic.etherscan.io/address/0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x80f2c02224a2E548FC67c0bF705eBFA825dd5439](https://optimistic.etherscan.io/address/0x80f2c02224a2E548FC67c0bF705eBFA825dd5439) | [0x724E47194d97263ccb71FDad84b4fed18a8be387](https://optimistic.etherscan.io/address/0x724E47194d97263ccb71FDad84b4fed18a8be387) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3](https://optimistic.etherscan.io/address/0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3) | [0x2daA7078f78485A708003989cBc9a643e3b4B61f](https://optimistic.etherscan.io/address/0x2daA7078f78485A708003989cBc9a643e3b4B61f) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x7f99817d87baD03ea21E05112Ca799d715730efe](https://optimistic.etherscan.io/address/0x7f99817d87baD03ea21E05112Ca799d715730efe) | [0xC77E9CF9603F5ef5503213229ABB1Fec3001f312](https://optimistic.etherscan.io/address/0xC77E9CF9603F5ef5503213229ABB1Fec3001f312) |
+| oracleDescription | SUSD / USD | Capped sUSD/USD |
+
+
+#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xECef79E109e997bCA29c1c0897ec9d7b03647F5E](https://optimistic.etherscan.io/address/0xECef79E109e997bCA29c1c0897ec9d7b03647F5E) | [0x70E6DBBFFc9c3c6fB4a9c349E3101B7dCEE67f4D](https://optimistic.etherscan.io/address/0x70E6DBBFFc9c3c6fB4a9c349E3101B7dCEE67f4D) |
+| oracleDescription | USDT / USD | Capped USDT/USD |
+
+
+#### rETH ([0x9Bcef72be871e61ED4fBbc7630889beE758eb81D](https://optimistic.etherscan.io/address/0x9Bcef72be871e61ED4fBbc7630889beE758eb81D))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x52d5F9f884CA21C27E2100735d793C6771eAB793](https://optimistic.etherscan.io/address/0x52d5F9f884CA21C27E2100735d793C6771eAB793) | [0xF17e75D58D4Be71B8e674fA104B71a827e38F087](https://optimistic.etherscan.io/address/0xF17e75D58D4Be71B8e674fA104B71a827e38F087) |
+| oracleDescription | rETH/ETH/USD | Capped rETH / ETH / USD |
+
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x8dBa75e83DA73cc766A7e5a0ee71F656BAb470d6](https://optimistic.etherscan.io/address/0x8dBa75e83DA73cc766A7e5a0ee71F656BAb470d6) | [0x1a96fe91278bcF6F19665F642FE7a88cD5c360bb](https://optimistic.etherscan.io/address/0x1a96fe91278bcF6F19665F642FE7a88cD5c360bb) |
+| oracleDescription | DAI / USD | Capped DAI/USD |
+
+
+#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x9dfc79Aaeb5bb0f96C6e9402671981CdFc424052](https://optimistic.etherscan.io/address/0x9dfc79Aaeb5bb0f96C6e9402671981CdFc424052) | [0x8f4dAFb6Feb190e7846eb7665fD49FFb1177Ff8e](https://optimistic.etherscan.io/address/0x8f4dAFb6Feb190e7846eb7665fD49FFb1177Ff8e) |
+| oracleDescription | LUSD / USD | Capped LUSD/USD |
+
+
+#### MAI ([0xdFA46478F9e5EA86d57387849598dbFB2e964b02](https://optimistic.etherscan.io/address/0xdFA46478F9e5EA86d57387849598dbFB2e964b02))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x73A3919a69eFCd5b19df8348c6740bB1446F5ed0](https://optimistic.etherscan.io/address/0x73A3919a69eFCd5b19df8348c6740bB1446F5ed0) | [0xc6ac65E8f4F50a6655Efd78A92b6c503B5B625C8](https://optimistic.etherscan.io/address/0xc6ac65E8f4F50a6655Efd78A92b6c503B5B625C8) |
+| oracleDescription | MIMATIC / USD | Capped MAI/USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": {
+ "oracle": {
+ "from": "0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3",
+ "to": "0x2daA7078f78485A708003989cBc9a643e3b4B61f"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": {
+ "oracle": {
+ "from": "0x80f2c02224a2E548FC67c0bF705eBFA825dd5439",
+ "to": "0x724E47194d97263ccb71FDad84b4fed18a8be387"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
+ "oracle": {
+ "from": "0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3",
+ "to": "0x2daA7078f78485A708003989cBc9a643e3b4B61f"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
+ "oracle": {
+ "from": "0x7f99817d87baD03ea21E05112Ca799d715730efe",
+ "to": "0xC77E9CF9603F5ef5503213229ABB1Fec3001f312"
+ },
+ "oracleDescription": {
+ "from": "SUSD / USD",
+ "to": "Capped sUSD/USD"
+ }
+ },
+ "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
+ "oracle": {
+ "from": "0xECef79E109e997bCA29c1c0897ec9d7b03647F5E",
+ "to": "0x70E6DBBFFc9c3c6fB4a9c349E3101B7dCEE67f4D"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDT/USD"
+ }
+ },
+ "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D": {
+ "oracle": {
+ "from": "0x52d5F9f884CA21C27E2100735d793C6771eAB793",
+ "to": "0xF17e75D58D4Be71B8e674fA104B71a827e38F087"
+ },
+ "oracleDescription": {
+ "from": "rETH/ETH/USD",
+ "to": "Capped rETH / ETH / USD"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "oracle": {
+ "from": "0x8dBa75e83DA73cc766A7e5a0ee71F656BAb470d6",
+ "to": "0x1a96fe91278bcF6F19665F642FE7a88cD5c360bb"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped DAI/USD"
+ }
+ },
+ "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": {
+ "oracle": {
+ "from": "0x9dfc79Aaeb5bb0f96C6e9402671981CdFc424052",
+ "to": "0x8f4dAFb6Feb190e7846eb7665fD49FFb1177Ff8e"
+ },
+ "oracleDescription": {
+ "from": "LUSD / USD",
+ "to": "Capped LUSD/USD"
+ }
+ },
+ "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": {
+ "oracle": {
+ "from": "0x73A3919a69eFCd5b19df8348c6740bB1446F5ed0",
+ "to": "0xc6ac65E8f4F50a6655Efd78A92b6c503B5B625C8"
+ },
+ "oracleDescription": {
+ "from": "MIMATIC / USD",
+ "to": "Capped MAI/USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_SetPriceCapAdapters_20240227_before_AaveV3Polygon_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Polygon_SetPriceCapAdapters_20240227_before_AaveV3Polygon_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..5eddcf094
--- /dev/null
+++ b/diffs/AaveV3Polygon_SetPriceCapAdapters_20240227_before_AaveV3Polygon_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,156 @@
+## Reserve changes
+
+### Reserve altered
+
+#### wstETH ([0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD](https://polygonscan.com/address/0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xe34949A48cd2E6f5CD41753e449bd2d43993C9AC](https://polygonscan.com/address/0xe34949A48cd2E6f5CD41753e449bd2d43993C9AC) | [0xBD96b5ABBC6048c28184b462167E487533F2e35E](https://polygonscan.com/address/0xBD96b5ABBC6048c28184b462167E487533F2e35E) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7](https://polygonscan.com/address/0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7) | [0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb](https://polygonscan.com/address/0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### stMATIC ([0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4](https://polygonscan.com/address/0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xEe96b77129cF54581B5a8FECCcC50A6A067034a1](https://polygonscan.com/address/0xEe96b77129cF54581B5a8FECCcC50A6A067034a1) | [0x6D02E35031C4D99ee3A6A2BA47FaD0cFE355cA8f](https://polygonscan.com/address/0x6D02E35031C4D99ee3A6A2BA47FaD0cFE355cA8f) |
+| oracleDescription | stMATIC/MATIC/USD | Capped stMATIC / MATIC / USD |
+
+
+#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7](https://polygonscan.com/address/0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7) | [0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb](https://polygonscan.com/address/0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x4746DeC9e833A82EC7C2C1356372CcF2cfcD2F3D](https://polygonscan.com/address/0x4746DeC9e833A82EC7C2C1356372CcF2cfcD2F3D) | [0xF86577E7d27Ed35b85A7645c58bAaA64453fe32B](https://polygonscan.com/address/0xF86577E7d27Ed35b85A7645c58bAaA64453fe32B) |
+| oracleDescription | DAI / USD | Capped DAI/USD |
+
+
+#### miMATIC ([0xa3Fa99A148fA48D14Ed51d610c367C61876997F1](https://polygonscan.com/address/0xa3Fa99A148fA48D14Ed51d610c367C61876997F1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xd8d483d813547CfB624b8Dc33a00F2fcbCd2D428](https://polygonscan.com/address/0xd8d483d813547CfB624b8Dc33a00F2fcbCd2D428) | [0x4ae2Ab1af7e3b0092dbF3A4B20ec3de8fC834873](https://polygonscan.com/address/0x4ae2Ab1af7e3b0092dbF3A4B20ec3de8fC834873) |
+| oracleDescription | MIMATIC / USD | Capped MAI/USD |
+
+
+#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x0A6513e40db6EB1b165753AD52E80663aeA50545](https://polygonscan.com/address/0x0A6513e40db6EB1b165753AD52E80663aeA50545) | [0xaA574f4f6E124E77a7a1B5Ed91c8b407000A7730](https://polygonscan.com/address/0xaA574f4f6E124E77a7a1B5Ed91c8b407000A7730) |
+| oracleDescription | USDT / USD | Capped USDT/USD |
+
+
+#### MaticX ([0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6](https://polygonscan.com/address/0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x0e1120524e14Bd7aD96Ea76A1b1dD699913e2a45](https://polygonscan.com/address/0x0e1120524e14Bd7aD96Ea76A1b1dD699913e2a45) | [0xB0A72A5e454890e9715e059e8df8582a6B383DE3](https://polygonscan.com/address/0xB0A72A5e454890e9715e059e8df8582a6B383DE3) |
+| oracleDescription | MATICX/MATIC/USD | Capped MaticX / MATIC / USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD": {
+ "oracle": {
+ "from": "0xe34949A48cd2E6f5CD41753e449bd2d43993C9AC",
+ "to": "0xBD96b5ABBC6048c28184b462167E487533F2e35E"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ },
+ "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
+ "oracle": {
+ "from": "0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7",
+ "to": "0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4": {
+ "oracle": {
+ "from": "0xEe96b77129cF54581B5a8FECCcC50A6A067034a1",
+ "to": "0x6D02E35031C4D99ee3A6A2BA47FaD0cFE355cA8f"
+ },
+ "oracleDescription": {
+ "from": "stMATIC/MATIC/USD",
+ "to": "Capped stMATIC / MATIC / USD"
+ }
+ },
+ "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
+ "oracle": {
+ "from": "0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7",
+ "to": "0x17E33D122FC34c7ad8FBd4a1995Dff9c8aE675eb"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
+ "oracle": {
+ "from": "0x4746DeC9e833A82EC7C2C1356372CcF2cfcD2F3D",
+ "to": "0xF86577E7d27Ed35b85A7645c58bAaA64453fe32B"
+ },
+ "oracleDescription": {
+ "from": "DAI / USD",
+ "to": "Capped DAI/USD"
+ }
+ },
+ "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1": {
+ "oracle": {
+ "from": "0xd8d483d813547CfB624b8Dc33a00F2fcbCd2D428",
+ "to": "0x4ae2Ab1af7e3b0092dbF3A4B20ec3de8fC834873"
+ },
+ "oracleDescription": {
+ "from": "MIMATIC / USD",
+ "to": "Capped MAI/USD"
+ }
+ },
+ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
+ "oracle": {
+ "from": "0x0A6513e40db6EB1b165753AD52E80663aeA50545",
+ "to": "0xaA574f4f6E124E77a7a1B5Ed91c8b407000A7730"
+ },
+ "oracleDescription": {
+ "from": "USDT / USD",
+ "to": "Capped USDT/USD"
+ }
+ },
+ "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6": {
+ "oracle": {
+ "from": "0x0e1120524e14Bd7aD96Ea76A1b1dD699913e2a45",
+ "to": "0xB0A72A5e454890e9715e059e8df8582a6B383DE3"
+ },
+ "oracleDescription": {
+ "from": "MATICX/MATIC/USD",
+ "to": "Capped MaticX / MATIC / USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Scroll_SetPriceCapAdapters_20240227_before_AaveV3Scroll_SetPriceCapAdapters_20240227_after.md b/diffs/AaveV3Scroll_SetPriceCapAdapters_20240227_before_AaveV3Scroll_SetPriceCapAdapters_20240227_after.md
new file mode 100644
index 000000000..d6cd20979
--- /dev/null
+++ b/diffs/AaveV3Scroll_SetPriceCapAdapters_20240227_before_AaveV3Scroll_SetPriceCapAdapters_20240227_after.md
@@ -0,0 +1,48 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4](https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0x43d12Fb3AfCAd5347fA764EeAB105478337b7200](https://scrollscan.com/address/0x43d12Fb3AfCAd5347fA764EeAB105478337b7200) | [0x427Fd98dbD1DbC2D4e792350caBe7c9665F35bee](https://scrollscan.com/address/0x427Fd98dbD1DbC2D4e792350caBe7c9665F35bee) |
+| oracleDescription | USDC / USD | Capped USDC/USD |
+
+
+#### wstETH ([0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32](https://scrollscan.com/address/0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32))
+
+| description | value before | value after |
+| --- | --- | --- |
+| oracle | [0xdb93e2712a8B36835078f8D28c70fCC95FD6d37c](https://scrollscan.com/address/0xdb93e2712a8B36835078f8D28c70fCC95FD6d37c) | [0x4EdAbf45e78363b8Dcd763bBbd05665c6e24975C](https://scrollscan.com/address/0x4EdAbf45e78363b8Dcd763bBbd05665c6e24975C) |
+| oracleDescription | wstETH/ETH/USD | Capped wstETH / stETH(ETH) / USD |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4": {
+ "oracle": {
+ "from": "0x43d12Fb3AfCAd5347fA764EeAB105478337b7200",
+ "to": "0x427Fd98dbD1DbC2D4e792350caBe7c9665F35bee"
+ },
+ "oracleDescription": {
+ "from": "USDC / USD",
+ "to": "Capped USDC/USD"
+ }
+ },
+ "0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32": {
+ "oracle": {
+ "from": "0xdb93e2712a8B36835078f8D28c70fCC95FD6d37c",
+ "to": "0x4EdAbf45e78363b8Dcd763bBbd05665c6e24975C"
+ },
+ "oracleDescription": {
+ "from": "wstETH/ETH/USD",
+ "to": "Capped wstETH / stETH(ETH) / USD"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Arbitrum_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Arbitrum_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..17b33f2d0
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Arbitrum_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,29 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Arbitrum payload
+ * command: make test-contract filter=AaveV3Arbitrum_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Arbitrum_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('arbitrum'), 189601578);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Arbitrum_SetPriceCapAdapters_20240227',
+ AaveV3Arbitrum.POOL,
+ Payloads.ARBITRUM
+ );
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Avalanche_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Avalanche_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..dc8d1be79
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Avalanche_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,29 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Avalanche payload
+ * command: make test-contract filter=AaveV3Avalanche_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Avalanche_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('avalanche'), 42802464);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Avalanche_SetPriceCapAdapters_20240227',
+ AaveV3Avalanche.POOL,
+ Payloads.AVALANCHE
+ );
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3BNB_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3BNB_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..8256ac72e
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3BNB_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for BNB payload
+ * command: make test-contract filter=AaveV3BNB_SetPriceCapAdapters_20240227
+ */
+contract AaveV3BNB_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('bnb'), 36731733);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3BNB_SetPriceCapAdapters_20240227', AaveV3BNB.POOL, Payloads.BNB);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Base_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Base_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..e4788be8f
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Base_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Base payload
+ * command: make test-contract filter=AaveV3Base_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Base_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('base'), 11389477);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Base_SetPriceCapAdapters_20240227', AaveV3Base.POOL, Payloads.BASE);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Ethereum_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Ethereum_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..f00023c94
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Ethereum_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Ethereum payload
+ * command: make test-contract filter=AaveV3Ethereum_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Ethereum_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 19418661);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Ethereum_SetPriceCapAdapters_20240227',
+ AaveV3Ethereum.POOL,
+ Payloads.ETHEREUM
+ );
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Gnosis_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Gnosis_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..625725294
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Gnosis_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Gnosis payload
+ * command: make test-contract filter=AaveV3Gnosis_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Gnosis_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('gnosis'), 32892417);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Gnosis_SetPriceCapAdapters_20240227', AaveV3Gnosis.POOL, Payloads.GNOSIS);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Metis_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Metis_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..b673550f2
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Metis_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Metis payload
+ * command: make test-contract filter=AaveV3Metis_SetPriceCapAdapters_20240304
+ */
+contract AaveV3Metis_SetPriceCapAdapters_20240304_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('metis'), 14600549);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Metis_SetPriceCapAdapters_20240304', AaveV3Metis.POOL, Payloads.METIS);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Optimism_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Optimism_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..c444d8c8c
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Optimism_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,29 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Optimism payload
+ * command: make test-contract filter=AaveV3Optimism_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Optimism_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('optimism'), 117321856);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Optimism_SetPriceCapAdapters_20240227',
+ AaveV3Optimism.POOL,
+ Payloads.OPTIMISM
+ );
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Polygon_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Polygon_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..777ad2ff6
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Polygon_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Polygon payload
+ * command: make test-contract filter=AaveV3Polygon_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Polygon_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('polygon'), 54567456);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Polygon_SetPriceCapAdapters_20240227', AaveV3Polygon.POOL, Payloads.POLYGON);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/AaveV3Scroll_SetPriceCapAdapters_20240227.t.sol b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Scroll_SetPriceCapAdapters_20240227.t.sol
new file mode 100644
index 000000000..603aab93d
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/AaveV3Scroll_SetPriceCapAdapters_20240227.t.sol
@@ -0,0 +1,25 @@
+// 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/ProtocolV3TestBase.sol';
+import {Payloads} from './SetPriceCapAdapters_20240227.s.sol';
+
+/**
+ * @dev Test for Scroll payload
+ * command: make test-contract filter=AaveV3Scroll_SetPriceCapAdapters_20240227
+ */
+contract AaveV3Scroll_SetPriceCapAdapters_20240227_Test is ProtocolV3TestBase {
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('scroll'), 4064118);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Scroll_SetPriceCapAdapters_20240227', AaveV3Scroll.POOL, Payloads.SCROLL);
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters.md b/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters.md
new file mode 100644
index 000000000..b50a0f7aa
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters.md
@@ -0,0 +1,63 @@
+---
+title: "Set Price Cap Adapters (CAPO)"
+author: "BGD Labs (@bgdlabs)"
+discussions: "https://governance.aave.com/t/bgd-correlated-asset-price-oracle/16133"
+snapshot: "https://snapshot.org/#/aave.eth/proposal/0x387f779952a20e850f941111ccf7aa49022ee35274fd219b9759c0ea240b72e1"
+---
+
+## Simple Summary
+
+This proposal activates the correlated-assets price oracle (CAPO) system for LSTs and fiat-pegged stable coins.
+
+## Motivation
+
+LSTs (Liquid Staking Tokens) are highly correlated to an underlying, with an additional growth component on top of it, and sometimes, slashing dynamics. CAPO for this use case adds an upper side protection. Every time the price adapter is queried, it will get the current ratio of the asset/underlying and compared it with a dynamically calculated upper value of that ratio, using the previously defined parameters. If the current ratio is above the ratio cap, the ratio cap is returned. If not, the current ratio is.
+
+In some cases, the relation between an underlying asset and its correlated is direct, without any type of continuous growth expected. For example, this is the case of USD-pegged stable coins, where USD is the underlying and let's say USDC is the correlated asset. For this type of assets we'll apply the price adapter with the fixed price cap.
+
+## Specification
+
+- [Capped price adapters implementation](https://github.com/bgd-labs/aave-capo)
+- [Risk providers parameters recommendations](https://governance.aave.com/t/chaos-labs-correlated-asset-price-oracle-framework/16605/5)
+
+| Asset | Growth percent | Snapshot delay |
+| ------- | -------------- | -------------- |
+| wstETH | 9.68% | 7 days |
+| rETH | 9.3% | 7 days |
+| cbETH | 8.12% | 7 days |
+| MaticX | 10.2% | 14 days |
+| stMATIC | 10.45% | 14 days |
+| sAVAX | 10.1% | 14 days |
+
+All stablecoins are capped at 4%, except LUSD, which is capped at 10%.
+
+sDAI is not included at the moment, given the recent un-stability on its growth rate.
+
+Oracles will be updated using `priceFeedsUpdates()` method of the Config Engine on every network. Below is the list of assets per network to be updated:
+
+| Network | LSTs | Stables |
+| --------- | ----------------------- | ------------------------------------------ |
+| Mainnet | wstETH, rETH, cbETH | USDC, USDT, DAI, FRAX, LUSD, crvUSD, pyUSD |
+| Arbitrum | wstETH, rETH | USDC, USDC.e, USDT, FRAX, LUSD, MAI |
+| Avalanche | sAvax | USDC, USDT, DAI.e, FRAX, MAI |
+| Optimism | wstETH, rETH | USDC, USDC.e, USDT, DAI, LUSD, sUSD, MAI |
+| Polygon | wstETH, stMatic, MaticX | USDC, USDC.e, USDT, DAI, MAI |
+| Gnosis | wstETH | USDC, xDAI |
+| Base | wstETH, cbETH | USDC |
+| Metis | | USDC, USDT, m.DAI |
+| BNB | | USDC, USDT, fdUSD |
+| Scroll | wstETH | USDC |
+
+# Security
+
+- [Audit by Certora](https://github.com/bgd-labs/aave-capo/blob/main/certora/CAPO%20report.pdf)
+- A retrospective test was conducted for the last half year with the parameters provided, which showed that the price was not capped, which is expected
+
+## References
+
+- Payloads: [AaveV3Ethereum](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3EthereumPayload.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3PolygonPayload.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3AvalanchePayload.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3ArbitrumPayload.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3OptimismPayload.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3MetisPayload.sol), [AaveV3Base](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3BasePayload.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3GnosisPayload.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3BNBPayload.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-capo/blob/main/src/contracts/payloads/AaveV3ScrollPayload.sol)
+- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-capo/tree/main/tests/ethereum), [AaveV3Polygon](https://github.com/bgd-labs/aave-capo/tree/main/tests/polygon), [AaveV3Avalanche](https://github.com/bgd-labs/aave-capo/tree/main/tests/avalanche), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-capo/tree/main/tests/arbitrum), [AaveV3Optimism](https://github.com/bgd-labs/aave-capo/tree/main/tests/optimism), [AaveV3Base](https://github.com/bgd-labs/aave-capo/tree/main/tests/base), [AaveV3Gnosis](https://github.com/bgd-labs/aave-capo/tree/main/tests/gnosis), [AaveV3Scroll](https://github.com/bgd-labs/aave-capo/tree/main/tests/scroll)
+
+## Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol b/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol
new file mode 100644
index 000000000..c234b3e42
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol
@@ -0,0 +1,277 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
+import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, BNBScript, ScrollScript} from 'aave-helpers/ScriptUtils.sol';
+
+library Payloads {
+ // https://etherscan.io/address/0xb20935059e3f49cbfa35bed0780fb8887d7d0d67
+ address public constant ETHEREUM = 0xb20935059e3F49Cbfa35bED0780Fb8887D7D0D67;
+
+ // https://polygonscan.com/address/0x2d976a898522e6bca5bf1464931283d24d2a2698
+ address public constant POLYGON = 0x2d976a898522e6Bca5bf1464931283d24D2A2698;
+
+ // https://snowtrace.io/address/0x882cCd8087bC44105E962Bc01280A335b210d738
+ address public constant AVALANCHE = 0x882cCd8087bC44105E962Bc01280A335b210d738;
+
+ // https://optimistic.etherscan.io/address/0xe2fad8c2e3aefbb3e8fea1e0b84463c7c06350a3
+ address public constant OPTIMISM = 0xE2FaD8c2e3AefBB3e8FEa1E0B84463C7C06350A3;
+
+ // https://arbiscan.io/address/0x296c266263bdc0b4ef32f75a7769ab925772f6cb
+ address public constant ARBITRUM = 0x296C266263bDc0b4eF32F75a7769aB925772F6Cb;
+
+ // https://andromeda-explorer.metis.io/address/0xAE04aDeC3Ce3140d34377FB38C71C882E948AA03/
+ address public constant METIS = 0xAE04aDeC3Ce3140d34377FB38C71C882E948AA03;
+
+ // https://basescan.org/address/0x360ef8d31b90718f13b73d10f3f3c122d86577f1
+ address public constant BASE = 0x360eF8D31B90718f13b73d10f3F3C122d86577f1;
+
+ // https://gnosisscan.io/address/0xac603d82de4fed4c28175f707bc4d15d79e63303
+ address public constant GNOSIS = 0xaC603d82de4Fed4c28175f707BC4d15d79E63303;
+
+ // https://bscscan.com/address/0x2683f613a899694a8d8669243321541cbdc6a95b
+ address public constant BNB = 0x2683F613a899694a8d8669243321541CBdc6a95b;
+
+ // https://scrollscan.com/address/0xd11f81a205b2ae847cb46c58e12b4c82a30e1809
+ address public constant SCROLL = 0xD11f81a205b2ae847cB46c58e12b4c82A30e1809;
+}
+
+/**
+ * @dev Deploy Ethereum
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployEthereum chain=mainnet
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.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(Payloads.ETHEREUM);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Polygon
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployPolygon chain=polygon
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.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(Payloads.POLYGON);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Avalanche
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployAvalanche chain=avalanche
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.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(Payloads.AVALANCHE);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Optimism
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployOptimism chain=optimism
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/10/run-latest.json
+ */
+contract DeployOptimism is OptimismScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.OPTIMISM);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Arbitrum
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployArbitrum chain=arbitrum
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/42161/run-latest.json
+ */
+contract DeployArbitrum is ArbitrumScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.ARBITRUM);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Metis
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployMetis chain=metis
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/1088/run-latest.json
+ */
+contract DeployMetis is MetisScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.METIS);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Base
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployBase chain=base
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/8453/run-latest.json
+ */
+contract DeployBase is BaseScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.BASE);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Gnosis
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployGnosis chain=gnosis
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/100/run-latest.json
+ */
+contract DeployGnosis is GnosisScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.GNOSIS);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy BNB
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployBNB chain=bnb
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/56/run-latest.json
+ */
+contract DeployBNB is BNBScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.BNB);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Scroll
+ * deploy-command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.s.sol:DeployScroll chain=scroll
+ * verify-command: npx catapulta-verify -b broadcast/SetPriceCapAdapters_20240227.s.sol/534351/run-latest.json
+ */
+contract DeployScroll is ScrollScript {
+ function run() external broadcast {
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(Payloads.SCROLL);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Create Proposal
+ * command: make deploy-ledger contract=src/20240227_Multi_SetPriceCapAdapters/SetPriceCapAdapters_20240227.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[](1);
+ actionsEthereum[0] = GovV3Helpers.buildAction(Payloads.ETHEREUM);
+ payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsPolygon[0] = GovV3Helpers.buildAction(Payloads.POLYGON);
+ payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsAvalanche[0] = GovV3Helpers.buildAction(Payloads.AVALANCHE);
+ payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsOptimism[0] = GovV3Helpers.buildAction(Payloads.OPTIMISM);
+ payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsArbitrum[0] = GovV3Helpers.buildAction(Payloads.ARBITRUM);
+ payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsMetis[0] = GovV3Helpers.buildAction(Payloads.METIS);
+ payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsBase[0] = GovV3Helpers.buildAction(Payloads.BASE);
+ payloads[6] = GovV3Helpers.buildBasePayload(vm, actionsBase);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsGnosis[0] = GovV3Helpers.buildAction(Payloads.GNOSIS);
+ payloads[7] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsBNB[0] = GovV3Helpers.buildAction(Payloads.BNB);
+ payloads[8] = GovV3Helpers.buildBNBPayload(vm, actionsBNB);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsScroll[0] = GovV3Helpers.buildAction(Payloads.SCROLL);
+ payloads[9] = GovV3Helpers.buildScrollPayload(vm, actionsScroll);
+
+ // create proposal
+ vm.startBroadcast();
+ GovV3Helpers.createProposal(
+ vm,
+ payloads,
+ GovV3Helpers.ipfsHashFile(vm, 'src/20240206_Multi_SetPriceCapAdapters/SetPriceCapAdapters.md')
+ );
+ }
+}
diff --git a/src/20240227_Multi_SetPriceCapAdapters/config.ts b/src/20240227_Multi_SetPriceCapAdapters/config.ts
new file mode 100644
index 000000000..7bfff7cfb
--- /dev/null
+++ b/src/20240227_Multi_SetPriceCapAdapters/config.ts
@@ -0,0 +1,14 @@
+import {ConfigFile} from '../../generator/types';
+export const config: ConfigFile = {
+ rootOptions: {
+ pools: [],
+ title: 'Set Price Cap Adapters',
+ shortName: 'SetPriceCapAdapters',
+ date: '20240206',
+ author: 'BGD Labs (@bgdlabs)',
+ discussion: 'https://governance.aave.com/t/bgd-correlated-asset-price-oracle/16133',
+ snapshot:
+ 'https://snapshot.org/#/aave.eth/proposal/0x387f779952a20e850f941111ccf7aa49022ee35274fd219b9759c0ea240b72e1',
+ },
+ poolOptions: {},
+};