diff --git a/.assets/043c20ddb576ea95d464cb796599d5d683262106.svg b/.assets/043c20ddb576ea95d464cb796599d5d683262106.svg
new file mode 100644
index 000000000..d2183df7e
--- /dev/null
+++ b/.assets/043c20ddb576ea95d464cb796599d5d683262106.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/.assets/13b5e136fdedf892c5143f87f4108a82d20cb9e2.svg b/.assets/13b5e136fdedf892c5143f87f4108a82d20cb9e2.svg
new file mode 100644
index 000000000..f2f4d751c
--- /dev/null
+++ b/.assets/13b5e136fdedf892c5143f87f4108a82d20cb9e2.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/1661f76a7e96cd3c1d406fdc47aed4a08f1c5ddd.svg b/.assets/1661f76a7e96cd3c1d406fdc47aed4a08f1c5ddd.svg
new file mode 100644
index 000000000..824de5d99
--- /dev/null
+++ b/.assets/1661f76a7e96cd3c1d406fdc47aed4a08f1c5ddd.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg b/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg
new file mode 100644
index 000000000..ed8bd0f8f
--- /dev/null
+++ b/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.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/366ae4c132a12c764ec8a9869c7c0dc7e99c7ed6.svg b/.assets/366ae4c132a12c764ec8a9869c7c0dc7e99c7ed6.svg
new file mode 100644
index 000000000..8315e9779
--- /dev/null
+++ b/.assets/366ae4c132a12c764ec8a9869c7c0dc7e99c7ed6.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/3b121bfadae21d93b5bbd1760ef0af0b99e3654d.svg b/.assets/3b121bfadae21d93b5bbd1760ef0af0b99e3654d.svg
new file mode 100644
index 000000000..1ec5928ca
--- /dev/null
+++ b/.assets/3b121bfadae21d93b5bbd1760ef0af0b99e3654d.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%Optimal 70%Optimal 70%
\ No newline at end of file
diff --git a/.assets/5290a74b4d64da4f9000f7e43d68f39f4bb35194.svg b/.assets/5290a74b4d64da4f9000f7e43d68f39f4bb35194.svg
new file mode 100644
index 000000000..8ecd3eb0b
--- /dev/null
+++ b/.assets/5290a74b4d64da4f9000f7e43d68f39f4bb35194.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/5edd71ae19daa3f5eddb02bba18dea258de81aac.svg b/.assets/5edd71ae19daa3f5eddb02bba18dea258de81aac.svg
new file mode 100644
index 000000000..13df3aec8
--- /dev/null
+++ b/.assets/5edd71ae19daa3f5eddb02bba18dea258de81aac.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/66d716abff4a87dcfc719a431d31ee77d341c950.svg b/.assets/66d716abff4a87dcfc719a431d31ee77d341c950.svg
new file mode 100644
index 000000000..bc5e7b2f0
--- /dev/null
+++ b/.assets/66d716abff4a87dcfc719a431d31ee77d341c950.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/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.svg b/.assets/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.svg
new file mode 100644
index 000000000..32d7b0969
--- /dev/null
+++ b/.assets/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.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/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/8f352ac66d85aced6acb0053b7c628c46d25cf2d.svg b/.assets/8f352ac66d85aced6acb0053b7c628c46d25cf2d.svg
new file mode 100644
index 000000000..ec5d77ca8
--- /dev/null
+++ b/.assets/8f352ac66d85aced6acb0053b7c628c46d25cf2d.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/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg b/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg
new file mode 100644
index 000000000..1692873dc
--- /dev/null
+++ b/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%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/d0ce1d7b0f30792388a361ffa100ec476087d905.svg b/.assets/d0ce1d7b0f30792388a361ffa100ec476087d905.svg
new file mode 100644
index 000000000..094efddf7
--- /dev/null
+++ b/.assets/d0ce1d7b0f30792388a361ffa100ec476087d905.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%Optimal 77%Optimal 77%
\ No newline at end of file
diff --git a/.assets/e4bd0b47b6f0a753cd3286f1a05fa61c8781f53c.svg b/.assets/e4bd0b47b6f0a753cd3286f1a05fa61c8781f53c.svg
new file mode 100644
index 000000000..7054f0c53
--- /dev/null
+++ b/.assets/e4bd0b47b6f0a753cd3286f1a05fa61c8781f53c.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 71%Optimal 71%
\ No newline at end of file
diff --git a/.assets/fed28c8fca229c5bb66e0ae2b4ce72db46b36da2.svg b/.assets/fed28c8fca229c5bb66e0ae2b4ce72db46b36da2.svg
new file mode 100644
index 000000000..fcac75910
--- /dev/null
+++ b/.assets/fed28c8fca229c5bb66e0ae2b4ce72db46b36da2.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%200%Optimal 52%Optimal 52%
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..a3edb59ad
--- /dev/null
+++ b/diffs/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,68 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowtrace.io/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xD96B68638bdbb625A49F5BAC0dC3B66764569d30](https://snowtrace.io/address/0xD96B68638bdbb625A49F5BAC0dC3B66764569d30) | [0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2](https://snowtrace.io/address/0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/c415a8c57745a62d63e11134fe8acf5059377542.svg) | ![after](/.assets/62f021f36d53e9ea17053e69d91919a485630b05.svg) |
+
+#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowtrace.io/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xD96B68638bdbb625A49F5BAC0dC3B66764569d30](https://snowtrace.io/address/0xD96B68638bdbb625A49F5BAC0dC3B66764569d30) | [0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2](https://snowtrace.io/address/0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/c415a8c57745a62d63e11134fe8acf5059377542.svg) | ![after](/.assets/62f021f36d53e9ea17053e69d91919a485630b05.svg) |
+
+#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xD96B68638bdbb625A49F5BAC0dC3B66764569d30](https://snowtrace.io/address/0xD96B68638bdbb625A49F5BAC0dC3B66764569d30) | [0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2](https://snowtrace.io/address/0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/c415a8c57745a62d63e11134fe8acf5059377542.svg) | ![after](/.assets/62f021f36d53e9ea17053e69d91919a485630b05.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
+ "interestRateStrategy": {
+ "from": "0xD96B68638bdbb625A49F5BAC0dC3B66764569d30",
+ "to": "0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2"
+ }
+ },
+ "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
+ "interestRateStrategy": {
+ "from": "0xD96B68638bdbb625A49F5BAC0dC3B66764569d30",
+ "to": "0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2"
+ }
+ },
+ "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
+ "interestRateStrategy": {
+ "from": "0xD96B68638bdbb625A49F5BAC0dC3B66764569d30",
+ "to": "0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2"
+ }
+ }
+ },
+ "strategies": {
+ "0x116EFD5652A9993A5984055B2da7eb9acfB48Fd2": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..5bf9e21e4
--- /dev/null
+++ b/diffs/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,172 @@
+## Reserve changes
+
+### Reserve altered
+
+#### GUSD ([0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd](https://etherscan.io/address/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x78Fe5d0427E669ba9F964C3495fF381a805a0487](https://etherscan.io/address/0x78Fe5d0427E669ba9F964C3495fF381a805a0487) | [0x53F19cE786d564901679cbB22e7AA99d152E4986](https://etherscan.io/address/0x53F19cE786d564901679cbB22e7AA99d152E4986) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/7c014a7e5ae96694b0cffee4b2eddadf87478108.svg) | ![after](/.assets/3b121bfadae21d93b5bbd1760ef0af0b99e3654d.svg) |
+
+#### sUSD ([0x57Ab1ec28D129707052df4dF418D58a2D46d5f51](https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x3082D0a473385Ed2cbd1f16087ab8b7BF79f0355](https://etherscan.io/address/0x3082D0a473385Ed2cbd1f16087ab8b7BF79f0355) | [0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6](https://etherscan.io/address/0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/704f19cf0e34dff3f9cc310e94fefbf076d4b4ee.svg) | ![after](/.assets/366ae4c132a12c764ec8a9869c7c0dc7e99c7ed6.svg) |
+
+#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x545Ae1908B6F12e91E03B1DEC4F2e06D0570fE1b](https://etherscan.io/address/0x545Ae1908B6F12e91E03B1DEC4F2e06D0570fE1b) | [0xc6A068E321C83FEacc25C80118E2B1208c54B6ce](https://etherscan.io/address/0xc6A068E321C83FEacc25C80118E2B1208c54B6ce) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/c415a8c57745a62d63e11134fe8acf5059377542.svg) | ![after](/.assets/62f021f36d53e9ea17053e69d91919a485630b05.svg) |
+
+#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x492dcEF1fc5253413fC5576B9522840a1A774DCe](https://etherscan.io/address/0x492dcEF1fc5253413fC5576B9522840a1A774DCe) | [0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6](https://etherscan.io/address/0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/704f19cf0e34dff3f9cc310e94fefbf076d4b4ee.svg) | ![after](/.assets/366ae4c132a12c764ec8a9869c7c0dc7e99c7ed6.svg) |
+
+#### USDP ([0x8E870D67F660D95d5be530380D0eC0bd388289E1](https://etherscan.io/address/0x8E870D67F660D95d5be530380D0eC0bd388289E1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xaC63290BC16fBc33353b14f139cEf1c660ba56F0](https://etherscan.io/address/0xaC63290BC16fBc33353b14f139cEf1c660ba56F0) | [0xd39D46597f78F220d17Ef0811574aE71810abd83](https://etherscan.io/address/0xd39D46597f78F220d17Ef0811574aE71810abd83) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/e6957fe4c310ba51f499314c131f0977304a09d1.svg) | ![after](/.assets/1661f76a7e96cd3c1d406fdc47aed4a08f1c5ddd.svg) |
+
+#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x8Cae0596bC1eD42dc3F04c4506cfe442b3E74e27](https://etherscan.io/address/0x8Cae0596bC1eD42dc3F04c4506cfe442b3E74e27) | [0x312520255B081ED3f9C567a4bb9348A3327a1061](https://etherscan.io/address/0x312520255B081ED3f9C567a4bb9348A3327a1061) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/1ee1814a06c37c32f0efd02a4fda97a8278b0714.svg) | ![after](/.assets/5290a74b4d64da4f9000f7e43d68f39f4bb35194.svg) |
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xF22c8255eA615b3Da6CA5CF5aeCc8956bfF07Aa8](https://etherscan.io/address/0xF22c8255eA615b3Da6CA5CF5aeCc8956bfF07Aa8) | [0x7B3B29B622987Ae2D890BF9B44C1785805C16485](https://etherscan.io/address/0x7B3B29B622987Ae2D890BF9B44C1785805C16485) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/2e987a4911a41c316461bd57acf38be5b6ae837b.svg) | ![after](/.assets/043c20ddb576ea95d464cb796599d5d683262106.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
+ "interestRateStrategy": {
+ "from": "0x78Fe5d0427E669ba9F964C3495fF381a805a0487",
+ "to": "0x53F19cE786d564901679cbB22e7AA99d152E4986"
+ }
+ },
+ "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
+ "interestRateStrategy": {
+ "from": "0x3082D0a473385Ed2cbd1f16087ab8b7BF79f0355",
+ "to": "0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6"
+ }
+ },
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
+ "interestRateStrategy": {
+ "from": "0x545Ae1908B6F12e91E03B1DEC4F2e06D0570fE1b",
+ "to": "0xc6A068E321C83FEacc25C80118E2B1208c54B6ce"
+ }
+ },
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
+ "interestRateStrategy": {
+ "from": "0x492dcEF1fc5253413fC5576B9522840a1A774DCe",
+ "to": "0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6"
+ }
+ },
+ "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
+ "interestRateStrategy": {
+ "from": "0xaC63290BC16fBc33353b14f139cEf1c660ba56F0",
+ "to": "0xd39D46597f78F220d17Ef0811574aE71810abd83"
+ }
+ },
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
+ "interestRateStrategy": {
+ "from": "0x8Cae0596bC1eD42dc3F04c4506cfe442b3E74e27",
+ "to": "0x312520255B081ED3f9C567a4bb9348A3327a1061"
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "interestRateStrategy": {
+ "from": "0xF22c8255eA615b3Da6CA5CF5aeCc8956bfF07Aa8",
+ "to": "0x7B3B29B622987Ae2D890BF9B44C1785805C16485"
+ }
+ }
+ },
+ "strategies": {
+ "0x312520255B081ED3f9C567a4bb9348A3327a1061": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0x53F19cE786d564901679cbB22e7AA99d152E4986": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "300000000000000000000000000",
+ "optimalUsageRatio": "700000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "1000000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "1500000000000000000000000000"
+ }
+ },
+ "0x7B3B29B622987Ae2D890BF9B44C1785805C16485": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "1000000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "1000000000000000000000000000"
+ }
+ },
+ "0xB58Eb84F4CDdd1c335d6Bf6A1828EF3DBbA56Fb6": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": 0,
+ "stableRateSlope2": 0,
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "1000000000000000000000000000"
+ }
+ },
+ "0xd39D46597f78F220d17Ef0811574aE71810abd83": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": 0,
+ "stableRateSlope2": 0,
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..41bdaef46
--- /dev/null
+++ b/diffs/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,92 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xCE5870016D3cFa4e1c71Fb7c7EE8Cef67712a7a3](https://polygonscan.com/address/0xCE5870016D3cFa4e1c71Fb7c7EE8Cef67712a7a3) | [0x283Df7893eF10F729890017F57d76B8D78e18915](https://polygonscan.com/address/0x283Df7893eF10F729890017F57d76B8D78e18915) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/b7a99628770bb40a32e5073151026c58d6315660.svg) | ![after](/.assets/d0ce1d7b0f30792388a361ffa100ec476087d905.svg) |
+
+#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x499e74993FFa39dd314782C4262a7443c31f8422](https://polygonscan.com/address/0x499e74993FFa39dd314782C4262a7443c31f8422) | [0x8D6dA015e69A84644BFc7455F871bDe2A7Fedf39](https://polygonscan.com/address/0x8D6dA015e69A84644BFc7455F871bDe2A7Fedf39) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/ace6978308d6eec66d8d065157ff2ad57060388d.svg) | ![after](/.assets/e4bd0b47b6f0a753cd3286f1a05fa61c8781f53c.svg) |
+
+#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xAcBbD7E2e8C14DBdBB974B1Be2FB29f34C1E5048](https://polygonscan.com/address/0xAcBbD7E2e8C14DBdBB974B1Be2FB29f34C1E5048) | [0xc7008Df6B900b41CD528ceb23283Cf4BBCd0ac6E](https://polygonscan.com/address/0xc7008Df6B900b41CD528ceb23283Cf4BBCd0ac6E) |
+| variableRateSlope1 | 4 % | 5 % |
+| interestRate | ![before](/.assets/c067ea0ccdd4d6df420480855146164d81b3771d.svg) | ![after](/.assets/fed28c8fca229c5bb66e0ae2b4ce72db46b36da2.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
+ "interestRateStrategy": {
+ "from": "0xCE5870016D3cFa4e1c71Fb7c7EE8Cef67712a7a3",
+ "to": "0x283Df7893eF10F729890017F57d76B8D78e18915"
+ }
+ },
+ "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
+ "interestRateStrategy": {
+ "from": "0x499e74993FFa39dd314782C4262a7443c31f8422",
+ "to": "0x8D6dA015e69A84644BFc7455F871bDe2A7Fedf39"
+ }
+ },
+ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
+ "interestRateStrategy": {
+ "from": "0xAcBbD7E2e8C14DBdBB974B1Be2FB29f34C1E5048",
+ "to": "0xc7008Df6B900b41CD528ceb23283Cf4BBCd0ac6E"
+ }
+ }
+ },
+ "strategies": {
+ "0x283Df7893eF10F729890017F57d76B8D78e18915": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "230000000000000000000000000",
+ "optimalUsageRatio": "770000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "1340000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "1340000000000000000000000000"
+ }
+ },
+ "0x8D6dA015e69A84644BFc7455F871bDe2A7Fedf39": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "290000000000000000000000000",
+ "optimalUsageRatio": "710000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "1050000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "1050000000000000000000000000"
+ }
+ },
+ "0xc7008Df6B900b41CD528ceb23283Cf4BBCd0ac6E": {
+ "from": null,
+ "to": {
+ "baseVariableBorrowRate": 0,
+ "maxExcessUsageRatio": "480000000000000000000000000",
+ "optimalUsageRatio": "520000000000000000000000000",
+ "stableRateSlope1": "20000000000000000000000000",
+ "stableRateSlope2": "2360000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "2360000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..736e9951f
--- /dev/null
+++ b/diffs/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,164 @@
+## Reserve changes
+
+### Reserve altered
+
+#### FRAX ([0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F](https://arbiscan.io/address/0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x53b13a6D43F647D788411Abfd28D229C274AfBF9](https://arbiscan.io/address/0x53b13a6D43F647D788411Abfd28D229C274AfBF9) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### LUSD ([0x93b346b6BC2548dA6A1E7d98E9a421B42541425b](https://arbiscan.io/address/0x93b346b6BC2548dA6A1E7d98E9a421B42541425b))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4](https://arbiscan.io/address/0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4) | [0x588b62C84533232E3A881e096E5D639Fa754F093](https://arbiscan.io/address/0x588b62C84533232E3A881e096E5D639Fa754F093) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/43ce89e3d7fc2289843c17d09906ba45f0b42148.svg) | ![after](/.assets/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.svg) |
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x53b13a6D43F647D788411Abfd28D229C274AfBF9](https://arbiscan.io/address/0x53b13a6D43F647D788411Abfd28D229C274AfBF9) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xd9d85499449f26d2A2c240defd75314f23920089](https://arbiscan.io/address/0xd9d85499449f26d2A2c240defd75314f23920089) | [0xb02381b1d27aA9845e5012083CA288c1818884f0](https://arbiscan.io/address/0xb02381b1d27aA9845e5012083CA288c1818884f0) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/0372907d0b2f3da48f7adcaed3b1452230cd5c2b.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://arbiscan.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x53b13a6D43F647D788411Abfd28D229C274AfBF9](https://arbiscan.io/address/0x53b13a6D43F647D788411Abfd28D229C274AfBF9) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### USDC ([0xaf88d065e77c8cC2239327C5EDb3A432268e5831](https://arbiscan.io/address/0xaf88d065e77c8cC2239327C5EDb3A432268e5831))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://arbiscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | [0xA901Bf68Bebde17ba382e499C3e9EbAe649DF276](https://arbiscan.io/address/0xA901Bf68Bebde17ba382e499C3e9EbAe649DF276) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/26fe9d5b1f609d3f149edb1d9d48db7c8ef3a63d.svg) | ![after](/.assets/66d716abff4a87dcfc719a431d31ee77d341c950.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x53b13a6D43F647D788411Abfd28D229C274AfBF9"
+ }
+ },
+ "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": {
+ "interestRateStrategy": {
+ "from": "0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4",
+ "to": "0x588b62C84533232E3A881e096E5D639Fa754F093"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x53b13a6D43F647D788411Abfd28D229C274AfBF9"
+ }
+ },
+ "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
+ "interestRateStrategy": {
+ "from": "0xd9d85499449f26d2A2c240defd75314f23920089",
+ "to": "0xb02381b1d27aA9845e5012083CA288c1818884f0"
+ }
+ },
+ "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x53b13a6D43F647D788411Abfd28D229C274AfBF9"
+ }
+ },
+ "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": {
+ "interestRateStrategy": {
+ "from": "0xf6733B9842883BFE0e0a940eA2F572676af31bde",
+ "to": "0xA901Bf68Bebde17ba382e499C3e9EbAe649DF276"
+ }
+ }
+ },
+ "strategies": {
+ "0x53b13a6D43F647D788411Abfd28D229C274AfBF9": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x588b62C84533232E3A881e096E5D639Fa754F093": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "870000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "870000000000000000000000000"
+ }
+ },
+ "0xA901Bf68Bebde17ba382e499C3e9EbAe649DF276": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "50000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0xb02381b1d27aA9845e5012083CA288c1818884f0": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..c087c92e3
--- /dev/null
+++ b/diffs/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,104 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDt ([0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7](https://snowtrace.io/address/0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x3B57B081dA6Af5e2759A57bD3211932Cb6176997](https://snowtrace.io/address/0x3B57B081dA6Af5e2759A57bD3211932Cb6176997) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### USDC ([0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E](https://snowtrace.io/address/0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xD624AFA34614B4fe7FEe7e1751a2E5E04fb47398](https://snowtrace.io/address/0xD624AFA34614B4fe7FEe7e1751a2E5E04fb47398) | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://snowtrace.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/0372907d0b2f3da48f7adcaed3b1452230cd5c2b.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+#### FRAX ([0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64](https://snowtrace.io/address/0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x3B57B081dA6Af5e2759A57bD3211932Cb6176997](https://snowtrace.io/address/0x3B57B081dA6Af5e2759A57bD3211932Cb6176997) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xfab05a6aF585da2F96e21452F91E812452996BD3](https://snowtrace.io/address/0xfab05a6aF585da2F96e21452F91E812452996BD3) | [0x3B57B081dA6Af5e2759A57bD3211932Cb6176997](https://snowtrace.io/address/0x3B57B081dA6Af5e2759A57bD3211932Cb6176997) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997"
+ }
+ },
+ "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
+ "interestRateStrategy": {
+ "from": "0xD624AFA34614B4fe7FEe7e1751a2E5E04fb47398",
+ "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17"
+ }
+ },
+ "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997"
+ }
+ },
+ "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
+ "interestRateStrategy": {
+ "from": "0xfab05a6aF585da2F96e21452F91E812452996BD3",
+ "to": "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997"
+ }
+ }
+ },
+ "strategies": {
+ "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..057ed2fa7
--- /dev/null
+++ b/diffs/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,44 @@
+## Reserve changes
+
+### Reserves altered
+
+#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x8BAdED77793c340ab79848A09C7F5f7F16007Ab6](https://basescan.org/address/0x8BAdED77793c340ab79848A09C7F5f7F16007Ab6) | [0x8c63A1b0721D5776Ae5ed1Be8dc7f2A1e7312Ed3](https://basescan.org/address/0x8c63A1b0721D5776Ae5ed1Be8dc7f2A1e7312Ed3) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/ea60696e57315a00b0941d7fe1bd186df779165e.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": {
+ "interestRateStrategy": {
+ "from": "0x8BAdED77793c340ab79848A09C7F5f7F16007Ab6",
+ "to": "0x8c63A1b0721D5776Ae5ed1Be8dc7f2A1e7312Ed3"
+ }
+ }
+ },
+ "strategies": {
+ "0x8c63A1b0721D5776Ae5ed1Be8dc7f2A1e7312Ed3": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..3293b9fcd
--- /dev/null
+++ b/diffs/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,134 @@
+## Reserve changes
+
+### Reserve altered
+
+#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x349684Da30f8c9Affeaf21AfAB3a1Ad51f5d95A3](https://etherscan.io/address/0x349684Da30f8c9Affeaf21AfAB3a1Ad51f5d95A3) | [0xaDbdb3d6B51151e4CDF32e4050B6F03D2bfB6477](https://etherscan.io/address/0xaDbdb3d6B51151e4CDF32e4050B6F03D2bfB6477) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/43ce89e3d7fc2289843c17d09906ba45f0b42148.svg) | ![after](/.assets/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.svg) |
+
+#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2](https://etherscan.io/address/0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2) | [0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4](https://etherscan.io/address/0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x8F183Ee74C790CB558232a141099b316D6C8Ba6E](https://etherscan.io/address/0x8F183Ee74C790CB558232a141099b316D6C8Ba6E) | [0x53b13a6D43F647D788411Abfd28D229C274AfBF9](https://etherscan.io/address/0x53b13a6D43F647D788411Abfd28D229C274AfBF9) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/0372907d0b2f3da48f7adcaed3b1452230cd5c2b.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xC82dF96432346cFb632473eB619Db3B8AC280234](https://etherscan.io/address/0xC82dF96432346cFb632473eB619Db3B8AC280234) | [0x588b62C84533232E3A881e096E5D639Fa754F093](https://etherscan.io/address/0x588b62C84533232E3A881e096E5D639Fa754F093) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/398a9e53757e01d6b0e762e21b88bb93cf4aa95e.svg) | ![after](/.assets/8f352ac66d85aced6acb0053b7c628c46d25cf2d.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
+ "interestRateStrategy": {
+ "from": "0x349684Da30f8c9Affeaf21AfAB3a1Ad51f5d95A3",
+ "to": "0xaDbdb3d6B51151e4CDF32e4050B6F03D2bfB6477"
+ }
+ },
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
+ "interestRateStrategy": {
+ "from": "0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2",
+ "to": "0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4"
+ }
+ },
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
+ "interestRateStrategy": {
+ "from": "0x8F183Ee74C790CB558232a141099b316D6C8Ba6E",
+ "to": "0x53b13a6D43F647D788411Abfd28D229C274AfBF9"
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "interestRateStrategy": {
+ "from": "0xC82dF96432346cFb632473eB619Db3B8AC280234",
+ "to": "0x588b62C84533232E3A881e096E5D639Fa754F093"
+ }
+ }
+ },
+ "strategies": {
+ "0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x53b13a6D43F647D788411Abfd28D229C274AfBF9": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0x588b62C84533232E3A881e096E5D639Fa754F093": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "720000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0xaDbdb3d6B51151e4CDF32e4050B6F03D2bfB6477": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "870000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "870000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..1d4b9fbb7
--- /dev/null
+++ b/diffs/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,74 @@
+## Reserve changes
+
+### Reserve altered
+
+#### m.USDC ([0xEA32A96608495e54156Ae48931A7c20f0dcc1a21](https://andromeda-explorer.metis.io/address/0xEA32A96608495e54156Ae48931A7c20f0dcc1a21))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x3B88f83B2b0444F14B6fc904040F648206F551fc](https://andromeda-explorer.metis.io/address/0x3B88f83B2b0444F14B6fc904040F648206F551fc) | [0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0](https://andromeda-explorer.metis.io/address/0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/ea60696e57315a00b0941d7fe1bd186df779165e.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.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) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21": {
+ "interestRateStrategy": {
+ "from": "0x3B88f83B2b0444F14B6fc904040F648206F551fc",
+ "to": "0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0"
+ }
+ },
+ "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC": {
+ "interestRateStrategy": {
+ "from": "0x5A1bdAc4eBa2A70D465ef4aDd2f68dBBae183454",
+ "to": "0x082612269926F85741E6c2B0447D000469880c1C"
+ }
+ }
+ },
+ "strategies": {
+ "0x082612269926F85741E6c2B0447D000469880c1C": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x3c8DF161A59F2a3ed4D40F073395d6a0f14290C0": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..55b219277
--- /dev/null
+++ b/diffs/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,134 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://explorer.optimism.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x354E84ec43aCD91e1C0135c3e691960E881DB4b7](https://explorer.optimism.io/address/0x354E84ec43aCD91e1C0135c3e691960E881DB4b7) | [0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e](https://explorer.optimism.io/address/0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/0372907d0b2f3da48f7adcaed3b1452230cd5c2b.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://explorer.optimism.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://explorer.optimism.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x3832311560d3B457E9cC35e5b8e06EB167D8c17D](https://explorer.optimism.io/address/0x3832311560d3B457E9cC35e5b8e06EB167D8c17D) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### 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) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://explorer.optimism.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://explorer.optimism.io/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0x3832311560d3B457E9cC35e5b8e06EB167D8c17D](https://explorer.optimism.io/address/0x3832311560d3B457E9cC35e5b8e06EB167D8c17D) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://explorer.optimism.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0x271f5f8325051f22caDa18FfedD4a805584a232A](https://explorer.optimism.io/address/0x271f5f8325051f22caDa18FfedD4a805584a232A) | [0xD61ca03Eac0352090f45bE50403F7B17d20E11F2](https://explorer.optimism.io/address/0xD61ca03Eac0352090f45bE50403F7B17d20E11F2) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/43ce89e3d7fc2289843c17d09906ba45f0b42148.svg) | ![after](/.assets/73cbf1aae04d2063059bb0a9bc283ef7a4332ac4.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
+ "interestRateStrategy": {
+ "from": "0x354E84ec43aCD91e1C0135c3e691960E881DB4b7",
+ "to": "0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e"
+ }
+ },
+ "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D"
+ }
+ },
+ "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D"
+ }
+ },
+ "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": {
+ "interestRateStrategy": {
+ "from": "0x271f5f8325051f22caDa18FfedD4a805584a232A",
+ "to": "0xD61ca03Eac0352090f45bE50403F7B17d20E11F2"
+ }
+ }
+ },
+ "strategies": {
+ "0x3832311560d3B457E9cC35e5b8e06EB167D8c17D": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ },
+ "0x6D6D3b7FC50999bf20dE5CC8e0F63AFD18B95f0e": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0xD61ca03Eac0352090f45bE50403F7B17d20E11F2": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "40000000000000000000000000",
+ "stableRateSlope2": "870000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "870000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md b/diffs/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
new file mode 100644
index 000000000..17a6eef56
--- /dev/null
+++ b/diffs/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_before_AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_after.md
@@ -0,0 +1,89 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xC82dF96432346cFb632473eB619Db3B8AC280234](https://polygonscan.com/address/0xC82dF96432346cFb632473eB619Db3B8AC280234) | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://polygonscan.com/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) |
+| variableRateSlope1 | 3.5 % | 5 % |
+| baseStableBorrowRate | 4.5 % | 6 % |
+| interestRate | ![before](/.assets/0372907d0b2f3da48f7adcaed3b1452230cd5c2b.svg) | ![after](/.assets/2054bce529b78cac463f95dc79fc18b65a0c1f44.svg) |
+
+#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://polygonscan.com/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xdef8F50155A6cf21181E29E400E8CffAE2d50968](https://polygonscan.com/address/0xdef8F50155A6cf21181E29E400E8CffAE2d50968) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| interestRateStrategy | [0xA9F3C3caE095527061e6d270DBE163693e6fda9D](https://polygonscan.com/address/0xA9F3C3caE095527061e6d270DBE163693e6fda9D) | [0xdef8F50155A6cf21181E29E400E8CffAE2d50968](https://polygonscan.com/address/0xdef8F50155A6cf21181E29E400E8CffAE2d50968) |
+| variableRateSlope1 | 4 % | 5 % |
+| baseStableBorrowRate | 5 % | 6 % |
+| interestRate | ![before](/.assets/8d9de32bf30b1c9dcf71f07a13b228c69a71a4ce.svg) | ![after](/.assets/9ed0ac5bda0d6aea5b627325dd757aab5a706122.svg) |
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
+ "interestRateStrategy": {
+ "from": "0xC82dF96432346cFb632473eB619Db3B8AC280234",
+ "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426"
+ }
+ },
+ "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xdef8F50155A6cf21181E29E400E8CffAE2d50968"
+ }
+ },
+ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
+ "interestRateStrategy": {
+ "from": "0xA9F3C3caE095527061e6d270DBE163693e6fda9D",
+ "to": "0xdef8F50155A6cf21181E29E400E8CffAE2d50968"
+ }
+ }
+ },
+ "strategies": {
+ "0xD87974E8ED49AB16d5053ba793F4e17078Be0426": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "100000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "600000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "600000000000000000000000000"
+ }
+ },
+ "0xdef8F50155A6cf21181E29E400E8CffAE2d50968": {
+ "from": null,
+ "to": {
+ "baseStableBorrowRate": "60000000000000000000000000",
+ "baseVariableBorrowRate": 0,
+ "maxExcessStableToTotalDebtRatio": "800000000000000000000000000",
+ "maxExcessUsageRatio": "200000000000000000000000000",
+ "optimalStableToTotalDebtRatio": "200000000000000000000000000",
+ "optimalUsageRatio": "800000000000000000000000000",
+ "stableRateSlope1": "5000000000000000000000000",
+ "stableRateSlope2": "750000000000000000000000000",
+ "variableRateSlope1": "50000000000000000000000000",
+ "variableRateSlope2": "750000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..3aa02b13e
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
+import {AaveV2PayloadAvalanche} from 'aave-helpers/v2-config-engine/AaveV2PayloadAvalanche.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol';
+import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol';
+
+/**
+ * @title Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV2PayloadAvalanche {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV2ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](3);
+ rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2AvalancheAssets.USDCe_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2AvalancheAssets.USDTe_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2AvalancheAssets.DAIe_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..7068ca877
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2Avalanche} from 'aave-address-book/AaveV2Avalanche.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
+import {AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV2TestBase {
+ AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('avalanche'), 37852748);
+ proposal = new AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV2Avalanche.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..7b410f817
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
+import {AaveV2PayloadEthereum} from 'aave-helpers/v2-config-engine/AaveV2PayloadEthereum.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol';
+import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol';
+
+/**
+ * @title Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV2PayloadEthereum {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV2ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](7);
+ rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.USDC_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.USDT_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.FRAX_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[3] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.sUSD_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[4] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.GUSD_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[5] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.LUSD_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[6] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2EthereumAssets.USDP_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..cd5cc7f42
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV2TestBase {
+ AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 18586711);
+ proposal = new AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV2Ethereum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..7f4679435
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
+import {AaveV2PayloadPolygon} from 'aave-helpers/v2-config-engine/AaveV2PayloadPolygon.sol';
+import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol';
+import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol';
+
+/**
+ * @title Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV2PayloadPolygon {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV2ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](3);
+ rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2PolygonAssets.USDC_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2PolygonAssets.USDT_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+ rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({
+ asset: AaveV2PolygonAssets.DAI_UNDERLYING,
+ params: IV2RateStrategyFactory.RateStrategyParams({
+ optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ variableRateSlope2: EngineFlags.KEEP_CURRENT,
+ stableRateSlope1: EngineFlags.KEEP_CURRENT,
+ stableRateSlope2: EngineFlags.KEEP_CURRENT
+ })
+ });
+
+ return rateStrategies;
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..96b5129e0
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
+import {AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV2TestBase {
+ AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('polygon'), 50026195);
+ proposal = new AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV2Polygon.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..730833055
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,112 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadArbitrum {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](6);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.USDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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.USDCn_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[3] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[4] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.LUSD_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[5] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..b1d0282fa
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('arbitrum'), 151089077);
+ proposal = new AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Arbitrum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..247b18689
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,84 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadAvalanche {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](4);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3AvalancheAssets.USDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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.DAIe_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[3] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3AvalancheAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..19fd1f2aa
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('avalanche'), 37852748);
+ proposal = new AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Avalanche.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..9820d91a9
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol';
+import {AaveV3PayloadBase} from 'aave-helpers/v3-config-engine/AaveV3PayloadBase.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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadBase {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3BaseAssets.USDbC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..d16d15e89
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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 {AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('base'), 6687813);
+ proposal = new AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Base.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..4e9a12c3c
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,84 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadEthereum {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](4);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3EthereumAssets.USDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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.USDT_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: AaveV3EthereumAssets.LUSD_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[3] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3EthereumAssets.FRAX_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..018d4b017
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 18586711);
+ proposal = new AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Ethereum.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..bbf6dfc70
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,56 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_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.mUSDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..a440c3d85
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('metis'), 9377986);
+ proposal = new AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Metis.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..a8248e5c6
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,98 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadOptimism {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](5);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3OptimismAssets.USDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: AaveV3OptimismAssets.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[3] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3OptimismAssets.sUSD_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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[4] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3OptimismAssets.LUSD_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..0c7fd5b82
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('optimism'), 112283099);
+ proposal = new AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Optimism.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol
new file mode 100644
index 000000000..b7c485960
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol
@@ -0,0 +1,70 @@
+// 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 Increase Stablecoin Optimal Borrow Rates
+ * @author Gauntlet, Block Analitica
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af
+ * - Discussion: https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096
+ */
+contract AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 is AaveV3PayloadPolygon {
+ function rateStrategiesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.RateStrategyUpdate[]
+ memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3);
+ rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
+ asset: AaveV3PolygonAssets.USDC_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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: AaveV3PolygonAssets.DAI_UNDERLYING,
+ params: IV3RateStrategyFactory.RateStrategyParams({
+ optimalUsageRatio: EngineFlags.KEEP_CURRENT,
+ baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
+ variableRateSlope1: _bpsToRay(5_00),
+ 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_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
new file mode 100644
index 000000000..50406b0b8
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol
@@ -0,0 +1,32 @@
+// 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_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Test for AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116
+ * command: make test-contract filter=AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116
+ */
+contract AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116_Test is ProtocolV3TestBase {
+ AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('polygon'), 50026194);
+ proposal = new AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116',
+ AaveV3Polygon.POOL,
+ address(proposal)
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates.md b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates.md
new file mode 100644
index 000000000..9bc1b74b5
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates.md
@@ -0,0 +1,71 @@
+---
+title: "Increase Stablecoin Optimal Borrow Rates"
+author: "Gauntlet, Block Analitica"
+discussions: "https://governance.aave.com/t/arfc-increase-optimal-borrow-rates-for-ethereum-stablecoin-markets/15096"
+---
+
+## Summary
+
+This AIP proposes to make adjustments to stablecoin interest rate models across Aave v2 and v3 markets. Specifically, this AIP proposes to increase the slope 1 parameter for stablecoins to implement a 5% optimal borrow rate.
+
+## Specification
+
+| Market | Asset | Parameter | Current Value | Recommended Value |
+| ------------ | ------ | ------------------ | ------------- | ----------------- |
+| Ethereum v2 | USDC | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | FRAX | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | sUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | GUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | LUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v2 | USDP | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v3 | USDC | variableRateSlope1 | 0.035 | 0.05 |
+| Ethereum v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v3 | LUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Ethereum v3 | FRAX | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v2 | USDC | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v2 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v2 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v3 | USDC | variableRateSlope1 | 0.035 | 0.05 |
+| Avalanche v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v3 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Avalanche v3 | FRAX | variableRateSlope1 | 0.04 | 0.05 |
+| Polygon v2 | USDC | variableRateSlope1 | 0.04 | 0.05 |
+| Polygon v2 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Polygon v2 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Polygon v3 | USDC | variableRateSlope1 | 0.035 | 0.05 |
+| Polygon v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Polygon v3 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Optimism v3 | USDC | variableRateSlope1 | 0.035 | 0.05 |
+| Optimism v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Optimism v3 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Optimism v3 | sUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Optimism v3 | LUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Arbitrum v3 | USDC | variableRateSlope1 | 0.035 | 0.05 |
+| Arbitrum v3 | USDC.e | variableRateSlope1 | 0.035 | 0.05 |
+| Arbitrum v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+| Arbitrum v3 | DAI | variableRateSlope1 | 0.04 | 0.05 |
+| Arbitrum v3 | LUSD | variableRateSlope1 | 0.04 | 0.05 |
+| Arbitrum v3 | FRAX | variableRateSlope1 | 0.04 | 0.05 |
+| Base v3 | USDC | variableRateSlope1 | 0.04 | 0.05 |
+| Metis v3 | USDC | variableRateSlope1 | 0.04 | 0.05 |
+| Metis v3 | USDT | variableRateSlope1 | 0.04 | 0.05 |
+
+## References
+
+- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol)
+- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.t.sol)
+- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af)
+- [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_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol
new file mode 100644
index 000000000..7f82386c4
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol
@@ -0,0 +1,214 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
+import {EthereumScript, AvalancheScript, PolygonScript, OptimismScript, ArbitrumScript, BaseScript, MetisScript} from 'aave-helpers/ScriptUtils.sol';
+import {AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+import {AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116} from './AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116.sol';
+
+/**
+ * @dev Deploy Ethereum
+ * command: make deploy-ledger contract=src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployEthereum chain=mainnet
+ */
+contract DeployEthereum is EthereumScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV2Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116();
+ AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_20231116 payload1 = new AaveV3Ethereum_IncreaseStablecoinOptimalBorrowRates_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 Avalanche
+ * command: make deploy-ledger contract=src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployAvalanche chain=avalanche
+ */
+contract DeployAvalanche is AvalancheScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV2Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116();
+ AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_20231116 payload1 = new AaveV3Avalanche_IncreaseStablecoinOptimalBorrowRates_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_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployPolygon chain=polygon
+ */
+contract DeployPolygon is PolygonScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV2Polygon_IncreaseStablecoinOptimalBorrowRates_20231116();
+ AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_20231116 payload1 = new AaveV3Polygon_IncreaseStablecoinOptimalBorrowRates_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 Optimism
+ * command: make deploy-ledger contract=src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployOptimism chain=optimism
+ */
+contract DeployOptimism is OptimismScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV3Optimism_IncreaseStablecoinOptimalBorrowRates_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_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployArbitrum chain=arbitrum
+ */
+contract DeployArbitrum is ArbitrumScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV3Arbitrum_IncreaseStablecoinOptimalBorrowRates_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 Base
+ * command: make deploy-ledger contract=src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployBase chain=base
+ */
+contract DeployBase is BaseScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Base_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV3Base_IncreaseStablecoinOptimalBorrowRates_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_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:DeployMetis chain=metis
+ */
+contract DeployMetis is MetisScript {
+ function run() external broadcast {
+ // deploy payloads
+ AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_20231116 payload0 = new AaveV3Metis_IncreaseStablecoinOptimalBorrowRates_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_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates_20231116.s.sol:CreateProposal chain=mainnet
+ */
+contract CreateProposal is EthereumScript {
+ function run() external {
+ // create payloads
+ PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](7);
+
+ // 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 actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](2);
+ actionsAvalanche[0] = GovV3Helpers.buildAction(address(0));
+ actionsAvalanche[1] = GovV3Helpers.buildAction(address(0));
+ payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](2);
+ actionsPolygon[0] = GovV3Helpers.buildAction(address(0));
+ actionsPolygon[1] = GovV3Helpers.buildAction(address(0));
+ payloads[2] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
+
+ 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 actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsBase[0] = GovV3Helpers.buildAction(address(0));
+ payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase);
+
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsMetis[0] = GovV3Helpers.buildAction(address(0));
+ payloads[6] = GovV3Helpers.buildMetisPayload(vm, actionsMetis);
+
+ // create proposal
+ vm.startBroadcast();
+ GovV3Helpers.createProposal2_5(
+ payloads,
+ GovV3Helpers.ipfsHashFile(
+ vm,
+ 'src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/IncreaseStablecoinOptimalBorrowRates.md'
+ )
+ );
+ }
+}
diff --git a/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/config.json b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/config.json
new file mode 100644
index 000000000..d4cd4ddf4
--- /dev/null
+++ b/src/20231116_Multi_IncreaseStablecoinOptimalBorrowRates/config.json
@@ -0,0 +1,607 @@
+{
+ "rootOptions": {
+ "pools": [
+ "AaveV2Ethereum",
+ "AaveV3Ethereum",
+ "AaveV2Avalanche",
+ "AaveV3Avalanche",
+ "AaveV2Polygon",
+ "AaveV3Polygon",
+ "AaveV3Optimism",
+ "AaveV3Arbitrum",
+ "AaveV3Base",
+ "AaveV3Metis"
+ ],
+ "title": "Increase Stablecoin Optimal Borrow Rates",
+ "shortName": "IncreaseStablecoinOptimalBorrowRates",
+ "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/0x914862039828294f4277ad63087ffae295b7693ba365c9036326cca802bfc7af"
+ },
+ "poolOptions": {
+ "AaveV2Ethereum": {
+ "configs": {
+ "RATE_UPDATE_V2": [
+ {
+ "asset": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "FRAX",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "sUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "GUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "LUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDP",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V2"
+ ]
+ },
+ "AaveV3Ethereum": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "LUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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"
+ ]
+ },
+ "AaveV2Avalanche": {
+ "configs": {
+ "RATE_UPDATE_V2": [
+ {
+ "asset": "USDCe",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDTe",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "DAIe",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V2"
+ ]
+ },
+ "AaveV3Avalanche": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "DAIe",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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"
+ ]
+ },
+ "AaveV2Polygon": {
+ "configs": {
+ "RATE_UPDATE_V2": [
+ {
+ "asset": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "USDT",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ },
+ {
+ "asset": "DAI",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "variableRateSlope2": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope1": "EngineFlags.KEEP_CURRENT",
+ "stableRateSlope2": "EngineFlags.KEEP_CURRENT"
+ }
+ }
+ ]
+ },
+ "features": [
+ "RATE_UPDATE_V2"
+ ]
+ },
+ "AaveV3Polygon": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "DAI",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "DAI",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "sUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "LUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "USDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "USDCn",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "DAI",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "LUSD",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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"
+ ]
+ },
+ "AaveV3Base": {
+ "configs": {
+ "RATE_UPDATE_V3": [
+ {
+ "asset": "USDbC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "mUSDC",
+ "params": {
+ "optimalUtilizationRate": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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": "EngineFlags.KEEP_CURRENT",
+ "baseVariableBorrowRate": "EngineFlags.KEEP_CURRENT",
+ "variableRateSlope1": "_bpsToRay(5_00)",
+ "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"
+ ]
+ }
+ }
+}
\ No newline at end of file