diff --git a/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg b/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg
new file mode 100644
index 000000000..563140564
--- /dev/null
+++ b/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/.assets/748a0eb71635793f12d6014b9e935c2b6858d00b.svg b/.assets/748a0eb71635793f12d6014b9e935c2b6858d00b.svg
new file mode 100644
index 000000000..e2172dcc4
--- /dev/null
+++ b/.assets/748a0eb71635793f12d6014b9e935c2b6858d00b.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/.assets/b5cb0fd07fde8594230045982589445fc02ace52.svg b/.assets/b5cb0fd07fde8594230045982589445fc02ace52.svg
new file mode 100644
index 000000000..59dc7a873
--- /dev/null
+++ b/.assets/b5cb0fd07fde8594230045982589445fc02ace52.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/b88e72716b27c4283bf4287c6417a41bc5b4a2b4.svg b/.assets/b88e72716b27c4283bf4287c6417a41bc5b4a2b4.svg
new file mode 100644
index 000000000..d01804bc7
--- /dev/null
+++ b/.assets/b88e72716b27c4283bf4287c6417a41bc5b4a2b4.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%2%4%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/cf7a7aa4b568d8cd90f169e1d287fe4bd4355746.svg b/.assets/cf7a7aa4b568d8cd90f169e1d287fe4bd4355746.svg
new file mode 100644
index 000000000..7dccadb54
--- /dev/null
+++ b/.assets/cf7a7aa4b568d8cd90f169e1d287fe4bd4355746.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/.assets/d1e21fb294480b8513f7ed4d61207214c8e8a1bb.svg b/.assets/d1e21fb294480b8513f7ed4d61207214c8e8a1bb.svg
new file mode 100644
index 000000000..64bac08e9
--- /dev/null
+++ b/.assets/d1e21fb294480b8513f7ed4d61207214c8e8a1bb.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/da3b368705d0caf204c10ce9c2dda8d3b8cf9c11.svg b/.assets/da3b368705d0caf204c10ce9c2dda8d3b8cf9c11.svg
new file mode 100644
index 000000000..98a8dafb7
--- /dev/null
+++ b/.assets/da3b368705d0caf204c10ce9c2dda8d3b8cf9c11.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/ef9c259cb3204856ff66883fa069d750c84650b1.svg b/.assets/ef9c259cb3204856ff66883fa069d750c84650b1.svg
new file mode 100644
index 000000000..a1eedc581
--- /dev/null
+++ b/.assets/ef9c259cb3204856ff66883fa069d750c84650b1.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..ea18706cf
--- /dev/null
+++ b/diffs/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,51 @@
+## Reserve changes
+
+### Reserve altered
+
+#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| reserveFactor | 20 % | 25 % |
+
+
+#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
+
+| description | value before | value after |
+| --- | --- | --- |
+| reserveFactor | 20 % | 25 % |
+
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| reserveFactor | 20 % | 25 % |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
+ "reserveFactor": {
+ "from": 2000,
+ "to": 2500
+ }
+ },
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
+ "reserveFactor": {
+ "from": 2000,
+ "to": 2500
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "reserveFactor": {
+ "from": 2000,
+ "to": 2500
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..1892e7bad
--- /dev/null
+++ b/diffs/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,74 @@
+## Reserve changes
+
+### Reserve altered
+
+#### FRAX ([0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F](https://arbiscan.io/address/0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xb02381b1d27aA9845e5012083CA288c1818884f0](https://arbiscan.io/address/0xb02381b1d27aA9845e5012083CA288c1818884f0) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xb02381b1d27aA9845e5012083CA288c1818884f0](https://arbiscan.io/address/0xb02381b1d27aA9845e5012083CA288c1818884f0) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xb02381b1d27aA9845e5012083CA288c1818884f0](https://arbiscan.io/address/0xb02381b1d27aA9845e5012083CA288c1818884f0) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xb02381b1d27aA9845e5012083CA288c1818884f0"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xb02381b1d27aA9845e5012083CA288c1818884f0"
+ }
+ },
+ "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xb02381b1d27aA9845e5012083CA288c1818884f0"
+ }
+ }
+ },
+ "strategies": {
+ "0xb02381b1d27aA9845e5012083CA288c1818884f0": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..62a0adabc
--- /dev/null
+++ b/diffs/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,74 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDt ([0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7](https://snowtrace.io/address/0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://snowtrace.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### FRAX ([0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64](https://snowtrace.io/address/0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://snowtrace.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://snowtrace.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17"
+ }
+ },
+ "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17"
+ }
+ },
+ "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17"
+ }
+ }
+ },
+ "strategies": {
+ "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..aa0df09c6
--- /dev/null
+++ b/diffs/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,74 @@
+## Reserve changes
+
+### Reserve altered
+
+#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2](https://etherscan.io/address/0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2) | [0x588b62C84533232E3A881e096E5D639Fa754F093](https://etherscan.io/address/0x588b62C84533232E3A881e096E5D639Fa754F093) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xC82dF96432346cFb632473eB619Db3B8AC280234](https://etherscan.io/address/0xC82dF96432346cFb632473eB619Db3B8AC280234) | [0x53b13a6D43F647D788411Abfd28D229C274AfBF9](https://etherscan.io/address/0x53b13a6D43F647D788411Abfd28D229C274AfBF9) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/398a9e53757e01d6b0e762e21b88bb93cf4aa95e.svg) | ![after](/.assets/d1e21fb294480b8513f7ed4d61207214c8e8a1bb.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
+ "interestRateStrategy": {
+ "from": "0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2",
+ "to": "0x588b62C84533232E3A881e096E5D639Fa754F093"
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "interestRateStrategy": {
+ "from": "0xC82dF96432346cFb632473eB619Db3B8AC280234",
+ "to": "0x53b13a6D43F647D788411Abfd28D229C274AfBF9"
+ }
+ }
+ },
+ "strategies": {
+ "0x53b13a6D43F647D788411Abfd28D229C274AfBF9": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "720000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x588b62C84533232E3A881e096E5D639Fa754F093": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..da4cd637a
--- /dev/null
+++ b/diffs/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,74 @@
+## Reserve changes
+
+### Reserve altered
+
+#### m.DAI ([0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0](https://andromeda-explorer.metis.io/address/0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x4a8de3E62B4a63905f62e56292ECdCfD3593d1c9](https://andromeda-explorer.metis.io/address/0x4a8de3E62B4a63905f62e56292ECdCfD3593d1c9) | [0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0](https://andromeda-explorer.metis.io/address/0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/748a0eb71635793f12d6014b9e935c2b6858d00b.svg) | ![after](/.assets/da3b368705d0caf204c10ce9c2dda8d3b8cf9c11.svg) |
+
+#### m.USDT ([0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC](https://andromeda-explorer.metis.io/address/0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x5A1bdAc4eBa2A70D465ef4aDd2f68dBBae183454](https://andromeda-explorer.metis.io/address/0x5A1bdAc4eBa2A70D465ef4aDd2f68dBBae183454) | [0x082612269926F85741E6c2B0447D000469880c1C](https://andromeda-explorer.metis.io/address/0x082612269926F85741E6c2B0447D000469880c1C) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0": {
+ "interestRateStrategy": {
+ "from": "0x4a8de3E62B4a63905f62e56292ECdCfD3593d1c9",
+ "to": "0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0"
+ }
+ },
+ "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC": {
+ "interestRateStrategy": {
+ "from": "0x5A1bdAc4eBa2A70D465ef4aDd2f68dBBae183454",
+ "to": "0x082612269926F85741E6c2B0447D000469880c1C"
+ }
+ }
+ },
+ "strategies": {
+ "0x082612269926F85741E6c2B0447D000469880c1C": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "80000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "70000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..c798b9986
--- /dev/null
+++ b/diffs/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,76 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://explorer.optimism.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://explorer.optimism.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x3832311560d3B457E9cC35e5b8e06EB167D8c17D](https://explorer.optimism.io/address/0x3832311560d3B457E9cC35e5b8e06EB167D8c17D) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://explorer.optimism.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://explorer.optimism.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e](https://explorer.optimism.io/address/0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| variableRateSlope1 | 4 % | 0 % |
+| baseStableBorrowRate | 5 % | 1 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/ef9c259cb3204856ff66883fa069d750c84650b1.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e"
+ }
+ }
+ },
+ "strategies": {
+ "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "10000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": 0,
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md b/diffs/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
new file mode 100644
index 000000000..69034a8be
--- /dev/null
+++ b/diffs/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_before_AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_after.md
@@ -0,0 +1,59 @@
+## Reserve changes
+
+### Reserve altered
+
+#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://polygonscan.com/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://polygonscan.com/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://polygonscan.com/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://polygonscan.com/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) |
+| optimalUsageRatio | 80 % | 90 % |
+| maxExcessUsageRatio | 20 % | 10 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/577360009ed79d63299cf66d8c80048372f3e17b.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426"
+ }
+ },
+ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426"
+ }
+ }
+ },
+ "strategies": {
+ "0xD87974E8ED49AB16d5053ba793F4e17078Be0426": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "50000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "40000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..168cf6f90
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ IProposalGenericExecutor
+{
+ function execute() external {
+ AaveV2Ethereum.POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, 25_00);
+ AaveV2Ethereum.POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, 25_00);
+ AaveV2Ethereum.POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LUSD_UNDERLYING, 25_00);
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..bfdf99a9f
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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/ProtocolV2TestBase.sol';
+import {AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV2TestBase
+{
+ AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 18586524);
+ proposal = new AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV2Ethereum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..68a64cdf6
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
+import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ AaveV3PayloadArbitrum
+{
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..c59f398a3
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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 {AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('arbitrum'), 151080230);
+ proposal = new AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Arbitrum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..8f86ab31f
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol';
+import {AaveV3PayloadAvalanche} from 'aave-helpers/v3-config-engine/AaveV3PayloadAvalanche.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ AaveV3PayloadAvalanche
+{
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3AvalancheAssets.DAIe_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3AvalancheAssets.USDt_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3AvalancheAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..40fc2e62c
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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 {AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('avalanche'), 37851533);
+ proposal = new AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Avalanche.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..a8e65f33f
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ AaveV3PayloadEthereum
+{
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3EthereumAssets.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3EthereumAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..c7188705c
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 18586524);
+ proposal = new AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Ethereum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..e942a815d
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol';
+import {AaveV3PayloadMetis} from 'aave-helpers/v3-config-engine/AaveV3PayloadMetis.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ AaveV3PayloadMetis
+{
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3MetisAssets.mDAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3MetisAssets.mUSDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..2e010e1a8
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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 {AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('metis'), 9377430);
+ proposal = new AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Metis.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..ec587cb0b
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
+import {AaveV3PayloadOptimism} from 'aave-helpers/v3-config-engine/AaveV3PayloadOptimism.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 is
+ AaveV3PayloadOptimism
+{
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3OptimismAssets.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: _bpsToRay(0),
+ variableRateSlope1: _bpsToRay(0),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3OptimismAssets.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..5562eec21
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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 {AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('optimism'), 112281968);
+ proposal = new AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Optimism.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
new file mode 100644
index 000000000..60e9aca71
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
+import {AaveV3PayloadPolygon} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';
+
+/**
+ * @title Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 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.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3PolygonAssets.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: _bpsToRay(90_00),
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: EngineFlags.KEEP_CURRENT,
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT,
+ baseStableRateOffset: EngineFlags.KEEP_CURRENT,
+ stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
+ optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
new file mode 100644
index 000000000..0e14be142
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol
@@ -0,0 +1,35 @@
+// 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 {AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ * command: make test-contract filter=AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ */
+contract AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116_Test is
+ ProtocolV3TestBase
+{
+ AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116
+ internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('polygon'), 50025135);
+ proposal = new AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116',
+ AaveV3Polygon.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments.md b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments.md
new file mode 100644
index 000000000..37260e466
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments.md
@@ -0,0 +1,57 @@
+---
+title: "Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments"
+author: "Gauntlet, Block Analitica"
+discussions: "https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096"
+---
+
+## Summary
+
+A proposal to make RF and Uopt changes to stablecoins on all V3 deployments and v2 Ethereum. For more details, see the full forum post here.
+
+## Specification
+
+#### Uopt changes
+
+| Market | Asset | Parameter | Current Value | Recommended Value |
+| ------------ | ----- | --------- | ------------- | ----------------- |
+| Ethereum v3 | USDT | Uopt | 80% | 90% |
+| Ethereum v3 | FRAX | Uopt | 80% | 90% |
+| Avalanche v3 | USDT | Uopt | 80% | 90% |
+| Avalanche v3 | DAI | Uopt | 80% | 90% |
+| Avalanche v3 | FRAX | Uopt | 80% | 90% |
+| Polygon v3 | USDT | Uopt | 80% | 90% |
+| Polygon v3 | DAI | Uopt | 80% | 90% |
+| Optimism v3 | USDT | Uopt | 80% | 90% |
+| Optimism v3 | DAI | Uopt | 80% | 90% |
+| Arbitrum v3 | USDT | Uopt | 80% | 90% |
+| Arbitrum v3 | DAI | Uopt | 80% | 90% |
+| Arbitrum v3 | FRAX | Uopt | 80% | 90% |
+| Metis v3 | USDT | Uopt | 80% | 90% |
+| Metis v3 | DAI | Uopt | 80% | 90% |
+
+#### RF changes
+
+| Market | Asset | Parameter | Current Value | Recommended Value |
+| ----------- | ----- | --------- | ------------- | ----------------- |
+| Ethereum v2 | USDC | RF | 20% | 25% |
+| Ethereum v2 | USDT | RF | 20% | 25% |
+| Ethereum v2 | LUSD | RF | 20% | 25% |
+
+## References
+
+- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol)
+- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.t.sol)
+- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93)
+- [Discussion](https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096)
+
+## Disclaimer
+
+Gauntlet and Block Analitica have not received any compensation from any third-party in exchange for recommending any of the actions contained in this proposal.
+
+By approving this proposal, you agree that any services provided by Gauntlet shall be governed by the terms of service available at gauntlet.network/tos.
+
+## Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
+
+_By approving this proposal, you agree that any services provided by Gauntlet shall be governed by the terms of service available at gauntlet.network/tos._
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol
new file mode 100644
index 000000000..706d21c44
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol
@@ -0,0 +1,181 @@
+// 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} from 'aave-helpers/ScriptUtils.sol';
+import {AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+import {AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116} from './AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.sol';
+
+/**
+ * @dev Deploy Ethereum
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployEthereum chain=mainnet
+ */
+contract DeployEthereum is EthereumScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV2Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+ AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload1 = new AaveV3Ethereum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](2);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+ actions[1] = GovV3Helpers.buildAction(address(payload1));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Polygon
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployPolygon chain=polygon
+ */
+contract DeployPolygon is PolygonScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV3Polygon_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Avalanche
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployAvalanche chain=avalanche
+ */
+contract DeployAvalanche is AvalancheScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV3Avalanche_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Optimism
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployOptimism chain=optimism
+ */
+contract DeployOptimism is OptimismScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV3Optimism_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Arbitrum
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployArbitrum chain=arbitrum
+ */
+contract DeployArbitrum is ArbitrumScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV3Arbitrum_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Deploy Metis
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:DeployMetis chain=metis
+ */
+contract DeployMetis is MetisScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116 payload0 = new AaveV3Metis_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116();
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(address(payload0));
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Create Proposal
+ * command: make deploy-ledger contract=src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments_20231116.s.sol:CreateProposal chain=mainnet
+ */
+contract CreateProposal is EthereumScript {
+ function run() external {
+ // create payloads
+ PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](6);
+
+ // compose actions for validation
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](2);
+ actionsEthereum[0] = GovV3Helpers.buildAction(address(0));
+ actionsEthereum[1] = GovV3Helpers.buildAction(address(0));
+ payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsPolygon[0] = GovV3Helpers.buildAction(address(0));
+ payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsAvalanche[0] = GovV3Helpers.buildAction(address(0));
+ payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsOptimism[0] = GovV3Helpers.buildAction(address(0));
+ payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsArbitrum[0] = GovV3Helpers.buildAction(address(0));
+ payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsMetis[0] = GovV3Helpers.buildAction(address(0));
+ payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis);
+
+ // create proposal
+ vm.startBroadcast();
+ GovV3Helpers.createProposal2_5(
+ payloads,
+ GovV3Helpers.ipfsHashFile(
+ vm,
+ 'src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments.md'
+ )
+ );
+ }
+}
diff --git a/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/config.json b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/config.json
new file mode 100644
index 000000000..b7719e93b
--- /dev/null
+++ b/src/20231116_Multi_RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments/config.json
@@ -0,0 +1,275 @@
+{
+ "rootOptions": {
+ "pools": [
+ "AaveV2Ethereum",
+ "AaveV3Ethereum",
+ "AaveV3Polygon",
+ "AaveV3Avalanche",
+ "AaveV3Optimism",
+ "AaveV3Arbitrum",
+ "AaveV3Metis"
+ ],
+ "title": "Raise Uopt to 90% for USDC, USDT, DAI, FRAX, where applicable, across all v3 deployments",
+ "shortName": "RaiseUoptTo90ForUSDCUSDTDAIFRAXWhereApplicableAcrossAllV3Deployments",
+ "date": "20231116",
+ "author": "Gauntlet, Block Analitica",
+ "discussion": "https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096",
+ "snapshot": "https://snapshot.org/#/aave.eth/proposal/0xb9b28f57f7633dd6b987de9abcede23da62fe4fab6b002f189b8b25a7c02ea93"
+ },
+ "poolOptions": {
+ "AaveV2Ethereum": {
+ "configs": {},
+ "features": []
+ },
+ "AaveV3Ethereum": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "FRAX",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ },
+ "AaveV3Polygon": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "DAI",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ },
+ "AaveV3Avalanche": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "DAIe",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDt",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "FRAX",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ },
+ "AaveV3Optimism": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "DAI",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "_bpsToRay(0)",
+ "variableRateSlope1": "_bpsToRay(0)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ },
+ "AaveV3Arbitrum": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "DAI",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "FRAX",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ },
+ "AaveV3Metis": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "mDAI",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "mUSDT",
+ "params": {
+ "optimalUtilizationRate": "_bpsToRay(90_00)",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "baseStableRateOffset": "EngineFlags.KEEP_CURRENT",
+ "stableRateExcessOffset": "EngineFlags.KEEP_CURRENT",
+ "optimalStableToTotalDebtRatio": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V3"
+ ]
+ }
+ }
+}