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 @@ + 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/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