diff --git a/.assets/00b4f95cc15c1f1496a5eaa5ba3d120baeaf7ef6.svg b/.assets/00b4f95cc15c1f1496a5eaa5ba3d120baeaf7ef6.svg
deleted file mode 100644
index 4df5595b1..000000000
--- a/.assets/00b4f95cc15c1f1496a5eaa5ba3d120baeaf7ef6.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/.assets/010633e355dbf154c1151f809618bd82bf6c78f6.svg b/.assets/010633e355dbf154c1151f809618bd82bf6c78f6.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/010633e355dbf154c1151f809618bd82bf6c78f6.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/014904fabcaa28d579bed688e1e3c35928c86f7c.svg b/.assets/014904fabcaa28d579bed688e1e3c35928c86f7c.svg
deleted file mode 100644
index 771e3e22e..000000000
--- a/.assets/014904fabcaa28d579bed688e1e3c35928c86f7c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90%
\ No newline at end of file
diff --git a/.assets/03014f6d7e563bf95e08a254d6612c2a1779bb37.svg b/.assets/03014f6d7e563bf95e08a254d6612c2a1779bb37.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/03014f6d7e563bf95e08a254d6612c2a1779bb37.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/040ee878e4c27fa98448dcca1559572aefa4e034.svg b/.assets/040ee878e4c27fa98448dcca1559572aefa4e034.svg
deleted file mode 100644
index 54c3729a5..000000000
--- a/.assets/040ee878e4c27fa98448dcca1559572aefa4e034.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/048fca758555675b88ba367ba86f80e807d3eb1b.svg b/.assets/048fca758555675b88ba367ba86f80e807d3eb1b.svg
deleted file mode 100644
index a9698135e..000000000
--- a/.assets/048fca758555675b88ba367ba86f80e807d3eb1b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/0518bbd4626bb5720f88ed176a0eface0847dc7f.svg b/.assets/0518bbd4626bb5720f88ed176a0eface0847dc7f.svg
deleted file mode 100644
index f9cf76db9..000000000
--- a/.assets/0518bbd4626bb5720f88ed176a0eface0847dc7f.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/0677b467f0917a105079de920e1344ed9daf4884.svg b/.assets/0677b467f0917a105079de920e1344ed9daf4884.svg
deleted file mode 100644
index 14910512f..000000000
--- a/.assets/0677b467f0917a105079de920e1344ed9daf4884.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/078d4fa16841aad11aa6c8fee811f71297d1fecd.svg b/.assets/078d4fa16841aad11aa6c8fee811f71297d1fecd.svg
deleted file mode 100644
index 679c73113..000000000
--- a/.assets/078d4fa16841aad11aa6c8fee811f71297d1fecd.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/0873847aaeec62529a46dfb86b634cab0f24ff85.svg b/.assets/0873847aaeec62529a46dfb86b634cab0f24ff85.svg
deleted file mode 100644
index 5afdc519f..000000000
--- a/.assets/0873847aaeec62529a46dfb86b634cab0f24ff85.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 40%uOptimal 40%
\ No newline at end of file
diff --git a/.assets/08ca8bada153f02ef4b956d14c72dad8303f52a6.svg b/.assets/08ca8bada153f02ef4b956d14c72dad8303f52a6.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/08ca8bada153f02ef4b956d14c72dad8303f52a6.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/0a3dc0cae180a27f87076f3f146ac84c1e5dae43.svg b/.assets/0a3dc0cae180a27f87076f3f146ac84c1e5dae43.svg
deleted file mode 100644
index 5072a99e3..000000000
--- a/.assets/0a3dc0cae180a27f87076f3f146ac84c1e5dae43.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 35%uOptimal 35%
\ No newline at end of file
diff --git a/.assets/0aa5f23c00310ea6b573d06b8c40c22a3b5b9441.svg b/.assets/0aa5f23c00310ea6b573d06b8c40c22a3b5b9441.svg
deleted file mode 100644
index d76af2dec..000000000
--- a/.assets/0aa5f23c00310ea6b573d06b8c40c22a3b5b9441.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 10%uOptimal 10%
\ No newline at end of file
diff --git a/.assets/0bc8f7175811834d25e2182574a0dfeb42e8738c.svg b/.assets/0bc8f7175811834d25e2182574a0dfeb42e8738c.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/0bc8f7175811834d25e2182574a0dfeb42e8738c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/0d46815e8ed0eae8be98be6dac2c0a98c0d89e11.svg b/.assets/0d46815e8ed0eae8be98be6dac2c0a98c0d89e11.svg
deleted file mode 100644
index 165ff67a8..000000000
--- a/.assets/0d46815e8ed0eae8be98be6dac2c0a98c0d89e11.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/0ec2865085d427ed04e5a2f5d75e7885ac1517e2.svg b/.assets/0ec2865085d427ed04e5a2f5d75e7885ac1517e2.svg
deleted file mode 100644
index 91982ac23..000000000
--- a/.assets/0ec2865085d427ed04e5a2f5d75e7885ac1517e2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/102bd1ba172a5d78380ebf458bef8a6bc4d809af.svg b/.assets/102bd1ba172a5d78380ebf458bef8a6bc4d809af.svg
deleted file mode 100644
index 3b522ac65..000000000
--- a/.assets/102bd1ba172a5d78380ebf458bef8a6bc4d809af.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/120b3346a2da5456c1e5eeb7876b093ce7188e35.svg b/.assets/120b3346a2da5456c1e5eeb7876b093ce7188e35.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/120b3346a2da5456c1e5eeb7876b093ce7188e35.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/1310e892bb7af5800a0bc1a339f7f3c1b918edb0.svg b/.assets/1310e892bb7af5800a0bc1a339f7f3c1b918edb0.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/1310e892bb7af5800a0bc1a339f7f3c1b918edb0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/162b720585663968afe7fc152291b9068b0e7e2a.svg b/.assets/162b720585663968afe7fc152291b9068b0e7e2a.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/162b720585663968afe7fc152291b9068b0e7e2a.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/1798329ffb6f669d96d0b2f3dd0a4023b6501ef2.svg b/.assets/1798329ffb6f669d96d0b2f3dd0a4023b6501ef2.svg
deleted file mode 100644
index 4df5595b1..000000000
--- a/.assets/1798329ffb6f669d96d0b2f3dd0a4023b6501ef2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 10%uOptimal 10%
\ No newline at end of file
diff --git a/.assets/17fde8c4c743d3b880e9ce606966811d558db12c.svg b/.assets/17fde8c4c743d3b880e9ce606966811d558db12c.svg
deleted file mode 100644
index 3ba4e7005..000000000
--- a/.assets/17fde8c4c743d3b880e9ce606966811d558db12c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/1883f0e65a4ad76eb3c4b3694001076335ebb289.svg b/.assets/1883f0e65a4ad76eb3c4b3694001076335ebb289.svg
deleted file mode 100644
index 316ce2a4c..000000000
--- a/.assets/1883f0e65a4ad76eb3c4b3694001076335ebb289.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 25%Optimal 25%
\ No newline at end of file
diff --git a/.assets/189b1048cfb01ad4ab7283e7ad5c7292c5ec484d.svg b/.assets/189b1048cfb01ad4ab7283e7ad5c7292c5ec484d.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/189b1048cfb01ad4ab7283e7ad5c7292c5ec484d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/18b03d6f60b9750d02983796033f924a6d918d81.svg b/.assets/18b03d6f60b9750d02983796033f924a6d918d81.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/18b03d6f60b9750d02983796033f924a6d918d81.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/19d720ba733a698f9e5c8714853876f8759c351e.svg b/.assets/19d720ba733a698f9e5c8714853876f8759c351e.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/19d720ba733a698f9e5c8714853876f8759c351e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/1a2d00464fd0707711f315bbce0579c505aef532.svg b/.assets/1a2d00464fd0707711f315bbce0579c505aef532.svg
deleted file mode 100644
index a64e70f4b..000000000
--- a/.assets/1a2d00464fd0707711f315bbce0579c505aef532.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/1aacc27adfcd690db39f0bb5d47ab2aca7da4b9f.svg b/.assets/1aacc27adfcd690db39f0bb5d47ab2aca7da4b9f.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/1aacc27adfcd690db39f0bb5d47ab2aca7da4b9f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/1b4c8cf52b3cfc10e92a52e04f08a3ec2809eb88.svg b/.assets/1b4c8cf52b3cfc10e92a52e04f08a3ec2809eb88.svg
deleted file mode 100644
index 92d00d0ae..000000000
--- a/.assets/1b4c8cf52b3cfc10e92a52e04f08a3ec2809eb88.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/1baf85e415bd720bc42ec928d822cffbd4236d90.svg b/.assets/1baf85e415bd720bc42ec928d822cffbd4236d90.svg
deleted file mode 100644
index abbc7c84e..000000000
--- a/.assets/1baf85e415bd720bc42ec928d822cffbd4236d90.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/1d6c5171b782bed1b660027d0e32763551b52b0b.svg b/.assets/1d6c5171b782bed1b660027d0e32763551b52b0b.svg
deleted file mode 100644
index f9b4dae23..000000000
--- a/.assets/1d6c5171b782bed1b660027d0e32763551b52b0b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%200%Optimal 40%Optimal 40%
\ No newline at end of file
diff --git a/.assets/1ea1ebb4deb19f90dccb93ec71cdbb222e6987e6.svg b/.assets/1ea1ebb4deb19f90dccb93ec71cdbb222e6987e6.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/1ea1ebb4deb19f90dccb93ec71cdbb222e6987e6.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg b/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/1f3fbb6c2695906bac9d02c33714fe2e2138feef.svg b/.assets/1f3fbb6c2695906bac9d02c33714fe2e2138feef.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/1f3fbb6c2695906bac9d02c33714fe2e2138feef.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/1f559076c39f0efa5de130807468c1274e03e2b4.svg b/.assets/1f559076c39f0efa5de130807468c1274e03e2b4.svg
deleted file mode 100644
index 3b522ac65..000000000
--- a/.assets/1f559076c39f0efa5de130807468c1274e03e2b4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/1fcc1b0751c3b07af596103ceace9c8c3c9b63ea.svg b/.assets/1fcc1b0751c3b07af596103ceace9c8c3c9b63ea.svg
deleted file mode 100644
index 6d6c53604..000000000
--- a/.assets/1fcc1b0751c3b07af596103ceace9c8c3c9b63ea.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/20707eb1f47fcf98a914006f2d63d9daa515de6b.svg b/.assets/20707eb1f47fcf98a914006f2d63d9daa515de6b.svg
deleted file mode 100644
index a9698135e..000000000
--- a/.assets/20707eb1f47fcf98a914006f2d63d9daa515de6b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/20a72b088bbb1497216177a40f5a74033022b10a.svg b/.assets/20a72b088bbb1497216177a40f5a74033022b10a.svg
deleted file mode 100644
index 6137c139a..000000000
--- a/.assets/20a72b088bbb1497216177a40f5a74033022b10a.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/2135c59c3574d13bc06d571c0a7416904c7d3c34.svg b/.assets/2135c59c3574d13bc06d571c0a7416904c7d3c34.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/2135c59c3574d13bc06d571c0a7416904c7d3c34.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/223a1aac9347ec68266ca4077ea5d03b73ca9e05.svg b/.assets/223a1aac9347ec68266ca4077ea5d03b73ca9e05.svg
deleted file mode 100644
index ce9a14432..000000000
--- a/.assets/223a1aac9347ec68266ca4077ea5d03b73ca9e05.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/2278f5a715be21ce4c1a7931f606c4a368fe286b.svg b/.assets/2278f5a715be21ce4c1a7931f606c4a368fe286b.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/2278f5a715be21ce4c1a7931f606c4a368fe286b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/233ba99310cd56d74318156592f9f533d1e81dde.svg b/.assets/233ba99310cd56d74318156592f9f533d1e81dde.svg
deleted file mode 100644
index 78b4d158b..000000000
--- a/.assets/233ba99310cd56d74318156592f9f533d1e81dde.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%5%10%15%uOptimal 0%uOptimal 0%
\ No newline at end of file
diff --git a/.assets/247e942b6076b9d894a7821afceb082667f60968.svg b/.assets/247e942b6076b9d894a7821afceb082667f60968.svg
deleted file mode 100644
index ef24b7f58..000000000
--- a/.assets/247e942b6076b9d894a7821afceb082667f60968.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/249bca66f2e25caf04da3e3bc7e387fbf24599b2.svg b/.assets/249bca66f2e25caf04da3e3bc7e387fbf24599b2.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/249bca66f2e25caf04da3e3bc7e387fbf24599b2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/253355680c0ab0a5b6df35bc5a881e2573651a72.svg b/.assets/253355680c0ab0a5b6df35bc5a881e2573651a72.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/253355680c0ab0a5b6df35bc5a881e2573651a72.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/2633c80d8197b26e77ccf20e99ba7d7d77c645d7.svg b/.assets/2633c80d8197b26e77ccf20e99ba7d7d77c645d7.svg
deleted file mode 100644
index 777e30c2d..000000000
--- a/.assets/2633c80d8197b26e77ccf20e99ba7d7d77c645d7.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/28fac0d10e4291c98082d817d0b0f896a2cf8f2b.svg b/.assets/28fac0d10e4291c98082d817d0b0f896a2cf8f2b.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/28fac0d10e4291c98082d817d0b0f896a2cf8f2b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/2aea1d596d01d5453dc9735b7e679632988ed601.svg b/.assets/2aea1d596d01d5453dc9735b7e679632988ed601.svg
deleted file mode 100644
index f9cf76db9..000000000
--- a/.assets/2aea1d596d01d5453dc9735b7e679632988ed601.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/2d5a5a07da2703086539f5d13572f3fe09b073e1.svg b/.assets/2d5a5a07da2703086539f5d13572f3fe09b073e1.svg
deleted file mode 100644
index 44d6b3a84..000000000
--- a/.assets/2d5a5a07da2703086539f5d13572f3fe09b073e1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/2dd6d84168e4068a40122f647020c27ee3e36ed1.svg b/.assets/2dd6d84168e4068a40122f647020c27ee3e36ed1.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/2dd6d84168e4068a40122f647020c27ee3e36ed1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/2e2f72b59c8aed1f3554ada1f52a792a7f5846c0.svg b/.assets/2e2f72b59c8aed1f3554ada1f52a792a7f5846c0.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/2e2f72b59c8aed1f3554ada1f52a792a7f5846c0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/2fa239413d25864a0b99b39868a3fb49e63010ad.svg b/.assets/2fa239413d25864a0b99b39868a3fb49e63010ad.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/2fa239413d25864a0b99b39868a3fb49e63010ad.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/30004f8456edabc18f0ed307b8a79983ab437388.svg b/.assets/30004f8456edabc18f0ed307b8a79983ab437388.svg
deleted file mode 100644
index 8bd616ae1..000000000
--- a/.assets/30004f8456edabc18f0ed307b8a79983ab437388.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/30a46e1d7b3edcf3e05ed39c2b802da3dfb394d4.svg b/.assets/30a46e1d7b3edcf3e05ed39c2b802da3dfb394d4.svg
deleted file mode 100644
index 2d6867c06..000000000
--- a/.assets/30a46e1d7b3edcf3e05ed39c2b802da3dfb394d4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/32e96369ea46fcd77c966df899d26c27ec00e55f.svg b/.assets/32e96369ea46fcd77c966df899d26c27ec00e55f.svg
deleted file mode 100644
index 6d6c53604..000000000
--- a/.assets/32e96369ea46fcd77c966df899d26c27ec00e55f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/33c299d86c0112a8ce469367f1712918e54f6d4b.svg b/.assets/33c299d86c0112a8ce469367f1712918e54f6d4b.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/33c299d86c0112a8ce469367f1712918e54f6d4b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/35549d646391f9a4cf4c3ec310ca8af022895f36.svg b/.assets/35549d646391f9a4cf4c3ec310ca8af022895f36.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/35549d646391f9a4cf4c3ec310ca8af022895f36.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/364f4918c1329126a6e79d9f99545d38a4c19966.svg b/.assets/364f4918c1329126a6e79d9f99545d38a4c19966.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/364f4918c1329126a6e79d9f99545d38a4c19966.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/36854462871fe9c2159f93144e1db3723476a00a.svg b/.assets/36854462871fe9c2159f93144e1db3723476a00a.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/36854462871fe9c2159f93144e1db3723476a00a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/369a638522c1c5327ca1ac9c3d4425e7c670ed21.svg b/.assets/369a638522c1c5327ca1ac9c3d4425e7c670ed21.svg
deleted file mode 100644
index 69e8f5440..000000000
--- a/.assets/369a638522c1c5327ca1ac9c3d4425e7c670ed21.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%5%10%Optimal utilization 0%Optimal utilization 0%
\ No newline at end of file
diff --git a/.assets/396519224a434908fa0265d607d6c550349c706b.svg b/.assets/396519224a434908fa0265d607d6c550349c706b.svg
deleted file mode 100644
index dfecd4298..000000000
--- a/.assets/396519224a434908fa0265d607d6c550349c706b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 71%uOptimal 71%
\ No newline at end of file
diff --git a/.assets/39aa2c4d3794f6ca689c8304d2485ab3617193e8.svg b/.assets/39aa2c4d3794f6ca689c8304d2485ab3617193e8.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/39aa2c4d3794f6ca689c8304d2485ab3617193e8.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/3aaaf674e060809c81e8e6b0316631fac3bf3376.svg b/.assets/3aaaf674e060809c81e8e6b0316631fac3bf3376.svg
deleted file mode 100644
index 5072a99e3..000000000
--- a/.assets/3aaaf674e060809c81e8e6b0316631fac3bf3376.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 35%uOptimal 35%
\ No newline at end of file
diff --git a/.assets/3ba5c7c483188de945c201d26fa5252c67e5caac.svg b/.assets/3ba5c7c483188de945c201d26fa5252c67e5caac.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/3ba5c7c483188de945c201d26fa5252c67e5caac.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/3d8eed0f38805dea3da835c8c9505d09e57e6996.svg b/.assets/3d8eed0f38805dea3da835c8c9505d09e57e6996.svg
deleted file mode 100644
index a64e70f4b..000000000
--- a/.assets/3d8eed0f38805dea3da835c8c9505d09e57e6996.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/3dae2b4f6923d155de327323b76840893e8fe017.svg b/.assets/3dae2b4f6923d155de327323b76840893e8fe017.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/3dae2b4f6923d155de327323b76840893e8fe017.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/3eb1fae385bc7341ce53997ac5845618d8f1f738.svg b/.assets/3eb1fae385bc7341ce53997ac5845618d8f1f738.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/3eb1fae385bc7341ce53997ac5845618d8f1f738.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/3efbf52bc38648768b0c46739940dc8129f03bfd.svg b/.assets/3efbf52bc38648768b0c46739940dc8129f03bfd.svg
deleted file mode 100644
index e11006ecd..000000000
--- a/.assets/3efbf52bc38648768b0c46739940dc8129f03bfd.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/3f55f2c949040cc13cee0d8a8329ed5bb280d3d3.svg b/.assets/3f55f2c949040cc13cee0d8a8329ed5bb280d3d3.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/3f55f2c949040cc13cee0d8a8329ed5bb280d3d3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/4048416bedf0808a47706e49a9f98ee64701623a.svg b/.assets/4048416bedf0808a47706e49a9f98ee64701623a.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/4048416bedf0808a47706e49a9f98ee64701623a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/407b4ddf44bf823497fbd83065b488b1076377c7.svg b/.assets/407b4ddf44bf823497fbd83065b488b1076377c7.svg
deleted file mode 100644
index 41e4e5ce5..000000000
--- a/.assets/407b4ddf44bf823497fbd83065b488b1076377c7.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/41494af0da6f85cabec3c980938db6fcf8b6171f.svg b/.assets/41494af0da6f85cabec3c980938db6fcf8b6171f.svg
deleted file mode 100644
index 0694abc70..000000000
--- a/.assets/41494af0da6f85cabec3c980938db6fcf8b6171f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/4368c4eff091e0bcc77f57cd107ed26dca6636b0.svg b/.assets/4368c4eff091e0bcc77f57cd107ed26dca6636b0.svg
deleted file mode 100644
index ee093e503..000000000
--- a/.assets/4368c4eff091e0bcc77f57cd107ed26dca6636b0.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/43e5be641d9be4440848e65ee58c23e8a8ec133e.svg b/.assets/43e5be641d9be4440848e65ee58c23e8a8ec133e.svg
deleted file mode 100644
index 7630ad02d..000000000
--- a/.assets/43e5be641d9be4440848e65ee58c23e8a8ec133e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/441eedcbb049fbf89695a0f2246983f1596bb74e.svg b/.assets/441eedcbb049fbf89695a0f2246983f1596bb74e.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/441eedcbb049fbf89695a0f2246983f1596bb74e.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/44bd6c5258c27248fabcd09a99dec757454c2a7e.svg b/.assets/44bd6c5258c27248fabcd09a99dec757454c2a7e.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/44bd6c5258c27248fabcd09a99dec757454c2a7e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/44f8b63555df7a9d81101549741bd958deb27588.svg b/.assets/44f8b63555df7a9d81101549741bd958deb27588.svg
deleted file mode 100644
index a64e70f4b..000000000
--- a/.assets/44f8b63555df7a9d81101549741bd958deb27588.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4518db8827287a0e0bddbe470c885ab6fa67cf74.svg b/.assets/4518db8827287a0e0bddbe470c885ab6fa67cf74.svg
deleted file mode 100644
index 47e625712..000000000
--- a/.assets/4518db8827287a0e0bddbe470c885ab6fa67cf74.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/471bf36a0704f0fb8e9dd43041d549e5e7198527.svg b/.assets/471bf36a0704f0fb8e9dd43041d549e5e7198527.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/471bf36a0704f0fb8e9dd43041d549e5e7198527.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/4870b62e3dee98639241facda7590d661b69fb62.svg b/.assets/4870b62e3dee98639241facda7590d661b69fb62.svg
deleted file mode 100644
index 47e625712..000000000
--- a/.assets/4870b62e3dee98639241facda7590d661b69fb62.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/493bfd83b04a30726989d049ec508a95c1125601.svg b/.assets/493bfd83b04a30726989d049ec508a95c1125601.svg
deleted file mode 100644
index 193940e78..000000000
--- a/.assets/493bfd83b04a30726989d049ec508a95c1125601.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg b/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg
deleted file mode 100644
index 85a982918..000000000
--- a/.assets/4986872b45a9cd8b31a38113050f5481468cb333.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%5%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/4a9f82e7b5325d9604ebfd4eef29bb41a0ec2f45.svg b/.assets/4a9f82e7b5325d9604ebfd4eef29bb41a0ec2f45.svg
deleted file mode 100644
index e5a21a8eb..000000000
--- a/.assets/4a9f82e7b5325d9604ebfd4eef29bb41a0ec2f45.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4ab0dbcff3f330539d66319942d38435e45137bf.svg b/.assets/4ab0dbcff3f330539d66319942d38435e45137bf.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/4ab0dbcff3f330539d66319942d38435e45137bf.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4bbdb7d641ac53393afda2d993e24109f61f61a1.svg b/.assets/4bbdb7d641ac53393afda2d993e24109f61f61a1.svg
deleted file mode 100644
index aac348254..000000000
--- a/.assets/4bbdb7d641ac53393afda2d993e24109f61f61a1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 71%uOptimal 71%
\ No newline at end of file
diff --git a/.assets/4c96597d8e0f135353f37321358e767ebe5eb8a8.svg b/.assets/4c96597d8e0f135353f37321358e767ebe5eb8a8.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/4c96597d8e0f135353f37321358e767ebe5eb8a8.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4d06f4d6d8a078984bb3069ccc64e42f1eaea206.svg b/.assets/4d06f4d6d8a078984bb3069ccc64e42f1eaea206.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/4d06f4d6d8a078984bb3069ccc64e42f1eaea206.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4d5d27738402b1d70639fe37c46c31345a747382.svg b/.assets/4d5d27738402b1d70639fe37c46c31345a747382.svg
deleted file mode 100644
index 6d6c53604..000000000
--- a/.assets/4d5d27738402b1d70639fe37c46c31345a747382.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/4e7bbf631220ce3b40f53423477c6be3a8b8dfd2.svg b/.assets/4e7bbf631220ce3b40f53423477c6be3a8b8dfd2.svg
deleted file mode 100644
index 78943ccfb..000000000
--- a/.assets/4e7bbf631220ce3b40f53423477c6be3a8b8dfd2.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/4f278d3e1c4335b98c92585fbeb92d263bdb8569.svg b/.assets/4f278d3e1c4335b98c92585fbeb92d263bdb8569.svg
new file mode 100644
index 000000000..bb652b1a0
--- /dev/null
+++ b/.assets/4f278d3e1c4335b98c92585fbeb92d263bdb8569.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 45%Optimal utilization 45%
\ No newline at end of file
diff --git a/.assets/502b91d3925dd55680c0c3d11e03a25b9a1956c5.svg b/.assets/502b91d3925dd55680c0c3d11e03a25b9a1956c5.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/502b91d3925dd55680c0c3d11e03a25b9a1956c5.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/505a717515dde97057a00382ab87b2fbe4243854.svg b/.assets/505a717515dde97057a00382ab87b2fbe4243854.svg
deleted file mode 100644
index 4ae2e6a09..000000000
--- a/.assets/505a717515dde97057a00382ab87b2fbe4243854.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/516f8201a5e9928cbb5b3366468786c30c424f54.svg b/.assets/516f8201a5e9928cbb5b3366468786c30c424f54.svg
deleted file mode 100644
index 73b18ff8a..000000000
--- a/.assets/516f8201a5e9928cbb5b3366468786c30c424f54.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/51f81c539b7291d13a067450c9db577fc40d9573.svg b/.assets/51f81c539b7291d13a067450c9db577fc40d9573.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/51f81c539b7291d13a067450c9db577fc40d9573.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/523a434a2e52b9c3f17fb1ecb160ce80decc5883.svg b/.assets/523a434a2e52b9c3f17fb1ecb160ce80decc5883.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/523a434a2e52b9c3f17fb1ecb160ce80decc5883.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/5316fd25bc1be6cb09428d8c78d63243d4723c48.svg b/.assets/5316fd25bc1be6cb09428d8c78d63243d4723c48.svg
deleted file mode 100644
index da54d74b6..000000000
--- a/.assets/5316fd25bc1be6cb09428d8c78d63243d4723c48.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/54011ffd1c8f70f6c81bff9e84e73b6caf224f66.svg b/.assets/54011ffd1c8f70f6c81bff9e84e73b6caf224f66.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/54011ffd1c8f70f6c81bff9e84e73b6caf224f66.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/54077f6ef867e9603661a2a66cf35da5b8c6cd85.svg b/.assets/54077f6ef867e9603661a2a66cf35da5b8c6cd85.svg
deleted file mode 100644
index 684c5ef9c..000000000
--- a/.assets/54077f6ef867e9603661a2a66cf35da5b8c6cd85.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/54e10a13590d5a2968c8308e367ee942724c8f5a.svg b/.assets/54e10a13590d5a2968c8308e367ee942724c8f5a.svg
deleted file mode 100644
index 5072a99e3..000000000
--- a/.assets/54e10a13590d5a2968c8308e367ee942724c8f5a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 35%uOptimal 35%
\ No newline at end of file
diff --git a/.assets/5781644c11b53524a5fd5b616bf70812c97303d9.svg b/.assets/5781644c11b53524a5fd5b616bf70812c97303d9.svg
deleted file mode 100644
index 8de0b5665..000000000
--- a/.assets/5781644c11b53524a5fd5b616bf70812c97303d9.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/5982fe691bdce75fb16101b23ef8815d0953520a.svg b/.assets/5982fe691bdce75fb16101b23ef8815d0953520a.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/5982fe691bdce75fb16101b23ef8815d0953520a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/5a3279c8e6dd036533d94165c42801655131ad2e.svg b/.assets/5a3279c8e6dd036533d94165c42801655131ad2e.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/5a3279c8e6dd036533d94165c42801655131ad2e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/5a987481fcd21ac926a7663682a9aa4ac8703d67.svg b/.assets/5a987481fcd21ac926a7663682a9aa4ac8703d67.svg
deleted file mode 100644
index 51f863dc0..000000000
--- a/.assets/5a987481fcd21ac926a7663682a9aa4ac8703d67.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/5bf239b6a5ec788afa6e2ab0903b21d67dd86a92.svg b/.assets/5bf239b6a5ec788afa6e2ab0903b21d67dd86a92.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/5bf239b6a5ec788afa6e2ab0903b21d67dd86a92.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/5c916bd4a4f8cdafb497248e4b80704e95d2c2f5.svg b/.assets/5c916bd4a4f8cdafb497248e4b80704e95d2c2f5.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/5c916bd4a4f8cdafb497248e4b80704e95d2c2f5.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/5d3a3114d827b817a09ba93dab4a7caff4a768cf.svg b/.assets/5d3a3114d827b817a09ba93dab4a7caff4a768cf.svg
deleted file mode 100644
index 3b5e8ece1..000000000
--- a/.assets/5d3a3114d827b817a09ba93dab4a7caff4a768cf.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 40%uOptimal 40%
\ No newline at end of file
diff --git a/.assets/5e292b27a90b078d7d1b7766456c23c19546e2a4.svg b/.assets/5e292b27a90b078d7d1b7766456c23c19546e2a4.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/5e292b27a90b078d7d1b7766456c23c19546e2a4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/5f00854535bfbb5f41643954ec476f3f67788d90.svg b/.assets/5f00854535bfbb5f41643954ec476f3f67788d90.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/5f00854535bfbb5f41643954ec476f3f67788d90.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/5f8fefaaa6fb803c2a1e25f2d099833071da6912.svg b/.assets/5f8fefaaa6fb803c2a1e25f2d099833071da6912.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/5f8fefaaa6fb803c2a1e25f2d099833071da6912.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/5fa5d8e27fc1c5a4377934fb771fe320591cab9f.svg b/.assets/5fa5d8e27fc1c5a4377934fb771fe320591cab9f.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/5fa5d8e27fc1c5a4377934fb771fe320591cab9f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg b/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/6054f48e56c94cd70dffba623df52b47094cb156.svg b/.assets/6054f48e56c94cd70dffba623df52b47094cb156.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/6054f48e56c94cd70dffba623df52b47094cb156.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/629673f8cf1a36a93dc0ebfe1dd5da5b11ead5be.svg b/.assets/629673f8cf1a36a93dc0ebfe1dd5da5b11ead5be.svg
deleted file mode 100644
index 21ccd3c9a..000000000
--- a/.assets/629673f8cf1a36a93dc0ebfe1dd5da5b11ead5be.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 52%uOptimal 52%
\ No newline at end of file
diff --git a/.assets/63d85ef2aae018346bf4ae5d47f0f379ee834a81.svg b/.assets/63d85ef2aae018346bf4ae5d47f0f379ee834a81.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/63d85ef2aae018346bf4ae5d47f0f379ee834a81.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/6539a675e69c99d2cee9349b371a4c57c8c60351.svg b/.assets/6539a675e69c99d2cee9349b371a4c57c8c60351.svg
deleted file mode 100644
index a1c80fc27..000000000
--- a/.assets/6539a675e69c99d2cee9349b371a4c57c8c60351.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/674d17a62ee62a3043e08a86f4469e4fede11d3a.svg b/.assets/674d17a62ee62a3043e08a86f4469e4fede11d3a.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/674d17a62ee62a3043e08a86f4469e4fede11d3a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/67f18549e3b3ad5e89c006888478a0cda91be307.svg b/.assets/67f18549e3b3ad5e89c006888478a0cda91be307.svg
deleted file mode 100644
index 4ae2e6a09..000000000
--- a/.assets/67f18549e3b3ad5e89c006888478a0cda91be307.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/6add9378ede7105d7713ecf7e6f5d576975caa1e.svg b/.assets/6add9378ede7105d7713ecf7e6f5d576975caa1e.svg
deleted file mode 100644
index 0452da2a4..000000000
--- a/.assets/6add9378ede7105d7713ecf7e6f5d576975caa1e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%Optimal 70%Optimal 70%
\ No newline at end of file
diff --git a/.assets/6b6c408f296f630d59ef9f0bf4dbd1ab1c9ce95c.svg b/.assets/6b6c408f296f630d59ef9f0bf4dbd1ab1c9ce95c.svg
deleted file mode 100644
index bd09ce52e..000000000
--- a/.assets/6b6c408f296f630d59ef9f0bf4dbd1ab1c9ce95c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/6b6d7d3b24423799c0cb5cc8c539f10b55adce0b.svg b/.assets/6b6d7d3b24423799c0cb5cc8c539f10b55adce0b.svg
deleted file mode 100644
index a743f7e44..000000000
--- a/.assets/6b6d7d3b24423799c0cb5cc8c539f10b55adce0b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/6c1ea80d5805d285e0dee7d30caf74d56a6e11d2.svg b/.assets/6c1ea80d5805d285e0dee7d30caf74d56a6e11d2.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/6c1ea80d5805d285e0dee7d30caf74d56a6e11d2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/6c3ce91b32b481ec0786abcf3b7a167a1573db7f.svg b/.assets/6c3ce91b32b481ec0786abcf3b7a167a1573db7f.svg
deleted file mode 100644
index b0d687c7b..000000000
--- a/.assets/6c3ce91b32b481ec0786abcf3b7a167a1573db7f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 48%uOptimal 48%
\ No newline at end of file
diff --git a/.assets/6d01fe056a30aeab26b9f5ef5c945c6afece8779.svg b/.assets/6d01fe056a30aeab26b9f5ef5c945c6afece8779.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/6d01fe056a30aeab26b9f5ef5c945c6afece8779.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/6daf9269f48389f432568255131ebe0f742fa53b.svg b/.assets/6daf9269f48389f432568255131ebe0f742fa53b.svg
deleted file mode 100644
index f857b47e5..000000000
--- a/.assets/6daf9269f48389f432568255131ebe0f742fa53b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg b/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/6f4dbde307d23214174bb25f9b1542ac4a70582c.svg b/.assets/6f4dbde307d23214174bb25f9b1542ac4a70582c.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/6f4dbde307d23214174bb25f9b1542ac4a70582c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/6f633d9077d080479568e5342fc14c4507401d2f.svg b/.assets/6f633d9077d080479568e5342fc14c4507401d2f.svg
deleted file mode 100644
index 2dded68e4..000000000
--- a/.assets/6f633d9077d080479568e5342fc14c4507401d2f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 77%uOptimal 77%
\ No newline at end of file
diff --git a/.assets/6f907e63a671e99815bf95c63f7e0e16dc04ccac.svg b/.assets/6f907e63a671e99815bf95c63f7e0e16dc04ccac.svg
deleted file mode 100644
index 78943ccfb..000000000
--- a/.assets/6f907e63a671e99815bf95c63f7e0e16dc04ccac.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/71713b8fe82177533a16dd37178324b412bce932.svg b/.assets/71713b8fe82177533a16dd37178324b412bce932.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/71713b8fe82177533a16dd37178324b412bce932.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/72490a8918cee95a56717e7d3753cce611ac1805.svg b/.assets/72490a8918cee95a56717e7d3753cce611ac1805.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/72490a8918cee95a56717e7d3753cce611ac1805.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/7387a2f081b5c6aaea817fa3774fd472edbae392.svg b/.assets/7387a2f081b5c6aaea817fa3774fd472edbae392.svg
deleted file mode 100644
index 8bd616ae1..000000000
--- a/.assets/7387a2f081b5c6aaea817fa3774fd472edbae392.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/7396caa31f7811576cb04a4e90aac9ea03560ba2.svg b/.assets/7396caa31f7811576cb04a4e90aac9ea03560ba2.svg
deleted file mode 100644
index 92d00d0ae..000000000
--- a/.assets/7396caa31f7811576cb04a4e90aac9ea03560ba2.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/77143c5a46b25bf69c298cbf04d18950d2149abe.svg b/.assets/77143c5a46b25bf69c298cbf04d18950d2149abe.svg
deleted file mode 100644
index e72a9f46c..000000000
--- a/.assets/77143c5a46b25bf69c298cbf04d18950d2149abe.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 48%Optimal 48%
\ No newline at end of file
diff --git a/.assets/778cfb2b303d62a54ef78954bed3610452c1c634.svg b/.assets/778cfb2b303d62a54ef78954bed3610452c1c634.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/778cfb2b303d62a54ef78954bed3610452c1c634.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/77b8731bb967bad3628eb0904361735454af6c89.svg b/.assets/77b8731bb967bad3628eb0904361735454af6c89.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/77b8731bb967bad3628eb0904361735454af6c89.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/782488a1b7ee691f80006e3fec1034d79c974a26.svg b/.assets/782488a1b7ee691f80006e3fec1034d79c974a26.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/782488a1b7ee691f80006e3fec1034d79c974a26.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/79d2d01632de8f7a1295d120d64fe0b8930a59f2.svg b/.assets/79d2d01632de8f7a1295d120d64fe0b8930a59f2.svg
deleted file mode 100644
index 24f64ab7e..000000000
--- a/.assets/79d2d01632de8f7a1295d120d64fe0b8930a59f2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/79f40b1fe490831a58a3b210506bd38f6e7e3ed1.svg b/.assets/79f40b1fe490831a58a3b210506bd38f6e7e3ed1.svg
deleted file mode 100644
index cabac8fc3..000000000
--- a/.assets/79f40b1fe490831a58a3b210506bd38f6e7e3ed1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/7b1a62c7a431a1f0b3ef48d0c3eb32be510352d0.svg b/.assets/7b1a62c7a431a1f0b3ef48d0c3eb32be510352d0.svg
deleted file mode 100644
index 726b7882c..000000000
--- a/.assets/7b1a62c7a431a1f0b3ef48d0c3eb32be510352d0.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/.assets/7bd60232c345d344047949a388a745537bfd3d53.svg b/.assets/7bd60232c345d344047949a388a745537bfd3d53.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/7bd60232c345d344047949a388a745537bfd3d53.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/7d70cd4e6515146aa930caa7a8373287acbc68a7.svg b/.assets/7d70cd4e6515146aa930caa7a8373287acbc68a7.svg
deleted file mode 100644
index abbc8b189..000000000
--- a/.assets/7d70cd4e6515146aa930caa7a8373287acbc68a7.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/7e821ac7373e4183e9b22ee67a28713cdaaf813a.svg b/.assets/7e821ac7373e4183e9b22ee67a28713cdaaf813a.svg
deleted file mode 100644
index eb99f7e45..000000000
--- a/.assets/7e821ac7373e4183e9b22ee67a28713cdaaf813a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%600%Optimal 37%Optimal 37%
\ No newline at end of file
diff --git a/.assets/7e987a99d911a0c671ada02c5cbaaf4452cd099e.svg b/.assets/7e987a99d911a0c671ada02c5cbaaf4452cd099e.svg
deleted file mode 100644
index 6d6c53604..000000000
--- a/.assets/7e987a99d911a0c671ada02c5cbaaf4452cd099e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/7ee157177b36f127c68a7672404db79216979260.svg b/.assets/7ee157177b36f127c68a7672404db79216979260.svg
new file mode 100644
index 000000000..bb652b1a0
--- /dev/null
+++ b/.assets/7ee157177b36f127c68a7672404db79216979260.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 45%Optimal utilization 45%
\ No newline at end of file
diff --git a/.assets/7efecc4d2041425c720b18988582bc44083be408.svg b/.assets/7efecc4d2041425c720b18988582bc44083be408.svg
deleted file mode 100644
index 6f2fb008f..000000000
--- a/.assets/7efecc4d2041425c720b18988582bc44083be408.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/7fa4b4b2fd917d2cc659935ebf8fc577c2489a8e.svg b/.assets/7fa4b4b2fd917d2cc659935ebf8fc577c2489a8e.svg
deleted file mode 100644
index cabac8fc3..000000000
--- a/.assets/7fa4b4b2fd917d2cc659935ebf8fc577c2489a8e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/802730c9c60fb74762e8fc4694ca1350269e22c2.svg b/.assets/802730c9c60fb74762e8fc4694ca1350269e22c2.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/802730c9c60fb74762e8fc4694ca1350269e22c2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/80791cfe2abed7f5faf97608dd1eeaed58a4c5b4.svg b/.assets/80791cfe2abed7f5faf97608dd1eeaed58a4c5b4.svg
deleted file mode 100644
index 00110bf03..000000000
--- a/.assets/80791cfe2abed7f5faf97608dd1eeaed58a4c5b4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%5%10%uOptimal 1%uOptimal 1%
\ No newline at end of file
diff --git a/.assets/81174f6db1d6055f4be1846c1155b509e25ef500.svg b/.assets/81174f6db1d6055f4be1846c1155b509e25ef500.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/81174f6db1d6055f4be1846c1155b509e25ef500.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/815175152675989ae95d4f77c383a7d32c223e20.svg b/.assets/815175152675989ae95d4f77c383a7d32c223e20.svg
deleted file mode 100644
index 0694abc70..000000000
--- a/.assets/815175152675989ae95d4f77c383a7d32c223e20.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/828c0e1697d4b7add216986b9bc4fa9ffb936a91.svg b/.assets/828c0e1697d4b7add216986b9bc4fa9ffb936a91.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/828c0e1697d4b7add216986b9bc4fa9ffb936a91.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/82d15dffb9532e1f0cb86c798a8556273b8000f9.svg b/.assets/82d15dffb9532e1f0cb86c798a8556273b8000f9.svg
deleted file mode 100644
index 3c27866af..000000000
--- a/.assets/82d15dffb9532e1f0cb86c798a8556273b8000f9.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%200%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/830c41eadf476da561594683a69e91e3a5f6862f.svg b/.assets/830c41eadf476da561594683a69e91e3a5f6862f.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/830c41eadf476da561594683a69e91e3a5f6862f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/83797fa85ad44b3d859b8f7ee4c8132fef352ba0.svg b/.assets/83797fa85ad44b3d859b8f7ee4c8132fef352ba0.svg
deleted file mode 100644
index 2ef2864d7..000000000
--- a/.assets/83797fa85ad44b3d859b8f7ee4c8132fef352ba0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/857e4e2fbb6d6dc9100be9ba3b6b134c59ad974b.svg b/.assets/857e4e2fbb6d6dc9100be9ba3b6b134c59ad974b.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/857e4e2fbb6d6dc9100be9ba3b6b134c59ad974b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/859e8f346e62fa5dc8eed4d223ca2a8d1c9fc80c.svg b/.assets/859e8f346e62fa5dc8eed4d223ca2a8d1c9fc80c.svg
deleted file mode 100644
index 44fc6cdb4..000000000
--- a/.assets/859e8f346e62fa5dc8eed4d223ca2a8d1c9fc80c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/898272e7a6d337ab122e44c7b0607c88bdd551ea.svg b/.assets/898272e7a6d337ab122e44c7b0607c88bdd551ea.svg
deleted file mode 100644
index 679c73113..000000000
--- a/.assets/898272e7a6d337ab122e44c7b0607c88bdd551ea.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/8a10dd458958b063af4177af8f709f1971c58974.svg b/.assets/8a10dd458958b063af4177af8f709f1971c58974.svg
deleted file mode 100644
index f479e4b44..000000000
--- a/.assets/8a10dd458958b063af4177af8f709f1971c58974.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/8b6c31038ffb1df2a6cb6f9c5d3d46bc3f8d5c3d.svg b/.assets/8b6c31038ffb1df2a6cb6f9c5d3d46bc3f8d5c3d.svg
deleted file mode 100644
index afc407390..000000000
--- a/.assets/8b6c31038ffb1df2a6cb6f9c5d3d46bc3f8d5c3d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/8c393197d859e6b7b51b7d3891c08f572563d22a.svg b/.assets/8c393197d859e6b7b51b7d3891c08f572563d22a.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/8c393197d859e6b7b51b7d3891c08f572563d22a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/8dae6206ef4795b7c2b4496958440424724f4f9e.svg b/.assets/8dae6206ef4795b7c2b4496958440424724f4f9e.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/8dae6206ef4795b7c2b4496958440424724f4f9e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/8dca23d950316194bae32289f94123f87abf1dcf.svg b/.assets/8dca23d950316194bae32289f94123f87abf1dcf.svg
deleted file mode 100644
index 8bd616ae1..000000000
--- a/.assets/8dca23d950316194bae32289f94123f87abf1dcf.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/8f4bd9d9c75dc060033b9ce1f2681ecb81e1b33f.svg b/.assets/8f4bd9d9c75dc060033b9ce1f2681ecb81e1b33f.svg
deleted file mode 100644
index 679c73113..000000000
--- a/.assets/8f4bd9d9c75dc060033b9ce1f2681ecb81e1b33f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/8f84201aa8a64dd4068a65bba6c43cc7622ae5b8.svg b/.assets/8f84201aa8a64dd4068a65bba6c43cc7622ae5b8.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/8f84201aa8a64dd4068a65bba6c43cc7622ae5b8.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/9064429ce67d1de535eb77d22b1f300805ae14ac.svg b/.assets/9064429ce67d1de535eb77d22b1f300805ae14ac.svg
deleted file mode 100644
index eafbacde0..000000000
--- a/.assets/9064429ce67d1de535eb77d22b1f300805ae14ac.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/908311237d838343e639cb1728e1fd729c5dfb53.svg b/.assets/908311237d838343e639cb1728e1fd729c5dfb53.svg
deleted file mode 100644
index 51f863dc0..000000000
--- a/.assets/908311237d838343e639cb1728e1fd729c5dfb53.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/90c9040ea1e92b7dfc3e47bcd8c55425d6424517.svg b/.assets/90c9040ea1e92b7dfc3e47bcd8c55425d6424517.svg
deleted file mode 100644
index 9fee473d5..000000000
--- a/.assets/90c9040ea1e92b7dfc3e47bcd8c55425d6424517.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/911a3480b9f792f655a3ba52d4db6447055ff426.svg b/.assets/911a3480b9f792f655a3ba52d4db6447055ff426.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/911a3480b9f792f655a3ba52d4db6447055ff426.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/91a8fb0f99abea9b8def547797b03b4d59853df3.svg b/.assets/91a8fb0f99abea9b8def547797b03b4d59853df3.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/91a8fb0f99abea9b8def547797b03b4d59853df3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/91b87729e304c62d52a6a140b1ebd8dffffa9c58.svg b/.assets/91b87729e304c62d52a6a140b1ebd8dffffa9c58.svg
deleted file mode 100644
index f479e4b44..000000000
--- a/.assets/91b87729e304c62d52a6a140b1ebd8dffffa9c58.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/928c82b222d2ea849809c52e1eb679c7d7506875.svg b/.assets/928c82b222d2ea849809c52e1eb679c7d7506875.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/928c82b222d2ea849809c52e1eb679c7d7506875.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/92a8f694c0c2865c8f3e4f90cbcda02e60ffcff3.svg b/.assets/92a8f694c0c2865c8f3e4f90cbcda02e60ffcff3.svg
deleted file mode 100644
index 0452da2a4..000000000
--- a/.assets/92a8f694c0c2865c8f3e4f90cbcda02e60ffcff3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%Optimal 70%Optimal 70%
\ No newline at end of file
diff --git a/.assets/92ec27a6034dfd828fa24305a41a8f5955965ee2.svg b/.assets/92ec27a6034dfd828fa24305a41a8f5955965ee2.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/92ec27a6034dfd828fa24305a41a8f5955965ee2.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/92fbd418c607b9cb56062699ddd084e46f70649a.svg b/.assets/92fbd418c607b9cb56062699ddd084e46f70649a.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/92fbd418c607b9cb56062699ddd084e46f70649a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/93182c5903f8ff00d2426d1882db1047f91f9541.svg b/.assets/93182c5903f8ff00d2426d1882db1047f91f9541.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/93182c5903f8ff00d2426d1882db1047f91f9541.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/93485682d175032cac8fb5ae7a1c774f7aa5759c.svg b/.assets/93485682d175032cac8fb5ae7a1c774f7aa5759c.svg
deleted file mode 100644
index afc407390..000000000
--- a/.assets/93485682d175032cac8fb5ae7a1c774f7aa5759c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/940be9e2c5904458308f1e79b5eec2070061cda2.svg b/.assets/940be9e2c5904458308f1e79b5eec2070061cda2.svg
deleted file mode 100644
index d8c74334f..000000000
--- a/.assets/940be9e2c5904458308f1e79b5eec2070061cda2.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/943ca2bebc4a142000d295bc1d61a44a873a4ddc.svg b/.assets/943ca2bebc4a142000d295bc1d61a44a873a4ddc.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/943ca2bebc4a142000d295bc1d61a44a873a4ddc.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/94a730d4b958ac5fe8f77eed926a3267c8b3f8c7.svg b/.assets/94a730d4b958ac5fe8f77eed926a3267c8b3f8c7.svg
deleted file mode 100644
index abbc8b189..000000000
--- a/.assets/94a730d4b958ac5fe8f77eed926a3267c8b3f8c7.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/94f531e051149ab6caf28dd8ac08301799e67e28.svg b/.assets/94f531e051149ab6caf28dd8ac08301799e67e28.svg
deleted file mode 100644
index 4ae2e6a09..000000000
--- a/.assets/94f531e051149ab6caf28dd8ac08301799e67e28.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/955ed58b79c16962a99bbc7421e94ea5f2815420.svg b/.assets/955ed58b79c16962a99bbc7421e94ea5f2815420.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/955ed58b79c16962a99bbc7421e94ea5f2815420.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/9566c6dd3a1bea1498b3908b4be8b94c971a839d.svg b/.assets/9566c6dd3a1bea1498b3908b4be8b94c971a839d.svg
deleted file mode 100644
index 4c7586db1..000000000
--- a/.assets/9566c6dd3a1bea1498b3908b4be8b94c971a839d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 71%uOptimal 71%
\ No newline at end of file
diff --git a/.assets/95e717662ee38643eaedf29c7ecf9494cf135da3.svg b/.assets/95e717662ee38643eaedf29c7ecf9494cf135da3.svg
deleted file mode 100644
index de33714df..000000000
--- a/.assets/95e717662ee38643eaedf29c7ecf9494cf135da3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80%
\ No newline at end of file
diff --git a/.assets/964205bd85f6f4e4de171c694a4116a90a534cac.svg b/.assets/964205bd85f6f4e4de171c694a4116a90a534cac.svg
deleted file mode 100644
index f01dc76d5..000000000
--- a/.assets/964205bd85f6f4e4de171c694a4116a90a534cac.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/973f0be01f7b244858ae3b53b46574f4a94ae9e0.svg b/.assets/973f0be01f7b244858ae3b53b46574f4a94ae9e0.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/973f0be01f7b244858ae3b53b46574f4a94ae9e0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/975331647bbe35dbd37070cd8e0f29f3fd3250c9.svg b/.assets/975331647bbe35dbd37070cd8e0f29f3fd3250c9.svg
deleted file mode 100644
index 44fc6cdb4..000000000
--- a/.assets/975331647bbe35dbd37070cd8e0f29f3fd3250c9.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/982b4fb6e2527921645edf26069ca5a944a85de5.svg b/.assets/982b4fb6e2527921645edf26069ca5a944a85de5.svg
deleted file mode 100644
index 6af590b85..000000000
--- a/.assets/982b4fb6e2527921645edf26069ca5a944a85de5.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90%
\ No newline at end of file
diff --git a/.assets/9a2d8ed48d646e3c752ce9f8afc7d70cedc3acaf.svg b/.assets/9a2d8ed48d646e3c752ce9f8afc7d70cedc3acaf.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/9a2d8ed48d646e3c752ce9f8afc7d70cedc3acaf.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/9b3ea57ff4b19f392d36203fa741c94e83a96393.svg b/.assets/9b3ea57ff4b19f392d36203fa741c94e83a96393.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/9b3ea57ff4b19f392d36203fa741c94e83a96393.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/9b7be685a38f661247e12c171aa7c6e605f7a547.svg b/.assets/9b7be685a38f661247e12c171aa7c6e605f7a547.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/9b7be685a38f661247e12c171aa7c6e605f7a547.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/9c1a8f2185194cd7102aa4bed1793626db6c3281.svg b/.assets/9c1a8f2185194cd7102aa4bed1793626db6c3281.svg
deleted file mode 100644
index c3582bcd8..000000000
--- a/.assets/9c1a8f2185194cd7102aa4bed1793626db6c3281.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%Optimal 65%Optimal 65%
\ No newline at end of file
diff --git a/.assets/9c6c2ac04f36e8884c02f7bd8e4fedeff98c9211.svg b/.assets/9c6c2ac04f36e8884c02f7bd8e4fedeff98c9211.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/9c6c2ac04f36e8884c02f7bd8e4fedeff98c9211.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/9e095249e48bd804aaedf478236657a01de602ab.svg b/.assets/9e095249e48bd804aaedf478236657a01de602ab.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/9e095249e48bd804aaedf478236657a01de602ab.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/9fdcab76edd6660f763ee400838c013faa920e39.svg b/.assets/9fdcab76edd6660f763ee400838c013faa920e39.svg
deleted file mode 100644
index ddd4eb6a3..000000000
--- a/.assets/9fdcab76edd6660f763ee400838c013faa920e39.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a0539335b90b57e40eb0da22c996bcaf1573d4fa.svg b/.assets/a0539335b90b57e40eb0da22c996bcaf1573d4fa.svg
deleted file mode 100644
index f9cf76db9..000000000
--- a/.assets/a0539335b90b57e40eb0da22c996bcaf1573d4fa.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a0951f7959cba88af4561c9a1d2c77081c74fdd0.svg b/.assets/a0951f7959cba88af4561c9a1d2c77081c74fdd0.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/a0951f7959cba88af4561c9a1d2c77081c74fdd0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/a19c1b94633e136232f50e003d480584e1ad239b.svg b/.assets/a19c1b94633e136232f50e003d480584e1ad239b.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/a19c1b94633e136232f50e003d480584e1ad239b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a2ff7054b21a6d938826bbea32b5e589c6a0c8f7.svg b/.assets/a2ff7054b21a6d938826bbea32b5e589c6a0c8f7.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/a2ff7054b21a6d938826bbea32b5e589c6a0c8f7.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/a3461acfe57a779335e63f45d89078bcde2c101b.svg b/.assets/a3461acfe57a779335e63f45d89078bcde2c101b.svg
deleted file mode 100644
index d003381d1..000000000
--- a/.assets/a3461acfe57a779335e63f45d89078bcde2c101b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%Optimal utilization 90%Optimal utilization 90%
\ No newline at end of file
diff --git a/.assets/a447a2af1673f24cd99ea253692eebf7a4f36ace.svg b/.assets/a447a2af1673f24cd99ea253692eebf7a4f36ace.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/a447a2af1673f24cd99ea253692eebf7a4f36ace.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/a47328fc7b24fdcc5b0874aea1c9aa52e00b8238.svg b/.assets/a47328fc7b24fdcc5b0874aea1c9aa52e00b8238.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/a47328fc7b24fdcc5b0874aea1c9aa52e00b8238.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/a47eecb09dc71d5549ab7cbd4807cd98ad151613.svg b/.assets/a47eecb09dc71d5549ab7cbd4807cd98ad151613.svg
deleted file mode 100644
index 512010070..000000000
--- a/.assets/a47eecb09dc71d5549ab7cbd4807cd98ad151613.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/a4877f5866751d4c748b2860e175e398fd8b0f20.svg b/.assets/a4877f5866751d4c748b2860e175e398fd8b0f20.svg
deleted file mode 100644
index cabac8fc3..000000000
--- a/.assets/a4877f5866751d4c748b2860e175e398fd8b0f20.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/a4f3923bfceaa0524e92c38c23a8b046c3dc1a5e.svg b/.assets/a4f3923bfceaa0524e92c38c23a8b046c3dc1a5e.svg
deleted file mode 100644
index 15b41c615..000000000
--- a/.assets/a4f3923bfceaa0524e92c38c23a8b046c3dc1a5e.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 25%Optimal 25%
\ No newline at end of file
diff --git a/.assets/a572cc5e1b223dec2a704662f09ffadd187f3094.svg b/.assets/a572cc5e1b223dec2a704662f09ffadd187f3094.svg
deleted file mode 100644
index a64e70f4b..000000000
--- a/.assets/a572cc5e1b223dec2a704662f09ffadd187f3094.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a5e6f9a25baf55329b920758daa560c5b8cfd350.svg b/.assets/a5e6f9a25baf55329b920758daa560c5b8cfd350.svg
deleted file mode 100644
index da54d74b6..000000000
--- a/.assets/a5e6f9a25baf55329b920758daa560c5b8cfd350.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a6021935c518cd2a8a53951b5de16859308e16c3.svg b/.assets/a6021935c518cd2a8a53951b5de16859308e16c3.svg
deleted file mode 100644
index b58612e13..000000000
--- a/.assets/a6021935c518cd2a8a53951b5de16859308e16c3.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/a796dfa2aa6c13fc95e8d4cc38800ce1a1aa4517.svg b/.assets/a796dfa2aa6c13fc95e8d4cc38800ce1a1aa4517.svg
new file mode 100644
index 000000000..fc56a2cce
--- /dev/null
+++ b/.assets/a796dfa2aa6c13fc95e8d4cc38800ce1a1aa4517.svg
@@ -0,0 +1 @@
+ Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90%
\ No newline at end of file
diff --git a/.assets/a87a80755f2166782391624ad468a1446bf0b13d.svg b/.assets/a87a80755f2166782391624ad468a1446bf0b13d.svg
deleted file mode 100644
index ba612f27a..000000000
--- a/.assets/a87a80755f2166782391624ad468a1446bf0b13d.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/aa2e8a5322392ad3d4ae80453f4e281a8da627cc.svg b/.assets/aa2e8a5322392ad3d4ae80453f4e281a8da627cc.svg
deleted file mode 100644
index 44fc6cdb4..000000000
--- a/.assets/aa2e8a5322392ad3d4ae80453f4e281a8da627cc.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/ab240e54d4468f7b1cd32614f764cbef5a270f32.svg b/.assets/ab240e54d4468f7b1cd32614f764cbef5a270f32.svg
deleted file mode 100644
index 3c2d9f74f..000000000
--- a/.assets/ab240e54d4468f7b1cd32614f764cbef5a270f32.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 70%uOptimal 70%
\ No newline at end of file
diff --git a/.assets/ac29cf5e78bd5b80d4714477c4e7ab7e688a317d.svg b/.assets/ac29cf5e78bd5b80d4714477c4e7ab7e688a317d.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/ac29cf5e78bd5b80d4714477c4e7ab7e688a317d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/ac5d5566575e5f9bc9f51c1f4046901e25ab5479.svg b/.assets/ac5d5566575e5f9bc9f51c1f4046901e25ab5479.svg
deleted file mode 100644
index e11006ecd..000000000
--- a/.assets/ac5d5566575e5f9bc9f51c1f4046901e25ab5479.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/aca706121f513eb6618c7fe38dd9d26fbb373337.svg b/.assets/aca706121f513eb6618c7fe38dd9d26fbb373337.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/aca706121f513eb6618c7fe38dd9d26fbb373337.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ad5d77509bc0670471c898f81b8247410aaa1df4.svg b/.assets/ad5d77509bc0670471c898f81b8247410aaa1df4.svg
deleted file mode 100644
index 150a67977..000000000
--- a/.assets/ad5d77509bc0670471c898f81b8247410aaa1df4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 52%uOptimal 52%
\ No newline at end of file
diff --git a/.assets/ad65621e946b4e1b18cdb7b25c9fa0ae9d9fbb18.svg b/.assets/ad65621e946b4e1b18cdb7b25c9fa0ae9d9fbb18.svg
deleted file mode 100644
index 78943ccfb..000000000
--- a/.assets/ad65621e946b4e1b18cdb7b25c9fa0ae9d9fbb18.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ae7612ca9dd768ff3aee2f745910dc0a19e5fa71.svg b/.assets/ae7612ca9dd768ff3aee2f745910dc0a19e5fa71.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/ae7612ca9dd768ff3aee2f745910dc0a19e5fa71.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ae9a4e96d181acab87949d13c3bced873cba82fb.svg b/.assets/ae9a4e96d181acab87949d13c3bced873cba82fb.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/ae9a4e96d181acab87949d13c3bced873cba82fb.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/af8b635ad55a3654ad3332c8856b59a9b14577de.svg b/.assets/af8b635ad55a3654ad3332c8856b59a9b14577de.svg
deleted file mode 100644
index 710484552..000000000
--- a/.assets/af8b635ad55a3654ad3332c8856b59a9b14577de.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 23%Optimal 23%
\ No newline at end of file
diff --git a/.assets/b066e7c9810c83ee1ab3a3bfa76a5f71483e3a32.svg b/.assets/b066e7c9810c83ee1ab3a3bfa76a5f71483e3a32.svg
deleted file mode 100644
index de2940e7c..000000000
--- a/.assets/b066e7c9810c83ee1ab3a3bfa76a5f71483e3a32.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/b0a48007e9bb528adcfbd219928b316c36abea43.svg b/.assets/b0a48007e9bb528adcfbd219928b316c36abea43.svg
deleted file mode 100644
index 679c73113..000000000
--- a/.assets/b0a48007e9bb528adcfbd219928b316c36abea43.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/b0ed4aca5ea297679807c0e2dea664093c28af3d.svg b/.assets/b0ed4aca5ea297679807c0e2dea664093c28af3d.svg
deleted file mode 100644
index 72a9b610f..000000000
--- a/.assets/b0ed4aca5ea297679807c0e2dea664093c28af3d.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/b1cd93851a146137f6135ff23b2cc3b71e0090d3.svg b/.assets/b1cd93851a146137f6135ff23b2cc3b71e0090d3.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/b1cd93851a146137f6135ff23b2cc3b71e0090d3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/b393c4daa90e91fe2d2d328a1363acfcbe27b915.svg b/.assets/b393c4daa90e91fe2d2d328a1363acfcbe27b915.svg
deleted file mode 100644
index 2d8e8e773..000000000
--- a/.assets/b393c4daa90e91fe2d2d328a1363acfcbe27b915.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/b416dad7140aff0fae9c6086df2ed135c2d25a6c.svg b/.assets/b416dad7140aff0fae9c6086df2ed135c2d25a6c.svg
deleted file mode 100644
index afc407390..000000000
--- a/.assets/b416dad7140aff0fae9c6086df2ed135c2d25a6c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/b48581312bd06728cd9d8bb3dd633f5c9074262c.svg b/.assets/b48581312bd06728cd9d8bb3dd633f5c9074262c.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/b48581312bd06728cd9d8bb3dd633f5c9074262c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/b5b60c9a6da247fd6707dc572d95d822d367c535.svg b/.assets/b5b60c9a6da247fd6707dc572d95d822d367c535.svg
deleted file mode 100644
index cabac8fc3..000000000
--- a/.assets/b5b60c9a6da247fd6707dc572d95d822d367c535.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/b6142a82e071d0b28884f5f19cf0ab249d831b52.svg b/.assets/b6142a82e071d0b28884f5f19cf0ab249d831b52.svg
deleted file mode 100644
index 2e6c07e16..000000000
--- a/.assets/b6142a82e071d0b28884f5f19cf0ab249d831b52.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 75%Optimal 75%
\ No newline at end of file
diff --git a/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg b/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/b8393c809f8dfba89d4623793fa1650416ce5b8b.svg b/.assets/b8393c809f8dfba89d4623793fa1650416ce5b8b.svg
deleted file mode 100644
index a6e5f3fe5..000000000
--- a/.assets/b8393c809f8dfba89d4623793fa1650416ce5b8b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/b9942024ef6bf374ada177bdb800a0b5a0da9647.svg b/.assets/b9942024ef6bf374ada177bdb800a0b5a0da9647.svg
deleted file mode 100644
index 3b522ac65..000000000
--- a/.assets/b9942024ef6bf374ada177bdb800a0b5a0da9647.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/ba3786081720e2111b7695a577d885bb7a4a4f42.svg b/.assets/ba3786081720e2111b7695a577d885bb7a4a4f42.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/ba3786081720e2111b7695a577d885bb7a4a4f42.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/bab87e261ce14178066782517b478b20a088e4a8.svg b/.assets/bab87e261ce14178066782517b478b20a088e4a8.svg
deleted file mode 100644
index 0694abc70..000000000
--- a/.assets/bab87e261ce14178066782517b478b20a088e4a8.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/bae777b3ba1f5957ef6d2e195033e46ec0123ce8.svg b/.assets/bae777b3ba1f5957ef6d2e195033e46ec0123ce8.svg
deleted file mode 100644
index b58612e13..000000000
--- a/.assets/bae777b3ba1f5957ef6d2e195033e46ec0123ce8.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/bb162a9c7a263b6483fdb55e9dd2eccec4bfaa97.svg b/.assets/bb162a9c7a263b6483fdb55e9dd2eccec4bfaa97.svg
deleted file mode 100644
index 23057a454..000000000
--- a/.assets/bb162a9c7a263b6483fdb55e9dd2eccec4bfaa97.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 1%Optimal 1%
\ No newline at end of file
diff --git a/.assets/bc821e780dbf0cd88aa89ae21f339014e1053ceb.svg b/.assets/bc821e780dbf0cd88aa89ae21f339014e1053ceb.svg
deleted file mode 100644
index 29af4cd97..000000000
--- a/.assets/bc821e780dbf0cd88aa89ae21f339014e1053ceb.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/bd982b3580ab8ebeaf3d9faa7b7ece6ab0cf15e0.svg b/.assets/bd982b3580ab8ebeaf3d9faa7b7ece6ab0cf15e0.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/bd982b3580ab8ebeaf3d9faa7b7ece6ab0cf15e0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/bdf1d2b7a73ed948ec32579541994b0e561e5484.svg b/.assets/bdf1d2b7a73ed948ec32579541994b0e561e5484.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/bdf1d2b7a73ed948ec32579541994b0e561e5484.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/be291dc02d59fb42923f19f29caa401129501a47.svg b/.assets/be291dc02d59fb42923f19f29caa401129501a47.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/be291dc02d59fb42923f19f29caa401129501a47.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/be4eb81d8e3066abf71d0654291245157abd5801.svg b/.assets/be4eb81d8e3066abf71d0654291245157abd5801.svg
deleted file mode 100644
index 8de0b5665..000000000
--- a/.assets/be4eb81d8e3066abf71d0654291245157abd5801.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c02408848f0c66ef0026807922055047cf6c30e3.svg b/.assets/c02408848f0c66ef0026807922055047cf6c30e3.svg
deleted file mode 100644
index 193940e78..000000000
--- a/.assets/c02408848f0c66ef0026807922055047cf6c30e3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/c055e940acc61bd7fee7028b8cf951b01bcfd384.svg b/.assets/c055e940acc61bd7fee7028b8cf951b01bcfd384.svg
deleted file mode 100644
index 8de0b5665..000000000
--- a/.assets/c055e940acc61bd7fee7028b8cf951b01bcfd384.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c0586f821b0abf653f66486a1ee41a98bbfcf7ab.svg b/.assets/c0586f821b0abf653f66486a1ee41a98bbfcf7ab.svg
deleted file mode 100644
index 5072a99e3..000000000
--- a/.assets/c0586f821b0abf653f66486a1ee41a98bbfcf7ab.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 35%uOptimal 35%
\ No newline at end of file
diff --git a/.assets/c0ca34be405c22dc36ffd20c54b1dc8cf5ac741b.svg b/.assets/c0ca34be405c22dc36ffd20c54b1dc8cf5ac741b.svg
deleted file mode 100644
index da54d74b6..000000000
--- a/.assets/c0ca34be405c22dc36ffd20c54b1dc8cf5ac741b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c18882ba19c7c6f494afeacba0f5ffcf2e2e4038.svg b/.assets/c18882ba19c7c6f494afeacba0f5ffcf2e2e4038.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/c18882ba19c7c6f494afeacba0f5ffcf2e2e4038.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c37862fb201c475d7ee82484857cfb6861fd4bba.svg b/.assets/c37862fb201c475d7ee82484857cfb6861fd4bba.svg
deleted file mode 100644
index 44d6b3a84..000000000
--- a/.assets/c37862fb201c475d7ee82484857cfb6861fd4bba.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/c3ea2b140b4d97db38ec61384102b8182a149885.svg b/.assets/c3ea2b140b4d97db38ec61384102b8182a149885.svg
deleted file mode 100644
index abbc8b189..000000000
--- a/.assets/c3ea2b140b4d97db38ec61384102b8182a149885.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/c3f9b44de404389a8be4fc694e51744a86880dcc.svg b/.assets/c3f9b44de404389a8be4fc694e51744a86880dcc.svg
deleted file mode 100644
index 84e3454b9..000000000
--- a/.assets/c3f9b44de404389a8be4fc694e51744a86880dcc.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 50%Optimal 50%
\ No newline at end of file
diff --git a/.assets/c48db855615e3e14bba1b8e3ab6f68ecaea3178e.svg b/.assets/c48db855615e3e14bba1b8e3ab6f68ecaea3178e.svg
deleted file mode 100644
index a9d575111..000000000
--- a/.assets/c48db855615e3e14bba1b8e3ab6f68ecaea3178e.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c497f28ccdc8a6ebf9dd8ec6980e1e7268cd5b81.svg b/.assets/c497f28ccdc8a6ebf9dd8ec6980e1e7268cd5b81.svg
deleted file mode 100644
index 85cca390e..000000000
--- a/.assets/c497f28ccdc8a6ebf9dd8ec6980e1e7268cd5b81.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c6b2daeac52f4baa9c74e03d4c3517af316c0dcf.svg b/.assets/c6b2daeac52f4baa9c74e03d4c3517af316c0dcf.svg
deleted file mode 100644
index a1c80fc27..000000000
--- a/.assets/c6b2daeac52f4baa9c74e03d4c3517af316c0dcf.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/c6f6294fedb5e5b5fc418d2c7861ece2c2bdef75.svg b/.assets/c6f6294fedb5e5b5fc418d2c7861ece2c2bdef75.svg
deleted file mode 100644
index 997978fb6..000000000
--- a/.assets/c6f6294fedb5e5b5fc418d2c7861ece2c2bdef75.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/c6fa9124f760db4b0557689f57b9f7017089a88d.svg b/.assets/c6fa9124f760db4b0557689f57b9f7017089a88d.svg
deleted file mode 100644
index dcebb7ed2..000000000
--- a/.assets/c6fa9124f760db4b0557689f57b9f7017089a88d.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c73865a243e2110291617da971e6614d404cd2c5.svg b/.assets/c73865a243e2110291617da971e6614d404cd2c5.svg
deleted file mode 100644
index be739493a..000000000
--- a/.assets/c73865a243e2110291617da971e6614d404cd2c5.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%5%10%uOptimal 0%uOptimal 0%
\ No newline at end of file
diff --git a/.assets/c798f2ae6cd66d545a480539679ef1147397b830.svg b/.assets/c798f2ae6cd66d545a480539679ef1147397b830.svg
deleted file mode 100644
index 3c2d9f74f..000000000
--- a/.assets/c798f2ae6cd66d545a480539679ef1147397b830.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 70%uOptimal 70%
\ No newline at end of file
diff --git a/.assets/c7ab4ff1cc6ccc4df60b3092f8d45777f4b06250.svg b/.assets/c7ab4ff1cc6ccc4df60b3092f8d45777f4b06250.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/c7ab4ff1cc6ccc4df60b3092f8d45777f4b06250.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/c907af8377a5e8ffda3acd3fe2ac6aee00eff4ae.svg b/.assets/c907af8377a5e8ffda3acd3fe2ac6aee00eff4ae.svg
deleted file mode 100644
index 165b4c0de..000000000
--- a/.assets/c907af8377a5e8ffda3acd3fe2ac6aee00eff4ae.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/c9254568a928d38bcce14457f1f5cc052c486348.svg b/.assets/c9254568a928d38bcce14457f1f5cc052c486348.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/c9254568a928d38bcce14457f1f5cc052c486348.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/ca4cf56d4a2589f2dfcd6e849a2c7551a972a3ad.svg b/.assets/ca4cf56d4a2589f2dfcd6e849a2c7551a972a3ad.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/ca4cf56d4a2589f2dfcd6e849a2c7551a972a3ad.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg b/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg
deleted file mode 100644
index e66de2390..000000000
--- a/.assets/ca95ddfd1ad1b620d55be691c73b3c69ffb3f3f0.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/caf98330fb34eb7b2e26a2107766215407decc6a.svg b/.assets/caf98330fb34eb7b2e26a2107766215407decc6a.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/caf98330fb34eb7b2e26a2107766215407decc6a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/cbf750e87347e22808373031186be351aa533e0d.svg b/.assets/cbf750e87347e22808373031186be351aa533e0d.svg
deleted file mode 100644
index f9cf76db9..000000000
--- a/.assets/cbf750e87347e22808373031186be351aa533e0d.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ccc572c1f8557ea58d4ab36b39c7b63825179d06.svg b/.assets/ccc572c1f8557ea58d4ab36b39c7b63825179d06.svg
deleted file mode 100644
index 92d00d0ae..000000000
--- a/.assets/ccc572c1f8557ea58d4ab36b39c7b63825179d06.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ce67cec9fdb677d2a0aadbe4d1ab201dfa660e57.svg b/.assets/ce67cec9fdb677d2a0aadbe4d1ab201dfa660e57.svg
deleted file mode 100644
index e545bccf6..000000000
--- a/.assets/ce67cec9fdb677d2a0aadbe4d1ab201dfa660e57.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/cefc020957a48e5032cf475e71d8fc065adbfc61.svg b/.assets/cefc020957a48e5032cf475e71d8fc065adbfc61.svg
deleted file mode 100644
index 514bc6bd2..000000000
--- a/.assets/cefc020957a48e5032cf475e71d8fc065adbfc61.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/cf8cdad86320a216fb48759e63e01741a6ed442d.svg b/.assets/cf8cdad86320a216fb48759e63e01741a6ed442d.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/cf8cdad86320a216fb48759e63e01741a6ed442d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/cff1267e227f59c89caae74070849b10b48f1c9a.svg b/.assets/cff1267e227f59c89caae74070849b10b48f1c9a.svg
deleted file mode 100644
index 31ff502c3..000000000
--- a/.assets/cff1267e227f59c89caae74070849b10b48f1c9a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 1%Optimal 1%
\ No newline at end of file
diff --git a/.assets/cff25b67c724d78f505d4efbbbe53eccf2a085c8.svg b/.assets/cff25b67c724d78f505d4efbbbe53eccf2a085c8.svg
deleted file mode 100644
index 44d6b3a84..000000000
--- a/.assets/cff25b67c724d78f505d4efbbbe53eccf2a085c8.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/d00a0c62a7cef920b62d97fde75d094d249a921f.svg b/.assets/d00a0c62a7cef920b62d97fde75d094d249a921f.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/d00a0c62a7cef920b62d97fde75d094d249a921f.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/d00cf5b75abfc0d4bae00c4577b8c380da1c9c3f.svg b/.assets/d00cf5b75abfc0d4bae00c4577b8c380da1c9c3f.svg
deleted file mode 100644
index 988e727ad..000000000
--- a/.assets/d00cf5b75abfc0d4bae00c4577b8c380da1c9c3f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/d28259358b2ac4bc13298220f6ea2075acfdad14.svg b/.assets/d28259358b2ac4bc13298220f6ea2075acfdad14.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/d28259358b2ac4bc13298220f6ea2075acfdad14.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/d43541140bbaf957b71fe19322996e3045c33019.svg b/.assets/d43541140bbaf957b71fe19322996e3045c33019.svg
deleted file mode 100644
index 44d6b3a84..000000000
--- a/.assets/d43541140bbaf957b71fe19322996e3045c33019.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/d4c5010d048974fa22472a45645a73d256afbc2a.svg b/.assets/d4c5010d048974fa22472a45645a73d256afbc2a.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/d4c5010d048974fa22472a45645a73d256afbc2a.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/d65fc1c821399427e01bc830bfb9f62b080e1cf4.svg b/.assets/d65fc1c821399427e01bc830bfb9f62b080e1cf4.svg
deleted file mode 100644
index afc407390..000000000
--- a/.assets/d65fc1c821399427e01bc830bfb9f62b080e1cf4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/d69f0cab381b4ff866de6d1c0dc645b3afd67e08.svg b/.assets/d69f0cab381b4ff866de6d1c0dc645b3afd67e08.svg
deleted file mode 100644
index 23057a454..000000000
--- a/.assets/d69f0cab381b4ff866de6d1c0dc645b3afd67e08.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 1%Optimal 1%
\ No newline at end of file
diff --git a/.assets/d6ad097e8f4a004470304f7d1ae07dc3c242b121.svg b/.assets/d6ad097e8f4a004470304f7d1ae07dc3c242b121.svg
deleted file mode 100644
index ce9a14432..000000000
--- a/.assets/d6ad097e8f4a004470304f7d1ae07dc3c242b121.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/d79d8eb0abd33ffb877708fe07140ce5c8503360.svg b/.assets/d79d8eb0abd33ffb877708fe07140ce5c8503360.svg
deleted file mode 100644
index 8bd616ae1..000000000
--- a/.assets/d79d8eb0abd33ffb877708fe07140ce5c8503360.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/d8ccfe20096019467f76e9e0d977ddef48043aa9.svg b/.assets/d8ccfe20096019467f76e9e0d977ddef48043aa9.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/d8ccfe20096019467f76e9e0d977ddef48043aa9.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/d96c11a19e37534df160331280d004c75b2fc23a.svg b/.assets/d96c11a19e37534df160331280d004c75b2fc23a.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/d96c11a19e37534df160331280d004c75b2fc23a.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/daea61649e6d6ff4d6b92f2fe5a81d3407328fc1.svg b/.assets/daea61649e6d6ff4d6b92f2fe5a81d3407328fc1.svg
deleted file mode 100644
index abbc8b189..000000000
--- a/.assets/daea61649e6d6ff4d6b92f2fe5a81d3407328fc1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%200%400%Optimal 45%Optimal 45%
\ No newline at end of file
diff --git a/.assets/dc1a75c5e5032612b85dbe6a1473b4e06923f1b1.svg b/.assets/dc1a75c5e5032612b85dbe6a1473b4e06923f1b1.svg
deleted file mode 100644
index 193940e78..000000000
--- a/.assets/dc1a75c5e5032612b85dbe6a1473b4e06923f1b1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/dc50cbd8c03de754c9c1af896e24493201cc3559.svg b/.assets/dc50cbd8c03de754c9c1af896e24493201cc3559.svg
deleted file mode 100644
index 71d76725b..000000000
--- a/.assets/dc50cbd8c03de754c9c1af896e24493201cc3559.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 37%uOptimal 37%
\ No newline at end of file
diff --git a/.assets/dc936825b052222d6d3ba80110bf44c7c8d27b10.svg b/.assets/dc936825b052222d6d3ba80110bf44c7c8d27b10.svg
deleted file mode 100644
index 85cca390e..000000000
--- a/.assets/dc936825b052222d6d3ba80110bf44c7c8d27b10.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ddeae2567d40a416520f74f13958f299b9741660.svg b/.assets/ddeae2567d40a416520f74f13958f299b9741660.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/ddeae2567d40a416520f74f13958f299b9741660.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/de3c0e0ab4fbbbdee53fcc7772fc7d8c66a10e5c.svg b/.assets/de3c0e0ab4fbbbdee53fcc7772fc7d8c66a10e5c.svg
deleted file mode 100644
index 29b3096d8..000000000
--- a/.assets/de3c0e0ab4fbbbdee53fcc7772fc7d8c66a10e5c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg b/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg
deleted file mode 100644
index a868fffd4..000000000
--- a/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/df0533ffb247aba26688b9fe4ed301a7a30abe65.svg b/.assets/df0533ffb247aba26688b9fe4ed301a7a30abe65.svg
deleted file mode 100644
index 3b522ac65..000000000
--- a/.assets/df0533ffb247aba26688b9fe4ed301a7a30abe65.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/df20c061a799bbdc5909ab03884459554673dfd1.svg b/.assets/df20c061a799bbdc5909ab03884459554673dfd1.svg
deleted file mode 100644
index 25aad7541..000000000
--- a/.assets/df20c061a799bbdc5909ab03884459554673dfd1.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/df4a7d9cc3f6a6d30ec065c93141fe49eee42c4d.svg b/.assets/df4a7d9cc3f6a6d30ec065c93141fe49eee42c4d.svg
deleted file mode 100644
index 8c9c4d734..000000000
--- a/.assets/df4a7d9cc3f6a6d30ec065c93141fe49eee42c4d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 77%uOptimal 77%
\ No newline at end of file
diff --git a/.assets/df5063c94fec0289ac8349d5c84e5a33a4a6ccf6.svg b/.assets/df5063c94fec0289ac8349d5c84e5a33a4a6ccf6.svg
deleted file mode 100644
index de33714df..000000000
--- a/.assets/df5063c94fec0289ac8349d5c84e5a33a4a6ccf6.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80%
\ No newline at end of file
diff --git a/.assets/df5f8d4e981d7df1fa5125ff64ae540b4c74d29b.svg b/.assets/df5f8d4e981d7df1fa5125ff64ae540b4c74d29b.svg
deleted file mode 100644
index bb47e9ec1..000000000
--- a/.assets/df5f8d4e981d7df1fa5125ff64ae540b4c74d29b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/e0300718b13efcea84612ada57a23ac130beeb9f.svg b/.assets/e0300718b13efcea84612ada57a23ac130beeb9f.svg
deleted file mode 100644
index fc6959d59..000000000
--- a/.assets/e0300718b13efcea84612ada57a23ac130beeb9f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/e0672346a3ac158f15160527e2470ea266cd2a7c.svg b/.assets/e0672346a3ac158f15160527e2470ea266cd2a7c.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/e0672346a3ac158f15160527e2470ea266cd2a7c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/e18a415b118acfcc7864c3e185449673148c205b.svg b/.assets/e18a415b118acfcc7864c3e185449673148c205b.svg
deleted file mode 100644
index 8ab063422..000000000
--- a/.assets/e18a415b118acfcc7864c3e185449673148c205b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/e18f8e9f35475a5e5187d5baf9a5a10770d874d4.svg b/.assets/e18f8e9f35475a5e5187d5baf9a5a10770d874d4.svg
deleted file mode 100644
index 5072a99e3..000000000
--- a/.assets/e18f8e9f35475a5e5187d5baf9a5a10770d874d4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 35%uOptimal 35%
\ No newline at end of file
diff --git a/.assets/e2882c57645ea786a899138290d691e731c08209.svg b/.assets/e2882c57645ea786a899138290d691e731c08209.svg
deleted file mode 100644
index 7cab957ed..000000000
--- a/.assets/e2882c57645ea786a899138290d691e731c08209.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 52%uOptimal 52%
\ No newline at end of file
diff --git a/.assets/e2dfe65a12c79353a870b6d8fa76c10ae6723984.svg b/.assets/e2dfe65a12c79353a870b6d8fa76c10ae6723984.svg
deleted file mode 100644
index a64e70f4b..000000000
--- a/.assets/e2dfe65a12c79353a870b6d8fa76c10ae6723984.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/e38fac88a810e729d4ab675051bce37c536eabd3.svg b/.assets/e38fac88a810e729d4ab675051bce37c536eabd3.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/e38fac88a810e729d4ab675051bce37c536eabd3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/e5f4849f0e23cb31e923fa4ba60d4c3638979c16.svg b/.assets/e5f4849f0e23cb31e923fa4ba60d4c3638979c16.svg
deleted file mode 100644
index fbe4d6682..000000000
--- a/.assets/e5f4849f0e23cb31e923fa4ba60d4c3638979c16.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/.assets/e5ff0e45ac0f7d10b258c684c47540137d2b0a91.svg b/.assets/e5ff0e45ac0f7d10b258c684c47540137d2b0a91.svg
deleted file mode 100644
index 0347d2cb8..000000000
--- a/.assets/e5ff0e45ac0f7d10b258c684c47540137d2b0a91.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/e60c240a1aee12ae0d74072cf2946402382bc43f.svg b/.assets/e60c240a1aee12ae0d74072cf2946402382bc43f.svg
deleted file mode 100644
index afc407390..000000000
--- a/.assets/e60c240a1aee12ae0d74072cf2946402382bc43f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/e61d3d9de89e55105dc3ee54afb6b1103123cc10.svg b/.assets/e61d3d9de89e55105dc3ee54afb6b1103123cc10.svg
deleted file mode 100644
index 3f459b087..000000000
--- a/.assets/e61d3d9de89e55105dc3ee54afb6b1103123cc10.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%200%Optimal 60%Optimal 60%
\ No newline at end of file
diff --git a/.assets/e6a628a0b2178eb029c23d5a886e25abe0fe030d.svg b/.assets/e6a628a0b2178eb029c23d5a886e25abe0fe030d.svg
deleted file mode 100644
index 78943ccfb..000000000
--- a/.assets/e6a628a0b2178eb029c23d5a886e25abe0fe030d.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/e7d15e995584ca44d1f58544a171217542a7330b.svg b/.assets/e7d15e995584ca44d1f58544a171217542a7330b.svg
deleted file mode 100644
index 425c94651..000000000
--- a/.assets/e7d15e995584ca44d1f58544a171217542a7330b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%uOptimal 77%uOptimal 77%
\ No newline at end of file
diff --git a/.assets/e8496300bba6992ef8245dbc827b240692a59ca4.svg b/.assets/e8496300bba6992ef8245dbc827b240692a59ca4.svg
deleted file mode 100644
index 588e84c0f..000000000
--- a/.assets/e8496300bba6992ef8245dbc827b240692a59ca4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/e8e7b9196f167723da0b9cc203b01762e5360791.svg b/.assets/e8e7b9196f167723da0b9cc203b01762e5360791.svg
deleted file mode 100644
index ce9a14432..000000000
--- a/.assets/e8e7b9196f167723da0b9cc203b01762e5360791.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/e94f5c80815f2711734095b0eadafd2e3b09ef4b.svg b/.assets/e94f5c80815f2711734095b0eadafd2e3b09ef4b.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/e94f5c80815f2711734095b0eadafd2e3b09ef4b.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/ebccca66b9c426e3cc1dbbc7f4951b3043ab0eb0.svg b/.assets/ebccca66b9c426e3cc1dbbc7f4951b3043ab0eb0.svg
deleted file mode 100644
index 69e678d01..000000000
--- a/.assets/ebccca66b9c426e3cc1dbbc7f4951b3043ab0eb0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/ebfad69b502f31f18f71ef2b738792333cdbb1be.svg b/.assets/ebfad69b502f31f18f71ef2b738792333cdbb1be.svg
deleted file mode 100644
index 1c2019771..000000000
--- a/.assets/ebfad69b502f31f18f71ef2b738792333cdbb1be.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%uOptimal 20%uOptimal 20%
\ No newline at end of file
diff --git a/.assets/ebfca5a7304b8645a56c69f160a033e01d5d359c.svg b/.assets/ebfca5a7304b8645a56c69f160a033e01d5d359c.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/ebfca5a7304b8645a56c69f160a033e01d5d359c.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ec203c9d226a9862712674fc73fe22157313f448.svg b/.assets/ec203c9d226a9862712674fc73fe22157313f448.svg
deleted file mode 100644
index 5170a67b9..000000000
--- a/.assets/ec203c9d226a9862712674fc73fe22157313f448.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%5%10%uOptimal 0%uOptimal 0%
\ No newline at end of file
diff --git a/.assets/ee650e2faae2d5566154a1aff322be3b91a5cd57.svg b/.assets/ee650e2faae2d5566154a1aff322be3b91a5cd57.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/ee650e2faae2d5566154a1aff322be3b91a5cd57.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/ef55117ceefbc6d6d810e0e5578a4a7e9f292aae.svg b/.assets/ef55117ceefbc6d6d810e0e5578a4a7e9f292aae.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/ef55117ceefbc6d6d810e0e5578a4a7e9f292aae.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/ef89d610edf6a8e63ac63c8bc807752accdabb0c.svg b/.assets/ef89d610edf6a8e63ac63c8bc807752accdabb0c.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/ef89d610edf6a8e63ac63c8bc807752accdabb0c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/f026f669632b38618fe2f5e520b460247c827ccb.svg b/.assets/f026f669632b38618fe2f5e520b460247c827ccb.svg
deleted file mode 100644
index 0a538bbcc..000000000
--- a/.assets/f026f669632b38618fe2f5e520b460247c827ccb.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/f0cf035803a9530bcc466021aee12d30c34e1688.svg b/.assets/f0cf035803a9530bcc466021aee12d30c34e1688.svg
deleted file mode 100644
index 8de0b5665..000000000
--- a/.assets/f0cf035803a9530bcc466021aee12d30c34e1688.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/f10a64bcd5e971bfab46f6516cff0a20dc9aeee9.svg b/.assets/f10a64bcd5e971bfab46f6516cff0a20dc9aeee9.svg
deleted file mode 100644
index f9cf76db9..000000000
--- a/.assets/f10a64bcd5e971bfab46f6516cff0a20dc9aeee9.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/f162feff755824776af6c5dc36827e8ad2a9c67d.svg b/.assets/f162feff755824776af6c5dc36827e8ad2a9c67d.svg
deleted file mode 100644
index c34baa08b..000000000
--- a/.assets/f162feff755824776af6c5dc36827e8ad2a9c67d.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/f23f96fab886586256a20855ce2dd7a1566267f0.svg b/.assets/f23f96fab886586256a20855ce2dd7a1566267f0.svg
deleted file mode 100644
index 6fedc0f3b..000000000
--- a/.assets/f23f96fab886586256a20855ce2dd7a1566267f0.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/f26fe824cd646f2ec0b6b12317a7bbb670179a6f.svg b/.assets/f26fe824cd646f2ec0b6b12317a7bbb670179a6f.svg
deleted file mode 100644
index d762ff904..000000000
--- a/.assets/f26fe824cd646f2ec0b6b12317a7bbb670179a6f.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/f2f95a4b4513a29b7ce19c748925854dd8f0c741.svg b/.assets/f2f95a4b4513a29b7ce19c748925854dd8f0c741.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/f2f95a4b4513a29b7ce19c748925854dd8f0c741.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/f47524384ab6225b87778689e3c6d8287a38de2b.svg b/.assets/f47524384ab6225b87778689e3c6d8287a38de2b.svg
deleted file mode 100644
index da54d74b6..000000000
--- a/.assets/f47524384ab6225b87778689e3c6d8287a38de2b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/f4b1b8f3a89d9f171e1de97ae32be0c4decc7291.svg b/.assets/f4b1b8f3a89d9f171e1de97ae32be0c4decc7291.svg
deleted file mode 100644
index ecfaf2f55..000000000
--- a/.assets/f4b1b8f3a89d9f171e1de97ae32be0c4decc7291.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%50%100%Optimal 90%Optimal 90%
\ No newline at end of file
diff --git a/.assets/f5485a1f322764552b7a360d6d4890b45801d1dc.svg b/.assets/f5485a1f322764552b7a360d6d4890b45801d1dc.svg
deleted file mode 100644
index 7f1fc2d95..000000000
--- a/.assets/f5485a1f322764552b7a360d6d4890b45801d1dc.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/f81c6249674188eb7c7b4dc65d0841e8424af694.svg b/.assets/f81c6249674188eb7c7b4dc65d0841e8424af694.svg
deleted file mode 100644
index 679c73113..000000000
--- a/.assets/f81c6249674188eb7c7b4dc65d0841e8424af694.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%Optimal 0%Optimal 0%
\ No newline at end of file
diff --git a/.assets/f81f17d43b2be15fb98af31960a68c94692b6cb4.svg b/.assets/f81f17d43b2be15fb98af31960a68c94692b6cb4.svg
deleted file mode 100644
index 7e173c7fa..000000000
--- a/.assets/f81f17d43b2be15fb98af31960a68c94692b6cb4.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/f911de5d3135bd111d2073ae8d769f2abae972a3.svg b/.assets/f911de5d3135bd111d2073ae8d769f2abae972a3.svg
deleted file mode 100644
index 3c27866af..000000000
--- a/.assets/f911de5d3135bd111d2073ae8d769f2abae972a3.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stableUtilization Rate0%25%50%75%100%0%100%200%Optimal 80%Optimal 80%
\ No newline at end of file
diff --git a/.assets/f97fde975a340ec20a967916a1754eee7309d36f.svg b/.assets/f97fde975a340ec20a967916a1754eee7309d36f.svg
deleted file mode 100644
index a1ee31b76..000000000
--- a/.assets/f97fde975a340ec20a967916a1754eee7309d36f.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/fa415d85cf3a2a1b266d8754e0257240f664acf4.svg b/.assets/fa415d85cf3a2a1b266d8754e0257240f664acf4.svg
deleted file mode 100644
index 0694abc70..000000000
--- a/.assets/fa415d85cf3a2a1b266d8754e0257240f664acf4.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 90%uOptimal 90%
\ No newline at end of file
diff --git a/.assets/facf081bdcfeedc751f6987ba20c1f591aa3d9ae.svg b/.assets/facf081bdcfeedc751f6987ba20c1f591aa3d9ae.svg
deleted file mode 100644
index ce9a14432..000000000
--- a/.assets/facf081bdcfeedc751f6987ba20c1f591aa3d9ae.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 80%uOptimal 80%
\ No newline at end of file
diff --git a/.assets/fb0786b31c3f97e0469558c2f0243123d139fd29.svg b/.assets/fb0786b31c3f97e0469558c2f0243123d139fd29.svg
deleted file mode 100644
index c34baa08b..000000000
--- a/.assets/fb0786b31c3f97e0469558c2f0243123d139fd29.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%uOptimal 92%uOptimal 92%
\ No newline at end of file
diff --git a/.assets/fb9a10bdacab14a10bdb79ed7c595485bd4216d5.svg b/.assets/fb9a10bdacab14a10bdb79ed7c595485bd4216d5.svg
deleted file mode 100644
index 9bbde28ad..000000000
--- a/.assets/fb9a10bdacab14a10bdb79ed7c595485bd4216d5.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/fe4e0a5a508c956ea6911c17736cfae248e265e0.svg b/.assets/fe4e0a5a508c956ea6911c17736cfae248e265e0.svg
deleted file mode 100644
index bb47e9ec1..000000000
--- a/.assets/fe4e0a5a508c956ea6911c17736cfae248e265e0.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/fe86520732db368b1c64316a02dd2c54289f98a1.svg b/.assets/fe86520732db368b1c64316a02dd2c54289f98a1.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/fe86520732db368b1c64316a02dd2c54289f98a1.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.assets/ff2b0e4a102e0124ddc975718bccf3d3a6c8dc9b.svg b/.assets/ff2b0e4a102e0124ddc975718bccf3d3a6c8dc9b.svg
deleted file mode 100644
index e545bccf6..000000000
--- a/.assets/ff2b0e4a102e0124ddc975718bccf3d3a6c8dc9b.svg
+++ /dev/null
@@ -1 +0,0 @@
- 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/ff6afa53063e923502967d99a4191110108e0d3c.svg b/.assets/ff6afa53063e923502967d99a4191110108e0d3c.svg
deleted file mode 100644
index 671189bf6..000000000
--- a/.assets/ff6afa53063e923502967d99a4191110108e0d3c.svg
+++ /dev/null
@@ -1 +0,0 @@
- Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%uOptimal 45%uOptimal 45%
\ No newline at end of file
diff --git a/.github/workflows/ipfs.yml b/.github/workflows/ipfs.yml
index 3df0fd34e..d3ec42b93 100644
--- a/.github/workflows/ipfs.yml
+++ b/.github/workflows/ipfs.yml
@@ -50,7 +50,7 @@ jobs:
- name: Get all changed *.md file(s)
id: changed-files
- uses: tj-actions/changed-files@f569b77fb1d9ad9f1a125757d7e9e07b1f320199
+ uses: tj-actions/changed-files@f79274f27befa7e1bf6d5eb1c4964c0f65cea226
with:
json: true
write_output_files: true
@@ -90,7 +90,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
run: |
- if [[ -z $(git status -s) ]]
+ if [[ -z $(git status --porcelain) ]]
then
echo "tree is clean"
else
diff --git a/.prettierignore b/.prettierignore
index 5004d308d..49efc0558 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -5,4 +5,5 @@ node_modules
diffs
broadcast
etherscan
-.assets
\ No newline at end of file
+.assets
+*.snap
diff --git a/diffs/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md b/diffs/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
deleted file mode 100644
index 935e491ac..000000000
--- a/diffs/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664))
-
-| description | value before | value after |
-| --- | --- | --- |
-| liquidationThreshold | 80 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
- "liquidationThreshold": {
- "from": 8000,
- "to": 7800
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240506_before_AaveV2Avalanche_ReserveFactorUpgrades_20240506_after.md b/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240506_before_AaveV2Avalanche_ReserveFactorUpgrades_20240506_after.md
deleted file mode 100644
index be70ff700..000000000
--- a/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240506_before_AaveV2Avalanche_ReserveFactorUpgrades_20240506_after.md
+++ /dev/null
@@ -1,90 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowscan.xyz/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### WBTC.e ([0x50b7545627a5162F82A992c33b87aDc75187B218](https://snowscan.xyz/address/0x50b7545627a5162F82A992c33b87aDc75187B218))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowscan.xyz/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowscan.xyz/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0x50b7545627a5162F82A992c33b87aDc75187B218": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240524_before_AaveV2Avalanche_ReserveFactorUpgrades_20240524_after.md b/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240524_before_AaveV2Avalanche_ReserveFactorUpgrades_20240524_after.md
deleted file mode 100644
index 38a4c9bf5..000000000
--- a/diffs/AaveV2Avalanche_ReserveFactorUpgrades_20240524_before_AaveV2Avalanche_ReserveFactorUpgrades_20240524_after.md
+++ /dev/null
@@ -1,90 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowscan.xyz/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### WBTC.e ([0x50b7545627a5162F82A992c33b87aDc75187B218](https://snowscan.xyz/address/0x50b7545627a5162F82A992c33b87aDc75187B218))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowscan.xyz/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowscan.xyz/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0x50b7545627a5162F82A992c33b87aDc75187B218": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_StablecoinIRUpdates_20240424_before_AaveV2Avalanche_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV2Avalanche_StablecoinIRUpdates_20240424_before_AaveV2Avalanche_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index a903e666d..000000000
--- a/diffs/AaveV2Avalanche_StablecoinIRUpdates_20240424_before_AaveV2Avalanche_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,86 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xb1f13B58D6a3B1aEdB211Db58D9e42d28D09DbF4](https://snowscan.xyz/address/0xb1f13B58D6a3B1aEdB211Db58D9e42d28D09DbF4) | [0x6b410D0d53Efc7d4cAF23b9df2F38558998A1716](https://snowscan.xyz/address/0x6b410D0d53Efc7d4cAF23b9df2F38558998A1716) |
-| variableRateSlope1 | 13 % | 10 % |
-| interestRate | ![before](/.assets/ebccca66b9c426e3cc1dbbc7f4951b3043ab0eb0.svg) | ![after](/.assets/2633c80d8197b26e77ccf20e99ba7d7d77c645d7.svg) |
-
-#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowscan.xyz/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7](https://snowscan.xyz/address/0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7) | [0xd814D29bBd27b97d58255632C498c34b25DC72bD](https://snowscan.xyz/address/0xd814D29bBd27b97d58255632C498c34b25DC72bD) |
-| variableRateSlope1 | 12 % | 9 % |
-| interestRate | ![before](/.assets/28fac0d10e4291c98082d817d0b0f896a2cf8f2b.svg) | ![after](/.assets/cefc020957a48e5032cf475e71d8fc065adbfc61.svg) |
-
-#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7](https://snowscan.xyz/address/0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7) | [0xd814D29bBd27b97d58255632C498c34b25DC72bD](https://snowscan.xyz/address/0xd814D29bBd27b97d58255632C498c34b25DC72bD) |
-| variableRateSlope1 | 12 % | 9 % |
-| interestRate | ![before](/.assets/28fac0d10e4291c98082d817d0b0f896a2cf8f2b.svg) | ![after](/.assets/cefc020957a48e5032cf475e71d8fc065adbfc61.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
- "interestRateStrategy": {
- "from": "0xb1f13B58D6a3B1aEdB211Db58D9e42d28D09DbF4",
- "to": "0x6b410D0d53Efc7d4cAF23b9df2F38558998A1716"
- }
- },
- "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
- "interestRateStrategy": {
- "from": "0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7",
- "to": "0xd814D29bBd27b97d58255632C498c34b25DC72bD"
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "interestRateStrategy": {
- "from": "0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7",
- "to": "0xd814D29bBd27b97d58255632C498c34b25DC72bD"
- }
- }
- },
- "strategies": {
- "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
- "address": {
- "from": "0xb1f13B58D6a3B1aEdB211Db58D9e42d28D09DbF4",
- "to": "0x6b410D0d53Efc7d4cAF23b9df2F38558998A1716"
- },
- "variableRateSlope1": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- }
- },
- "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
- "address": {
- "from": "0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7",
- "to": "0xd814D29bBd27b97d58255632C498c34b25DC72bD"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "address": {
- "from": "0x7e7B8d96C08881c3e1F506E3a81baE759aeFacA7",
- "to": "0xd814D29bBd27b97d58255632C498c34b25DC72bD"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_after.md b/diffs/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
deleted file mode 100644
index 48dc199e4..000000000
--- a/diffs/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### AAVE.e ([0x63a72806098Bd3D9520cC43356dD78afe5D386D9](https://snowscan.xyz/address/0x63a72806098Bd3D9520cC43356dD78afe5D386D9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x63a72806098Bd3D9520cC43356dD78afe5D386D9": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_AAMPLSecondDistribution_20240429_before_AaveV2Ethereum_AAMPLSecondDistribution_20240429_after.md b/diffs/AaveV2Ethereum_AAMPLSecondDistribution_20240429_before_AaveV2Ethereum_AAMPLSecondDistribution_20240429_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV2Ethereum_AAMPLSecondDistribution_20240429_before_AaveV2Ethereum_AAMPLSecondDistribution_20240429_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_AprilFinanceUpdate_20240421_before_AaveV2Ethereum_AprilFinanceUpdate_20240421_after.md b/diffs/AaveV2Ethereum_AprilFinanceUpdate_20240421_before_AaveV2Ethereum_AprilFinanceUpdate_20240421_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV2Ethereum_AprilFinanceUpdate_20240421_before_AaveV2Ethereum_AprilFinanceUpdate_20240421_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_before_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_after.md b/diffs/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_before_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_after.md
deleted file mode 100644
index 4265cc160..000000000
--- a/diffs/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_before_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_after.md
+++ /dev/null
@@ -1,38 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| liquidationThreshold | 68 % | 65 % |
-
-
-#### ZRX ([0xE41d2489571d322189246DaFA5ebDe1F4699F498](https://etherscan.io/address/0xE41d2489571d322189246DaFA5ebDe1F4699F498))
-
-| description | value before | value after |
-| --- | --- | --- |
-| liquidationThreshold | 5 % | 0.01 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x514910771AF9Ca656af840dff83E8264EcF986CA": {
- "liquidationThreshold": {
- "from": 6800,
- "to": 6500
- }
- },
- "0xE41d2489571d322189246DaFA5ebDe1F4699F498": {
- "liquidationThreshold": {
- "from": 500,
- "to": 1
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_before_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_after.md b/diffs/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_before_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_after.md
deleted file mode 100644
index 0454a9571..000000000
--- a/diffs/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_before_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_after.md
+++ /dev/null
@@ -1,284 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### GUSD ([0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd](https://etherscan.io/address/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 95 % |
-| borrowingEnabled | true | false |
-| interestRateStrategy | [0x6a39D2996326853Fed73a69F51EC50C941624500](https://etherscan.io/address/0x6a39D2996326853Fed73a69F51EC50C941624500) | [0x11Ef01bc8d774a5FE6F4Bcd4bafd187D27CD99AF](https://etherscan.io/address/0x11Ef01bc8d774a5FE6F4Bcd4bafd187D27CD99AF) |
-| optimalUsageRatio | 70 % | 20 % |
-| variableRateSlope1 | 12 % | 15 % |
-| variableRateSlope2 | 150 % | 200 % |
-| maxExcessUsageRatio | 30 % | 80 % |
-| baseVariableBorrowRate | 0 % | 3 % |
-| interestRate | ![before](/.assets/ab240e54d4468f7b1cd32614f764cbef5a270f32.svg) | ![after](/.assets/c6f6294fedb5e5b5fc418d2c7861ece2c2bdef75.svg) |
-
-#### sUSD ([0x57Ab1ec28D129707052df4dF418D58a2D46d5f51](https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 55 % | 95 % |
-| borrowingEnabled | true | false |
-| interestRateStrategy | [0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2](https://etherscan.io/address/0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2) | [0x2Ce27f7a2DC17614421b9229158DE54A56d013E8](https://etherscan.io/address/0x2Ce27f7a2DC17614421b9229158DE54A56d013E8) |
-| optimalUsageRatio | 80 % | 20 % |
-| variableRateSlope1 | 12 % | 15 % |
-| variableRateSlope2 | 100 % | 200 % |
-| maxExcessUsageRatio | 20 % | 80 % |
-| baseVariableBorrowRate | 0 % | 3 % |
-| interestRate | ![before](/.assets/e8e7b9196f167723da0b9cc203b01762e5360791.svg) | ![after](/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg) |
-
-#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 95 % |
-| borrowingEnabled | true | false |
-| interestRateStrategy | [0xBbE678b3E03E885B477f97af40671c1182582aD4](https://etherscan.io/address/0xBbE678b3E03E885B477f97af40671c1182582aD4) | [0xe706615371Ba37a3134FEb28D0b4Aac74e5976bb](https://etherscan.io/address/0xe706615371Ba37a3134FEb28D0b4Aac74e5976bb) |
-| optimalUsageRatio | 80 % | 20 % |
-| variableRateSlope1 | 12 % | 15 % |
-| variableRateSlope2 | 75 % | 200 % |
-| maxExcessUsageRatio | 20 % | 80 % |
-| baseVariableBorrowRate | 0 % | 3 % |
-| interestRate | ![before](/.assets/010633e355dbf154c1151f809618bd82bf6c78f6.svg) | ![after](/.assets/9b3ea57ff4b19f392d36203fa741c94e83a96393.svg) |
-
-#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 55 % | 95 % |
-| borrowingEnabled | true | false |
-| interestRateStrategy | [0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2](https://etherscan.io/address/0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2) | [0x2Ce27f7a2DC17614421b9229158DE54A56d013E8](https://etherscan.io/address/0x2Ce27f7a2DC17614421b9229158DE54A56d013E8) |
-| optimalUsageRatio | 80 % | 20 % |
-| variableRateSlope1 | 12 % | 15 % |
-| variableRateSlope2 | 100 % | 200 % |
-| maxExcessUsageRatio | 20 % | 80 % |
-| baseVariableBorrowRate | 0 % | 3 % |
-| interestRate | ![before](/.assets/e8e7b9196f167723da0b9cc203b01762e5360791.svg) | ![after](/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg) |
-
-#### USDP ([0x8E870D67F660D95d5be530380D0eC0bd388289E1](https://etherscan.io/address/0x8E870D67F660D95d5be530380D0eC0bd388289E1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 95 % |
-| borrowingEnabled | true | false |
-| interestRateStrategy | [0x45d54d48ca90C03Eb8352ADf228DeA4D1E0bc19b](https://etherscan.io/address/0x45d54d48ca90C03Eb8352ADf228DeA4D1E0bc19b) | [0x2Ce27f7a2DC17614421b9229158DE54A56d013E8](https://etherscan.io/address/0x2Ce27f7a2DC17614421b9229158DE54A56d013E8) |
-| optimalUsageRatio | 80 % | 20 % |
-| variableRateSlope1 | 12 % | 15 % |
-| variableRateSlope2 | 75 % | 200 % |
-| maxExcessUsageRatio | 20 % | 80 % |
-| baseVariableBorrowRate | 0 % | 3 % |
-| interestRate | ![before](/.assets/81174f6db1d6055f4be1846c1155b509e25ef500.svg) | ![after](/.assets/5fa7f078e35b161018efa58954b1a2c29d813906.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
- "borrowingEnabled": {
- "from": true,
- "to": false
- },
- "interestRateStrategy": {
- "from": "0x6a39D2996326853Fed73a69F51EC50C941624500",
- "to": "0x11Ef01bc8d774a5FE6F4Bcd4bafd187D27CD99AF"
- },
- "reserveFactor": {
- "from": 4500,
- "to": 9500
- }
- },
- "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
- "borrowingEnabled": {
- "from": true,
- "to": false
- },
- "interestRateStrategy": {
- "from": "0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "reserveFactor": {
- "from": 5500,
- "to": 9500
- }
- },
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "borrowingEnabled": {
- "from": true,
- "to": false
- },
- "interestRateStrategy": {
- "from": "0xBbE678b3E03E885B477f97af40671c1182582aD4",
- "to": "0xe706615371Ba37a3134FEb28D0b4Aac74e5976bb"
- },
- "reserveFactor": {
- "from": 5000,
- "to": 9500
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "borrowingEnabled": {
- "from": true,
- "to": false
- },
- "interestRateStrategy": {
- "from": "0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "reserveFactor": {
- "from": 5500,
- "to": 9500
- }
- },
- "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
- "borrowingEnabled": {
- "from": true,
- "to": false
- },
- "interestRateStrategy": {
- "from": "0x45d54d48ca90C03Eb8352ADf228DeA4D1E0bc19b",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "reserveFactor": {
- "from": 4500,
- "to": 9500
- }
- }
- },
- "strategies": {
- "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
- "address": {
- "from": "0x6a39D2996326853Fed73a69F51EC50C941624500",
- "to": "0x11Ef01bc8d774a5FE6F4Bcd4bafd187D27CD99AF"
- },
- "baseVariableBorrowRate": {
- "from": 0,
- "to": "30000000000000000000000000"
- },
- "maxExcessUsageRatio": {
- "from": "300000000000000000000000000",
- "to": "800000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "700000000000000000000000000",
- "to": "200000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "150000000000000000000000000"
- },
- "variableRateSlope2": {
- "from": "1500000000000000000000000000",
- "to": "2000000000000000000000000000"
- }
- },
- "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
- "address": {
- "from": "0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "baseVariableBorrowRate": {
- "from": 0,
- "to": "30000000000000000000000000"
- },
- "maxExcessUsageRatio": {
- "from": "200000000000000000000000000",
- "to": "800000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "800000000000000000000000000",
- "to": "200000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "150000000000000000000000000"
- },
- "variableRateSlope2": {
- "from": "1000000000000000000000000000",
- "to": "2000000000000000000000000000"
- }
- },
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "address": {
- "from": "0xBbE678b3E03E885B477f97af40671c1182582aD4",
- "to": "0xe706615371Ba37a3134FEb28D0b4Aac74e5976bb"
- },
- "baseVariableBorrowRate": {
- "from": 0,
- "to": "30000000000000000000000000"
- },
- "maxExcessUsageRatio": {
- "from": "200000000000000000000000000",
- "to": "800000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "800000000000000000000000000",
- "to": "200000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "150000000000000000000000000"
- },
- "variableRateSlope2": {
- "from": "750000000000000000000000000",
- "to": "2000000000000000000000000000"
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "address": {
- "from": "0x6959f4a661FDF1f3405CaDd56d0Af73a4b082Cb2",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "baseVariableBorrowRate": {
- "from": 0,
- "to": "30000000000000000000000000"
- },
- "maxExcessUsageRatio": {
- "from": "200000000000000000000000000",
- "to": "800000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "800000000000000000000000000",
- "to": "200000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "150000000000000000000000000"
- },
- "variableRateSlope2": {
- "from": "1000000000000000000000000000",
- "to": "2000000000000000000000000000"
- }
- },
- "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
- "address": {
- "from": "0x45d54d48ca90C03Eb8352ADf228DeA4D1E0bc19b",
- "to": "0x2Ce27f7a2DC17614421b9229158DE54A56d013E8"
- },
- "baseVariableBorrowRate": {
- "from": 0,
- "to": "30000000000000000000000000"
- },
- "maxExcessUsageRatio": {
- "from": "200000000000000000000000000",
- "to": "800000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "800000000000000000000000000",
- "to": "200000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "150000000000000000000000000"
- },
- "variableRateSlope2": {
- "from": "750000000000000000000000000",
- "to": "2000000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md b/diffs/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
deleted file mode 100644
index 54b539514..000000000
--- a/diffs/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 80 % | 75 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "ltv": {
- "from": 8000,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240506_before_AaveV2Ethereum_ReserveFactorUpgrades_20240506_after.md b/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240506_before_AaveV2Ethereum_ReserveFactorUpgrades_20240506_after.md
deleted file mode 100644
index f2d96b2bf..000000000
--- a/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240506_before_AaveV2Ethereum_ReserveFactorUpgrades_20240506_after.md
+++ /dev/null
@@ -1,155 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### GUSD ([0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd](https://etherscan.io/address/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### sUSD ([0x57Ab1ec28D129707052df4dF418D58a2D46d5f51](https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### USDP ([0x8E870D67F660D95d5be530380D0eC0bd388289E1](https://etherscan.io/address/0x8E870D67F660D95d5be530380D0eC0bd388289E1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 40 % | 45 % |
-
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 45 % | 50 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0x514910771AF9Ca656af840dff83E8264EcF986CA": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
- "reserveFactor": {
- "from": 4000,
- "to": 4500
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "reserveFactor": {
- "from": 4500,
- "to": 5000
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240524_before_AaveV2Ethereum_ReserveFactorUpgrades_20240524_after.md b/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240524_before_AaveV2Ethereum_ReserveFactorUpgrades_20240524_after.md
deleted file mode 100644
index c8cb4ff5e..000000000
--- a/diffs/AaveV2Ethereum_ReserveFactorUpgrades_20240524_before_AaveV2Ethereum_ReserveFactorUpgrades_20240524_after.md
+++ /dev/null
@@ -1,155 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### GUSD ([0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd](https://etherscan.io/address/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 95 % | 99.99 % |
-
-
-#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 55 % | 60 % |
-
-
-#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 55 % | 60 % |
-
-
-#### sUSD ([0x57Ab1ec28D129707052df4dF418D58a2D46d5f51](https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 95 % | 99.99 % |
-
-
-#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 95 % | 99.99 % |
-
-
-#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 95 % | 99.99 % |
-
-
-#### USDP ([0x8E870D67F660D95d5be530380D0eC0bd388289E1](https://etherscan.io/address/0x8E870D67F660D95d5be530380D0eC0bd388289E1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 95 % | 99.99 % |
-
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 50 % | 55 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
- "reserveFactor": {
- "from": 9500,
- "to": 9999
- }
- },
- "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
- "reserveFactor": {
- "from": 5500,
- "to": 6000
- }
- },
- "0x514910771AF9Ca656af840dff83E8264EcF986CA": {
- "reserveFactor": {
- "from": 5500,
- "to": 6000
- }
- },
- "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
- "reserveFactor": {
- "from": 9500,
- "to": 9999
- }
- },
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "reserveFactor": {
- "from": 9500,
- "to": 9999
- }
- },
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "reserveFactor": {
- "from": 9500,
- "to": 9999
- }
- },
- "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
- "reserveFactor": {
- "from": 9500,
- "to": 9999
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "reserveFactor": {
- "from": 5000,
- "to": 5500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_StablecoinIRUpdates_20240424_before_AaveV2Ethereum_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV2Ethereum_StablecoinIRUpdates_20240424_before_AaveV2Ethereum_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 634dec10c..000000000
--- a/diffs/AaveV2Ethereum_StablecoinIRUpdates_20240424_before_AaveV2Ethereum_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,86 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xBbE678b3E03E885B477f97af40671c1182582aD4](https://etherscan.io/address/0xBbE678b3E03E885B477f97af40671c1182582aD4) | [0xeA3e03e3d3FFaF0724Cf2a2A2E41f8fF2F443c15](https://etherscan.io/address/0xeA3e03e3d3FFaF0724Cf2a2A2E41f8fF2F443c15) |
-| variableRateSlope1 | 12 % | 9 % |
-| interestRate | ![before](/.assets/010633e355dbf154c1151f809618bd82bf6c78f6.svg) | ![after](/.assets/3ba5c7c483188de945c201d26fa5252c67e5caac.svg) |
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xfA4dEC495522ea25f617113fA0633a5BeCD4918E](https://etherscan.io/address/0xfA4dEC495522ea25f617113fA0633a5BeCD4918E) | [0xcA52f53A926d2fa200ED9d98C6D3d9dC3ed63505](https://etherscan.io/address/0xcA52f53A926d2fa200ED9d98C6D3d9dC3ed63505) |
-| variableRateSlope1 | 12 % | 9 % |
-| interestRate | ![before](/.assets/4048416bedf0808a47706e49a9f98ee64701623a.svg) | ![after](/.assets/51f81c539b7291d13a067450c9db577fc40d9573.svg) |
-
-#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x13828736b5e2CcF7811A2012ff9eB3e685a815b2](https://etherscan.io/address/0x13828736b5e2CcF7811A2012ff9eB3e685a815b2) | [0xC599aB00AaF46901EA8c31dFB4c5363b111D2FeA](https://etherscan.io/address/0xC599aB00AaF46901EA8c31dFB4c5363b111D2FeA) |
-| variableRateSlope1 | 12 % | 9 % |
-| interestRate | ![before](/.assets/223a1aac9347ec68266ca4077ea5d03b73ca9e05.svg) | ![after](/.assets/a47eecb09dc71d5549ab7cbd4807cd98ad151613.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "interestRateStrategy": {
- "from": "0xBbE678b3E03E885B477f97af40671c1182582aD4",
- "to": "0xeA3e03e3d3FFaF0724Cf2a2A2E41f8fF2F443c15"
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "interestRateStrategy": {
- "from": "0xfA4dEC495522ea25f617113fA0633a5BeCD4918E",
- "to": "0xcA52f53A926d2fa200ED9d98C6D3d9dC3ed63505"
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "interestRateStrategy": {
- "from": "0x13828736b5e2CcF7811A2012ff9eB3e685a815b2",
- "to": "0xC599aB00AaF46901EA8c31dFB4c5363b111D2FeA"
- }
- }
- },
- "strategies": {
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "address": {
- "from": "0xBbE678b3E03E885B477f97af40671c1182582aD4",
- "to": "0xeA3e03e3d3FFaF0724Cf2a2A2E41f8fF2F443c15"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "address": {
- "from": "0xfA4dEC495522ea25f617113fA0633a5BeCD4918E",
- "to": "0xcA52f53A926d2fa200ED9d98C6D3d9dC3ed63505"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "address": {
- "from": "0x13828736b5e2CcF7811A2012ff9eB3e685a815b2",
- "to": "0xC599aB00AaF46901EA8c31dFB4c5363b111D2FeA"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_after.md b/diffs/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
deleted file mode 100644
index d7e03ae8b..000000000
--- a/diffs/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
+++ /dev/null
@@ -1,90 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### GUSD ([0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd](https://etherscan.io/address/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-#### sUSD ([0x57Ab1ec28D129707052df4dF418D58a2D46d5f51](https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-#### AAVE ([0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9](https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-#### USDP ([0x8E870D67F660D95d5be530380D0eC0bd388289E1](https://etherscan.io/address/0x8E870D67F660D95d5be530380D0eC0bd388289E1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- },
- "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- },
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- },
- "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- },
- "0x8E870D67F660D95d5be530380D0eC0bd388289E1": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Polygon_AprilFinanceUpdate_20240421_before_AaveV2Polygon_AprilFinanceUpdate_20240421_after.md b/diffs/AaveV2Polygon_AprilFinanceUpdate_20240421_before_AaveV2Polygon_AprilFinanceUpdate_20240421_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV2Polygon_AprilFinanceUpdate_20240421_before_AaveV2Polygon_AprilFinanceUpdate_20240421_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md b/diffs/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
deleted file mode 100644
index d172b2408..000000000
--- a/diffs/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_before_AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 80 % | 75 % |
-| liquidationThreshold | 85 % | 84.5 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
- "liquidationThreshold": {
- "from": 8500,
- "to": 8450
- },
- "ltv": {
- "from": 8000,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_after.md b/diffs/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
deleted file mode 100644
index 3f49214cf..000000000
--- a/diffs/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_before_AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_after.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### AAVE ([0xD6DF932A45C0f255f85145f286eA0b292B21C90B](https://polygonscan.com/address/0xD6DF932A45C0f255f85145f286eA0b292B21C90B))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | false | true |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xD6DF932A45C0f255f85145f286eA0b292B21C90B": {
- "isFrozen": {
- "from": false,
- "to": true
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_before_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_after.md b/diffs/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_before_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_after.md
deleted file mode 100644
index ed351368b..000000000
--- a/diffs/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_before_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_after.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### weETH ([0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe](https://arbiscan.io/address/0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe))
-
-| description | value before | value after |
-| --- | --- | --- |
-| reserveFactor | 15 % | 45 % |
-| interestRateStrategy | [0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f](https://arbiscan.io/address/0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f) | [0x4011fcd421b9E90f131B164EC1d162DBE269621C](https://arbiscan.io/address/0x4011fcd421b9E90f131B164EC1d162DBE269621C) |
-| optimalUsageRatio | 45 % | 35 % |
-| maxExcessUsageRatio | 55 % | 65 % |
-| interestRate | ![before](/.assets/859e8f346e62fa5dc8eed4d223ca2a8d1c9fc80c.svg) | ![after](/.assets/e18f8e9f35475a5e5187d5baf9a5a10770d874d4.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe": {
- "interestRateStrategy": {
- "from": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f",
- "to": "0x4011fcd421b9E90f131B164EC1d162DBE269621C"
- },
- "reserveFactor": {
- "from": 1500,
- "to": 4500
- }
- }
- },
- "strategies": {
- "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe": {
- "address": {
- "from": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f",
- "to": "0x4011fcd421b9E90f131B164EC1d162DBE269621C"
- },
- "maxExcessUsageRatio": {
- "from": "550000000000000000000000000",
- "to": "650000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "450000000000000000000000000",
- "to": "350000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
deleted file mode 100644
index 1199d81e8..000000000
--- a/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### ARB ([0x912CE59144191C1204E64559FE8253a0e49E6548](https://arbiscan.io/address/0x912CE59144191C1204E64559FE8253a0e49E6548))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 50 % | 58 % |
-| liquidationThreshold | 60 % | 63 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x912CE59144191C1204E64559FE8253a0e49E6548": {
- "liquidationThreshold": {
- "from": 6000,
- "to": 6300
- },
- "ltv": {
- "from": 5000,
- "to": 5800
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_before_AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_after.md b/diffs/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_before_AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_after.md
deleted file mode 100644
index 54b063026..000000000
--- a/diffs/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_before_AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_after.md
+++ /dev/null
@@ -1,132 +0,0 @@
-## Reserve changes
-
-### Reserves added
-
-#### GHO ([0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33](https://arbiscan.io/address/0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33))
-
-| description | value |
-| --- | --- |
-| decimals | 18 |
-| isActive | true |
-| isFrozen | false |
-| supplyCap | 1,000,000 GHO |
-| borrowCap | 900,000 GHO |
-| debtCeiling | 0 $ |
-| isSiloed | false |
-| isFlashloanable | true |
-| eModeCategory | 0 |
-| oracle | [0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb](https://arbiscan.io/address/0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb) |
-| oracleDecimals | 8 |
-| oracleLatestAnswer | 1 |
-| usageAsCollateralEnabled | false |
-| ltv | 0 % |
-| liquidationThreshold | 0 % |
-| liquidationBonus | 0 % |
-| liquidationProtocolFee | 0 % |
-| reserveFactor | 10 % |
-| aToken | [0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D](https://arbiscan.io/address/0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D) |
-| aTokenImpl | [0x1Be1798b70aEe431c2986f7ff48d9D1fa350786a](https://arbiscan.io/address/0x1Be1798b70aEe431c2986f7ff48d9D1fa350786a) |
-| variableDebtToken | [0x18248226C16BF76c032817854E7C83a2113B4f06](https://arbiscan.io/address/0x18248226C16BF76c032817854E7C83a2113B4f06) |
-| variableDebtTokenImpl | [0x5E76E98E0963EcDC6A065d1435F84065b7523f39](https://arbiscan.io/address/0x5E76E98E0963EcDC6A065d1435F84065b7523f39) |
-| stableDebtToken | [0x687871030477bf974725232F764aa04318A8b9c8](https://arbiscan.io/address/0x687871030477bf974725232F764aa04318A8b9c8) |
-| stableDebtTokenImpl | [0x0c2C95b24529664fE55D4437D7A31175CFE6c4f7](https://arbiscan.io/address/0x0c2C95b24529664fE55D4437D7A31175CFE6c4f7) |
-| borrowingEnabled | true |
-| stableBorrowRateEnabled | false |
-| isBorrowableInIsolation | false |
-| interestRateStrategy | [0x36d32fD7a72AD600be60Ccb71D3718E455025CaA](https://arbiscan.io/address/0x36d32fD7a72AD600be60Ccb71D3718E455025CaA) |
-| liquidityIndex | 1 |
-| variableBorrowIndex | 1 |
-| aTokenName | Aave Arbitrum GHO |
-| aTokenSymbol | aArbGHO |
-| currentLiquidityRate | 0 % |
-| currentVariableBorrowRate | 0 % |
-| isPaused | false |
-| stableDebtTokenName | Aave Arbitrum Stable Debt GHO |
-| stableDebtTokenSymbol | stableDebtArbGHO |
-| variableDebtTokenName | Aave Arbitrum Variable Debt GHO |
-| variableDebtTokenSymbol | variableDebtArbGHO |
-| optimalUsageRatio | 90 % |
-| maxExcessStableToTotalDebtRatio | 100 % |
-| maxExcessUsageRatio | 10 % |
-| optimalStableToTotalDebtRatio | 0 % |
-| baseVariableBorrowRate | 0 % |
-| variableRateSlope1 | 12 % |
-| variableRateSlope2 | 65 % |
-| baseStableBorrowRate | 12 % |
-| stableRateSlope1 | 0 % |
-| stableRateSlope2 | 0 % |
-| interestRate | ![ir](/.assets/014904fabcaa28d579bed688e1e3c35928c86f7c.svg) |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33": {
- "from": null,
- "to": {
- "aToken": "0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D",
- "aTokenImpl": "0x1Be1798b70aEe431c2986f7ff48d9D1fa350786a",
- "aTokenName": "Aave Arbitrum GHO",
- "aTokenSymbol": "aArbGHO",
- "borrowCap": 900000,
- "borrowingEnabled": true,
- "currentLiquidityRate": 0,
- "currentVariableBorrowRate": 0,
- "debtCeiling": 0,
- "decimals": 18,
- "eModeCategory": 0,
- "interestRateStrategy": "0x36d32fD7a72AD600be60Ccb71D3718E455025CaA",
- "isActive": true,
- "isBorrowableInIsolation": false,
- "isFlashloanable": true,
- "isFrozen": false,
- "isPaused": false,
- "isSiloed": false,
- "liquidationBonus": 0,
- "liquidationProtocolFee": 0,
- "liquidationThreshold": 0,
- "liquidityIndex": "1000000000000000000000000000",
- "ltv": 0,
- "oracle": "0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb",
- "oracleDecimals": 8,
- "oracleLatestAnswer": 100000000,
- "reserveFactor": 1000,
- "stableBorrowRateEnabled": false,
- "stableDebtToken": "0x687871030477bf974725232F764aa04318A8b9c8",
- "stableDebtTokenImpl": "0x0c2C95b24529664fE55D4437D7A31175CFE6c4f7",
- "stableDebtTokenName": "Aave Arbitrum Stable Debt GHO",
- "stableDebtTokenSymbol": "stableDebtArbGHO",
- "supplyCap": 1000000,
- "symbol": "GHO",
- "underlying": "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33",
- "usageAsCollateralEnabled": false,
- "variableBorrowIndex": "1000000000000000000000000000",
- "variableDebtToken": "0x18248226C16BF76c032817854E7C83a2113B4f06",
- "variableDebtTokenImpl": "0x5E76E98E0963EcDC6A065d1435F84065b7523f39",
- "variableDebtTokenName": "Aave Arbitrum Variable Debt GHO",
- "variableDebtTokenSymbol": "variableDebtArbGHO"
- }
- }
- },
- "strategies": {
- "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33": {
- "from": null,
- "to": {
- "address": "0x36d32fD7a72AD600be60Ccb71D3718E455025CaA",
- "baseStableBorrowRate": "120000000000000000000000000",
- "baseVariableBorrowRate": 0,
- "maxExcessStableToTotalDebtRatio": "1000000000000000000000000000",
- "maxExcessUsageRatio": "100000000000000000000000000",
- "optimalStableToTotalDebtRatio": 0,
- "optimalUsageRatio": "900000000000000000000000000",
- "stableRateSlope1": 0,
- "stableRateSlope2": 0,
- "variableRateSlope1": "120000000000000000000000000",
- "variableRateSlope2": "650000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_GHOCrossChainLaunch_20240528_before_AaveV3Arbitrum_GHOCrossChainLaunch_20240528_after.md b/diffs/AaveV3Arbitrum_GHOCrossChainLaunch_20240528_before_AaveV3Arbitrum_GHOCrossChainLaunch_20240528_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Arbitrum_GHOCrossChainLaunch_20240528_before_AaveV3Arbitrum_GHOCrossChainLaunch_20240528_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index b544133e1..000000000
--- a/diffs/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDC ([0xaf88d065e77c8cC2239327C5EDb3A432268e5831](https://arbiscan.io/address/0xaf88d065e77c8cC2239327C5EDb3A432268e5831))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_MayFundingUpdate_20240603_before_AaveV3Arbitrum_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Arbitrum_MayFundingUpdate_20240603_before_AaveV3Arbitrum_MayFundingUpdate_20240603_after.md
new file mode 100644
index 000000000..99942dab6
--- /dev/null
+++ b/diffs/AaveV3Arbitrum_MayFundingUpdate_20240603_before_AaveV3Arbitrum_MayFundingUpdate_20240603_after.md
@@ -0,0 +1,40 @@
+## Reserve changes
+
+### Reserves altered
+
+#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| liquidityIndex | 1.09 | 1.09 |
+| variableBorrowIndex | 1.154 | 1.154 |
+| currentLiquidityRate | 6.905 % | 15.75 % |
+| currentVariableBorrowRate | 13.362 % | 34.84 % |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
+ "currentLiquidityRate": {
+ "from": "69049670875424349641401075",
+ "to": "157499398268836075788458857"
+ },
+ "currentVariableBorrowRate": {
+ "from": "133620152358817949311361960",
+ "to": "348396823300030027491867904"
+ },
+ "liquidityIndex": {
+ "from": "1090346099105438844548987080",
+ "to": "1090346120591751425466045332"
+ },
+ "variableBorrowIndex": {
+ "from": "1153862742488226640991363767",
+ "to": "1153862786489173577496185322"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index 2459aa6ac..000000000
--- a/diffs/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,40 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### LINK ([0xf97f4df75117a78c1A5a0DBb814Af92458539FB4](https://arbiscan.io/address/0xf97f4df75117a78c1A5a0DBb814Af92458539FB4))
-
-| description | value before | value after |
-| --- | --- | --- |
-| liquidityIndex | 1.004 | 1.004 |
-| variableBorrowIndex | 1.03 | 1.03 |
-| currentLiquidityRate | 0.002 % | 0.002 % |
-| currentVariableBorrowRate | 0.202 % | 0.202 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4": {
- "currentLiquidityRate": {
- "from": "20985901007959518447306",
- "to": "20986891757668837645354"
- },
- "currentVariableBorrowRate": {
- "from": "2020047490198880263355387",
- "to": "2020095173113288571012529"
- },
- "liquidityIndex": {
- "from": "1003748460436427781600991452",
- "to": "1003748460849222735985294419"
- },
- "variableBorrowIndex": {
- "from": "1030014561085096814904145780",
- "to": "1030014601859425605006587904"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 5f814040a..000000000
--- a/diffs/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x82aF49447D8a07e3bd95BD0d56f35241523fBab1](https://arbiscan.io/address/0x82aF49447D8a07e3bd95BD0d56f35241523fBab1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://arbiscan.io/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) | [0x42ec99A020B78C449d17d93bC4c89e0189B5811d](https://arbiscan.io/address/0x42ec99A020B78C449d17d93bC4c89e0189B5811d) |
-| variableRateSlope1 | 3 % | 2.7 % |
-| baseStableBorrowRate | 6 % | 5.7 % |
-| interestRate | ![before](/.assets/908311237d838343e639cb1728e1fd729c5dfb53.svg) | ![after](/.assets/6b6d7d3b24423799c0cb5cc8c539f10b55adce0b.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": {
- "interestRateStrategy": {
- "from": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521",
- "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d"
- }
- }
- },
- "strategies": {
- "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": {
- "address": {
- "from": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521",
- "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d"
- },
- "baseStableBorrowRate": {
- "from": "60000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "30000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_SetACIAsEmissionManager_20240620_before_AaveV3Arbitrum_SetACIAsEmissionManager_20240620_after.md b/diffs/AaveV3Arbitrum_SetACIAsEmissionManager_20240620_before_AaveV3Arbitrum_SetACIAsEmissionManager_20240620_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Arbitrum_SetACIAsEmissionManager_20240620_before_AaveV3Arbitrum_SetACIAsEmissionManager_20240620_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Arbitrum_StablecoinIRUpdates_20240424_before_AaveV3Arbitrum_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Arbitrum_StablecoinIRUpdates_20240424_before_AaveV3Arbitrum_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index dc57a6fe6..000000000
--- a/diffs/AaveV3Arbitrum_StablecoinIRUpdates_20240424_before_AaveV3Arbitrum_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,246 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### FRAX ([0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F](https://arbiscan.io/address/0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://arbiscan.io/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://arbiscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg) | ![after](/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg) |
-
-#### MAI ([0x3F56e0c36d275367b8C502090EDF38289b3dEa0d](https://arbiscan.io/address/0x3F56e0c36d275367b8C502090EDF38289b3dEa0d))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x7448ABeD12d8538efC115af4a417e3d1367180fc](https://arbiscan.io/address/0x7448ABeD12d8538efC115af4a417e3d1367180fc) | [0xA7D9302346d4C35724821cf98966B2257c9683c6](https://arbiscan.io/address/0xA7D9302346d4C35724821cf98966B2257c9683c6) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/a447a2af1673f24cd99ea253692eebf7a4f36ace.svg) | ![after](/.assets/1f559076c39f0efa5de130807468c1274e03e2b4.svg) |
-
-#### LUSD ([0x93b346b6BC2548dA6A1E7d98E9a421B42541425b](https://arbiscan.io/address/0x93b346b6BC2548dA6A1E7d98E9a421B42541425b))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://arbiscan.io/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://arbiscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/8b6c31038ffb1df2a6cb6f9c5d3d46bc3f8d5c3d.svg) | ![after](/.assets/c02408848f0c66ef0026807922055047cf6c30e3.svg) |
-
-#### EURS ([0xD22a58f79e9481D1a88e00c343885A588b34b68B](https://arbiscan.io/address/0xD22a58f79e9481D1a88e00c343885A588b34b68B))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://arbiscan.io/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) | [0x2B3Ed91C6667d808b0401f439c4859ea635c6862](https://arbiscan.io/address/0x2B3Ed91C6667d808b0401f439c4859ea635c6862) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/77b8731bb967bad3628eb0904361735454af6c89.svg) | ![after](/.assets/92ec27a6034dfd828fa24305a41a8f5955965ee2.svg) |
-
-#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://arbiscan.io/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://arbiscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg) | ![after](/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg) |
-
-#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d](https://arbiscan.io/address/0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d) | [0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601](https://arbiscan.io/address/0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601) |
-| variableRateSlope1 | 13 % | 10 % |
-| baseStableBorrowRate | 14 % | 11 % |
-| interestRate | ![before](/.assets/943ca2bebc4a142000d295bc1d61a44a873a4ddc.svg) | ![after](/.assets/32e96369ea46fcd77c966df899d26c27ec00e55f.svg) |
-
-#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://arbiscan.io/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://arbiscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/b7bbfcdc496a39ed93077c20db7cc0900374050c.svg) | ![after](/.assets/de6ecc3b8eb3702a4fdafbb314498bf150787c63.svg) |
-
-#### USDC ([0xaf88d065e77c8cC2239327C5EDb3A432268e5831](https://arbiscan.io/address/0xaf88d065e77c8cC2239327C5EDb3A432268e5831))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://arbiscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) | [0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1](https://arbiscan.io/address/0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/ae9a4e96d181acab87949d13c3bced873cba82fb.svg) | ![after](/.assets/928c82b222d2ea849809c52e1eb679c7d7506875.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": {
- "interestRateStrategy": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- }
- },
- "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d": {
- "interestRateStrategy": {
- "from": "0x7448ABeD12d8538efC115af4a417e3d1367180fc",
- "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6"
- }
- },
- "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": {
- "interestRateStrategy": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- }
- },
- "0xD22a58f79e9481D1a88e00c343885A588b34b68B": {
- "interestRateStrategy": {
- "from": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1",
- "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862"
- }
- },
- "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
- "interestRateStrategy": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- }
- },
- "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
- "interestRateStrategy": {
- "from": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d",
- "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601"
- }
- },
- "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
- "interestRateStrategy": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- }
- },
- "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": {
- "interestRateStrategy": {
- "from": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "to": "0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1"
- }
- }
- },
- "strategies": {
- "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": {
- "address": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d": {
- "address": {
- "from": "0x7448ABeD12d8538efC115af4a417e3d1367180fc",
- "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": {
- "address": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xD22a58f79e9481D1a88e00c343885A588b34b68B": {
- "address": {
- "from": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1",
- "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
- "address": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
- "address": {
- "from": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d",
- "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601"
- },
- "baseStableBorrowRate": {
- "from": "140000000000000000000000000",
- "to": "110000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- }
- },
- "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
- "address": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": {
- "address": {
- "from": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "to": "0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index 9d2e8eb06..000000000
--- a/diffs/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC ([0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E](https://snowscan.xyz/address/0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 80 % | 75 % |
-| liquidationThreshold | 85 % | 81 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
- "liquidationThreshold": {
- "from": 8500,
- "to": 8100
- },
- "ltv": {
- "from": 8000,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index adf2ba702..000000000
--- a/diffs/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowscan.xyz/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x271f5f8325051f22caDa18FfedD4a805584a232A](https://snowscan.xyz/address/0x271f5f8325051f22caDa18FfedD4a805584a232A) | [0xd5CA18a70189309664e34FB8150799ff13722308](https://snowscan.xyz/address/0xd5CA18a70189309664e34FB8150799ff13722308) |
-| variableRateSlope1 | 3.8 % | 2.7 % |
-| baseStableBorrowRate | 6.8 % | 5.7 % |
-| interestRate | ![before](/.assets/ccc572c1f8557ea58d4ab36b39c7b63825179d06.svg) | ![after](/.assets/a4877f5866751d4c748b2860e175e398fd8b0f20.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": {
- "interestRateStrategy": {
- "from": "0x271f5f8325051f22caDa18FfedD4a805584a232A",
- "to": "0xd5CA18a70189309664e34FB8150799ff13722308"
- }
- }
- },
- "strategies": {
- "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": {
- "address": {
- "from": "0x271f5f8325051f22caDa18FfedD4a805584a232A",
- "to": "0xd5CA18a70189309664e34FB8150799ff13722308"
- },
- "baseStableBorrowRate": {
- "from": "68000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "38000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_before_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_after.md b/diffs/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_before_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_before_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Avalanche_StablecoinIRUpdates_20240424_before_AaveV3Avalanche_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Avalanche_StablecoinIRUpdates_20240424_before_AaveV3Avalanche_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 7cca35145..000000000
--- a/diffs/AaveV3Avalanche_StablecoinIRUpdates_20240424_before_AaveV3Avalanche_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,159 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### MAI ([0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b](https://snowscan.xyz/address/0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x049E42fe40368384d04bC10f8494Ea6FD164442a](https://snowscan.xyz/address/0x049E42fe40368384d04bC10f8494Ea6FD164442a) | [0xB57Ff919A953424d6B143ABfD6740A225eab953e](https://snowscan.xyz/address/0xB57Ff919A953424d6B143ABfD6740A225eab953e) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/ff6afa53063e923502967d99a4191110108e0d3c.svg) | ![after](/.assets/df0533ffb247aba26688b9fe4ed301a7a30abe65.svg) |
-
-#### USDt ([0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7](https://snowscan.xyz/address/0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x41365f2aC2D19c3B4Bc691007d314aba80af3669](https://snowscan.xyz/address/0x41365f2aC2D19c3B4Bc691007d314aba80af3669) | [0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4](https://snowscan.xyz/address/0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg) | ![after](/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg) |
-
-#### USDC ([0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E](https://snowscan.xyz/address/0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xf895e42505E48E3aa83fa41994CBd8d1D006C42B](https://snowscan.xyz/address/0xf895e42505E48E3aa83fa41994CBd8d1D006C42B) | [0x769EbC5106bF09D9A665CCb691e1907612b57F16](https://snowscan.xyz/address/0x769EbC5106bF09D9A665CCb691e1907612b57F16) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/6d01fe056a30aeab26b9f5ef5c945c6afece8779.svg) | ![after](/.assets/bdf1d2b7a73ed948ec32579541994b0e561e5484.svg) |
-
-#### FRAX ([0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64](https://snowscan.xyz/address/0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x41365f2aC2D19c3B4Bc691007d314aba80af3669](https://snowscan.xyz/address/0x41365f2aC2D19c3B4Bc691007d314aba80af3669) | [0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4](https://snowscan.xyz/address/0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg) | ![after](/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg) |
-
-#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x41365f2aC2D19c3B4Bc691007d314aba80af3669](https://snowscan.xyz/address/0x41365f2aC2D19c3B4Bc691007d314aba80af3669) | [0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4](https://snowscan.xyz/address/0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/1ead2b84ed46bdafcda42d716eb6cd8f54bd190f.svg) | ![after](/.assets/6f3614dd063597f4bcdcd9de34c81199148acfbb.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b": {
- "interestRateStrategy": {
- "from": "0x049E42fe40368384d04bC10f8494Ea6FD164442a",
- "to": "0xB57Ff919A953424d6B143ABfD6740A225eab953e"
- }
- },
- "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
- "interestRateStrategy": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- }
- },
- "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
- "interestRateStrategy": {
- "from": "0xf895e42505E48E3aa83fa41994CBd8d1D006C42B",
- "to": "0x769EbC5106bF09D9A665CCb691e1907612b57F16"
- }
- },
- "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": {
- "interestRateStrategy": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "interestRateStrategy": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- }
- }
- },
- "strategies": {
- "0x5c49b268c9841AFF1Cc3B0a418ff5c3442eE3F3b": {
- "address": {
- "from": "0x049E42fe40368384d04bC10f8494Ea6FD164442a",
- "to": "0xB57Ff919A953424d6B143ABfD6740A225eab953e"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
- "address": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
- "address": {
- "from": "0xf895e42505E48E3aa83fa41994CBd8d1D006C42B",
- "to": "0x769EbC5106bF09D9A665CCb691e1907612b57F16"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": {
- "address": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
- "address": {
- "from": "0x41365f2aC2D19c3B4Bc691007d314aba80af3669",
- "to": "0x5eE947d920643cCd3e2c54eAAd8F260FC8Add3b4"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index b22cbcc73..000000000
--- a/diffs/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDT ([0x55d398326f99059fF775485246999027B3197955](https://bscscan.com/address/0x55d398326f99059fF775485246999027B3197955))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDC ([0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d](https://bscscan.com/address/0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x55d398326f99059fF775485246999027B3197955": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index d5b27aa77..000000000
--- a/diffs/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### ETH ([0x2170Ed0880ac9A755fd29B2688956BD959F933F8](https://bscscan.com/address/0x2170Ed0880ac9A755fd29B2688956BD959F933F8))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x6EB97Ba43A1576989bc203178BD64C1182f24DDc](https://bscscan.com/address/0x6EB97Ba43A1576989bc203178BD64C1182f24DDc) | [0x34E8e73bFB04454bd203410b009124527A57Ea3F](https://bscscan.com/address/0x34E8e73bFB04454bd203410b009124527A57Ea3F) |
-| variableRateSlope1 | 3.3 % | 2.7 % |
-| baseStableBorrowRate | 5.3 % | 4.7 % |
-| interestRate | ![before](/.assets/e2dfe65a12c79353a870b6d8fa76c10ae6723984.svg) | ![after](/.assets/20707eb1f47fcf98a914006f2d63d9daa515de6b.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x2170Ed0880ac9A755fd29B2688956BD959F933F8": {
- "interestRateStrategy": {
- "from": "0x6EB97Ba43A1576989bc203178BD64C1182f24DDc",
- "to": "0x34E8e73bFB04454bd203410b009124527A57Ea3F"
- }
- }
- },
- "strategies": {
- "0x2170Ed0880ac9A755fd29B2688956BD959F933F8": {
- "address": {
- "from": "0x6EB97Ba43A1576989bc203178BD64C1182f24DDc",
- "to": "0x34E8e73bFB04454bd203410b009124527A57Ea3F"
- },
- "baseStableBorrowRate": {
- "from": "53000000000000000000000000",
- "to": "47000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "33000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3BNB_StablecoinIRUpdates_20240424_before_AaveV3BNB_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3BNB_StablecoinIRUpdates_20240424_before_AaveV3BNB_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 35ece1956..000000000
--- a/diffs/AaveV3BNB_StablecoinIRUpdates_20240424_before_AaveV3BNB_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,101 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDT ([0x55d398326f99059fF775485246999027B3197955](https://bscscan.com/address/0x55d398326f99059fF775485246999027B3197955))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x7aD646053aE2A184971dc952Cc680a5a5a0cFB8a](https://bscscan.com/address/0x7aD646053aE2A184971dc952Cc680a5a5a0cFB8a) | [0xD161Cd855089c33c00F7D30C56452e5B4B8a8599](https://bscscan.com/address/0xD161Cd855089c33c00F7D30C56452e5B4B8a8599) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/36854462871fe9c2159f93144e1db3723476a00a.svg) | ![after](/.assets/189b1048cfb01ad4ab7283e7ad5c7292c5ec484d.svg) |
-
-#### USDC ([0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d](https://bscscan.com/address/0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x0C8c4DbEB2dfA2a3770a54450E9937725D2d3D24](https://bscscan.com/address/0x0C8c4DbEB2dfA2a3770a54450E9937725D2d3D24) | [0x4e4B860383B9C35615f2dc0C3b78F83009A46720](https://bscscan.com/address/0x4e4B860383B9C35615f2dc0C3b78F83009A46720) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/782488a1b7ee691f80006e3fec1034d79c974a26.svg) | ![after](/.assets/caf98330fb34eb7b2e26a2107766215407decc6a.svg) |
-
-#### FDUSD ([0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409](https://bscscan.com/address/0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xBE6Af4cD3097424BcF5C5BeC3bcEc2017DBCaA86](https://bscscan.com/address/0xBE6Af4cD3097424BcF5C5BeC3bcEc2017DBCaA86) | [0x6415754564745A50adB508D3B94d10870FE220eb](https://bscscan.com/address/0x6415754564745A50adB508D3B94d10870FE220eb) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 15 % | 12 % |
-| interestRate | ![before](/.assets/ef55117ceefbc6d6d810e0e5578a4a7e9f292aae.svg) | ![after](/.assets/2fa239413d25864a0b99b39868a3fb49e63010ad.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x55d398326f99059fF775485246999027B3197955": {
- "interestRateStrategy": {
- "from": "0x7aD646053aE2A184971dc952Cc680a5a5a0cFB8a",
- "to": "0xD161Cd855089c33c00F7D30C56452e5B4B8a8599"
- }
- },
- "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": {
- "interestRateStrategy": {
- "from": "0x0C8c4DbEB2dfA2a3770a54450E9937725D2d3D24",
- "to": "0x4e4B860383B9C35615f2dc0C3b78F83009A46720"
- }
- },
- "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409": {
- "interestRateStrategy": {
- "from": "0xBE6Af4cD3097424BcF5C5BeC3bcEc2017DBCaA86",
- "to": "0x6415754564745A50adB508D3B94d10870FE220eb"
- }
- }
- },
- "strategies": {
- "0x55d398326f99059fF775485246999027B3197955": {
- "address": {
- "from": "0x7aD646053aE2A184971dc952Cc680a5a5a0cFB8a",
- "to": "0xD161Cd855089c33c00F7D30C56452e5B4B8a8599"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": {
- "address": {
- "from": "0x0C8c4DbEB2dfA2a3770a54450E9937725D2d3D24",
- "to": "0x4e4B860383B9C35615f2dc0C3b78F83009A46720"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409": {
- "address": {
- "from": "0xBE6Af4cD3097424BcF5C5BeC3bcEc2017DBCaA86",
- "to": "0x6415754564745A50adB508D3B94d10870FE220eb"
- },
- "baseStableBorrowRate": {
- "from": "150000000000000000000000000",
- "to": "120000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index a5f30157a..000000000
--- a/diffs/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913](https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 1d67fde2f..000000000
--- a/diffs/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x4200000000000000000000000000000000000006](https://basescan.org/address/0x4200000000000000000000000000000000000006))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xC1F6588f4A1145D0B7F94c86a773bB47F0eC0759](https://basescan.org/address/0xC1F6588f4A1145D0B7F94c86a773bB47F0eC0759) | [0x0D9e605d77Ea2ADe3eEAfa86cE353899E9D3d72C](https://basescan.org/address/0x0D9e605d77Ea2ADe3eEAfa86cE353899E9D3d72C) |
-| variableRateSlope1 | 3.8 % | 2.7 % |
-| baseStableBorrowRate | 6.8 % | 5.7 % |
-| interestRate | ![before](/.assets/4a9f82e7b5325d9604ebfd4eef29bb41a0ec2f45.svg) | ![after](/.assets/95e717662ee38643eaedf29c7ecf9494cf135da3.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x4200000000000000000000000000000000000006": {
- "interestRateStrategy": {
- "from": "0xC1F6588f4A1145D0B7F94c86a773bB47F0eC0759",
- "to": "0x0D9e605d77Ea2ADe3eEAfa86cE353899E9D3d72C"
- }
- }
- },
- "strategies": {
- "0x4200000000000000000000000000000000000006": {
- "address": {
- "from": "0xC1F6588f4A1145D0B7F94c86a773bB47F0eC0759",
- "to": "0x0D9e605d77Ea2ADe3eEAfa86cE353899E9D3d72C"
- },
- "baseStableBorrowRate": {
- "from": "68000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "38000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_StablecoinIRUpdates_20240424_before_AaveV3Base_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Base_StablecoinIRUpdates_20240424_before_AaveV3Base_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 0a628bfe3..000000000
--- a/diffs/AaveV3Base_StablecoinIRUpdates_20240424_before_AaveV3Base_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,72 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913](https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xcbF65e0708961Da6Dd3F1A4e1cE17D97D1E8C29A](https://basescan.org/address/0xcbF65e0708961Da6Dd3F1A4e1cE17D97D1E8C29A) | [0xA802E6c96572f4C7efbf1e611d161CF63ad74Ef9](https://basescan.org/address/0xA802E6c96572f4C7efbf1e611d161CF63ad74Ef9) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 12 % | 9 % |
-| interestRate | ![before](/.assets/2dd6d84168e4068a40122f647020c27ee3e36ed1.svg) | ![after](/.assets/f5485a1f322764552b7a360d6d4890b45801d1dc.svg) |
-
-#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x64163263753A9610a391A5D0276ae94B0d42fB75](https://basescan.org/address/0x64163263753A9610a391A5D0276ae94B0d42fB75) | [0x992ff76913Db79eCA51666D1e09b4F5Cf078dF7D](https://basescan.org/address/0x992ff76913Db79eCA51666D1e09b4F5Cf078dF7D) |
-| variableRateSlope1 | 13 % | 10 % |
-| baseStableBorrowRate | 14 % | 11 % |
-| interestRate | ![before](/.assets/830c41eadf476da561594683a69e91e3a5f6862f.svg) | ![after](/.assets/1fcc1b0751c3b07af596103ceace9c8c3c9b63ea.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
- "interestRateStrategy": {
- "from": "0xcbF65e0708961Da6Dd3F1A4e1cE17D97D1E8C29A",
- "to": "0xA802E6c96572f4C7efbf1e611d161CF63ad74Ef9"
- }
- },
- "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": {
- "interestRateStrategy": {
- "from": "0x64163263753A9610a391A5D0276ae94B0d42fB75",
- "to": "0x992ff76913Db79eCA51666D1e09b4F5Cf078dF7D"
- }
- }
- },
- "strategies": {
- "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
- "address": {
- "from": "0xcbF65e0708961Da6Dd3F1A4e1cE17D97D1E8C29A",
- "to": "0xA802E6c96572f4C7efbf1e611d161CF63ad74Ef9"
- },
- "baseStableBorrowRate": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": {
- "address": {
- "from": "0x64163263753A9610a391A5D0276ae94B0d42fB75",
- "to": "0x992ff76913Db79eCA51666D1e09b4F5Cf078dF7D"
- },
- "baseStableBorrowRate": {
- "from": "140000000000000000000000000",
- "to": "110000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_before_AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_after.md b/diffs/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_before_AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_after.md
deleted file mode 100644
index 3530f1951..000000000
--- a/diffs/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_before_AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_after.md
+++ /dev/null
@@ -1,139 +0,0 @@
-## Reserve changes
-
-### Reserves added
-
-#### weETH ([0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A](https://basescan.org/address/0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A))
-
-| description | value |
-| --- | --- |
-| decimals | 18 |
-| isActive | true |
-| isFrozen | false |
-| supplyCap | 150 weETH |
-| borrowCap | 30 weETH |
-| debtCeiling | 0 $ |
-| isSiloed | false |
-| isFlashloanable | true |
-| eModeCategory | 1 |
-| oracle | [0xFc4d1d7a8FD1E6719e361e16044b460737F12C44](https://basescan.org/address/0xFc4d1d7a8FD1E6719e361e16044b460737F12C44) |
-| oracleDecimals | 8 |
-| oracleDescription | Capped weETH / eETH(ETH) / USD |
-| oracleLatestAnswer | 4080.41872448 |
-| usageAsCollateralEnabled | true |
-| ltv | 72.5 % |
-| liquidationThreshold | 75 % |
-| liquidationBonus | 7.5 % |
-| liquidationProtocolFee | 10 % |
-| reserveFactor | 45 % |
-| aToken | [0x7C307e128efA31F540F2E2d976C995E0B65F51F6](https://basescan.org/address/0x7C307e128efA31F540F2E2d976C995E0B65F51F6) |
-| aTokenImpl | [0x98F409Fc4A42F34AE3c326c7f48ED01ae8cAeC69](https://basescan.org/address/0x98F409Fc4A42F34AE3c326c7f48ED01ae8cAeC69) |
-| variableDebtToken | [0x8D2e3F1f4b38AA9f1ceD22ac06019c7561B03901](https://basescan.org/address/0x8D2e3F1f4b38AA9f1ceD22ac06019c7561B03901) |
-| variableDebtTokenImpl | [0x2425A746911128c2eAA7bEBDc9Bc452eE52208a1](https://basescan.org/address/0x2425A746911128c2eAA7bEBDc9Bc452eE52208a1) |
-| stableDebtToken | [0xCBEdA45432D5325585ACAD29244f113C237B6Cf0](https://basescan.org/address/0xCBEdA45432D5325585ACAD29244f113C237B6Cf0) |
-| stableDebtTokenImpl | [0xe0b9B4f959fa8B52B7228c8D78875482b8813349](https://basescan.org/address/0xe0b9B4f959fa8B52B7228c8D78875482b8813349) |
-| borrowingEnabled | true |
-| stableBorrowRateEnabled | false |
-| isBorrowableInIsolation | false |
-| interestRateStrategy | [0xA31AcCd744EBdbF1b36E4556Ea09C8b34CD65bb2](https://basescan.org/address/0xA31AcCd744EBdbF1b36E4556Ea09C8b34CD65bb2) |
-| liquidityIndex | 1 |
-| variableBorrowIndex | 1 |
-| aTokenName | Aave Base weETH |
-| aTokenSymbol | aBasweETH |
-| currentLiquidityRate | 0 % |
-| currentVariableBorrowRate | 0 % |
-| isPaused | false |
-| stableDebtTokenName | Aave Base Stable Debt weETH |
-| stableDebtTokenSymbol | stableDebtBasweETH |
-| variableDebtTokenName | Aave Base Variable Debt weETH |
-| variableDebtTokenSymbol | variableDebtBasweETH |
-| optimalUsageRatio | 35 % |
-| maxExcessStableToTotalDebtRatio | 100 % |
-| maxExcessUsageRatio | 65 % |
-| optimalStableToTotalDebtRatio | 0 % |
-| baseVariableBorrowRate | 0 % |
-| variableRateSlope1 | 7 % |
-| variableRateSlope2 | 300 % |
-| baseStableBorrowRate | 7 % |
-| stableRateSlope1 | 7 % |
-| stableRateSlope2 | 300 % |
-| interestRate | ![ir](/.assets/54e10a13590d5a2968c8308e367ee942724c8f5a.svg) |
-| eMode.label | ETH correlated |
-| eMode.ltv | 90 % |
-| eMode.liquidationThreshold | 93 % |
-| eMode.liquidationBonus | 2 % |
-| eMode.priceSource | 0x0000000000000000000000000000000000000000 |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A": {
- "from": null,
- "to": {
- "aToken": "0x7C307e128efA31F540F2E2d976C995E0B65F51F6",
- "aTokenImpl": "0x98F409Fc4A42F34AE3c326c7f48ED01ae8cAeC69",
- "aTokenName": "Aave Base weETH",
- "aTokenSymbol": "aBasweETH",
- "borrowCap": 30,
- "borrowingEnabled": true,
- "currentLiquidityRate": 0,
- "currentVariableBorrowRate": 0,
- "debtCeiling": 0,
- "decimals": 18,
- "eModeCategory": 1,
- "interestRateStrategy": "0xA31AcCd744EBdbF1b36E4556Ea09C8b34CD65bb2",
- "isActive": true,
- "isBorrowableInIsolation": false,
- "isFlashloanable": true,
- "isFrozen": false,
- "isPaused": false,
- "isSiloed": false,
- "liquidationBonus": 10750,
- "liquidationProtocolFee": 1000,
- "liquidationThreshold": 7500,
- "liquidityIndex": "1000000000000000000000000000",
- "ltv": 7250,
- "oracle": "0xFc4d1d7a8FD1E6719e361e16044b460737F12C44",
- "oracleDecimals": 8,
- "oracleDescription": "Capped weETH / eETH(ETH) / USD",
- "oracleLatestAnswer": 408041872448,
- "reserveFactor": 4500,
- "stableBorrowRateEnabled": false,
- "stableDebtToken": "0xCBEdA45432D5325585ACAD29244f113C237B6Cf0",
- "stableDebtTokenImpl": "0xe0b9B4f959fa8B52B7228c8D78875482b8813349",
- "stableDebtTokenName": "Aave Base Stable Debt weETH",
- "stableDebtTokenSymbol": "stableDebtBasweETH",
- "supplyCap": 150,
- "symbol": "weETH",
- "underlying": "0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A",
- "usageAsCollateralEnabled": true,
- "variableBorrowIndex": "1000000000000000000000000000",
- "variableDebtToken": "0x8D2e3F1f4b38AA9f1ceD22ac06019c7561B03901",
- "variableDebtTokenImpl": "0x2425A746911128c2eAA7bEBDc9Bc452eE52208a1",
- "variableDebtTokenName": "Aave Base Variable Debt weETH",
- "variableDebtTokenSymbol": "variableDebtBasweETH"
- }
- }
- },
- "strategies": {
- "0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A": {
- "from": null,
- "to": {
- "address": "0xA31AcCd744EBdbF1b36E4556Ea09C8b34CD65bb2",
- "baseStableBorrowRate": "70000000000000000000000000",
- "baseVariableBorrowRate": 0,
- "maxExcessStableToTotalDebtRatio": "1000000000000000000000000000",
- "maxExcessUsageRatio": "650000000000000000000000000",
- "optimalStableToTotalDebtRatio": 0,
- "optimalUsageRatio": "350000000000000000000000000",
- "stableRateSlope1": "70000000000000000000000000",
- "stableRateSlope2": "3000000000000000000000000000",
- "variableRateSlope1": "70000000000000000000000000",
- "variableRateSlope2": "3000000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_before_AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_after.md b/diffs/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_before_AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_after.md
new file mode 100644
index 000000000..62fffb333
--- /dev/null
+++ b/diffs/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_before_AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_after.md
@@ -0,0 +1,253 @@
+## Reserve changes
+
+### Reserve added
+
+#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0))
+
+| description | value |
+| --- | --- |
+| decimals | 18 |
+| isActive | true |
+| isFrozen | false |
+| supplyCap | 650,000 wstETH |
+| borrowCap | 12,000 wstETH |
+| debtCeiling | 0 $ [0] |
+| isSiloed | false |
+| isFlashloanable | true |
+| eModeCategory | 1 |
+| oracle | [0xB4aB0c94159bc2d8C133946E7241368fc2F2a010](https://etherscan.io/address/0xB4aB0c94159bc2d8C133946E7241368fc2F2a010) |
+| oracleDecimals | 8 |
+| oracleDescription | Capped wstETH / stETH(ETH) / USD |
+| oracleLatestAnswer | 4091.86272913 |
+| usageAsCollateralEnabled | true |
+| ltv | 80 % [8000] |
+| liquidationThreshold | 81 % [8100] |
+| liquidationBonus | 6 % |
+| liquidationProtocolFee | 10 % [1000] |
+| reserveFactor | 5 % [500] |
+| aToken | [0xC035a7cf15375cE2706766804551791aD035E0C2](https://etherscan.io/address/0xC035a7cf15375cE2706766804551791aD035E0C2) |
+| aTokenImpl | [0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2](https://etherscan.io/address/0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2) |
+| variableDebtToken | [0xE439edd2625772AA635B437C099C607B6eb7d35f](https://etherscan.io/address/0xE439edd2625772AA635B437C099C607B6eb7d35f) |
+| variableDebtTokenImpl | [0x3E59212c34588a63350142EFad594a20C88C2CEd](https://etherscan.io/address/0x3E59212c34588a63350142EFad594a20C88C2CEd) |
+| stableDebtToken | [0x3d0Fd161363b327C704b013a9E63a8Cc03Bec1c4](https://etherscan.io/address/0x3d0Fd161363b327C704b013a9E63a8Cc03Bec1c4) |
+| stableDebtTokenImpl | [0x36284fED68f802c5733432c3306D8e92c504a243](https://etherscan.io/address/0x36284fED68f802c5733432c3306D8e92c504a243) |
+| borrowingEnabled | true |
+| stableBorrowRateEnabled | false |
+| isBorrowableInIsolation | false |
+| interestRateStrategy | [0x6642dcAaBc80807DD083c66a301d308568CBcA3D](https://etherscan.io/address/0x6642dcAaBc80807DD083c66a301d308568CBcA3D) |
+| aTokenName | Aave Ethereum Lido wstETH |
+| aTokenSymbol | aEthLidowstETH |
+| aTokenUnderlyingBalance | 0.1 wstETH [100000000000000000] |
+| isPaused | false |
+| stableDebtTokenName | Aave Ethereum Lido Stable Debt wstETH |
+| stableDebtTokenSymbol | stableDebtEthLidowstETH |
+| variableDebtTokenName | Aave Ethereum Lido Variable Debt wstETH |
+| variableDebtTokenSymbol | variableDebtEthLidowstETH |
+| virtualAccountingActive | true |
+| virtualBalance | 0.1 wstETH [100000000000000000] |
+| optimalUsageRatio | 45 % |
+| maxVariableBorrowRate | 88.5 % |
+| baseVariableBorrowRate | 0 % |
+| variableRateSlope1 | 3.5 % |
+| variableRateSlope2 | 85 % |
+| interestRate | ![ir](/.assets/4f278d3e1c4335b98c92585fbeb92d263bdb8569.svg) |
+| eMode.label | ETH correlated |
+| eMode.ltv | 93.5 % |
+| eMode.liquidationThreshold | 95.5 % |
+| eMode.liquidationBonus | 1 % |
+| eMode.priceSource | 0x0000000000000000000000000000000000000000 |
+
+
+#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
+
+| description | value |
+| --- | --- |
+| decimals | 18 |
+| isActive | true |
+| isFrozen | false |
+| supplyCap | 900,000 WETH |
+| borrowCap | 810,000 WETH |
+| debtCeiling | 0 $ [0] |
+| isSiloed | false |
+| isFlashloanable | true |
+| eModeCategory | 1 |
+| oracle | [0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419](https://etherscan.io/address/0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419) |
+| oracleDecimals | 8 |
+| oracleDescription | ETH / USD |
+| oracleLatestAnswer | 3487.769501 |
+| usageAsCollateralEnabled | true |
+| ltv | 82 % [8200] |
+| liquidationThreshold | 83 % [8300] |
+| liquidationBonus | 5 % |
+| liquidationProtocolFee | 10 % [1000] |
+| reserveFactor | 10 % [1000] |
+| aToken | [0xfA1fDbBD71B0aA16162D76914d69cD8CB3Ef92da](https://etherscan.io/address/0xfA1fDbBD71B0aA16162D76914d69cD8CB3Ef92da) |
+| aTokenImpl | [0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2](https://etherscan.io/address/0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2) |
+| variableDebtToken | [0x91b7d78BF92db564221f6B5AeE744D1727d1Dd1e](https://etherscan.io/address/0x91b7d78BF92db564221f6B5AeE744D1727d1Dd1e) |
+| variableDebtTokenImpl | [0x3E59212c34588a63350142EFad594a20C88C2CEd](https://etherscan.io/address/0x3E59212c34588a63350142EFad594a20C88C2CEd) |
+| stableDebtToken | [0x97D5Cd1a26243647ddEac87183236Cf215974d30](https://etherscan.io/address/0x97D5Cd1a26243647ddEac87183236Cf215974d30) |
+| stableDebtTokenImpl | [0x36284fED68f802c5733432c3306D8e92c504a243](https://etherscan.io/address/0x36284fED68f802c5733432c3306D8e92c504a243) |
+| borrowingEnabled | true |
+| stableBorrowRateEnabled | false |
+| isBorrowableInIsolation | false |
+| interestRateStrategy | [0x6642dcAaBc80807DD083c66a301d308568CBcA3D](https://etherscan.io/address/0x6642dcAaBc80807DD083c66a301d308568CBcA3D) |
+| aTokenName | Aave Ethereum Lido WETH |
+| aTokenSymbol | aEthLidoWETH |
+| aTokenUnderlyingBalance | 0.1 WETH [100000000000000000] |
+| isPaused | false |
+| stableDebtTokenName | Aave Ethereum Lido Stable Debt WETH |
+| stableDebtTokenSymbol | stableDebtEthLidoWETH |
+| variableDebtTokenName | Aave Ethereum Lido Variable Debt WETH |
+| variableDebtTokenSymbol | variableDebtEthLidoWETH |
+| virtualAccountingActive | true |
+| virtualBalance | 0.1 WETH [100000000000000000] |
+| optimalUsageRatio | 90 % |
+| maxVariableBorrowRate | 87.5 % |
+| baseVariableBorrowRate | 0 % |
+| variableRateSlope1 | 2.5 % |
+| variableRateSlope2 | 85 % |
+| interestRate | ![ir](/.assets/a796dfa2aa6c13fc95e8d4cc38800ce1a1aa4517.svg) |
+| eMode.label | ETH correlated |
+| eMode.ltv | 93.5 % |
+| eMode.liquidationThreshold | 95.5 % |
+| eMode.liquidationBonus | 1 % |
+| eMode.priceSource | 0x0000000000000000000000000000000000000000 |
+
+
+## Raw diff
+
+```json
+{
+ "eModes": {
+ "1": {
+ "from": null,
+ "to": {
+ "eModeCategory": 1,
+ "label": "ETH correlated",
+ "liquidationBonus": 10100,
+ "liquidationThreshold": 9550,
+ "ltv": 9350,
+ "priceSource": "0x0000000000000000000000000000000000000000"
+ }
+ }
+ },
+ "reserves": {
+ "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": {
+ "from": null,
+ "to": {
+ "aToken": "0xC035a7cf15375cE2706766804551791aD035E0C2",
+ "aTokenImpl": "0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2",
+ "aTokenName": "Aave Ethereum Lido wstETH",
+ "aTokenSymbol": "aEthLidowstETH",
+ "aTokenUnderlyingBalance": "100000000000000000",
+ "borrowCap": 12000,
+ "borrowingEnabled": true,
+ "debtCeiling": 0,
+ "decimals": 18,
+ "eModeCategory": 1,
+ "interestRateStrategy": "0x6642dcAaBc80807DD083c66a301d308568CBcA3D",
+ "isActive": true,
+ "isBorrowableInIsolation": false,
+ "isFlashloanable": true,
+ "isFrozen": false,
+ "isPaused": false,
+ "isSiloed": false,
+ "liquidationBonus": 10600,
+ "liquidationProtocolFee": 1000,
+ "liquidationThreshold": 8100,
+ "ltv": 8000,
+ "oracle": "0xB4aB0c94159bc2d8C133946E7241368fc2F2a010",
+ "oracleDecimals": 8,
+ "oracleDescription": "Capped wstETH / stETH(ETH) / USD",
+ "oracleLatestAnswer": 409186272913,
+ "reserveFactor": 500,
+ "stableBorrowRateEnabled": false,
+ "stableDebtToken": "0x3d0Fd161363b327C704b013a9E63a8Cc03Bec1c4",
+ "stableDebtTokenImpl": "0x36284fED68f802c5733432c3306D8e92c504a243",
+ "stableDebtTokenName": "Aave Ethereum Lido Stable Debt wstETH",
+ "stableDebtTokenSymbol": "stableDebtEthLidowstETH",
+ "supplyCap": 650000,
+ "symbol": "wstETH",
+ "underlying": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
+ "usageAsCollateralEnabled": true,
+ "variableDebtToken": "0xE439edd2625772AA635B437C099C607B6eb7d35f",
+ "variableDebtTokenImpl": "0x3E59212c34588a63350142EFad594a20C88C2CEd",
+ "variableDebtTokenName": "Aave Ethereum Lido Variable Debt wstETH",
+ "variableDebtTokenSymbol": "variableDebtEthLidowstETH",
+ "virtualAccountingActive": true,
+ "virtualBalance": "100000000000000000"
+ }
+ },
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
+ "from": null,
+ "to": {
+ "aToken": "0xfA1fDbBD71B0aA16162D76914d69cD8CB3Ef92da",
+ "aTokenImpl": "0x7F8Fc14D462bdF93c681c1f2Fd615389bF969Fb2",
+ "aTokenName": "Aave Ethereum Lido WETH",
+ "aTokenSymbol": "aEthLidoWETH",
+ "aTokenUnderlyingBalance": "100000000000000000",
+ "borrowCap": 810000,
+ "borrowingEnabled": true,
+ "debtCeiling": 0,
+ "decimals": 18,
+ "eModeCategory": 1,
+ "interestRateStrategy": "0x6642dcAaBc80807DD083c66a301d308568CBcA3D",
+ "isActive": true,
+ "isBorrowableInIsolation": false,
+ "isFlashloanable": true,
+ "isFrozen": false,
+ "isPaused": false,
+ "isSiloed": false,
+ "liquidationBonus": 10500,
+ "liquidationProtocolFee": 1000,
+ "liquidationThreshold": 8300,
+ "ltv": 8200,
+ "oracle": "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419",
+ "oracleDecimals": 8,
+ "oracleDescription": "ETH / USD",
+ "oracleLatestAnswer": 348776950100,
+ "reserveFactor": 1000,
+ "stableBorrowRateEnabled": false,
+ "stableDebtToken": "0x97D5Cd1a26243647ddEac87183236Cf215974d30",
+ "stableDebtTokenImpl": "0x36284fED68f802c5733432c3306D8e92c504a243",
+ "stableDebtTokenName": "Aave Ethereum Lido Stable Debt WETH",
+ "stableDebtTokenSymbol": "stableDebtEthLidoWETH",
+ "supplyCap": 900000,
+ "symbol": "WETH",
+ "underlying": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
+ "usageAsCollateralEnabled": true,
+ "variableDebtToken": "0x91b7d78BF92db564221f6B5AeE744D1727d1Dd1e",
+ "variableDebtTokenImpl": "0x3E59212c34588a63350142EFad594a20C88C2CEd",
+ "variableDebtTokenName": "Aave Ethereum Lido Variable Debt WETH",
+ "variableDebtTokenSymbol": "variableDebtEthLidoWETH",
+ "virtualAccountingActive": true,
+ "virtualBalance": "100000000000000000"
+ }
+ }
+ },
+ "strategies": {
+ "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": {
+ "from": null,
+ "to": {
+ "address": "0x6642dcAaBc80807DD083c66a301d308568CBcA3D",
+ "baseVariableBorrowRate": "0",
+ "maxVariableBorrowRate": "885000000000000000000000000",
+ "optimalUsageRatio": "450000000000000000000000000",
+ "variableRateSlope1": "35000000000000000000000000",
+ "variableRateSlope2": "850000000000000000000000000"
+ }
+ },
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
+ "from": null,
+ "to": {
+ "address": "0x6642dcAaBc80807DD083c66a301d308568CBcA3D",
+ "baseVariableBorrowRate": "0",
+ "maxVariableBorrowRate": "875000000000000000000000000",
+ "optimalUsageRatio": "900000000000000000000000000",
+ "variableRateSlope1": "25000000000000000000000000",
+ "variableRateSlope2": "850000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_ACIAdAstra_20240506_before_AaveV3Ethereum_ACIAdAstra_20240506_after.md b/diffs/AaveV3Ethereum_ACIAdAstra_20240506_before_AaveV3Ethereum_ACIAdAstra_20240506_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_ACIAdAstra_20240506_before_AaveV3Ethereum_ACIAdAstra_20240506_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_AaveV31CantinaCompetition_20240503_before_AaveV3Ethereum_AaveV31CantinaCompetition_20240503_after.md b/diffs/AaveV3Ethereum_AaveV31CantinaCompetition_20240503_before_AaveV3Ethereum_AaveV31CantinaCompetition_20240503_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_AaveV31CantinaCompetition_20240503_before_AaveV3Ethereum_AaveV31CantinaCompetition_20240503_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_GHOCrossChainLaunch_20240528_before_AaveV3Ethereum_GHOCrossChainLaunch_20240528_after.md b/diffs/AaveV3Ethereum_GHOCrossChainLaunch_20240528_before_AaveV3Ethereum_GHOCrossChainLaunch_20240528_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_GHOCrossChainLaunch_20240528_before_AaveV3Ethereum_GHOCrossChainLaunch_20240528_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index a60099931..000000000
--- a/diffs/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### sDAI ([0x83F20F44975D03b1b09e64809B757c47f942BEeA](https://etherscan.io/address/0x83F20F44975D03b1b09e64809B757c47f942BEeA))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 63 % | 75 % |
-| liquidationThreshold | 77 % | 78 % |
-
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x83F20F44975D03b1b09e64809B757c47f942BEeA": {
- "liquidationThreshold": {
- "from": 7700,
- "to": 7800
- },
- "ltv": {
- "from": 6300,
- "to": 7500
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_GhoStewardUpdate_20240602_before_AaveV3Ethereum_GhoStewardUpdate_20240602_after.md b/diffs/AaveV3Ethereum_GhoStewardUpdate_20240602_before_AaveV3Ethereum_GhoStewardUpdate_20240602_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_GhoStewardUpdate_20240602_before_AaveV3Ethereum_GhoStewardUpdate_20240602_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_LlamariskRiskProvider_20240421_before_AaveV3Ethereum_LlamariskRiskProvider_20240421_after.md b/diffs/AaveV3Ethereum_LlamariskRiskProvider_20240421_before_AaveV3Ethereum_LlamariskRiskProvider_20240421_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_LlamariskRiskProvider_20240421_before_AaveV3Ethereum_LlamariskRiskProvider_20240421_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md
new file mode 100644
index 000000000..08c7d0147
--- /dev/null
+++ b/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md
@@ -0,0 +1,2126 @@
+## Reserve changes
+
+### Reserve altered
+
+#### 1INCH ([0x111111111117dC0aa78b770fA6A738034120C302](https://etherscan.io/address/0x111111111117dC0aa78b770fA6A738034120C302))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### UNI ([0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984](https://etherscan.io/address/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4](https://etherscan.io/address/0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4) |
+| baseStableBorrowRate | null | 60000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 70000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 40000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### FXS ([0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0](https://etherscan.io/address/0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### GHO ([0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f](https://etherscan.io/address/0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484](https://etherscan.io/address/0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484) |
+| baseStableBorrowRate | null | 0 |
+| baseVariableBorrowRate | null | 70000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 0 |
+| maxExcessUsageRatio | null | 0 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 0 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 0 |
+| variableRateSlope2 | null | 0 |
+
+
+#### USDe ([0x4c9EDD5852cd905f086C759E8383e09bff1E68B3](https://etherscan.io/address/0x4c9EDD5852cd905f086C759E8383e09bff1E68B3))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x4011fcd421b9E90f131B164EC1d162DBE269621C](https://etherscan.io/address/0x4011fcd421b9E90f131B164EC1d162DBE269621C) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 90000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 11,125,899.5309 LINK [11125899530945508596356169] | 11,126,104.0635 LINK [11126104063542685827584126] |
+| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 70000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### LDO ([0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32](https://etherscan.io/address/0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 2,161,079.6517 LUSD [2161079651705465362890767] | 2,134,903.0420 LUSD [2134903042058712358109415] |
+| address | null | [0x2B3Ed91C6667d808b0401f439c4859ea635c6862](https://etherscan.io/address/0x2B3Ed91C6667d808b0401f439c4859ea635c6862) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 870000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 870000000000000000000000000 |
+
+
+#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 21,971,804.3160 DAI [21971804316083981578633223] | 20,843,981.8022 DAI [20843981802212898363345750] |
+| address | null | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://etherscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 80000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 920000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 4,836,545.8135 PYUSD [4836545813514] | 4,716,686.9355 PYUSD [4716686935507] |
+| address | null | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### AAVE ([0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9](https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 70000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D](https://etherscan.io/address/0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D) |
+| baseStableBorrowRate | null | 75000000000000000000000000 |
+| baseVariableBorrowRate | null | 2500000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 45000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### sDAI ([0x83F20F44975D03b1b09e64809B757c47f942BEeA](https://etherscan.io/address/0x83F20F44975D03b1b09e64809B757c47f942BEeA))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xdef8F50155A6cf21181E29E400E8CffAE2d50968](https://etherscan.io/address/0xdef8F50155A6cf21181E29E400E8CffAE2d50968) |
+| baseStableBorrowRate | null | 80000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 50000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 50000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xA7D9302346d4C35724821cf98966B2257c9683c6](https://etherscan.io/address/0xA7D9302346d4C35724821cf98966B2257c9683c6) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### sUSDe ([0x9D39A5DE30e57443BfF2A8307A4256c8797A3497](https://etherscan.io/address/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x36d32fD7a72AD600be60Ccb71D3718E455025CaA](https://etherscan.io/address/0x36d32fD7a72AD600be60Ccb71D3718E455025CaA) |
+| baseStableBorrowRate | null | 0 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 0 |
+| variableRateSlope2 | null | 0 |
+
+
+#### MKR ([0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2](https://etherscan.io/address/0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 223,439,837.6862 USDC [223439837686233] | 221,939,837.6862 USDC [221939837686234] |
+| address | null | [0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f](https://etherscan.io/address/0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 80000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 920000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 600000000000000000000000000 |
+
+
+#### ETHx ([0xA35b1B31Ce002FBF2058D22F30f95D405200A15b](https://etherscan.io/address/0xA35b1B31Ce002FBF2058D22F30f95D405200A15b))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) |
+| baseStableBorrowRate | null | 70000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### STG ([0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6](https://etherscan.io/address/0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### cbETH ([0xBe9895146f7AF43049ca1c1AE358B0541Ea49704](https://etherscan.io/address/0xBe9895146f7AF43049ca1c1AE358B0541Ea49704))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 70000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### SNX ([0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F](https://etherscan.io/address/0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E](https://etherscan.io/address/0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E) |
+| baseStableBorrowRate | null | 180000000000000000000000000 |
+| baseVariableBorrowRate | null | 30000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 150000000000000000000000000 |
+| stableRateSlope2 | null | 1000000000000000000000000000 |
+| variableRateSlope1 | null | 150000000000000000000000000 |
+| variableRateSlope2 | null | 1000000000000000000000000000 |
+
+
+#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 138,560.7141 WETH [138560714113035891077908] | 138,687.9880 WETH [138687988094400170720313] |
+| address | null | [0x42ec99A020B78C449d17d93bC4c89e0189B5811d](https://etherscan.io/address/0x42ec99A020B78C449d17d93bC4c89e0189B5811d) |
+| baseStableBorrowRate | null | 57000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 27000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### ENS ([0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72](https://etherscan.io/address/0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### weETH ([0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee](https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1](https://etherscan.io/address/0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1) |
+| baseStableBorrowRate | null | 70000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 650000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 350000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### RPL ([0xD33526068D116cE69F19A9ee46F0bd304F21A51f](https://etherscan.io/address/0xD33526068D116cE69F19A9ee46F0bd304F21A51f))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://etherscan.io/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) |
+| baseStableBorrowRate | null | 95000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 85000000000000000000000000 |
+| stableRateSlope2 | null | 870000000000000000000000000 |
+| variableRateSlope1 | null | 85000000000000000000000000 |
+| variableRateSlope2 | null | 870000000000000000000000000 |
+
+
+#### CRV ([0xD533a949740bb3306d119CC777fa900bA034cd52](https://etherscan.io/address/0xD533a949740bb3306d119CC777fa900bA034cd52))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14](https://etherscan.io/address/0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14) |
+| baseStableBorrowRate | null | 170000000000000000000000000 |
+| baseVariableBorrowRate | null | 30000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 300000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 700000000000000000000000000 |
+| stableRateSlope1 | null | 80000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 140000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### rETH ([0xae78736Cd615f374D3085123A210448E74Fc6393](https://etherscan.io/address/0xae78736Cd615f374D3085123A210448E74Fc6393))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 70000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### BAL ([0xba100000625a3754423978a60c9317c58a424e3D](https://etherscan.io/address/0xba100000625a3754423978a60c9317c58a424e3D))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xd9d85499449f26d2A2c240defd75314f23920089](https://etherscan.io/address/0xd9d85499449f26d2A2c240defd75314f23920089) |
+| baseStableBorrowRate | null | 270000000000000000000000000 |
+| baseVariableBorrowRate | null | 50000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 220000000000000000000000000 |
+| stableRateSlope2 | null | 1500000000000000000000000000 |
+| variableRateSlope1 | null | 220000000000000000000000000 |
+| variableRateSlope2 | null | 1500000000000000000000000000 |
+
+
+#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 319,566,787.3040 USDT [319566787304072] | 317,566,787.3040 USDT [317566787304072] |
+| address | null | [0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601](https://etherscan.io/address/0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 80000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 920000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 720000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### KNC ([0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202](https://etherscan.io/address/0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### osETH ([0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38](https://etherscan.io/address/0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) |
+| baseStableBorrowRate | null | 70000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x111111111117dC0aa78b770fA6A738034120C302": {
+ "address": {
+ "from": null,
+ "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984": {
+ "address": {
+ "from": null,
+ "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
+ "address": {
+ "from": null,
+ "to": "0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "60000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0": {
+ "address": {
+ "from": null,
+ "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f": {
+ "address": {
+ "from": null,
+ "to": "0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "0"
+ }
+ },
+ "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": {
+ "address": {
+ "from": null,
+ "to": "0x4011fcd421b9E90f131B164EC1d162DBE269621C"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x514910771AF9Ca656af840dff83E8264EcF986CA": {
+ "aTokenUnderlyingBalance": {
+ "from": "11125899530945508596356169",
+ "to": "11126104063542685827584126"
+ },
+ "address": {
+ "from": null,
+ "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32": {
+ "address": {
+ "from": null,
+ "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
+ "aTokenUnderlyingBalance": {
+ "from": "2161079651705465362890767",
+ "to": "2134903042058712358109415"
+ },
+ "address": {
+ "from": null,
+ "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ }
+ },
+ "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
+ "aTokenUnderlyingBalance": {
+ "from": "21971804316083981578633223",
+ "to": "20843981802212898363345750"
+ },
+ "address": {
+ "from": null,
+ "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "920000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": {
+ "aTokenUnderlyingBalance": {
+ "from": 4836545813514,
+ "to": 4716686935507
+ },
+ "address": {
+ "from": null,
+ "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9": {
+ "address": {
+ "from": null,
+ "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": {
+ "address": {
+ "from": null,
+ "to": "0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "75000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "2500000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "45000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x83F20F44975D03b1b09e64809B757c47f942BEeA": {
+ "address": {
+ "from": null,
+ "to": "0xdef8F50155A6cf21181E29E400E8CffAE2d50968"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
+ "address": {
+ "from": null,
+ "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497": {
+ "address": {
+ "from": null,
+ "to": "0x36d32fD7a72AD600be60Ccb71D3718E455025CaA"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "0"
+ }
+ },
+ "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2": {
+ "address": {
+ "from": null,
+ "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
+ "aTokenUnderlyingBalance": {
+ "from": 223439837686233,
+ "to": 221939837686234
+ },
+ "address": {
+ "from": null,
+ "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "920000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ }
+ },
+ "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b": {
+ "address": {
+ "from": null,
+ "to": "0x48AF11111764E710fcDcE2750db848C63edab57B"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6": {
+ "address": {
+ "from": null,
+ "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704": {
+ "address": {
+ "from": null,
+ "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F": {
+ "address": {
+ "from": null,
+ "to": "0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "180000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "30000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "150000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "150000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ }
+ },
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
+ "aTokenUnderlyingBalance": {
+ "from": "138560714113035891077908",
+ "to": "138687988094400170720313"
+ },
+ "address": {
+ "from": null,
+ "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "57000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "27000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72": {
+ "address": {
+ "from": null,
+ "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": {
+ "address": {
+ "from": null,
+ "to": "0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "650000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "350000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xD33526068D116cE69F19A9ee46F0bd304F21A51f": {
+ "address": {
+ "from": null,
+ "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "95000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "85000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "85000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ }
+ },
+ "0xD533a949740bb3306d119CC777fa900bA034cd52": {
+ "address": {
+ "from": null,
+ "to": "0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "170000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "30000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "300000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "700000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "140000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xae78736Cd615f374D3085123A210448E74Fc6393": {
+ "address": {
+ "from": null,
+ "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xba100000625a3754423978a60c9317c58a424e3D": {
+ "address": {
+ "from": null,
+ "to": "0xd9d85499449f26d2A2c240defd75314f23920089"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "270000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "220000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "220000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ }
+ },
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
+ "aTokenUnderlyingBalance": {
+ "from": 319566787304072,
+ "to": 317566787304072
+ },
+ "address": {
+ "from": null,
+ "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "920000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "720000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202": {
+ "address": {
+ "from": null,
+ "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38": {
+ "address": {
+ "from": null,
+ "to": "0x48AF11111764E710fcDcE2750db848C63edab57B"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": {
+ "address": {
+ "from": null,
+ "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_before_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_after.md b/diffs/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_before_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_after.md
deleted file mode 100644
index 871e78e1d..000000000
--- a/diffs/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_before_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_after.md
+++ /dev/null
@@ -1,134 +0,0 @@
-## Reserve changes
-
-### Reserves added
-
-#### sUSDe ([0x9D39A5DE30e57443BfF2A8307A4256c8797A3497](https://etherscan.io/address/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497))
-
-| description | value |
-| --- | --- |
-| decimals | 18 |
-| isActive | true |
-| isFrozen | false |
-| supplyCap | 85,000,000 sUSDe |
-| borrowCap | 0 sUSDe |
-| debtCeiling | 40,000,000 $ |
-| isSiloed | false |
-| isFlashloanable | true |
-| eModeCategory | 0 |
-| oracle | [0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A](https://etherscan.io/address/0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A) |
-| oracleDecimals | 8 |
-| oracleDescription | Capped sUSDe / USDe / USD |
-| oracleLatestAnswer | 1.08292481 |
-| usageAsCollateralEnabled | true |
-| ltv | 72 % |
-| liquidationThreshold | 75 % |
-| liquidationBonus | 8.5 % |
-| liquidationProtocolFee | 10 % |
-| reserveFactor | 20 % |
-| aToken | [0x4579a27aF00A62C0EB156349f31B345c08386419](https://etherscan.io/address/0x4579a27aF00A62C0EB156349f31B345c08386419) |
-| aTokenImpl | [0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d](https://etherscan.io/address/0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d) |
-| variableDebtToken | [0xeFFDE9BFA8EC77c14C364055a200746d6e12BeD6](https://etherscan.io/address/0xeFFDE9BFA8EC77c14C364055a200746d6e12BeD6) |
-| variableDebtTokenImpl | [0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6](https://etherscan.io/address/0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6) |
-| stableDebtToken | [0xc9335dE638f4C96a8330b2FFc44353Bab58774e3](https://etherscan.io/address/0xc9335dE638f4C96a8330b2FFc44353Bab58774e3) |
-| stableDebtTokenImpl | [0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57](https://etherscan.io/address/0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57) |
-| borrowingEnabled | false |
-| stableBorrowRateEnabled | false |
-| isBorrowableInIsolation | false |
-| interestRateStrategy | [0x42ec99A020B78C449d17d93bC4c89e0189B5811d](https://etherscan.io/address/0x42ec99A020B78C449d17d93bC4c89e0189B5811d) |
-| liquidityIndex | 1 |
-| variableBorrowIndex | 1 |
-| aTokenName | Aave Ethereum sUSDe |
-| aTokenSymbol | aEthsUSDe |
-| currentLiquidityRate | 0 % |
-| currentVariableBorrowRate | 0 % |
-| isPaused | false |
-| stableDebtTokenName | Aave Ethereum Stable Debt sUSDe |
-| stableDebtTokenSymbol | stableDebtEthsUSDe |
-| variableDebtTokenName | Aave Ethereum Variable Debt sUSDe |
-| variableDebtTokenSymbol | variableDebtEthsUSDe |
-| optimalUsageRatio | 90 % |
-| maxExcessStableToTotalDebtRatio | 100 % |
-| maxExcessUsageRatio | 10 % |
-| optimalStableToTotalDebtRatio | 0 % |
-| baseVariableBorrowRate | 0 % |
-| variableRateSlope1 | 0 % |
-| variableRateSlope2 | 0 % |
-| baseStableBorrowRate | 0 % |
-| stableRateSlope1 | 0 % |
-| stableRateSlope2 | 0 % |
-| interestRate | ![ir](/.assets/a3461acfe57a779335e63f45d89078bcde2c101b.svg) |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497": {
- "from": null,
- "to": {
- "aToken": "0x4579a27aF00A62C0EB156349f31B345c08386419",
- "aTokenImpl": "0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d",
- "aTokenName": "Aave Ethereum sUSDe",
- "aTokenSymbol": "aEthsUSDe",
- "borrowCap": 0,
- "borrowingEnabled": false,
- "currentLiquidityRate": 0,
- "currentVariableBorrowRate": 0,
- "debtCeiling": 4000000000,
- "decimals": 18,
- "eModeCategory": 0,
- "interestRateStrategy": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d",
- "isActive": true,
- "isBorrowableInIsolation": false,
- "isFlashloanable": true,
- "isFrozen": false,
- "isPaused": false,
- "isSiloed": false,
- "liquidationBonus": 10850,
- "liquidationProtocolFee": 1000,
- "liquidationThreshold": 7500,
- "liquidityIndex": "1000000000000000000000000000",
- "ltv": 7200,
- "oracle": "0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A",
- "oracleDecimals": 8,
- "oracleDescription": "Capped sUSDe / USDe / USD",
- "oracleLatestAnswer": 108292481,
- "reserveFactor": 2000,
- "stableBorrowRateEnabled": false,
- "stableDebtToken": "0xc9335dE638f4C96a8330b2FFc44353Bab58774e3",
- "stableDebtTokenImpl": "0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57",
- "stableDebtTokenName": "Aave Ethereum Stable Debt sUSDe",
- "stableDebtTokenSymbol": "stableDebtEthsUSDe",
- "supplyCap": 85000000,
- "symbol": "sUSDe",
- "underlying": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497",
- "usageAsCollateralEnabled": true,
- "variableBorrowIndex": "1000000000000000000000000000",
- "variableDebtToken": "0xeFFDE9BFA8EC77c14C364055a200746d6e12BeD6",
- "variableDebtTokenImpl": "0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6",
- "variableDebtTokenName": "Aave Ethereum Variable Debt sUSDe",
- "variableDebtTokenSymbol": "variableDebtEthsUSDe"
- }
- }
- },
- "strategies": {
- "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497": {
- "from": null,
- "to": {
- "address": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d",
- "baseStableBorrowRate": 0,
- "baseVariableBorrowRate": 0,
- "maxExcessStableToTotalDebtRatio": "1000000000000000000000000000",
- "maxExcessUsageRatio": "100000000000000000000000000",
- "optimalStableToTotalDebtRatio": 0,
- "optimalUsageRatio": "900000000000000000000000000",
- "stableRateSlope1": 0,
- "stableRateSlope2": 0,
- "variableRateSlope1": 0,
- "variableRateSlope2": 0
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_before_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_after.md b/diffs/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_before_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_after.md
deleted file mode 100644
index 3e3bd04bc..000000000
--- a/diffs/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_before_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_after.md
+++ /dev/null
@@ -1,134 +0,0 @@
-## Reserve changes
-
-### Reserves added
-
-#### USDe ([0x4c9EDD5852cd905f086C759E8383e09bff1E68B3](https://etherscan.io/address/0x4c9EDD5852cd905f086C759E8383e09bff1E68B3))
-
-| description | value |
-| --- | --- |
-| decimals | 18 |
-| isActive | true |
-| isFrozen | false |
-| supplyCap | 80,000,000 USDe |
-| borrowCap | 72,000,000 USDe |
-| debtCeiling | 40,000,000 $ |
-| isSiloed | false |
-| isFlashloanable | true |
-| eModeCategory | 0 |
-| oracle | [0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17](https://etherscan.io/address/0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17) |
-| oracleDecimals | 8 |
-| oracleDescription | Capped USDe / USD |
-| oracleLatestAnswer | 1.00079999 |
-| usageAsCollateralEnabled | true |
-| ltv | 72 % |
-| liquidationThreshold | 75 % |
-| liquidationBonus | 8.5 % |
-| liquidationProtocolFee | 10 % |
-| reserveFactor | 25 % |
-| aToken | [0x4F5923Fc5FD4a93352581b38B7cD26943012DECF](https://etherscan.io/address/0x4F5923Fc5FD4a93352581b38B7cD26943012DECF) |
-| aTokenImpl | [0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d](https://etherscan.io/address/0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d) |
-| variableDebtToken | [0x015396E1F286289aE23a762088E863b3ec465145](https://etherscan.io/address/0x015396E1F286289aE23a762088E863b3ec465145) |
-| variableDebtTokenImpl | [0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6](https://etherscan.io/address/0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6) |
-| stableDebtToken | [0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38](https://etherscan.io/address/0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38) |
-| stableDebtTokenImpl | [0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57](https://etherscan.io/address/0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57) |
-| borrowingEnabled | true |
-| stableBorrowRateEnabled | false |
-| isBorrowableInIsolation | true |
-| interestRateStrategy | [0x4011fcd421b9E90f131B164EC1d162DBE269621C](https://etherscan.io/address/0x4011fcd421b9E90f131B164EC1d162DBE269621C) |
-| liquidityIndex | 1 |
-| variableBorrowIndex | 1 |
-| aTokenName | Aave Ethereum USDe |
-| aTokenSymbol | aEthUSDe |
-| currentLiquidityRate | 0 % |
-| currentVariableBorrowRate | 0 % |
-| isPaused | false |
-| stableDebtTokenName | Aave Ethereum Stable Debt USDe |
-| stableDebtTokenSymbol | stableDebtEthUSDe |
-| variableDebtTokenName | Aave Ethereum Variable Debt USDe |
-| variableDebtTokenSymbol | variableDebtEthUSDe |
-| optimalUsageRatio | 80 % |
-| maxExcessStableToTotalDebtRatio | 100 % |
-| maxExcessUsageRatio | 20 % |
-| optimalStableToTotalDebtRatio | 0 % |
-| baseVariableBorrowRate | 0 % |
-| variableRateSlope1 | 9 % |
-| variableRateSlope2 | 75 % |
-| baseStableBorrowRate | 9 % |
-| stableRateSlope1 | 9 % |
-| stableRateSlope2 | 75 % |
-| interestRate | ![ir](/.assets/a2ff7054b21a6d938826bbea32b5e589c6a0c8f7.svg) |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": {
- "from": null,
- "to": {
- "aToken": "0x4F5923Fc5FD4a93352581b38B7cD26943012DECF",
- "aTokenImpl": "0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d",
- "aTokenName": "Aave Ethereum USDe",
- "aTokenSymbol": "aEthUSDe",
- "borrowCap": 72000000,
- "borrowingEnabled": true,
- "currentLiquidityRate": 0,
- "currentVariableBorrowRate": 0,
- "debtCeiling": 4000000000,
- "decimals": 18,
- "eModeCategory": 0,
- "interestRateStrategy": "0x4011fcd421b9E90f131B164EC1d162DBE269621C",
- "isActive": true,
- "isBorrowableInIsolation": true,
- "isFlashloanable": true,
- "isFrozen": false,
- "isPaused": false,
- "isSiloed": false,
- "liquidationBonus": 10850,
- "liquidationProtocolFee": 1000,
- "liquidationThreshold": 7500,
- "liquidityIndex": "1000000000000000000000000000",
- "ltv": 7200,
- "oracle": "0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17",
- "oracleDecimals": 8,
- "oracleDescription": "Capped USDe / USD",
- "oracleLatestAnswer": 100079999,
- "reserveFactor": 2500,
- "stableBorrowRateEnabled": false,
- "stableDebtToken": "0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38",
- "stableDebtTokenImpl": "0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57",
- "stableDebtTokenName": "Aave Ethereum Stable Debt USDe",
- "stableDebtTokenSymbol": "stableDebtEthUSDe",
- "supplyCap": 80000000,
- "symbol": "USDe",
- "underlying": "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3",
- "usageAsCollateralEnabled": true,
- "variableBorrowIndex": "1000000000000000000000000000",
- "variableDebtToken": "0x015396E1F286289aE23a762088E863b3ec465145",
- "variableDebtTokenImpl": "0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6",
- "variableDebtTokenName": "Aave Ethereum Variable Debt USDe",
- "variableDebtTokenSymbol": "variableDebtEthUSDe"
- }
- }
- },
- "strategies": {
- "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": {
- "from": null,
- "to": {
- "address": "0x4011fcd421b9E90f131B164EC1d162DBE269621C",
- "baseStableBorrowRate": "90000000000000000000000000",
- "baseVariableBorrowRate": 0,
- "maxExcessStableToTotalDebtRatio": "1000000000000000000000000000",
- "maxExcessUsageRatio": "200000000000000000000000000",
- "optimalStableToTotalDebtRatio": 0,
- "optimalUsageRatio": "800000000000000000000000000",
- "stableRateSlope1": "90000000000000000000000000",
- "stableRateSlope2": "750000000000000000000000000",
- "variableRateSlope1": "90000000000000000000000000",
- "variableRateSlope2": "750000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_before_AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_after.md b/diffs/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_before_AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_after.md
deleted file mode 100644
index a6a32e126..000000000
--- a/diffs/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_before_AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_after.md
+++ /dev/null
@@ -1,139 +0,0 @@
-## Reserve changes
-
-### Reserves added
-
-#### ETHx ([0xA35b1B31Ce002FBF2058D22F30f95D405200A15b](https://etherscan.io/address/0xA35b1B31Ce002FBF2058D22F30f95D405200A15b))
-
-| description | value |
-| --- | --- |
-| decimals | 18 |
-| isActive | true |
-| isFrozen | false |
-| supplyCap | 3,200 ETHx |
-| borrowCap | 320 ETHx |
-| debtCeiling | 0 $ |
-| isSiloed | false |
-| isFlashloanable | true |
-| eModeCategory | 1 |
-| oracle | [0xD6270dAabFe4862306190298C2B48fed9e15C847](https://etherscan.io/address/0xD6270dAabFe4862306190298C2B48fed9e15C847) |
-| oracleDecimals | 8 |
-| oracleDescription | Capped ethX / ETH / USD |
-| oracleLatestAnswer | 3913.42547237 |
-| usageAsCollateralEnabled | true |
-| ltv | 74.5 % |
-| liquidationThreshold | 77 % |
-| liquidationBonus | 7.5 % |
-| liquidationProtocolFee | 10 % |
-| reserveFactor | 15 % |
-| aToken | [0x4F5923Fc5FD4a93352581b38B7cD26943012DECF](https://etherscan.io/address/0x4F5923Fc5FD4a93352581b38B7cD26943012DECF) |
-| aTokenImpl | [0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d](https://etherscan.io/address/0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d) |
-| variableDebtToken | [0x015396E1F286289aE23a762088E863b3ec465145](https://etherscan.io/address/0x015396E1F286289aE23a762088E863b3ec465145) |
-| variableDebtTokenImpl | [0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6](https://etherscan.io/address/0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6) |
-| stableDebtToken | [0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38](https://etherscan.io/address/0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38) |
-| stableDebtTokenImpl | [0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57](https://etherscan.io/address/0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57) |
-| borrowingEnabled | true |
-| stableBorrowRateEnabled | false |
-| isBorrowableInIsolation | false |
-| interestRateStrategy | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) |
-| liquidityIndex | 1 |
-| variableBorrowIndex | 1 |
-| aTokenName | Aave Ethereum ETHx |
-| aTokenSymbol | aEthETHx |
-| currentLiquidityRate | 0 % |
-| currentVariableBorrowRate | 0 % |
-| isPaused | false |
-| stableDebtTokenName | Aave Ethereum Stable Debt ETHx |
-| stableDebtTokenSymbol | stableDebtEthETHx |
-| variableDebtTokenName | Aave Ethereum Variable Debt ETHx |
-| variableDebtTokenSymbol | variableDebtEthETHx |
-| optimalUsageRatio | 45 % |
-| maxExcessStableToTotalDebtRatio | 100 % |
-| maxExcessUsageRatio | 55 % |
-| optimalStableToTotalDebtRatio | 0 % |
-| baseVariableBorrowRate | 0 % |
-| variableRateSlope1 | 7 % |
-| variableRateSlope2 | 300 % |
-| baseStableBorrowRate | 7 % |
-| stableRateSlope1 | 0 % |
-| stableRateSlope2 | 0 % |
-| interestRate | ![ir](/.assets/aa2e8a5322392ad3d4ae80453f4e281a8da627cc.svg) |
-| eMode.label | ETH correlated |
-| eMode.ltv | 93 % |
-| eMode.liquidationThreshold | 95 % |
-| eMode.liquidationBonus | 1 % |
-| eMode.priceSource | 0x0000000000000000000000000000000000000000 |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b": {
- "from": null,
- "to": {
- "aToken": "0x4F5923Fc5FD4a93352581b38B7cD26943012DECF",
- "aTokenImpl": "0x7EfFD7b47Bfd17e52fB7559d3f924201b9DbfF3d",
- "aTokenName": "Aave Ethereum ETHx",
- "aTokenSymbol": "aEthETHx",
- "borrowCap": 320,
- "borrowingEnabled": true,
- "currentLiquidityRate": 0,
- "currentVariableBorrowRate": 0,
- "debtCeiling": 0,
- "decimals": 18,
- "eModeCategory": 1,
- "interestRateStrategy": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "isActive": true,
- "isBorrowableInIsolation": false,
- "isFlashloanable": true,
- "isFrozen": false,
- "isPaused": false,
- "isSiloed": false,
- "liquidationBonus": 10750,
- "liquidationProtocolFee": 1000,
- "liquidationThreshold": 7700,
- "liquidityIndex": "1000000000000000000000000000",
- "ltv": 7450,
- "oracle": "0xD6270dAabFe4862306190298C2B48fed9e15C847",
- "oracleDecimals": 8,
- "oracleDescription": "Capped ethX / ETH / USD",
- "oracleLatestAnswer": 391342547237,
- "reserveFactor": 1500,
- "stableBorrowRateEnabled": false,
- "stableDebtToken": "0x43Cc8AD0c223b38D9c04802bB184A2D97e497D38",
- "stableDebtTokenImpl": "0x15C5620dfFaC7c7366EED66C20Ad222DDbB1eD57",
- "stableDebtTokenName": "Aave Ethereum Stable Debt ETHx",
- "stableDebtTokenSymbol": "stableDebtEthETHx",
- "supplyCap": 3200,
- "symbol": "ETHx",
- "underlying": "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b",
- "usageAsCollateralEnabled": true,
- "variableBorrowIndex": "1000000000000000000000000000",
- "variableDebtToken": "0x015396E1F286289aE23a762088E863b3ec465145",
- "variableDebtTokenImpl": "0xaC725CB59D16C81061BDeA61041a8A5e73DA9EC6",
- "variableDebtTokenName": "Aave Ethereum Variable Debt ETHx",
- "variableDebtTokenSymbol": "variableDebtEthETHx"
- }
- }
- },
- "strategies": {
- "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b": {
- "from": null,
- "to": {
- "address": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "baseStableBorrowRate": "70000000000000000000000000",
- "baseVariableBorrowRate": 0,
- "maxExcessStableToTotalDebtRatio": "1000000000000000000000000000",
- "maxExcessUsageRatio": "550000000000000000000000000",
- "optimalStableToTotalDebtRatio": 0,
- "optimalUsageRatio": "450000000000000000000000000",
- "stableRateSlope1": 0,
- "stableRateSlope2": 0,
- "variableRateSlope1": "70000000000000000000000000",
- "variableRateSlope2": "3000000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index d0b4e0f34..000000000
--- a/diffs/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x06B1Ec378618EA736a65395eA5CAB69A2410493B](https://etherscan.io/address/0x06B1Ec378618EA736a65395eA5CAB69A2410493B) | [0x42ec99A020B78C449d17d93bC4c89e0189B5811d](https://etherscan.io/address/0x42ec99A020B78C449d17d93bC4c89e0189B5811d) |
-| variableRateSlope1 | 2.8 % | 2.7 % |
-| baseStableBorrowRate | 5.8 % | 5.7 % |
-| interestRate | ![before](/.assets/6daf9269f48389f432568255131ebe0f742fa53b.svg) | ![after](/.assets/6b6d7d3b24423799c0cb5cc8c539f10b55adce0b.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
- "interestRateStrategy": {
- "from": "0x06B1Ec378618EA736a65395eA5CAB69A2410493B",
- "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d"
- }
- }
- },
- "strategies": {
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
- "address": {
- "from": "0x06B1Ec378618EA736a65395eA5CAB69A2410493B",
- "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d"
- },
- "baseStableBorrowRate": {
- "from": "58000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "28000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_SetACIAsEmissionManager_20240620_before_AaveV3Ethereum_SetACIAsEmissionManager_20240620_after.md b/diffs/AaveV3Ethereum_SetACIAsEmissionManager_20240620_before_AaveV3Ethereum_SetACIAsEmissionManager_20240620_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_SetACIAsEmissionManager_20240620_before_AaveV3Ethereum_SetACIAsEmissionManager_20240620_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_StablecoinIRUpdates_20240424_before_AaveV3Ethereum_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Ethereum_StablecoinIRUpdates_20240424_before_AaveV3Ethereum_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index b33ad9bd1..000000000
--- a/diffs/AaveV3Ethereum_StablecoinIRUpdates_20240424_before_AaveV3Ethereum_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,217 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://etherscan.io/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) | [0x2B3Ed91C6667d808b0401f439c4859ea635c6862](https://etherscan.io/address/0x2B3Ed91C6667d808b0401f439c4859ea635c6862) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/d65fc1c821399427e01bc830bfb9f62b080e1cf4.svg) | ![after](/.assets/493bfd83b04a30726989d049ec508a95c1125601.svg) |
-
-#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://etherscan.io/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://etherscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/fb0786b31c3f97e0469558c2f0243123d139fd29.svg) | ![after](/.assets/c6b2daeac52f4baa9c74e03d4c3517af316c0dcf.svg) |
-
-#### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://etherscan.io/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 15 % | 12 % |
-| interestRate | ![before](/.assets/0d46815e8ed0eae8be98be6dac2c0a98c0d89e11.svg) | ![after](/.assets/407b4ddf44bf823497fbd83065b488b1076377c7.svg) |
-
-#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x7448ABeD12d8538efC115af4a417e3d1367180fc](https://etherscan.io/address/0x7448ABeD12d8538efC115af4a417e3d1367180fc) | [0xA7D9302346d4C35724821cf98966B2257c9683c6](https://etherscan.io/address/0xA7D9302346d4C35724821cf98966B2257c9683c6) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/ca4cf56d4a2589f2dfcd6e849a2c7551a972a3ad.svg) | ![after](/.assets/3eb1fae385bc7341ce53997ac5845618d8f1f738.svg) |
-
-#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://etherscan.io/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) | [0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f](https://etherscan.io/address/0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/0ec2865085d427ed04e5a2f5d75e7885ac1517e2.svg) | ![after](/.assets/e0300718b13efcea84612ada57a23ac130beeb9f.svg) |
-
-#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d](https://etherscan.io/address/0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d) | [0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601](https://etherscan.io/address/0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/f162feff755824776af6c5dc36827e8ad2a9c67d.svg) | ![after](/.assets/6539a675e69c99d2cee9349b371a4c57c8c60351.svg) |
-
-#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://etherscan.io/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 15 % | 12 % |
-| interestRate | ![before](/.assets/0d46815e8ed0eae8be98be6dac2c0a98c0d89e11.svg) | ![after](/.assets/407b4ddf44bf823497fbd83065b488b1076377c7.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "interestRateStrategy": {
- "from": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1",
- "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862"
- }
- },
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "interestRateStrategy": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- }
- },
- "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": {
- "interestRateStrategy": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "interestRateStrategy": {
- "from": "0x7448ABeD12d8538efC115af4a417e3d1367180fc",
- "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6"
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "interestRateStrategy": {
- "from": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521",
- "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f"
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "interestRateStrategy": {
- "from": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d",
- "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601"
- }
- },
- "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": {
- "interestRateStrategy": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- }
- }
- },
- "strategies": {
- "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": {
- "address": {
- "from": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1",
- "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
- "address": {
- "from": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0",
- "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": {
- "address": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- },
- "baseStableBorrowRate": {
- "from": "150000000000000000000000000",
- "to": "120000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x853d955aCEf822Db058eb8505911ED77F175b99e": {
- "address": {
- "from": "0x7448ABeD12d8538efC115af4a417e3d1367180fc",
- "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
- "address": {
- "from": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521",
- "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
- "address": {
- "from": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d",
- "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": {
- "address": {
- "from": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f",
- "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805"
- },
- "baseStableBorrowRate": {
- "from": "150000000000000000000000000",
- "to": "120000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_before_AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_after.md b/diffs/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_before_AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_after.md
deleted file mode 100644
index 21d7fa821..000000000
--- a/diffs/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_before_AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_after.md
+++ /dev/null
@@ -1,58 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### weETH ([0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee](https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee))
-
-| description | value before | value after |
-| --- | --- | --- |
-| supplyCap | 48,000 weETH | 84,000 weETH |
-| borrowCap | 3,200 weETH | 29,500 weETH |
-| reserveFactor | 15 % | 45 % |
-| interestRateStrategy | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) | [0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f](https://etherscan.io/address/0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f) |
-| optimalUsageRatio | 45 % | 35 % |
-| maxExcessUsageRatio | 55 % | 65 % |
-| interestRate | ![before](/.assets/aa2e8a5322392ad3d4ae80453f4e281a8da627cc.svg) | ![after](/.assets/0a3dc0cae180a27f87076f3f146ac84c1e5dae43.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": {
- "borrowCap": {
- "from": 3200,
- "to": 29500
- },
- "interestRateStrategy": {
- "from": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f"
- },
- "reserveFactor": {
- "from": 1500,
- "to": 4500
- },
- "supplyCap": {
- "from": 48000,
- "to": 84000
- }
- }
- },
- "strategies": {
- "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": {
- "address": {
- "from": "0x48AF11111764E710fcDcE2750db848C63edab57B",
- "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f"
- },
- "maxExcessUsageRatio": {
- "from": "550000000000000000000000000",
- "to": "650000000000000000000000000"
- },
- "optimalUsageRatio": {
- "from": "450000000000000000000000000",
- "to": "350000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Ethereum_V4ALServiceProviderProposal_20240614_before_AaveV3Ethereum_V4ALServiceProviderProposal_20240614_after.md b/diffs/AaveV3Ethereum_V4ALServiceProviderProposal_20240614_before_AaveV3Ethereum_V4ALServiceProviderProposal_20240614_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Ethereum_V4ALServiceProviderProposal_20240614_before_AaveV3Ethereum_V4ALServiceProviderProposal_20240614_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_AprilFinanceUpdate_20240421_before_AaveV3Gnosis_AprilFinanceUpdate_20240421_after.md b/diffs/AaveV3Gnosis_AprilFinanceUpdate_20240421_before_AaveV3Gnosis_AprilFinanceUpdate_20240421_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Gnosis_AprilFinanceUpdate_20240421_before_AaveV3Gnosis_AprilFinanceUpdate_20240421_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
deleted file mode 100644
index 2ce0945f2..000000000
--- a/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### GNO ([0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb](https://gnosisscan.io/address/0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 45 % | 48 % |
-| liquidationThreshold | 50 % | 53 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb": {
- "liquidationThreshold": {
- "from": 5000,
- "to": 5300
- },
- "ltv": {
- "from": 4500,
- "to": 4800
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index e1e9ea685..000000000
--- a/diffs/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83](https://gnosisscan.io/address/0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### sDAI ([0xaf204776c7245bF4147c2612BF6e5972Ee483701](https://gnosisscan.io/address/0xaf204776c7245bF4147c2612BF6e5972Ee483701))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 63 % | 75 % |
-| liquidationThreshold | 77 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xaf204776c7245bF4147c2612BF6e5972Ee483701": {
- "liquidationThreshold": {
- "from": 7700,
- "to": 7800
- },
- "ltv": {
- "from": 6300,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 6d8ecd3d8..000000000
--- a/diffs/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1](https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xD84d86083010FB683f1e8fA3809ee8DC90A4C4DB](https://gnosisscan.io/address/0xD84d86083010FB683f1e8fA3809ee8DC90A4C4DB) | [0xD3120200c339f608C394CCF9cBAD4bABab63B5dD](https://gnosisscan.io/address/0xD3120200c339f608C394CCF9cBAD4bABab63B5dD) |
-| variableRateSlope1 | 3.3 % | 2.7 % |
-| baseStableBorrowRate | 5.3 % | 4.7 % |
-| interestRate | ![before](/.assets/1a2d00464fd0707711f315bbce0579c505aef532.svg) | ![after](/.assets/df5063c94fec0289ac8349d5c84e5a33a4a6ccf6.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1": {
- "interestRateStrategy": {
- "from": "0xD84d86083010FB683f1e8fA3809ee8DC90A4C4DB",
- "to": "0xD3120200c339f608C394CCF9cBAD4bABab63B5dD"
- }
- }
- },
- "strategies": {
- "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1": {
- "address": {
- "from": "0xD84d86083010FB683f1e8fA3809ee8DC90A4C4DB",
- "to": "0xD3120200c339f608C394CCF9cBAD4bABab63B5dD"
- },
- "baseStableBorrowRate": {
- "from": "53000000000000000000000000",
- "to": "47000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "33000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Gnosis_StablecoinIRUpdates_20240424_before_AaveV3Gnosis_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Gnosis_StablecoinIRUpdates_20240424_before_AaveV3Gnosis_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 1c60d2e8f..000000000
--- a/diffs/AaveV3Gnosis_StablecoinIRUpdates_20240424_before_AaveV3Gnosis_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,101 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83](https://gnosisscan.io/address/0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e](https://gnosisscan.io/address/0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e) | [0x7b846F0bE2A2c3434b353130B312Dd978514D04d](https://gnosisscan.io/address/0x7b846F0bE2A2c3434b353130B312Dd978514D04d) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/63d85ef2aae018346bf4ae5d47f0f379ee834a81.svg) | ![after](/.assets/9c6c2ac04f36e8884c02f7bd8e4fedeff98c9211.svg) |
-
-#### EURe ([0xcB444e90D8198415266c6a2724b7900fb12FC56E](https://gnosisscan.io/address/0xcB444e90D8198415266c6a2724b7900fb12FC56E))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x5c5eC8bf67a83d9d703DCB755B1e8D1e72Fa89E3](https://gnosisscan.io/address/0x5c5eC8bf67a83d9d703DCB755B1e8D1e72Fa89E3) | [0x83506d1B6DC58390Ca52baF0314779c2525BB814](https://gnosisscan.io/address/0x83506d1B6DC58390Ca52baF0314779c2525BB814) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/f2f95a4b4513a29b7ce19c748925854dd8f0c741.svg) | ![after](/.assets/54011ffd1c8f70f6c81bff9e84e73b6caf224f66.svg) |
-
-#### WXDAI ([0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d](https://gnosisscan.io/address/0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e](https://gnosisscan.io/address/0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e) | [0x7b846F0bE2A2c3434b353130B312Dd978514D04d](https://gnosisscan.io/address/0x7b846F0bE2A2c3434b353130B312Dd978514D04d) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/63d85ef2aae018346bf4ae5d47f0f379ee834a81.svg) | ![after](/.assets/9c6c2ac04f36e8884c02f7bd8e4fedeff98c9211.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": {
- "interestRateStrategy": {
- "from": "0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e",
- "to": "0x7b846F0bE2A2c3434b353130B312Dd978514D04d"
- }
- },
- "0xcB444e90D8198415266c6a2724b7900fb12FC56E": {
- "interestRateStrategy": {
- "from": "0x5c5eC8bf67a83d9d703DCB755B1e8D1e72Fa89E3",
- "to": "0x83506d1B6DC58390Ca52baF0314779c2525BB814"
- }
- },
- "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d": {
- "interestRateStrategy": {
- "from": "0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e",
- "to": "0x7b846F0bE2A2c3434b353130B312Dd978514D04d"
- }
- }
- },
- "strategies": {
- "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": {
- "address": {
- "from": "0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e",
- "to": "0x7b846F0bE2A2c3434b353130B312Dd978514D04d"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xcB444e90D8198415266c6a2724b7900fb12FC56E": {
- "address": {
- "from": "0x5c5eC8bf67a83d9d703DCB755B1e8D1e72Fa89E3",
- "to": "0x83506d1B6DC58390Ca52baF0314779c2525BB814"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d": {
- "address": {
- "from": "0xBAbaB9202855F1c3FC943F0d032eAb4847A92D7e",
- "to": "0x7b846F0bE2A2c3434b353130B312Dd978514D04d"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index b1d47660a..000000000
--- a/diffs/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x420000000000000000000000000000000000000A](https://andromeda-explorer.metis.io/address/0x420000000000000000000000000000000000000A))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x83e654d42f437915bf849dE04c19AAd8C5e8c01E](https://andromeda-explorer.metis.io/address/0x83e654d42f437915bf849dE04c19AAd8C5e8c01E) | [0xf043D74F1CbF798D8E9a3cB19fDf2084C275f921](https://andromeda-explorer.metis.io/address/0xf043D74F1CbF798D8E9a3cB19fDf2084C275f921) |
-| variableRateSlope1 | 3.8 % | 2.7 % |
-| baseStableBorrowRate | 6.8 % | 5.7 % |
-| interestRate | ![before](/.assets/7396caa31f7811576cb04a4e90aac9ea03560ba2.svg) | ![after](/.assets/b5b60c9a6da247fd6707dc572d95d822d367c535.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x420000000000000000000000000000000000000A": {
- "interestRateStrategy": {
- "from": "0x83e654d42f437915bf849dE04c19AAd8C5e8c01E",
- "to": "0xf043D74F1CbF798D8E9a3cB19fDf2084C275f921"
- }
- }
- },
- "strategies": {
- "0x420000000000000000000000000000000000000A": {
- "address": {
- "from": "0x83e654d42f437915bf849dE04c19AAd8C5e8c01E",
- "to": "0xf043D74F1CbF798D8E9a3cB19fDf2084C275f921"
- },
- "baseStableBorrowRate": {
- "from": "68000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "38000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_before_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_after.md b/diffs/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_before_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_after.md
deleted file mode 100644
index 73fbe8254..000000000
--- a/diffs/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_before_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_after.md
+++ /dev/null
@@ -1,57 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| isFrozen | true | false |
-| supplyCap | 20,000,000 sUSD | 7,000,000 sUSD |
-| borrowCap | 13,000,000 sUSD | 5,600,000 sUSD |
-| ltv | 0 % | 60 % |
-| liquidationThreshold | 75 % | 70 % |
-
-
-## Raw diff
-
-```json
-{
- "eModes": {
- "1": {
- "liquidationThreshold": {
- "from": 9500,
- "to": 9300
- },
- "ltv": {
- "from": 9300,
- "to": 9000
- }
- }
- },
- "reserves": {
- "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
- "borrowCap": {
- "from": 13000000,
- "to": 5600000
- },
- "isFrozen": {
- "from": true,
- "to": false
- },
- "liquidationThreshold": {
- "from": 7500,
- "to": 7000
- },
- "ltv": {
- "from": 0,
- "to": 6000
- },
- "supplyCap": {
- "from": 20000000,
- "to": 7000000
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
deleted file mode 100644
index 6fffc5678..000000000
--- a/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### OP ([0x4200000000000000000000000000000000000042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 50 % | 58 % |
-| liquidationThreshold | 60 % | 63 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x4200000000000000000000000000000000000042": {
- "liquidationThreshold": {
- "from": 6000,
- "to": 6300
- },
- "ltv": {
- "from": 5000,
- "to": 5800
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index 50f910baa..000000000
--- a/diffs/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 78 % | 75 % |
-| liquidationThreshold | 84 % | 80 % |
-
-
-#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
- "liquidationThreshold": {
- "from": 8400,
- "to": 8000
- },
- "ltv": {
- "from": 7800,
- "to": 7500
- }
- },
- "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md
new file mode 100644
index 000000000..4e737c2ca
--- /dev/null
+++ b/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md
@@ -0,0 +1,899 @@
+## Reserve changes
+
+### Reserve altered
+
+#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590](https://optimistic.etherscan.io/address/0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 35000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 600000000000000000000000000 |
+
+
+#### wstETH ([0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb](https://optimistic.etherscan.io/address/0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x6BA97468e2e6a3711a6DD05F0075d48E878c910e](https://optimistic.etherscan.io/address/0x6BA97468e2e6a3711a6DD05F0075d48E878c910e) |
+| baseStableBorrowRate | null | 55000000000000000000000000 |
+| baseVariableBorrowRate | null | 2500000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 45000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 45000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### LINK ([0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6](https://optimistic.etherscan.io/address/0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WETH ([0x4200000000000000000000000000000000000006](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000006))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x129F838C3339f64a026aeb334Ffd5d55C2E94935](https://optimistic.etherscan.io/address/0x129F838C3339f64a026aeb334Ffd5d55C2E94935) |
+| baseStableBorrowRate | null | 57000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 27000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### OP ([0x4200000000000000000000000000000000000042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WBTC ([0x68f180fcCe6836688e9084f035309E29Bf0A2095](https://optimistic.etherscan.io/address/0x68f180fcCe6836688e9084f035309E29Bf0A2095))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://optimistic.etherscan.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) |
+| baseStableBorrowRate | null | 60000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 40000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### AAVE ([0x76FB31fb4af56892A25e32cFC43De717950c9278](https://optimistic.etherscan.io/address/0x76FB31fb4af56892A25e32cFC43De717950c9278))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 1,560,827.1186 USDC [1560827118641] | 791,927.6617 USDC [791927661766] |
+| address | null | [0x049BDe04f282822a020631415b39Dc613B934894](https://optimistic.etherscan.io/address/0x049BDe04f282822a020631415b39Dc613B934894) |
+| baseStableBorrowRate | null | 110000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 100000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xd9a0344d7f661c115f73e261d0b74263386fD8c8](https://optimistic.etherscan.io/address/0xd9a0344d7f661c115f73e261d0b74263386fD8c8) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### rETH ([0x9Bcef72be871e61ED4fBbc7630889beE758eb81D](https://optimistic.etherscan.io/address/0x9Bcef72be871e61ED4fBbc7630889beE758eb81D))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x3B57B081dA6Af5e2759A57bD3211932Cb6176997](https://optimistic.etherscan.io/address/0x3B57B081dA6Af5e2759A57bD3211932Cb6176997) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 130000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x61e39832D9A138cb0e1b95F79aa827273e71c97f](https://optimistic.etherscan.io/address/0x61e39832D9A138cb0e1b95F79aa827273e71c97f) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 870000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 870000000000000000000000000 |
+
+
+#### MAI ([0xdFA46478F9e5EA86d57387849598dbFB2e964b02](https://optimistic.etherscan.io/address/0xdFA46478F9e5EA86d57387849598dbFB2e964b02))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x168Bb3f994642CEA4017b39cB691f4668da8596C](https://optimistic.etherscan.io/address/0x168Bb3f994642CEA4017b39cB691f4668da8596C) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": {
+ "address": {
+ "from": null,
+ "to": "0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "35000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ }
+ },
+ "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": {
+ "address": {
+ "from": null,
+ "to": "0x6BA97468e2e6a3711a6DD05F0075d48E878c910e"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "55000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "2500000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "45000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "45000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6": {
+ "address": {
+ "from": null,
+ "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x4200000000000000000000000000000000000006": {
+ "address": {
+ "from": null,
+ "to": "0x129F838C3339f64a026aeb334Ffd5d55C2E94935"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "57000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "27000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x4200000000000000000000000000000000000042": {
+ "address": {
+ "from": null,
+ "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x68f180fcCe6836688e9084f035309E29Bf0A2095": {
+ "address": {
+ "from": null,
+ "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "60000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x76FB31fb4af56892A25e32cFC43De717950c9278": {
+ "address": {
+ "from": null,
+ "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
+ "aTokenUnderlyingBalance": {
+ "from": 1560827118641,
+ "to": 791927661766
+ },
+ "address": {
+ "from": null,
+ "to": "0x049BDe04f282822a020631415b39Dc613B934894"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "110000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
+ "address": {
+ "from": null,
+ "to": "0xd9a0344d7f661c115f73e261d0b74263386fD8c8"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
+ "address": {
+ "from": null,
+ "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D": {
+ "address": {
+ "from": null,
+ "to": "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "130000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
+ "address": {
+ "from": null,
+ "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": {
+ "address": {
+ "from": null,
+ "to": "0x61e39832D9A138cb0e1b95F79aa827273e71c97f"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "870000000000000000000000000"
+ }
+ },
+ "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": {
+ "address": {
+ "from": null,
+ "to": "0x168Bb3f994642CEA4017b39cB691f4668da8596C"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 46c7e1e6f..000000000
--- a/diffs/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x4200000000000000000000000000000000000006](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000006))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x16F9bBeE415e519F184Fe1c09d653C6567e4eb2f](https://optimistic.etherscan.io/address/0x16F9bBeE415e519F184Fe1c09d653C6567e4eb2f) | [0x129F838C3339f64a026aeb334Ffd5d55C2E94935](https://optimistic.etherscan.io/address/0x129F838C3339f64a026aeb334Ffd5d55C2E94935) |
-| variableRateSlope1 | 3 % | 2.7 % |
-| baseStableBorrowRate | 6 % | 5.7 % |
-| interestRate | ![before](/.assets/5a987481fcd21ac926a7663682a9aa4ac8703d67.svg) | ![after](/.assets/982b4fb6e2527921645edf26069ca5a944a85de5.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x4200000000000000000000000000000000000006": {
- "interestRateStrategy": {
- "from": "0x16F9bBeE415e519F184Fe1c09d653C6567e4eb2f",
- "to": "0x129F838C3339f64a026aeb334Ffd5d55C2E94935"
- }
- }
- },
- "strategies": {
- "0x4200000000000000000000000000000000000006": {
- "address": {
- "from": "0x16F9bBeE415e519F184Fe1c09d653C6567e4eb2f",
- "to": "0x129F838C3339f64a026aeb334Ffd5d55C2E94935"
- },
- "baseStableBorrowRate": {
- "from": "60000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "30000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_SUSDRiskParametersUpdate_20240517_before_AaveV3Optimism_SUSDRiskParametersUpdate_20240517_after.md b/diffs/AaveV3Optimism_SUSDRiskParametersUpdate_20240517_before_AaveV3Optimism_SUSDRiskParametersUpdate_20240517_after.md
deleted file mode 100644
index 7a11c0d05..000000000
--- a/diffs/AaveV3Optimism_SUSDRiskParametersUpdate_20240517_before_AaveV3Optimism_SUSDRiskParametersUpdate_20240517_after.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 60 % | 0 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
- "ltv": {
- "from": 6000,
- "to": 0
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Optimism_StablecoinIRUpdates_20240424_before_AaveV3Optimism_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Optimism_StablecoinIRUpdates_20240424_before_AaveV3Optimism_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 624e1c58c..000000000
--- a/diffs/AaveV3Optimism_StablecoinIRUpdates_20240424_before_AaveV3Optimism_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,217 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x73917d0B313307D0F58659e1e524BCf0EE15c2C4](https://optimistic.etherscan.io/address/0x73917d0B313307D0F58659e1e524BCf0EE15c2C4) | [0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590](https://optimistic.etherscan.io/address/0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/e38fac88a810e729d4ab675051bce37c536eabd3.svg) | ![after](/.assets/1f3fbb6c2695906bac9d02c33714fe2e2138feef.svg) |
-
-#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xD1c2f0F2C7F6A40C8047eee410C800c3d1435D16](https://optimistic.etherscan.io/address/0xD1c2f0F2C7F6A40C8047eee410C800c3d1435D16) | [0x049BDe04f282822a020631415b39Dc613B934894](https://optimistic.etherscan.io/address/0x049BDe04f282822a020631415b39Dc613B934894) |
-| variableRateSlope1 | 13 % | 10 % |
-| baseStableBorrowRate | 14 % | 11 % |
-| interestRate | ![before](/.assets/955ed58b79c16962a99bbc7421e94ea5f2815420.svg) | ![after](/.assets/4d5d27738402b1d70639fe37c46c31345a747382.svg) |
-
-#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xcf3136a52e6a01C482EdA64d3F0242dc3DBAFa47](https://optimistic.etherscan.io/address/0xcf3136a52e6a01C482EdA64d3F0242dc3DBAFa47) | [0xd9a0344d7f661c115f73e261d0b74263386fD8c8](https://optimistic.etherscan.io/address/0xd9a0344d7f661c115f73e261d0b74263386fD8c8) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/5e292b27a90b078d7d1b7766456c23c19546e2a4.svg) | ![after](/.assets/c7ab4ff1cc6ccc4df60b3092f8d45777f4b06250.svg) |
-
-#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xdd5ee22CC6CbbB41518871D95558B648a3551b54](https://optimistic.etherscan.io/address/0xdd5ee22CC6CbbB41518871D95558B648a3551b54) | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/5f00854535bfbb5f41643954ec476f3f67788d90.svg) | ![after](/.assets/7bd60232c345d344047949a388a745537bfd3d53.svg) |
-
-#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xdd5ee22CC6CbbB41518871D95558B648a3551b54](https://optimistic.etherscan.io/address/0xdd5ee22CC6CbbB41518871D95558B648a3551b54) | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/5f00854535bfbb5f41643954ec476f3f67788d90.svg) | ![after](/.assets/7bd60232c345d344047949a388a745537bfd3d53.svg) |
-
-#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x4Fb9B5c02EC681499BD3B3a88683E15aaBDe6288](https://optimistic.etherscan.io/address/0x4Fb9B5c02EC681499BD3B3a88683E15aaBDe6288) | [0x61e39832D9A138cb0e1b95F79aa827273e71c97f](https://optimistic.etherscan.io/address/0x61e39832D9A138cb0e1b95F79aa827273e71c97f) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/b416dad7140aff0fae9c6086df2ed135c2d25a6c.svg) | ![after](/.assets/dc1a75c5e5032612b85dbe6a1473b4e06923f1b1.svg) |
-
-#### MAI ([0xdFA46478F9e5EA86d57387849598dbFB2e964b02](https://optimistic.etherscan.io/address/0xdFA46478F9e5EA86d57387849598dbFB2e964b02))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x2b5F720fBA11EeB5f2213FdF06Be9f7fB0ad1C48](https://optimistic.etherscan.io/address/0x2b5F720fBA11EeB5f2213FdF06Be9f7fB0ad1C48) | [0x168Bb3f994642CEA4017b39cB691f4668da8596C](https://optimistic.etherscan.io/address/0x168Bb3f994642CEA4017b39cB691f4668da8596C) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/8dae6206ef4795b7c2b4496958440424724f4f9e.svg) | ![after](/.assets/b9942024ef6bf374ada177bdb800a0b5a0da9647.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": {
- "interestRateStrategy": {
- "from": "0x73917d0B313307D0F58659e1e524BCf0EE15c2C4",
- "to": "0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590"
- }
- },
- "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
- "interestRateStrategy": {
- "from": "0xD1c2f0F2C7F6A40C8047eee410C800c3d1435D16",
- "to": "0x049BDe04f282822a020631415b39Dc613B934894"
- }
- },
- "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
- "interestRateStrategy": {
- "from": "0xcf3136a52e6a01C482EdA64d3F0242dc3DBAFa47",
- "to": "0xd9a0344d7f661c115f73e261d0b74263386fD8c8"
- }
- },
- "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
- "interestRateStrategy": {
- "from": "0xdd5ee22CC6CbbB41518871D95558B648a3551b54",
- "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
- }
- },
- "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
- "interestRateStrategy": {
- "from": "0xdd5ee22CC6CbbB41518871D95558B648a3551b54",
- "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
- }
- },
- "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": {
- "interestRateStrategy": {
- "from": "0x4Fb9B5c02EC681499BD3B3a88683E15aaBDe6288",
- "to": "0x61e39832D9A138cb0e1b95F79aa827273e71c97f"
- }
- },
- "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": {
- "interestRateStrategy": {
- "from": "0x2b5F720fBA11EeB5f2213FdF06Be9f7fB0ad1C48",
- "to": "0x168Bb3f994642CEA4017b39cB691f4668da8596C"
- }
- }
- },
- "strategies": {
- "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": {
- "address": {
- "from": "0x73917d0B313307D0F58659e1e524BCf0EE15c2C4",
- "to": "0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": {
- "address": {
- "from": "0xD1c2f0F2C7F6A40C8047eee410C800c3d1435D16",
- "to": "0x049BDe04f282822a020631415b39Dc613B934894"
- },
- "baseStableBorrowRate": {
- "from": "140000000000000000000000000",
- "to": "110000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- }
- },
- "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": {
- "address": {
- "from": "0xcf3136a52e6a01C482EdA64d3F0242dc3DBAFa47",
- "to": "0xd9a0344d7f661c115f73e261d0b74263386fD8c8"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": {
- "address": {
- "from": "0xdd5ee22CC6CbbB41518871D95558B648a3551b54",
- "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": {
- "address": {
- "from": "0xdd5ee22CC6CbbB41518871D95558B648a3551b54",
- "to": "0x245680a504e29c74a5907ce7c1025BF308319f92"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": {
- "address": {
- "from": "0x4Fb9B5c02EC681499BD3B3a88683E15aaBDe6288",
- "to": "0x61e39832D9A138cb0e1b95F79aa827273e71c97f"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": {
- "address": {
- "from": "0x2b5F720fBA11EeB5f2213FdF06Be9f7fB0ad1C48",
- "to": "0x168Bb3f994642CEA4017b39cB691f4668da8596C"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
deleted file mode 100644
index 3653e509e..000000000
--- a/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### stMATIC ([0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4](https://polygonscan.com/address/0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 45 % | 48 % |
-| liquidationThreshold | 56 % | 58 % |
-
-
-#### MaticX ([0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6](https://polygonscan.com/address/0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 45 % | 50 % |
-| liquidationThreshold | 58 % | 60 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4": {
- "liquidationThreshold": {
- "from": 5600,
- "to": 5800
- },
- "ltv": {
- "from": 4500,
- "to": 4800
- }
- },
- "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6": {
- "liquidationThreshold": {
- "from": 5800,
- "to": 6000
- },
- "ltv": {
- "from": 4500,
- "to": 5000
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index cc680f3d4..000000000
--- a/diffs/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- },
- "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md
new file mode 100644
index 000000000..68fc640be
--- /dev/null
+++ b/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md
@@ -0,0 +1,1355 @@
+## Reserve changes
+
+### Reserve altered
+
+#### wstETH ([0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD](https://polygonscan.com/address/0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E](https://polygonscan.com/address/0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E) |
+| baseStableBorrowRate | null | 55000000000000000000000000 |
+| baseVariableBorrowRate | null | 2500000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 45000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 45000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### SUSHI ([0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a](https://polygonscan.com/address/0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WMATIC ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://polygonscan.com/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) |
+| baseStableBorrowRate | null | 70000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 250000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 750000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 50000000000000000000000000 |
+| variableRateSlope2 | null | 1000000000000000000000000000 |
+
+
+#### CRV ([0x172370d5Cd63279eFa6d502DAB29171933a610AF](https://polygonscan.com/address/0x172370d5Cd63279eFa6d502DAB29171933a610AF))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xBefcd01681224555b74eAC87207eaF9Bc3361F59](https://polygonscan.com/address/0xBefcd01681224555b74eAC87207eaF9Bc3361F59) |
+| baseStableBorrowRate | null | 170000000000000000000000000 |
+| baseVariableBorrowRate | null | 30000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 300000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 700000000000000000000000000 |
+| stableRateSlope1 | null | 80000000000000000000000000 |
+| stableRateSlope2 | null | 3000000000000000000000000000 |
+| variableRateSlope1 | null | 140000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4](https://polygonscan.com/address/0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4) |
+| baseStableBorrowRate | null | 60000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 40000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 2,643,567.0046 USDC [2643567004699] | 2,603,628.7918 USDC [2603628791840] |
+| address | null | [0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d](https://polygonscan.com/address/0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d) |
+| baseStableBorrowRate | null | 110000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 100000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### GHST ([0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7](https://polygonscan.com/address/0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### stMATIC ([0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4](https://polygonscan.com/address/0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://polygonscan.com/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 0 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 50000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 600000000000000000000000000 |
+
+
+#### jEUR ([0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c](https://polygonscan.com/address/0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x7448ABeD12d8538efC115af4a417e3d1367180fc](https://polygonscan.com/address/0x7448ABeD12d8538efC115af4a417e3d1367180fc) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 600000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 600000000000000000000000000 |
+
+
+#### LINK ([0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39](https://polygonscan.com/address/0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 19,960.6958 WETH [19960695830512528665279] | 19,983.0246 WETH [19983024675595537664900] |
+| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://polygonscan.com/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) |
+| baseStableBorrowRate | null | 63000000000000000000000000 |
+| baseVariableBorrowRate | null | 10000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 40000000000000000000000000 |
+| stableRateSlope2 | null | 800000000000000000000000000 |
+| variableRateSlope1 | null | 33000000000000000000000000 |
+| variableRateSlope2 | null | 800000000000000000000000000 |
+
+
+#### DPI ([0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369](https://polygonscan.com/address/0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xd9d85499449f26d2A2c240defd75314f23920089](https://polygonscan.com/address/0xd9d85499449f26d2A2c240defd75314f23920089) |
+| baseStableBorrowRate | null | 120000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 100000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 1,980,378.6183 DAI [1980378618389267156685230] | 2,054,458.3857 DAI [2054458385717683583904906] |
+| address | null | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### BAL ([0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3](https://polygonscan.com/address/0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A](https://polygonscan.com/address/0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A) |
+| baseStableBorrowRate | null | 270000000000000000000000000 |
+| baseVariableBorrowRate | null | 50000000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 220000000000000000000000000 |
+| stableRateSlope2 | null | 1500000000000000000000000000 |
+| variableRateSlope1 | null | 220000000000000000000000000 |
+| variableRateSlope2 | null | 1500000000000000000000000000 |
+
+
+#### AAVE ([0xD6DF932A45C0f255f85145f286eA0b292B21C90B](https://polygonscan.com/address/0xD6DF932A45C0f255f85145f286eA0b292B21C90B))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) |
+| baseStableBorrowRate | null | 90000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 0 |
+| stableRateSlope2 | null | 0 |
+| variableRateSlope1 | null | 70000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### EURA ([0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4](https://polygonscan.com/address/0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### EURS ([0xE111178A87A3BFf0c8d18DECBa5798827539Ae99](https://polygonscan.com/address/0xE111178A87A3BFf0c8d18DECBa5798827539Ae99))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 200000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 800000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### miMATIC ([0xa3Fa99A148fA48D14Ed51d610c367C61876997F1](https://polygonscan.com/address/0xa3Fa99A148fA48D14Ed51d610c367C61876997F1))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://polygonscan.com/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 3000000000000000000000000000 |
+
+
+#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
+
+| description | value before | value after |
+| --- | --- | --- |
+| aTokenUnderlyingBalance | 4,135,239.5857 USDT [4135239585787] | 4,218,607.5364 USDT [4218607536428] |
+| address | null | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) |
+| baseStableBorrowRate | null | 100000000000000000000000000 |
+| baseVariableBorrowRate | null | 0 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 100000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 900000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 750000000000000000000000000 |
+| variableRateSlope1 | null | 90000000000000000000000000 |
+| variableRateSlope2 | null | 750000000000000000000000000 |
+
+
+#### MaticX ([0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6](https://polygonscan.com/address/0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6))
+
+| description | value before | value after |
+| --- | --- | --- |
+| address | null | [0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6](https://polygonscan.com/address/0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6) |
+| baseStableBorrowRate | null | 60000000000000000000000000 |
+| baseVariableBorrowRate | null | 2500000000000000000000000 |
+| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 |
+| maxExcessUsageRatio | null | 550000000000000000000000000 |
+| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 |
+| optimalUsageRatio | null | 450000000000000000000000000 |
+| stableRateSlope1 | null | 5000000000000000000000000 |
+| stableRateSlope2 | null | 1500000000000000000000000000 |
+| variableRateSlope1 | null | 40000000000000000000000000 |
+| variableRateSlope2 | null | 1500000000000000000000000000 |
+
+
+## Raw diff
+
+```json
+{
+ "reserves": {
+ "0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD": {
+ "address": {
+ "from": null,
+ "to": "0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "55000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "2500000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "45000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "45000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a": {
+ "address": {
+ "from": null,
+ "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": {
+ "address": {
+ "from": null,
+ "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "250000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ }
+ },
+ "0x172370d5Cd63279eFa6d502DAB29171933a610AF": {
+ "address": {
+ "from": null,
+ "to": "0xBefcd01681224555b74eAC87207eaF9Bc3361F59"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "170000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "30000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "300000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "700000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "80000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "140000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": {
+ "address": {
+ "from": null,
+ "to": "0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "60000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
+ "aTokenUnderlyingBalance": {
+ "from": 2643567004699,
+ "to": 2603628791840
+ },
+ "address": {
+ "from": null,
+ "to": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "110000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7": {
+ "address": {
+ "from": null,
+ "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4": {
+ "address": {
+ "from": null,
+ "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
+ "address": {
+ "from": null,
+ "to": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "1000000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "0"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ }
+ },
+ "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c": {
+ "address": {
+ "from": null,
+ "to": "0x7448ABeD12d8538efC115af4a417e3d1367180fc"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "600000000000000000000000000"
+ }
+ },
+ "0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39": {
+ "address": {
+ "from": null,
+ "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": {
+ "aTokenUnderlyingBalance": {
+ "from": "19960695830512528665279",
+ "to": "19983024675595537664900"
+ },
+ "address": {
+ "from": null,
+ "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "63000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "10000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "33000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ }
+ },
+ "0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369": {
+ "address": {
+ "from": null,
+ "to": "0xd9d85499449f26d2A2c240defd75314f23920089"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "120000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
+ "aTokenUnderlyingBalance": {
+ "from": "1980378618389267156685230",
+ "to": "2054458385717683583904906"
+ },
+ "address": {
+ "from": null,
+ "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3": {
+ "address": {
+ "from": null,
+ "to": "0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "270000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "50000000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "220000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "220000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ }
+ },
+ "0xD6DF932A45C0f255f85145f286eA0b292B21C90B": {
+ "address": {
+ "from": null,
+ "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "0"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "0"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "70000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4": {
+ "address": {
+ "from": null,
+ "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": {
+ "address": {
+ "from": null,
+ "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1": {
+ "address": {
+ "from": null,
+ "to": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "3000000000000000000000000000"
+ }
+ },
+ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
+ "aTokenUnderlyingBalance": {
+ "from": 4135239585787,
+ "to": 4218607536428
+ },
+ "address": {
+ "from": null,
+ "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "0"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "100000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "900000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "90000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "750000000000000000000000000"
+ }
+ },
+ "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6": {
+ "address": {
+ "from": null,
+ "to": "0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6"
+ },
+ "baseStableBorrowRate": {
+ "from": null,
+ "to": "60000000000000000000000000"
+ },
+ "baseVariableBorrowRate": {
+ "from": null,
+ "to": "2500000000000000000000000"
+ },
+ "maxExcessStableToTotalDebtRatio": {
+ "from": null,
+ "to": "800000000000000000000000000"
+ },
+ "maxExcessUsageRatio": {
+ "from": null,
+ "to": "550000000000000000000000000"
+ },
+ "optimalStableToTotalDebtRatio": {
+ "from": null,
+ "to": "200000000000000000000000000"
+ },
+ "optimalUsageRatio": {
+ "from": null,
+ "to": "450000000000000000000000000"
+ },
+ "stableRateSlope1": {
+ "from": null,
+ "to": "5000000000000000000000000"
+ },
+ "stableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ },
+ "variableRateSlope1": {
+ "from": null,
+ "to": "40000000000000000000000000"
+ },
+ "variableRateSlope2": {
+ "from": null,
+ "to": "1500000000000000000000000000"
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md b/diffs/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
deleted file mode 100644
index c15d3e2bc..000000000
--- a/diffs/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_before_AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_after.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Raw diff
-
-```json
-{}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 9f8380b17..000000000
--- a/diffs/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://polygonscan.com/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://polygonscan.com/address/0x48AF11111764E710fcDcE2750db848C63edab57B) |
-| variableRateSlope1 | 3.3 % | 2.7 % |
-| baseStableBorrowRate | 6.3 % | 5.7 % |
-| interestRate | ![before](/.assets/bc821e780dbf0cd88aa89ae21f339014e1053ceb.svg) | ![after](/.assets/7fa4b4b2fd917d2cc659935ebf8fc577c2489a8e.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": {
- "interestRateStrategy": {
- "from": "0xf6733B9842883BFE0e0a940eA2F572676af31bde",
- "to": "0x48AF11111764E710fcDcE2750db848C63edab57B"
- }
- }
- },
- "strategies": {
- "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": {
- "address": {
- "from": "0xf6733B9842883BFE0e0a940eA2F572676af31bde",
- "to": "0x48AF11111764E710fcDcE2750db848C63edab57B"
- },
- "baseStableBorrowRate": {
- "from": "63000000000000000000000000",
- "to": "57000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "33000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Polygon_StablecoinIRUpdates_20240424_before_AaveV3Polygon_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Polygon_StablecoinIRUpdates_20240424_before_AaveV3Polygon_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 20599ee33..000000000
--- a/diffs/AaveV3Polygon_StablecoinIRUpdates_20240424_before_AaveV3Polygon_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,246 +0,0 @@
-## Reserve changes
-
-### Reserve altered
-
-#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xc77576b02D74BBF9CdC26F3B86FD09d134416df2](https://polygonscan.com/address/0xc77576b02D74BBF9CdC26F3B86FD09d134416df2) | [0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d](https://polygonscan.com/address/0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d) |
-| variableRateSlope1 | 13 % | 10 % |
-| baseStableBorrowRate | 14 % | 11 % |
-| interestRate | ![before](/.assets/e8496300bba6992ef8245dbc827b240692a59ca4.svg) | ![after](/.assets/7e987a99d911a0c671ada02c5cbaaf4452cd099e.svg) |
-
-#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xAC4f9019608f3A359Ba6a576DC4deC9561D2e514](https://polygonscan.com/address/0xAC4f9019608f3A359Ba6a576DC4deC9561D2e514) | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://polygonscan.com/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 12 % | 9 % |
-| interestRate | ![before](/.assets/03014f6d7e563bf95e08a254d6612c2a1779bb37.svg) | ![after](/.assets/b1cd93851a146137f6135ff23b2cc3b71e0090d3.svg) |
-
-#### jEUR ([0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c](https://polygonscan.com/address/0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x06B1Ec378618EA736a65395eA5CAB69A2410493B](https://polygonscan.com/address/0x06B1Ec378618EA736a65395eA5CAB69A2410493B) | [0x7448ABeD12d8538efC115af4a417e3d1367180fc](https://polygonscan.com/address/0x7448ABeD12d8538efC115af4a417e3d1367180fc) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/120b3346a2da5456c1e5eeb7876b093ce7188e35.svg) | ![after](/.assets/d8ccfe20096019467f76e9e0d977ddef48043aa9.svg) |
-
-#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237](https://polygonscan.com/address/0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237) | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/249bca66f2e25caf04da3e3bc7e387fbf24599b2.svg) | ![after](/.assets/91a8fb0f99abea9b8def547797b03b4d59853df3.svg) |
-
-#### EURA ([0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4](https://polygonscan.com/address/0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260](https://polygonscan.com/address/0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260) | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/973f0be01f7b244858ae3b53b46574f4a94ae9e0.svg) | ![after](/.assets/5fa5d8e27fc1c5a4377934fb771fe320591cab9f.svg) |
-
-#### EURS ([0xE111178A87A3BFf0c8d18DECBa5798827539Ae99](https://polygonscan.com/address/0xE111178A87A3BFf0c8d18DECBa5798827539Ae99))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260](https://polygonscan.com/address/0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260) | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/973f0be01f7b244858ae3b53b46574f4a94ae9e0.svg) | ![after](/.assets/5fa5d8e27fc1c5a4377934fb771fe320591cab9f.svg) |
-
-#### miMATIC ([0xa3Fa99A148fA48D14Ed51d610c367C61876997F1](https://polygonscan.com/address/0xa3Fa99A148fA48D14Ed51d610c367C61876997F1))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4](https://polygonscan.com/address/0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4) | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://polygonscan.com/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) |
-| variableRateSlope1 | 6 % | 9 % |
-| baseStableBorrowRate | 7 % | 10 % |
-| interestRate | ![before](/.assets/c0ca34be405c22dc36ffd20c54b1dc8cf5ac741b.svg) | ![after](/.assets/102bd1ba172a5d78380ebf458bef8a6bc4d809af.svg) |
-
-#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237](https://polygonscan.com/address/0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237) | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/249bca66f2e25caf04da3e3bc7e387fbf24599b2.svg) | ![after](/.assets/91a8fb0f99abea9b8def547797b03b4d59853df3.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
- "interestRateStrategy": {
- "from": "0xc77576b02D74BBF9CdC26F3B86FD09d134416df2",
- "to": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d"
- }
- },
- "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
- "interestRateStrategy": {
- "from": "0xAC4f9019608f3A359Ba6a576DC4deC9561D2e514",
- "to": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f"
- }
- },
- "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c": {
- "interestRateStrategy": {
- "from": "0x06B1Ec378618EA736a65395eA5CAB69A2410493B",
- "to": "0x7448ABeD12d8538efC115af4a417e3d1367180fc"
- }
- },
- "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
- "interestRateStrategy": {
- "from": "0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237",
- "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
- }
- },
- "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4": {
- "interestRateStrategy": {
- "from": "0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260",
- "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
- }
- },
- "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": {
- "interestRateStrategy": {
- "from": "0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260",
- "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
- }
- },
- "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1": {
- "interestRateStrategy": {
- "from": "0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4",
- "to": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0"
- }
- },
- "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
- "interestRateStrategy": {
- "from": "0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237",
- "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
- }
- }
- },
- "strategies": {
- "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": {
- "address": {
- "from": "0xc77576b02D74BBF9CdC26F3B86FD09d134416df2",
- "to": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d"
- },
- "baseStableBorrowRate": {
- "from": "140000000000000000000000000",
- "to": "110000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- }
- },
- "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
- "address": {
- "from": "0xAC4f9019608f3A359Ba6a576DC4deC9561D2e514",
- "to": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f"
- },
- "baseStableBorrowRate": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c": {
- "address": {
- "from": "0x06B1Ec378618EA736a65395eA5CAB69A2410493B",
- "to": "0x7448ABeD12d8538efC115af4a417e3d1367180fc"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": {
- "address": {
- "from": "0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237",
- "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4": {
- "address": {
- "from": "0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260",
- "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": {
- "address": {
- "from": "0xC0B875907514131C2Fd43f0FBf59EdaB84C7e260",
- "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1": {
- "address": {
- "from": "0x44CaDF6E49895640D9De85ac01d97D44429Ad0A4",
- "to": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0"
- },
- "baseStableBorrowRate": {
- "from": "70000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "60000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- },
- "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
- "address": {
- "from": "0x2402C25e7E45b1466c53Ef7766AAd878A4CbC237",
- "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md b/diffs/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
deleted file mode 100644
index c25f4ea12..000000000
--- a/diffs/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_before_AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_after.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC ([0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4](https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4))
-
-| description | value before | value after |
-| --- | --- | --- |
-| ltv | 76 % | 75 % |
-| liquidationThreshold | 79 % | 78 % |
-
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4": {
- "liquidationThreshold": {
- "from": 7900,
- "to": 7800
- },
- "ltv": {
- "from": 7600,
- "to": 7500
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_after.md b/diffs/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_after.md
deleted file mode 100644
index 78b3fe79a..000000000
--- a/diffs/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_before_AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### WETH ([0x5300000000000000000000000000000000000004](https://scrollscan.com/address/0x5300000000000000000000000000000000000004))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0xD828F2f9Da85b190721797bEaD5Eb0acC4150f05](https://scrollscan.com/address/0xD828F2f9Da85b190721797bEaD5Eb0acC4150f05) | [0xE9EcAE0EDA2A97BB6a06a6244FfdFa6b1D886967](https://scrollscan.com/address/0xE9EcAE0EDA2A97BB6a06a6244FfdFa6b1D886967) |
-| variableRateSlope1 | 3.3 % | 2.7 % |
-| baseStableBorrowRate | 5.3 % | 4.7 % |
-| interestRate | ![before](/.assets/a572cc5e1b223dec2a704662f09ffadd187f3094.svg) | ![after](/.assets/048fca758555675b88ba367ba86f80e807d3eb1b.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x5300000000000000000000000000000000000004": {
- "interestRateStrategy": {
- "from": "0xD828F2f9Da85b190721797bEaD5Eb0acC4150f05",
- "to": "0xE9EcAE0EDA2A97BB6a06a6244FfdFa6b1D886967"
- }
- }
- },
- "strategies": {
- "0x5300000000000000000000000000000000000004": {
- "address": {
- "from": "0xD828F2f9Da85b190721797bEaD5Eb0acC4150f05",
- "to": "0xE9EcAE0EDA2A97BB6a06a6244FfdFa6b1D886967"
- },
- "baseStableBorrowRate": {
- "from": "53000000000000000000000000",
- "to": "47000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "33000000000000000000000000",
- "to": "27000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/diffs/AaveV3Scroll_StablecoinIRUpdates_20240424_before_AaveV3Scroll_StablecoinIRUpdates_20240424_after.md b/diffs/AaveV3Scroll_StablecoinIRUpdates_20240424_before_AaveV3Scroll_StablecoinIRUpdates_20240424_after.md
deleted file mode 100644
index 5df1e4782..000000000
--- a/diffs/AaveV3Scroll_StablecoinIRUpdates_20240424_before_AaveV3Scroll_StablecoinIRUpdates_20240424_after.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Reserve changes
-
-### Reserves altered
-
-#### USDC ([0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4](https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4))
-
-| description | value before | value after |
-| --- | --- | --- |
-| interestRateStrategy | [0x39FA62444F4716f64253aEAc4509Ad32DE8D67B2](https://scrollscan.com/address/0x39FA62444F4716f64253aEAc4509Ad32DE8D67B2) | [0x80E14993fE2cA5c64328B4a8DfC1D95960338bd5](https://scrollscan.com/address/0x80E14993fE2cA5c64328B4a8DfC1D95960338bd5) |
-| variableRateSlope1 | 12 % | 9 % |
-| baseStableBorrowRate | 13 % | 10 % |
-| interestRate | ![before](/.assets/71713b8fe82177533a16dd37178324b412bce932.svg) | ![after](/.assets/a47328fc7b24fdcc5b0874aea1c9aa52e00b8238.svg) |
-
-## Raw diff
-
-```json
-{
- "reserves": {
- "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4": {
- "interestRateStrategy": {
- "from": "0x39FA62444F4716f64253aEAc4509Ad32DE8D67B2",
- "to": "0x80E14993fE2cA5c64328B4a8DfC1D95960338bd5"
- }
- }
- },
- "strategies": {
- "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4": {
- "address": {
- "from": "0x39FA62444F4716f64253aEAc4509Ad32DE8D67B2",
- "to": "0x80E14993fE2cA5c64328B4a8DfC1D95960338bd5"
- },
- "baseStableBorrowRate": {
- "from": "130000000000000000000000000",
- "to": "100000000000000000000000000"
- },
- "variableRateSlope1": {
- "from": "120000000000000000000000000",
- "to": "90000000000000000000000000"
- }
- }
- }
-}
-```
\ No newline at end of file
diff --git a/generator/features/__snapshots__/assetListing.spec.ts.snap b/generator/features/__snapshots__/assetListing.spec.ts.snap
index eb32881f8..6de75264c 100644
--- a/generator/features/__snapshots__/assetListing.spec.ts.snap
+++ b/generator/features/__snapshots__/assetListing.spec.ts.snap
@@ -1,5 +1,271 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+exports[`feature: assetListing > regression: isolation mode should be flase when ceiling is zero 1`] = `
+{
+ "aip": "---
+title: "test"
+author: "test"
+discussions: "test"
+snapshot: "test"
+---
+
+## Simple Summary
+
+## Motivation
+
+## Specification
+
+The table below illustrates the configured risk parameters for **PSP**
+
+| Parameter | Value |
+| ------------------------- | -----------------------------------------: |
+| Isolation Mode | false |
+| Borrowable | ENABLED |
+| Collateral Enabled | true |
+| Supply Cap (PSP) | 10,000 |
+| Borrow Cap (PSP) | 5,000 |
+| Debt Ceiling | USD 0 |
+| LTV | 40 % |
+| LT | 50 % |
+| Liquidation Bonus | 5 % |
+| Liquidation Protocol Fee | 20 % |
+| Reserve Factor | 20 % |
+| Base Variable Borrow Rate | 0 % |
+| Variable Slope 1 | 10 % |
+| Variable Slope 2 | 100 % |
+| Uoptimal | 80 % |
+| Stable Borrowing | DISABLED |
+| Flashloanable | ENABLED |
+| Siloed Borrowing | DISABLED |
+| Borrowable in Isolation | DISABLED |
+| Oracle | 0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8 |
+
+## References
+
+- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231023_AaveV3Ethereum_Test/AaveV3Ethereum_Test_20231023.sol)
+- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231023_AaveV3Ethereum_Test/AaveV3Ethereum_Test_20231023.t.sol)
+- [Snapshot](test)
+- [Discussion](test)
+
+## Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
+",
+ "jsonConfig": "import {ConfigFile} from '../../generator/types';
+export const config: ConfigFile = {
+ rootOptions: {
+ pools: ['AaveV3Ethereum'],
+ title: 'test',
+ shortName: 'Test',
+ date: '20231023',
+ author: 'test',
+ discussion: 'test',
+ snapshot: 'test',
+ },
+ poolOptions: {
+ AaveV3Ethereum: {
+ configs: {
+ ASSET_LISTING: [
+ {
+ assetSymbol: 'PSP',
+ decimals: 18,
+ priceFeed: '0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8',
+ ltv: '40',
+ liqThreshold: '50',
+ liqBonus: '5',
+ debtCeiling: 0,
+ liqProtocolFee: '20',
+ enabledToBorrow: 'ENABLED',
+ flashloanable: 'ENABLED',
+ stableRateModeEnabled: 'DISABLED',
+ borrowableInIsolation: 'DISABLED',
+ withSiloedBorrowing: 'DISABLED',
+ reserveFactor: '20',
+ supplyCap: '10000',
+ borrowCap: '5000',
+ rateStrategyParams: {
+ optimalUtilizationRate: '80',
+ baseVariableBorrowRate: '0',
+ variableRateSlope1: '10',
+ variableRateSlope2: '100',
+ stableRateSlope1: '10',
+ stableRateSlope2: '100',
+ baseStableRateOffset: '1',
+ stableRateExcessOffset: '0',
+ optimalStableToTotalDebtRatio: '10',
+ },
+ eModeCategory: 'AaveV3EthereumEModes.NONE',
+ asset: '0xcAfE001067cDEF266AfB7Eb5A286dCFD277f3dE5',
+ },
+ ],
+ },
+ cache: {blockNumber: 42},
+ },
+ },
+};
+",
+ "payloads": [
+ {
+ "contractName": "AaveV3Ethereum_Test_20231023",
+ "payload": "// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Ethereum, AaveV3EthereumEModes} from 'aave-address-book/AaveV3Ethereum.sol';
+import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol';
+import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+/**
+ * @title test
+ * @author test
+ * - Snapshot: test
+ * - Discussion: test
+ */
+contract AaveV3Ethereum_Test_20231023 is AaveV3PayloadEthereum {
+ using SafeERC20 for IERC20;
+
+ address public constant PSP = 0xcAfE001067cDEF266AfB7Eb5A286dCFD277f3dE5;
+ uint256 public constant PSP_SEED_AMOUNT = 1e18;
+
+ function _postExecute() internal override {
+ IERC20(PSP).forceApprove(address(AaveV3Ethereum.POOL), PSP_SEED_AMOUNT);
+ AaveV3Ethereum.POOL.supply(PSP, PSP_SEED_AMOUNT, address(AaveV3Ethereum.COLLECTOR), 0);
+ }
+
+ function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
+ IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
+
+ listings[0] = IAaveV3ConfigEngine.Listing({
+ asset: PSP,
+ assetSymbol: 'PSP',
+ priceFeed: 0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8,
+ eModeCategory: AaveV3EthereumEModes.NONE,
+ enabledToBorrow: EngineFlags.ENABLED,
+ stableRateModeEnabled: EngineFlags.DISABLED,
+ borrowableInIsolation: EngineFlags.DISABLED,
+ withSiloedBorrowing: EngineFlags.DISABLED,
+ flashloanable: EngineFlags.ENABLED,
+ ltv: 40_00,
+ liqThreshold: 50_00,
+ liqBonus: 5_00,
+ reserveFactor: 20_00,
+ supplyCap: 10_000,
+ borrowCap: 5_000,
+ debtCeiling: 0,
+ liqProtocolFee: 20_00,
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: 80_00,
+ baseVariableBorrowRate: 0,
+ variableRateSlope1: 10_00,
+ variableRateSlope2: 100_00
+ })
+ });
+
+ return listings;
+ }
+}
+",
+ "test": "// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol';
+
+/**
+ * @dev Test for AaveV3Ethereum_Test_20231023
+ * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20231023_AaveV3Ethereum_Test/AaveV3Ethereum_Test_20231023.t.sol -vv
+ */
+contract AaveV3Ethereum_Test_20231023_Test is ProtocolV3TestBase {
+ AaveV3Ethereum_Test_20231023 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 42);
+ proposal = new AaveV3Ethereum_Test_20231023();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Ethereum_Test_20231023', AaveV3Ethereum.POOL, address(proposal));
+ }
+
+ function test_collectorHasPSPFunds() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ (address aTokenAddress, , ) = AaveV3Ethereum
+ .AAVE_PROTOCOL_DATA_PROVIDER
+ .getReserveTokensAddresses(proposal.PSP());
+ assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 10 ** 18);
+ }
+}
+",
+ },
+ ],
+ "script": "// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
+import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
+import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
+import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol';
+
+/**
+ * @dev Deploy Ethereum
+ * deploy-command: make deploy-ledger contract=src/20231023_AaveV3Ethereum_Test/Test_20231023.s.sol:DeployEthereum chain=mainnet
+ * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/Test_20231023.s.sol/1/run-latest.json
+ */
+contract DeployEthereum is EthereumScript {
+ function run() external broadcast {
+ // deploy payloads
+ address payload0 = GovV3Helpers.deployDeterministic(
+ type(AaveV3Ethereum_Test_20231023).creationCode
+ );
+
+ // compose action
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
+ actions[0] = GovV3Helpers.buildAction(payload0);
+
+ // register action at payloadsController
+ GovV3Helpers.createPayload(actions);
+ }
+}
+
+/**
+ * @dev Create Proposal
+ * command: make deploy-ledger contract=src/20231023_AaveV3Ethereum_Test/Test_20231023.s.sol:CreateProposal chain=mainnet
+ */
+contract CreateProposal is EthereumScript {
+ function run() external {
+ // create payloads
+ PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
+
+ // compose actions for validation
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsEthereum[0] = GovV3Helpers.buildAction(type(AaveV3Ethereum_Test_20231023).creationCode);
+ payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
+
+ // create proposal
+ vm.startBroadcast();
+ GovV3Helpers.createProposal(
+ vm,
+ payloads,
+ GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
+ GovV3Helpers.ipfsHashFile(vm, 'src/20231023_AaveV3Ethereum_Test/Test.md')
+ );
+ }
+}
+",
+}
+`;
+
exports[`feature: assetListing > should properly generate files 1`] = `
{
"aip": "---
@@ -17,33 +283,28 @@ snapshot: "test"
The table below illustrates the configured risk parameters for **PSP**
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | true |
-| Borrowable | ENABLED |
-| Collateral Enabled | true |
-| Supply Cap (PSP) | 10,000 |
-| Borrow Cap (PSP) | 5,000 |
-| Debt Ceiling | USD 100,000 |
-| LTV | 40 % |
-| LT | 50 % |
-| Liquidation Bonus | 5 % |
-| Liquidation Protocol Fee | 20 % |
-| Reserve Factor | 20 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 10 % |
-| Variable Slope 2 | 100 % |
-| Uoptimal | 80 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 10 % |
-| Stable Slope2 | 100 % |
-| Base Stable Rate Offset | 1 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 10 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | DISABLED |
-| Oracle | 0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8 |
+| Parameter | Value |
+| ------------------------- | -----------------------------------------: |
+| Isolation Mode | true |
+| Borrowable | ENABLED |
+| Collateral Enabled | true |
+| Supply Cap (PSP) | 10,000 |
+| Borrow Cap (PSP) | 5,000 |
+| Debt Ceiling | USD 100,000 |
+| LTV | 40 % |
+| LT | 50 % |
+| Liquidation Bonus | 5 % |
+| Liquidation Protocol Fee | 20 % |
+| Reserve Factor | 20 % |
+| Base Variable Borrow Rate | 0 % |
+| Variable Slope 1 | 10 % |
+| Variable Slope 2 | 100 % |
+| Uoptimal | 80 % |
+| Stable Borrowing | DISABLED |
+| Flashloanable | ENABLED |
+| Siloed Borrowing | DISABLED |
+| Borrowable in Isolation | DISABLED |
+| Oracle | 0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8 |
## References
@@ -117,9 +378,8 @@ pragma solidity ^0.8.0;
import {AaveV3Ethereum, AaveV3EthereumEModes} 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';
+import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol';
+import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';
import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
/**
@@ -160,16 +420,11 @@ contract AaveV3Ethereum_Test_20231023 is AaveV3PayloadEthereum {
borrowCap: 5_000,
debtCeiling: 100_000,
liqProtocolFee: 20_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(80_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(10_00),
- variableRateSlope2: _bpsToRay(100_00),
- stableRateSlope1: _bpsToRay(10_00),
- stableRateSlope2: _bpsToRay(100_00),
- baseStableRateOffset: _bpsToRay(1_00),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(10_00)
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: 80_00,
+ baseVariableBorrowRate: 0,
+ variableRateSlope1: 10_00,
+ variableRateSlope2: 100_00
})
});
@@ -301,11 +556,6 @@ exports[`feature: assetListing > should return reasonable code 1`] = `
| Variable Slope 2 | 100 % |
| Uoptimal | 80 % |
| Stable Borrowing | DISABLED |
-| Stable Slope1 | 10 % |
-| Stable Slope2 | 100 % |
-| Base Stable Rate Offset | 1 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 10 % |
| Flashloanable | ENABLED |
| Siloed Borrowing | DISABLED |
| Borrowable in Isolation | DISABLED |
@@ -344,16 +594,11 @@ exports[`feature: assetListing > should return reasonable code 1`] = `
borrowCap: 5_000,
debtCeiling: 100_000,
liqProtocolFee: 20_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(80_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(10_00),
- variableRateSlope2: _bpsToRay(100_00),
- stableRateSlope1: _bpsToRay(10_00),
- stableRateSlope2: _bpsToRay(100_00),
- baseStableRateOffset: _bpsToRay(1_00),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(10_00)
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: 80_00,
+ baseVariableBorrowRate: 0,
+ variableRateSlope1: 10_00,
+ variableRateSlope2: 100_00
})
});
diff --git a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap
index 68831f1bd..1081e94cc 100644
--- a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap
+++ b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap
@@ -57,7 +57,7 @@ pragma solidity ^0.8.0;
import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol';
-import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';
/**
* @title test
* @author test
diff --git a/generator/features/__snapshots__/rateUpdates.spec.ts.snap b/generator/features/__snapshots__/rateUpdates.spec.ts.snap
index b49ec39a1..a002b3418 100644
--- a/generator/features/__snapshots__/rateUpdates.spec.ts.snap
+++ b/generator/features/__snapshots__/rateUpdates.spec.ts.snap
@@ -111,7 +111,7 @@ pragma solidity ^0.8.0;
import {AaveV2EthereumAMMAssets} from 'aave-address-book/AaveV2EthereumAMM.sol';
import {AaveV2PayloadEthereumAMM} from 'aave-helpers/v2-config-engine/AaveV2PayloadEthereumAMM.sol';
-import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
+import {EngineFlags} from 'aave-v3-periphery/contracts/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';
/**
diff --git a/generator/features/assetListing.spec.ts b/generator/features/assetListing.spec.ts
index 72b6db12c..bdc7d19e7 100644
--- a/generator/features/assetListing.spec.ts
+++ b/generator/features/assetListing.spec.ts
@@ -35,4 +35,24 @@ describe('feature: assetListing', () => {
const files = await generateFiles(MOCK_OPTIONS, poolConfigs);
expect(files).toMatchSnapshot();
});
+
+ it('regression: isolation mode should be flase when ceiling is zero', async () => {
+ const poolConfigs: PoolConfigs = {
+ [MOCK_OPTIONS.pools[0]]: {
+ pool: MOCK_OPTIONS.pools[0],
+ artifacts: [
+ assetListing.build({
+ options: MOCK_OPTIONS,
+ pool: 'AaveV3Ethereum',
+ cfg: [{...assetListingConfig[0], debtCeiling: '0'}],
+ cache: {blockNumber: 42},
+ }),
+ ],
+ configs: {[FEATURE.ASSET_LISTING]: [{...assetListingConfig[0], debtCeiling: 0}]},
+ cache: {blockNumber: 42},
+ },
+ };
+ const files = await generateFiles(MOCK_OPTIONS, poolConfigs);
+ expect(files).toMatchSnapshot();
+ });
});
diff --git a/generator/features/assetListing.ts b/generator/features/assetListing.ts
index a180f15aa..b0fd71da7 100644
--- a/generator/features/assetListing.ts
+++ b/generator/features/assetListing.ts
@@ -108,37 +108,13 @@ function generateAssetListingSol(cfg: Listing) {
borrowCap: ${translateJsNumberToSol(cfg.borrowCap)},
debtCeiling: ${translateJsNumberToSol(cfg.debtCeiling)},
liqProtocolFee: ${translateJsPercentToSol(cfg.liqProtocolFee)},
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: ${translateJsPercentToSol(
- cfg.rateStrategyParams.optimalUtilizationRate,
- true,
- )},
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: ${translateJsPercentToSol(cfg.rateStrategyParams.optimalUtilizationRate)},
baseVariableBorrowRate: ${translateJsPercentToSol(
cfg.rateStrategyParams.baseVariableBorrowRate,
- true,
- )},
- variableRateSlope1: ${translateJsPercentToSol(
- cfg.rateStrategyParams.variableRateSlope1,
- true,
- )},
- variableRateSlope2: ${translateJsPercentToSol(
- cfg.rateStrategyParams.variableRateSlope2,
- true,
- )},
- stableRateSlope1: ${translateJsPercentToSol(cfg.rateStrategyParams.stableRateSlope1, true)},
- stableRateSlope2: ${translateJsPercentToSol(cfg.rateStrategyParams.stableRateSlope2, true)},
- baseStableRateOffset: ${translateJsPercentToSol(
- cfg.rateStrategyParams.baseStableRateOffset,
- true,
- )},
- stableRateExcessOffset: ${translateJsPercentToSol(
- cfg.rateStrategyParams.stableRateExcessOffset,
- true,
)},
- optimalStableToTotalDebtRatio: ${translateJsPercentToSol(
- cfg.rateStrategyParams.optimalStableToTotalDebtRatio,
- true,
- )}
+ variableRateSlope1: ${translateJsPercentToSol(cfg.rateStrategyParams.variableRateSlope1)},
+ variableRateSlope2: ${translateJsPercentToSol(cfg.rateStrategyParams.variableRateSlope2)}
})`;
}
@@ -201,7 +177,7 @@ export const assetListing: FeatureModule
= {
let listingTemplate = `The table below illustrates the configured risk parameters for **${cfg.assetSymbol}**\n\n`;
listingTemplate += `| Parameter | Value |\n`;
listingTemplate += `| --- | --: |\n`;
- listingTemplate += `| Isolation Mode | ${!!cfg.debtCeiling} |\n`;
+ listingTemplate += `| Isolation Mode | ${cfg.debtCeiling !== '0'} |\n`;
listingTemplate += `| Borrowable | ${cfg.enabledToBorrow} |\n`;
listingTemplate += `| Collateral Enabled | ${!!cfg.liqThreshold} |\n`;
listingTemplate += `| Supply Cap (${cfg.assetSymbol}) | ${transformNumberToHumanReadable(
@@ -235,21 +211,6 @@ export const assetListing: FeatureModule = {
cfg.rateStrategyParams.optimalUtilizationRate,
)} |\n`;
listingTemplate += `| Stable Borrowing | ${cfg.stableRateModeEnabled} |\n`;
- listingTemplate += `| Stable Slope1 | ${transformNumberToPercent(
- cfg.rateStrategyParams.stableRateSlope1,
- )} |\n`;
- listingTemplate += `| Stable Slope2 | ${transformNumberToPercent(
- cfg.rateStrategyParams.stableRateSlope2,
- )} |\n`;
- listingTemplate += `| Base Stable Rate Offset | ${transformNumberToPercent(
- cfg.rateStrategyParams.baseStableRateOffset!,
- )} |\n`;
- listingTemplate += `| Stable Rate Excess Offset | ${transformNumberToPercent(
- cfg.rateStrategyParams.stableRateExcessOffset!,
- )} |\n`;
- listingTemplate += `| Optimal Stable To Total Debt Ratio | ${transformNumberToPercent(
- cfg.rateStrategyParams.optimalStableToTotalDebtRatio!,
- )} |\n`;
listingTemplate += `| Flashloanable | ${cfg.flashloanable} |\n`;
listingTemplate += `| Siloed Borrowing | ${cfg.withSiloedBorrowing} |\n`;
listingTemplate += `| Borrowable in Isolation | ${cfg.borrowableInIsolation} |\n`;
diff --git a/generator/features/rateUpdates.ts b/generator/features/rateUpdates.ts
index 8cd6bca20..4c65b130e 100644
--- a/generator/features/rateUpdates.ts
+++ b/generator/features/rateUpdates.ts
@@ -36,19 +36,21 @@ export async function fetchRateStrategyParamsV2(required?: boolean): Promise = {
.map(
(cfg, ix) => `rateStrategies[${ix}] = IAaveV3ConfigEngine.RateStrategyUpdate({
asset: ${translateAssetToAssetLibUnderlying(cfg.asset, pool)},
- params: IV3RateStrategyFactory.RateStrategyParams({
+ params: IAaveV3ConfigEngine.InterestRateInputData({
optimalUsageRatio: ${translateJsPercentToSol(
cfg.params.optimalUtilizationRate,
- true,
)},
baseVariableBorrowRate: ${translateJsPercentToSol(
cfg.params.baseVariableBorrowRate,
- true,
- )},
- variableRateSlope1: ${translateJsPercentToSol(
- cfg.params.variableRateSlope1,
- true,
- )},
- variableRateSlope2: ${translateJsPercentToSol(
- cfg.params.variableRateSlope2,
- true,
- )},
- stableRateSlope1: ${translateJsPercentToSol(cfg.params.stableRateSlope1, true)},
- stableRateSlope2: ${translateJsPercentToSol(cfg.params.stableRateSlope2, true)},
- baseStableRateOffset: ${translateJsPercentToSol(
- cfg.params.baseStableRateOffset!,
- true,
- )},
- stableRateExcessOffset: ${translateJsPercentToSol(
- cfg.params.stableRateExcessOffset!,
- true,
)},
- optimalStableToTotalDebtRatio: ${translateJsPercentToSol(
- cfg.params.optimalStableToTotalDebtRatio!,
- true,
- )}
+ variableRateSlope1: ${translateJsPercentToSol(cfg.params.variableRateSlope1)},
+ variableRateSlope2: ${translateJsPercentToSol(cfg.params.variableRateSlope2)}
})
});`,
)
diff --git a/generator/features/types.ts b/generator/features/types.ts
index 4e0d72ab5..d1b4e4f29 100644
--- a/generator/features/types.ts
+++ b/generator/features/types.ts
@@ -67,8 +67,8 @@ export interface RateStrategyParams {
baseVariableBorrowRate: string;
variableRateSlope1: string;
variableRateSlope2: string;
- stableRateSlope1: string;
- stableRateSlope2: string;
+ stableRateSlope1?: string;
+ stableRateSlope2?: string;
baseStableRateOffset?: string;
stableRateExcessOffset?: string;
optimalStableToTotalDebtRatio?: string;
diff --git a/generator/utils/importsResolver.spec.ts b/generator/utils/importsResolver.spec.ts
index 5e0648cfb..42b7d0dba 100644
--- a/generator/utils/importsResolver.spec.ts
+++ b/generator/utils/importsResolver.spec.ts
@@ -17,11 +17,11 @@ describe('prefixWithImports', () => {
it('should detect v3 Engine imports', () => {
expect(prefixWithImports(`EngineFlags.KEEP_CURRENT`)).toContain(
- `import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';`,
+ `import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol';`,
);
expect(prefixWithImports('IAaveV3ConfigEngine.CapsUpdate')).toContain(
- `import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';`,
+ `import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';`,
);
});
diff --git a/generator/utils/importsResolver.ts b/generator/utils/importsResolver.ts
index 800e09d3b..55e1f33a3 100644
--- a/generator/utils/importsResolver.ts
+++ b/generator/utils/importsResolver.ts
@@ -78,14 +78,11 @@ export function prefixWithImports(code: string) {
}
// shared config engine imports
if (findMatch(code, 'EngineFlags')) {
- imports += `import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';\n`;
+ imports += `import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol';\n`;
}
// v3 config engine imports
if (findMatch(code, 'IAaveV3ConfigEngine')) {
- imports += `import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';\n`;
- }
- if (findMatch(code, 'IV3RateStrategyFactory')) {
- imports += `import {IV3RateStrategyFactory} from 'aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol';\n`;
+ imports += `import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';\n`;
}
// v2 config engine imports
if (findMatch(code, 'IAaveV2ConfigEngine')) {
diff --git a/lib/aave-helpers b/lib/aave-helpers
index 8e1340b89..8d9947cc2 160000
--- a/lib/aave-helpers
+++ b/lib/aave-helpers
@@ -1 +1 @@
-Subproject commit 8e1340b890cef83117a4b319bea395b26991c0aa
+Subproject commit 8d9947cc2cf992a5606c7cba6e990d30e876d735
diff --git a/lib/ccip b/lib/ccip
index d6cb9dab3..55a0b5939 160000
--- a/lib/ccip
+++ b/lib/ccip
@@ -1 +1 @@
-Subproject commit d6cb9dab3eb7bff1cd3bfb0e1d2fb634f594f120
+Subproject commit 55a0b5939c7083c61d5651b80454095cb1f6757c
diff --git a/lib/gho-core b/lib/gho-core
index a9647e1b5..3a3293b17 160000
--- a/lib/gho-core
+++ b/lib/gho-core
@@ -1 +1 @@
-Subproject commit a9647e1b581c7f781d36ec34fb5174d29a1ec7ba
+Subproject commit 3a3293b17eb985ac230a4e3bc6a1aafd682de3d5
diff --git a/package.json b/package.json
index 12c758f99..e4655b185 100644
--- a/package.json
+++ b/package.json
@@ -31,8 +31,8 @@
"vitest": "^1.4.0"
},
"dependencies": {
- "@bgd-labs/aave-address-book": "^2.26.1",
- "@bgd-labs/aave-cli": "0.12.0",
+ "@bgd-labs/aave-address-book": "^3.0.0",
+ "@bgd-labs/aave-cli": "0.16.2",
"@bgd-labs/js-utils": "^1.3.0",
"@inquirer/prompts": "^3.3.0",
"@inquirer/testing": "^2.1.13",
diff --git a/remappings.txt b/remappings.txt
index d5607d016..b9bd8ba2b 100644
--- a/remappings.txt
+++ b/remappings.txt
@@ -1,11 +1,10 @@
-@aave/core-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/
-@aave/periphery-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/
aave-address-book/=lib/aave-helpers/lib/aave-address-book/src/
aave-helpers/=lib/aave-helpers/src/
-aave-v3-core/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/
-aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/
-ds-test/=lib/aave-helpers/lib/forge-std/lib/ds-test/src/
+aave-v3-core/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/core/
+aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/periphery/
+aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/
forge-std/=lib/aave-helpers/lib/forge-std/src/
solidity-utils/=lib/aave-helpers/lib/solidity-utils/src/
ccip/=lib/ccip/contracts/src/
-gho-core/=lib/gho-core/src/contracts/
\ No newline at end of file
+gho-core/=lib/gho-core/src/contracts/
+aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol
deleted file mode 100644
index 75299f04e..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol
+++ /dev/null
@@ -1,15 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-/**
- * @title Temporary Freeze of Long-Tail V2 Assets
- * @author Chaos Labs
- * - Discussion: https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403
- */
-contract AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Avalanche.POOL_CONFIGURATOR.freezeReserve(AaveV2AvalancheAssets.AAVEe_UNDERLYING);
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
deleted file mode 100644
index 5c46aad40..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418
- * command: make test-contract filter=AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418
- */
-contract AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418_Test is ProtocolV2TestBase {
- AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 44360962);
- proposal = new AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
- assetsChanged[0] = AaveV2AvalancheAssets.AAVEe_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory configAfter = _findReserveConfig(allConfigsAfter, assetsChanged[0]);
-
- assertEq(configAfter.isFrozen, true);
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol
deleted file mode 100644
index b93dbe0a3..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-/**
- * @title Temporary Freeze of Long-Tail V2 Assets
- * @author Chaos Labs
- * - Discussion: https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403
- */
-contract AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.USDP_UNDERLYING);
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.GUSD_UNDERLYING);
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.LUSD_UNDERLYING);
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.FRAX_UNDERLYING);
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.sUSD_UNDERLYING);
- AaveV2Ethereum.POOL_CONFIGURATOR.freezeReserve(AaveV2EthereumAssets.AAVE_UNDERLYING);
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
deleted file mode 100644
index da07ed018..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
+++ /dev/null
@@ -1,47 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418
- * command: make test-contract filter=AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418
- */
-contract AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418_Test is ProtocolV2TestBase {
- AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19682923);
- proposal = new AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](6);
- assetsChanged[0] = AaveV2EthereumAssets.USDP_UNDERLYING;
- assetsChanged[1] = AaveV2EthereumAssets.GUSD_UNDERLYING;
- assetsChanged[2] = AaveV2EthereumAssets.LUSD_UNDERLYING;
- assetsChanged[3] = AaveV2EthereumAssets.FRAX_UNDERLYING;
- assetsChanged[4] = AaveV2EthereumAssets.sUSD_UNDERLYING;
- assetsChanged[5] = AaveV2EthereumAssets.AAVE_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetsChanged.length; i++) {
- ReserveConfig memory configAfter = _findReserveConfig(allConfigsAfter, assetsChanged[i]);
- assertEq(configAfter.isFrozen, true);
- }
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol
deleted file mode 100644
index bc1aed4b1..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol
+++ /dev/null
@@ -1,15 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-/**
- * @title Temporary Freeze of Long-Tail V2 Assets
- * @author Chaos Labs
- * - Discussion: https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403
- */
-contract AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Polygon.POOL_CONFIGURATOR.freezeReserve(AaveV2PolygonAssets.AAVE_UNDERLYING);
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
deleted file mode 100644
index 437f1a8e9..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-
-/**
- * @dev Test for AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418
- * command: make test-contract filter=AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418
- */
-contract AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418_Test is ProtocolV2TestBase {
- AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 55970246);
- proposal = new AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418',
- AaveV2Polygon.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
- assetsChanged[0] = AaveV2PolygonAssets.AAVE_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory configAfter = _findReserveConfig(allConfigsAfter, assetsChanged[0]);
-
- assertEq(configAfter.isFrozen, true);
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets.md b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets.md
deleted file mode 100644
index d61fa8234..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Temporary Freeze of Long-Tail V2 Assets"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403"
----
-
-## Simple Summary
-
-A proposal to freeze USDP, GUSD, LUSD, FRAX, sUSD and AAVE on Aave V2.
-
-## Motivation
-
-As part of the deprecation plan for V2 markets, and given the recent market volatility and specifically the [USDP price spike](https://governance.aave.com/t/usdp-price-spike-impact-04-16-2024/17391), we advise reducing additional exposure to all non-major assets across V2, disabling new supply and borrows.
-
-To minimize the governance overhead, we recommend a temporary freeze vote of all non-major assets across V2, namely USDP, GUSD, LUSD, FRAX, sUSD, and AAVE, via the [direct-to-AIP framework](https://governance.aave.com/t/arfc-direct-to-aip-framework/13913).
-
-We plan to submit a follow-up proposal to deprecate these assets through the standard governance process so that the community can decide on the future utilization of these assets.
-
-Furthermore, we would like to highlight the [upcoming implementation of CAPO on v2 assets](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/30), mitigating the risk of upward Oracle manipulation. This enhancement aims to protect borrowers from unexpected liquidations due to price spikes or potential manipulation incidents, such as the recent surge in USDP prices
-
-## Specification
-
-The proposal will call the freezeReserve() function for USDP, GUSD, LUSD, FRAX, sUSD and AAVE.
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/ded7b56d9d2b3cb66a23ba9fa42cf9514a75a2ef/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol
deleted file mode 100644
index d1737c956..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol
+++ /dev/null
@@ -1,118 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, PolygonScript, AvalancheScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-import {AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-import {AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418} from './AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol:DeployPolygon chain=polygon
- * verify-command: npx catapulta-verify -b broadcast/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol:DeployAvalanche chain=avalanche
- * verify-command: npx catapulta-verify -b broadcast/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets_20240418.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](3);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV2Polygon_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_TemporaryFreezeOfLongTailV2Assets_20240418).creationCode
- );
- payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/TemporaryFreezeOfLongTailV2Assets.md'
- )
- );
- }
-}
diff --git a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/config.ts b/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/config.ts
deleted file mode 100644
index cd9f987fc..000000000
--- a/src/20240418_Multi_TemporaryFreezeOfLongTailV2Assets/config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum', 'AaveV2Polygon', 'AaveV2Avalanche'],
- title: 'Temporary Freeze of Long-Tail V2 Assets',
- shortName: 'TemporaryFreezeOfLongTailV2Assets',
- date: '20240418',
- author: 'Chaos Labs',
- discussion: 'https://governance.aave.com/t/arfc-temporary-freeze-of-long-tail-v2-assets/17403',
- snapshot: '',
- },
- poolOptions: {
- AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19682923}},
- AaveV2Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 55970246}},
- AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 44360962}},
- },
-};
diff --git a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.sol b/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.sol
deleted file mode 100644
index 24fd19d77..000000000
--- a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.sol
+++ /dev/null
@@ -1,29 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-/**
- * @title Llamarisk Risk Provider
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2b7433455b16d50b9b6afdf2e60bfd6e733896224688c9891c371aa2597853a2
- * - Discussion: https://governance.aave.com/t/arfc-onboard-new-risk-service-provider/17348
- */
-contract AaveV3Ethereum_LlamariskRiskProvider_20240421 is IProposalGenericExecutor {
- address public constant LLAMARISK_RECIPIENT = 0xa2482aA1376BEcCBA98B17578B17EcE82E6D9E86;
- uint256 public constant GHO_STREAM = 250_000 ether;
- uint256 public constant STREAM_DURATION = 180 days;
-
- uint256 public constant ACTUAL_GHO_STREAM = (GHO_STREAM / STREAM_DURATION) * STREAM_DURATION;
- function execute() external {
- // create a stream of 250 000 GHO to the Llamarisk team
- AaveV3Ethereum.COLLECTOR.createStream(
- LLAMARISK_RECIPIENT,
- ACTUAL_GHO_STREAM,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- block.timestamp,
- block.timestamp + STREAM_DURATION
- );
- }
-}
diff --git a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.t.sol b/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.t.sol
deleted file mode 100644
index 5a052488b..000000000
--- a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.t.sol
+++ /dev/null
@@ -1,88 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Ethereum_LlamariskRiskProvider_20240421} from './AaveV3Ethereum_LlamariskRiskProvider_20240421.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_LlamariskRiskProvider_20240421
- * command: make test-contract filter=AaveV3Ethereum_LlamariskRiskProvider_20240421
- */
-contract AaveV3Ethereum_LlamariskRiskProvider_20240421_Test is ProtocolV3TestBase {
- AaveV3Ethereum_LlamariskRiskProvider_20240421 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19705748);
- proposal = new AaveV3Ethereum_LlamariskRiskProvider_20240421();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_LlamariskRiskProvider_20240421',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_validateStreamsConfig() public {
- GovV3Helpers.executePayload(vm, address(proposal));
-
- uint256 currentCollectorStreamId = AaveV3Ethereum.COLLECTOR.getNextStreamId() - 1;
-
- _validateGhoStreamConfig(currentCollectorStreamId);
- }
-
- function test_withdrawFromStream() public {
- GovV3Helpers.executePayload(vm, address(proposal));
-
- uint256 currentCollectorStreamId = AaveV3Ethereum.COLLECTOR.getNextStreamId() - 1;
-
- uint256 timeWarp = 180 days + 1;
- vm.warp(block.timestamp + timeWarp);
-
- _validateGhoStreamWithdrawal(currentCollectorStreamId);
- }
-
- function _validateGhoStreamConfig(uint256 streamId) internal {
- (
- address sender,
- address recipient,
- uint256 amount,
- address token,
- uint256 startTime,
- uint256 endTime,
- uint256 toClaim,
-
- ) = AaveV3Ethereum.COLLECTOR.getStream(streamId);
-
- assertEq(sender, address(AaveV3Ethereum.COLLECTOR));
- assertEq(recipient, proposal.LLAMARISK_RECIPIENT());
- assertEq(amount, proposal.ACTUAL_GHO_STREAM());
- assertEq(token, AaveV3EthereumAssets.GHO_UNDERLYING);
- assertEq(endTime - startTime, proposal.STREAM_DURATION());
- assertEq(toClaim, proposal.ACTUAL_GHO_STREAM());
- }
-
- function _validateGhoStreamWithdrawal(uint256 streamId) internal {
- uint256 balanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- proposal.LLAMARISK_RECIPIENT()
- );
-
- vm.startPrank(proposal.LLAMARISK_RECIPIENT());
-
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(streamId, proposal.ACTUAL_GHO_STREAM());
-
- uint256 balanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- proposal.LLAMARISK_RECIPIENT()
- );
- assertEq(balanceAfter, balanceBefore + proposal.ACTUAL_GHO_STREAM());
- vm.stopPrank();
- }
-}
diff --git a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider.md b/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider.md
deleted file mode 100644
index eed709f42..000000000
--- a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: "Onboard Llamarisk as a Risk Provider"
-author: "Aave Chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-onboard-new-risk-service-provider/17348"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x2b7433455b16d50b9b6afdf2e60bfd6e733896224688c9891c371aa2597853a2"
----
-
-## Simple Summary
-
-This AIP will onboard the LlamaRisk team as Aave's second Risk Service Provider and set up the payment stream.
-
-## Motivation
-
-The Aave DAO is using a dual risk provider models, since a spot is vacant and a [snapshot vote](https://snapshot.org/#/aave.eth/proposal/0x2b7433455b16d50b9b6afdf2e60bfd6e733896224688c9891c371aa2597853a2) to choose a new one among three candidates ended with the community voicing their support for the LlamaRisk Team, this AIP is here to make it official and set the payment stream to compensate them with 250,000 GHO over the next 6 months of their engagement.
-
-## Specification
-
-Recognizing the significance of a dual risk provider model, LlamaRisk’s proposal is designed to complement Chaos Labs’ risk services, with whom we plan to collaborate extensively.
-
-The initial 6-month engagement, which may be extended pending DAO approval, involves the following scope:
-
-- **On-demand Risk Assessments:** LlamaRisk will deliver prompt and in-depth risk assessments for assets listed or considered to be listed on Aave with particular emphasis on the collateral types comprising the GHO stablecoin. This will involve developing a custom framework tailored specifically to the categories of relevant assets and Aave’s needs, which will standardize the assessment process.
-- **Collaborative Engagement with Chaos Labs:** We plan to collaborate extensively with Chaos Labs, combining our expertise to provide Aave with comprehensive and nuanced risk analysis, enhancing the protocol’s risk management capacity.
-- **Active Involvement in DAO Governance:** LlamaRisk will actively participate in Aave’s DAO governance, offering informed insights and strategic recommendations on risk management practices for principal stakeholders and the community.
-- **Legal Regulatory Advisory and Policy Work:** We will offer specialized legal research and regulatory guidance, including a thorough analysis of evolving legal frameworks and regulatory policies, and equip Aave with the necessary foresight to navigate the regulatory landscape of the DeFi sector effectively.
-
-Risk vectors are diverse and cannot be fully managed by qualitative risk tools. That is why we specialize in comprehensive risk assessment of tokenized assets and DeFi protocols. Our work supports our partners in making informed decisions that mitigate potential threats and promote a culture of transparency and sustainability. Our team of experts meticulously evaluate various risk factors, including but not limited to:
-
-- Protocol design and architecture
-- Tokenomics and economic incentives
-- Smart contract security
-- Governance mechanisms
-- Regulatory compliance
-
-LlamaRisk leverages advanced simulation techniques, including statistical and agent-based modeling, to test and validate DeFi protocols and their collateral assets under various stress scenarios. Our simulations provide valuable insights into potential risks, allowing our partner protocols to set competitive parameters resilient to adverse market conditions.
-
-Our DeFi strategy managers employ data analytics and risk monitoring tools that allow us to maintain high efficiency and safety standards. We support our partners with publications and dashboards that give users the information they need to interact with the protocol responsibly.
-
-Our advisory services cater to the unique needs of DeFi projects, providing strategic guidance and support throughout their lifecycle. From ideation to implementation, our experienced advisors offer expert advice on protocol design, tokenomics, governance, and risk management strategies, ensuring optimal outcomes for our partners.
-Comment
-
-Traversing the complex regulatory landscape is crucial for DeFi protocols and projects. Our team of legal experts provides in-depth analysis and guidance to ensure compliance with applicable laws and regulations. We evaluate legal risks, assist with regulatory filings, and help clients develop robust strategies for operating within the evolving regulatory framework.
-
-We actively engage in policy development and legislative processes related to crypto and blockchain at national, supranational, and international levels. This includes participating in specialized working groups, contributing opinions to public discussions on regulatory developments, and involvement in policymaking dialogues. We aim to ensure that DeFi stakeholders are represented and protected in the evolving regulatory landscape, facilitating informed and proactive responses to legislative changes.
-
-## Technical specification
-
-This AIP will have the collector setup a 250 000 GHO stream for 6 months toward the LlamaRisk treasury address.
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/b2a5bfef825f4341b8f24f95dcbc1ec894a02d07/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/b2a5bfef825f4341b8f24f95dcbc1ec894a02d07/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/AaveV3Ethereum_LlamariskRiskProvider_20240421.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2b7433455b16d50b9b6afdf2e60bfd6e733896224688c9891c371aa2597853a2)
-- [Discussion](https://governance.aave.com/t/arfc-onboard-new-risk-service-provider/17348)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider_20240421.s.sol b/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider_20240421.s.sol
deleted file mode 100644
index bdce7ece0..000000000
--- a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider_20240421.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_LlamariskRiskProvider_20240421} from './AaveV3Ethereum_LlamariskRiskProvider_20240421.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider_20240421.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/LlamariskRiskProvider_20240421.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_LlamariskRiskProvider_20240421).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider_20240421.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_LlamariskRiskProvider_20240421).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240421_AaveV3Ethereum_LlamariskRiskProvider/LlamariskRiskProvider.md'
- )
- );
- }
-}
diff --git a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/config.ts b/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/config.ts
deleted file mode 100644
index 9ebb7dc5c..000000000
--- a/src/20240421_AaveV3Ethereum_LlamariskRiskProvider/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- author: 'Aave Chan Initiative',
- pools: ['AaveV3Ethereum'],
- title: 'Llamarisk Risk Provider',
- shortName: 'LlamariskRiskProvider',
- date: '20240421',
- discussion: 'https://governance.aave.com/t/arfc-onboard-new-risk-service-provider/17348',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x2b7433455b16d50b9b6afdf2e60bfd6e733896224688c9891c371aa2597853a2',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19705748}}},
-};
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.sol
deleted file mode 100644
index 45a68ba59..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.sol
+++ /dev/null
@@ -1,250 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {AaveSwapper} from 'aave-helpers/swaps/AaveSwapper.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-/**
- * @title April Finance Update
- * @author @karpatkey_TokenLogic
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-april-finance-update/17390
- */
-contract AaveV2Ethereum_AprilFinanceUpdate_20240421 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
-
- struct TokenToMigrate {
- address underlying;
- address aToken;
- uint256 qty;
- }
-
- struct TokenToSwap {
- address underlying;
- address aToken;
- uint256 balance;
- }
-
- AaveSwapper public constant SWAPPER = AaveSwapper(MiscEthereum.AAVE_SWAPPER);
-
- address public constant MILKMAN = 0x11C76AD590ABDFFCD980afEC9ad951B160F02797;
- address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c;
- address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC;
-
- address public constant AGD_MULTISIG = 0x89C51828427F70D77875C6747759fB17Ba10Ceb0;
- uint256 public constant AGD_GHO_ALLOWANCE = 613_000 ether;
-
- uint256 public constant USDC_V3_TO_SWAP = 1_400_000e6; // 1.4M
- uint256 public constant DAI_V3_TO_SWAP = 2_000_000 ether;
- uint256 public constant USDT_V2_TO_KEEP = 650_000e6; // 650,000
-
- address public constant BGD_RECIPIENT = 0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF;
- uint256 public constant USDC_AMOUNT_REIMBURSEMENT = 42_000e6;
- uint256 public constant USDT_AMOUNT_REIMBURSEMENT = 109_200e6;
- uint256 public constant LINK_AMOUNT_REIMBURSEMENT = 1640 ether;
-
- uint256 public constant MERIT_GHO_ALLOWANCE = 3_000_000 ether;
- uint256 public constant MERIT_WETH_V3_ALLOWANCE = 645 ether;
- address public constant MERIT_WALLET = 0xdeadD8aB03075b7FBA81864202a2f59EE25B312b;
-
- function execute() external {
- _bgdReimbursements();
- _allowances();
- _v2ToV3Migration();
- _swaps();
- }
-
- function _bgdReimbursements() internal {
- AaveV2Ethereum.COLLECTOR.transfer(
- AaveV2EthereumAssets.USDC_A_TOKEN,
- BGD_RECIPIENT,
- USDC_AMOUNT_REIMBURSEMENT
- );
- AaveV2Ethereum.COLLECTOR.transfer(
- AaveV2EthereumAssets.USDT_A_TOKEN,
- BGD_RECIPIENT,
- USDT_AMOUNT_REIMBURSEMENT
- );
- AaveV2Ethereum.COLLECTOR.transfer(
- AaveV2EthereumAssets.LINK_A_TOKEN,
- BGD_RECIPIENT,
- LINK_AMOUNT_REIMBURSEMENT
- );
- }
-
- function _allowances() internal {
- if (
- IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- AGD_MULTISIG
- ) >= 612944900000
- ) {
- AaveV3Ethereum.COLLECTOR.approve(AaveV2EthereumAssets.USDT_A_TOKEN, AGD_MULTISIG, 0);
- AaveV3Ethereum.COLLECTOR.approve(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AGD_MULTISIG,
- AGD_GHO_ALLOWANCE
- );
- }
-
- AaveV3Ethereum.COLLECTOR.approve(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- MERIT_WALLET,
- MERIT_GHO_ALLOWANCE
- );
-
- AaveV3Ethereum.COLLECTOR.approve(
- AaveV3EthereumAssets.WETH_A_TOKEN,
- MERIT_WALLET,
- MERIT_WETH_V3_ALLOWANCE
- );
- }
-
- /**
- * @notice migrates all but one unit of the specified assets from AaveV2 to AaveV3
- * assets: WETH, WBTC, LINK and SNX
- */
- function _v2ToV3Migration() internal {
- TokenToMigrate[] memory tokens = new TokenToMigrate[](4);
- tokens[0] = TokenToMigrate(
- AaveV2EthereumAssets.WBTC_UNDERLYING,
- AaveV2EthereumAssets.WBTC_A_TOKEN,
- IERC20(AaveV2EthereumAssets.WBTC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e8
- );
- tokens[1] = TokenToMigrate(
- AaveV2EthereumAssets.WETH_UNDERLYING,
- AaveV2EthereumAssets.WETH_A_TOKEN,
- IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- 1 ether
- );
- tokens[2] = TokenToMigrate(
- AaveV2EthereumAssets.LINK_UNDERLYING,
- AaveV2EthereumAssets.LINK_A_TOKEN,
- IERC20(AaveV2EthereumAssets.LINK_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- 1 ether
- );
- tokens[3] = TokenToMigrate(
- AaveV2EthereumAssets.SNX_UNDERLYING,
- AaveV2EthereumAssets.SNX_A_TOKEN,
- IERC20(AaveV2EthereumAssets.SNX_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- 1 ether
- );
-
- uint256 tokensLength = tokens.length;
- for (uint256 i = 0; i < tokensLength; i++) {
- AaveV3Ethereum.COLLECTOR.transfer(tokens[i].aToken, address(this), tokens[i].qty);
-
- AaveV2Ethereum.POOL.withdraw(tokens[i].underlying, type(uint256).max, address(this));
-
- uint256 amount = IERC20(tokens[i].underlying).balanceOf(address(this));
- IERC20(tokens[i].underlying).forceApprove(address(AaveV3Ethereum.POOL), amount);
-
- AaveV3Ethereum.POOL.deposit(
- tokens[i].underlying,
- amount,
- address(AaveV3Ethereum.COLLECTOR),
- 0
- );
- }
- }
-
- function _swaps() internal {
- _withdrawV2Tokens();
- _withdrawV3Tokens();
-
- SWAPPER.swap(
- MILKMAN,
- PRICE_CHECKER,
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.DAI_ORACLE,
- GHO_USD_FEED,
- address(AaveV3Ethereum.COLLECTOR),
- IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(SWAPPER)),
- 50
- );
-
- SWAPPER.swap(
- MILKMAN,
- PRICE_CHECKER,
- AaveV3EthereumAssets.USDC_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.USDC_ORACLE,
- GHO_USD_FEED,
- address(AaveV3Ethereum.COLLECTOR),
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(SWAPPER)),
- 100
- );
-
- SWAPPER.swap(
- MILKMAN,
- PRICE_CHECKER,
- AaveV3EthereumAssets.USDT_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.USDT_ORACLE,
- GHO_USD_FEED,
- address(AaveV3Ethereum.COLLECTOR),
- IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf(address(SWAPPER)),
- 100
- );
- }
-
- /**
- * @notice Withdraws v2 tokens to swapper
- */
- function _withdrawV2Tokens() internal {
- TokenToSwap[] memory tokens = new TokenToSwap[](3);
- tokens[0] = TokenToSwap(
- AaveV2EthereumAssets.DAI_UNDERLYING,
- AaveV2EthereumAssets.DAI_A_TOKEN,
- IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- 1 ether
- );
- tokens[1] = TokenToSwap(
- AaveV2EthereumAssets.USDC_UNDERLYING,
- AaveV2EthereumAssets.USDC_A_TOKEN,
- IERC20(AaveV2EthereumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e6
- );
- tokens[2] = TokenToSwap(
- AaveV2EthereumAssets.USDT_UNDERLYING,
- AaveV2EthereumAssets.USDT_A_TOKEN,
- IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- USDT_V2_TO_KEEP
- );
-
- uint256 tokensLength = tokens.length;
- for (uint256 i = 0; i < tokensLength; i++) {
- AaveV3Ethereum.COLLECTOR.transfer(tokens[i].aToken, address(this), tokens[i].balance);
-
- AaveV2Ethereum.POOL.withdraw(tokens[i].underlying, type(uint256).max, address(SWAPPER));
- }
- }
-
- /**
- * @notice Withdraws v3 tokens to swapper
- */
- function _withdrawV3Tokens() internal {
- TokenToSwap[] memory tokens = new TokenToSwap[](2);
- tokens[0] = TokenToSwap(
- AaveV3EthereumAssets.USDC_UNDERLYING,
- AaveV3EthereumAssets.USDC_A_TOKEN,
- USDC_V3_TO_SWAP
- );
- tokens[1] = TokenToSwap(
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.DAI_A_TOKEN,
- DAI_V3_TO_SWAP
- );
-
- uint256 tokensLength = tokens.length;
- for (uint256 i = 0; i < tokensLength; i++) {
- AaveV3Ethereum.COLLECTOR.transfer(tokens[i].aToken, address(this), tokens[i].balance);
-
- AaveV3Ethereum.POOL.withdraw(tokens[i].underlying, type(uint256).max, address(SWAPPER));
- }
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.t.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.t.sol
deleted file mode 100644
index 84f8648e8..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.t.sol
+++ /dev/null
@@ -1,334 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-
-import {AaveV2Ethereum_AprilFinanceUpdate_20240421} from './AaveV2Ethereum_AprilFinanceUpdate_20240421.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_AprilFinanceUpdate_20240421
- * command: make test-contract filter=AaveV2Ethereum_AprilFinanceUpdate_20240421
- */
-contract AaveV2Ethereum_AprilFinanceUpdate_20240421_Test is ProtocolV2TestBase {
- event SwapRequested(
- address milkman,
- address indexed fromToken,
- address indexed toToken,
- address fromOracle,
- address toOracle,
- uint256 amount,
- address indexed recipient,
- uint256 slippage
- );
-
- struct TokenToSwap {
- address underlying;
- address aToken;
- uint256 balance;
- }
-
- AaveV2Ethereum_AprilFinanceUpdate_20240421 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19812746);
- proposal = new AaveV2Ethereum_AprilFinanceUpdate_20240421();
- }
-
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Ethereum_AprilFinanceUpdate_20240421',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_bgdReimbursements() public {
- uint256 recipientAUsdcBalanceBefore = IERC20(AaveV2EthereumAssets.USDC_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
- uint256 recipientAUsdtBalanceBefore = IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
- uint256 recipientALinkBalanceBefore = IERC20(AaveV2EthereumAssets.LINK_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
-
- executePayload(vm, address(proposal));
-
- uint256 recipientAUsdcBalanceAfter = IERC20(AaveV2EthereumAssets.USDC_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
- uint256 recipientAUsdtBalanceAfter = IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
- uint256 recipientALinkBalanceAfter = IERC20(AaveV2EthereumAssets.LINK_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
-
- assertApproxEqAbs(
- recipientAUsdcBalanceAfter,
- recipientAUsdcBalanceBefore + proposal.USDC_AMOUNT_REIMBURSEMENT(),
- 1
- );
- assertApproxEqAbs(
- recipientAUsdtBalanceAfter,
- recipientAUsdtBalanceBefore + proposal.USDT_AMOUNT_REIMBURSEMENT(),
- 1
- );
- assertApproxEqAbs(
- recipientALinkBalanceAfter,
- recipientALinkBalanceBefore + proposal.LINK_AMOUNT_REIMBURSEMENT(),
- 1
- );
- }
-
- function test_allowanceChanges() public {
- assertGt(
- IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.AGD_MULTISIG()
- ),
- 0
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.AGD_MULTISIG()
- ),
- 0
- );
-
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.MERIT_WALLET()
- ),
- 0
- );
-
- assertEq(
- IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.MERIT_WALLET()
- ),
- 0
- );
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.AGD_MULTISIG()
- ),
- 0
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.AGD_MULTISIG()
- ),
- proposal.AGD_GHO_ALLOWANCE()
- );
-
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.MERIT_WALLET()
- ),
- proposal.MERIT_GHO_ALLOWANCE()
- );
-
- assertEq(
- IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.MERIT_WALLET()
- ),
- proposal.MERIT_WETH_V3_ALLOWANCE()
- );
- }
-
- function test_v2ToV3Migration() public {
- uint256 balanceALINKBefore = IERC20(AaveV2EthereumAssets.LINK_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAWBTCBefore = IERC20(AaveV2EthereumAssets.WBTC_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAWETHBefore = IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceASNXCBefore = IERC20(AaveV2EthereumAssets.SNX_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthLINKBefore = IERC20(AaveV3EthereumAssets.LINK_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthWBTCBefore = IERC20(AaveV3EthereumAssets.WBTC_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthWETHBefore = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthSNXCBefore = IERC20(AaveV3EthereumAssets.SNX_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- assertLt(
- IERC20(AaveV2EthereumAssets.LINK_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceALINKBefore
- );
- assertLt(
- IERC20(AaveV2EthereumAssets.WBTC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAWBTCBefore
- );
- assertLt(
- IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAWETHBefore
- );
- assertLt(
- IERC20(AaveV2EthereumAssets.SNX_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceASNXCBefore
- );
-
- assertGt(
- IERC20(AaveV3EthereumAssets.LINK_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthLINKBefore
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WBTC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthWBTCBefore
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthWETHBefore
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.SNX_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthSNXCBefore
- );
- }
-
- function test_withdrawV2() public {
- TokenToSwap[] memory tokens = new TokenToSwap[](3);
- tokens[0] = TokenToSwap(
- AaveV2EthereumAssets.DAI_UNDERLYING,
- AaveV2EthereumAssets.DAI_A_TOKEN,
- IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- 1 ether
- );
- tokens[1] = TokenToSwap(
- AaveV2EthereumAssets.USDC_UNDERLYING,
- AaveV2EthereumAssets.USDC_A_TOKEN,
- IERC20(AaveV2EthereumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e6
- );
- tokens[2] = TokenToSwap(
- AaveV2EthereumAssets.USDT_UNDERLYING,
- AaveV2EthereumAssets.USDT_A_TOKEN,
- IERC20(AaveV2EthereumAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- proposal.USDT_V2_TO_KEEP()
- );
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertGt(IERC20(tokens[i].aToken).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 0);
- }
-
- _expectEmits();
-
- executePayload(vm, address(proposal));
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertApproxEqAbs(
- IERC20(tokens[i].aToken).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 1 ether,
- 1000 ether
- );
- } // V2 Withdrawals leave a lot behind
- }
-
- function test_withdrawV3() public {
- TokenToSwap[] memory tokens = new TokenToSwap[](2);
- tokens[0] = TokenToSwap(
- AaveV3EthereumAssets.USDC_UNDERLYING,
- AaveV3EthereumAssets.USDC_A_TOKEN,
- proposal.USDC_V3_TO_SWAP()
- );
- tokens[1] = TokenToSwap(
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.DAI_A_TOKEN,
- proposal.DAI_V3_TO_SWAP()
- );
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertGt(IERC20(tokens[i].aToken).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 0);
- }
-
- uint256 balanceAEthUSDCBefore = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthDAIBefore = IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- _expectEmits();
-
- executePayload(vm, address(proposal));
-
- assertApproxEqAbs(
- IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthUSDCBefore - proposal.USDC_V3_TO_SWAP(),
- 1,
- 'aEthUSDC not within 1 ether'
- );
- assertApproxEqAbs(
- IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthDAIBefore - proposal.DAI_V3_TO_SWAP(),
- 1,
- 'aEthDAI not within 1 ether'
- );
- }
-
- function _expectEmits() internal {
- vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
- emit SwapRequested(
- proposal.MILKMAN(),
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.DAI_ORACLE,
- proposal.GHO_USD_FEED(),
- 2559123908595926911497284, // Hardcoded as dynamic
- address(AaveV3Ethereum.COLLECTOR),
- 50
- );
-
- vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
- emit SwapRequested(
- proposal.MILKMAN(),
- AaveV3EthereumAssets.USDC_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.USDC_ORACLE,
- proposal.GHO_USD_FEED(),
- 2682550752636, // Hardcoded as dynamic
- address(AaveV3Ethereum.COLLECTOR),
- 100
- );
-
- vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
- emit SwapRequested(
- proposal.MILKMAN(),
- AaveV3EthereumAssets.USDT_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.USDT_ORACLE,
- proposal.GHO_USD_FEED(),
- 1333036975589, // Hardcoded as dynamic
- address(AaveV3Ethereum.COLLECTOR),
- 100
- );
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.sol
deleted file mode 100644
index 23c4e4433..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.sol
+++ /dev/null
@@ -1,186 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
-import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-interface IAavePolEthERC20Bridge {
- function bridge(address token, uint256 amount) external;
-}
-
-interface IWMatic {
- function withdraw(uint256 amount) external;
-}
-
-interface IAavePolEthPlasmaBridge {
- function bridge(uint256 amount) external;
-}
-
-/**
- * @title April Finance Update
- * @author @karpatkey_TokenLogic
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-april-finance-update/17390
- */
-contract AaveV2Polygon_AprilFinanceUpdate_20240421 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
-
- struct TokenToBridge {
- address underlying;
- address aToken;
- uint256 balance;
- }
-
- error FailedToSendMATIC();
-
- IAavePolEthERC20Bridge public constant bridge =
- IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE);
-
- IAavePolEthPlasmaBridge public constant plasmaBridge =
- IAavePolEthPlasmaBridge(0xc980508cC8866f726040Da1C0C61f682e74aBc39);
-
- uint256 public constant A_WMATIC_AMOUNT_REIMBURSEMENT = 4000 ether;
- uint256 public constant ADI_BOT_REFILL = 20_000 ether;
- uint256 public constant MATIC_TO_KEEP = 40_000 ether;
- address public constant BGD_RECIPIENT = 0xbCEB4f363f2666E2E8E430806F37e97C405c130b;
- address public constant ADI_BOT = 0xF6B99959F0b5e79E1CC7062E12aF632CEb18eF0d;
-
- function execute() external {
- AaveV2Polygon.COLLECTOR.transfer(
- AaveV2PolygonAssets.WMATIC_A_TOKEN,
- BGD_RECIPIENT,
- A_WMATIC_AMOUNT_REIMBURSEMENT
- );
-
- _migrateV2ToV3();
- _withdrawV2Tokens();
- _withdrawV3Tokens();
- _withdrawMatic();
-
- bridge.bridge(
- AaveV3PolygonAssets.USDC_UNDERLYING,
- IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf(address(bridge))
- );
-
- bridge.bridge(
- AaveV3PolygonAssets.DAI_UNDERLYING,
- IERC20(AaveV3PolygonAssets.DAI_UNDERLYING).balanceOf(address(bridge))
- );
- }
-
- function _migrateV2ToV3() internal {
- AaveV3Polygon.COLLECTOR.transfer(
- AaveV2PolygonAssets.USDT_A_TOKEN,
- address(this),
- IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
- );
-
- AaveV2Polygon.POOL.withdraw(
- AaveV2PolygonAssets.USDT_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- uint256 amount = IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).balanceOf(address(this));
- IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).forceApprove(address(AaveV3Polygon.POOL), amount);
-
- AaveV3Polygon.POOL.deposit(
- AaveV2PolygonAssets.USDT_UNDERLYING,
- amount,
- address(AaveV3Polygon.COLLECTOR),
- 0
- );
- }
-
- function _withdrawMatic() internal {
- AaveV3Polygon.COLLECTOR.transfer(
- AaveV2PolygonAssets.WMATIC_A_TOKEN,
- address(this),
- IERC20(AaveV2PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) -
- 1 ether
- );
-
- AaveV2Polygon.POOL.withdraw(
- AaveV2PolygonAssets.WMATIC_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- AaveV3Polygon.COLLECTOR.transfer(
- AaveV3PolygonAssets.WMATIC_A_TOKEN,
- address(this),
- IERC20(AaveV3PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) -
- MATIC_TO_KEEP
- );
-
- AaveV3Polygon.POOL.withdraw(
- AaveV3PolygonAssets.WMATIC_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- IWMatic(AaveV3PolygonAssets.WMATIC_UNDERLYING).withdraw(
- IERC20(AaveV3PolygonAssets.WMATIC_UNDERLYING).balanceOf(address(this))
- );
-
- (bool ok, ) = ADI_BOT.call{value: ADI_BOT_REFILL}('');
-
- if (!ok) revert FailedToSendMATIC();
-
- (ok, ) = address(plasmaBridge).call{value: address(this).balance}('');
-
- if (!ok) revert FailedToSendMATIC();
- }
-
- /**
- * @notice Withdraws v2 tokens to bridge
- */
- function _withdrawV2Tokens() internal {
- TokenToBridge[] memory tokens = new TokenToBridge[](2);
- tokens[0] = TokenToBridge(
- AaveV2PolygonAssets.DAI_UNDERLYING,
- AaveV2PolygonAssets.DAI_A_TOKEN,
- IERC20(AaveV2PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1 ether
- );
- tokens[1] = TokenToBridge(
- AaveV2PolygonAssets.USDC_UNDERLYING,
- AaveV2PolygonAssets.USDC_A_TOKEN,
- IERC20(AaveV2PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
- );
-
- uint256 tokensLength = tokens.length;
- for (uint256 i = 0; i < tokensLength; i++) {
- AaveV3Polygon.COLLECTOR.transfer(tokens[i].aToken, address(this), tokens[i].balance);
-
- AaveV2Polygon.POOL.withdraw(tokens[i].underlying, type(uint256).max, address(bridge));
- }
- }
-
- /**
- * @notice Withdraws v3 tokens to bridge
- */
- function _withdrawV3Tokens() internal {
- TokenToBridge[] memory tokens = new TokenToBridge[](2);
- tokens[0] = TokenToBridge(
- AaveV3PolygonAssets.DAI_UNDERLYING,
- AaveV3PolygonAssets.DAI_A_TOKEN,
- IERC20(AaveV3PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1 ether
- );
- tokens[1] = TokenToBridge(
- AaveV3PolygonAssets.USDC_UNDERLYING,
- AaveV3PolygonAssets.USDC_A_TOKEN,
- IERC20(AaveV3PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
- );
-
- uint256 tokensLength = tokens.length;
- for (uint256 i = 0; i < tokensLength; i++) {
- AaveV3Polygon.COLLECTOR.transfer(tokens[i].aToken, address(this), tokens[i].balance);
-
- AaveV3Polygon.POOL.withdraw(tokens[i].underlying, type(uint256).max, address(bridge));
- }
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.t.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.t.sol
deleted file mode 100644
index bdf02d1ba..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.t.sol
+++ /dev/null
@@ -1,185 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
-import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-
-import {AaveV2Polygon_AprilFinanceUpdate_20240421} from './AaveV2Polygon_AprilFinanceUpdate_20240421.sol';
-
-/**
- * @dev Test for AaveV2Polygon_AprilFinanceUpdate_20240421
- * command: make test-contract filter=AaveV2Polygon_AprilFinanceUpdate_20240421
- */
-contract AaveV2Polygon_AprilFinanceUpdate_20240421_Test is ProtocolV2TestBase {
- event Bridge(address token, uint256 amount);
-
- struct TokenToSwap {
- address underlying;
- address aToken;
- uint256 balance;
- }
-
- address public constant NATIVE_MATIC = 0x0000000000000000000000000000000000001010;
- address public constant PLASMA_BRIDGE = 0xc980508cC8866f726040Da1C0C61f682e74aBc39;
-
- AaveV2Polygon_AprilFinanceUpdate_20240421 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56654280);
- proposal = new AaveV2Polygon_AprilFinanceUpdate_20240421();
- }
-
- function test_defaultProposalExecution() public {
- defaultTest('AaveV2Polygon_AprilFinanceUpdate_20240421', AaveV2Polygon.POOL, address(proposal));
- }
-
- function test_bgdReimbursements() public {
- uint256 recipientAWmaticBalanceBefore = IERC20(AaveV2PolygonAssets.WMATIC_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
-
- executePayload(vm, address(proposal));
-
- uint256 recipientAWmaticBalanceAfter = IERC20(AaveV2PolygonAssets.WMATIC_A_TOKEN).balanceOf(
- proposal.BGD_RECIPIENT()
- );
-
- assertApproxEqAbs(
- recipientAWmaticBalanceAfter,
- recipientAWmaticBalanceBefore + proposal.A_WMATIC_AMOUNT_REIMBURSEMENT(),
- 1
- );
- }
-
- function test_migrate() public {
- uint256 balanceAUSDTBefore = IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(
- address(AaveV3Polygon.COLLECTOR)
- );
- uint256 balanceEthAUSDTBefore = IERC20(AaveV3PolygonAssets.USDT_A_TOKEN).balanceOf(
- address(AaveV3Polygon.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- assertLt(
- IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- balanceAUSDTBefore
- );
-
- assertGt(
- IERC20(AaveV3PolygonAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- balanceEthAUSDTBefore
- );
- }
-
- function test_withdrawV2() public {
- TokenToSwap[] memory tokens = new TokenToSwap[](2);
- tokens[0] = TokenToSwap(
- AaveV2PolygonAssets.DAI_UNDERLYING,
- AaveV2PolygonAssets.DAI_A_TOKEN,
- IERC20(AaveV2PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1 ether
- );
- tokens[1] = TokenToSwap(
- AaveV2PolygonAssets.USDC_UNDERLYING,
- AaveV2PolygonAssets.USDC_A_TOKEN,
- IERC20(AaveV2PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
- );
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertGt(IERC20(tokens[i].aToken).balanceOf(address(AaveV3Polygon.COLLECTOR)), 0);
- }
-
- _expectEmits();
-
- executePayload(vm, address(proposal));
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertApproxEqAbs(
- IERC20(tokens[i].aToken).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- 1 ether,
- 1000 ether
- );
- } // V2 Withdrawals leave a lot behind
- }
-
- function test_withdrawV3() public {
- TokenToSwap[] memory tokens = new TokenToSwap[](2);
- tokens[0] = TokenToSwap(
- AaveV3PolygonAssets.USDC_UNDERLYING,
- AaveV3PolygonAssets.USDC_A_TOKEN,
- IERC20(AaveV3PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
- );
- tokens[1] = TokenToSwap(
- AaveV3PolygonAssets.DAI_UNDERLYING,
- AaveV3PolygonAssets.DAI_A_TOKEN,
- IERC20(AaveV3PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1 ether
- );
-
- for (uint256 i = 0; i < tokens.length; i++) {
- assertGt(IERC20(tokens[i].aToken).balanceOf(address(AaveV3Polygon.COLLECTOR)), 0);
- }
-
- _expectEmits();
-
- executePayload(vm, address(proposal));
-
- assertApproxEqAbs(
- IERC20(AaveV3PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- 1e6,
- 1,
- 'aEthUSDC not within 1 ether'
- );
- assertApproxEqAbs(
- IERC20(AaveV3PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- 1 ether,
- 1,
- 'aEthDAI not within 1 ether'
- );
- }
-
- function test_withdrawMatic() public {
- uint256 balancePlasmaBefore = IERC20(NATIVE_MATIC).balanceOf(address(PLASMA_BRIDGE));
- uint256 balanceADIBefore = IERC20(NATIVE_MATIC).balanceOf(proposal.ADI_BOT());
-
- assertGt(
- IERC20(AaveV3PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- proposal.MATIC_TO_KEEP()
- );
- assertGt(
- IERC20(AaveV2PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- 1 ether
- );
-
- assertEq(balancePlasmaBefore, 0);
-
- executePayload(vm, address(proposal));
-
- assertEq(IERC20(NATIVE_MATIC).balanceOf(address(PLASMA_BRIDGE)), 575125293824820370250891); // ~575,125 units
- assertEq(
- IERC20(NATIVE_MATIC).balanceOf(proposal.ADI_BOT()),
- proposal.ADI_BOT_REFILL() + balanceADIBefore
- );
-
- assertApproxEqAbs(
- IERC20(AaveV3PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- proposal.MATIC_TO_KEEP(),
- 1 ether
- );
- assertApproxEqAbs(
- IERC20(AaveV2PolygonAssets.WMATIC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)),
- 1 ether,
- 1 ether
- );
- }
-
- function _expectEmits() internal {
- vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE);
- emit Bridge(AaveV3PolygonAssets.USDC_UNDERLYING, 901487694633); // ~268 units
-
- vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE);
- emit Bridge(AaveV3PolygonAssets.DAI_UNDERLYING, 246017539057488860610531); // ~559,109 units
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.sol
deleted file mode 100644
index 016b744ee..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.sol
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-interface IAavePolEthPlasmaBridge {
- function bridge(uint256 amount) external;
-}
-
-/**
- * @title April Finance Update
- * @author @karpatkey_TokenLogic
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-april-finance-update/17390
- */
-contract AaveV2Polygon_AprilFinanceUpdate_20240421_PartB is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
-
- error InsufficientBalance();
-
- IAavePolEthPlasmaBridge public constant plasmaBridge =
- IAavePolEthPlasmaBridge(0xc980508cC8866f726040Da1C0C61f682e74aBc39);
-
- address public constant NATIVE_MATIC = 0x0000000000000000000000000000000000001010;
-
- function execute() external {
- uint256 balance = IERC20(NATIVE_MATIC).balanceOf(address(plasmaBridge));
- if (balance < 570_000 ether) revert InsufficientBalance();
- plasmaBridge.bridge(balance);
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.t.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.t.sol
deleted file mode 100644
index 61f72d408..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.t.sol
+++ /dev/null
@@ -1,46 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {GovernanceV3Polygon} from 'aave-address-book/GovernanceV3Polygon.sol';
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
-import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-
-import {AaveV2Polygon_AprilFinanceUpdate_20240421_PartB} from './AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.sol';
-import {AaveV2Polygon_AprilFinanceUpdate_20240421} from './AaveV2Polygon_AprilFinanceUpdate_20240421.sol';
-
-/**
- * @dev Test for AaveV2Polygon_AprilFinanceUpdate_20240421_PartB
- * command: make test-contract filter=AaveV2Polygon_AprilFinanceUpdate_20240421_PartB
- */
-contract AaveV2Polygon_AprilFinanceUpdate_20240421_PartB_Test is ProtocolV2TestBase {
- event Bridge(address token, uint256 amount);
-
- AaveV2Polygon_AprilFinanceUpdate_20240421_PartB internal proposal;
- AaveV2Polygon_AprilFinanceUpdate_20240421 internal proposalBefore;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56654280);
- proposal = new AaveV2Polygon_AprilFinanceUpdate_20240421_PartB();
- proposalBefore = new AaveV2Polygon_AprilFinanceUpdate_20240421();
- }
-
- function test_canWithdraw() public {
- executePayload(vm, address(proposalBefore));
-
- vm.expectEmit(true, true, true, true, address(proposal.plasmaBridge()));
- emit Bridge(proposal.NATIVE_MATIC(), 575125293824820370250891);
-
- executePayload(vm, address(proposal));
-
- assertEq(IERC20(proposal.NATIVE_MATIC()).balanceOf(address(proposal.plasmaBridge())), 0);
- }
-
- function test_revertsIf_insufficientBalance() public {
- vm.startPrank(GovernanceV3Polygon.EXECUTOR_LVL_1);
- vm.expectRevert(AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.InsufficientBalance.selector);
- proposal.execute();
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.sol
deleted file mode 100644
index 04767013c..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.sol
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-/**
- * @title April Finance Update
- * @author @karpatkey_TokenLogic
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-april-finance-update/17390
- */
-contract AaveV3Gnosis_AprilFinanceUpdate_20240421 is IProposalGenericExecutor {
- address public constant REAL_T = 0x7DA9A33d15413F499299687cC9d81DE84684E28E;
- address public constant armmv3WXDAI = 0x0cA4f5554Dd9Da6217d62D8df2816c82bba4157b;
-
- uint256 public constant TO_TRANSFER = 3_504 ether;
-
- function execute() external {
- AaveV3Gnosis.COLLECTOR.transfer(armmv3WXDAI, REAL_T, TO_TRANSFER);
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.t.sol b/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.t.sol
deleted file mode 100644
index c5a58d268..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.t.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-
-import {AaveV3Gnosis_AprilFinanceUpdate_20240421} from './AaveV3Gnosis_AprilFinanceUpdate_20240421.sol';
-
-/**
- * @dev Test for AaveV3Gnosis_AprilFinanceUpdate_20240421
- * command: make test-contract filter=AaveV3Gnosis_AprilFinanceUpdate_20240421
- */
-contract AaveV3Gnosis_AprilFinanceUpdate_20240421_Test is ProtocolV3TestBase {
- AaveV3Gnosis_AprilFinanceUpdate_20240421 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('gnosis'), 33562797);
- proposal = new AaveV3Gnosis_AprilFinanceUpdate_20240421();
- }
-
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Gnosis_AprilFinanceUpdate_20240421', AaveV3Gnosis.POOL, address(proposal));
- }
-
- function test_transfer() public {
- uint256 balanceCollectorBefore = IERC20(proposal.armmv3WXDAI()).balanceOf(
- address(AaveV3Gnosis.COLLECTOR)
- );
- uint256 balanceRealTBefore = IERC20(proposal.armmv3WXDAI()).balanceOf(proposal.REAL_T());
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(proposal.armmv3WXDAI()).balanceOf(address(AaveV3Gnosis.COLLECTOR)),
- balanceCollectorBefore - proposal.TO_TRANSFER()
- );
- assertEq(
- IERC20(proposal.armmv3WXDAI()).balanceOf(proposal.REAL_T()),
- balanceRealTBefore + proposal.TO_TRANSFER()
- );
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate.md b/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate.md
deleted file mode 100644
index b90992e3f..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: "April Finance Update"
-author: "@karpatkey_TokenLogic"
-discussions: "https://governance.aave.com/t/arfc-april-finance-update/17390"
----
-
-## Simple Summary
-
-This proposal presents April's funding update, including the following key activities:
-
-- Migrating holdings from v2 to v3 (Polygon and Ethereum)
-- Extending the DAO's GHO runway to cover upcoming expenses
-- Returning RealT's supplied WXDAI to RealT
-- Migrating AGD's allowance to GHO
-- Reimburse BGD Labs for the costs paid towards external security reviews
-- Send LINK and MATIC to refill Aave Robot and Aave Delivery Infrastructure
-
-The forum discussion for BGD labs' reimbursements can be found [here](https://governance.aave.com/t/arfc-bgd-security-budget-request-december-2023/15783) and the Snapshot can be found [here](https://snapshot.org/#/aave.eth/proposal/0xf95bc210e3e93c2112c694cb158db22c93504155b48c03d9358e4c41c33ee782).
-
-## Motivation
-
-With the upcoming extension of [Merit](https://governance.aave.com/t/arfc-merit-is-forever-reward-system-program-extension/17336) and the funding request from [Chaos Labs](https://governance.aave.com/t/arfc-chaos-labs-engagement-amendment/17324), this proposal will swap sufficient assets to GHO to ensure enough funds are available as required.
-
-This proposal cancels the existing USDT Allowance to the Aave Grants DAO and replaces it with a GHO Allowance of equal size, 612.9k. This represents a continuation of transitioning to using GHO as the preferred means of covering DAO expenses.
-
-Also within this proposal, there is the corrective action of returning [3504 RealT WXDAI](https://gnosisscan.io/tx/0xf70a507847da2ad4acbecc35cd84c2f5d2489b0b0eb0e16af49c9262ca95707e) sent by RealT to the Aave Gnosis Chain collector by accident. Details on the agreement with realT can be found [here](https://snapshot.org/#/aave.eth/proposal/0xff69be7580614ebc1a455591c1bd651d8f0af12070d277d7d8846beb3c7c964b).
-
-This proposal will follow the Direct-To-AIP as outlined in this [proposal](https://governance.aave.com/t/arfc-funding-update/16675).
-
-Certain permissionless actions on the aave governance requires interaction (transaction) by someone for the governance system to run. This is done by the Aave Robot, which spends LINK tokens for the gas amount spent during the automation of these permissionless actions.
-
-During the past months BGD labs had spent in total of 1640 LINK for the Aave Robot, and 4000 MATIC for funding the Aave Delivery Infrastructure which is used to pay for the bridging fees in order for the governance system to work.
-
-BGD has paid the following amounts for security reviews so reimbursement is in order:
-
-- Compensation to Mixbytes for the review of Governance v3 Tokens: $30'000
-- Compensation to Emanuele Ricci (@stermi) for the review done on Aave 3.1 Feature: $12'000
-- Engagement with Spearbit for Aave v3 Ad-hoc Review: $109'200
-
-## Specification
-
-## BGD Reimbursements
-
-- Transfer 42'000 aUSDC v2 Ethereum to `0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF`
-- Transfer 109'200 aUSDT v2 Ethereum to `0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF`
-- Transfer 1640 aLINK v2 Ethereum to `0xb812d0944f8F581DfAA3a93Dda0d22EcEf51A9CF`
-- Transfer 4000 aMATIC v2 Polygon to `0xbCEB4f363f2666E2E8E430806F37e97C405c130b`
-
-## aDI BOT Refill
-
-- Transfer 20,000 MATIC to `0xF6B99959F0b5e79E1CC7062E12aF632CEb18eF0d`
-
-### Migrating AGD's allowance to GHO
-
-The following Allowance is to be cancelled and replaced with GHO:
-
-- Cancel aUSDT Allowance
-- Increase GHO Allowance by 613,000 units
-
-The AGD mulisig `eth:0x89C51828427F70D77875C6747759fB17Ba10Ceb0` will be able to use the allowance function on `0x464C71f6c2F760DdA6093dCB91C24c39e5d6e18c` to claim the GHO.
-
-### Merit Allowances
-
-- Allowance of 3.0M GHO for the Merit program
-- Allowance of 645 aEthWETH for the Merit program
-
-### Returning RealT's supplied WXDAI to RealT
-
-Transfer 3,504 armmv3WXDAI to `0x7DA9A33d15413F499299687cC9d81DE84684E28E` on Gnosis Chain.
-
-### Consolidate GHO funding and Migrate funds from V2 to V3
-
-#### Part A
-
-Perform the following Swaps, Migrate Eth v2 to v3 and bridge from Polyon to Ethereum.
-
-| Withdraw & Swap to GHO | Migrate Eth v2 to v3 | Pol to Eth | Migrate Pol v2 to v3 |
-| :--------------------: | :------------------: | :---------------: | :------------------: |
-| aEthUSDC (1.4M) | awBTC (All-1) | aPolDAI (All-1) | amUSDT (All-1) |
-| aDAI (All-1) | awETH (All-1) | amUSDC (All-1) | |
-| aUSDC (All-1) | aLINK (All-1) | aPolMATIC (All-1) | |
-| aUSDT (All-0.65M) | aSNX (All-1) | amDAI (All-1) | |
-| aEthDAI (All-1) | | aPolUSDC(All-1) | |
-
-Deposit wETH and wBTC in the Treasury into Aave v3.
-
-Assets migrated from Polygon to Ethereum are to be deposited into Aave v3 where practical, with the exception of DAI and USDC which will be swapped to GHO during Part B.
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV2Ethereum_AprilFinanceUpdate_20240421.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV2Polygon_AprilFinanceUpdate_20240421.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/24ea0fb8557d38c0acabfe52e0e5750883a1ab1c/src/20240421_Multi_AprilFinanceUpdate/AaveV3Gnosis_AprilFinanceUpdate_20240421.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-april-finance-update/17390)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol b/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol
deleted file mode 100644
index 8fcefd2fa..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol
+++ /dev/null
@@ -1,132 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, PolygonScript, GnosisScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_AprilFinanceUpdate_20240421} from './AaveV2Ethereum_AprilFinanceUpdate_20240421.sol';
-import {AaveV2Polygon_AprilFinanceUpdate_20240421} from './AaveV2Polygon_AprilFinanceUpdate_20240421.sol';
-import {AaveV2Polygon_AprilFinanceUpdate_20240421_PartB} from './AaveV2Polygon_AprilFinanceUpdate_20240421_PartB.sol';
-import {AaveV3Gnosis_AprilFinanceUpdate_20240421} from './AaveV3Gnosis_AprilFinanceUpdate_20240421.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/AprilFinanceUpdate_20240421.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_AprilFinanceUpdate_20240421).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol:DeployPolygon chain=polygon
- * verify-command: npx catapulta-verify -b broadcast/AprilFinanceUpdate_20240421.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Polygon_AprilFinanceUpdate_20240421).creationCode
- );
-
- address payload1 = GovV3Helpers.deployDeterministic(
- type(AaveV2Polygon_AprilFinanceUpdate_20240421_PartB).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsTwo = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsTwo[0] = GovV3Helpers.buildAction(payload1);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- GovV3Helpers.createPayload(actionsTwo);
- }
-}
-
-/**
- * @dev Deploy Gnosis
- * deploy-command: make deploy-ledger contract=src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol:DeployGnosis chain=gnosis
- * verify-command: npx catapulta-verify -b broadcast/AprilFinanceUpdate_20240421.s.sol/100/run-latest.json
- */
-contract DeployGnosis is GnosisScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Gnosis_AprilFinanceUpdate_20240421).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate_20240421.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](4);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_AprilFinanceUpdate_20240421).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV2Polygon_AprilFinanceUpdate_20240421).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygonTwo = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygonTwo[0] = GovV3Helpers.buildAction(
- type(AaveV2Polygon_AprilFinanceUpdate_20240421_PartB).creationCode
- );
- payloads[2] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygonTwo);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsGnosis[0] = GovV3Helpers.buildAction(
- type(AaveV3Gnosis_AprilFinanceUpdate_20240421).creationCode
- );
- payloads[3] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(vm, 'src/20240421_Multi_AprilFinanceUpdate/AprilFinanceUpdate.md')
- );
- }
-}
diff --git a/src/20240421_Multi_AprilFinanceUpdate/config.ts b/src/20240421_Multi_AprilFinanceUpdate/config.ts
deleted file mode 100644
index 427f317a6..000000000
--- a/src/20240421_Multi_AprilFinanceUpdate/config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum', 'AaveV2Polygon', 'AaveV3Gnosis'],
- title: 'April Finance Update',
- shortName: 'AprilFinanceUpdate',
- date: '20240421',
- author: '@karpatkey_TokenLogic',
- discussion: 'https://governance.aave.com/t/arfc-april-finance-update/17390',
- snapshot: '',
- },
- poolOptions: {
- AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19706815}},
- AaveV2Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 56100553}},
- AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 33562797}},
- },
-};
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index 953d1c3b7..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,25 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * @notice This payload should be executed before the payload for registering new robots.
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- address public constant OLD_ROBOT_OPERATOR = 0x7A9ff54A6eE4a21223036890bB8c4ea2D62c686b;
- uint256 public constant OLD_EXECUTION_CHAIN_ROBOT_ID =
- 42967470609923359998605990815360926273002411113492386351801017384824248835129;
- uint256 public constant OLD_VOTING_CHAIN_ROBOT_ID =
- 23105234861606727783784560473737793446534476931507704105643023042466416318991;
-
- function execute() external {
- // cancel previous robots
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_EXECUTION_CHAIN_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_VOTING_CHAIN_ROBOT_ID);
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index bcf94c6c2..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche} from 'aave-address-book/AaveV2Avalanche.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV2TestBase {
- AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
- event KeeperCancelled(uint256 indexed id, address indexed upkeep);
-
- address public constant OLD_EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x7B74938583Eb03e06042fcB651046BaF0bf15644;
- address public constant OLD_VOTING_CHAIN_ROBOT_ADDRESS =
- 0x10E49034306EaA663646773C04b7B67E81eD0D52;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 44528432);
- proposal = new AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
- }
-
- function test_keepersCancelled() public {
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_EXECUTION_CHAIN_ROBOT_ID(),
- OLD_EXECUTION_CHAIN_ROBOT_ADDRESS
- );
-
- vm.expectEmit();
- emit KeeperCancelled(proposal.OLD_VOTING_CHAIN_ROBOT_ID(), OLD_VOTING_CHAIN_ROBOT_ADDRESS);
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index 06243a7a7..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,25 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * @notice This payload should be executed before the payload for registering new robots.
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- address public constant OLD_ROBOT_OPERATOR = 0x4e8984D11A47Ff89CD67c7651eCaB6C00a74B4A9;
- uint256 public constant OLD_EXECUTION_CHAIN_ROBOT_ID =
- 82990232394810788826748981965753730350133859818029683929136401112559915179430;
- uint256 public constant OLD_VOTING_CHAIN_ROBOT_ID =
- 5475326125853957331243818268970211605617607736278808003229011576358255850220;
-
- function execute() external {
- // cancel previous robots
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_EXECUTION_CHAIN_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_VOTING_CHAIN_ROBOT_ID);
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index 83b2bc10a..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-
-/**
- * @dev Test for AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV2TestBase {
- AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
- event KeeperCancelled(uint256 indexed id, address indexed upkeep);
-
- address public constant OLD_EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x249396a890F89D47F89326d7EE116b1d374Fb3A9;
- address public constant OLD_VOTING_CHAIN_ROBOT_ADDRESS =
- 0xbe7998712402B6A63975515A532Ce503437998b7;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56113527);
- proposal = new AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV2Polygon.POOL,
- address(proposal)
- );
- }
-
- function test_keepersCancelled() public {
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_EXECUTION_CHAIN_ROBOT_ID(),
- OLD_EXECUTION_CHAIN_ROBOT_ADDRESS
- );
-
- vm.expectEmit();
- emit KeeperCancelled(proposal.OLD_VOTING_CHAIN_ROBOT_ID(), OLD_VOTING_CHAIN_ROBOT_ADDRESS);
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index e09390644..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,70 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
- using SafeCast for uint256;
-
- address public constant OLD_ROBOT_OPERATOR = 0xb0A73671C97BAC9Ba899CD1a23604Fd2278cD02A;
- uint256 public constant OLD_EXECUTION_CHAIN_ROBOT_ID =
- 78329451080216164099529400539433108989111820950862041749656351555695961643082;
-
- address public constant ROBOT_OPERATOR = 0xaa944aD95e51CB83C1f35FAEEDfC7d2c31B0BB4d;
- address public constant EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x64093fe5f8Cf62aFb4377cf7EF4373537fe9155B;
- address public constant STATIC_A_TOKEN_ROBOT_ADDRESS = 0x0451f67bA61966C346daBAbB50a30Cc6A9A67C69;
-
- uint256 public constant STATIC_A_TOKEN_ROBOT_LINK_AMOUNT = 35 ether;
- uint256 public constant EXECUTION_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
-
- function execute() external {
- // cancel previous robot
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_EXECUTION_CHAIN_ROBOT_ID);
-
- AaveV3Arbitrum.COLLECTOR.transfer(
- AaveV3ArbitrumAssets.LINK_A_TOKEN,
- address(this),
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT + STATIC_A_TOKEN_ROBOT_LINK_AMOUNT
- );
- AaveV3Arbitrum.POOL.withdraw(
- AaveV3ArbitrumAssets.LINK_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- uint256 linkBalance = IERC20(AaveV3ArbitrumAssets.LINK_UNDERLYING).balanceOf(address(this));
- IERC20(AaveV3ArbitrumAssets.LINK_UNDERLYING).forceApprove(ROBOT_OPERATOR, linkBalance);
-
- // register new robot
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Execution Chain Robot',
- EXECUTION_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'StaticAToken Rewards Robot',
- STATIC_A_TOKEN_ROBOT_ADDRESS,
- '',
- 1_000_000,
- IERC20(AaveV3ArbitrumAssets.LINK_UNDERLYING).balanceOf(address(this)).toUint96(),
- 0,
- ''
- );
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index 2ce54bc36..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,73 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {ArbSys} from './interfaces/ArbSys.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
- address public constant ARB_SYS = 0x0000000000000000000000000000000000000064;
-
- event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount);
- event KeeperCancelled(uint256 indexed id, address indexed upkeep);
-
- function setUp() public {
- uint256 blockNumber = 213434099;
- vm.createSelectFork(vm.rpcUrl('arbitrum'), blockNumber);
- proposal = new AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422();
-
- // https://github.com/foundry-rs/foundry/issues/5085
- vm.mockCall(
- ARB_SYS,
- abi.encodeWithSelector(ArbSys.arbBlockNumber.selector),
- abi.encode(blockNumber)
- );
- vm.mockCall(
- ARB_SYS,
- abi.encodeWithSelector(ArbSys.arbBlockHash.selector, blockNumber - 1),
- abi.encode(0xbe6f5dfa9ce3324bd677f5195ecd8d1a258cbf3800f24621d0e0d2724224704f)
- );
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-
- function test_oldKeeperCancelledAndNewRegistered() public {
- // validate robots cancelled
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_EXECUTION_CHAIN_ROBOT_ID(),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS()
- );
-
- // validate robots registered
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.EXECUTION_CHAIN_ROBOT_LINK_AMOUNT())
- );
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.STATIC_A_TOKEN_ROBOT_ADDRESS(),
- uint96(proposal.STATIC_A_TOKEN_ROBOT_LINK_AMOUNT())
- );
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index bb7b21353..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * @notice This payload should be executed after the payload for cancelling old robots has been executed and link tokens
- * have been transferred to the collector by calling the `withdrawLink()` method on the old operator contract.
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
- using SafeCast for uint256;
-
- address public constant ROBOT_OPERATOR = 0x06d958772304e7220fc3E463756CE01Ed0D24db2;
- address public constant EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x7B74938583Eb03e06042fcB651046BaF0bf15644;
- address public constant VOTING_CHAIN_ROBOT_ADDRESS = 0x10E49034306EaA663646773C04b7B67E81eD0D52;
- address public constant STATIC_A_TOKEN_ROBOT_ADDRESS = 0x8aD3f00e91F0a3Ad8b0dF897c19EC345EaB761c4;
-
- address public constant PROOF_OF_RESERVE_ROBOT_ADDRESS =
- 0x7aE2930B50CFEbc99FE6DB16CE5B9C7D8d09332C;
- address public constant PROOF_OF_RESERVE_EXECUTOR_V2 = 0x7fc3FCb14eF04A48Bb0c12f0c39CD74C249c37d8;
- address public constant PROOF_OF_RESERVE_EXECUTOR_V3 = 0xab22988D93d5F942fC6B6c6Ea285744809D1d9Cc;
-
- uint256 public constant EXECUTION_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
- uint256 public constant VOTING_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
- uint256 public constant PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT = 15 ether;
- uint256 public constant STATIC_A_TOKEN_ROBOT_LINK_AMOUNT = 20 ether;
-
- function execute() external {
- uint256 totalLinkAmount = EXECUTION_CHAIN_ROBOT_LINK_AMOUNT +
- VOTING_CHAIN_ROBOT_LINK_AMOUNT +
- (PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT * 2) +
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT;
-
- AaveV3Avalanche.COLLECTOR.transfer(
- AaveV3AvalancheAssets.LINKe_UNDERLYING,
- address(this),
- totalLinkAmount
- );
-
- IERC20(AaveV3AvalancheAssets.LINKe_UNDERLYING).forceApprove(ROBOT_OPERATOR, totalLinkAmount);
-
- // register new robots
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Execution Chain Robot',
- EXECUTION_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Voting Chain Robot',
- VOTING_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- VOTING_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
-
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Proof Of Reserve Robot V2',
- PROOF_OF_RESERVE_ROBOT_ADDRESS,
- abi.encode(PROOF_OF_RESERVE_EXECUTOR_V2),
- 2_500_000,
- PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Proof Of Reserve Robot V3',
- PROOF_OF_RESERVE_ROBOT_ADDRESS,
- abi.encode(PROOF_OF_RESERVE_EXECUTOR_V3),
- 2_500_000,
- PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
-
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'StaticAToken Rewards Robot',
- STATIC_A_TOKEN_ROBOT_ADDRESS,
- '',
- 1_000_000,
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index 2fc3e446d..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,87 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
-
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-
-/**
- * @dev Test for AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV3TestBase {
- AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422 internal cancelRobotsProposal;
- AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
-
- event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount);
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 45718364);
- proposal = new AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422();
- cancelRobotsProposal = new AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422();
-
- // execute the payload to cancel the robot and withraw link to collector
- executePayload(vm, address(cancelRobotsProposal));
-
- // after robot cancel we need to wait for some blocks to withdraw so we fast-forward
- vm.roll(block.number + 50);
- IAaveCLRobotOperator(cancelRobotsProposal.OLD_ROBOT_OPERATOR()).withdrawLink(
- cancelRobotsProposal.OLD_EXECUTION_CHAIN_ROBOT_ID()
- );
- IAaveCLRobotOperator(cancelRobotsProposal.OLD_ROBOT_OPERATOR()).withdrawLink(
- cancelRobotsProposal.OLD_VOTING_CHAIN_ROBOT_ID()
- );
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV3Avalanche.POOL,
- address(proposal)
- );
- }
-
- function test_robotsRegistered() public {
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.EXECUTION_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.VOTING_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.VOTING_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.PROOF_OF_RESERVE_ROBOT_ADDRESS(),
- uint96(proposal.PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT())
- );
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.PROOF_OF_RESERVE_ROBOT_ADDRESS(),
- uint96(proposal.PROOF_OF_RESERVE_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.STATIC_A_TOKEN_ROBOT_ADDRESS(),
- uint96(proposal.STATIC_A_TOKEN_ROBOT_LINK_AMOUNT())
- );
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index 3afffb26d..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,161 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-import {IRootsConsumer} from './interfaces/IRootsConsumer.sol';
-import {IWETH} from './interfaces/IWETH.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
- using SafeCast for uint256;
-
- error FailedToSendETH();
-
- address public constant OLD_ROBOT_OPERATOR = 0x020E452b463568f55BAc6Dc5aFC8F0B62Ea5f0f3;
- uint256 public constant OLD_EXECUTION_CHAIN_ROBOT_ID =
- 103962992988872542945147446194468190544109628047207929929141163121857186570465;
- uint256 public constant OLD_GOVERNANCE_CHAIN_ROBOT_ID =
- 2651260633509968244842245718659958660539758109819220392919944208741153930322;
- uint256 public constant OLD_VOTING_CHAIN_ROBOT_ID =
- 37197956100690146667709888676659477205673841758151251597253206670225866349198;
- uint256 public constant OLD_GSM_SWAP_FREEZE_USDC_ROBOT_ID =
- 27746244780147594627138196730124243558900438379060566825820479909082807342202;
- uint256 public constant OLD_GSM_SWAP_FREEZE_USDT_ROBOT_ID =
- 29419557335377754353590946220126755014551271053492007946914462953700619858182;
-
- address public constant ROBOT_OPERATOR = 0x1cDF8879eC8bE012bA959EB515b11008E0cb6323;
- address public constant ROOTS_CONSUMER = 0x2fA6F0A65886123AFD24A575aE4554d0FCe8B577;
-
- address public constant GSM_SWAP_FREEZE_USDC_ROBOT_ADDRESS =
- 0xef6beCa8D9543eC007bceA835aF768B58F730C1f;
- address public constant GSM_SWAP_FREEZE_USDT_ROBOT_ADDRESS =
- 0x71381e6718b37C12155CB961Ca3D374A8BfFa0e5;
- address public constant GAS_CAPPED_EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0xBa37F9eDC52f57caFA3a13ddfD655797Cc4FE257;
- address public constant GAS_CAPPED_VOTING_CHAIN_ROBOT_ADDRESS =
- 0x7Ed0A6A294Cf085c90917c0ee1aa34e795932558;
- address public constant GAS_CAPPED_GOVERNANCE_CHAIN_ROBOT_ADDRESS =
- 0x1996c281235D99bB3c6B8d2afbEb8ac6c7A39C11;
- address public constant GAS_CAPPED_STATIC_A_TOKEN_ROBOT_ADDRESS =
- 0xda82148a3944BBe442116f41cDb329b0edF11d41;
-
- uint256 public constant GSM_SWAP_FREEZE_USDC_ROBOT_LINK_AMOUNT = 80 ether;
- uint256 public constant GSM_SWAP_FREEZE_USDT_ROBOT_LINK_AMOUNT = 80 ether;
- uint256 public constant EXECUTION_CHAIN_ROBOT_LINK_AMOUNT = 1500 ether;
- uint256 public constant GOVERNANCE_CHAIN_ROBOT_LINK_AMOUNT = 2500 ether;
- uint256 public constant VOTING_CHAIN_ROBOT_LINK_AMOUNT = 400 ether;
- uint256 public constant STATIC_A_TOKEN_ROBOT_LINK_AMOUNT = 200 ether;
- uint256 public constant CROSS_CHAIN_CONTROLLER_ETH_AMOUNT = 1 ether;
-
- function execute() external {
- // refill cross-chain-controller with ETH
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.WETH_UNDERLYING,
- address(this),
- CROSS_CHAIN_CONTROLLER_ETH_AMOUNT
- );
- IWETH(AaveV3EthereumAssets.WETH_UNDERLYING).withdraw(CROSS_CHAIN_CONTROLLER_ETH_AMOUNT);
- (bool status, ) = GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER.call{
- value: CROSS_CHAIN_CONTROLLER_ETH_AMOUNT
- }('');
- if (!status) revert FailedToSendETH();
-
- // cancel previous robots
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_GSM_SWAP_FREEZE_USDC_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_GSM_SWAP_FREEZE_USDT_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_EXECUTION_CHAIN_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_GOVERNANCE_CHAIN_ROBOT_ID);
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_VOTING_CHAIN_ROBOT_ID);
-
- uint256 totalLinkAmount = EXECUTION_CHAIN_ROBOT_LINK_AMOUNT +
- GOVERNANCE_CHAIN_ROBOT_LINK_AMOUNT +
- VOTING_CHAIN_ROBOT_LINK_AMOUNT +
- GSM_SWAP_FREEZE_USDC_ROBOT_LINK_AMOUNT +
- GSM_SWAP_FREEZE_USDT_ROBOT_LINK_AMOUNT +
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT;
-
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.LINK_A_TOKEN,
- address(this),
- totalLinkAmount
- );
- AaveV3Ethereum.POOL.withdraw(
- AaveV3EthereumAssets.LINK_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- uint256 linkBalance = IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).balanceOf(address(this));
- IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).forceApprove(ROBOT_OPERATOR, linkBalance);
-
- // register new robots
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Gas Capped Execution Chain Robot',
- GAS_CAPPED_EXECUTION_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Gas Capped Governance Chain Robot',
- GAS_CAPPED_GOVERNANCE_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- GOVERNANCE_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Gas Capped Voting Chain Robot',
- GAS_CAPPED_VOTING_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- VOTING_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'GHO GSM USDC OracleSwapFreezer',
- GSM_SWAP_FREEZE_USDC_ROBOT_ADDRESS,
- '',
- 150_000,
- GSM_SWAP_FREEZE_USDC_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'GHO GSM USDT OracleSwapFreezer',
- GSM_SWAP_FREEZE_USDT_ROBOT_ADDRESS,
- '',
- 150_000,
- GSM_SWAP_FREEZE_USDT_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Gas Capped StaticAToken Rewards Robot',
- GAS_CAPPED_STATIC_A_TOKEN_ROBOT_ADDRESS,
- '',
- 1_000_000,
- IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).balanceOf(address(this)).toUint96(),
- 0,
- ''
- );
-
- // whitelist new robot on the roots consumer contract
- IRootsConsumer(ROOTS_CONSUMER).setRobotKeeper(GAS_CAPPED_VOTING_CHAIN_ROBOT_ADDRESS);
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index fbf7e7e43..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,134 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IRootsConsumer} from './interfaces/IRootsConsumer.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV3TestBase {
- AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
-
- event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount);
- event KeeperCancelled(uint256 indexed id, address indexed upkeep);
-
- address public constant OLD_EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x365d47ceD3D7Eb6a9bdB3814aA23cc06B2D33Ef8;
- address public constant OLD_VOTING_CHAIN_ROBOT_ADDRESS =
- 0x2cf0fA5b36F0f89a5EA18F835d1375974a7720B8;
- address public constant OLD_GOVERNANCE_CHAIN_ROBOT_ADDRESS =
- 0x011824f238AEE05329213d5Ae029e899e5412343;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19917667);
- proposal = new AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_oldKeepersCancelledAndNewRegistered() public {
- // validate robots cancelled
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_GSM_SWAP_FREEZE_USDC_ROBOT_ID(),
- proposal.GSM_SWAP_FREEZE_USDC_ROBOT_ADDRESS()
- );
-
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_GSM_SWAP_FREEZE_USDT_ROBOT_ID(),
- proposal.GSM_SWAP_FREEZE_USDT_ROBOT_ADDRESS()
- );
-
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_EXECUTION_CHAIN_ROBOT_ID(),
- OLD_EXECUTION_CHAIN_ROBOT_ADDRESS
- );
-
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_GOVERNANCE_CHAIN_ROBOT_ID(),
- OLD_GOVERNANCE_CHAIN_ROBOT_ADDRESS
- );
-
- vm.expectEmit();
- emit KeeperCancelled(proposal.OLD_VOTING_CHAIN_ROBOT_ID(), OLD_VOTING_CHAIN_ROBOT_ADDRESS);
-
- // validate robots registered
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GAS_CAPPED_EXECUTION_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.EXECUTION_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GAS_CAPPED_GOVERNANCE_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.GOVERNANCE_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GAS_CAPPED_VOTING_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.VOTING_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GSM_SWAP_FREEZE_USDC_ROBOT_ADDRESS(),
- uint96(proposal.GSM_SWAP_FREEZE_USDC_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GSM_SWAP_FREEZE_USDT_ROBOT_ADDRESS(),
- uint96(proposal.GSM_SWAP_FREEZE_USDT_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.GAS_CAPPED_STATIC_A_TOKEN_ROBOT_ADDRESS(),
- uint96(proposal.STATIC_A_TOKEN_ROBOT_LINK_AMOUNT())
- );
-
- executePayload(vm, address(proposal));
- }
-
- function test_robotWhitelistedOnRootsConsumer() public {
- executePayload(vm, address(proposal));
-
- assertEq(
- IRootsConsumer(proposal.ROOTS_CONSUMER()).getRobotKeeper(),
- proposal.GAS_CAPPED_VOTING_CHAIN_ROBOT_ADDRESS()
- );
- }
-
- function test_crossChainControllerETHRefill() public {
- uint256 beforeBalance = GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER.balance;
- executePayload(vm, address(proposal));
- uint256 afterBalance = GovernanceV3Ethereum.CROSS_CHAIN_CONTROLLER.balance;
-
- assertEq(afterBalance - beforeBalance, proposal.CROSS_CHAIN_CONTROLLER_ETH_AMOUNT());
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index 5ab0b534c..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,71 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * - Snapshot: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
- using SafeCast for uint256;
-
- address public constant OLD_ROBOT_OPERATOR = 0x4f830bc2DdaC99307a3709c85F7533842BdA7c63;
- uint256 public constant OLD_EXECUTION_CHAIN_ROBOT_ID =
- 98991846084053478582099013231511635776224064505474556907242977329597039975307;
-
- address public constant ROBOT_OPERATOR = 0x55Cf9583D7D30DC4936bAee1f747591dBECe5df7;
- address public constant EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0xa0195539e21A6553243344A3BE6b874B5d3EC7b9;
- address public constant STATIC_A_TOKEN_ROBOT_ADDRESS = 0x861Be72d464b6F1C99880B9bE476D40e8F9b5Bce;
-
- uint256 public constant STATIC_A_TOKEN_ROBOT_LINK_AMOUNT = 30 ether;
- uint256 public constant EXECUTION_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
-
- function execute() external {
- // cancel previous robot
- IAaveCLRobotOperator(OLD_ROBOT_OPERATOR).cancel(OLD_EXECUTION_CHAIN_ROBOT_ID);
-
- AaveV3Optimism.COLLECTOR.transfer(
- AaveV3OptimismAssets.LINK_A_TOKEN,
- address(this),
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT + STATIC_A_TOKEN_ROBOT_LINK_AMOUNT
- );
-
- AaveV3Optimism.POOL.withdraw(
- AaveV3OptimismAssets.LINK_UNDERLYING,
- type(uint256).max,
- address(this)
- );
-
- uint256 linkBalance = IERC20(AaveV3OptimismAssets.LINK_UNDERLYING).balanceOf(address(this));
- IERC20(AaveV3OptimismAssets.LINK_UNDERLYING).forceApprove(ROBOT_OPERATOR, linkBalance);
-
- // register new robot
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Execution Chain Robot',
- EXECUTION_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'StaticAToken Rewards Robot',
- STATIC_A_TOKEN_ROBOT_ADDRESS,
- '',
- 1_000_000,
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index 726263ddc..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-
-/**
- * @dev Test for AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV3TestBase {
- AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
-
- event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount);
- event KeeperCancelled(uint256 indexed id, address indexed upkeep);
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 120310846);
- proposal = new AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV3Optimism.POOL,
- address(proposal)
- );
- }
-
- function test_oldKeeperCancelledAndNewRegistered() public {
- // validate robots cancelled
- vm.expectEmit();
- emit KeeperCancelled(
- proposal.OLD_EXECUTION_CHAIN_ROBOT_ID(),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS()
- );
-
- // validate robots registered
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.EXECUTION_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.STATIC_A_TOKEN_ROBOT_ADDRESS(),
- uint96(proposal.STATIC_A_TOKEN_ROBOT_LINK_AMOUNT())
- );
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol
deleted file mode 100644
index 6505d45de..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol
+++ /dev/null
@@ -1,78 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
-
-/**
- * @title Migrate Robots to Chainlink Automation v2
- * @author BGD Labs (@bgdlabs)
- * @notice This payload should be executed after the payload for cancelling old robots has been executed and link tokens
- * have been transferred to the collector by calling the `withdrawLink()` method on the old operator contract.
- * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36
- */
-contract AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
- using SafeCast for uint256;
-
- address public constant LINK_TOKEN = 0xb0897686c545045aFc77CF20eC7A532E3120E0F1;
- address public constant ROBOT_OPERATOR = 0xB4C212f5cD17E200019b07e6B1fDf124d35DBCf5;
- address public constant EXECUTION_CHAIN_ROBOT_ADDRESS =
- 0x249396a890F89D47F89326d7EE116b1d374Fb3A9;
- address public constant VOTING_CHAIN_ROBOT_ADDRESS = 0xbe7998712402B6A63975515A532Ce503437998b7;
- address public constant STATIC_A_TOKEN_ROBOT_ADDRESS = 0x855FbD0D57fF5B1e8263e3cCDf3384545fbaF863;
-
- uint256 public constant EXECUTION_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
- uint256 public constant VOTING_CHAIN_ROBOT_LINK_AMOUNT = 45 ether;
- uint256 public constant STATIC_A_TOKEN_ROBOT_LINK_AMOUNT = 25 ether;
-
- function execute() external {
- AaveV3Polygon.COLLECTOR.transfer(
- LINK_TOKEN,
- address(this),
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT +
- VOTING_CHAIN_ROBOT_LINK_AMOUNT +
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT
- );
-
- IERC20(LINK_TOKEN).forceApprove(
- ROBOT_OPERATOR,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT +
- VOTING_CHAIN_ROBOT_LINK_AMOUNT +
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT
- );
-
- // register new robots
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Execution Chain Robot',
- EXECUTION_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- EXECUTION_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'Voting Chain Robot',
- VOTING_CHAIN_ROBOT_ADDRESS,
- '',
- 5_000_000,
- VOTING_CHAIN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- IAaveCLRobotOperator(ROBOT_OPERATOR).register(
- 'StaticAToken Rewards Robot',
- STATIC_A_TOKEN_ROBOT_ADDRESS,
- '',
- 1_000_000,
- STATIC_A_TOKEN_ROBOT_LINK_AMOUNT.toUint96(),
- 0,
- ''
- );
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
deleted file mode 100644
index 4a5031c9e..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol';
-import {AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol';
-
-/**
- * @dev Test for AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422
- * command: make test-contract filter=AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422
- */
-contract AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422_Test is ProtocolV3TestBase {
- AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422 internal cancelRobotsProposal;
- AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422 internal proposal;
-
- event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount);
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 57189258);
- proposal = new AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422();
-
- cancelRobotsProposal = new AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422();
-
- // execute the payload to cancel the robot and withraw link to collector
- executePayload(vm, address(cancelRobotsProposal));
-
- // after robot cancel we need to wait for some blocks to withdraw so we fast-forward
- vm.roll(block.number + 50);
- IAaveCLRobotOperator(cancelRobotsProposal.OLD_ROBOT_OPERATOR()).withdrawLink(
- cancelRobotsProposal.OLD_EXECUTION_CHAIN_ROBOT_ID()
- );
- IAaveCLRobotOperator(cancelRobotsProposal.OLD_ROBOT_OPERATOR()).withdrawLink(
- cancelRobotsProposal.OLD_VOTING_CHAIN_ROBOT_ID()
- );
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422',
- AaveV3Polygon.POOL,
- address(proposal)
- );
- }
-
- function test_robotsRegistered() public {
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.EXECUTION_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.EXECUTION_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.VOTING_CHAIN_ROBOT_ADDRESS(),
- uint96(proposal.VOTING_CHAIN_ROBOT_LINK_AMOUNT())
- );
-
- vm.expectEmit(false, true, true, true);
- emit KeeperRegistered(
- uint256(0),
- proposal.STATIC_A_TOKEN_ROBOT_ADDRESS(),
- uint96(proposal.STATIC_A_TOKEN_ROBOT_LINK_AMOUNT())
- );
-
- executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2.md b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2.md
deleted file mode 100644
index c8ed79d98..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: "Migrate Robots to Chainlink Automation v2"
-author: "BGD Labs (@bgdlabs)"
-discussions: "https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36"
----
-
-## Simple Summary
-
-Proposal to migrate existing Aave robots from chainlink automation `v1.2` to `v2.1`. For governance v3 robots on ethereum, we introduce gas-capped robots in order to limit execution based on network gas price. We also activate robots for refreshing liquidity mining rewards for static-a-tokens.
-
-## Motivation
-
-With the release of Chainlink automation `v2.1`, we think its a good idea to update the Aave Robot existing infrastructure to the latest `v2.1` version.
-In addition, as an effort to reduce the cost spent in gas in times of high gas prices, we also introduce gas-capped robots on mainnet which will be activated via this proposal.
-
-Currently when a liquidity mining reward is added after static-a-token creation, it needs to be registered manually on the token via the permissionless `refreshRewardTokens()` method. As this process is not currently automated users might be missing out on rewards until the method is called, so now we introduce the robot for static-a-token to automate this process.
-
-## Specification
-
-For the migration, the robots registered on the previous robot operator contract will be cancelled and new robots will be registered using an updated robot operator contract, compatible with the newer version of chainlink automation `v2.1`.
-
-The robots will be cancelled by calling the `cancel()` method by the payload on the previous robot operator contract, and after the delay has passed anyone could call the permissionless method `withdrawLink()` on the robot operator contract to withdraw the unused funds on the previous robots to the collector.
-
-On the newer robot operator, the payload will call the `register()` method to register the keepers with the newer chainlink automation registry supporting `v2.1`.
-
-The proposal also refills the cross-chain-controller contract (part of aDI) on mainnet with 1 ethereum from the collector.
-
-_Note: All aave governance v3 robots along with robots used for gsm swap freeze and Proof of Reserve will be migrated via this proposal and will use the same contract as before except the one's mentioned below_
-
-| | Deployed AaveCLRobotOperator |
-| --------- | -------------------------------------------------------------------------------------------------------------------------------- |
-| Mainnet | [0x1cDF8879eC8bE012bA959EB515b11008E0cb6323](https://etherscan.io/address/0x1cDF8879eC8bE012bA959EB515b11008E0cb6323) |
-| Polygon | [0xB4C212f5cD17E200019b07e6B1fDf124d35DBCf5](https://polygonscan.com/address/0xB4C212f5cD17E200019b07e6B1fDf124d35DBCf5) |
-| Avalanche | [0x06d958772304e7220fc3E463756CE01Ed0D24db2](https://snowscan.xyz/address/0x06d958772304e7220fc3E463756CE01Ed0D24db2) |
-| Optimism | [0x55Cf9583D7D30DC4936bAee1f747591dBECe5df7](https://optimistic.etherscan.io/address/0x55Cf9583D7D30DC4936bAee1f747591dBECe5df7) |
-| Arbitrum | [0xaa944aD95e51CB83C1f35FAEEDfC7d2c31B0BB4d](https://arbiscan.io/address/0xaa944aD95e51CB83C1f35FAEEDfC7d2c31B0BB4d) |
-| Base | [0x88db99eeBb390a2a4DcAC2E1DDb09c07E911C5C3](https://basescan.org/address/0x88db99eeBb390a2a4DcAC2E1DDb09c07E911C5C3) |
-| BNB | [0x51Bd3d6011Dd0BD88Ee1bEA1a67be799A6A09D79](https://bscscan.com/address/0x51Bd3d6011Dd0BD88Ee1bEA1a67be799A6A09D79) |
-
-| | Deployed Robots |
-| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
-| Mainnet Gas Capped Governance Robot | [0x1996c281235D99bB3c6B8d2afbEb8ac6c7A39C11](https://etherscan.io/address/0x1996c281235D99bB3c6B8d2afbEb8ac6c7A39C11) |
-| Mainnet Gas Capped Voting Robot | [0x7Ed0A6A294Cf085c90917c0ee1aa34e795932558](https://etherscan.io/address/0x7Ed0A6A294Cf085c90917c0ee1aa34e795932558) |
-| Mainnet Gas Capped Execution Robot | [0xBa37F9eDC52f57caFA3a13ddfD655797Cc4FE257](https://etherscan.io/address/0xBa37F9eDC52f57caFA3a13ddfD655797Cc4FE257) |
-| Mainnet Gas Capped StaticAToken Rewards Robot | [0xda82148a3944BBe442116f41cDb329b0edF11d41](https://etherscan.io/address/0xda82148a3944BBe442116f41cDb329b0edF11d41) |
-| Polygon StaticAToken Rewards Robot | [0x855FbD0D57fF5B1e8263e3cCDf3384545fbaF863](https://polygonscan.com/address/0x855FbD0D57fF5B1e8263e3cCDf3384545fbaF863) |
-| Avalanche StaticAToken Rewards Robot | [0x8aD3f00e91F0a3Ad8b0dF897c19EC345EaB761c4](https://snowscan.xyz/address/0x8aD3f00e91F0a3Ad8b0dF897c19EC345EaB761c4) |
-| Optimism StaticAToken Rewards Robot | [0x861Be72d464b6F1C99880B9bE476D40e8F9b5Bce](https://optimistic.etherscan.io/address/0x861Be72d464b6F1C99880B9bE476D40e8F9b5Bce) |
-| Arbitrum StaticAToken Rewards Robot | [0x0451f67bA61966C346daBAbB50a30Cc6A9A67C69](https://arbiscan.io/address/0x0451f67bA61966C346daBAbB50a30Cc6A9A67C69) |
-| Base StaticAToken Rewards Robot | [0xad87684D27e6e58F055E6878A9F11F8c52A5b0F5](https://basescan.org/address/0xad87684D27e6e58F055E6878A9F11F8c52A5b0F5) |
-| BNB StaticAToken Rewards Robot | [0x020E452b463568f55BAc6Dc5aFC8F0B62Ea5f0f3](https://bscscan.com/address/0x020E452b463568f55BAc6Dc5aFC8F0B62Ea5f0f3) |
-
-## References
-
-- Implementation: [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol)
-- Tests: [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/cfa41b410141c5de76a184a4648bb4ce67fdd53c/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.t.sol)
-- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/36)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol
deleted file mode 100644
index 978e7285a..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol
+++ /dev/null
@@ -1,192 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-import {AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422} from './AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422.sol';
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol:DeployPolygon chain=polygon
- * verify-command: npx catapulta-verify -b broadcast/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- address payload1 = GovV3Helpers.deployDeterministic(
- type(AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
-
- // register action at payloadsController
- GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload0));
- GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload1));
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol:DeployAvalanche chain=avalanche
- * verify-command: npx catapulta-verify -b broadcast/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- address payload1 = GovV3Helpers.deployDeterministic(
- type(AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
-
- // register action at payloadsController
- GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload0));
- GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload1));
- }
-}
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol:DeployOptimism chain=optimism
- * verify-command: npx catapulta-verify -b broadcast/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: npx catapulta-verify -b broadcast/MigrateRobotsToChainlinkAutomationV2_20240422.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2_20240422.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 actionsPolygonOne = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygonOne[0] = GovV3Helpers.buildAction(
- type(AaveV2Polygon_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[0] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygonOne);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygonTwo = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygonTwo[0] = GovV3Helpers.buildAction(
- type(AaveV3Polygon_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygonTwo);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalancheOne = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalancheOne[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalancheOne);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalancheTwo = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalancheTwo[0] = GovV3Helpers.buildAction(
- type(AaveV3Avalanche_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[3] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalancheTwo);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[4] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[5] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_MigrateRobotsToChainlinkAutomationV2_20240422).creationCode
- );
- payloads[6] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/MigrateRobotsToChainlinkAutomationV2.md'
- )
- );
- }
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/config.ts b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/config.ts
deleted file mode 100644
index 8f4ee0416..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/config.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: [
- 'AaveV2Polygon',
- 'AaveV2Avalanche',
- 'AaveV3Ethereum',
- 'AaveV3Polygon',
- 'AaveV3Avalanche',
- 'AaveV3Optimism',
- 'AaveV3Arbitrum',
- ],
- title: 'Migrate Robots to Chainlink Automation v2',
- shortName: 'MigrateRobotsToChainlinkAutomationV2',
- date: '20240422',
- author: 'BGD Labs (@bgdlabs)',
- discussion: '',
- snapshot: '',
- },
- poolOptions: {
- AaveV2Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 56113527}},
- AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 44512836}},
- AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19709151}},
- AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 56113531}},
- AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 44512842}},
- AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 119084285}},
- AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 203571065}},
- },
-};
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/ArbSys.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/ArbSys.sol
deleted file mode 100644
index 9bcca96c6..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/ArbSys.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2021-2022, Offchain Labs, Inc.
-// For license information, see https://github.com/nitro/blob/master/LICENSE
-// SPDX-License-Identifier: BUSL-1.1
-
-pragma solidity >=0.4.21 <0.9.0;
-
-/**
- * @title System level functionality
- * @notice For use by contracts to interact with core L2-specific functionality.
- * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.
- */
-interface ArbSys {
- /**
- * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)
- * @return block number as int
- */
- function arbBlockNumber() external view returns (uint256);
-
- /**
- * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)
- * @return block hash
- */
- function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IAaveCLRobotOperator.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IAaveCLRobotOperator.sol
deleted file mode 100644
index c1e97a7e6..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IAaveCLRobotOperator.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-/**
- * @title IAaveCLRobotOperator
- * @author BGD Labs
- * @notice Defines the interface for the robot operator contract to perform admin actions on the automation keepers.
- **/
-interface IAaveCLRobotOperator {
- /**
- * @notice method called by owner to register the automation robot keeper.
- * @param name name of keeper.
- * @param upkeepContract upkeepContract of the keeper.
- * @param upkeepCheckData checkData of the keeper which get passed to the checkUpkeep.
- * @param gasLimit max gasLimit which the chainlink automation node can execute for the automation.
- * @param amountToFund amount of link to fund the keeper with.
- * @param triggerType type of robot keeper to register, 0 for conditional and 1 for event log based.
- * @param triggerConfig encoded trigger config for event log based robots, unused for conditional type robots.
- * @return chainlink id for the registered keeper.
- **/
- function register(
- string calldata name,
- address upkeepContract,
- bytes calldata upkeepCheckData,
- uint32 gasLimit,
- uint96 amountToFund,
- uint8 triggerType,
- bytes calldata triggerConfig
- ) external returns (uint256);
-
- /**
- * @notice method called by the owner to cancel the automation robot keeper.
- * @param id - id of the chainlink registered keeper to cancel.
- **/
- function cancel(uint256 id) external;
-
- /**
- * @notice method called permissionlessly to withdraw link of automation robot keeper to the withdraw address.
- * this method should only be called after the automation robot keeper is cancelled.
- * @param id - id of the chainlink registered keeper to withdraw funds of.
- **/
- function withdrawLink(uint256 id) external;
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IRootsConsumer.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IRootsConsumer.sol
deleted file mode 100644
index 88773244c..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IRootsConsumer.sol
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-/**
- * @title IRootsConsumer
- * @author BGD Labs
- * @notice Defines the interface for the contract to fetch api response to register storage roots.
- **/
-interface IRootsConsumer {
- /**
- * @notice method called by owner / robot guardian to set the robot keeper which can request to submit roots.
- * @param robotKeeper new address of the robot keeper to set.
- **/
- function setRobotKeeper(address robotKeeper) external;
-
- /**
- * @notice method to get the the robot keeper which can request to submit roots.
- * @return address of the robot keeeper contract.
- */
- function getRobotKeeper() external view returns (address);
-}
diff --git a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IWETH.sol b/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IWETH.sol
deleted file mode 100644
index 43585e230..000000000
--- a/src/20240422_Multi_MigrateRobotsToChainlinkAutomationV2/interfaces/IWETH.sol
+++ /dev/null
@@ -1,6 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-interface IWETH {
- function withdraw(uint256) external;
-}
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.sol b/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.sol
deleted file mode 100644
index 1a136d766..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.sol
+++ /dev/null
@@ -1,55 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-import {IStakeToken} from './IStakeToken.sol';
-
-/**
- * @title stkGHO Incentives
- * @author karpatkey_TokenLogic_ACI
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x0f73500d0f65c72482d352080ea9aa0aa92264eb059b8f646cf6f0e86556bc3d
- * - Discussion: https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640
- */
-contract AaveV3Ethereum_StkGHOIncentives_20240424 is IProposalGenericExecutor {
- uint256 public constant DISTRIBUTION_DURATION = 180 days;
- uint128 public constant AAVE_EMISSION_PER_SECOND_STK_GHO = uint128(100e18) / 1 days;
-
- function execute() external {
- // configure with same settings to update internal state
- IStakeToken.AssetConfigInput[] memory ghoConfigs = new IStakeToken.AssetConfigInput[](1);
- ghoConfigs[0] = IStakeToken.AssetConfigInput({
- emissionPerSecond: AAVE_EMISSION_PER_SECOND_STK_GHO,
- totalStaked: 0, // it's overwritten internally
- underlyingAsset: AaveSafetyModule.STK_GHO
- });
- IStakeToken(AaveSafetyModule.STK_GHO).configureAssets(ghoConfigs);
-
- IStakeToken(AaveSafetyModule.STK_GHO).setDistributionEnd(
- block.timestamp + DISTRIBUTION_DURATION
- );
-
- MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve(
- MiscEthereum.ECOSYSTEM_RESERVE,
- AaveV3EthereumAssets.AAVE_UNDERLYING,
- AaveSafetyModule.STK_GHO,
- 0
- );
-
- uint256 remainingAllowance = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance(
- address(MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER),
- AaveSafetyModule.STK_GHO
- );
-
- MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve(
- MiscEthereum.ECOSYSTEM_RESERVE,
- AaveV3EthereumAssets.AAVE_UNDERLYING,
- AaveSafetyModule.STK_GHO,
- remainingAllowance + (AAVE_EMISSION_PER_SECOND_STK_GHO * DISTRIBUTION_DURATION)
- );
- }
-}
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.t.sol b/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.t.sol
deleted file mode 100644
index a4ed41faa..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.t.sol
+++ /dev/null
@@ -1,113 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-
-import {IStakeToken} from './IStakeToken.sol';
-import {AaveV3Ethereum_StkGHOIncentives_20240424} from './AaveV3Ethereum_StkGHOIncentives_20240424.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_StkGHOIncentives_20240424
- * command: make test-contract filter=AaveV3Ethereum_StkGHOIncentives_20240424
- */
-contract AaveV3Ethereum_StkGHOIncentives_20240424_Test is ProtocolV3TestBase {
- AaveV3Ethereum_StkGHOIncentives_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19727543);
- proposal = new AaveV3Ethereum_StkGHOIncentives_20240424();
- }
-
- function test_checkConfig() public {
- (uint128 emissionPerSecondBeforeStkGHO, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets(
- AaveSafetyModule.STK_GHO
- );
-
- assertEq(
- emissionPerSecondBeforeStkGHO,
- proposal.AAVE_EMISSION_PER_SECOND_STK_GHO(),
- 'emissions before not equal stkGHO'
- );
-
- executePayload(vm, address(proposal));
-
- (uint128 emissionPerSecondAfterStkGHO, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets(
- AaveSafetyModule.STK_GHO
- );
-
- assertEq(
- emissionPerSecondAfterStkGHO,
- proposal.AAVE_EMISSION_PER_SECOND_STK_GHO(),
- 'emissions after not equal stkGHO'
- );
- assertApproxEqAbs(
- emissionPerSecondAfterStkGHO,
- emissionPerSecondBeforeStkGHO,
- 1,
- 'stkGHO emissions not same as previous'
- );
- }
-
- function test_checkDistributionEnd() public {
- uint256 endTimestampBefore = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd();
-
- assertLt(
- endTimestampBefore,
- block.timestamp + proposal.DISTRIBUTION_DURATION(),
- 'New distribution duration is lower than previously configured'
- );
-
- executePayload(vm, address(proposal));
-
- uint256 endTimestampAfter = IStakeToken(AaveSafetyModule.STK_GHO).distributionEnd();
-
- assertEq(
- endTimestampAfter,
- block.timestamp + proposal.DISTRIBUTION_DURATION(),
- 'New distribution duration has not been set correctly'
- );
- }
-
- function test_checkAllowance() public {
- uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance(
- MiscEthereum.ECOSYSTEM_RESERVE,
- AaveSafetyModule.STK_GHO
- );
-
- executePayload(vm, address(proposal));
-
- uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance(
- MiscEthereum.ECOSYSTEM_RESERVE,
- AaveSafetyModule.STK_GHO
- );
-
- assertGt(allowanceAfter, allowanceBefore);
- }
-
- function test_checkRewards_stkGHO() public {
- address staker = 0xbC540e0729B732fb14afA240aA5A047aE9ba7dF0;
-
- uint256 rewardsPerDay = 100e18;
-
- executePayload(vm, address(proposal));
-
- vm.startPrank(staker);
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).approve(AaveSafetyModule.STK_GHO, 1e18);
-
- IStakeToken(AaveSafetyModule.STK_GHO).stake(staker, 1e18);
-
- vm.warp(block.timestamp + 1 days);
-
- uint256 rewardsBalance = IStakeToken(AaveSafetyModule.STK_GHO).getTotalRewardsBalance(staker);
-
- assertTrue(rewardsBalance > 0 && rewardsBalance <= rewardsPerDay);
-
- vm.stopPrank();
- }
-}
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/IStakeToken.sol b/src/20240424_AaveV3Ethereum_StkGHOIncentives/IStakeToken.sol
deleted file mode 100644
index 54d63423d..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/IStakeToken.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.10;
-
-interface IStakeToken {
- struct AssetConfigInput {
- uint128 emissionPerSecond;
- uint256 totalStaked;
- address underlyingAsset;
- }
-
- function assets(
- address
- ) external view returns (uint128 emissionPerSecond, uint128 lastUpdateTimestamp, uint256 index);
-
- function configureAssets(AssetConfigInput[] memory assetsConfigInput) external;
-
- function distributionEnd() external view returns (uint256);
-
- function getTotalRewardsBalance(address staker) external view returns (uint256);
-
- function setDistributionEnd(uint256 newDistributionEnd) external;
-
- function stake(address to, uint256 amount) external;
-}
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives.md b/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives.md
deleted file mode 100644
index 571faa0f9..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: "stkGHO Incentives"
-author: "karpatkey_TokenLogic_ACI"
-discussions: "https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x0f73500d0f65c72482d352080ea9aa0aa92264eb059b8f646cf6f0e86556bc3d"
----
-
-## Simple Summary
-
-Re-enable stkGHO incentives emissions for 180 days after previous period ended.
-
-## Motivation
-
-To support the GHO peg and to pave the way for future GHO supply expansion, this publication proposes maintaining the daily AAVE emission going to stkGHO holders.
-
-## Specification
-
-For stkGHO:
-
-- Set new allowance to 100 AAVE per day for 180 days
-- Set distribution end for 180 days from Execution date
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8fe09bb7196ce1f7043b85660c6aed5f0457be3f/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8fe09bb7196ce1f7043b85660c6aed5f0457be3f/src/20240424_AaveV3Ethereum_StkGHOIncentives/AaveV3Ethereum_StkGHOIncentives_20240424.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x0f73500d0f65c72482d352080ea9aa0aa92264eb059b8f646cf6f0e86556bc3d)
-- [Discussion](https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives_20240424.s.sol b/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives_20240424.s.sol
deleted file mode 100644
index 69f0e581b..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives_20240424.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_StkGHOIncentives_20240424} from './AaveV3Ethereum_StkGHOIncentives_20240424.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives_20240424.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/StkGHOIncentives_20240424.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_StkGHOIncentives_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives_20240424.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_StkGHOIncentives_20240424).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240424_AaveV3Ethereum_StkGHOIncentives/StkGHOIncentives.md'
- )
- );
- }
-}
diff --git a/src/20240424_AaveV3Ethereum_StkGHOIncentives/config.ts b/src/20240424_AaveV3Ethereum_StkGHOIncentives/config.ts
deleted file mode 100644
index 550044118..000000000
--- a/src/20240424_AaveV3Ethereum_StkGHOIncentives/config.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'stkGHO Incentives',
- shortName: 'StkGHOIncentives',
- date: '20240424',
- author: 'karpatkey_TokenLogic_ACI',
- discussion: 'https://governance.aave.com/t/arfc-amend-safety-module-emissions/16640',
- snapshot: 'Direct-to-AIP',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19727543}}},
-};
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 6c3394466..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV2Avalanche_StablecoinIRUpdates_20240424 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(10_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(9_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(9_00),
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
-
- return rateStrategies;
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index fef777bf3..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// 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_StablecoinIRUpdates_20240424} from './AaveV2Avalanche_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV2Avalanche_StablecoinIRUpdates_20240424
- */
-contract AaveV2Avalanche_StablecoinIRUpdates_20240424_Test is ProtocolV2TestBase {
- AaveV2Avalanche_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 44613488);
- proposal = new AaveV2Avalanche_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Avalanche_StablecoinIRUpdates_20240424',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 1fe62e6bd..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV2Ethereum_StablecoinIRUpdates_20240424 is AaveV2PayloadEthereum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV2ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](3);
- rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.USDT_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_00),
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.DAI_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_00),
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.USDC_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_00),
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
-
- return rateStrategies;
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index a19b112f9..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_StablecoinIRUpdates_20240424} from './AaveV2Ethereum_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV2Ethereum_StablecoinIRUpdates_20240424
- */
-contract AaveV2Ethereum_StablecoinIRUpdates_20240424_Test is ProtocolV2TestBase {
- AaveV2Ethereum_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19726460);
- proposal = new AaveV2Ethereum_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Ethereum_StablecoinIRUpdates_20240424',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index a6c23392a..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Arbitrum_StablecoinIRUpdates_20240424 is AaveV3PayloadArbitrum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](8);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ArbitrumAssets.DAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(10_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(9_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.EURS_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.MAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.LUSD_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[6] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[7] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 351407a89..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_StablecoinIRUpdates_20240424} from './AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Arbitrum_StablecoinIRUpdates_20240424
- */
-contract AaveV3Arbitrum_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 204403350);
- proposal = new AaveV3Arbitrum_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_StablecoinIRUpdates_20240424',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index c1974afd8..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,97 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Avalanche_StablecoinIRUpdates_20240424 is AaveV3PayloadAvalanche {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](5);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3AvalancheAssets.DAIe_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDt_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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(9_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: AaveV3AvalancheAssets.MAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index eb247fbfc..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Avalanche_StablecoinIRUpdates_20240424} from './AaveV3Avalanche_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Avalanche_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Avalanche_StablecoinIRUpdates_20240424
- */
-contract AaveV3Avalanche_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Avalanche_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 44613923);
- proposal = new AaveV3Avalanche_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Avalanche_StablecoinIRUpdates_20240424',
- AaveV3Avalanche.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 631243c8c..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,69 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol';
-import {AaveV3PayloadBNB} from 'aave-helpers/v3-config-engine/AaveV3PayloadBNB.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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3BNB_StablecoinIRUpdates_20240424 is AaveV3PayloadBNB {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3BNBAssets.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3BNBAssets.USDT_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3BNBAssets.FDUSD_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 1714adcde..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,28 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3BNB_StablecoinIRUpdates_20240424} from './AaveV3BNB_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3BNB_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3BNB_StablecoinIRUpdates_20240424
- */
-contract AaveV3BNB_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3BNB_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('bnb'), 38145971);
- proposal = new AaveV3BNB_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3BNB_StablecoinIRUpdates_20240424', AaveV3BNB.POOL, address(proposal));
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index b7bc94a0b..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,55 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Base_StablecoinIRUpdates_20240424 is AaveV3PayloadBase {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](2);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3BaseAssets.USDbC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(10_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: AaveV3BaseAssets.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 5772b2e73..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,28 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Base_StablecoinIRUpdates_20240424} from './AaveV3Base_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Base_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Base_StablecoinIRUpdates_20240424
- */
-contract AaveV3Base_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Base_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('base'), 13594938);
- proposal = new AaveV3Base_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Base_StablecoinIRUpdates_20240424', AaveV3Base.POOL, address(proposal));
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 69269ef92..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,125 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Ethereum_StablecoinIRUpdates_20240424 is AaveV3PayloadEthereum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](7);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3EthereumAssets.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.DAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDT_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.LUSD_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3EthereumAssets.FRAX_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3EthereumAssets.crvUSD_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[6] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3EthereumAssets.PYUSD_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 064f49a66..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_StablecoinIRUpdates_20240424} from './AaveV3Ethereum_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Ethereum_StablecoinIRUpdates_20240424
- */
-contract AaveV3Ethereum_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Ethereum_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19726460);
- proposal = new AaveV3Ethereum_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_StablecoinIRUpdates_20240424',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 1a10ff133..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,69 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol';
-import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Gnosis_StablecoinIRUpdates_20240424 is AaveV3PayloadGnosis {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3GnosisAssets.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3GnosisAssets.WXDAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3GnosisAssets.EURe_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 787ca0093..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,28 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Gnosis_StablecoinIRUpdates_20240424} from './AaveV3Gnosis_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Gnosis_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Gnosis_StablecoinIRUpdates_20240424
- */
-contract AaveV3Gnosis_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Gnosis_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('gnosis'), 33609191);
- proposal = new AaveV3Gnosis_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Gnosis_StablecoinIRUpdates_20240424', AaveV3Gnosis.POOL, address(proposal));
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 0c8d37d76..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,125 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Optimism_StablecoinIRUpdates_20240424 is AaveV3PayloadOptimism {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](7);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3OptimismAssets.DAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(10_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.USDT_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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(9_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(9_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: AaveV3OptimismAssets.MAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[6] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3OptimismAssets.USDCn_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index b5b538ba7..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_StablecoinIRUpdates_20240424} from './AaveV3Optimism_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Optimism_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Optimism_StablecoinIRUpdates_20240424
- */
-contract AaveV3Optimism_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Optimism_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 119190057);
- proposal = new AaveV3Optimism_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Optimism_StablecoinIRUpdates_20240424',
- AaveV3Optimism.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index 3feb5a315..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Polygon_StablecoinIRUpdates_20240424 is AaveV3PayloadPolygon {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](8);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3PolygonAssets.DAI_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.miMATIC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(10_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: AaveV3PolygonAssets.USDT_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3PolygonAssets.EURS_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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: AaveV3PolygonAssets.jEUR_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[6] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3PolygonAssets.EURA_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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[7] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3PolygonAssets.USDCn_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index 192ee0344..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Polygon_StablecoinIRUpdates_20240424} from './AaveV3Polygon_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Polygon_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Polygon_StablecoinIRUpdates_20240424
- */
-contract AaveV3Polygon_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Polygon_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56205923);
- proposal = new AaveV3Polygon_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Polygon_StablecoinIRUpdates_20240424',
- AaveV3Polygon.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.sol
deleted file mode 100644
index e2f885b75..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol';
-import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.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 StablecoinIRUpdates
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450
- */
-contract AaveV3Scroll_StablecoinIRUpdates_20240424 is AaveV3PayloadScroll {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ScrollAssets.USDC_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(9_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/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.t.sol b/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.t.sol
deleted file mode 100644
index bfd25ff26..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.t.sol
+++ /dev/null
@@ -1,28 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Scroll_StablecoinIRUpdates_20240424} from './AaveV3Scroll_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Test for AaveV3Scroll_StablecoinIRUpdates_20240424
- * command: make test-contract filter=AaveV3Scroll_StablecoinIRUpdates_20240424
- */
-contract AaveV3Scroll_StablecoinIRUpdates_20240424_Test is ProtocolV3TestBase {
- AaveV3Scroll_StablecoinIRUpdates_20240424 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('scroll'), 5094447);
- proposal = new AaveV3Scroll_StablecoinIRUpdates_20240424();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Scroll_StablecoinIRUpdates_20240424', AaveV3Scroll.POOL, address(proposal));
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates.md b/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates.md
deleted file mode 100644
index b52529748..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: "StablecoinIRUpdates"
-author: "Chaos Labs, ACI"
-discussions: "https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450"
-snapshot: "Direct-to-AIP"
----
-
-## Simple Summary
-
-A proposal to decrease stablecoin Interest Rate parameters across all Aave deployments.
-
-## Motivation
-
-Following the [anticipated ](https://vote.makerdao.com/executive/template-executive-vote-stability-fee-changes-dsr-decrease-march-2024-ad-compensation-q1-2024-avc-member-participation-rewards-aave-sparklend-revenue-share-whitelist-new-address-in-the-rwa015-a-output-conduit-usdp-input-conduit-management-spark-proxy-spell-april-22-2024) decrease in DSR—from 13% to 10%—we believe it is prudent to update Aave stablecoin interest rates to best align with the broader market. Previously, we [recommended ](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3/16864/2) increasing both UOptimal and Slope1 for stablecoins to reduce rate volatility. This recommendation was [amended ](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3/16864/2) on the news of the DSR increase from 5% to 15%.
-
-The new parameters went into effect on April 4, 2024, and thus far have helped improve rate stability and utilization rates. As part of our ongoing monitoring of broader markets, we note that MakerDAO is in the process of reducing the DAI Savings Rate, which could impact stablecoin rates throughout DeFi.
-
-Following our methodology laid out in previous [recommendations ](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3/16864/2), we recommend more closely aligning Slope1 with the DSR to reduce the opportunity of rate arbitrage and ensure that borrow rates remains competitive. As a result, we propose decreasing Slope1 by an equivalent amount from 12% to 9%.
-
-Caveats:
-
-1. We do not recommend an update to the following assets on lower-cap stablecoins on Ethereum V2, as they are currently being deprecated.
-2. Similar to the previous proposals, we recommend bridged USDC.e on all deployments to have a 1% higher slope1 to motivate the borrowing of native USDC.
-
-## Specification
-
-| Market | Asset | Current Slope1 | Recommended Slope1 |
-| ------------ | ------ | -------------- | ------------------ |
-| Ethereum V2 | USDC | 12% | 9% |
-| Ethereum V2 | USDT | 12% | 9% |
-| Ethereum V2 | DAI | 12% | 9% |
-| Ethereum V2 | FRAX | 12% | No Change |
-| Ethereum V2 | sUSD | 12% | No Change |
-| Ethereum V2 | GUSD | 12% | No Change |
-| Ethereum V2 | LUSD | 12% | No Change |
-| Ethereum V2 | USDP | 12% | No Change |
-| Ethereum V3 | USDC | 12% | 9% |
-| Ethereum V3 | USDT | 12% | 9% |
-| Ethereum V3 | FRAX | 12% | 9% |
-| Ethereum V3 | DAI | 12% | 9% |
-| Ethereum V3 | LUSD | 12% | 9% |
-| Ethereum V3 | pyUSD | 12% | 9% |
-| Ethereum V3 | crvUSD | 12% | 9% |
-| Avalanche V2 | USDC.e | 13% | 10% |
-| Avalanche V2 | USDT | 12% | 9% |
-| Avalanche V2 | DAI | 12% | 9% |
-| Avalanche V3 | USDC | 12% | 9% |
-| Avalanche V3 | USDT | 12% | 9% |
-| Avalanche V3 | DAI | 12% | 9% |
-| Avalanche V3 | MAI | 12% | 9% |
-| Avalanche V3 | FRAX | 12% | 9% |
-| Polygon V3 | USDC | 12% | 9% |
-| Polygon V3 | USDT | 12% | 9% |
-| Polygon V3 | DAI | 12% | 9% |
-| Polygon V3 | MAI | 12% | 9% |
-| Polygon V3 | EURA | 12% | 9% |
-| Polygon V3 | EURS | 12% | 9% |
-| Polygon V3 | jEUR | 12% | 9% |
-| Polygon V3 | USDC.e | 13% | 10% |
-| Optimism V3 | USDC | 12% | 9% |
-| Optimism V3 | USDT | 12% | 9% |
-| Optimism V3 | DAI | 12% | 9% |
-| Optimism V3 | sUSD | 12% | 9% |
-| Optimism V3 | LUSD | 12% | 9% |
-| Optimism V3 | MAI | 12% | 9% |
-| Optimism V3 | USDC.e | 13% | 10% |
-| Arbitrum V3 | USDC | 12% | 9% |
-| Arbitrum V3 | USDC.e | 13% | 10% |
-| Arbitrum V3 | USDT | 12% | 9% |
-| Arbitrum V3 | DAI | 12% | 9% |
-| Arbitrum V3 | LUSD | 12% | 9% |
-| Arbitrum V3 | FRAX | 12% | 9% |
-| Arbitrum V3 | MAI | 12% | 9% |
-| Arbitrum V3 | EURS | 12% | 9% |
-| Base V3 | USDbC | 13% | 10% |
-| Base V3 | USDC | 12% | 9% |
-| Metis V3 | m.USDC | 6% | No Change |
-| Metis V3 | m.USDT | 6% | No Change |
-| Metis V3 | m.DAI | 6% | No Change |
-| BNB Chain V3 | USDT | 12% | 9% |
-| BNB Chain V3 | USDC | 12% | 9% |
-| BNB Chain V3 | FDUSD | 12% | 9% |
-| Scroll V3 | USDC | 12% | 9% |
-| Gnosis V3 | WXDAI | 12% | 9% |
-| Gnosis V3 | USDC | 12% | 9% |
-| Gnosis V3 | EURe | 12% | 9% |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV2Ethereum_StablecoinIRUpdates_20240424.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV2Avalanche_StablecoinIRUpdates_20240424.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Ethereum_StablecoinIRUpdates_20240424.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Polygon_StablecoinIRUpdates_20240424.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Avalanche_StablecoinIRUpdates_20240424.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Optimism_StablecoinIRUpdates_20240424.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Arbitrum_StablecoinIRUpdates_20240424.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Base_StablecoinIRUpdates_20240424.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Gnosis_StablecoinIRUpdates_20240424.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3Scroll_StablecoinIRUpdates_20240424.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/f123b71c8f30c55710f199d7f377960705dd7993/src/20240424_Multi_StablecoinIRUpdates/AaveV3BNB_StablecoinIRUpdates_20240424.t.sol)
-- Snapshot: Direct-to-AIP
-- [Discussion](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol b/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol
deleted file mode 100644
index 4894fe673..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol
+++ /dev/null
@@ -1,311 +0,0 @@
-// 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, GnosisScript, ScrollScript, BNBScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_StablecoinIRUpdates_20240424} from './AaveV2Ethereum_StablecoinIRUpdates_20240424.sol';
-import {AaveV2Avalanche_StablecoinIRUpdates_20240424} from './AaveV2Avalanche_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Ethereum_StablecoinIRUpdates_20240424} from './AaveV3Ethereum_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Polygon_StablecoinIRUpdates_20240424} from './AaveV3Polygon_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Avalanche_StablecoinIRUpdates_20240424} from './AaveV3Avalanche_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Optimism_StablecoinIRUpdates_20240424} from './AaveV3Optimism_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Arbitrum_StablecoinIRUpdates_20240424} from './AaveV3Arbitrum_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Base_StablecoinIRUpdates_20240424} from './AaveV3Base_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Gnosis_StablecoinIRUpdates_20240424} from './AaveV3Gnosis_StablecoinIRUpdates_20240424.sol';
-import {AaveV3Scroll_StablecoinIRUpdates_20240424} from './AaveV3Scroll_StablecoinIRUpdates_20240424.sol';
-import {AaveV3BNB_StablecoinIRUpdates_20240424} from './AaveV3BNB_StablecoinIRUpdates_20240424.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_StablecoinIRUpdates_20240424).creationCode
- );
- address payload1 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](2);
- actions[0] = GovV3Helpers.buildAction(payload0);
- actions[1] = GovV3Helpers.buildAction(payload1);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployAvalanche chain=avalanche
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_StablecoinIRUpdates_20240424).creationCode
- );
- address payload1 = GovV3Helpers.deployDeterministic(
- type(AaveV3Avalanche_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](2);
- actions[0] = GovV3Helpers.buildAction(payload0);
- actions[1] = GovV3Helpers.buildAction(payload1);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployPolygon chain=polygon
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Polygon_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployOptimism chain=optimism
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Base
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployBase chain=base
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/8453/run-latest.json
- */
-contract DeployBase is BaseScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Base_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Gnosis
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployGnosis chain=gnosis
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/100/run-latest.json
- */
-contract DeployGnosis is GnosisScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Gnosis_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Scroll
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployScroll chain=scroll
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/534352/run-latest.json
- */
-contract DeployScroll is ScrollScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Scroll_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy BNB
- * deploy-command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:DeployBNB chain=bnb
- * verify-command: npx catapulta-verify -b broadcast/StablecoinIRUpdates_20240424.s.sol/56/run-latest.json
- */
-contract DeployBNB is BNBScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3BNB_StablecoinIRUpdates_20240424).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates_20240424.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](9);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](2);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_StablecoinIRUpdates_20240424).creationCode
- );
- actionsEthereum[1] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](2);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_StablecoinIRUpdates_20240424).creationCode
- );
- actionsAvalanche[1] = GovV3Helpers.buildAction(
- type(AaveV3Avalanche_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV3Polygon_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[2] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBase[0] = GovV3Helpers.buildAction(
- type(AaveV3Base_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsGnosis[0] = GovV3Helpers.buildAction(
- type(AaveV3Gnosis_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsScroll[0] = GovV3Helpers.buildAction(
- type(AaveV3Scroll_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[7] = GovV3Helpers.buildScrollPayload(vm, actionsScroll);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBNB[0] = GovV3Helpers.buildAction(
- type(AaveV3BNB_StablecoinIRUpdates_20240424).creationCode
- );
- payloads[8] = GovV3Helpers.buildBNBPayload(vm, actionsBNB);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(vm, 'src/20240424_Multi_StablecoinIRUpdates/StablecoinIRUpdates.md')
- );
- }
-}
diff --git a/src/20240424_Multi_StablecoinIRUpdates/config.ts b/src/20240424_Multi_StablecoinIRUpdates/config.ts
deleted file mode 100644
index f844b13b3..000000000
--- a/src/20240424_Multi_StablecoinIRUpdates/config.ts
+++ /dev/null
@@ -1,797 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- configFile: 'config.ts',
- force: true,
- pools: [
- 'AaveV2Ethereum',
- 'AaveV2Avalanche',
- 'AaveV3Ethereum',
- 'AaveV3Polygon',
- 'AaveV3Avalanche',
- 'AaveV3Optimism',
- 'AaveV3Arbitrum',
- 'AaveV3Base',
- 'AaveV3Gnosis',
- 'AaveV3Scroll',
- 'AaveV3BNB',
- ],
- title: 'StablecoinIRUpdates',
- shortName: 'StablecoinIRUpdates',
- date: '20240424',
- author: 'Chaos Labs, ACI',
- discussion:
- 'https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-04-22-2024/17450',
- snapshot: 'Direct-to-AIP',
- },
- poolOptions: {
- AaveV2Ethereum: {
- configs: {
- RATE_UPDATE_V2: [
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'DAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- ],
- },
- cache: {blockNumber: 19726460},
- },
- AaveV2Avalanche: {
- configs: {
- RATE_UPDATE_V2: [
- {
- asset: 'USDCe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '10',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDTe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'DAIe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 44613488},
- },
- AaveV3Ethereum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'DAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'LUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'FRAX',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'crvUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'PYUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 19726460},
- },
- AaveV3Polygon: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'DAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'miMATIC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '10',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'EURS',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'jEUR',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'EURA',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDCn',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 56205923},
- },
- AaveV3Avalanche: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'DAIe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDt',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'FRAX',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'MAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 44613923},
- },
- AaveV3Optimism: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'DAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '10',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'sUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'LUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'MAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDCn',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 119190057},
- },
- AaveV3Arbitrum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'DAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '10',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'EURS',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'MAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'LUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDCn',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'FRAX',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 204403350},
- },
- AaveV3Base: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'USDbC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '10',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 13594938},
- },
- AaveV3Gnosis: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'WXDAI',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'EURe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 33609191},
- },
- AaveV3Scroll: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 5094447},
- },
- AaveV3BNB: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'USDC',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'USDT',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- {
- asset: 'FDUSD',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '9',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 38145971},
- },
- },
-};
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index f7c1740f7..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadArbitrum {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](3);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3ArbitrumAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3ArbitrumAssets.USDT_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[2] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 62e678d07..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is
- ProtocolV3TestBase
-{
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 204596982);
- proposal = new AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](3);
- assetsChanged[0] = AaveV3ArbitrumAssets.USDCn_UNDERLYING;
- assetsChanged[1] = AaveV3ArbitrumAssets.USDT_UNDERLYING;
- assetsChanged[2] = AaveV3ArbitrumAssets.USDC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](3);
- assetChanges[0] = Change({asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3ArbitrumAssets.USDT_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[2] = Change({asset: AaveV3ArbitrumAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index 0d5d1e7ce..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is
- AaveV3PayloadAvalanche
-{
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3AvalancheAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 81_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 148cc1d4c..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,54 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is
- ProtocolV3TestBase
-{
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 44637823);
- proposal = new AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Avalanche.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
- assetsChanged[0] = AaveV3AvalancheAssets.USDC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](1);
- assetChanges[0] = Change({asset: AaveV3AvalancheAssets.USDC_UNDERLYING, ltv: 75_00, lt: 81_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index 3c2b04beb..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol';
-import {AaveV3PayloadBNB} from 'aave-helpers/v3-config-engine/AaveV3PayloadBNB.sol';
-import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
-import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadBNB {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](2);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3BNBAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3BNBAssets.USDT_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 7c4a86423..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,54 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNB, AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is ProtocolV3TestBase {
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('bnb'), 38162911);
- proposal = new AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3BNB.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](2);
- assetsChanged[0] = AaveV3BNBAssets.USDC_UNDERLYING;
- assetsChanged[1] = AaveV3BNBAssets.USDT_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](2);
- assetChanges[0] = Change({asset: AaveV3BNBAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3BNBAssets.USDT_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index aece34f5d..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadBase {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](2);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3BaseAssets.USDbC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3BaseAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 54e6b38b2..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,54 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is ProtocolV3TestBase {
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('base'), 13619784);
- proposal = new AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Base.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](2);
- assetsChanged[0] = AaveV3BaseAssets.USDC_UNDERLYING;
- assetsChanged[1] = AaveV3BaseAssets.USDbC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](2);
- assetChanges[0] = Change({asset: AaveV3BaseAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3BaseAssets.USDbC_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index 6d635a20f..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadEthereum {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](3);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3EthereumAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3EthereumAssets.USDT_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[2] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3EthereumAssets.sDAI_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 9b4808489..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is
- ProtocolV3TestBase
-{
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19781181);
- proposal = new AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](3);
- assetsChanged[0] = AaveV3EthereumAssets.USDC_UNDERLYING;
- assetsChanged[1] = AaveV3EthereumAssets.USDT_UNDERLYING;
- assetsChanged[2] = AaveV3EthereumAssets.sDAI_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](3);
- assetChanges[0] = Change({asset: AaveV3EthereumAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3EthereumAssets.USDT_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[2] = Change({asset: AaveV3EthereumAssets.sDAI_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index f970ae6b3..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol';
-import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol';
-import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
-import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadGnosis {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](2);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3GnosisAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3GnosisAssets.sDAI_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index f42afa75d..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,54 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Gnosis, AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is ProtocolV3TestBase {
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('gnosis'), 33741852);
- proposal = new AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Gnosis.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](2);
- assetsChanged[0] = AaveV3GnosisAssets.USDC_UNDERLYING;
- assetsChanged[1] = AaveV3GnosisAssets.sDAI_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](2);
- assetChanges[0] = Change({asset: AaveV3GnosisAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3GnosisAssets.sDAI_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index c6d73d40c..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadOptimism {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](3);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 80_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.USDT_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[2] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.USDCn_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index 5f0f1eb87..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is
- ProtocolV3TestBase
-{
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 119214892);
- proposal = new AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Optimism.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](3);
- assetsChanged[0] = AaveV3OptimismAssets.USDCn_UNDERLYING;
- assetsChanged[1] = AaveV3OptimismAssets.USDT_UNDERLYING;
- assetsChanged[2] = AaveV3OptimismAssets.USDC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](3);
- assetChanges[0] = Change({asset: AaveV3OptimismAssets.USDCn_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3OptimismAssets.USDT_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[2] = Change({asset: AaveV3OptimismAssets.USDC_UNDERLYING, ltv: 75_00, lt: 80_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index 12d66d83d..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadPolygon {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](3);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3PolygonAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3PolygonAssets.USDT_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[2] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3PolygonAssets.USDCn_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index b752717ac..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,56 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is ProtocolV3TestBase {
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56227814);
- proposal = new AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Polygon.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](3);
- assetsChanged[0] = AaveV3PolygonAssets.USDCn_UNDERLYING;
- assetsChanged[1] = AaveV3PolygonAssets.USDT_UNDERLYING;
- assetsChanged[2] = AaveV3PolygonAssets.USDC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](3);
- assetChanges[0] = Change({asset: AaveV3PolygonAssets.USDCn_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[1] = Change({asset: AaveV3PolygonAssets.USDT_UNDERLYING, ltv: 75_00, lt: 78_00});
- assetChanges[2] = Change({asset: AaveV3PolygonAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
deleted file mode 100644
index b701276a8..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol';
-import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.sol';
-import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
-import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
-/**
- * @title Generalized LT/LTV Reductions on Aave V3 Step 2
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274
- * - Discussion: https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455
- */
-contract AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 is AaveV3PayloadScroll {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3ScrollAssets.USDC_UNDERLYING,
- ltv: 75_00,
- liqThreshold: 78_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
deleted file mode 100644
index f36978160..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol
+++ /dev/null
@@ -1,52 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Scroll, AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Test for AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- * command: make test-contract filter=AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425
- */
-contract AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425_Test is ProtocolV3TestBase {
- struct Change {
- address asset;
- uint256 lt;
- uint256 ltv;
- }
-
- AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('scroll'), 5111380);
- proposal = new AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425',
- AaveV3Scroll.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
- assetsChanged[0] = AaveV3ScrollAssets.USDC_UNDERLYING;
-
- Change[] memory assetChanges = new Change[](1);
- assetChanges[0] = Change({asset: AaveV3ScrollAssets.USDC_UNDERLYING, ltv: 75_00, lt: 78_00});
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory config = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(config.ltv, assetChanges[i].ltv);
- assertEq(config.liquidationThreshold, assetChanges[i].lt);
- }
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2.md b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2.md
deleted file mode 100644
index eb779766f..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Generalized LT/LTV Reductions on Aave V3 Step 2"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455"
----
-
-## Simple Summary
-
-Reduce stablecoin LTs and LTVs across all markets.
-
-## Motivation
-
-Following a successful implementation of [Phase I](https://governance.aave.com/t/generalized-lt-ltv-reduction-on-aave/16766) of our plan to reduce stablecoin LTs and LTVs, we would like to propose the next phase. Additionally, we have updated our recommended final state for all associated stablecoins, with LTVs and LTs harmonized across all chains at 75% and 78%, respectively.
-
-Please note that given the [proposal](https://governance.aave.com/t/arfc-risk-parameters-for-dai-update/17211) to adjust DAI and sDAI risk parameters, it has been excluded from this proposal.
-
-## Specification
-
-### Ethereum
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $2,600 |
-| USDT | 76% | 75% | 79% | 78% | $0 |
-| sDAI | 63% | 75% | 77% | 78% | |
-
-### Gnosis
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $0 |
-| sDAI | 63% | 75% | 77% | 78% | |
-
-### Base
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $3.80 |
-| USDbC | 76% | 75% | 79% | 78% | $0.40 |
-
-### Scroll
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $103 |
-
-### Polygon
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ------ | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $0 |
-| USDT | 76% | 75% | 79% | 78% | $833 |
-| USDC.e | 76% | 75% | 79% | 78% | $4,700 |
-
-### Arbitrum
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ------ | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $0 |
-| USDT | 76% | 75% | 79% | 78% | $5.30 |
-| USDC.e | 76% | 75% | 79% | 78% | $1,000 |
-
-### Optimism
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ------ | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $3,700 |
-| USDT | 76% | 75% | 79% | 78% | $63 |
-| USDC.e | 78% | 75% | 84% | 80% | $5,800 |
-
-### BNB
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 76% | 75% | 79% | 78% | $3,700 |
-| USDT | 76% | 75% | 79% | 78% | $0 |
-
-### Avalanche
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | New Liquidations |
-| ----- | ----------- | --------------- | ---------- | -------------- | ---------------- |
-| USDC | 80% | 75% | 85% | 81% | $23,700 |
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/781a82ff1d61529dc6d76da76cc47b524976f6c0/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274)
-- [Discussion](https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol
deleted file mode 100644
index 38a3e8e1e..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol
+++ /dev/null
@@ -1,298 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-import {AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425} from './AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployPolygon chain=polygon
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployAvalanche chain=avalanche
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployOptimism chain=optimism
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Base
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployBase chain=base
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/8453/run-latest.json
- */
-contract DeployBase is BaseScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Gnosis
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployGnosis chain=gnosis
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/100/run-latest.json
- */
-contract DeployGnosis is GnosisScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Scroll
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployScroll chain=scroll
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/534352/run-latest.json
- */
-contract DeployScroll is ScrollScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy BNB
- * deploy-command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:DeployBNB chain=bnb
- * verify-command: npx catapulta-verify -b broadcast/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol/56/run-latest.json
- */
-contract DeployBNB is BNBScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2_20240425.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](9);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV3Polygon_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV3Avalanche_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBase[0] = GovV3Helpers.buildAction(
- type(AaveV3Base_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsGnosis[0] = GovV3Helpers.buildAction(
- type(AaveV3Gnosis_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsScroll[0] = GovV3Helpers.buildAction(
- type(AaveV3Scroll_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[7] = GovV3Helpers.buildScrollPayload(vm, actionsScroll);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBNB[0] = GovV3Helpers.buildAction(
- type(AaveV3BNB_GeneralizedLTLTVReductionsOnAaveV3Step2_20240425).creationCode
- );
- payloads[8] = GovV3Helpers.buildBNBPayload(vm, actionsBNB);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/GeneralizedLTLTVReductionsOnAaveV3Step2.md'
- )
- );
- }
-}
diff --git a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/config.ts b/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/config.ts
deleted file mode 100644
index 4d5282291..000000000
--- a/src/20240425_Multi_GeneralizedLTLTVReductionsOnAaveV3Step2/config.ts
+++ /dev/null
@@ -1,219 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: [
- 'AaveV3Ethereum',
- 'AaveV3Polygon',
- 'AaveV3Avalanche',
- 'AaveV3Optimism',
- 'AaveV3Arbitrum',
- 'AaveV3Base',
- 'AaveV3Gnosis',
- 'AaveV3Scroll',
- 'AaveV3BNB',
- ],
- title: 'Generalized LT/LTV Reductions on Aave V3 Step 2',
- shortName: 'GeneralizedLTLTVReductionsOnAaveV3Step2',
- date: '20240425',
- author: 'Chaos Labs',
- discussion:
- 'https://governance.aave.com/t/arfc-generalized-lt-ltv-reductions-on-aave-v3-step-2-04-23-2024/17455',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x4067d91ef5864925136d10ec9419f032a70f7e6489740386e348488426656274',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDT',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 19730712},
- },
- AaveV3Polygon: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDT',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDCn',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 56227814},
- },
- AaveV3Avalanche: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '81',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 44637823},
- },
- AaveV3Optimism: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '80',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDT',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDCn',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 119214892},
- },
- AaveV3Arbitrum: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDT',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDCn',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 204596982},
- },
- AaveV3Base: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDbC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 13619784},
- },
- AaveV3Gnosis: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 33619103},
- },
- AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 5111380}},
- AaveV3BNB: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'USDC',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'USDT',
- ltv: '75',
- liqThreshold: '78',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 38162911},
- },
- },
-};
diff --git a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol b/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol
deleted file mode 100644
index 463a07921..000000000
--- a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol
+++ /dev/null
@@ -1,73 +0,0 @@
-// 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 Updating weETH Risk Parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xf01d857c392a5d3efcd69725cdee5a5d8e94e5cbe952791d24ff26a26f2b83fa
- * - Discussion: https://governance.aave.com/t/arfc-updating-weeth-risk-parameters/17402
- */
-contract AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426 is AaveV3PayloadEthereum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3EthereumAssets.weETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(35_00),
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: EngineFlags.KEEP_CURRENT,
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT,
- baseStableRateOffset: EngineFlags.KEEP_CURRENT,
- stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
- optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
- })
- });
-
- return rateStrategies;
- }
- function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) {
- IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1);
-
- capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({
- asset: AaveV3EthereumAssets.weETH_UNDERLYING,
- supplyCap: 84_000,
- borrowCap: 29_500
- });
-
- return capsUpdate;
- }
- function borrowsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.BorrowUpdate[] memory)
- {
- IAaveV3ConfigEngine.BorrowUpdate[]
- memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1);
-
- borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({
- asset: AaveV3EthereumAssets.weETH_UNDERLYING,
- enabledToBorrow: EngineFlags.KEEP_CURRENT,
- flashloanable: EngineFlags.KEEP_CURRENT,
- stableRateModeEnabled: EngineFlags.KEEP_CURRENT,
- borrowableInIsolation: EngineFlags.KEEP_CURRENT,
- withSiloedBorrowing: EngineFlags.KEEP_CURRENT,
- reserveFactor: 45_00
- });
-
- return borrowUpdates;
- }
-}
diff --git a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.t.sol b/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.t.sol
deleted file mode 100644
index 75409e0f8..000000000
--- a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426} from './AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426
- * command: make test-contract filter=AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426
- */
-contract AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426_Test is ProtocolV3TestBase {
- AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19735235);
- proposal = new AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters.md b/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters.md
deleted file mode 100644
index 4933c3304..000000000
--- a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: "Updating weETH Risk Parameters"
-author: "Aave Chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-updating-weeth-risk-parameters/17402"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0xf01d857c392a5d3efcd69725cdee5a5d8e94e5cbe952791d24ff26a26f2b83fa"
----
-
-## Simple Summary
-
-This proposal aims to update the risk parameters and interest rate strategy of the weETH asset on the Ethereum pool to boost Aave DAO revenue and encourage collateral adoption.
-
-## Motivation
-
-The successful onboarding of EtherFI into Aave has demonstrated significant demand for weETH usage as both collateral and a borrowing asset, with both initial supply caps reached in minutes and second cap increases filled under similar conditions. To accommodate this demand and facilitate protocol growth, this proposal suggests increasing the supply cap of weETH on the Ethereum pool and the borrow cap at 35% of the new supply cap amount. This proposal also aims at changing the interestRate Strategy to place the optimal ratio at 35% of liquidity.
-
-Expanding borrow capacity will result in a higher collateral yield, which in turn creates a positive flywheel effect on supply and demand. By maintaining the borrow cap at an optimal ratio (35%) of the supply cap, we can balance risk, available liquidity, and LP yield effectively.
-
-We also propose to increase weETH RF to 45% to contribute to Aave DAO revenue.
-
-## Specification
-
-The following changes will be made to the **weETH** asset on Aave EthereumV3:
-
-| Parameters | Current | Recommended |
-| -------------- | ------- | ----------- |
-| Supply Cap | 48,000 | 84,000 |
-| Borrows Caps | 3,200 | 29,500 |
-| UOpt | 45% | 35% |
-| Reserve Factor | 15% | 45% |
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bbbfdace00fcae8c0d89f2c7916eb56af1f4e21c/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bbbfdace00fcae8c0d89f2c7916eb56af1f4e21c/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xf01d857c392a5d3efcd69725cdee5a5d8e94e5cbe952791d24ff26a26f2b83fa)
-- [Discussion](https://governance.aave.com/t/arfc-updating-weeth-risk-parameters/17402)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters_20240426.s.sol b/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters_20240426.s.sol
deleted file mode 100644
index 4b640ba43..000000000
--- a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters_20240426.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426} from './AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters_20240426.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/UpdatingWeETHRiskParameters_20240426.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters_20240426.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_UpdatingWeETHRiskParameters_20240426).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/UpdatingWeETHRiskParameters.md'
- )
- );
- }
-}
diff --git a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/config.ts b/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/config.ts
deleted file mode 100644
index 95e229584..000000000
--- a/src/20240426_AaveV3Ethereum_UpdatingWeETHRiskParameters/config.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- author: 'Aave Chan Initiative',
- pools: ['AaveV3Ethereum'],
- title: 'Updating weETH Risk Parameters',
- shortName: 'UpdatingWeETHRiskParameters',
- date: '20240426',
- discussion: 'https://governance.aave.com/t/arfc-updating-weeth-risk-parameters/17402',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xf01d857c392a5d3efcd69725cdee5a5d8e94e5cbe952791d24ff26a26f2b83fa',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'weETH',
- params: {
- optimalUtilizationRate: '35',
- baseVariableBorrowRate: '',
- variableRateSlope1: '',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- CAPS_UPDATE: [{asset: 'weETH', supplyCap: '84000', borrowCap: '29500'}],
- BORROWS_UPDATE: [
- {
- enabledToBorrow: 'KEEP_CURRENT',
- flashloanable: 'KEEP_CURRENT',
- stableRateModeEnabled: 'KEEP_CURRENT',
- borrowableInIsolation: 'KEEP_CURRENT',
- withSiloedBorrowing: 'KEEP_CURRENT',
- reserveFactor: '45',
- asset: 'weETH',
- },
- ],
- },
- cache: {blockNumber: 19735235},
- },
- },
-};
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution.md b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution.md
deleted file mode 100644
index 843ac23e1..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: "aAMPL Second Distribution"
-author: "BGD Labs (@bgdlabs)"
-discussions: "https://governance.aave.com/t/arfc-aampl-second-distribution/17464"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x372ea60168390ca30be8890ae18ba3c1bb171428ad613a3c8c1a568721c1d65d"
----
-
-## Simple Summary
-
-A proposal for a follow-up distribution of 766'436 aUSDC (762'604 aUSDC + 3'832 aUSDC angle labs fee) from the Aave Collector to allow full withdrawals by aAMPL suppliers to Aave v2 Ethereum, consequence of the problem detected at the end of 2023.
-
-## Motivation
-
-In December 2023, a problem was detected on the AMPL custom reserve on Aave v2 Ethereum, causing an unexpected inflation of AMPL-related balances and supply, not following the intended design by the Ampleforth team.
-
-After further analysis and remediation strategy, the Aave governance approved and executed a proposal on April 17th to provide approximately 300’000 USDC for aAMPL holders to claim. This was designed as an initial and interim distribution, with the sole objective of providing liquidity for users affected as soon as possible. Meanwhile, the service providers of the Aave DAO and the Ampleforth team completed further analysis for a final distribution proposal; this one.
-
-## Specification
-
-To fully understand the problem at hand and the rationale of this distribution, we recommend mandatorily reading its specification on the [forum](https://governance.aave.com/t/ampl-problem-on-aave-v2-ethereum/15886/155), to make an informed decision.
-
-In summary, this proposal recommends making claimable 766'436 aUSDC (762'604 aUSDC + 3'832 aUSDC angle labs fee) from the Aave Ethereum Collector, in addition to the already distributed 300’000 USDC, making a total of approximately $1,066,436.
-
-Some key points output of the analysis are:
-
-- Decisions when doing the analysis have been made to favor aAMPL holders, whenever it was subjective generally, but always trying to maintain objectivity on the expected dynamics of AMPL on Aave.
-- Real returns of supplied AMPL on Aave have been recalculated from the freezing period until the expected execution time of the proposal (beginning of May 2024). This approach, compared to calculating from market inception, preserves four times more AMPL for users, maximizing welfare for AMPL suppliers.
-- The previous analysis resulted in identifying a claimable amount of 351,579 AMPL as of December 16th, 2023, after rectifying highly evident artificial inflation within the 764,303 aAMPL total supply. As a reference point, debt levels were observed to be at 42,847 AMPL during that period.
-- As further compensation for the time passed since December during which funds were not withdrawable, the latest on-chain rate is applicable on the 351’579 AMPL: 256% compounding for more than 4 months, which results in a total of 882’869 AMPL, or $1,057,677.
- Uniform 100% utilization from 16th December 2023 to the beginning of May 2024 is considered, disregarding the underlying rebases of AMPL. This also tries to heavily increase the amount received by aAMPL holders, as once again, debt levels are currently just 72K vAMPL, compared to the much greater compensation amount.
-- Pricing claims at $1.198 price per AMPL, despite the price falling below and negative rebases accruing on the aAMPL supply since.
- Any holding by the Aave Collector contract is not included in the compensation, to increase the amount received by other aAMPL holders.
-- Interest generated from the 300’000 available on 17th April to withdraw is discounted, as those funds are fully claimable by users.
-- The claim for the Mooniswap pool has been proxied with sub-claims for LPs on it.
-
-The Ampleforth team agreed to compensate 40% of the total after proposal execution, as stated on https://governance.aave.com/t/ampl-problem-on-aave-v2-ethereum/15886/128, which will be done after Aave fully approves this distribution.
-
-Regarding the technical details, the proposal will:
-
-- Transfer v3 aUSDC from the collector (766.436k including a 0.5% fee for angle labs)
-- Approve the full amount to [0x8BB4C975Ff3c250e0ceEA271728547f3802B36Fd](https://etherscan.io/address/0x8BB4C975Ff3c250e0ceEA271728547f3802B36Fd) which is the distribution creator by Angle Labs
-- Create a campaign to distribute funds to the affected users
-
-2 hours after proposal execution, users will be able to claim the aUSDC on https://app.merkl.xyz/
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f54bd5c228fc7789a4ea3f0c5ef77fe70f4be020/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/f54bd5c228fc7789a4ea3f0c5ef77fe70f4be020/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x372ea60168390ca30be8890ae18ba3c1bb171428ad613a3c8c1a568721c1d65d)
-- [Discussion](https://governance.aave.com/t/arfc-aampl-second-distribution/17464)
-- [Distribution:IPFS](https://angle-blog.infura-ipfs.io/ipfs/QmTvv4u6MUb6cwThCi7tma1ZJ1XUe9mQmaGcHEmLZhazre)
-- [Distribution:formatted](https://github.com/bgd-labs/aave-proposals-v3/blob/f54bd5c228fc7789a4ea3f0c5ef77fe70f4be020/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/distribution.pdf)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution_20240429.s.sol b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution_20240429.s.sol
deleted file mode 100644
index 20989aee7..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution_20240429.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_AAMPLSecondDistribution_20240429} from './AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution_20240429.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/AAMPLSecondDistribution_20240429.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_AAMPLSecondDistribution_20240429).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution_20240429.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_AAMPLSecondDistribution_20240429).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AAMPLSecondDistribution.md'
- )
- );
- }
-}
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol
deleted file mode 100644
index 940e3fd1a..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol
+++ /dev/null
@@ -1,53 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IDistributionCreator} from './interfaces/IDistributionCreator.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-
-/**
- * @title aAMPL Second Distribution
- * @author BGD Labs (@bgdlabs)
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x372ea60168390ca30be8890ae18ba3c1bb171428ad613a3c8c1a568721c1d65d
- * - Discussion: https://governance.aave.com/t/arfc-aampl-second-distribution/17464
- */
-contract AaveV2Ethereum_AAMPLSecondDistribution_20240429 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
-
- IDistributionCreator public constant DISTRIBUTION_CREATOR =
- IDistributionCreator(0x8BB4C975Ff3c250e0ceEA271728547f3802B36Fd);
- address public constant REWARD_TOKEN = AaveV3EthereumAssets.USDC_A_TOKEN;
- uint256 public constant REWARD_AMOUNT_PLUS_FEES = 766_436_793678;
- string public constant FILE_URL =
- 'https://angle-blog.infura-ipfs.io/ipfs/QmTvv4u6MUb6cwThCi7tma1ZJ1XUe9mQmaGcHEmLZhazre';
-
- function execute() external {
- // 1. send funds to executor (0.5% fee for angle merkle distributor)
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.USDC_A_TOKEN,
- address(this),
- REWARD_AMOUNT_PLUS_FEES + 1 // account for imprecision on transfer
- );
-
- uint256 aUSDCBalance = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(address(this));
-
- // 2. approve to merkl
- IERC20(REWARD_TOKEN).forceApprove(address(DISTRIBUTION_CREATOR), aUSDCBalance);
-
- // 3. create campaign
- IDistributionCreator.CampaignParameters memory newCampaign = IDistributionCreator
- .CampaignParameters({
- campaignId: '',
- creator: address(0),
- rewardToken: REWARD_TOKEN,
- amount: aUSDCBalance,
- campaignType: 4,
- startTimestamp: uint32(block.timestamp + 2 hours),
- duration: 1 hours,
- campaignData: abi.encode(FILE_URL, string(''), bytes('0x'))
- });
- DISTRIBUTION_CREATOR.createCampaign(newCampaign);
- }
-}
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.t.sol b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.t.sol
deleted file mode 100644
index 1444229c9..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/AaveV2Ethereum_AAMPLSecondDistribution_20240429.t.sol
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_AAMPLSecondDistribution_20240429, IDistributionCreator} from './AaveV2Ethereum_AAMPLSecondDistribution_20240429.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_AAMPLSecondDistribution_20240429
- * command: make test-contract filter=AaveV2Ethereum_AAMPLSecondDistribution_20240429
- */
-contract AaveV2Ethereum_AAMPLSecondDistribution_20240429_Test is ProtocolV2TestBase {
- AaveV2Ethereum_AAMPLSecondDistribution_20240429 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19761486);
- proposal = new AaveV2Ethereum_AAMPLSecondDistribution_20240429();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV2Ethereum_AAMPLSecondDistribution_20240429',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_createCampaign() public {
- executePayload(vm, address(proposal));
-
- IDistributionCreator.CampaignParameters memory campaign = proposal
- .DISTRIBUTION_CREATOR()
- .campaign(bytes32(0x04538a26c6088b568f6364ccc59b577ece656177c84076ab281dba3ea91576c7));
-
- assertEq(campaign.creator, GovernanceV3Ethereum.EXECUTOR_LVL_1);
- assertEq(campaign.rewardToken, proposal.REWARD_TOKEN());
- assertLt(campaign.amount, proposal.REWARD_AMOUNT_PLUS_FEES() + 1);
- assertEq(campaign.campaignType, 4);
- assertGt(campaign.startTimestamp, block.timestamp);
- assertEq(campaign.duration, 3600);
- (string memory url, , ) = abi.decode(campaign.campaignData, (string, string, bytes));
- assertEq(url, proposal.FILE_URL());
- }
-}
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/config.ts b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/config.ts
deleted file mode 100644
index 2d852f682..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum'],
- title: 'aAMPL Second Distribution',
- shortName: 'AAMPLSecondDistribution',
- date: '20240429',
- author: 'BGD Labs (@bgdlabs)',
- discussion: 'https://governance.aave.com/t/arfc-aampl-second-distribution/17464',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x372ea60168390ca30be8890ae18ba3c1bb171428ad613a3c8c1a568721c1d65d',
- },
- poolOptions: {AaveV2Ethereum: {configs: {}, cache: {blockNumber: 19760445}}},
-};
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/distribution.pdf b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/distribution.pdf
deleted file mode 100644
index 68e2794ca..000000000
Binary files a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/distribution.pdf and /dev/null differ
diff --git a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/interfaces/IDistributionCreator.sol b/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/interfaces/IDistributionCreator.sol
deleted file mode 100644
index 9661d3d47..000000000
--- a/src/20240429_AaveV2Ethereum_AAMPLSecondDistribution/interfaces/IDistributionCreator.sol
+++ /dev/null
@@ -1,36 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-interface IDistributionCreator {
- struct CampaignParameters {
- // POPULATED ONCE CREATED
-
- // ID of the campaign. This can be left as a null bytes32 when creating campaigns
- // on Merkl.
- bytes32 campaignId;
- // CHOSEN BY CAMPAIGN CREATOR
-
- // Address of the campaign creator, if marked as address(0), it will be overriden with the
- // address of the `msg.sender` creating the campaign
- address creator;
- // Address of the token used as a reward
- address rewardToken;
- // Amount of `rewardToken` to distribute across all the epochs
- // Amount distributed per epoch is `amount/numEpoch`
- uint256 amount;
- // Type of campaign
- uint32 campaignType;
- // Timestamp at which the campaign should start
- uint32 startTimestamp;
- // Duration of the campaign in seconds. Has to be a multiple of EPOCH = 3600
- uint32 duration;
- // Extra data to pass to specify the campaign
- bytes campaignData;
- }
-
- function campaign(bytes32 id) external view returns (CampaignParameters memory);
-
- function acceptConditions() external;
-
- function createCampaign(CampaignParameters memory newCampaign) external returns (bytes32);
-}
diff --git a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation.md b/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation.md
deleted file mode 100644
index 92bbca74f..000000000
--- a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: "Aave V1 Deprecation Phase 3"
-author: "BGD Labs @bgdlabs"
-discussions: "https://governance.aave.com/t/temp-check-bgd-further-aave-v1-deprecation-strategy/15893/7"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x7451f00809986c7cb8cce7ef4587efdfedad06089ebf2851d64122d00b035d9c"
----
-
-## Simple Summary
-
-Approve further steps of Aave v1 off-boarding, to reduce operational overhead on deprecated Aave instances.
-
-## Motivation
-
-The Aave protocol v1 was released in January 2020 and eventually superseded by Aave protocol v2 in December on the same year.
-
-While Aave v1 has been deprecated for a long time, some liquidity is still stuck on the protocol 1. Even if this instance is not covered by the Aave Safety Module, being part of Aave, it still is monitored and evaluated whenever development and/or security decisions are made.
-
-This creates meaningful overhead for all involved development & security teams, which directly adds cost to the Aave DAO. Additionally, the architecture of Aave v1 is quite different to Aave v2 & v3, making it the most ad-hoc instance of Aave.
-
-On [6th of february](https://vote.onaave.com/proposal/?proposalId=15) a first set of measures was implemented by the DAO to accelerate the offboarding process, followed by a second proposal on [3th of march](https://vote.onaave.com/proposal/?proposalId=37&ipfsHash=0xa451c9a2426267673fd125702c99581683426ca5ff1a003b07a3cd129ed30470).
-
-This `Phase 3` is the final phase of the off-boarding as suggested on the [forum](https://governance.aave.com/t/temp-check-bgd-further-aave-v1-deprecation-strategy/15893/7) with some slight modifications:
-
-- the proposal does not inject capital to core. The rational being that:
- - there is enough liquidity for even the biggest account of each asset to withdraw.
- - it's not possible to calculate the **exact** amount of bad debt as some of the debt is collateralized with a basket of relatively small collateral positions.
- - if a situation in which a user cannot withdraw due to liquidity constrains ever occurs the treasury managers can easily inject capital at any point.
-- the proposal also replaces the stable asset oracles with the capo oracles introduced on [aave v2](https://vote.onaave.com/proposal/?proposalId=82&ipfsHash=0x4886864ed1dc6cb220f17cd372697218cbb5c2ada41e63d6a1f7664168d59052) for consistency across the pools.
-
-## Specification
-
-Upon execution the proposal upgrades the following contracts:
-
-- POOL: in order to disable all actions, but liquidation, repay & withdraw
-- POOL_CORE: in order to update the index upon IR updates
-- POOL_LIQUIDATION_MANAGER: in order to increase the static liquidation penalty from 3% to 5%, while reducing the gas overhead
-
-Also, the proposal will change the pool configuration:
-
-- all reserves interest rate strategies will be replaced with a zero interest rate strategy
-- the stablecoin oracles are replaced with the capped oracles also used on ethereum v2
-
-## References
-
-- Implementation: [AaveV1Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/016fe7db25ffa0de51b283fc2574762af7aea9e3/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.sol)
-- Tests: [AaveV1Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/016fe7db25ffa0de51b283fc2574762af7aea9e3/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x7451f00809986c7cb8cce7ef4587efdfedad06089ebf2851d64122d00b035d9c)
-- [Discussion](https://governance.aave.com/t/temp-check-bgd-further-aave-v1-deprecation-strategy/15893/7)
-- [Upgraded V1 Contracts](https://github.com/bgd-labs/v1-offboarding)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation_20240502.s.sol b/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation_20240502.s.sol
deleted file mode 100644
index e9e392ca9..000000000
--- a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation_20240502.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV1Ethereum_AaveV1Deprecation_20240502} from './AaveV1Ethereum_AaveV1Deprecation_20240502.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation_20240502.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/AaveV1Deprecation_20240502.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV1Ethereum_AaveV1Deprecation_20240502).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation_20240502.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV1Ethereum_AaveV1Deprecation_20240502).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Deprecation.md'
- )
- );
- }
-}
diff --git a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.sol b/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.sol
deleted file mode 100644
index d690c3bfb..000000000
--- a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.sol
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV1} from 'aave-address-book/AaveV1.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-interface ILendingPoolCore {
- function getReserves() external view returns (address[] memory);
-
- function getReserveInterestRateStrategyAddress(address) external view returns (address);
-
- function getReserveATokenAddress(address) external view returns (address);
-
- function getReserveLiquidityCumulativeIndex(address) external view returns (uint256);
-
- function getReserveVariableBorrowsCumulativeIndex(address) external view returns (uint256);
-
- function getReserveCurrentLiquidityRate(address) external view returns (uint256);
-
- function getReserveCurrentVariableBorrowRate(address) external view returns (uint256);
-
- function getReserveCurrentStableBorrowRate(address) external view returns (uint256);
-}
-
-interface ILendingPoolAddressesProvider {
- function getLendingPoolCore() external view returns (address);
-
- function setLendingPoolCoreImpl(address _core) external;
-
- function getLendingPool() external view returns (address);
-
- function setLendingPoolImpl(address _pool) external;
-
- function getLendingPoolLiquidationManager() external view returns (address);
-
- function setLendingPoolLiquidationManager(address _manager) external;
-}
-
-interface IPoolConfigurator {
- function setReserveInterestRateStrategyAddress(
- address _reserve,
- address _rateStrategyAddress
- ) external;
-}
-
-interface IAaveOracle {
- function setAssetSources(address[] calldata _assets, address[] calldata _sources) external;
-
- function getAssetPrice(address asset) external returns (uint256);
-}
-
-interface IWETH {
- function withdraw(uint256) external;
-}
-
-/**
- * @title Aave V1 Deprecation
- * @author BGD Labs @bgdlabs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7451f00809986c7cb8cce7ef4587efdfedad06089ebf2851d64122d00b035d9c
- * - Discussion: https://governance.aave.com/t/temp-check-bgd-further-aave-v1-deprecation-strategy/15893/7
- */
-contract AaveV1Ethereum_AaveV1Deprecation_20240502 is IProposalGenericExecutor {
- ILendingPoolAddressesProvider public constant ADDRESSES_PROVIDER =
- ILendingPoolAddressesProvider(AaveV1.ADDRESSES_PROVIDER);
- IPoolConfigurator public constant CONFIGURATOR =
- IPoolConfigurator(0x4965f6FA20fE9728deCf5165016fc338a5a85aBF);
- ILendingPoolCore public constant CORE =
- ILendingPoolCore(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
- IAaveOracle public constant ORACLE = IAaveOracle(0x76B47460d7F7c5222cFb6b6A75615ab10895DDe4);
-
- address public constant CORE_IMPL = address(0x0E26E0bf83b4ec2cb0dcbC037bb01dA5BB352eAE);
- address public constant ZERO_IR = address(0xB20E27A199404bf9BCD56e37B6dE07DC906581Db);
- address public constant LIQUIDATION_MANAGER_IMPL =
- address(0xB67347196F551d1f85B7a07e64e0E47E6c9c254a);
- address public constant POOL_IMPL = address(0x588790f64ac1424862081A56b8329Decae206249);
-
- function execute() external {
- // 1. upgrade core to update irs one last time
- ADDRESSES_PROVIDER.setLendingPoolCoreImpl(CORE_IMPL);
- // 2. upgrade irs to be zero & deactivate reserve
- address[] memory reserves = CORE.getReserves();
- for (uint256 i = 0; i < reserves.length; i++) {
- CONFIGURATOR.setReserveInterestRateStrategyAddress(reserves[i], ZERO_IR);
- }
- // 3. upgrade liquidationManager
- ADDRESSES_PROVIDER.setLendingPoolLiquidationManager(LIQUIDATION_MANAGER_IMPL);
- // 4. upgrade lending pool
- ADDRESSES_PROVIDER.setLendingPoolImpl(POOL_IMPL);
- // 5. upgrade stablecoin oracles
- address[] memory assets = new address[](6);
- address[] memory sources = new address[](6);
- assets[0] = AaveV2EthereumAssets.BUSD_UNDERLYING;
- sources[0] = AaveV2EthereumAssets.BUSD_ORACLE;
- assets[1] = AaveV2EthereumAssets.DAI_UNDERLYING;
- sources[1] = AaveV2EthereumAssets.DAI_ORACLE;
- assets[2] = AaveV2EthereumAssets.USDC_UNDERLYING;
- sources[2] = AaveV2EthereumAssets.USDC_ORACLE;
- assets[3] = AaveV2EthereumAssets.TUSD_UNDERLYING;
- sources[3] = AaveV2EthereumAssets.TUSD_ORACLE;
- assets[4] = AaveV2EthereumAssets.sUSD_UNDERLYING;
- sources[4] = AaveV2EthereumAssets.sUSD_ORACLE;
- assets[5] = AaveV2EthereumAssets.USDT_UNDERLYING;
- sources[5] = AaveV2EthereumAssets.USDT_ORACLE;
- ORACLE.setAssetSources(assets, sources);
- }
-}
diff --git a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.t.sol b/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.t.sol
deleted file mode 100644
index bb73ca0ac..000000000
--- a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/AaveV1Ethereum_AaveV1Deprecation_20240502.t.sol
+++ /dev/null
@@ -1,298 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import 'forge-std/Test.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV1} from 'aave-address-book/AaveV1.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV1Ethereum_AaveV1Deprecation_20240502} from './AaveV1Ethereum_AaveV1Deprecation_20240502.sol';
-
-interface ILendingPool {
- function liquidationCall(
- address _collateral,
- address _reserve,
- address _user,
- uint256 _purchaseAmount,
- bool _receiveAToken
- ) external payable;
-
- function repay(address _reserve, uint256 _amount, address payable _onBehalfOf) external payable;
-
- function offboardingLiquidationCall(
- address _collateral,
- address _reserve,
- address _user,
- uint256 _purchaseAmount
- ) external payable;
-
- function getUserAccountData(
- address _user
- )
- external
- view
- returns (
- uint256 totalLiquidityETH,
- uint256 totalCollateralETH,
- uint256 totalBorrowsETH,
- uint256 totalFeesETH,
- uint256 availableBorrowsETH,
- uint256 currentLiquidationThreshold,
- uint256 ltv,
- uint256 healthFactor
- );
-
- function getReserveData(
- address _reserve
- )
- external
- view
- returns (
- uint256 totalLiquidity,
- uint256 availableLiquidity,
- uint256 totalBorrowsStable,
- uint256 totalBorrowsVariable,
- uint256 liquidityRate,
- uint256 variableBorrowRate,
- uint256 stableBorrowRate,
- uint256 averageStableBorrowRate,
- uint256 utilizationRate,
- uint256 liquidityIndex,
- uint256 variableBorrowIndex,
- address aTokenAddress,
- uint40 lastUpdateTimestamp
- );
-
- function getUserReserveData(
- address _reserve,
- address _user
- )
- external
- view
- returns (
- uint256 currentATokenBalance,
- uint256 currentBorrowBalance,
- uint256 principalBorrowBalance,
- uint256 borrowRateMode,
- uint256 borrowRate,
- uint256 liquidityRate,
- uint256 originationFee,
- uint256 variableBorrowIndex,
- uint256 lastUpdateTimestamp,
- bool usageAsCollateralEnabled
- );
-}
-
-interface IAToken {
- function redeem(uint256 _amount) external;
-}
-
-/**
- * @dev Test for AaveV1Ethereum_AaveV1Deprecation_20240502
- * command: make test-contract filter=AaveV1Ethereum_AaveV1Deprecation_20240502
- */
-contract AaveV1Ethereum_AaveV1Deprecation_20240502_Test is ProtocolV3TestBase {
- AaveV1Ethereum_AaveV1Deprecation_20240502 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19782461);
- proposal = new AaveV1Ethereum_AaveV1Deprecation_20240502();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- executePayload(vm, address(proposal));
- }
-
- struct V1User {
- address payable user;
- address collateral;
- address debt;
- }
-
- /**
- * Users should be liquidatable at 500bps penalty
- */
- function test_healthyLiquidateShouldUse500bpsLB() public {
- executePayload(vm, address(proposal));
- V1User[] memory users = _getUsers();
- for (uint256 i = 0; i < users.length; i++) {
- (, uint256 currentBorrowBalance, , , , , , , , ) = ILendingPool(AaveV1.POOL)
- .getUserReserveData(users[i].debt, users[i].user);
- // offboarding liquidations should provide a fixed 5% bonus
- (, uint256 totalCollateralETHBefore, uint256 totalBorrowsETHBefore, , , , , ) = ILendingPool(
- AaveV1.POOL
- ).getUserAccountData(users[i].user);
- if (users[i].debt == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
- deal(address(this), 1000 ether);
- ILendingPool(AaveV1.POOL).liquidationCall{value: currentBorrowBalance}(
- users[i].collateral,
- users[i].debt,
- users[i].user,
- type(uint256).max,
- false
- );
- } else {
- deal(users[i].debt, address(this), currentBorrowBalance);
- assertEq(currentBorrowBalance, IERC20(users[i].debt).balanceOf(address(this)));
- IERC20(users[i].debt).approve(proposal.ADDRESSES_PROVIDER().getLendingPoolCore(), 0);
- IERC20(users[i].debt).approve(
- proposal.ADDRESSES_PROVIDER().getLendingPoolCore(),
- type(uint256).max
- );
- ILendingPool(AaveV1.POOL).liquidationCall(
- users[i].collateral,
- users[i].debt,
- users[i].user,
- type(uint256).max,
- false
- );
- }
- (, uint256 totalCollateralETHAfter, uint256 totalBorrowsETHAfter, , , , , ) = ILendingPool(
- AaveV1.POOL
- ).getUserAccountData(users[i].user);
-
- uint256 collateralDiff = totalCollateralETHBefore - totalCollateralETHAfter;
- uint256 borrowsDiff = totalBorrowsETHBefore - totalBorrowsETHAfter;
- assertGt(collateralDiff, borrowsDiff);
- assertApproxEqAbs((borrowsDiff * 1 ether) / collateralDiff, 0.95 ether, 0.006 ether); // should be ~5% + rounding
- }
- }
-
- /**
- * Users should be able to repay their debt
- */
- function test_repay() public {
- executePayload(vm, address(proposal));
-
- V1User[] memory users = _getUsers();
- for (uint256 i = 0; i < users.length; i++) {
- vm.startPrank(users[i].user);
-
- // repay
- _repayV1(users[i].debt, users[i].user);
-
- vm.stopPrank();
- }
- }
-
- /**
- * Users should be able to redeem their collateral
- */
- function test_redeem() public {
- executePayload(vm, address(proposal));
-
- V1User[] memory users = _getUsers();
-
- for (uint256 i = 0; i < users.length; i++) {
- vm.startPrank(users[i].user);
- _repayV1(users[i].debt, users[i].user);
-
- // redeem
- _redeemV1(users[i].collateral, users[i].user, 100);
-
- vm.stopPrank();
- }
- }
-
- /**
- * Rates should be updated and rate should be zero
- */
- function test_rates() public {
- address[] memory reserves = proposal.CORE().getReserves();
- uint256 snapshot = vm.snapshot();
- for (uint256 i = 0; i < reserves.length; i++) {
- uint256 lIndexBefore = proposal.CORE().getReserveLiquidityCumulativeIndex(reserves[i]);
- uint256 vIndexBefore = proposal.CORE().getReserveVariableBorrowsCumulativeIndex(reserves[i]);
- executePayload(vm, address(proposal));
- uint256 lIndexAfter = proposal.CORE().getReserveLiquidityCumulativeIndex(reserves[i]);
- uint256 vIndexAfter = proposal.CORE().getReserveVariableBorrowsCumulativeIndex(reserves[i]);
- uint256 liquidityRateAfter = proposal.CORE().getReserveCurrentLiquidityRate(reserves[i]);
- uint256 variableRateAfter = proposal.CORE().getReserveCurrentVariableBorrowRate(reserves[i]);
- // uint256 stableRateAfter = proposal.CORE().getReserveCurrentStableBorrowRate(reserves[i]);
-
- assertEq(lIndexBefore, lIndexAfter);
- assertEq(vIndexBefore, vIndexAfter);
- assertEq(liquidityRateAfter, 0);
- assertEq(variableRateAfter, 0);
- // stable rate is non zero because the lendingRateOracle still has baseRate set
- // assertEq(stableRateAfter, 0);
- vm.revertTo(snapshot);
- }
- }
-
- /**
- * oracle prices should be approximately equal (1% diff allowed)
- */
- function test_oracle() public {
- address[] memory reserves = proposal.CORE().getReserves();
- uint256 snapshot = vm.snapshot();
- for (uint256 i = 0; i < reserves.length; i++) {
- uint256 priceBefore = proposal.ORACLE().getAssetPrice(reserves[i]);
- executePayload(vm, address(proposal));
- uint256 priceAfter = proposal.ORACLE().getAssetPrice(reserves[i]);
-
- assertApproxEqAbs(priceBefore, priceAfter, priceBefore / 100);
- vm.revertTo(snapshot);
- }
- }
-
- function _getUsers() internal pure returns (V1User[] memory) {
- V1User[] memory users = new V1User[](3);
- users[0] = V1User(
- payable(0x0675182195661f8FB984F61c98842628382702A0),
- AaveV2EthereumAssets.WBTC_UNDERLYING,
- AaveV2EthereumAssets.DAI_UNDERLYING
- );
- users[1] = V1User(
- payable(0x622a24C72e7810272D026b70f7ed08Ff8Db93Af6),
- 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,
- AaveV2EthereumAssets.BUSD_UNDERLYING
- );
- users[2] = V1User(
- payable(0x0db15b403AE023b1C9B07e95D9294710514292aC),
- 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,
- AaveV2EthereumAssets.USDC_UNDERLYING
- );
- return users;
- }
-
- function _repayV1(address debtAsset, address payable user) internal {
- (, uint256 currentBorrowBalance, , , , , uint256 originationFee, , , ) = ILendingPool(
- AaveV1.POOL
- ).getUserReserveData(debtAsset, user);
- uint256 debt = currentBorrowBalance + originationFee;
- if (debtAsset == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
- deal(user, debt);
- ILendingPool(AaveV1.POOL).repay{value: debt}(debtAsset, type(uint256).max, user);
- } else {
- deal(debtAsset, user, debt);
- IERC20(debtAsset).approve(proposal.ADDRESSES_PROVIDER().getLendingPoolCore(), 0);
- IERC20(debtAsset).approve(
- proposal.ADDRESSES_PROVIDER().getLendingPoolCore(),
- type(uint256).max
- );
- ILendingPool(AaveV1.POOL).repay(debtAsset, type(uint256).max, user);
- }
- (, uint256 currentBorrowBalanceAfter, , , , , uint256 originationFeeAfter, , , ) = ILendingPool(
- AaveV1.POOL
- ).getUserReserveData(debtAsset, user);
- assertEq(currentBorrowBalanceAfter + originationFeeAfter, 0, vm.toString(debtAsset));
- }
-
- function _redeemV1(address token, address user, uint256 amount) internal {
- (uint256 currentATokenBalance, , , , , , , , , ) = ILendingPool(AaveV1.POOL).getUserReserveData(
- token,
- user
- );
- address aToken = proposal.CORE().getReserveATokenAddress(token);
- IAToken(aToken).redeem(amount);
- (uint256 currentATokenBalanceAfter, , , , , , , , , ) = ILendingPool(AaveV1.POOL)
- .getUserReserveData(token, user);
- assertEq(currentATokenBalance - amount, currentATokenBalanceAfter);
- }
-
- fallback() external payable {}
-}
diff --git a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/config.ts b/src/20240502_AaveV1Ethereum_AaveV1Deprecation/config.ts
deleted file mode 100644
index 1b28d8a6f..000000000
--- a/src/20240502_AaveV1Ethereum_AaveV1Deprecation/config.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- configFile: './src/20240218_AaveV1Ethereum_AaveV1DeprecationPhase2/config.ts',
- author: 'BGD Labs @bgdlabs',
- pools: ['AaveV1Ethereum'],
- title: 'Aave V1 Deprecation',
- shortName: 'AaveV1Deprecation',
- date: '20240502',
- discussion:
- 'https://governance.aave.com/t/temp-check-bgd-further-aave-v1-deprecation-strategy/15893/7',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x7451f00809986c7cb8cce7ef4587efdfedad06089ebf2851d64122d00b035d9c',
- },
- poolOptions: {AaveV1Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19574504}}},
-};
diff --git a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol b/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol
deleted file mode 100644
index 7c20926a1..000000000
--- a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol
+++ /dev/null
@@ -1,121 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} 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 Deprecation of Small-cap Stablecoins on V2 Ethereum
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xf6aaa50a6a76f44df9cfbbb760ca80878854dd16d88b16a3fc0f5fa6920741f0
- * - Discussion: https://governance.aave.com/t/arfc-deprecation-of-small-cap-stablecoins-on-v2-ethereum/17484/1
- */
-contract AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502 is
- AaveV2PayloadEthereum
-{
- function _preExecute() internal override {
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).setReserveFactor(
- AaveV2EthereumAssets.USDP_UNDERLYING,
- 95_00
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).setReserveFactor(
- AaveV2EthereumAssets.GUSD_UNDERLYING,
- 95_00
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).setReserveFactor(
- AaveV2EthereumAssets.LUSD_UNDERLYING,
- 95_00
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).setReserveFactor(
- AaveV2EthereumAssets.FRAX_UNDERLYING,
- 95_00
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).setReserveFactor(
- AaveV2EthereumAssets.sUSD_UNDERLYING,
- 95_00
- );
-
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).disableBorrowingOnReserve(
- AaveV2EthereumAssets.USDP_UNDERLYING
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).disableBorrowingOnReserve(
- AaveV2EthereumAssets.GUSD_UNDERLYING
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).disableBorrowingOnReserve(
- AaveV2EthereumAssets.LUSD_UNDERLYING
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).disableBorrowingOnReserve(
- AaveV2EthereumAssets.FRAX_UNDERLYING
- );
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR).disableBorrowingOnReserve(
- AaveV2EthereumAssets.sUSD_UNDERLYING
- );
- }
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV2ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](5);
- rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.sUSD_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.GUSD_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.USDP_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[3] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.FRAX_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
- rateStrategies[4] = IAaveV2ConfigEngine.RateStrategyUpdate({
- asset: AaveV2EthereumAssets.LUSD_UNDERLYING,
- params: IV2RateStrategyFactory.RateStrategyParams({
- optimalUtilizationRate: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT
- })
- });
-
- return rateStrategies;
- }
-}
diff --git a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.t.sol b/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.t.sol
deleted file mode 100644
index 036cf40e5..000000000
--- a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.t.sol
+++ /dev/null
@@ -1,81 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol';
-import {IDefaultInterestRateStrategy} from 'aave-address-book/AaveV2.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig, InterestStrategyValues} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502} from './AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502
- * command: make test-contract filter=AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502
- */
-contract AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502_Test is
- ProtocolV2TestBase
-{
- AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502 internal proposal;
-
- struct Changes {
- address asset;
- uint256 reserveFactor;
- }
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19874343);
- proposal = new AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](5);
- assetsChanged[0] = AaveV2EthereumAssets.USDP_UNDERLYING;
- assetsChanged[1] = AaveV2EthereumAssets.GUSD_UNDERLYING;
- assetsChanged[2] = AaveV2EthereumAssets.LUSD_UNDERLYING;
- assetsChanged[3] = AaveV2EthereumAssets.FRAX_UNDERLYING;
- assetsChanged[4] = AaveV2EthereumAssets.sUSD_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetsChanged.length; i++) {
- ReserveConfig memory cfgAfter = _findReserveConfig(allConfigsAfter, assetsChanged[i]);
- assertEq(cfgAfter.reserveFactor, 95_00);
- assertFalse(cfgAfter.borrowingEnabled);
-
- ReserveConfig memory cfgBefore = _findReserveConfig(allConfigsBefore, assetsChanged[i]);
-
- IDefaultInterestRateStrategy strategy = IDefaultInterestRateStrategy(
- cfgBefore.interestRateStrategy
- );
-
- InterestStrategyValues memory expectedStrategyValues = InterestStrategyValues({
- addressesProvider: address(AaveV2Ethereum.POOL_ADDRESSES_PROVIDER),
- optimalUsageRatio: _bpsToRay(20_00),
- baseVariableBorrowRate: _bpsToRay(3_00),
- variableRateSlope1: _bpsToRay(15_00),
- variableRateSlope2: _bpsToRay(200_00),
- stableRateSlope1: strategy.stableRateSlope1(),
- stableRateSlope2: strategy.stableRateSlope2()
- });
-
- _validateInterestRateStrategy(
- cfgAfter.interestRateStrategy,
- cfgAfter.interestRateStrategy,
- expectedStrategyValues
- );
- }
- }
-
- function _bpsToRay(uint256 amount) internal pure returns (uint256) {
- return (amount * 1e27) / 10_000;
- }
-}
diff --git a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum.md b/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum.md
deleted file mode 100644
index 46e382868..000000000
--- a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: "Deprecation of Small-cap Stablecoins on V2 Ethereum"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-deprecation-of-small-cap-stablecoins-on-v2-ethereum/17484/1"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0xf6aaa50a6a76f44df9cfbbb760ca80878854dd16d88b16a3fc0f5fa6920741f0"
----
-
-## Simple Summary
-
-A proposal to deprecate USDP, GUSD, LUSD, FRAX, and sUSD on Aave V2
-
-## Motivation
-
-Following our ongoing efforts to deprecate the V2 markets and following the recent USDP volatility and subsequent freeze, we propose deprecating smaller market cap stablecoins on V2.
-
-#### Deprecation Phase I
-
-Recent events have highlighted the need for Aave to reduce its V2 exposure to lesser-used stablecoins, many of which have limited liquidity, thus allowing for price manipulation and other potentially harmful events. Previously, the community followed a two-phase process to deprecate stablecoins, with BUSD and TUSD as examples. Given the success of these, we propose a similar path forward. Notably, none of the below stablecoins are collateral assets, reducing the complication of the process.
-
-For USDP, GUSD, LUSD, FRAX, and sUSD we propose the following parameters:
-
-| Parameter | Proposed Value |
-| ----------------- | -------------- |
-| Reserve Factor | 95% |
-| Borrowing Enabled | No |
-| Base Rate | 3% |
-| Slope1 | +3% |
-| Slope2 | 200% |
-| UOptimal | 20% |
-
-The goal of Phase I is to increase borrower APR to encourage borrowers to repay their loans; this is achieved through higher Base Rate, Slope1, Slope2, and lower UOptimal. Additionally, we recommend leaving them frozen to prevent new supplies and borrowings. Finally, we increase the reserve factor to reduce supply APY, reducing the attractiveness of supply as borrowers pay increased rates.
-
-Following observations from Phase I, we may move to further decrease UOptimal, increase Reserve Factor, and increase Slope2.
-
-## Specification
-
-USDP
-| Parameter | Current Value | Proposed Value |
-|-------------------|---------------|----------------|
-| Reserve Factor | 45% | 95% |
-| Borrowing Enabled | Yes | No |
-| Base Rate | 0% | 3% |
-| Slope1 | 12% | 15% |
-| Slope2 | 75% | 200% |
-| UOptimal | 80% | 20% |
-
-GUSD
-| Parameter | Current Value | Proposed Value |
-|-------------------|---------------|----------------|
-| Reserve Factor | 45% | 95% |
-| Borrowing Enabled | Yes | No |
-| Base Rate | 0% | 3% |
-| Slope1 | 12% | 15% |
-| Slope2 | 150% | 200% |
-| UOptimal | 70% | 20% |
-
-LUSD
-| Parameter | Current Value | Proposed Value |
-|-------------------|---------------|----------------|
-| Reserve Factor | 50% | 95% |
-| Borrowing Enabled | Yes | No |
-| Base Rate | 0% | 3% |
-| Slope1 | 12% | 15% |
-| Slope2 | 75% | 200% |
-| UOptimal | 80% | 20% |
-
-FRAX
-| Parameter | Current Value | Proposed Value |
-|-------------------|---------------|----------------|
-| Reserve Factor | 55% | 95% |
-| Borrowing Enabled | Yes | No |
-| Base Rate | 0% | 3% |
-| Slope1 | 12% | 15% |
-| Slope2 | 100% | 200% |
-| UOptimal | 80% | 20% |
-
-sUSD
-| Parameter | Current Value | Proposed Value |
-|-------------------|---------------|----------------|
-| Reserve Factor | 55% | 95% |
-| Borrowing Enabled | Yes | No |
-| Base Rate | 0% | 3% |
-| Slope1 | 12% | 15% |
-| Slope2 | 100% | 200% |
-| UOptimal | 80% | 20% |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8a8b08961887ec193aa153fe3ff8322d3b8a53f2/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8a8b08961887ec193aa153fe3ff8322d3b8a53f2/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xf6aaa50a6a76f44df9cfbbb760ca80878854dd16d88b16a3fc0f5fa6920741f0)
-- [Discussion](https://governance.aave.com/t/arfc-deprecation-of-small-cap-stablecoins-on-v2-ethereum/17484/1)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol b/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol
deleted file mode 100644
index e6fc60e0f..000000000
--- a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502} from './AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum_20240502).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/DeprecationOfSmallCapStablecoinsOnV2Ethereum.md'
- )
- );
- }
-}
diff --git a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/config.ts b/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/config.ts
deleted file mode 100644
index 4cd2f3a21..000000000
--- a/src/20240502_AaveV2Ethereum_DeprecationOfSmallCapStablecoinsOnV2Ethereum/config.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum'],
- title: 'Deprecation of Small-cap Stablecoins on V2 Ethereum',
- shortName: 'DeprecationOfSmallCapStablecoinsOnV2Ethereum',
- date: '20240502',
- author: 'Chaos Labs',
- discussion:
- 'https://governance.aave.com/t/arfc-deprecation-of-small-cap-stablecoins-on-v2-ethereum/17484/1',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xf6aaa50a6a76f44df9cfbbb760ca80878854dd16d88b16a3fc0f5fa6920741f0',
- },
- poolOptions: {
- AaveV2Ethereum: {
- configs: {
- RATE_UPDATE_V2: [
- {
- asset: 'sUSD',
- params: {
- optimalUtilizationRate: '20',
- baseVariableBorrowRate: '3',
- variableRateSlope1: '15',
- variableRateSlope2: '200',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'GUSD',
- params: {
- optimalUtilizationRate: '20',
- baseVariableBorrowRate: '3',
- variableRateSlope1: '15',
- variableRateSlope2: '200',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'USDP',
- params: {
- optimalUtilizationRate: '20',
- baseVariableBorrowRate: '3',
- variableRateSlope1: '15',
- variableRateSlope2: '200',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'FRAX',
- params: {
- optimalUtilizationRate: '20',
- baseVariableBorrowRate: '3',
- variableRateSlope1: '15',
- variableRateSlope2: '200',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- {
- asset: 'LUSD',
- params: {
- optimalUtilizationRate: '20',
- baseVariableBorrowRate: '3',
- variableRateSlope1: '15',
- variableRateSlope2: '200',
- stableRateSlope1: '',
- stableRateSlope2: '',
- },
- },
- ],
- },
- cache: {blockNumber: 19783031},
- },
- },
-};
diff --git a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition.md b/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition.md
deleted file mode 100644
index 9f72402c3..000000000
--- a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-title: "Aave v3.1 Cantina competition"
-author: "BGD Labs @bgdlabs"
-discussions: "https://governance.aave.com/t/arfc-bgd-aave-3-1-cantina-competition/17485"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x79de5212e90a562918f72d47809bba5af1221cce4a8cd6dd38b89f38984e90ee"
----
-
-## Simple Summary
-
-Proposal for the Aave DAO to have a [Cantina security competition](https://cantina.xyz/competitions) for the upcoming Aave v3.1 upgrade, to complement the other security procedures already completed.
-The budget will be a total of $195’000, with $150’000 prize pool and the rest ($45'000) allocated to platform and judging fees.
-
-## Motivation
-
-With the [Aave v3.1 upgrade](https://governance.aave.com/t/bgd-aave-v3-1-and-aave-origin/17305) well received by the community, and now entering into its final stages of pre-activation governance procedures, from the BGD side we have been thinking on how to add even more security assurances, in addition to what was already done and described [HERE](https://governance.aave.com/t/bgd-aave-v3-1-and-aave-origin/17305#security-16).
-
-Open security competitions/contests are getting important adoption as a good pre-production mechanism: a scope is defined for some public code, and any security researcher can look into it for a limited period of time, in order to the prizes from a common prize pool. The more bugs found (and more unique, amongst other characteristics of the finding), the better the rewards.
-
-We think that a competition can have extra security value for the improvements included into Aave v3.1, and after evaluating different solutions in the market, we have decided that doing an open Cantina competition fits into our requirements.
-
-## Specification
-
-After discussions with their team regarding options, we propose to create a [Cantina competition](<(https://cantina.xyz/competitions)>) with the following characteristics:
-
-- $150’000 total prize pot, with the following limitations:
-
- - If there is any High (highest grade) finding, the whole $150’000 prize pot will be distributed.
- - If there is only Medium or lower grade findings, $50’000 prize pot will be distributed.
- - If there is only Lower/Informational, $20’000 prize pot will be distributed.
-
- The total of funds will be transferred initially to Cantina, and if applicable reimburse afterwards to the Aave DAO contracts.
-
-- 20% fees over the total prize pot, amounting $30’000. Additional $15’000 for Cantina judging.
-
-- The competition will last for 10 calendar days, starting on 10th May.
-
-- Before the start, BGD Labs will collaborate with Cantina to have the best possible setup for researchers to tackle the competition, including but not limited to all required extra documentation. During the competition, we will also give all necessary support.
-
-- The execution of the on-chain AIP proposal will act as a binding agreement between the Aave DAO and Cantina. The formal SoW (Scope-of-Work) between the Aave DAO and Cantina can be found [HERE](https://drive.google.com/file/d/1lGBLa9wqOC6Dvuv7jloqEoghNP-7wkb9/view).
-
-- Only current or previous team members of BGD Labs and Certora, MixBytes (auditors of v3.1) during the last 6 months are non-eligible for any prizes in the competition, given the conflict of interest. Any other entity or individual is allowed to participate.
-
-- On the technical aspects, the proposal payload will release 195'000 GHO to the wallet designed by Cantina `0x3Dcb7CFbB431A11CAbb6f7F2296E2354f488Efc2`.
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/000927a49396c16f1f1d246c3fafd2573466c43e/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/000927a49396c16f1f1d246c3fafd2573466c43e/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x79de5212e90a562918f72d47809bba5af1221cce4a8cd6dd38b89f38984e90ee)
-- [Discussion](https://governance.aave.com/t/arfc-bgd-aave-3-1-cantina-competition/17485)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition_20240503.s.sol b/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition_20240503.s.sol
deleted file mode 100644
index 806c0ad0e..000000000
--- a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition_20240503.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_AaveV31CantinaCompetition_20240503} from './AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition_20240503.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/AaveV31CantinaCompetition_20240503.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_AaveV31CantinaCompetition_20240503).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition_20240503.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_AaveV31CantinaCompetition_20240503).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV31CantinaCompetition.md'
- )
- );
- }
-}
diff --git a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol b/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol
deleted file mode 100644
index ee0c57bd4..000000000
--- a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-/**
- * @title Aave v3.1 Cantina competition
- * @author BGD Labs @bgdlabs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x79de5212e90a562918f72d47809bba5af1221cce4a8cd6dd38b89f38984e90ee
- * - Discussion: https://governance.aave.com/t/arfc-bgd-aave-3-1-cantina-competition/17485
- */
-contract AaveV3Ethereum_AaveV31CantinaCompetition_20240503 is IProposalGenericExecutor {
- address public constant CANTINA_RECIPIENT = 0x3Dcb7CFbB431A11CAbb6f7F2296E2354f488Efc2;
- uint256 public constant TOTAL_AMOUNT = 195_000 ether;
-
- function execute() external {
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- CANTINA_RECIPIENT,
- TOTAL_AMOUNT
- );
- }
-}
diff --git a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.t.sol b/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.t.sol
deleted file mode 100644
index 2620a7fbf..000000000
--- a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/AaveV3Ethereum_AaveV31CantinaCompetition_20240503.t.sol
+++ /dev/null
@@ -1,56 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_AaveV31CantinaCompetition_20240503} from './AaveV3Ethereum_AaveV31CantinaCompetition_20240503.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_AaveV31CantinaCompetition_20240503
- * command: make test-contract filter=AaveV3Ethereum_AaveV31CantinaCompetition_20240503
- */
-contract AaveV3Ethereum_AaveV31CantinaCompetition_20240503_Test is ProtocolV3TestBase {
- AaveV3Ethereum_AaveV31CantinaCompetition_20240503 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19789030);
- proposal = new AaveV3Ethereum_AaveV31CantinaCompetition_20240503();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_AaveV31CantinaCompetition_20240503',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_consistentBalances() public {
- uint256 collectorGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- uint256 recipientGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- proposal.CANTINA_RECIPIENT()
- );
-
- executePayload(vm, address(proposal));
-
- uint256 collectorGHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- uint256 recipientGHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- proposal.CANTINA_RECIPIENT()
- );
-
- assertEq(collectorGHOBalanceAfter, collectorGHOBalanceBefore - proposal.TOTAL_AMOUNT());
- assertEq(recipientGHOBalanceAfter, recipientGHOBalanceBefore + proposal.TOTAL_AMOUNT());
- }
-}
diff --git a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/config.ts b/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/config.ts
deleted file mode 100644
index 1fc8cc83b..000000000
--- a/src/20240503_AaveV3Ethereum_AaveV31CantinaCompetition/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'Aave v3.1 Cantina competition',
- shortName: 'AaveV31CantinaCompetition',
- date: '20240503',
- author: 'BGD Labs @bgdlabs',
- discussion: 'https://governance.aave.com/t/arfc-bgd-aave-3-1-cantina-competition/17485',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x79de5212e90a562918f72d47809bba5af1221cce4a8cd6dd38b89f38984e90ee',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19788187}}},
-};
diff --git a/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra.md b/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra.md
deleted file mode 100644
index ab0a9e111..000000000
--- a/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "ACI Ad Astra"
-author: "Marc Zeller - Aave chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-aci-phase-iii-ad-astra/17515"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x477b3dd277c13cc1b0c1086a04b87d221edd5d09ffd588a246457e6dc3bf2b77"
----
-
-## Simple Summary
-
-This ARFC proposes the continuation of the collaboration with the Aave-chan Initiative (ACI) for an additional year, with a proposed budget of 1M GHO.
-
-## Motivation
-
-The ACI has demonstrated significant value to the Aave ecosystem across multiple fronts. The “initiative” launched ~18 months ago is now a team of 8 people strong, including various talents & providing multiple services, contributing to the DAO's success.
-This proposal seeks to extend our collaboration for another year.
-
-## Specification
-
-Proposal duration: ~365 Days
-Proposal Budget: 1M GHO
-
-Note: this proposal is intended to be a continuation of ACI’s previous streams due to governance mandatory delays to avoid a “gap” in ACI’s engagement, the AIP payload will be adjusted to approximately reflect an engagement from May 5th, 2024 and then for a year after execution.
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/9cc085fed28b1de905ec3c5fbd869a1701abd32d/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/9cc085fed28b1de905ec3c5fbd869a1701abd32d/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x477b3dd277c13cc1b0c1086a04b87d221edd5d09ffd588a246457e6dc3bf2b77)
-- [Discussion](https://governance.aave.com/t/arfc-aci-phase-iii-ad-astra/17515)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra_20240506.s.sol b/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra_20240506.s.sol
deleted file mode 100644
index c1e6ea712..000000000
--- a/src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra_20240506.s.sol
+++ /dev/null
@@ -1,55 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_ACIAdAstra_20240506} from './AaveV3Ethereum_ACIAdAstra_20240506.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra_20240506.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/ACIAdAstra_20240506.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_ACIAdAstra_20240506).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra_20240506.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_ACIAdAstra_20240506).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(vm, 'src/20240506_AaveV3Ethereum_ACIAdAstra/ACIAdAstra.md')
- );
- }
-}
diff --git a/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.sol b/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.sol
deleted file mode 100644
index 3fb6579b3..000000000
--- a/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-/**
- * @title ACI Ad Astra
- * @author Marc Zeller - Aave chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x477b3dd277c13cc1b0c1086a04b87d221edd5d09ffd588a246457e6dc3bf2b77
- * - Discussion: https://governance.aave.com/t/arfc-aci-phase-iii-ad-astra/17515
- */
-contract AaveV3Ethereum_ACIAdAstra_20240506 is IProposalGenericExecutor {
- address public constant ACI_MULTISIG = 0xac140648435d03f784879cd789130F22Ef588Fcd;
-
- // 5th May till proposal execution catch up 2740 GHO per day x 6 days = 16440 GHO
- uint256 public constant GHO_UPFRONT_AMOUNT = 16_440 ether;
-
- // ACI stream for a Year
- uint256 public constant GHO_STREAM_AMOUNT = 1_000_000 ether;
- uint256 public constant GHO_STREAM_DURATION = 365 days;
-
- uint256 public constant ACTUAL_STREAM =
- (GHO_STREAM_AMOUNT / GHO_STREAM_DURATION) * GHO_STREAM_DURATION;
-
- function execute() external {
- AaveV3Ethereum.COLLECTOR.createStream(
- ACI_MULTISIG,
- ACTUAL_STREAM,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- block.timestamp,
- block.timestamp + GHO_STREAM_DURATION
- );
-
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- ACI_MULTISIG,
- GHO_UPFRONT_AMOUNT
- );
- }
-}
diff --git a/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.t.sol b/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.t.sol
deleted file mode 100644
index e0bd15e43..000000000
--- a/src/20240506_AaveV3Ethereum_ACIAdAstra/AaveV3Ethereum_ACIAdAstra_20240506.t.sol
+++ /dev/null
@@ -1,97 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_ACIAdAstra_20240506} from './AaveV3Ethereum_ACIAdAstra_20240506.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_ACIAdAstra_20240506
- * command: make test-contract filter=AaveV3Ethereum_ACIAdAstra_20240506
- */
-contract AaveV3Ethereum_ACIAdAstra_20240506_Test is ProtocolV3TestBase {
- AaveV3Ethereum_ACIAdAstra_20240506 internal proposal;
-
- address public constant ACI_MULTISIG = 0xac140648435d03f784879cd789130F22Ef588Fcd;
- uint256 public constant GHO_UPFRONT_AMOUNT = 16_440 ether;
- uint256 public constant GHO_STREAM_AMOUNT = 1_000_000 ether;
- uint256 public constant GHO_STREAM_DURATION = 365 days;
- uint256 public constant ACTUAL_STREAM_AMOUNT_GHO =
- (GHO_STREAM_AMOUNT / GHO_STREAM_DURATION) * GHO_STREAM_DURATION;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19809883);
- proposal = new AaveV3Ethereum_ACIAdAstra_20240506();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Ethereum_ACIAdAstra_20240506', AaveV3Ethereum.POOL, address(proposal));
- }
-
- function testProposalExecution() public {
- uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- uint256 ACIGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- ACI_MULTISIG
- );
-
- uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- // Checking if the streams have been created properly
- // scoping to avoid the "stack too deep" error
- {
- (
- address senderGHO,
- address recipientGHO,
- uint256 depositGHO,
- address tokenAddressGHO,
- uint256 startTimeGHO,
- uint256 stopTimeGHO,
- uint256 remainingBalanceGHO,
-
- ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);
-
- assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR));
- assertEq(recipientGHO, ACI_MULTISIG);
- assertEq(depositGHO, ACTUAL_STREAM_AMOUNT_GHO);
- assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING);
- assertEq(stopTimeGHO - startTimeGHO, GHO_STREAM_DURATION);
- assertEq(remainingBalanceGHO, ACTUAL_STREAM_AMOUNT_GHO);
- }
-
- // checking if the ACI can withdraw from the stream
-
- vm.startPrank(ACI_MULTISIG);
- vm.warp(block.timestamp + GHO_STREAM_DURATION + 1 days);
-
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, ACTUAL_STREAM_AMOUNT_GHO);
- uint256 nextACIGHOBalance = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ACI_MULTISIG);
-
- assertEq(
- ACIGHOBalanceBefore,
- nextACIGHOBalance - (ACTUAL_STREAM_AMOUNT_GHO + GHO_UPFRONT_AMOUNT)
- );
-
- // Check Collector balance after stream withdrawal
-
- uint256 CollectorV3GHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- assertEq(
- CollectorV3GHOBalanceAfter,
- CollectorV3GHOBalanceBefore - (ACTUAL_STREAM_AMOUNT_GHO + GHO_UPFRONT_AMOUNT)
- );
-
- vm.stopPrank();
- }
-}
diff --git a/src/20240506_AaveV3Ethereum_ACIAdAstra/config.ts b/src/20240506_AaveV3Ethereum_ACIAdAstra/config.ts
deleted file mode 100644
index 82baaf2f8..000000000
--- a/src/20240506_AaveV3Ethereum_ACIAdAstra/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'ACI Ad Astra',
- shortName: 'ACIAdAstra',
- date: '20240506',
- author: 'Marc Zeller - Aave Chan Initiative',
- discussion: 'https://governance.aave.com/t/arfc-aci-phase-iii-ad-astra/17515',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x477b3dd277c13cc1b0c1086a04b87d221edd5d09ffd588a246457e6dc3bf2b77',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19810085}}},
-};
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol b/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol
deleted file mode 100644
index 702b0c76e..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- _ ΞΞΞΞ _
- /_;-.__ / _\ _.-;_\
- `-._`'`_/'`.-'
- `\ /`
- | /
- /-.(
- \_._\
- \ \`;
- > |/
- / //
- |//
- \(\
- ``
- defijesus.eth
-*/
-
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol';
-
-/**
- * @title Reserve Factor Upgrades
- * @author karpatkey_TokenLogic
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab
- * - Discussion: https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/4
- */
-contract AaveV2Avalanche_ReserveFactorUpgrades_20240506 is IProposalGenericExecutor {
- ILendingPoolConfigurator public constant POOL_CONFIGURATOR =
- ILendingPoolConfigurator(AaveV2Avalanche.POOL_CONFIGURATOR);
-
- uint256 public constant DAIe_RF = 45_00;
- uint256 public constant USDCe_RF = 45_00;
- uint256 public constant USDTe_RF = 45_00;
- uint256 public constant WAVAX_RF = 45_00;
- uint256 public constant WBTCe_RF = 50_00;
- uint256 public constant WETHe_RF = 45_00;
-
- function execute() external {
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.DAIe_UNDERLYING, DAIe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDCe_UNDERLYING, USDCe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDTe_UNDERLYING, USDTe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WAVAX_UNDERLYING, WAVAX_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WBTCe_UNDERLYING, WBTCe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WETHe_UNDERLYING, WETHe_RF);
- }
-}
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.t.sol b/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.t.sol
deleted file mode 100644
index 966450aa2..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.t.sol
+++ /dev/null
@@ -1,78 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Avalanche_ReserveFactorUpgrades_20240506} from './AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_ReserveFactorUpgrades_20240506
- * command: make test-contract filter=AaveV2Avalanche_ReserveFactorUpgrades_20240506
- */
-contract AaveV2Avalanche_ReserveFactorUpgrades_20240506_Test is ProtocolV2TestBase {
- AaveV2Avalanche_ReserveFactorUpgrades_20240506 internal proposal;
-
- struct Changes {
- address asset;
- uint256 reserveFactor;
- }
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 45105736);
- proposal = new AaveV2Avalanche_ReserveFactorUpgrades_20240506();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Avalanche_ReserveFactorUpgrades_20240506',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](6);
- assetsChanged[0] = AaveV2AvalancheAssets.DAIe_UNDERLYING;
- assetsChanged[1] = AaveV2AvalancheAssets.USDCe_UNDERLYING;
- assetsChanged[2] = AaveV2AvalancheAssets.USDTe_UNDERLYING;
- assetsChanged[3] = AaveV2AvalancheAssets.WAVAX_UNDERLYING;
- assetsChanged[4] = AaveV2AvalancheAssets.WBTCe_UNDERLYING;
- assetsChanged[5] = AaveV2AvalancheAssets.WETHe_UNDERLYING;
-
- Changes[] memory assetChanges = new Changes[](6);
- assetChanges[0] = Changes({
- asset: AaveV2AvalancheAssets.DAIe_UNDERLYING,
- reserveFactor: proposal.DAIe_RF()
- });
- assetChanges[1] = Changes({
- asset: AaveV2AvalancheAssets.USDCe_UNDERLYING,
- reserveFactor: proposal.USDCe_RF()
- });
- assetChanges[2] = Changes({
- asset: AaveV2AvalancheAssets.USDTe_UNDERLYING,
- reserveFactor: proposal.USDTe_RF()
- });
- assetChanges[3] = Changes({
- asset: AaveV2AvalancheAssets.WAVAX_UNDERLYING,
- reserveFactor: proposal.WAVAX_RF()
- });
- assetChanges[4] = Changes({
- asset: AaveV2AvalancheAssets.WBTCe_UNDERLYING,
- reserveFactor: proposal.WBTCe_RF()
- });
- assetChanges[5] = Changes({
- asset: AaveV2AvalancheAssets.WETHe_UNDERLYING,
- reserveFactor: proposal.WETHe_RF()
- });
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor);
- }
- }
-}
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol b/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol
deleted file mode 100644
index f0d059749..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- _ ΞΞΞΞ _
- /_;-.__ / _\ _.-;_\
- `-._`'`_/'`.-'
- `\ /`
- | /
- /-.(
- \_._\
- \ \`;
- > |/
- / //
- |//
- \(\
- ``
- defijesus.eth
-*/
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol';
-
-/**
- * @title Reserve Factor Upgrades
- * @author karpatkey_TokenLogic
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab
- * - Discussion: https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/4
- */
-contract AaveV2Ethereum_ReserveFactorUpgrades_20240506 is IProposalGenericExecutor {
- ILendingPoolConfigurator public constant POOL_CONFIGURATOR =
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR);
-
- uint256 public constant DAI_RF = 50_00;
- uint256 public constant FRAX_RF = 55_00;
- uint256 public constant GUSD_RF = 45_00;
- uint256 public constant LINK_RF = 55_00;
- uint256 public constant LUSD_RF = 50_00;
- uint256 public constant sUSD_RF = 55_00;
- uint256 public constant USDC_RF = 50_00;
- uint256 public constant USDP_RF = 45_00;
- uint256 public constant USDT_RF = 50_00;
- uint256 public constant WBTC_RF = 55_00;
- uint256 public constant WETH_RF = 50_00;
-
- function execute() external {
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.DAI_UNDERLYING, DAI_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.FRAX_UNDERLYING, FRAX_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.GUSD_UNDERLYING, GUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LINK_UNDERLYING, LINK_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LUSD_UNDERLYING, LUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.sUSD_UNDERLYING, sUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, USDC_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDP_UNDERLYING, USDP_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, USDT_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WBTC_UNDERLYING, WBTC_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WETH_UNDERLYING, WETH_RF);
- }
-}
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.t.sol b/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.t.sol
deleted file mode 100644
index 84cbc1398..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.t.sol
+++ /dev/null
@@ -1,103 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_ReserveFactorUpgrades_20240506} from './AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_ReserveFactorUpgrades_20240506
- * command: make test-contract filter=AaveV2Ethereum_ReserveFactorUpgrades_20240506
- */
-contract AaveV2Ethereum_ReserveFactorUpgrades_20240506_Test is ProtocolV2TestBase {
- AaveV2Ethereum_ReserveFactorUpgrades_20240506 internal proposal;
-
- struct Changes {
- address asset;
- uint256 reserveFactor;
- }
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19812001);
- proposal = new AaveV2Ethereum_ReserveFactorUpgrades_20240506();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_ReserveFactorUpgrades_20240506',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](11);
- assetsChanged[0] = AaveV2EthereumAssets.DAI_UNDERLYING;
- assetsChanged[1] = AaveV2EthereumAssets.FRAX_UNDERLYING;
- assetsChanged[2] = AaveV2EthereumAssets.GUSD_UNDERLYING;
- assetsChanged[3] = AaveV2EthereumAssets.LINK_UNDERLYING;
- assetsChanged[4] = AaveV2EthereumAssets.LUSD_UNDERLYING;
- assetsChanged[5] = AaveV2EthereumAssets.sUSD_UNDERLYING;
- assetsChanged[6] = AaveV2EthereumAssets.USDC_UNDERLYING;
- assetsChanged[7] = AaveV2EthereumAssets.USDP_UNDERLYING;
- assetsChanged[8] = AaveV2EthereumAssets.USDT_UNDERLYING;
- assetsChanged[9] = AaveV2EthereumAssets.WBTC_UNDERLYING;
- assetsChanged[10] = AaveV2EthereumAssets.WETH_UNDERLYING;
-
- Changes[] memory assetChanges = new Changes[](11);
- assetChanges[0] = Changes({
- asset: AaveV2EthereumAssets.DAI_UNDERLYING,
- reserveFactor: proposal.DAI_RF()
- });
- assetChanges[1] = Changes({
- asset: AaveV2EthereumAssets.FRAX_UNDERLYING,
- reserveFactor: proposal.FRAX_RF()
- });
- assetChanges[2] = Changes({
- asset: AaveV2EthereumAssets.GUSD_UNDERLYING,
- reserveFactor: proposal.GUSD_RF()
- });
- assetChanges[3] = Changes({
- asset: AaveV2EthereumAssets.LINK_UNDERLYING,
- reserveFactor: proposal.LINK_RF()
- });
- assetChanges[4] = Changes({
- asset: AaveV2EthereumAssets.LUSD_UNDERLYING,
- reserveFactor: proposal.LUSD_RF()
- });
- assetChanges[5] = Changes({
- asset: AaveV2EthereumAssets.sUSD_UNDERLYING,
- reserveFactor: proposal.sUSD_RF()
- });
- assetChanges[6] = Changes({
- asset: AaveV2EthereumAssets.USDC_UNDERLYING,
- reserveFactor: proposal.USDC_RF()
- });
- assetChanges[7] = Changes({
- asset: AaveV2EthereumAssets.USDP_UNDERLYING,
- reserveFactor: proposal.USDP_RF()
- });
- assetChanges[8] = Changes({
- asset: AaveV2EthereumAssets.USDT_UNDERLYING,
- reserveFactor: proposal.USDT_RF()
- });
- assetChanges[9] = Changes({
- asset: AaveV2EthereumAssets.WBTC_UNDERLYING,
- reserveFactor: proposal.WBTC_RF()
- });
- assetChanges[10] = Changes({
- asset: AaveV2EthereumAssets.WETH_UNDERLYING,
- reserveFactor: proposal.WETH_RF()
- });
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor);
- }
- }
-}
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md b/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md
deleted file mode 100644
index 824b434fc..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: "Reserve Factor Upgrades"
-author: "karpatkey_TokenLogic"
-discussions: "https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/4"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab"
----
-
-## Simple Summary
-
-This AIP is composed of two actions: (1) a continuation of proposal 73 on Governance V3 that increases the Reserve Factor (RF) for assets on Ethereum V2 by 5.00%, up to a maximum of 99.99%; and (2) to start periodically increasing the RF across Avalanche V2.
-
-## Motivation
-
-This AIP will reduce deposit yield for assets on Ethereum & Avalanche V2 by increasing the RF. With this upgrade being passed, users will be further encouraged to migrate from Ethereum V2 to V3.
-
-Increasing the RF routes a larger portion of the interest paid by users to Aave DAO's Treasury. User's funds are not at risk of liquidation and the borrowing rate remains unchanged.
-
-Of the assets with an RF set at 99.99%, there is no change. All other asset reserves will have the RF increased by up to 5.00%.
-
-## Specification
-
-For Ethereum V2, the following parameters are to be updated as follows:
-
-| Asset | Previous Reserve Factor | New Reserve Factor |
-| :---: | :---------------------: | :----------------: |
-| DAI | 45.00% | 50.00% |
-| FRAX | 50.00% | 55.00% |
-| GUSD | 40.00% | 45.00% |
-| LINK | 50.00% | 55.00% |
-| LUSD | 45.00% | 50.00% |
-| sUSD | 50.00% | 55.00% |
-| USDC | 45.00% | 50.00% |
-| USDP | 40.00% | 45.00% |
-| USDT | 45.00% | 50.00% |
-| WBTC | 50.00% | 55.00% |
-| WETH | 45.00% | 50.00% |
-
-For Avalanche V2, the following parameters are to be updated as follows:
-
-| Asset | Previous Reserve Factor | New Reserve Factor |
-| :---: | :---------------------: | :----------------: |
-| DAIe | 40.00% | 45.00% |
-| USDCe | 40.00% | 45.00% |
-| USDTe | 40.00% | 45.00% |
-| WAVAX | 40.00% | 45.00% |
-| WBTCe | 45.00% | 50.00% |
-| WETHe | 40.00% | 45.00% |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d90e14550053f219ecc816ecaa0fa9b3f5215872/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/d90e14550053f219ecc816ecaa0fa9b3f5215872/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d90e14550053f219ecc816ecaa0fa9b3f5215872/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240506.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/d90e14550053f219ecc816ecaa0fa9b3f5215872/src/20240506_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240506.t.sol)
-- [Discussion for Ethereum Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/8)
-- [Snapshot for Ethereum Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e)
-- [Discussion for Avalanche Reserve Factor Updates](https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/4)
-- [Snapshot for Avalanche Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol b/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol
deleted file mode 100644
index 767b4de09..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol
+++ /dev/null
@@ -1,88 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, AvalancheScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_ReserveFactorUpgrades_20240506} from './AaveV2Ethereum_ReserveFactorUpgrades_20240506.sol';
-import {AaveV2Avalanche_ReserveFactorUpgrades_20240506} from './AaveV2Avalanche_ReserveFactorUpgrades_20240506.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol:DeployEthereum chain=mainnet
- * verify-command: npx catapulta-verify -b broadcast/ReserveFactorUpgrades_20240506.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_ReserveFactorUpgrades_20240506).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol:DeployAvalanche chain=avalanche
- * verify-command: npx catapulta-verify -b broadcast/ReserveFactorUpgrades_20240506.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_ReserveFactorUpgrades_20240506).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240506.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_ReserveFactorUpgrades_20240506).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_ReserveFactorUpgrades_20240506).creationCode
- );
- payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240506_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md'
- )
- );
- }
-}
diff --git a/src/20240506_Multi_ReserveFactorUpgrades/config.ts b/src/20240506_Multi_ReserveFactorUpgrades/config.ts
deleted file mode 100644
index 04cd2b007..000000000
--- a/src/20240506_Multi_ReserveFactorUpgrades/config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum', 'AaveV2Avalanche'],
- title: 'Reserve Factor Upgrades',
- shortName: 'ReserveFactorUpgrades',
- date: '20240506',
- author: 'karpatkey_TokenLogic',
- discussion: 'https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/4',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab',
- },
- poolOptions: {
- AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19812001}},
- AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 45105736}},
- },
-};
diff --git a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol b/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol
deleted file mode 100644
index 3f078dcc7..000000000
--- a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol
+++ /dev/null
@@ -1,27 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-/**
- * @title Chaos Labs Ethereum V2 LT Reductions
- * @author Chaos Labs
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-ethereum-v2-lt-reductions-05-06-2024/17598
- */
-contract AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Ethereum.POOL_CONFIGURATOR.configureReserveAsCollateral(
- AaveV2EthereumAssets.LINK_UNDERLYING,
- 0,
- 65_00,
- 107_00
- );
-
- AaveV2Ethereum.POOL_CONFIGURATOR.configureReserveAsCollateral(
- AaveV2EthereumAssets.ZRX_UNDERLYING,
- 0,
- 1,
- 110_00
- );
- }
-}
diff --git a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.t.sol b/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.t.sol
deleted file mode 100644
index 528d51a47..000000000
--- a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.t.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509} from './AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.t.sol -vv
- */
-contract AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509_Test is ProtocolV2TestBase {
- AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19832836);
- proposal = new AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- address[] memory assetsChanged = new address[](2);
-
- assetsChanged[0] = AaveV2EthereumAssets.LINK_UNDERLYING;
- assetsChanged[1] = AaveV2EthereumAssets.ZRX_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory LINK_UNDERLYING_CONFIG = _findReserveConfig(
- allConfigsBefore,
- AaveV2EthereumAssets.LINK_UNDERLYING
- );
- LINK_UNDERLYING_CONFIG.liquidationThreshold = 65_00;
- _validateReserveConfig(LINK_UNDERLYING_CONFIG, allConfigsAfter);
-
- ReserveConfig memory ZRX_UNDERLYING_CONFIG = _findReserveConfig(
- allConfigsBefore,
- AaveV2EthereumAssets.ZRX_UNDERLYING
- );
- ZRX_UNDERLYING_CONFIG.liquidationThreshold = 1;
- _validateReserveConfig(ZRX_UNDERLYING_CONFIG, allConfigsAfter);
- }
-}
diff --git a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions.md b/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions.md
deleted file mode 100644
index b164d6da4..000000000
--- a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: "Chaos Labs Ethereum V2 LT Reductions"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-chaos-labs-ethereum-v2-lt-reductions-05-06-2024/17598"
----
-
-## Simple Summary
-
-A proposal to reduce Liquidation Thresholds on Aave V2 Ethereum.
-
-## Motivation
-
-In continuation of the deprecation of Aave V2, Chaos Labs advises implementing the subsequent parameter changes to the frozen assets on Aave v2 Ethereum.
-
-As Liquidation Threshold reductions may lead to user accounts being eligible for liquidations upon their approval, we want to clarify the full implications to the community at each step. We will publicly communicate the planned amendments and list of affected accounts leading to the on-chain execution.
-
-Our recommendations below suggest an LT configuration that optimizes reductions without significantly increasing the number of accounts eligible for liquidation. The proposed values are set at a margin of ~4-6% from the closest LT figure, which would trigger more substantial liquidations.
-
-## Specification
-
-| Asset | Current LT | Recommended LT |
-| ----- | ---------- | -------------- |
-| LINK | 68% | 65% |
-| ZRX | 5% | 0_01% |
-
-| | Value liquidated | Accounts liquidated |
-| ----- | ---------------- | ------------------- |
-| Total | $688 | 6 |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1fc20756f3dc38186c107838f4928786d231672f/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1fc20756f3dc38186c107838f4928786d231672f/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-ethereum-v2-lt-reductions-05-06-2024/17598)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions_20240509.s.sol b/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions_20240509.s.sol
deleted file mode 100644
index bb05623a3..000000000
--- a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions_20240509.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509} from './AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions_20240509.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ChaosLabsEthereumV2LTReductions_20240509.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions_20240509.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_ChaosLabsEthereumV2LTReductions_20240509).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/ChaosLabsEthereumV2LTReductions.md'
- )
- );
- }
-}
diff --git a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/config.ts b/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/config.ts
deleted file mode 100644
index f2b873638..000000000
--- a/src/20240509_AaveV2Ethereum_ChaosLabsEthereumV2LTReductions/config.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum'],
- title: 'Chaos Labs Ethereum V2 LT Reductions',
- shortName: 'ChaosLabsEthereumV2LTReductions',
- date: '20240509',
- author: 'Chaos Labs',
- discussion:
- 'https://governance.aave.com/t/arfc-chaos-labs-ethereum-v2-lt-reductions-05-06-2024/17598',
- snapshot: '',
- },
- poolOptions: {
- AaveV2Ethereum: {
- configs: {OTHERS: {}},
- cache: {blockNumber: 19832836},
- },
- },
-};
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
deleted file mode 100644
index f5a966dd8..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-/**
- * @title LT/LTV Reductions on Aave V2 Stablecoins
- * @author ChaosLabs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195
- * - Discussion: https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508
- */
-contract AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Avalanche.POOL_CONFIGURATOR.configureReserveAsCollateral(
- AaveV2AvalancheAssets.USDCe_UNDERLYING,
- 75_00,
- 78_00,
- 105_00
- );
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
deleted file mode 100644
index bc22c3f20..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
+++ /dev/null
@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510
- * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol -vv
- */
-contract AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510_Test is ProtocolV2TestBase {
- AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 45274752);
- proposal = new AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
-
- assetsChanged[0] = AaveV2AvalancheAssets.USDCe_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory USDCe_UNDERLYING_CONFIG = _findReserveConfig(
- allConfigsBefore,
- AaveV2AvalancheAssets.USDCe_UNDERLYING
- );
- USDCe_UNDERLYING_CONFIG.liquidationThreshold = 78_00;
- _validateReserveConfig(USDCe_UNDERLYING_CONFIG, allConfigsAfter);
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
deleted file mode 100644
index 07c1949b5..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
+++ /dev/null
@@ -1,22 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-
-/**
- * @title LT/LTV Reductions on Aave V2 Stablecoins
- * @author ChaosLabs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195
- * - Discussion: https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508
- */
-contract AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Ethereum.POOL_CONFIGURATOR.configureReserveAsCollateral(
- AaveV2EthereumAssets.USDC_UNDERLYING,
- 75_00,
- 87_50,
- 104_50
- );
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
deleted file mode 100644
index eaba5a030..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol -vv
- */
-contract AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510_Test is ProtocolV2TestBase {
- AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19841442);
- proposal = new AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- address[] memory assetsChanged = new address[](1);
-
- assetsChanged[0] = AaveV2EthereumAssets.USDC_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory USDC_UNDERLYING_CONFIG = _findReserveConfig(
- allConfigsBefore,
- AaveV2EthereumAssets.USDC_UNDERLYING
- );
- USDC_UNDERLYING_CONFIG.ltv = 75_00;
- _validateReserveConfig(USDC_UNDERLYING_CONFIG, allConfigsAfter);
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
deleted file mode 100644
index 075029601..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-/**
- * @title LT/LTV Reductions on Aave V2 Stablecoins
- * @author ChaosLabs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195
- * - Discussion: https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508
- */
-contract AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510 is IProposalGenericExecutor {
- function execute() external {
- AaveV2Polygon.POOL_CONFIGURATOR.configureReserveAsCollateral(
- AaveV2PolygonAssets.USDC_UNDERLYING,
- 75_00,
- 84_50,
- 105_00
- );
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
deleted file mode 100644
index 90a5c87a0..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol
+++ /dev/null
@@ -1,45 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-
-/**
- * @dev Test for AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510
- * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol -vv
- */
-contract AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510_Test is ProtocolV2TestBase {
- AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 56811637);
- proposal = new AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510',
- AaveV2Polygon.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
-
- assetsChanged[0] = AaveV2PolygonAssets.USDC_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory USDC_UNDERLYING_CONFIG = _findReserveConfig(
- allConfigsBefore,
- AaveV2PolygonAssets.USDC_UNDERLYING
- );
- USDC_UNDERLYING_CONFIG.ltv = 75_00;
- USDC_UNDERLYING_CONFIG.liquidationThreshold = 84_50;
- _validateReserveConfig(USDC_UNDERLYING_CONFIG, allConfigsAfter);
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins.md b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins.md
deleted file mode 100644
index 8abc23573..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "LT/LTV Reductions on Aave V2 Stablecoins"
-author: "ChaosLabs"
-discussions: "https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195"
----
-
-# Summary
-
-A proposal to reduce LT and LTV for major stablecoins on Aave V2
-
-# Motivation
-
-Following our [ongoing reduction](https://governance.aave.com/t/generalized-lt-ltv-reduction-on-aave/16766) of stablecoin LTs and LTVs on Aave V3 markets, we propose reducing LTs and LTVs on V2 to limit risks posed by the current parameters and align them closer to V3’s parameters.
-
-It is important to note that in some cases, it is difficult to reduce LTs because of users looping assets with themselves. For example, on Ethereum, there are 58 wallets that are both supplying and borrowing more than 10,000 USDC. This leads us to recommend two different options on which the community can decide: a more aggressive LT reduction, which will result in more liquidations but help reduce LT more quickly and a conservative LT reduction, which will prioritize limiting liquidations. For all options, we recommend decreasing LTV to the target of 75%.
-
-## LT/LTV Reduction
-
-The overall goal of our stablecoin LT/LTV reduction is the same as on V3, ultimately achieving the following parameters:
-
-| Final LTV | Final LT |
-| --------- | -------- |
-| 75.00% | 78.00% |
-
-**_USDC (Ethereum)_**
-
-Currently, reducing LT would require inducing a significant number of liquidations; a reduction of just 0.50% would create $137K in new liquidations, and a 2% reduction would create $200K in new liquidations. This is largely caused by two users ([1](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0xb60bda0bab52839a3334bd849d2afb2aa566e631), [2](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0xf451d30a7ac2e56f52a36825b155b0ac1fb7a867)), both of whom are looping USDC with itself. Thus, our conservative proposal is not adjusting LT, while the aggressive calls for reducing it by 0.50%.
-
-| Asset | Value Liquidated ($) | Accounts Liquidated |
-| ------------ | -------------------- | ------------------- |
-| Conservative | - | - |
-| Aggressive | 137.3K | 10 |
-
-_USDC.e (Polygon)_
-
-Similar to USDC on Ethereum, it is difficult to reduce the LT without inducing large liquidations, thus the conservative proposal calls for a reduction to 84.50%.
-
-The three largest potential liquidations ([1](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0xb3095b2861fba8ebcfd199546ce9488c75676850),[2](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0x299b189f47838ee8ebb630c3024bb1cd9f109ee8),[3](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0x818b84cc4c3012cb6b36bfb627fd82438718fc7c)), representing the majority of new value eligible for liquidation, are all wallets that are looping USDC.e with itself.
-
-The more aggressive approach would reduce LT to 83% and potentially induce $103K worth of liquidations.
-
-| Asset | Value Liquidated ($) | Accounts Liquidated |
-| ------------ | -------------------- | ------------------- |
-| Conservative | 10K | 45 |
-| Aggressive | 103K | 235 |
-
-_USDC.e (Avalanche)_
-
-Our approach involves reducing USDC.e’s LT to 78%, inducing $10,300 worth of liquidations across 11 new wallets.
-
-Again, the largest liquidation would be a [user](https://community.chaoslabs.xyz/aave-v2/risk/wallets/0xdb815d4071c3d8b2ebec6c003f30bfbfa6a5d8b8) who is looping USDC.e. This would bring the market in line with our final parameters, and thus there is no need for an aggressive proposal.
-
-# Specification
-
-## LT/LTV Reduction
-
-As per the community Snaphsot vote, this proposal adopts the conservative recommendations:
-
-| Chain | Asset | Current LTV | Rec. LTV | Current LT | Rec LT |
-| --------- | ------ | ----------- | --------- | ---------- | --------- |
-| Ethereum | USDC | 80.00% | 75.00% | 87.50% | No Change |
-| Polygon | USDC.e | 80.00% | 75.00% | 85.00% | 84.50% |
-| Avalanche | USDC.e | 75.00% | No Change | 80.00% | 78% |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/d0aea735da07c4e7fa25ff5833e99b87260d8906/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195)
-- [Discussion](https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol
deleted file mode 100644
index 78d7238ae..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol
+++ /dev/null
@@ -1,118 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {EthereumScript, PolygonScript, AvalancheScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-import {AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-import {AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510} from './AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol:DeployPolygon chain=polygon
- * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol:DeployAvalanche chain=avalanche
- * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins_20240510.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](3);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV2Polygon_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_LTLTVReductionsOnAaveV2Stablecoins_20240510).creationCode
- );
- payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/LTLTVReductionsOnAaveV2Stablecoins.md'
- )
- );
- }
-}
diff --git a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/config.ts b/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/config.ts
deleted file mode 100644
index 8b1227d5a..000000000
--- a/src/20240510_Multi_LTLTVReductionsOnAaveV2Stablecoins/config.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum', 'AaveV2Polygon', 'AaveV2Avalanche'],
- title: 'LT/LTV Reductions on Aave V2 Stablecoins',
- shortName: 'LTLTVReductionsOnAaveV2Stablecoins',
- date: '20240510',
- author: 'ChaosLabs',
- discussion: 'https://governance.aave.com/t/arfc-lt-ltv-reductions-on-aave-v2-stablecoins/17508',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xe3a29b7d6d936a22ee340811f842a29e4be654e08972f53f43dde7748c722195',
- },
- poolOptions: {
- AaveV2Ethereum: {configs: {}, cache: {blockNumber: 19841442}},
- AaveV2Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 56811637}},
- AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 45274752}},
- },
-};
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.sol b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.sol
deleted file mode 100644
index ca0af2393..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.sol
+++ /dev/null
@@ -1,56 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import {OrbitProgramData} from './OrbitProgramData.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-/// Helper interface to withdraw ETH
-interface IWETH {
- function withdraw(uint256) external;
-}
-
-/**
- * @title Orbit Program Renewal
- * @author Aave Chan Initiative
- * - Snapshot: "https://snapshot.org/#/aave.eth/proposal/0x4a10e2a8ca95024d7cf0791aa82ed262c816ff0ee78bc2f3ab3487e70d731361"
- * - Discussion: https://governance.aave.com/t/arfc-orbit-program-renewal-may-2024/17683
- */
-contract AaveV3Ethereum_OrbitProgramRenewal_20240513 is IProposalGenericExecutor {
- error EthTransferFailed(address account);
- function execute() external {
- // custom code goes here
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.WETH_UNDERLYING,
- address(this),
- OrbitProgramData.TOTAL_WETH_REBATE
- );
-
- IWETH(AaveV3EthereumAssets.WETH_UNDERLYING).withdraw(OrbitProgramData.TOTAL_WETH_REBATE);
-
- OrbitProgramData.GasUsage[] memory usage = OrbitProgramData.getGasUsageData();
- uint256 usageLength = usage.length;
- for (uint256 i = 0; i < usageLength; i++) {
- (bool ok, ) = usage[i].account.call{value: usage[i].usage}('');
- if (!ok) revert EthTransferFailed(usage[i].account);
- }
-
- uint256 actualStreamAmount = (OrbitProgramData.STREAM_AMOUNT /
- OrbitProgramData.STREAM_DURATION) * OrbitProgramData.STREAM_DURATION;
-
- address[] memory orbitAddresses = OrbitProgramData.getOrbitAddresses();
- uint256 orbitAddressesLength = orbitAddresses.length;
- for (uint256 i = 0; i < orbitAddressesLength; i++) {
- AaveV3Ethereum.COLLECTOR.createStream(
- orbitAddresses[i],
- actualStreamAmount,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- block.timestamp,
- block.timestamp + OrbitProgramData.STREAM_DURATION
- );
- }
- }
- receive() external payable {}
-}
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.t.sol b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.t.sol
deleted file mode 100644
index a4d06dcd5..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.t.sol
+++ /dev/null
@@ -1,84 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_OrbitProgramRenewal_20240513} from './AaveV3Ethereum_OrbitProgramRenewal_20240513.sol';
-
-import {OrbitProgramData} from './OrbitProgramData.sol';
-/**
- * @dev Test for AaveV3Ethereum_OrbitProgramRenewal_20240513
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.t.sol -vv
- */
-contract AaveV3Ethereum_OrbitProgramRenewal_20240513_Test is ProtocolV3TestBase {
- AaveV3Ethereum_OrbitProgramRenewal_20240513 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19862601);
- proposal = new AaveV3Ethereum_OrbitProgramRenewal_20240513();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- uint256 collectorWethBalanceBefore = IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- uint256[] memory ethBalancesBeforeUsers = new uint256[](7);
- OrbitProgramData.GasUsage[] memory usage = OrbitProgramData.getGasUsageData();
- for (uint256 i = 0; i < usage.length; i++) {
- ethBalancesBeforeUsers[i] = usage[i].account.balance;
- }
-
- uint256[] memory ghoBalancesBeforeUsers = new uint256[](4);
- address[] memory ghoPaymentAddresses = OrbitProgramData.getOrbitAddresses();
- for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) {
- ghoBalancesBeforeUsers[i] = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- ghoPaymentAddresses[i]
- );
- }
-
- uint256 nextStreamId = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- vm.expectRevert();
- AaveV3Ethereum.COLLECTOR.getStream(nextStreamId);
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- collectorWethBalanceBefore - OrbitProgramData.TOTAL_WETH_REBATE,
- 'WETH balance of Collector is not equal to previous minus to withdraw'
- );
-
- for (uint256 i = 0; i < usage.length; i++) {
- assertGt(
- usage[i].account.balance,
- ethBalancesBeforeUsers[i],
- 'REBATE recipient balance is not greater than before'
- );
- }
-
- vm.warp(block.timestamp + 7 days);
-
- /// Their GHO balance has increased and call also withdraw from stream as it now exists
- for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) {
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]),
- ghoBalancesBeforeUsers[i],
- 'GHO balance of Orbit recipient is not greater than before'
- );
-
- vm.prank(ghoPaymentAddresses[i]);
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextStreamId + i, 1);
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]),
- ghoBalancesBeforeUsers[i] + 1
- );
- }
- }
-}
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramData.sol b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramData.sol
deleted file mode 100644
index ace69ca96..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramData.sol
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity ^0.8.0;
-
-library OrbitProgramData {
- struct GasUsage {
- address account;
- uint256 usage;
- }
-
- uint256 public constant STREAM_DURATION = 90 days;
- uint256 public constant STREAM_AMOUNT = 15_000 ether;
- uint256 public constant TOTAL_WETH_REBATE = 3.381 ether;
- address public constant EZREAL = 0x8659D0BB123Da6D16D9394C7838BA286c2207d0E;
- address public constant STABLE_LABS = 0xECC2a9240268BC7a26386ecB49E1Befca2706AC9;
- address public constant SAUCY_BLOCK = 0x08651EeE3b78254653062BA89035b8F8AdF924CE;
- address public constant ARETA = 0x8b37a5Af68D315cf5A64097D96621F64b5502a22;
-
- address public constant ACI = 0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922;
- address public constant TOKEN_LOGIC = 0x2cc1ADE245020FC5AAE66Ad443e1F66e01c54Df1;
-
- function getGasUsageData() internal pure returns (GasUsage[] memory) {
- GasUsage[] memory usage = new GasUsage[](2);
- usage[0] = GasUsage(ACI, 2.74 ether);
- usage[1] = GasUsage(TOKEN_LOGIC, 0.641 ether);
-
- return usage;
- }
-
- function getOrbitAddresses() internal pure returns (address[] memory) {
- address[] memory streamAddresses = new address[](4);
- streamAddresses[0] = EZREAL;
- streamAddresses[1] = STABLE_LABS;
- streamAddresses[2] = SAUCY_BLOCK;
- streamAddresses[3] = ARETA;
-
- return streamAddresses;
- }
-}
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal.md b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal.md
deleted file mode 100644
index 116cf69cf..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: "Orbit Program Renewal"
-author: "Aave Chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-orbit-program-renewal-may-2024/17683"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x4a10e2a8ca95024d7cf0791aa82ed262c816ff0ee78bc2f3ab3487e70d731361"
----
-
-## Simple Summary
-
-Proposing the renewal of the Orbit program for recognized delegates, compensating them with GHO and ETH reimbursement of Gas costs associated with their governance activity.
-
-## Motivation
-
-Orbit recognizes the added value of the Delegates in the decentralization & diversity of the Aave DAO. This compensation allows them to focus on aave and keep their contribution efforts to our governance. The ACI proposes the extension of Orbit for a new quarter.
-
-With the transition to Governance V3, a significant feature introduced is gasless voting via Gelato integration on the [DAO-run governance app](https://vote.onaave.com), making it easier for delegates to participate without the burden of gas costs. This innovation prompts the proposal to discontinue the general gas rebate program. However, recognizing the continued necessity for proposal creation and payload deployment activities, we propose maintaining targeted gas rebates for these specific actions.
-
-## Specification
-
-- **Period Coverage:** Blocks 19162697 (5th Feb 2024) to Block 19860031 (May 13th 2024)
-- **Eligible Platforms:**
- - EzR3al
- - Stable Labs
- - Saucy Block
- - Areta
-- **Gas Rebate:** Since this period is entirely covered by Governance V3, the Orbit program does not reimburse delegate vote gas as their vote is now subsidized by Gelato. We will continue to reimburse Service Providers for their Governance-related activity:
- - ACI : 2.74 ETH
- - TokenLogic : 0.641 ETH
-- **Budget:** 60000 GHO and 3.381 ETH
-- **Relevant Links:**
-
- - [Script output ](https://aavechan.notion.site/Gov-V3-May-2024-Script-Output-af8acc9d53874444b9a576e2329da28a)
-
-- [ACI’s Orbit tracker ](https://apps.aavechan.com/orbit-tracker)
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/97b44a67ed311df87102abca1944712f56b14785/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/97b44a67ed311df87102abca1944712f56b14785/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/AaveV3Ethereum_OrbitProgramRenewal_20240513.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x4a10e2a8ca95024d7cf0791aa82ed262c816ff0ee78bc2f3ab3487e70d731361)
-- [Discussion](https://governance.aave.com/t/arfc-orbit-program-renewal-may-2024/17683)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal_20240513.s.sol b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal_20240513.s.sol
deleted file mode 100644
index 756a9315b..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal_20240513.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_OrbitProgramRenewal_20240513} from './AaveV3Ethereum_OrbitProgramRenewal_20240513.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal_20240513.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OrbitProgramRenewal_20240513.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_OrbitProgramRenewal_20240513).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal_20240513.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_OrbitProgramRenewal_20240513).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240513_AaveV3Ethereum_OrbitProgramRenewal/OrbitProgramRenewal.md'
- )
- );
- }
-}
diff --git a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/config.ts b/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/config.ts
deleted file mode 100644
index e43dc5b0d..000000000
--- a/src/20240513_AaveV3Ethereum_OrbitProgramRenewal/config.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- author: 'Aave Chan Initiative',
- pools: ['AaveV3Ethereum'],
- title: 'Orbit Program Renewal',
- shortName: 'OrbitProgramRenewal',
- date: '20240513',
- discussion: 'https://governance.aave.com/t/arfc-orbit-program-renewal-may-2024/17683',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x4a10e2a8ca95024d7cf0791aa82ed262c816ff0ee78bc2f3ab3487e70d731361',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19862601}}},
-};
diff --git a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol b/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol
deleted file mode 100644
index 7b61eaa83..000000000
--- a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol
+++ /dev/null
@@ -1,111 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {AaveSwapper} from 'aave-helpers/swaps/AaveSwapper.sol';
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-
-/**
- * @title April Finance Update Part B
- * @author @karpatkey_TokenLogic
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/arfc-april-finance-update/17390
- */
-contract AaveV3Ethereum_AprilFinanceUpdatePartB_20240515 is IProposalGenericExecutor {
- using SafeERC20 for IERC20;
-
- AaveSwapper public constant SWAPPER = AaveSwapper(MiscEthereum.AAVE_SWAPPER);
-
- address public constant MILKMAN = 0x11C76AD590ABDFFCD980afEC9ad951B160F02797;
- address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c;
- address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC;
-
- address public constant ALC_SAFE = 0x205e795336610f5131Be52F09218AF19f0f3eC60;
-
- uint256 public constant ALC_ALLOWANCES = 1_000_000e6;
-
- function execute() external {
- // Swap DAI
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.DAI_UNDERLYING,
- address(SWAPPER),
- IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR))
- );
-
- SWAPPER.swap(
- MILKMAN,
- PRICE_CHECKER,
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.DAI_ORACLE,
- GHO_USD_FEED,
- address(AaveV3Ethereum.COLLECTOR),
- IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(SWAPPER)),
- 150
- );
-
- // ALC Allowances
- AaveV3Ethereum.COLLECTOR.approve(
- AaveV3EthereumAssets.USDC_UNDERLYING,
- ALC_SAFE,
- ALC_ALLOWANCES
- );
- AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.USDT_A_TOKEN, ALC_SAFE, ALC_ALLOWANCES);
-
- // Deposit into V3: USDC
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.USDC_UNDERLYING,
- address(this),
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)) -
- ALC_ALLOWANCES
- );
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).forceApprove(
- address(AaveV3Ethereum.POOL),
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(this))
- );
- AaveV3Ethereum.POOL.deposit(
- AaveV3EthereumAssets.USDC_UNDERLYING,
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(this)),
- address(AaveV3Ethereum.COLLECTOR),
- 0
- );
-
- // Deposit into V3: wETH
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.WETH_UNDERLYING,
- address(this),
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR))
- );
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).forceApprove(
- address(AaveV3Ethereum.POOL),
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(this))
- );
- AaveV3Ethereum.POOL.deposit(
- AaveV3EthereumAssets.WETH_UNDERLYING,
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(this)),
- address(AaveV3Ethereum.COLLECTOR),
- 0
- );
-
- // Deposit into V3: wBTC
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.WBTC_UNDERLYING,
- address(this),
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR))
- );
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).forceApprove(
- address(AaveV3Ethereum.POOL),
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).balanceOf(address(this))
- );
- AaveV3Ethereum.POOL.deposit(
- AaveV3EthereumAssets.WBTC_UNDERLYING,
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).balanceOf(address(this)),
- address(AaveV3Ethereum.COLLECTOR),
- 0
- );
- }
-}
diff --git a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.t.sol b/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.t.sol
deleted file mode 100644
index 3a5b40647..000000000
--- a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.t.sol
+++ /dev/null
@@ -1,147 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-
-import {AaveV3Ethereum_AprilFinanceUpdatePartB_20240515} from './AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_AprilFinanceUpdatePartB_20240515
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.t.sol -vv
- */
-contract AaveV3Ethereum_AprilFinanceUpdatePartB_20240515_Test is ProtocolV3TestBase {
- event SwapRequested(
- address milkman,
- address indexed fromToken,
- address indexed toToken,
- address fromOracle,
- address toOracle,
- uint256 amount,
- address indexed recipient,
- uint256 slippage
- );
-
- AaveV3Ethereum_AprilFinanceUpdatePartB_20240515 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19879169);
- proposal = new AaveV3Ethereum_AprilFinanceUpdatePartB_20240515();
- }
-
- function test_swap() public {
- assertGt(
- IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
-
- vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
- emit SwapRequested(
- proposal.MILKMAN(),
- AaveV3EthereumAssets.DAI_UNDERLYING,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AaveV3EthereumAssets.DAI_ORACLE,
- proposal.GHO_USD_FEED(),
- 499803957060009088221525, // Hardcoded as dynamic
- address(AaveV3Ethereum.COLLECTOR),
- 150
- );
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
- }
-
- function test_allowances() public {
- assertEq(
- IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.ALC_SAFE()
- ),
- 0
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.ALC_SAFE()
- ),
- 0
- );
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(AaveV3EthereumAssets.USDT_A_TOKEN).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.ALC_SAFE()
- ),
- proposal.ALC_ALLOWANCES()
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).allowance(
- address(AaveV3Ethereum.COLLECTOR),
- proposal.ALC_SAFE()
- ),
- proposal.ALC_ALLOWANCES()
- );
- }
-
- function test_depositIntoV3() public {
- assertGt(
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
-
- uint256 balanceAEthUSDCBefore = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthWETHBefore = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
- uint256 balanceAEthWBTCBefore = IERC20(AaveV3EthereumAssets.WBTC_A_TOKEN).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- assertEq(
- IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- proposal.ALC_ALLOWANCES()
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.WBTC_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- 0
- );
-
- assertGt(
- IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthUSDCBefore
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthWETHBefore
- );
- assertGt(
- IERC20(AaveV3EthereumAssets.WBTC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- balanceAEthWBTCBefore
- );
- }
-}
diff --git a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB.md b/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB.md
deleted file mode 100644
index cb033ce4d..000000000
--- a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: "April Finance Update Part B"
-author: "@karpatkey_TokenLogic"
-discussions: "https://governance.aave.com/t/arfc-april-finance-update/17390"
----
-
-## Simple Summary
-
-This proposal presents April's funding update part B, which is a follow up to the one executed last week, including the following key activities:
-
-- Swap DAI bridged from Polygon on Part A to GHO
-- Create allowance for ALC safe of USDC and aEthUSDT
-- Deposit underlying balances into Aave V3 Ethereum
-
-## Motivation
-
-This is an ongoing effort to manage the DAO's treasury as can be seen in the April [Update](https://governance.aave.com/t/arfc-april-finance-update/17390)
-and GSM funding [update](https://governance.aave.com/t/arfc-fund-usdc-usdt-gsm/17566).
-
-## Specification
-
-- Swap DAI bridged from Polygon on Part A to GHO (~500,000 units)
-- Create allowance for ALC safe of USDC for 1,000,000
-- Create allowance for ALC safe of aEthUSDT for 1,000,000
-- Deposit Collector wETH balance into V3
-- Deposit Collector wBTC balance into V3
-- Deposit Collector USDC balance (minus ALC approval) into V3
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1e89d862b2503c3d4cf90b1e258c1e542dcb5c15/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/1e89d862b2503c3d4cf90b1e258c1e542dcb5c15/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-april-finance-update/17390)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB_20240515.s.sol b/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB_20240515.s.sol
deleted file mode 100644
index fec4d8f0b..000000000
--- a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB_20240515.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_AprilFinanceUpdatePartB_20240515} from './AaveV3Ethereum_AprilFinanceUpdatePartB_20240515.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB_20240515.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AprilFinanceUpdatePartB_20240515.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_AprilFinanceUpdatePartB_20240515).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB_20240515.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_AprilFinanceUpdatePartB_20240515).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/AprilFinanceUpdatePartB.md'
- )
- );
- }
-}
diff --git a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/config.ts b/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/config.ts
deleted file mode 100644
index 98b728c3b..000000000
--- a/src/20240515_AaveV3Ethereum_AprilFinanceUpdatePartB/config.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'April Finance Update Part B',
- shortName: 'AprilFinanceUpdatePartB',
- date: '20240515',
- author: '@karpatkey_TokenLogic',
- discussion: 'https://governance.aave.com/t/arfc-april-finance-update/17390',
- snapshot: 'Direct-to-AIP',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19879169}}},
-};
diff --git a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol b/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol
deleted file mode 100644
index 381c679f4..000000000
--- a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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';
-/**
- * @title SUSD risk parameters update
- * @author Chaos Labs, ACI
- * - Snapshot: Direct-to-AIP
- * - Discussion: https://governance.aave.com/t/susd-depeg-update-05-16-2024/17719
- */
-contract AaveV3Optimism_SUSDRiskParametersUpdate_20240517 is AaveV3PayloadOptimism {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.sUSD_UNDERLYING,
- ltv: 0,
- liqThreshold: EngineFlags.KEEP_CURRENT,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.t.sol b/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.t.sol
deleted file mode 100644
index 6de0e1bb5..000000000
--- a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_SUSDRiskParametersUpdate_20240517} from './AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol';
-
-/**
- * @dev Test for AaveV3Optimism_SUSDRiskParametersUpdate_20240517
- * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.t.sol -vv
- */
-contract AaveV3Optimism_SUSDRiskParametersUpdate_20240517_Test is ProtocolV3TestBase {
- AaveV3Optimism_SUSDRiskParametersUpdate_20240517 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 120178971);
- proposal = new AaveV3Optimism_SUSDRiskParametersUpdate_20240517();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Optimism_SUSDRiskParametersUpdate_20240517',
- AaveV3Optimism.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate.md b/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate.md
deleted file mode 100644
index e770f733f..000000000
--- a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: "SUSD risk parameters update"
-author: "Chaos Labs, ACI"
-discussions: "https://governance.aave.com/t/susd-depeg-update-05-16-2024/17719"
----
-
-## Simple Summary
-
-This proposal is to update the risk parameters of the SUSD asset on Aave V3 Optimism.
-
-## Motivation
-
-The SUSD asset has been experiencing a depegging issue. This proposal aims to update the risk parameters of the SUSD asset to mitigate risk for the Aave protocol.
-
-## Specification
-
-Contract address: [0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9)
-
-| Chain | Asset | Current LTV | Rec. LTV |
-| ----------- | ----- | ----------- | -------- |
-| Optimism V3 | sUSD | 60.00% | 0% |
-
-## References
-
-- Implementation: [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/eff7796bef947bc12c65d1b282057315961c8fbe/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol)
-- Tests: [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/eff7796bef947bc12c65d1b282057315961c8fbe/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/AaveV3Optimism_SUSDRiskParametersUpdate_20240517.t.sol)
-- [Discussion](https://governance.aave.com/t/susd-depeg-update-05-16-2024/17719)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate_20240517.s.sol b/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate_20240517.s.sol
deleted file mode 100644
index 6d21aae81..000000000
--- a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate_20240517.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, OptimismScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Optimism_SUSDRiskParametersUpdate_20240517} from './AaveV3Optimism_SUSDRiskParametersUpdate_20240517.sol';
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate_20240517.s.sol:DeployOptimism chain=optimism
- * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/SUSDRiskParametersUpdate_20240517.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_SUSDRiskParametersUpdate_20240517).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate_20240517.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_SUSDRiskParametersUpdate_20240517).creationCode
- );
- payloads[0] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/SUSDRiskParametersUpdate.md'
- )
- );
- }
-}
diff --git a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/config.ts b/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/config.ts
deleted file mode 100644
index f7e926f06..000000000
--- a/src/20240517_AaveV3Optimism_SUSDRiskParametersUpdate/config.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Optimism'],
- title: 'SUSD risk parameters update',
- shortName: 'SUSDRiskParametersUpdate',
- date: '20240517',
- author: 'Chaos Labs, ACI',
- discussion: 'https://governance.aave.com/t/susd-depeg-update-05-16-2024/17719',
- snapshot: '',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Optimism: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'sUSD',
- ltv: '0',
- liqThreshold: '',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 120178971},
- },
- },
-};
diff --git a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol b/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol
deleted file mode 100644
index ad17f0025..000000000
--- a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumEModes} 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';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-
-/**
- * @title Onboarding ETHx to Aave V3
- * @author karpatkey_TokenLogic
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9238b091250c739f5b5486ab8dbaa110b0b7ec0582698ea2c2d3721377e4b0bb
- * - Discussion: https://governance.aave.com/t/arfc-onboarding-ethx-to-aave-v3-ethereum/15672
- */
-contract AaveV3Ethereum_OnboardingETHxToAaveV3_20240521 is AaveV3PayloadEthereum {
- using SafeERC20 for IERC20;
-
- address public constant ETHx = 0xA35b1B31Ce002FBF2058D22F30f95D405200A15b;
- uint256 public constant ETHx_SEED_AMOUNT = 0.01 ether;
-
- function _postExecute() internal override {
- IERC20(ETHx).forceApprove(address(AaveV3Ethereum.POOL), ETHx_SEED_AMOUNT);
- AaveV3Ethereum.POOL.supply(ETHx, ETHx_SEED_AMOUNT, address(AaveV3Ethereum.COLLECTOR), 0);
- }
-
- function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
- IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
-
- listings[0] = IAaveV3ConfigEngine.Listing({
- asset: ETHx,
- assetSymbol: 'ETHx',
- priceFeed: 0xD6270dAabFe4862306190298C2B48fed9e15C847,
- eModeCategory: AaveV3EthereumEModes.ETH_CORRELATED,
- enabledToBorrow: EngineFlags.ENABLED,
- stableRateModeEnabled: EngineFlags.DISABLED,
- borrowableInIsolation: EngineFlags.DISABLED,
- withSiloedBorrowing: EngineFlags.DISABLED,
- flashloanable: EngineFlags.ENABLED,
- ltv: 74_50,
- liqThreshold: 77_00,
- liqBonus: 7_50,
- reserveFactor: 15_00,
- supplyCap: 3_200,
- borrowCap: 320,
- debtCeiling: 0,
- liqProtocolFee: 10_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(45_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(7_00),
- variableRateSlope2: _bpsToRay(300_00),
- stableRateSlope1: _bpsToRay(0),
- stableRateSlope2: _bpsToRay(0),
- baseStableRateOffset: _bpsToRay(0),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(0)
- })
- });
-
- return listings;
- }
-}
diff --git a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.t.sol b/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.t.sol
deleted file mode 100644
index 861035935..000000000
--- a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.t.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_OnboardingETHxToAaveV3_20240521} from './AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_OnboardingETHxToAaveV3_20240521
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.t.sol -vv
- */
-contract AaveV3Ethereum_OnboardingETHxToAaveV3_20240521_Test is ProtocolV3TestBase {
- AaveV3Ethereum_OnboardingETHxToAaveV3_20240521 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19937144);
- proposal = new AaveV3Ethereum_OnboardingETHxToAaveV3_20240521();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_OnboardingETHxToAaveV3_20240521',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_collectorHasETHxFunds() public {
- GovV3Helpers.executePayload(vm, address(proposal));
- (address aTokenAddress, , ) = AaveV3Ethereum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getReserveTokensAddresses(proposal.ETHx());
- assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 0.01 ether);
- }
-}
diff --git a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3.md b/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3.md
deleted file mode 100644
index 5d087580d..000000000
--- a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: "Onboarding ETHx to Aave V3 Ethereum"
-author: "karpatkey_TokenLogic"
-discussions: "https://governance.aave.com/t/arfc-onboarding-ethx-to-aave-v3-ethereum/15672"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9238b091250c739f5b5486ab8dbaa110b0b7ec0582698ea2c2d3721377e4b0bb"
----
-
-## Simple Summary
-
-This publication onboards Stader Lab's ETHx onto the Ethereum Aave v3 deployment as collateral and includes it the ETH-correlated E-Mode category.
-
-## Motivation
-
-Liquid staking tokens (LSTs) have proven to be popular collateral assets on Aave. The ETHx represents Stader’s staked ETH and provides its users with liquid staking benefits. Supporting ETHx on Aave V3 promotes LST diversity and complements existing assets like stETH, cbETH and rETH.
-
-Given their high correlation to ETH, LSTs are commonly used as collateral to borrow ETH and engage in yield leveraged staking. Several communities have built products that automate such strategies on top of Aave. The inclusion of ETHx in the ETH-category E-Mode enables these strategies to maximize the yield potential of the recursive strategy.
-
-The risk parameters have been provided by Chaos Labs, and the smart contracts of ETHx reviewed by BGD Labs. Further details, including LlamaRisk's more qualitative assessment, can be found on the Aave governance forum.
-
-## Specification
-
-The table below illustrates the configured risk parameters for **ETHx**
-
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | false |
-| Borrowable | ENABLED |
-| Collateral Enabled | true |
-| Supply Cap (ETHx) | 3,200 |
-| Borrow Cap (ETHx) | 320 |
-| Debt Ceiling | USD 0 |
-| LTV | 74.5 % |
-| LT | 77 % |
-| Liquidation Bonus | 7.5 % |
-| Liquidation Protocol Fee | 10 % |
-| Reserve Factor | 15 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 7 % |
-| Variable Slope 2 | 300 % |
-| Uoptimal | 45 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 0 % |
-| Stable Slope2 | 0 % |
-| Base Stable Rate Offset | 0 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 0 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | DISABLED |
-| Oracle | 0xD6270dAabFe4862306190298C2B48fed9e15C847 |
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e8968bac42771c0a782f8ec60c409affbab80a3e/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e8968bac42771c0a782f8ec60c409affbab80a3e/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9238b091250c739f5b5486ab8dbaa110b0b7ec0582698ea2c2d3721377e4b0bb)
-- [Discussion](https://governance.aave.com/t/arfc-onboarding-ethx-to-aave-v3-ethereum/15672)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/config.ts b/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/config.ts
deleted file mode 100644
index a5ed793b2..000000000
--- a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/config.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'Onboarding ETHx to Aave V3',
- shortName: 'OnboardingETHxToAaveV3',
- date: '20240521',
- author: 'karpatkey_TokenLogic',
- discussion: 'https://governance.aave.com/t/arfc-onboarding-ethx-to-aave-v3-ethereum/15672',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x9238b091250c739f5b5486ab8dbaa110b0b7ec0582698ea2c2d3721377e4b0bb',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- ASSET_LISTING: [
- {
- assetSymbol: 'ETHx',
- decimals: 18,
- priceFeed: '0xD6270dAabFe4862306190298C2B48fed9e15C847',
- ltv: '74.500',
- liqThreshold: '77',
- liqBonus: '7.5',
- debtCeiling: '100',
- liqProtocolFee: '10',
- enabledToBorrow: 'ENABLED',
- flashloanable: 'ENABLED',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'DISABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '15',
- supplyCap: '3200',
- borrowCap: '320',
- rateStrategyParams: {
- optimalUtilizationRate: '45',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '7',
- variableRateSlope2: '300',
- stableRateSlope1: '0',
- stableRateSlope2: '0',
- baseStableRateOffset: '0',
- stableRateExcessOffset: '0',
- optimalStableToTotalDebtRatio: '0',
- },
- eModeCategory: 'AaveV3EthereumEModes.ETH_CORRELATED',
- asset: '0xA35b1B31Ce002FBF2058D22F30f95D405200A15b',
- },
- ],
- },
- cache: {blockNumber: 19937144},
- },
- },
-};
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol b/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol
deleted file mode 100644
index 958c8dda4..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- _ ΞΞΞΞ _
- /_;-.__ / _\ _.-;_\
- `-._`'`_/'`.-'
- `\ /`
- | /
- /-.(
- \_._\
- \ \`;
- > |/
- / //
- |//
- \(\
- ``
- defijesus.eth
-*/
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol';
-
-/**
- * @title Reserve Factor Upgrades
- * @author karpatkey_TokenLogic
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e
- * - Discussion: https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/5
- */
-contract AaveV2Avalanche_ReserveFactorUpgrades_20240524 is IProposalGenericExecutor {
- ILendingPoolConfigurator public constant POOL_CONFIGURATOR =
- ILendingPoolConfigurator(AaveV2Avalanche.POOL_CONFIGURATOR);
-
- uint256 public constant DAIe_RF = 50_00;
- uint256 public constant USDCe_RF = 50_00;
- uint256 public constant USDTe_RF = 50_00;
- uint256 public constant WAVAX_RF = 50_00;
- uint256 public constant WBTCe_RF = 55_00;
- uint256 public constant WETHe_RF = 50_00;
-
- function execute() external {
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.DAIe_UNDERLYING, DAIe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDCe_UNDERLYING, USDCe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDTe_UNDERLYING, USDTe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WAVAX_UNDERLYING, WAVAX_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WBTCe_UNDERLYING, WBTCe_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WETHe_UNDERLYING, WETHe_RF);
- }
-}
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.t.sol b/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.t.sol
deleted file mode 100644
index 7f5af7178..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.t.sol
+++ /dev/null
@@ -1,77 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Avalanche_ReserveFactorUpgrades_20240524} from './AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol';
-
-/**
- * @dev Test for AaveV2Avalanche_ReserveFactorUpgrades_20240524
- * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.t.sol -vv
- */
-contract AaveV2Avalanche_ReserveFactorUpgrades_20240524_Test is ProtocolV2TestBase {
- AaveV2Avalanche_ReserveFactorUpgrades_20240524 internal proposal;
-
- struct Changes {
- address asset;
- uint256 reserveFactor;
- }
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 45827928);
- proposal = new AaveV2Avalanche_ReserveFactorUpgrades_20240524();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Avalanche_ReserveFactorUpgrades_20240524',
- AaveV2Avalanche.POOL,
- address(proposal)
- );
- address[] memory assetsChanged = new address[](6);
- assetsChanged[0] = AaveV2AvalancheAssets.DAIe_UNDERLYING;
- assetsChanged[1] = AaveV2AvalancheAssets.USDCe_UNDERLYING;
- assetsChanged[2] = AaveV2AvalancheAssets.USDTe_UNDERLYING;
- assetsChanged[3] = AaveV2AvalancheAssets.WAVAX_UNDERLYING;
- assetsChanged[4] = AaveV2AvalancheAssets.WBTCe_UNDERLYING;
- assetsChanged[5] = AaveV2AvalancheAssets.WETHe_UNDERLYING;
-
- Changes[] memory assetChanges = new Changes[](6);
- assetChanges[0] = Changes({
- asset: AaveV2AvalancheAssets.DAIe_UNDERLYING,
- reserveFactor: proposal.DAIe_RF()
- });
- assetChanges[1] = Changes({
- asset: AaveV2AvalancheAssets.USDCe_UNDERLYING,
- reserveFactor: proposal.USDCe_RF()
- });
- assetChanges[2] = Changes({
- asset: AaveV2AvalancheAssets.USDTe_UNDERLYING,
- reserveFactor: proposal.USDTe_RF()
- });
- assetChanges[3] = Changes({
- asset: AaveV2AvalancheAssets.WAVAX_UNDERLYING,
- reserveFactor: proposal.WAVAX_RF()
- });
- assetChanges[4] = Changes({
- asset: AaveV2AvalancheAssets.WBTCe_UNDERLYING,
- reserveFactor: proposal.WBTCe_RF()
- });
- assetChanges[5] = Changes({
- asset: AaveV2AvalancheAssets.WETHe_UNDERLYING,
- reserveFactor: proposal.WETHe_RF()
- });
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor);
- }
- }
-}
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol b/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol
deleted file mode 100644
index f56fafbbd..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-/*
- _ ΞΞΞΞ _
- /_;-.__ / _\ _.-;_\
- `-._`'`_/'`.-'
- `\ /`
- | /
- /-.(
- \_._\
- \ \`;
- > |/
- / //
- |//
- \(\
- ``
- defijesus.eth
-*/
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol';
-
-/**
- * @title Reserve Factor Upgrades
- * @author karpatkey_TokenLogic
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e
- * - Discussion: https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/10
- */
-contract AaveV2Ethereum_ReserveFactorUpgrades_20240524 is IProposalGenericExecutor {
- ILendingPoolConfigurator public constant POOL_CONFIGURATOR =
- ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR);
-
- uint256 public constant DAI_RF = 55_00;
- uint256 public constant FRAX_RF = 99_99;
- uint256 public constant GUSD_RF = 99_99;
- uint256 public constant LINK_RF = 60_00;
- uint256 public constant LUSD_RF = 99_99;
- uint256 public constant sUSD_RF = 99_99;
- uint256 public constant USDC_RF = 55_00;
- uint256 public constant USDP_RF = 99_99;
- uint256 public constant USDT_RF = 55_00;
- uint256 public constant WBTC_RF = 60_00;
- uint256 public constant WETH_RF = 55_00;
-
- function execute() external {
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.DAI_UNDERLYING, DAI_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.FRAX_UNDERLYING, FRAX_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.GUSD_UNDERLYING, GUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LINK_UNDERLYING, LINK_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LUSD_UNDERLYING, LUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.sUSD_UNDERLYING, sUSD_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, USDC_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDP_UNDERLYING, USDP_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, USDT_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WBTC_UNDERLYING, WBTC_RF);
- POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WETH_UNDERLYING, WETH_RF);
- }
-}
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.t.sol b/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.t.sol
deleted file mode 100644
index 39f2f18c9..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.t.sol
+++ /dev/null
@@ -1,102 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol';
-import {AaveV2Ethereum_ReserveFactorUpgrades_20240524} from './AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol';
-
-/**
- * @dev Test for AaveV2Ethereum_ReserveFactorUpgrades_20240524
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.t.sol -vv
- */
-contract AaveV2Ethereum_ReserveFactorUpgrades_20240524_Test is ProtocolV2TestBase {
- AaveV2Ethereum_ReserveFactorUpgrades_20240524 internal proposal;
-
- struct Changes {
- address asset;
- uint256 reserveFactor;
- }
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19937538);
- proposal = new AaveV2Ethereum_ReserveFactorUpgrades_20240524();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV2Ethereum_ReserveFactorUpgrades_20240524',
- AaveV2Ethereum.POOL,
- address(proposal)
- );
- address[] memory assetsChanged = new address[](11);
- assetsChanged[0] = AaveV2EthereumAssets.DAI_UNDERLYING;
- assetsChanged[1] = AaveV2EthereumAssets.FRAX_UNDERLYING;
- assetsChanged[2] = AaveV2EthereumAssets.GUSD_UNDERLYING;
- assetsChanged[3] = AaveV2EthereumAssets.LINK_UNDERLYING;
- assetsChanged[4] = AaveV2EthereumAssets.LUSD_UNDERLYING;
- assetsChanged[5] = AaveV2EthereumAssets.sUSD_UNDERLYING;
- assetsChanged[6] = AaveV2EthereumAssets.USDC_UNDERLYING;
- assetsChanged[7] = AaveV2EthereumAssets.USDP_UNDERLYING;
- assetsChanged[8] = AaveV2EthereumAssets.USDT_UNDERLYING;
- assetsChanged[9] = AaveV2EthereumAssets.WBTC_UNDERLYING;
- assetsChanged[10] = AaveV2EthereumAssets.WETH_UNDERLYING;
-
- Changes[] memory assetChanges = new Changes[](11);
- assetChanges[0] = Changes({
- asset: AaveV2EthereumAssets.DAI_UNDERLYING,
- reserveFactor: proposal.DAI_RF()
- });
- assetChanges[1] = Changes({
- asset: AaveV2EthereumAssets.FRAX_UNDERLYING,
- reserveFactor: proposal.FRAX_RF()
- });
- assetChanges[2] = Changes({
- asset: AaveV2EthereumAssets.GUSD_UNDERLYING,
- reserveFactor: proposal.GUSD_RF()
- });
- assetChanges[3] = Changes({
- asset: AaveV2EthereumAssets.LINK_UNDERLYING,
- reserveFactor: proposal.LINK_RF()
- });
- assetChanges[4] = Changes({
- asset: AaveV2EthereumAssets.LUSD_UNDERLYING,
- reserveFactor: proposal.LUSD_RF()
- });
- assetChanges[5] = Changes({
- asset: AaveV2EthereumAssets.sUSD_UNDERLYING,
- reserveFactor: proposal.sUSD_RF()
- });
- assetChanges[6] = Changes({
- asset: AaveV2EthereumAssets.USDC_UNDERLYING,
- reserveFactor: proposal.USDC_RF()
- });
- assetChanges[7] = Changes({
- asset: AaveV2EthereumAssets.USDP_UNDERLYING,
- reserveFactor: proposal.USDP_RF()
- });
- assetChanges[8] = Changes({
- asset: AaveV2EthereumAssets.USDT_UNDERLYING,
- reserveFactor: proposal.USDT_RF()
- });
- assetChanges[9] = Changes({
- asset: AaveV2EthereumAssets.WBTC_UNDERLYING,
- reserveFactor: proposal.WBTC_RF()
- });
- assetChanges[10] = Changes({
- asset: AaveV2EthereumAssets.WETH_UNDERLYING,
- reserveFactor: proposal.WETH_RF()
- });
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- for (uint i = 0; i < assetChanges.length; i++) {
- ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset);
- assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor);
- }
- }
-}
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md b/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md
deleted file mode 100644
index 835601a9c..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: "Reserve Factor Upgrades"
-author: "karpatkey_TokenLogic"
-discussions: "https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/10"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e"
----
-
-## Simple Summary
-
-This AIP is composed of two actions: (1) a continuation of proposal 73 on Governance V3 that increases the Reserve Factor (RF) for assets on Ethereum V2 by 5.00%, up to a maximum of 99.99%; and (2) to start periodically increasing the RF across Avalanche V2.
-
-## Motivation
-
-This AIP will reduce deposit yield for assets on Ethereum & Avalanche V2 by increasing the RF. With this upgrade being passed, users will be further encouraged to migrate from Ethereum V2 to V3.
-
-Increasing the RF routes a larger portion of the interest paid by users to Aave DAO's Treasury. User's funds are not at risk of liquidation and the borrowing rate remains unchanged.
-
-Of the assets with an RF set at 99.99%, there is no change. All other asset reserves will have the RF increased by up to 5.00%.
-
-## Specification
-
-For Ethereum V2, the following parameters are to be updated as follows:
-
-| Asset | Previous Reserve Factor | New Reserve Factor |
-| :---: | :---------------------: | :----------------: |
-| DAI | 50.00% | 55.00% |
-| FRAX | 95.00% | 99.99% |
-| GUSD | 95.00% | 99.99% |
-| LINK | 55.00% | 60.00% |
-| LUSD | 95.00% | 99.99% |
-| sUSD | 95.00% | 99.99% |
-| USDC | 50.00% | 55.00% |
-| USDP | 95.00% | 99.99% |
-| USDT | 50.00% | 55.00% |
-| WBTC | 55.00% | 60.00% |
-| WETH | 50.00% | 55.00% |
-
-For Avalanche V2, the following parameters are to be updated as follows:
-
-| Asset | Previous Reserve Factor | New Reserve Factor |
-| :---: | :---------------------: | :----------------: |
-| DAIe | 45.00% | 50.00% |
-| USDCe | 45.00% | 50.00% |
-| USDTe | 45.00% | 50.00% |
-| WAVAX | 45.00% | 50.00% |
-| WBTCe | 50.00% | 55.00% |
-| WETHe | 45.00% | 50.00% |
-
-## References
-
-- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4d1d71e284bacc7244fc1388f0c7f750eac8ece9/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/4d1d71e284bacc7244fc1388f0c7f750eac8ece9/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol)
-- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4d1d71e284bacc7244fc1388f0c7f750eac8ece9/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Ethereum_ReserveFactorUpgrades_20240524.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/4d1d71e284bacc7244fc1388f0c7f750eac8ece9/src/20240524_Multi_ReserveFactorUpgrades/AaveV2Avalanche_ReserveFactorUpgrades_20240524.t.sol)
-- [Discussion for Ethereum Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/10)
-- [Snapshot for Ethereum Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e)
-- [Discussion for Avalanche Reserve Factor Updates](https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/5)
-- [Snapshot for Avalanche Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol b/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol
deleted file mode 100644
index 6236dab4a..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol
+++ /dev/null
@@ -1,90 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, AvalancheScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV2Ethereum_ReserveFactorUpgrades_20240524} from './AaveV2Ethereum_ReserveFactorUpgrades_20240524.sol';
-import {AaveV2Avalanche_ReserveFactorUpgrades_20240524} from './AaveV2Avalanche_ReserveFactorUpgrades_20240524.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ReserveFactorUpgrades_20240524.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Ethereum_ReserveFactorUpgrades_20240524).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol:DeployAvalanche chain=avalanche
- * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/ReserveFactorUpgrades_20240524.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV2Avalanche_ReserveFactorUpgrades_20240524).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades_20240524.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV2Ethereum_ReserveFactorUpgrades_20240524).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV2Avalanche_ReserveFactorUpgrades_20240524).creationCode
- );
- payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240524_Multi_ReserveFactorUpgrades/ReserveFactorUpgrades.md'
- )
- );
- }
-}
diff --git a/src/20240524_Multi_ReserveFactorUpgrades/config.ts b/src/20240524_Multi_ReserveFactorUpgrades/config.ts
deleted file mode 100644
index c44679020..000000000
--- a/src/20240524_Multi_ReserveFactorUpgrades/config.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV2Ethereum', 'AaveV2Avalanche'],
- title: 'Reserve Factor Upgrades',
- shortName: 'ReserveFactorUpgrades',
- date: '20240524',
- author: 'karpatkey_TokenLogic',
- discussion: 'https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/10',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19937538}},
- AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 45827928}},
- },
-};
diff --git a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol b/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol
deleted file mode 100644
index 10eab058d..000000000
--- a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol
+++ /dev/null
@@ -1,63 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Base, AaveV3BaseEModes} 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';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-/**
- * @title weETH Aave V3 Base Onboarding
- * @author ACI
- * - Discussion: https://governance.aave.com/t/arfc-onboarding-of-weeth-to-aave-v3-on-base/17691
- */
-contract AaveV3Base_WeETHAaveV3BaseOnboarding_20240527 is AaveV3PayloadBase {
- using SafeERC20 for IERC20;
-
- address public constant weETH = 0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A;
- uint256 public constant weETH_SEED_AMOUNT = 0.001 ether;
-
- function _postExecute() internal override {
- IERC20(weETH).forceApprove(address(AaveV3Base.POOL), weETH_SEED_AMOUNT);
- AaveV3Base.POOL.supply(weETH, weETH_SEED_AMOUNT, address(AaveV3Base.COLLECTOR), 0);
- }
-
- function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
- IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
-
- listings[0] = IAaveV3ConfigEngine.Listing({
- asset: weETH,
- assetSymbol: 'weETH',
- priceFeed: 0xFc4d1d7a8FD1E6719e361e16044b460737F12C44,
- eModeCategory: AaveV3BaseEModes.ETH_CORRELATED,
- enabledToBorrow: EngineFlags.ENABLED,
- stableRateModeEnabled: EngineFlags.DISABLED,
- borrowableInIsolation: EngineFlags.DISABLED,
- withSiloedBorrowing: EngineFlags.DISABLED,
- flashloanable: EngineFlags.ENABLED,
- ltv: 72_50,
- liqThreshold: 75_00,
- liqBonus: 7_50,
- reserveFactor: 45_00,
- supplyCap: 150,
- borrowCap: 30,
- debtCeiling: 0,
- liqProtocolFee: 10_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(35_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(7_00),
- variableRateSlope2: _bpsToRay(300_00),
- stableRateSlope1: _bpsToRay(7_00),
- stableRateSlope2: _bpsToRay(300_00),
- baseStableRateOffset: _bpsToRay(0),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(0)
- })
- });
-
- return listings;
- }
-}
diff --git a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.t.sol b/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.t.sol
deleted file mode 100644
index 4376858bd..000000000
--- a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.t.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Base_WeETHAaveV3BaseOnboarding_20240527} from './AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol';
-
-/**
- * @dev Test for AaveV3Base_WeETHAaveV3BaseOnboarding_20240527
- * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.t.sol -vv
- */
-contract AaveV3Base_WeETHAaveV3BaseOnboarding_20240527_Test is ProtocolV3TestBase {
- AaveV3Base_WeETHAaveV3BaseOnboarding_20240527 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('base'), 15015803);
- proposal = new AaveV3Base_WeETHAaveV3BaseOnboarding_20240527();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Base_WeETHAaveV3BaseOnboarding_20240527',
- AaveV3Base.POOL,
- address(proposal)
- );
- }
-
- function test_collectorHasweETHFunds() public {
- GovV3Helpers.executePayload(vm, address(proposal));
- (address aTokenAddress, , ) = AaveV3Base.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses(
- proposal.weETH()
- );
- assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Base.COLLECTOR)), 1 ** 16);
- }
-}
diff --git a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding.md b/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding.md
deleted file mode 100644
index f64bb5326..000000000
--- a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: "weETH Aave V3 Base Onboarding"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-onboarding-of-weeth-to-aave-v3-on-base/17691"
----
-
-## Simple Summary
-
-This ARFC seeks to add [Ether.fi](http://ether.fi/) Liquid Restaking Token weETH to Aave V3 on Base.
-
-After the successful onboarding of both weETH to [Aave v3 Ethereum](https://vote.onaave.com/proposal/?proposalId=74&ipfsHash=0x227ef8b0f49775f64100ec697bc4e67b0739bd1ff08788b1f6b48a66e1d57bf7) and [Arbitrum](https://vote.onaave.com/proposal/?proposalId=76&ipfsHash=0x78778591515790b337fcdcc2a02d49dc58e98cad614c33d61e1173bc6194729d), and latest ARFC to Increase Supply and Borrow Caps for weETH on both networks due to huge demand, this proposal will go direct-to-AIP following the asset onboarding framework.
-
-## Motivation
-
-eETH is an LRT that allows users to stake their ETH, accrue staking rewards, and receive additional rewards through native restaking on EigenLayer.
-
-[Ether.fi](http://ether.fi/) has also launched eETH on Arbitrum, allowing users on the L2 to get exposure to the LRT yield and points. As weETH has already been approved for onboarding to Aave v3 Ethereum and Arbitrum by the DAO, this proposal aims to extend the onboarding of weETH to Aave v3 on Base.
-
-## Specification
-
-The table below illustrates the configured risk parameters for **weETH**
-
-the Reserve Factor & UOptimal parameters have been aligned with the mainnet parameters to optimize Aave DAO revenue.
-
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | False |
-| Borrowable | ENABLED |
-| Collateral Enabled | true |
-| Supply Cap (weETH) | 150 |
-| Borrow Cap (weETH) | 30 |
-| Debt Ceiling | USD 0 |
-| LTV | 72.5 % |
-| LT | 75 % |
-| Liquidation Bonus | 7.5 % |
-| Liquidation Protocol Fee | 10 % |
-| Reserve Factor | 45 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 7 % |
-| Variable Slope 2 | 300 % |
-| Uoptimal | 35 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 7 % |
-| Stable Slope2 | 300 % |
-| Base Stable Rate Offset | 0 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 0 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | DISABLED |
-| Oracle | 0xFc4d1d7a8FD1E6719e361e16044b460737F12C44 |
-
-## References
-
-- Implementation: [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/b935abe107023ccb346699df696279935d0b94e2/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol)
-- Tests: [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/b935abe107023ccb346699df696279935d0b94e2/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-onboarding-of-weeth-to-aave-v3-on-base/17691)
-- [Updated parameters Discussion](https://governance.aave.com/t/arfc-adjusting-interest-rate-curve-for-weeth-on-arbitrum-and-base/17804)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding_20240527.s.sol b/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding_20240527.s.sol
deleted file mode 100644
index 753f38ab0..000000000
--- a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding_20240527.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, BaseScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Base_WeETHAaveV3BaseOnboarding_20240527} from './AaveV3Base_WeETHAaveV3BaseOnboarding_20240527.sol';
-
-/**
- * @dev Deploy Base
- * deploy-command: make deploy-ledger contract=src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding_20240527.s.sol:DeployBase chain=base
- * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/WeETHAaveV3BaseOnboarding_20240527.s.sol/8453/run-latest.json
- */
-contract DeployBase is BaseScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Base_WeETHAaveV3BaseOnboarding_20240527).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding_20240527.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBase[0] = GovV3Helpers.buildAction(
- type(AaveV3Base_WeETHAaveV3BaseOnboarding_20240527).creationCode
- );
- payloads[0] = GovV3Helpers.buildBasePayload(vm, actionsBase);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/WeETHAaveV3BaseOnboarding.md'
- )
- );
- }
-}
diff --git a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/config.ts b/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/config.ts
deleted file mode 100644
index b2546dd50..000000000
--- a/src/20240527_AaveV3Base_WeETHAaveV3BaseOnboarding/config.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Base'],
- title: 'weETH Aave V3 Base Onboarding',
- shortName: 'WeETHAaveV3BaseOnboarding',
- date: '20240527',
- author: 'ACI',
- discussion: 'https://governance.aave.com/t/arfc-onboarding-of-weeth-to-aave-v3-on-base/17691',
- snapshot: '',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Base: {
- configs: {
- ASSET_LISTING: [
- {
- assetSymbol: 'weETH',
- decimals: 18,
- priceFeed: '0xFc4d1d7a8FD1E6719e361e16044b460737F12C44',
- ltv: '72.5',
- liqThreshold: '75',
- liqBonus: '7.5',
- debtCeiling: '0',
- liqProtocolFee: '10',
- enabledToBorrow: 'ENABLED',
- flashloanable: 'ENABLED',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'DISABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '45',
- supplyCap: '150',
- borrowCap: '30',
- rateStrategyParams: {
- optimalUtilizationRate: '35',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '7',
- variableRateSlope2: '300',
- stableRateSlope1: '7',
- stableRateSlope2: '300',
- baseStableRateOffset: '20',
- stableRateExcessOffset: '20',
- optimalStableToTotalDebtRatio: '20',
- },
- eModeCategory: 'AaveV3BaseEModes.ETH_CORRELATED',
- asset: '0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A',
- },
- ],
- },
- cache: {blockNumber: 15006009},
- },
- },
-};
diff --git a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol b/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol
deleted file mode 100644
index a80bf1632..000000000
--- a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumEModes} 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';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-/**
- * @title Onboard USDe Aave V3 Ethereum
- * @author ACI
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xc1b6d0d390a2dabf81206f592f740c69163dd028dcb0f50182d0ad3a50e744b0
- * - Discussion: https://governance.aave.com/t/arfc-onboard-usde-to-aave-v3-on-ethereum/17690
- */
-contract AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528 is AaveV3PayloadEthereum {
- using SafeERC20 for IERC20;
-
- address public constant USDe = 0x4c9EDD5852cd905f086C759E8383e09bff1E68B3;
- uint256 public constant USDe_SEED_AMOUNT = 1e18;
-
- function _postExecute() internal override {
- IERC20(USDe).forceApprove(address(AaveV3Ethereum.POOL), USDe_SEED_AMOUNT);
- AaveV3Ethereum.POOL.supply(USDe, USDe_SEED_AMOUNT, address(AaveV3Ethereum.COLLECTOR), 0);
- }
-
- function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
- IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
-
- listings[0] = IAaveV3ConfigEngine.Listing({
- asset: USDe,
- assetSymbol: 'USDe',
- priceFeed: 0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17,
- eModeCategory: AaveV3EthereumEModes.NONE,
- enabledToBorrow: EngineFlags.ENABLED,
- stableRateModeEnabled: EngineFlags.DISABLED,
- borrowableInIsolation: EngineFlags.ENABLED,
- withSiloedBorrowing: EngineFlags.DISABLED,
- flashloanable: EngineFlags.ENABLED,
- ltv: 72_00,
- liqThreshold: 75_00,
- liqBonus: 8_50,
- reserveFactor: 25_00,
- supplyCap: 80_000_000,
- borrowCap: 72_000_000,
- debtCeiling: 40_000_000,
- liqProtocolFee: 10_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(80_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(9_00),
- variableRateSlope2: _bpsToRay(75_00),
- stableRateSlope1: _bpsToRay(9_00),
- stableRateSlope2: _bpsToRay(75_00),
- baseStableRateOffset: _bpsToRay(0),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(0)
- })
- });
-
- return listings;
- }
-}
diff --git a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.t.sol b/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.t.sol
deleted file mode 100644
index ef5e40169..000000000
--- a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.t.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528} from './AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.t.sol -vv
- */
-contract AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528_Test is ProtocolV3TestBase {
- AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 19982323);
- proposal = new AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_collectorHasUSDeFunds() public {
- GovV3Helpers.executePayload(vm, address(proposal));
- (address aTokenAddress, , ) = AaveV3Ethereum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getReserveTokensAddresses(proposal.USDe());
- assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 10 ** 18);
- }
-}
diff --git a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum.md b/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum.md
deleted file mode 100644
index ab62cdb72..000000000
--- a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: "Onboard USDe Aave V3 Ethereum"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-onboard-usde-to-aave-v3-on-ethereum/17690"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0xc1b6d0d390a2dabf81206f592f740c69163dd028dcb0f50182d0ad3a50e744b0"
----
-
-## Simple Summary
-
-This proposal seek approval for the addition of USDe to Aave V3 on Ethereum
-
-## Motivation
-
-Ethena’s synthetic dollar, USDe, provides a stable crypto-native solution for a cash and carry structured product. The staked version of USDe, sUSDe, earns yield from the protocol and has high potential for strong borrow demand.
-
-## Specification
-
-The table below illustrates the configured risk parameters for **USDe**
-
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | true |
-| Borrowable | ENABLED |
-| Collateral Enabled | true |
-| Supply Cap (USDe) | 80,000,000 |
-| Borrow Cap (USDe) | 72,000,000 |
-| Debt Ceiling | USD 40,000,000 |
-| LTV | 72 % |
-| LT | 75 % |
-| Liquidation Bonus | 8.5 % |
-| Liquidation Protocol Fee | 10 % |
-| Reserve Factor | 25 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 9 % |
-| Variable Slope 2 | 75 % |
-| Uoptimal | 80 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 9 % |
-| Stable Slope2 | 75 % |
-| Base Stable Rate Offset | 0 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 0 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | ENABLED |
-| Oracle | 0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17 |
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/636bb0b17753c7e2af5d81933e7b61022e44e7e8/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/636bb0b17753c7e2af5d81933e7b61022e44e7e8/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xc1b6d0d390a2dabf81206f592f740c69163dd028dcb0f50182d0ad3a50e744b0)
-- [Discussion](https://governance.aave.com/t/arfc-onboard-usde-to-aave-v3-on-ethereum/17690)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum_20240528.s.sol b/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum_20240528.s.sol
deleted file mode 100644
index e8d117113..000000000
--- a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum_20240528.s.sol
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528} from './AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum_20240528.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardUSDeAaveV3Ethereum_20240528.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum_20240528.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_OnboardUSDeAaveV3Ethereum_20240528).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/OnboardUSDeAaveV3Ethereum.md'
- )
- );
- }
-}
diff --git a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/config.ts b/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/config.ts
deleted file mode 100644
index 34b29b0f6..000000000
--- a/src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/config.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- configFile: 'src/20240528_AaveV3Ethereum_OnboardUSDeAaveV3Ethereum/config.ts',
- pools: ['AaveV3Ethereum'],
- title: 'Onboard USDe Aave V3 Ethereum',
- shortName: 'OnboardUSDeAaveV3Ethereum',
- date: '20240528',
- author: 'ACI',
- discussion: 'https://governance.aave.com/t/arfc-onboard-usde-to-aave-v3-on-ethereum/17690',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xc1b6d0d390a2dabf81206f592f740c69163dd028dcb0f50182d0ad3a50e744b0',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- ASSET_LISTING: [
- {
- assetSymbol: 'USDe',
- decimals: 18,
- priceFeed: '0x55B6C4D3E8A27b8A1F5a263321b602e0fdEEcC17',
- ltv: '72',
- liqThreshold: '75',
- liqBonus: '8.5',
- debtCeiling: '40000000',
- liqProtocolFee: '10',
- enabledToBorrow: 'ENABLED',
- flashloanable: 'ENABLED',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'ENABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '25',
- supplyCap: '80000000',
- borrowCap: '72000000',
- rateStrategyParams: {
- optimalUtilizationRate: '80',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '9',
- variableRateSlope2: '75',
- stableRateSlope1: '9',
- stableRateSlope2: '75',
- baseStableRateOffset: '0',
- stableRateExcessOffset: '0',
- optimalStableToTotalDebtRatio: '0',
- },
- eModeCategory: 'AaveV3EthereumEModes.NONE',
- asset: '0x4c9edd5852cd905f086c759e8383e09bff1e68b3',
- },
- ],
- },
- cache: {blockNumber: 19967375},
- },
- },
-};
diff --git a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol b/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol
deleted file mode 100644
index 1cc0968cd..000000000
--- a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism, AaveV3OptimismAssets, AaveV3OptimismEModes} 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';
-
-/**
- * @title Chaos Labs Parameter Recommendations sUSD on V3 Optimism
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xa66afef5e247d9369831e874a60d022ce6b12645b41d9a244077a3a279ef24f3
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-parameter-recommendations-susd-on-v3-optimism-05-232024/17779
- */
-contract AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528 is
- AaveV3PayloadOptimism
-{
- function _postExecute() internal override {
- AaveV3Optimism.POOL_CONFIGURATOR.setReserveFreeze(AaveV3OptimismAssets.sUSD_UNDERLYING, false);
- }
-
- function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) {
- IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1);
-
- capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({
- asset: AaveV3OptimismAssets.sUSD_UNDERLYING,
- supplyCap: 7_000_000,
- borrowCap: 5_600_000
- });
-
- return capsUpdate;
- }
-
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.sUSD_UNDERLYING,
- ltv: 60_00,
- liqThreshold: 70_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-
- function eModeCategoriesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory)
- {
- IAaveV3ConfigEngine.EModeCategoryUpdate[]
- memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1);
-
- eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({
- eModeCategory: AaveV3OptimismEModes.STABLECOINS,
- ltv: 90_00,
- liqThreshold: 93_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- priceSource: EngineFlags.KEEP_CURRENT_ADDRESS,
- label: EngineFlags.KEEP_CURRENT_STRING
- });
-
- return eModeUpdates;
- }
-}
diff --git a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.t.sol b/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.t.sol
deleted file mode 100644
index 476673f2e..000000000
--- a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.t.sol
+++ /dev/null
@@ -1,57 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528} from './AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol';
-import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
-import {DataTypes} from 'aave-address-book/AaveV3.sol';
-
-/**
- * @dev Test for AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528
- * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.t.sol -vv
- */
-contract AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528_Test is
- ProtocolV3TestBase
-{
- AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 120646741);
- proposal = new AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest(
- 'AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528',
- AaveV3Optimism.POOL,
- address(proposal)
- );
-
- address[] memory assetsChanged = new address[](1);
- assetsChanged[0] = AaveV3OptimismAssets.sUSD_UNDERLYING;
-
- _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged);
-
- ReserveConfig memory config = _findReserveConfig(
- allConfigsAfter,
- AaveV3OptimismAssets.sUSD_UNDERLYING
- );
- assertEq(config.isFrozen, false);
- assertEq(config.ltv, 60_00);
- assertEq(config.liquidationThreshold, 70_00);
- assertEq(config.borrowCap, 5_600_000);
- assertEq(config.supplyCap, 7_000_000);
-
- DataTypes.EModeCategory memory eModeStablecoinCategory = AaveV3Optimism
- .POOL
- .getEModeCategoryData(1);
- assertEq(eModeStablecoinCategory.ltv, 90_00);
- assertEq(eModeStablecoinCategory.liquidationThreshold, 93_00);
- }
-}
diff --git a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism.md b/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism.md
deleted file mode 100644
index 5f285980c..000000000
--- a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: "Chaos Labs Parameter Recommendations sUSD on V3 Optimism"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-chaos-labs-parameter-recommendations-susd-on-v3-optimism-05-232024/17779"
----
-
-## Simple Summary
-
-Following sUSD’s depeg, after which the market was frozen on V3 Optimism, we provide an update and recommend future actions.
-
-## Motivation
-
-sUSD depegged on May 16, 2024, with its price reaching a low of 0.915 relative to USDC. As it was depegging, we provided a full analysis of the cause and a recommendation to freeze its Optimism market; sUSD has since repegged.
-
-Market Response to Freezing
-
-Following the market being frozen on May 16, we observed gradual withdrawals over the next four days, with about 1M sUSD withdrawn. However, starting May 20, withdrawals accelerated, and there are currently 5.16M sUSD deposited in the market.
-
-On the other hand, the sUSD borrowed has been relatively stable, decreasing from 4.3M sUSD at the time of the freeze to 4.17M sUSD now. This is despite sUSD remaining depegged until May 21, incentivizing users who borrowed the asset to repay their debt.
-
-Synthetix has also announced its transition plan for V3, which details how it will scale sUSD. These updates include expanding the collateral assets for sUSD from SNX alone to SNX, ETH, USDC, and other yield-generating collateral and governance-approved tokens. Additionally, the protocol has incentivized sUSD liquidity providers on Velodrome (Optimism; 10,000 OP tokens per week in the sUSD/USDC pool) and Curve (Ethereum; 20,000 SNX tokens per week in the sUSD/USDC/DAI/USDT pool); liquidity has begun to improve as a result of these incentives.
-
-sUSD Exposure on Aave
-
-sUSD is listed on Aave V3 Optimism as a frozen collateral asset and Aave V2 Ethereum as a frozen, non-collateral asset. Since the freeze on Optimism, we have observed a sharp decrease in value borrowed against sUSD, as well as the amount borrowed against sUSD in E-Mode. The reduction in E-Mode borrowed against is especially important, given the high LT afforded in this market.
-
-Recommendations
-
-Reduce Supply and Borrow Caps on Aave V3, Optimism: Given that the market’s size has decreased, as well as a decrease in on-chain supply — from 31M pre-freeze to 23.6M now — we recommend decreasing the supply and borrow caps ahead of unfreezing the asset. This will ensure that any future growth in the market is controlled and risk is minimized.
-
-We recommend setting the caps according to our initial listing methodology, in which we determine the amount of an asset that can be liquidated with slippage lower than the LB, set at 1% in the stablecoin E-mode, and recommend the supply cap be double that amount. This leads us to a recommendation of a 7M sUSD supply cap and a borrow cap set at 80% of the supply cap at 5.6M sUSD.
-Reduce Stablecoin E-Mode LT and LTV: We recommend reducing E-Mode LT and LTV for stablecoins in Optimism’s Stablecoin E-Mode. Reducing LTs will make the protocol more resilient to any potential depegs in the future, ensuring that there is larger buffer in the event a stablecoin’s price falls and liquidations occur. Additionally, lowering LTV will slightly reduce users’ stablecoin-stablecoin borrowing power, again reducing risk in these markets.
-
-A 2% LT reduction on the Optimism V3 stablecoin E-mode category will make 18 accounts eligible for liquidation, potentially inducing $25K in new liquidations.
-Adjust sUSD’s LTV and LT: Following the freeze of sUSD, its non-E-Mode LTV was dropped to 0%. Its current LT is 75%. Increasing the LTV will allow users to borrow non-stablecoin assets against their collateral, while adjusting the LT downwards will ensure the protocol has a larger buffer in the event of liquidations, whether from a depeg or from appreciation of borrowed assets.
-
-We recommend increasing sUSD’s non-E-Mode LTV to 60% and reducing its non-E-Mode LT to 70%. At this time, this would lead to a negligible $8 in liquidation across 4 accounts.
-Unfreeze the sUSD market on Optimism: While sUSD has repegged, we note that the ongoing deprecation of synth assets may continue to cause peg volatility. The discount rate, which dictates the value synth asset holders can receive when they redeem, will continue to be lowered in an effort to deprecate these markets. Synth asset holders may request a redemption at parity, which, in the future, may carry some time-based conditions (i.e., sUSD is sent to the redeeming user over the course of weeks or months) to reduce the potential impact on sUSD’s peg. While the Synthetix Council has an incentive to ensure redemptions of synth assets with minimal price impacts, whether to the synth assets or sUSD, these time-based conditions are not codified.
-
-Given this, as well as the reduced supply/borrow caps and E-Mode LT/LTV, we recommend unfreezing the market.
-We would like to thank @kaleb and the Synthetix team for their collaboration, insights on the situation, and guidance on the protocol and governance mechanisms to stabilize the peg.
-
-## Specification
-
-| Asset | Parameter | Current | Rec |
-| ----- | ---------- | ---------- | --------- |
-| sUSD | Supply cap | 20,000,000 | 7,000,000 |
-| sUSD | Borrow cap | 13,000,000 | 5,600,000 |
-| sUSD | LT | 75% | 70% |
-| sUSD | LTV | 0.0% | 60% |
-
-Stablecoin E-Mode Specifications
-
-| Parameter | Current | Rec |
-| --------- | ------- | --- |
-| LT | 95% | 93% |
-| LTV | 93% | 90% |
-
-## References
-
-- Implementation: [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/ad5c895c51906be7b3ab7d2e61e6570644f3cbf5/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol)
-- Tests: [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/ad5c895c51906be7b3ab7d2e61e6570644f3cbf5/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xa66afef5e247d9369831e874a60d022ce6b12645b41d9a244077a3a279ef24f3)
-- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-parameter-recommendations-susd-on-v3-optimism-05-232024/17779)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol b/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol
deleted file mode 100644
index 8547b8705..000000000
--- a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, OptimismScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528} from './AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.sol';
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol:DeployOptimism chain=optimism
- * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism_20240528).creationCode
- );
- payloads[0] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/ChaosLabsParameterRecommendationsSUSDOnV3Optimism.md'
- )
- );
- }
-}
diff --git a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/config.ts b/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/config.ts
deleted file mode 100644
index 40e98b4bf..000000000
--- a/src/20240528_AaveV3Optimism_ChaosLabsParameterRecommendationsSUSDOnV3Optimism/config.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Optimism'],
- title: 'Chaos Labs Parameter Recommendations sUSD on V3 Optimism',
- shortName: 'ChaosLabsParameterRecommendationsSUSDOnV3Optimism',
- date: '20240528',
- author: 'Chaos Labs',
- discussion:
- 'https://governance.aave.com/t/arfc-chaos-labs-parameter-recommendations-susd-on-v3-optimism-05-232024/17779',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xa66afef5e247d9369831e874a60d022ce6b12645b41d9a244077a3a279ef24f3',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Optimism: {
- configs: {
- CAPS_UPDATE: [{asset: 'sUSD', supplyCap: '7000000', borrowCap: '5600000'}],
- COLLATERALS_UPDATE: [
- {
- asset: 'sUSD',
- ltv: '60',
- liqThreshold: '70',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- EMODES_UPDATES: [
- {
- eModeCategory: 'AaveV3OptimismEModes.STABLECOINS',
- ltv: '90',
- liqThreshold: '93',
- liqBonus: '',
- priceSource: '',
- label: '',
- },
- ],
- FREEZE: [{asset: 'sUSD', shouldBeFrozen: false}],
- },
- cache: {blockNumber: 120646741},
- },
- },
-};
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol b/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol
deleted file mode 100644
index 9ff4126dc..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol
+++ /dev/null
@@ -1,110 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
-import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol';
-import {TransparentUpgradeableProxy} from 'solidity-utils/contracts/transparent-proxy/TransparentUpgradeableProxy.sol';
-import {UpgradeableBurnMintTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableBurnMintTokenPool.sol';
-import {UpgradeableTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableTokenPool.sol';
-import {RateLimiter} from 'ccip/v0.8/ccip/libraries/RateLimiter.sol';
-import {UpgradeableGhoToken} from 'gho-core/gho/UpgradeableGhoToken.sol';
-import {IGhoToken} from 'gho-core/gho/interfaces/IGhoToken.sol';
-
-library Utils {
- address public constant CCIP_ARM_PROXY = 0xC311a21e6fEf769344EB1515588B9d535662a145;
- address public constant CCIP_ROUTER = 0x141fa059441E0ca23ce184B6A78bafD2A517DdE8;
- uint256 public constant CCIP_BUCKET_CAPACITY = 1_000_000e18; // 1M
- uint64 public constant CCIP_ETH_CHAIN_SELECTOR = 5009297550715157269;
-
- function deployGhoToken() internal returns (address) {
- address imple = address(new UpgradeableGhoToken());
-
- bytes memory ghoTokenInitParams = abi.encodeWithSignature(
- 'initialize(address)',
- GovernanceV3Arbitrum.EXECUTOR_LVL_1 // owner
- );
- return
- address(new TransparentUpgradeableProxy(imple, MiscArbitrum.PROXY_ADMIN, ghoTokenInitParams));
- }
-
- function deployCcipTokenPool(address ghoToken) external returns (address) {
- address imple = address(new UpgradeableBurnMintTokenPool(ghoToken, CCIP_ARM_PROXY, false));
-
- bytes memory tokenPoolInitParams = abi.encodeWithSignature(
- 'initialize(address,address[],address)',
- GovernanceV3Arbitrum.EXECUTOR_LVL_1, // owner
- new address[](0), // allowList
- CCIP_ROUTER // router
- );
- return
- address(
- new TransparentUpgradeableProxy(
- imple, // logic
- MiscArbitrum.PROXY_ADMIN, // proxy admin
- tokenPoolInitParams // data
- )
- );
- }
-}
-
-/**
- * @title GHO Cross-Chain Launch
- * @author Aave Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a
- * - Discussion: https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616
- * @dev This payload consists of the following set of actions:
- * 1. Deploy GHO
- * 2. Deploy BurnMintTokenPool
- * 3. Accept ownership of CCIP TokenPool
- * 4. Configure CCIP TokenPool
- * 5. Add CCIP TokenPool as GHO Facilitator
- */
-contract AaveV3Arbitrum_GHOCrossChainLaunch_20240528 is IProposalGenericExecutor {
- function execute() external {
- // 1. Deploy GHO
- address ghoToken = Utils.deployGhoToken();
-
- // 2. Deploy BurnMintTokenPool
- address tokenPool = Utils.deployCcipTokenPool(ghoToken);
-
- // 3. Accept TokenPool ownership
- UpgradeableBurnMintTokenPool(tokenPool).acceptOwnership();
-
- // 4. Configure CCIP TokenPool
- _configureCcipTokenPool(tokenPool);
-
- // 5. Add CCIP TokenPool as GHO Facilitator
- IGhoToken(ghoToken).grantRole(
- IGhoToken(ghoToken).FACILITATOR_MANAGER_ROLE(),
- GovernanceV3Arbitrum.EXECUTOR_LVL_1
- );
- IGhoToken(ghoToken).grantRole(
- IGhoToken(ghoToken).BUCKET_MANAGER_ROLE(),
- GovernanceV3Arbitrum.EXECUTOR_LVL_1
- );
- IGhoToken(ghoToken).addFacilitator(
- tokenPool,
- 'CCIP TokenPool',
- uint128(Utils.CCIP_BUCKET_CAPACITY)
- );
- }
-
- function _configureCcipTokenPool(address tokenPool) internal {
- UpgradeableTokenPool.ChainUpdate[] memory chainUpdates = new UpgradeableTokenPool.ChainUpdate[](
- 1
- );
- RateLimiter.Config memory rateConfig = RateLimiter.Config({
- isEnabled: false,
- capacity: 0,
- rate: 0
- });
- chainUpdates[0] = UpgradeableTokenPool.ChainUpdate({
- remoteChainSelector: Utils.CCIP_ETH_CHAIN_SELECTOR,
- allowed: true,
- outboundRateLimiterConfig: rateConfig,
- inboundRateLimiterConfig: rateConfig
- });
- UpgradeableBurnMintTokenPool(tokenPool).applyChainUpdates(chainUpdates);
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.t.sol b/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.t.sol
deleted file mode 100644
index 5e57ca610..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.t.sol
+++ /dev/null
@@ -1,388 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import 'forge-std/Test.sol';
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
-import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {RateLimiter} from 'ccip/v0.8/ccip/libraries/RateLimiter.sol';
-import {Internal} from 'ccip/v0.8/ccip/libraries/Internal.sol';
-import {Client} from 'ccip/v0.8/ccip/libraries/Client.sol';
-import {Router} from 'ccip/v0.8/ccip/Router.sol';
-import {PriceRegistry} from 'ccip/v0.8/ccip/PriceRegistry.sol';
-import {EVM2EVMOnRamp} from 'ccip/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol';
-import {EVM2EVMOffRamp} from 'ccip/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol';
-import {IPool} from 'ccip/v0.8/ccip/interfaces/pools/IPool.sol';
-
-import {UpgradeableBurnMintTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableBurnMintTokenPool.sol';
-import {IGhoToken} from 'gho-core/gho/interfaces/IGhoToken.sol';
-
-import {AaveV3Arbitrum_GHOCrossChainLaunch_20240528, Utils} from './AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_GHOCrossChainLaunch_20240528
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.t.sol -vv
- */
-contract AaveV3Arbitrum_GHOCrossChainLaunch_20240528_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_GHOCrossChainLaunch_20240528 internal proposal;
-
- IGhoToken internal GHO;
- UpgradeableBurnMintTokenPool internal TOKEN_POOL;
-
- address internal constant CCIP_ARB_ON_RAMP = 0xCe11020D56e5FDbfE46D9FC3021641FfbBB5AdEE;
- address internal constant CCIP_ARB_OFF_RAMP = 0x542ba1902044069330e8c5b36A84EC503863722f;
-
- event Minted(address indexed sender, address indexed recipient, uint256 amount);
- event Burned(address indexed sender, uint256 amount);
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Initialized(uint8 version);
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 220652440);
- proposal = new AaveV3Arbitrum_GHOCrossChainLaunch_20240528();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- vm.recordLogs();
-
- defaultTest(
- 'AaveV3Arbitrum_GHOCrossChainLaunch_20240528',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ghoAddress;
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- if (ghoAddress == address(0)) {
- // ghoAddress is the first one
- ghoAddress = entries[i].emitter;
- } else {
- // ccip is the second one
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- }
- GHO = IGhoToken(ghoAddress);
- TOKEN_POOL = UpgradeableBurnMintTokenPool(ccipAddress);
-
- _validateGhoDeployment();
- _validateCcipTokenPool();
- }
-
- /// @dev Test burn and mint actions, mocking CCIP calls
- function test_ccipTokenPool() public {
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(proposal));
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ghoAddress;
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- if (ghoAddress == address(0)) {
- // ghoAddress is the first one
- ghoAddress = entries[i].emitter;
- } else {
- // ccip is the second one
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- }
- GHO = IGhoToken(ghoAddress);
- TOKEN_POOL = UpgradeableBurnMintTokenPool(ccipAddress);
-
- // Mock calls
- address router = TOKEN_POOL.getRouter();
- address ramp = makeAddr('ramp');
- vm.mockCall(
- router,
- abi.encodeWithSelector(bytes4(keccak256('getOnRamp(uint64)'))),
- abi.encode(ramp)
- );
- vm.mockCall(
- router,
- abi.encodeWithSelector(bytes4(keccak256('isOffRamp(uint64,address)'))),
- abi.encode(true)
- );
-
- // Prank user
- address user = makeAddr('user');
-
- // Mint
- uint256 amount = 500_000e18; // 500K GHO
- uint64 ethChainSelector = Utils.CCIP_ETH_CHAIN_SELECTOR;
- assertEq(_getFacilitatorLevel(address(TOKEN_POOL)), 0);
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
-
- vm.expectEmit(true, true, true, true, address(GHO));
- emit Transfer(address(0), user, amount);
-
- vm.expectEmit(false, true, true, true, address(TOKEN_POOL));
- emit Minted(address(0), user, amount);
-
- TOKEN_POOL.releaseOrMint(bytes(''), user, amount, ethChainSelector, bytes(''));
- assertEq(_getFacilitatorLevel(address(TOKEN_POOL)), amount);
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- assertEq(GHO.balanceOf(user), amount);
-
- // Burn
- // mock router transfer of funds from user to token pool
- vm.prank(user);
- GHO.transfer(address(TOKEN_POOL), amount);
-
- vm.expectEmit(true, true, true, true, address(GHO));
- emit Transfer(address(TOKEN_POOL), address(0), amount);
-
- vm.expectEmit(false, true, false, true, address(TOKEN_POOL));
- emit Burned(address(0), amount);
-
- vm.prank(ramp);
- TOKEN_POOL.lockOrBurn(user, bytes(''), amount, ethChainSelector, bytes(''));
- assertEq(_getFacilitatorLevel(address(TOKEN_POOL)), 0);
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- }
-
- /// @dev CCIP e2e
- function test_ccipE2E() public {
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(proposal));
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ghoAddress;
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- if (ghoAddress == address(0)) {
- // ghoAddress is the first one
- ghoAddress = entries[i].emitter;
- } else {
- // ccip is the second one
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- }
- GHO = IGhoToken(ghoAddress);
- TOKEN_POOL = UpgradeableBurnMintTokenPool(ccipAddress);
-
- uint64 ethChainSelector = Utils.CCIP_ETH_CHAIN_SELECTOR;
-
- // Chainlink config
- Router router = Router(Utils.CCIP_ROUTER);
-
- {
- Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1);
- Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](1);
- // ETH -> ARB
- onRampUpdates[0] = Router.OnRamp({
- destChainSelector: ethChainSelector,
- onRamp: CCIP_ARB_ON_RAMP
- });
- // ARB -> ETH
- offRampUpdates[0] = Router.OffRamp({
- sourceChainSelector: ethChainSelector,
- offRamp: CCIP_ARB_OFF_RAMP
- });
- address routerOwner = router.owner();
- vm.startPrank(routerOwner);
- router.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates);
- }
-
- {
- // Add TokenPool to OnRamp
- address[] memory tokens = new address[](1);
- IPool[] memory pools = new IPool[](1);
- tokens[0] = address(GHO);
- pools[0] = IPool(address(TOKEN_POOL));
- address onRampOwner = EVM2EVMOnRamp(CCIP_ARB_ON_RAMP).owner();
- vm.startPrank(onRampOwner);
- EVM2EVMOnRamp(CCIP_ARB_ON_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
- }
-
- {
- // OnRamp Price Registry
- EVM2EVMOnRamp.DynamicConfig memory onRampDynamicConfig = EVM2EVMOnRamp(CCIP_ARB_ON_RAMP)
- .getDynamicConfig();
- Internal.PriceUpdates memory priceUpdate = _getSingleTokenPriceUpdateStruct(
- address(GHO),
- 1e18
- );
-
- PriceRegistry(onRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- // OffRamp Price Registry
- EVM2EVMOffRamp.DynamicConfig memory offRampDynamicConfig = EVM2EVMOffRamp(CCIP_ARB_OFF_RAMP)
- .getDynamicConfig();
- PriceRegistry(offRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- }
-
- // User executes ccipSend
- address user = makeAddr('user');
- uint256 amount = 500_000e18; // 500K GHO
- deal(user, 1e18); // 1 ETH
-
- // Mint tokens to user so can burn and bridge out
- vm.startPrank(address(TOKEN_POOL));
- GHO.mint(user, amount);
-
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- (uint256 capacity, uint256 level) = GHO.getFacilitatorBucket(address(TOKEN_POOL));
- assertEq(capacity, Utils.CCIP_BUCKET_CAPACITY);
- assertEq(level, amount);
-
- vm.startPrank(user);
- // Use address(0) to use native token as fee token
- _sendCcip(router, address(GHO), amount, address(0), ethChainSelector, user);
-
- assertEq(GHO.balanceOf(user), 0);
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- (capacity, level) = GHO.getFacilitatorBucket(address(TOKEN_POOL));
- assertEq(capacity, Utils.CCIP_BUCKET_CAPACITY);
- assertEq(level, 0);
- }
-
- // ---
- // Test Helpers
- // ---
-
- function _validateGhoDeployment() internal {
- assertEq(GHO.totalSupply(), 0);
- assertEq(GHO.getFacilitatorsList().length, 1);
- assertEq(_getProxyAdminAddress(address(GHO)), MiscArbitrum.PROXY_ADMIN);
- assertTrue(GHO.hasRole(bytes32(0), GovernanceV3Arbitrum.EXECUTOR_LVL_1));
- assertTrue(GHO.hasRole(GHO.FACILITATOR_MANAGER_ROLE(), GovernanceV3Arbitrum.EXECUTOR_LVL_1));
- assertTrue(GHO.hasRole(GHO.BUCKET_MANAGER_ROLE(), GovernanceV3Arbitrum.EXECUTOR_LVL_1));
- }
-
- function _validateCcipTokenPool() internal {
- // Deployment
- assertEq(_getProxyAdminAddress(address(TOKEN_POOL)), MiscArbitrum.PROXY_ADMIN);
- assertEq(TOKEN_POOL.owner(), GovernanceV3Arbitrum.EXECUTOR_LVL_1);
- assertEq(address(TOKEN_POOL.getToken()), address(GHO));
- assertEq(TOKEN_POOL.getArmProxy(), Utils.CCIP_ARM_PROXY);
- assertEq(TOKEN_POOL.getRouter(), Utils.CCIP_ROUTER);
-
- // Facilitator
- (uint256 capacity, uint256 level) = GHO.getFacilitatorBucket(address(TOKEN_POOL));
- assertEq(capacity, Utils.CCIP_BUCKET_CAPACITY);
- assertEq(level, 0);
-
- // Config
- uint64[] memory supportedChains = TOKEN_POOL.getSupportedChains();
- assertEq(supportedChains.length, 1);
- assertEq(supportedChains[0], Utils.CCIP_ETH_CHAIN_SELECTOR);
- RateLimiter.TokenBucket memory outboundRateLimit = TOKEN_POOL
- .getCurrentOutboundRateLimiterState(Utils.CCIP_ETH_CHAIN_SELECTOR);
- RateLimiter.TokenBucket memory inboundRateLimit = TOKEN_POOL.getCurrentInboundRateLimiterState(
- Utils.CCIP_ETH_CHAIN_SELECTOR
- );
- assertEq(outboundRateLimit.isEnabled, false);
- assertEq(inboundRateLimit.isEnabled, false);
- }
-
- // ---
- // Utils
- // --
-
- function _getProxyAdminAddress(address proxy) internal view returns (address) {
- bytes32 ERC1967_ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
- bytes32 adminSlot = vm.load(proxy, ERC1967_ADMIN_SLOT);
- return address(uint160(uint256(adminSlot)));
- }
-
- function _getFacilitatorLevel(address f) internal view returns (uint256) {
- (, uint256 level) = GHO.getFacilitatorBucket(f);
- return level;
- }
-
- function _sendCcip(
- Router router,
- address token,
- uint256 amount,
- address feeToken,
- uint64 destChainSelector,
- address receiver
- ) internal {
- Client.EVM2AnyMessage memory message = _generateSingleTokenMessage(
- receiver,
- token,
- amount,
- feeToken
- );
- uint256 expectedFee = router.getFee(destChainSelector, message);
-
- IERC20(token).approve(address(router), amount);
- router.ccipSend{value: expectedFee}(destChainSelector, message);
- }
-
- function _generateSingleTokenMessage(
- address receiver,
- address token,
- uint256 amount,
- address feeToken
- ) public pure returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
- tokenAmounts[0] = Client.EVMTokenAmount({token: token, amount: amount});
- return
- Client.EVM2AnyMessage({
- receiver: abi.encode(receiver),
- data: '',
- tokenAmounts: tokenAmounts,
- feeToken: feeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 200_000}))
- });
- }
-
- function _getTokensAndPools(
- address[] memory tokens,
- IPool[] memory pools
- ) internal pure returns (Internal.PoolUpdate[] memory) {
- Internal.PoolUpdate[] memory tokensAndPools = new Internal.PoolUpdate[](tokens.length);
- for (uint256 i = 0; i < tokens.length; ++i) {
- tokensAndPools[i] = Internal.PoolUpdate({token: tokens[i], pool: address(pools[i])});
- }
- return tokensAndPools;
- }
-
- function _getSingleTokenPriceUpdateStruct(
- address token,
- uint224 price
- ) internal pure returns (Internal.PriceUpdates memory) {
- Internal.TokenPriceUpdate[] memory tokenPriceUpdates = new Internal.TokenPriceUpdate[](1);
- tokenPriceUpdates[0] = Internal.TokenPriceUpdate({sourceToken: token, usdPerToken: price});
-
- Internal.PriceUpdates memory priceUpdates = Internal.PriceUpdates({
- tokenPriceUpdates: tokenPriceUpdates,
- gasPriceUpdates: new Internal.GasPriceUpdate[](0)
- });
-
- return priceUpdates;
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3E2E_GHOCrossChainLaunch_20240528.t.sol b/src/20240528_Multi_GHOCrossChainLaunch/AaveV3E2E_GHOCrossChainLaunch_20240528.t.sol
deleted file mode 100644
index 886ee7bd7..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3E2E_GHOCrossChainLaunch_20240528.t.sol
+++ /dev/null
@@ -1,481 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import 'forge-std/Test.sol';
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {RateLimiter} from 'ccip/v0.8/ccip/libraries/RateLimiter.sol';
-import {Internal} from 'ccip/v0.8/ccip/libraries/Internal.sol';
-import {Client} from 'ccip/v0.8/ccip/libraries/Client.sol';
-import {Router} from 'ccip/v0.8/ccip/Router.sol';
-import {PriceRegistry} from 'ccip/v0.8/ccip/PriceRegistry.sol';
-import {EVM2EVMOnRamp} from 'ccip/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol';
-import {EVM2EVMOffRamp} from 'ccip/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol';
-import {IPool} from 'ccip/v0.8/ccip/interfaces/pools/IPool.sol';
-
-import {UpgradeableLockReleaseTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableLockReleaseTokenPool.sol';
-import {UpgradeableBurnMintTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableBurnMintTokenPool.sol';
-
-import {IGhoToken} from 'gho-core/gho/interfaces/IGhoToken.sol';
-
-import {AaveV3Ethereum_GHOCrossChainLaunch_20240528} from './AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol';
-import {AaveV3Arbitrum_GHOCrossChainLaunch_20240528, Utils as ArbUtils} from './AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol';
-
-/**
- * @dev Test for AaveV3E2E_GHOCrossChainLaunch_20240528
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240528_Multi_GHOCrossChainLaunch/AaveV3E2E_GHOCrossChainLaunch_20240528.t.sol -vv
- */
-contract AaveV3E2E_GHOCrossChainLaunch_20240528_Test is ProtocolV3TestBase {
- using Internal for Internal.EVM2EVMMessage;
-
- AaveV3Ethereum_GHOCrossChainLaunch_20240528 internal ethProposal;
- AaveV3Arbitrum_GHOCrossChainLaunch_20240528 internal arbProposal;
-
- UpgradeableLockReleaseTokenPool internal ETH_TOKEN_POOL;
- UpgradeableBurnMintTokenPool internal ARB_TOKEN_POOL;
- IGhoToken internal ETH_GHO;
- IGhoToken internal ARB_GHO;
-
- Router internal ETH_ROUTER;
- Router internal ARB_ROUTER;
-
- uint64 internal ETH_ARB_CHAIN_SELECTOR;
- uint64 internal ARB_ETH_CHAIN_SELECTOR;
-
- address internal constant CCIP_ETH_ON_RAMP = 0x925228D7B82d883Dde340A55Fe8e6dA56244A22C;
- address internal constant CCIP_ETH_OFF_RAMP = 0xeFC4a18af59398FF23bfe7325F2401aD44286F4d;
- address internal constant CCIP_ARB_ON_RAMP = 0xCe11020D56e5FDbfE46D9FC3021641FfbBB5AdEE;
- address internal constant CCIP_ARB_OFF_RAMP = 0x542ba1902044069330e8c5b36A84EC503863722f;
-
- event Released(address indexed sender, address indexed recipient, uint256 amount);
- event Locked(address indexed sender, uint256 amount);
- event Minted(address indexed sender, address indexed recipient, uint256 amount);
- event Burned(address indexed sender, uint256 amount);
- event CCIPSendRequested(Internal.EVM2EVMMessage message);
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Initialized(uint8 version);
-
- uint256 internal ethereumFork;
- uint256 internal arbitrumFork;
-
- function setUp() public {
- ethereumFork = vm.createFork(vm.rpcUrl('mainnet'), 20067000);
- arbitrumFork = vm.createFork(vm.rpcUrl('arbitrum'), 220652440);
-
- // Proposal creation
- vm.selectFork(ethereumFork);
- ethProposal = new AaveV3Ethereum_GHOCrossChainLaunch_20240528();
- ETH_GHO = IGhoToken(MiscEthereum.GHO_TOKEN);
- ETH_ROUTER = Router(ethProposal.CCIP_ROUTER());
- ETH_ARB_CHAIN_SELECTOR = ethProposal.CCIP_ARB_CHAIN_SELECTOR();
-
- vm.selectFork(arbitrumFork);
- arbProposal = new AaveV3Arbitrum_GHOCrossChainLaunch_20240528();
- ARB_ROUTER = Router(ArbUtils.CCIP_ROUTER);
- ARB_ETH_CHAIN_SELECTOR = ArbUtils.CCIP_ETH_CHAIN_SELECTOR;
-
- // AIP execution
- vm.selectFork(ethereumFork);
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(ethProposal));
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- ETH_TOKEN_POOL = UpgradeableLockReleaseTokenPool(entries[i].emitter);
- break;
- }
- }
- }
-
- vm.selectFork(arbitrumFork);
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(arbProposal));
-
- // Fetch addresses
- entries = vm.getRecordedLogs();
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- if (address(ARB_GHO) == address(0)) {
- // ghoAddress is the first one
- ARB_GHO = IGhoToken(entries[i].emitter);
- } else {
- // ccip is the second one
- ARB_TOKEN_POOL = UpgradeableBurnMintTokenPool(entries[i].emitter);
- break;
- }
- }
- }
- }
-
- // Chainlink execution
- vm.selectFork(ethereumFork);
- {
- // OnRamp and OffRamp
- Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1);
- Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](1);
- // ARB -> ETH
- onRampUpdates[0] = Router.OnRamp({
- destChainSelector: ETH_ARB_CHAIN_SELECTOR,
- onRamp: CCIP_ETH_ON_RAMP
- });
- // ETH -> ARB
- offRampUpdates[0] = Router.OffRamp({
- sourceChainSelector: ETH_ARB_CHAIN_SELECTOR,
- offRamp: CCIP_ETH_OFF_RAMP
- });
- address routerOwner = ETH_ROUTER.owner();
- vm.startPrank(routerOwner);
- ETH_ROUTER.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates);
- }
-
- {
- // Add TokenPool to OnRamp
- address[] memory tokens = new address[](1);
- IPool[] memory pools = new IPool[](1);
- tokens[0] = address(ETH_GHO);
- pools[0] = IPool(address(ETH_TOKEN_POOL));
- address onRampOwner = EVM2EVMOnRamp(CCIP_ETH_ON_RAMP).owner();
- vm.startPrank(onRampOwner);
- EVM2EVMOnRamp(CCIP_ETH_ON_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
-
- // Match Arbitrum GHO token with Ethereum TokenPool
- tokens[0] = address(ARB_GHO);
- EVM2EVMOffRamp(CCIP_ETH_OFF_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
- }
-
- {
- // OnRamp Price Registry
- EVM2EVMOnRamp.DynamicConfig memory onRampDynamicConfig = EVM2EVMOnRamp(CCIP_ETH_ON_RAMP)
- .getDynamicConfig();
- Internal.PriceUpdates memory priceUpdate = _getSingleTokenPriceUpdateStruct(
- address(ETH_GHO),
- 1e18
- );
-
- PriceRegistry(onRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- // OffRamp Price Registry
- EVM2EVMOffRamp.DynamicConfig memory offRampDynamicConfig = EVM2EVMOffRamp(CCIP_ETH_OFF_RAMP)
- .getDynamicConfig();
- PriceRegistry(offRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- }
-
- vm.selectFork(arbitrumFork);
- {
- Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1);
- Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](1);
- // ETH -> ARB
- onRampUpdates[0] = Router.OnRamp({
- destChainSelector: ARB_ETH_CHAIN_SELECTOR,
- onRamp: CCIP_ARB_ON_RAMP
- });
- // ARB -> ETH
- offRampUpdates[0] = Router.OffRamp({
- sourceChainSelector: ARB_ETH_CHAIN_SELECTOR,
- offRamp: CCIP_ARB_OFF_RAMP
- });
- address routerOwner = ARB_ROUTER.owner();
- vm.startPrank(routerOwner);
- ARB_ROUTER.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates);
- }
-
- {
- // Add TokenPool to OnRamp
- address[] memory tokens = new address[](1);
- IPool[] memory pools = new IPool[](1);
- tokens[0] = address(ARB_GHO);
- pools[0] = IPool(address(ARB_TOKEN_POOL));
- address onRampOwner = EVM2EVMOnRamp(CCIP_ARB_ON_RAMP).owner();
- vm.startPrank(onRampOwner);
- EVM2EVMOnRamp(CCIP_ARB_ON_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
-
- // Match Ethereum GHO token with Arbitrum TokenPool
- tokens[0] = address(ETH_GHO);
- EVM2EVMOffRamp(CCIP_ARB_OFF_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
- }
-
- {
- // OnRamp Price Registry
- EVM2EVMOnRamp.DynamicConfig memory onRampDynamicConfig = EVM2EVMOnRamp(CCIP_ARB_ON_RAMP)
- .getDynamicConfig();
- Internal.PriceUpdates memory priceUpdate = _getSingleTokenPriceUpdateStruct(
- address(ARB_GHO),
- 1e18
- );
-
- PriceRegistry(onRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- // OffRamp Price Registry
- EVM2EVMOffRamp.DynamicConfig memory offRampDynamicConfig = EVM2EVMOffRamp(CCIP_ARB_OFF_RAMP)
- .getDynamicConfig();
- PriceRegistry(offRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- }
- }
-
- /// @dev Full E2E Test: transfer from Ethereum to Arbitrum and way back
- function test_ccipFullE22() public {
- // CCIP Transfer from Ethereum to Arbitrum
- // Ethereum execution (origin)
- vm.selectFork(ethereumFork);
- address user = makeAddr('user');
- uint256 amount = 500_000e18; // 500K ETH_GHO
- deal(user, 1e18); // 1 ETH
- deal(address(ETH_GHO), user, amount);
-
- assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), 0);
- assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.CCIP_BRIDGE_LIMIT());
- assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), 0);
-
- vm.startPrank(user);
- // Use address(0) to use native token as fee token
- Internal.EVM2EVMMessage memory message = _sendCcip(
- SendCcipParams({
- expectedSeqNum: 1,
- router: ETH_ROUTER,
- onRamp: CCIP_ETH_ON_RAMP,
- token: address(ETH_GHO),
- amount: amount,
- feeToken: address(0),
- sourceChainSelector: ARB_ETH_CHAIN_SELECTOR,
- destChainSelector: ETH_ARB_CHAIN_SELECTOR,
- sender: user,
- receiver: user
- })
- );
-
- assertEq(ETH_GHO.balanceOf(user), 0);
- assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), amount);
- assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.CCIP_BRIDGE_LIMIT());
- assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), amount);
-
- // Arbitrum execution (destination)
- vm.selectFork(arbitrumFork);
-
- assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0);
- (uint256 capacity, uint256 level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL));
- assertEq(capacity, ArbUtils.CCIP_BUCKET_CAPACITY);
- assertEq(level, 0);
-
- // Mock off ramp
- vm.startPrank(CCIP_ARB_OFF_RAMP);
- bytes[] memory emptyData = new bytes[](1);
- EVM2EVMOffRamp(CCIP_ARB_OFF_RAMP).executeSingleMessage(message, emptyData);
-
- assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0);
- (capacity, level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL));
- assertEq(capacity, ArbUtils.CCIP_BUCKET_CAPACITY);
- assertEq(level, amount);
-
- // CCIP Transfer from Arbitrum to Ethereum
- // Arbitrum execution (origin)
- vm.selectFork(arbitrumFork);
- deal(user, 1e18); // 1 ETH
-
- assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0);
- (capacity, level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL));
- assertEq(capacity, ArbUtils.CCIP_BUCKET_CAPACITY);
- assertEq(level, amount);
-
- vm.startPrank(user);
- // Use address(0) to use native token as fee token
- message = _sendCcip(
- SendCcipParams({
- expectedSeqNum: 1,
- router: ARB_ROUTER,
- onRamp: CCIP_ARB_ON_RAMP,
- token: address(ARB_GHO),
- amount: amount,
- feeToken: address(0),
- sourceChainSelector: ETH_ARB_CHAIN_SELECTOR,
- destChainSelector: ARB_ETH_CHAIN_SELECTOR,
- sender: user,
- receiver: user
- })
- );
-
- assertEq(ARB_GHO.balanceOf(user), 0);
- assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0);
- (capacity, level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL));
- assertEq(capacity, ArbUtils.CCIP_BUCKET_CAPACITY);
- assertEq(level, 0);
-
- // Ethereum execution (destination)
- vm.selectFork(ethereumFork);
-
- assertEq(ETH_GHO.balanceOf(user), 0);
- assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), amount);
- assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.CCIP_BRIDGE_LIMIT());
- assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), amount);
-
- // Mock off ramp
- vm.startPrank(CCIP_ETH_OFF_RAMP);
- EVM2EVMOffRamp(CCIP_ETH_OFF_RAMP).executeSingleMessage(message, emptyData);
-
- assertEq(ETH_GHO.balanceOf(user), amount);
- assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), 0);
- assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.CCIP_BRIDGE_LIMIT());
- assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), 0);
- }
-
- // ---
- // Utils
- // --
-
- struct SendCcipParams {
- uint64 expectedSeqNum;
- Router router;
- address onRamp;
- address token;
- uint256 amount;
- address feeToken;
- uint64 sourceChainSelector;
- uint64 destChainSelector;
- address sender;
- address receiver;
- }
-
- function _sendCcip(
- SendCcipParams memory params
- ) internal returns (Internal.EVM2EVMMessage memory) {
- Client.EVM2AnyMessage memory message = _generateSingleTokenMessage(
- params.receiver,
- params.token,
- params.amount,
- params.feeToken
- );
- uint256 expectedFee = params.router.getFee(params.destChainSelector, message);
-
- bytes32 metadataHash = keccak256(
- abi.encode(
- Internal.EVM_2_EVM_MESSAGE_HASH,
- params.sourceChainSelector,
- params.destChainSelector,
- params.onRamp
- )
- );
-
- Internal.EVM2EVMMessage memory geEvent = _messageToEvent(
- message,
- params.expectedSeqNum,
- params.expectedSeqNum,
- expectedFee,
- params.sender,
- params.sourceChainSelector,
- metadataHash
- );
-
- IERC20(params.token).approve(address(params.router), params.amount);
- params.router.ccipSend{value: expectedFee}(params.destChainSelector, message);
-
- return geEvent;
- }
-
- function _generateSingleTokenMessage(
- address receiver,
- address token,
- uint256 amount,
- address feeToken
- ) public pure returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
- tokenAmounts[0] = Client.EVMTokenAmount({token: token, amount: amount});
- return
- Client.EVM2AnyMessage({
- receiver: abi.encode(receiver),
- data: '',
- tokenAmounts: tokenAmounts,
- feeToken: feeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 200_000}))
- });
- }
-
- function _messageToEvent(
- Client.EVM2AnyMessage memory message,
- uint64 seqNum,
- uint64 nonce,
- uint256 feeTokenAmount,
- address originalSender,
- uint64 sourceChainSelector,
- bytes32 metadataHash
- ) public pure returns (Internal.EVM2EVMMessage memory) {
- // Slicing is only available for calldata. So we have to build a new bytes array.
- bytes memory args = new bytes(message.extraArgs.length - 4);
- for (uint256 i = 4; i < message.extraArgs.length; ++i) {
- args[i - 4] = message.extraArgs[i];
- }
- Client.EVMExtraArgsV1 memory extraArgs = abi.decode(args, (Client.EVMExtraArgsV1));
- Internal.EVM2EVMMessage memory messageEvent = Internal.EVM2EVMMessage({
- sequenceNumber: seqNum,
- feeTokenAmount: feeTokenAmount,
- sender: originalSender,
- nonce: nonce,
- gasLimit: extraArgs.gasLimit,
- strict: false,
- sourceChainSelector: sourceChainSelector,
- receiver: abi.decode(message.receiver, (address)),
- data: message.data,
- tokenAmounts: message.tokenAmounts,
- sourceTokenData: new bytes[](message.tokenAmounts.length),
- feeToken: message.feeToken,
- messageId: ''
- });
-
- messageEvent.messageId = Internal._hash(messageEvent, metadataHash);
- return messageEvent;
- }
-
- function _getTokensAndPools(
- address[] memory tokens,
- IPool[] memory pools
- ) internal pure returns (Internal.PoolUpdate[] memory) {
- Internal.PoolUpdate[] memory tokensAndPools = new Internal.PoolUpdate[](tokens.length);
- for (uint256 i = 0; i < tokens.length; ++i) {
- tokensAndPools[i] = Internal.PoolUpdate({token: tokens[i], pool: address(pools[i])});
- }
- return tokensAndPools;
- }
-
- function _getSingleTokenPriceUpdateStruct(
- address token,
- uint224 price
- ) internal pure returns (Internal.PriceUpdates memory) {
- Internal.TokenPriceUpdate[] memory tokenPriceUpdates = new Internal.TokenPriceUpdate[](1);
- tokenPriceUpdates[0] = Internal.TokenPriceUpdate({sourceToken: token, usdPerToken: price});
-
- Internal.PriceUpdates memory priceUpdates = Internal.PriceUpdates({
- tokenPriceUpdates: tokenPriceUpdates,
- gasPriceUpdates: new Internal.GasPriceUpdate[](0)
- });
-
- return priceUpdates;
- }
-
- function _getFacilitatorLevel(address f) internal view returns (uint256) {
- (, uint256 level) = ARB_GHO.getFacilitatorBucket(f);
- return level;
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol b/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol
deleted file mode 100644
index 9a5bf98ed..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {TransparentUpgradeableProxy} from 'solidity-utils/contracts/transparent-proxy/TransparentUpgradeableProxy.sol';
-import {UpgradeableLockReleaseTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableLockReleaseTokenPool.sol';
-import {UpgradeableTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableTokenPool.sol';
-import {RateLimiter} from 'ccip/v0.8/ccip/libraries/RateLimiter.sol';
-
-/**
- * @title GHO Cross-Chain Launch
- * @author Aave Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a
- * - Discussion: https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616
- * @dev This payload consists of the following set of actions:
- * 1. Deploy LockReleaseTokenPool
- * 2. Accept ownership of CCIP TokenPool
- * 3. Configure CCIP TokenPool
- */
-contract AaveV3Ethereum_GHOCrossChainLaunch_20240528 is IProposalGenericExecutor {
- address public constant CCIP_ARM_PROXY = 0x411dE17f12D1A34ecC7F45f49844626267c75e81;
- address public constant CCIP_ROUTER = 0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D;
- uint256 public constant CCIP_BRIDGE_LIMIT = 1_000_000e18; // 1M
- uint64 public constant CCIP_ARB_CHAIN_SELECTOR = 4949039107694359620;
-
- function execute() external {
- // 1. Deploy LockReleaseTokenPool
- address tokenPool = _deployCcipTokenPool();
-
- // 2. Accept TokenPool ownership
- UpgradeableLockReleaseTokenPool(tokenPool).acceptOwnership();
-
- // 3. Configure CCIP
- _configureCcipTokenPool(tokenPool);
- }
-
- function _deployCcipTokenPool() internal returns (address) {
- address imple = address(
- new UpgradeableLockReleaseTokenPool(MiscEthereum.GHO_TOKEN, CCIP_ARM_PROXY, false, true)
- );
-
- bytes memory tokenPoolInitParams = abi.encodeWithSignature(
- 'initialize(address,address[],address,uint256)',
- GovernanceV3Ethereum.EXECUTOR_LVL_1, // owner
- new address[](0), // allowList
- CCIP_ROUTER, // router
- CCIP_BRIDGE_LIMIT // bridgeLimit
- );
- return
- address(
- new TransparentUpgradeableProxy(imple, MiscEthereum.PROXY_ADMIN, tokenPoolInitParams)
- );
- }
-
- function _configureCcipTokenPool(address tokenPool) internal {
- UpgradeableTokenPool.ChainUpdate[] memory chainUpdates = new UpgradeableTokenPool.ChainUpdate[](
- 1
- );
- RateLimiter.Config memory rateConfig = RateLimiter.Config({
- isEnabled: false,
- capacity: 0,
- rate: 0
- });
- chainUpdates[0] = UpgradeableTokenPool.ChainUpdate({
- remoteChainSelector: CCIP_ARB_CHAIN_SELECTOR,
- allowed: true,
- outboundRateLimiterConfig: rateConfig,
- inboundRateLimiterConfig: rateConfig
- });
- UpgradeableLockReleaseTokenPool(tokenPool).applyChainUpdates(chainUpdates);
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.t.sol b/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.t.sol
deleted file mode 100644
index 4ada050e0..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.t.sol
+++ /dev/null
@@ -1,339 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import 'forge-std/Test.sol';
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {RateLimiter} from 'ccip/v0.8/ccip/libraries/RateLimiter.sol';
-import {Internal} from 'ccip/v0.8/ccip/libraries/Internal.sol';
-import {Client} from 'ccip/v0.8/ccip/libraries/Client.sol';
-import {Router} from 'ccip/v0.8/ccip/Router.sol';
-import {PriceRegistry} from 'ccip/v0.8/ccip/PriceRegistry.sol';
-import {EVM2EVMOnRamp} from 'ccip/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol';
-import {EVM2EVMOffRamp} from 'ccip/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol';
-import {IPool} from 'ccip/v0.8/ccip/interfaces/pools/IPool.sol';
-
-import {UpgradeableLockReleaseTokenPool} from 'ccip/v0.8/ccip/pools/GHO/UpgradeableLockReleaseTokenPool.sol';
-import {IGhoToken} from 'gho-core/gho/interfaces/IGhoToken.sol';
-
-import {AaveV3Ethereum_GHOCrossChainLaunch_20240528} from './AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_GHOCrossChainLaunch_20240528
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.t.sol -vv
- */
-contract AaveV3Ethereum_GHOCrossChainLaunch_20240528_Test is ProtocolV3TestBase {
- using Internal for Internal.EVM2EVMMessage;
-
- AaveV3Ethereum_GHOCrossChainLaunch_20240528 internal proposal;
-
- UpgradeableLockReleaseTokenPool internal TOKEN_POOL;
- IGhoToken internal GHO;
-
- address internal constant CCIP_ETH_ON_RAMP = 0x925228D7B82d883Dde340A55Fe8e6dA56244A22C;
- address internal constant CCIP_ETH_OFF_RAMP = 0xeFC4a18af59398FF23bfe7325F2401aD44286F4d;
-
- event Released(address indexed sender, address indexed recipient, uint256 amount);
- event Locked(address indexed sender, uint256 amount);
- event CCIPSendRequested(Internal.EVM2EVMMessage message);
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Initialized(uint8 version);
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20067000);
- proposal = new AaveV3Ethereum_GHOCrossChainLaunch_20240528();
- GHO = IGhoToken(MiscEthereum.GHO_TOKEN);
- }
-
- /// @dev General test of the proposal
- function test_defaultProposalExecution() public {
- vm.recordLogs();
-
- defaultTest(
- 'AaveV3Ethereum_GHOCrossChainLaunch_20240528',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- TOKEN_POOL = UpgradeableLockReleaseTokenPool(ccipAddress);
-
- _validateCcipTokenPool();
- }
-
- /// @dev Test lock and release actions, mocking CCIP calls
- function test_ccipTokenPool() public {
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(proposal));
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- TOKEN_POOL = UpgradeableLockReleaseTokenPool(ccipAddress);
-
- // Mock calls
- address router = TOKEN_POOL.getRouter();
- address ramp = makeAddr('ramp');
- vm.mockCall(
- router,
- abi.encodeWithSelector(bytes4(keccak256('getOnRamp(uint64)'))),
- abi.encode(ramp)
- );
- vm.mockCall(
- router,
- abi.encodeWithSelector(bytes4(keccak256('isOffRamp(uint64,address)'))),
- abi.encode(true)
- );
-
- // Prank user
- address user = makeAddr('user');
-
- // Lock
- uint256 amount = 500_000e18; // 500K GHO
- deal(address(GHO), user, amount);
- uint64 arbChainSelector = proposal.CCIP_ARB_CHAIN_SELECTOR();
-
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
-
- // mock router transfer of funds from user to token pool
- vm.prank(user);
- GHO.transfer(address(TOKEN_POOL), amount);
-
- vm.expectEmit(false, true, false, true, address(TOKEN_POOL));
- emit Locked(address(0), amount);
-
- vm.prank(ramp);
- TOKEN_POOL.lockOrBurn(user, bytes(''), amount, arbChainSelector, bytes(''));
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), amount);
- assertEq(GHO.balanceOf(user), 0);
-
- // Release
- vm.expectEmit(true, true, true, true, address(GHO));
- emit Transfer(address(TOKEN_POOL), user, amount);
-
- vm.expectEmit(false, true, true, true, address(TOKEN_POOL));
- emit Released(address(0), user, amount);
-
- TOKEN_POOL.releaseOrMint(bytes(''), user, amount, arbChainSelector, bytes(''));
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- assertEq(GHO.balanceOf(user), amount);
- }
-
- /// @dev CCIP e2e
- function test_ccipE2E() public {
- vm.recordLogs();
-
- GovV3Helpers.executePayload(vm, address(proposal));
-
- // Fetch addresses
- Vm.Log[] memory entries = vm.getRecordedLogs();
- address ccipAddress;
- for (uint256 i = 0; i < entries.length; i++) {
- if (entries[i].topics[0] == Initialized.selector) {
- uint8 version = abi.decode(entries[i].data, (uint8));
- if (version == 1) {
- ccipAddress = entries[i].emitter;
- break;
- }
- }
- }
- TOKEN_POOL = UpgradeableLockReleaseTokenPool(ccipAddress);
-
- uint64 arbChainSelector = proposal.CCIP_ARB_CHAIN_SELECTOR();
-
- // Chainlink config
- Router router = Router(proposal.CCIP_ROUTER());
-
- {
- // OnRamp and OffRamp
- Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1);
- Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](1);
- // ARB -> ETH
- onRampUpdates[0] = Router.OnRamp({
- destChainSelector: arbChainSelector,
- onRamp: CCIP_ETH_ON_RAMP
- });
- // ETH -> ARB
- offRampUpdates[0] = Router.OffRamp({
- sourceChainSelector: arbChainSelector,
- offRamp: CCIP_ETH_OFF_RAMP
- });
- address routerOwner = router.owner();
- vm.startPrank(routerOwner);
- router.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates);
- }
-
- {
- // Add TokenPool to OnRamp
- address[] memory tokens = new address[](1);
- IPool[] memory pools = new IPool[](1);
- tokens[0] = address(GHO);
- pools[0] = IPool(address(TOKEN_POOL));
- address onRampOwner = EVM2EVMOnRamp(CCIP_ETH_ON_RAMP).owner();
- vm.startPrank(onRampOwner);
- EVM2EVMOnRamp(CCIP_ETH_ON_RAMP).applyPoolUpdates(
- new Internal.PoolUpdate[](0),
- _getTokensAndPools(tokens, pools)
- );
- }
-
- {
- // OnRamp Price Registry
- EVM2EVMOnRamp.DynamicConfig memory onRampDynamicConfig = EVM2EVMOnRamp(CCIP_ETH_ON_RAMP)
- .getDynamicConfig();
- Internal.PriceUpdates memory priceUpdate = _getSingleTokenPriceUpdateStruct(
- address(GHO),
- 1e18
- );
-
- PriceRegistry(onRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- // OffRamp Price Registry
- EVM2EVMOffRamp.DynamicConfig memory offRampDynamicConfig = EVM2EVMOffRamp(CCIP_ETH_OFF_RAMP)
- .getDynamicConfig();
- PriceRegistry(offRampDynamicConfig.priceRegistry).updatePrices(priceUpdate);
- }
-
- // User executes ccipSend
- address user = makeAddr('user');
- uint256 amount = 500_000e18; // 500K GHO
- deal(user, 1e18); // 1 ETH
- deal(address(GHO), user, amount);
-
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), 0);
- assertEq(TOKEN_POOL.getBridgeLimit(), proposal.CCIP_BRIDGE_LIMIT());
- assertEq(TOKEN_POOL.getCurrentBridgedAmount(), 0);
-
- vm.startPrank(user);
- // Use address(0) to use native token as fee token
- _sendCcip(router, address(GHO), amount, address(0), arbChainSelector, user);
-
- assertEq(GHO.balanceOf(user), 0);
- assertEq(GHO.balanceOf(address(TOKEN_POOL)), amount);
- assertEq(TOKEN_POOL.getBridgeLimit(), proposal.CCIP_BRIDGE_LIMIT());
- assertEq(TOKEN_POOL.getCurrentBridgedAmount(), amount);
- }
-
- // ---
- // Test Helpers
- // ---
-
- function _validateCcipTokenPool() internal {
- // Deployment
- assertEq(_getProxyAdminAddress(address(TOKEN_POOL)), MiscEthereum.PROXY_ADMIN);
- assertEq(address(TOKEN_POOL.getToken()), address(GHO));
- assertEq(TOKEN_POOL.owner(), GovernanceV3Ethereum.EXECUTOR_LVL_1);
- assertEq(TOKEN_POOL.getArmProxy(), proposal.CCIP_ARM_PROXY());
- assertEq(TOKEN_POOL.getRouter(), proposal.CCIP_ROUTER());
-
- // Config
- uint64[] memory supportedChains = TOKEN_POOL.getSupportedChains();
- assertEq(supportedChains.length, 1);
- assertEq(supportedChains[0], proposal.CCIP_ARB_CHAIN_SELECTOR());
- RateLimiter.TokenBucket memory outboundRateLimit = TOKEN_POOL
- .getCurrentOutboundRateLimiterState(proposal.CCIP_ARB_CHAIN_SELECTOR());
- RateLimiter.TokenBucket memory inboundRateLimit = TOKEN_POOL.getCurrentInboundRateLimiterState(
- proposal.CCIP_ARB_CHAIN_SELECTOR()
- );
- assertEq(outboundRateLimit.isEnabled, false);
- assertEq(inboundRateLimit.isEnabled, false);
- }
-
- // ---
- // Utils
- // --
-
- function _getProxyAdminAddress(address proxy) internal view returns (address) {
- bytes32 ERC1967_ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
- bytes32 adminSlot = vm.load(proxy, ERC1967_ADMIN_SLOT);
- return address(uint160(uint256(adminSlot)));
- }
-
- function _sendCcip(
- Router router,
- address token,
- uint256 amount,
- address feeToken,
- uint64 destChainSelector,
- address receiver
- ) internal {
- Client.EVM2AnyMessage memory message = _generateSingleTokenMessage(
- receiver,
- token,
- amount,
- feeToken
- );
- uint256 expectedFee = router.getFee(destChainSelector, message);
-
- IERC20(token).approve(address(router), amount);
- router.ccipSend{value: expectedFee}(destChainSelector, message);
- }
-
- function _generateSingleTokenMessage(
- address receiver,
- address token,
- uint256 amount,
- address feeToken
- ) public pure returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
- tokenAmounts[0] = Client.EVMTokenAmount({token: token, amount: amount});
- return
- Client.EVM2AnyMessage({
- receiver: abi.encode(receiver),
- data: '',
- tokenAmounts: tokenAmounts,
- feeToken: feeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 200_000}))
- });
- }
-
- function _getTokensAndPools(
- address[] memory tokens,
- IPool[] memory pools
- ) internal pure returns (Internal.PoolUpdate[] memory) {
- Internal.PoolUpdate[] memory tokensAndPools = new Internal.PoolUpdate[](tokens.length);
- for (uint256 i = 0; i < tokens.length; ++i) {
- tokensAndPools[i] = Internal.PoolUpdate({token: tokens[i], pool: address(pools[i])});
- }
- return tokensAndPools;
- }
-
- function _getSingleTokenPriceUpdateStruct(
- address token,
- uint224 price
- ) internal pure returns (Internal.PriceUpdates memory) {
- Internal.TokenPriceUpdate[] memory tokenPriceUpdates = new Internal.TokenPriceUpdate[](1);
- tokenPriceUpdates[0] = Internal.TokenPriceUpdate({sourceToken: token, usdPerToken: price});
-
- Internal.PriceUpdates memory priceUpdates = Internal.PriceUpdates({
- tokenPriceUpdates: tokenPriceUpdates,
- gasPriceUpdates: new Internal.GasPriceUpdate[](0)
- });
-
- return priceUpdates;
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch.md b/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch.md
deleted file mode 100644
index 6527611ec..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: "GHO Cross-Chain - Part 1"
-author: "Aave Labs"
-discussions: "https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a"
----
-
-## Simple Summary
-
-This AIP proposes the cross-chain implementation for the GHO stablecoin, the native asset of the Aave Protocol, beginning with the initial expansion to the Arbitrum network utilizing the Chainlink Cross-Chain Interoperability Protocol (CCIP).
-
-The smart contracts have been refined through multiple stages of design, development, testing, and implementation. For security validations, collaborations with DAO service providers Certora and BGD Labs were established to conduct code reviews.
-
-Following extensive community discussion, this AIP proposes the deployment of cross-chain GHO. This proposal was split into two separate AIPs, whereby, subject to approval of this proposal by the DAO, there will be a second AIP (“Part 2”) for configuration of GHO on Arbitrum Aave Pool adopting risk parameters formulated by Chaos Labs.
-
-## Motivation
-
-Transitioning to a cross-chain model beyond Ethereum Mainnet enhances GHO's accessibility and the overall user experience with faster transactions and reduced costs. This shift also presents new opportunities within the ecosystem of each network, allowing access to a wide array of integrations with other protocols and tools, enriching GHO's utility potential.
-
-## Specification
-
-This AIP addresses the implementation of the GHO cross-chain strategy. The following smart contracts have been developed:
-
-- Upgradable GHO Token: This contract version allows the DAO to adjust the logic of the token.
-- Modified CCIP Contracts: Tailored versions of the Chainlink Cross-Chain Interoperability Protocol (CCIP) contracts, designed to support the GHO cross-chain implementation.
-
-All smart contracts, including the code for this AIP, have been reviewed by BGD Labs for alignment with the Aave Protocol and by Certora for security aspects, including both manual and formal verification.
-
-Proposed implementation actions are the following:
-
-Ethereum:
-
-- Deployment of CCIP LockReleaseTokenPool Contract: GHO reserve contract backs up liquidity across different chains. A "bridge limit" control enables the DAO to regulate the outflow of GHO liquidity to other networks. The limit is set at the minimum bucket capacity of the bridges across networks to ensure proper validation of GHO transfers on the source chain to facilitate transfers between chains.
-- Transfer of ownership of the CCIP LockReleaseTokenPool contract to the DAO: The DAO controls and owns the contract logic and configuration parameters, including the outbound/inbound rate limit and the bridge limit.
-- Configuration of CCIP LockReleaseTokenPool contract: token pool rate limit will be disabled.
-
-Arbitrum:
-
-- Deployment of UpgradeableGHO: The contract is configured to be deployed by the DAO upon passing of this AIP.
-- Deployment of CCIP BurnMintTokenPool contract: The contract handles the minting and burning processes, based on the liquidity backed from Ethereum.
-- Transfer of ownership of the CCIP BurnMintTokenPool contract to the DAO: The DAO will take control of the contract logic and configuration of outbound/inbound rate limit.
-- Configuration of CCIP BurnMintTokenPool contract: token pool rate limit will be disabled.
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0d12ee0493cab656f3928f9821880b66c3c553f/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0d12ee0493cab656f3928f9821880b66c3c553f/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0d12ee0493cab656f3928f9821880b66c3c553f/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Ethereum_GHOCrossChainLaunch_20240528.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/e0d12ee0493cab656f3928f9821880b66c3c553f/src/20240528_Multi_GHOCrossChainLaunch/AaveV3Arbitrum_GHOCrossChainLaunch_20240528.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a)
-- [Discussion](https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol b/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol
deleted file mode 100644
index 5abaab012..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol
+++ /dev/null
@@ -1,87 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_GHOCrossChainLaunch_20240528} from './AaveV3Ethereum_GHOCrossChainLaunch_20240528.sol';
-import {AaveV3Arbitrum_GHOCrossChainLaunch_20240528} from './AaveV3Arbitrum_GHOCrossChainLaunch_20240528.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/GHOCrossChainLaunch_20240528.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_GHOCrossChainLaunch_20240528).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/GHOCrossChainLaunch_20240528.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_GHOCrossChainLaunch_20240528).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch_20240528.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_GHOCrossChainLaunch_20240528).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_GHOCrossChainLaunch_20240528).creationCode
- );
- payloads[1] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(vm, 'src/20240528_Multi_GHOCrossChainLaunch/GHOCrossChainLaunch.md')
- );
- }
-}
diff --git a/src/20240528_Multi_GHOCrossChainLaunch/config.ts b/src/20240528_Multi_GHOCrossChainLaunch/config.ts
deleted file mode 100644
index c8de36b18..000000000
--- a/src/20240528_Multi_GHOCrossChainLaunch/config.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum', 'AaveV3Arbitrum'],
- title: 'GHO Cross-Chain Launch',
- shortName: 'GHOCrossChainLaunch',
- date: '20240528',
- author: 'Aave Labs',
- discussion: 'https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {configs: {}, cache: {blockNumber: 19967293}},
- AaveV3Arbitrum: {
- configs: {},
- cache: {blockNumber: 215853041},
- },
- },
-};
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
deleted file mode 100644
index 9a2cf3d95..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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';
-/**
- * @title Chaos Labs Risk Parameter Updates AaveV3
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788
- */
-contract AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadArbitrum {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3ArbitrumAssets.ARB_UNDERLYING,
- ltv: 58_00,
- liqThreshold: 63_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
deleted file mode 100644
index 7222ce16a..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv
- */
-contract AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 216612699);
- proposal = new AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
deleted file mode 100644
index 0aa1323f6..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol';
-import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol';
-import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';
-import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol';
-/**
- * @title Chaos Labs Risk Parameter Updates AaveV3
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788
- */
-contract AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadGnosis {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3GnosisAssets.GNO_UNDERLYING,
- ltv: 48_00,
- liqThreshold: 53_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
deleted file mode 100644
index 4aad6ce40..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-
-/**
- * @dev Test for AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530
- * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv
- */
-contract AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase {
- AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('gnosis'), 34209835);
- proposal = new AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530',
- AaveV3Gnosis.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
deleted file mode 100644
index b2ee22ce6..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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';
-/**
- * @title Chaos Labs Risk Parameter Updates AaveV3
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788
- */
-contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadOptimism {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3OptimismAssets.OP_UNDERLYING,
- ltv: 58_00,
- liqThreshold: 63_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
deleted file mode 100644
index ba2d00110..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-
-/**
- * @dev Test for AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530
- * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv
- */
-contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase {
- AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 120739105);
- proposal = new AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530',
- AaveV3Optimism.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
deleted file mode 100644
index 52d1c62b1..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// 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';
-/**
- * @title Chaos Labs Risk Parameter Updates AaveV3
- * @author Chaos Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9
- * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788
- */
-contract AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadPolygon {
- function collateralsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.CollateralUpdate[] memory)
- {
- IAaveV3ConfigEngine.CollateralUpdate[]
- memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](2);
-
- collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3PolygonAssets.stMATIC_UNDERLYING,
- ltv: 48_00,
- liqThreshold: 58_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
- collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
- asset: AaveV3PolygonAssets.MaticX_UNDERLYING,
- ltv: 50_00,
- liqThreshold: 60_00,
- liqBonus: EngineFlags.KEEP_CURRENT,
- debtCeiling: EngineFlags.KEEP_CURRENT,
- liqProtocolFee: EngineFlags.KEEP_CURRENT
- });
-
- return collateralUpdate;
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
deleted file mode 100644
index b2252d6d7..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-
-/**
- * @dev Test for AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530
- * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv
- */
-contract AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase {
- AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 57568503);
- proposal = new AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530',
- AaveV3Polygon.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md
deleted file mode 100644
index c6252b5df..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: "Chaos Labs Risk Parameter Updates AaveV3"
-author: "Chaos Labs"
-discussions: "https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9"
----
-
-## Simple Summary
-
-A proposal to adjust ten (10) total risk parameters, including Loan-to-Value and Liquidation Threshold, across five (5) Aave V3 assets.
-
-## Motivation
-
-Increasing the liquidation threshold and LTV for assets allows Aave to enhance users’ capital efficiency. However, this must be balanced with proper risk management to ensure that there is a sufficient buffer in the event of large drawdowns and/or liquidations. The analyses below were conducted utilizing our LT simulations, which showed either minimal or no increases in VaR at the recommended LT levels, while also considering user distribution and on-chain liquidity.
-
-## Specification
-
-### Gnosis
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT |
-| ----- | ----------- | --------------- | ---------- | -------------- |
-| GNO | 45% | 48% | 50% | 53% |
-
-### Optimism
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT |
-| ----- | ----------- | --------------- | ---------- | -------------- |
-| OP | 50% | 58% | 60% | 63% |
-
-### Arbitrum
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT |
-| ----- | ----------- | --------------- | ---------- | -------------- |
-| ARB | 50% | 58% | 60% | 63% |
-
-### Polygon
-
-| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT |
-| ------- | ----------- | --------------- | ---------- | -------------- |
-| stMATIC | 45% | 48% | 56% | 58% |
-| MaticX | 45% | 50% | 58% | 60% |
-
-## References
-
-- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol)
-- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9)
-- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts
deleted file mode 100644
index dcde9835d..000000000
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Polygon', 'AaveV3Optimism', 'AaveV3Arbitrum', 'AaveV3Gnosis'],
- title: 'Chaos Labs Risk Parameter Updates AaveV3',
- shortName: 'ChaosLabsRiskParameterUpdatesAaveV3',
- date: '20240530',
- author: 'Chaos Labs',
- discussion:
- 'https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Polygon: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'stMATIC',
- ltv: '48',
- liqThreshold: '58',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- {
- asset: 'MaticX',
- ltv: '50',
- liqThreshold: '60',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 57568503},
- },
- AaveV3Optimism: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'OP',
- ltv: '58',
- liqThreshold: '63',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 120739105},
- },
- AaveV3Arbitrum: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'ARB',
- ltv: '58',
- liqThreshold: '63',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 216612699},
- },
- AaveV3Gnosis: {
- configs: {
- COLLATERALS_UPDATE: [
- {
- asset: 'GNO',
- ltv: '48',
- liqThreshold: '53',
- liqBonus: '',
- debtCeiling: '',
- liqProtocolFee: '',
- },
- ],
- },
- cache: {blockNumber: 34209835},
- },
- },
-};
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.sol
deleted file mode 100644
index f51e8b678..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.sol
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {IGhoStewardV2} from './interfaces/IGhoStewardV2.sol';
-import {IGhoToken} from './interfaces/IGho.sol';
-import {IGsm} from './interfaces/IGSM.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-
-/**
- * @title Gho Steward Update
- * @author ACI
- * - Discussion: https://governance.aave.com/t/arfc-gho-stewards/16466/11
- */
-contract AaveV3Ethereum_GhoStewardUpdate_20240602 is IProposalGenericExecutor {
- address public constant OLD_GHO_STEWARD = 0x8F2411a538381aae2b464499005F0211e867d84f;
- address public constant GHO_STEWARD = 0xb9481a29f0f996BCAc759aB201FB3844c81866c4;
-
- function execute() external {
- // Remove Pool admin role to the old steward
- AaveV3Ethereum.ACL_MANAGER.removePoolAdmin(OLD_GHO_STEWARD);
-
- // Revoke old steward's bucket manager role
-
- IGhoToken(MiscEthereum.GHO_TOKEN).revokeRole(
- IGhoToken(MiscEthereum.GHO_TOKEN).BUCKET_MANAGER_ROLE(),
- OLD_GHO_STEWARD
- );
-
- // Revoke old steward's configurator role on usdc, usdt gsm
-
- IGsm(MiscEthereum.GSM_USDC).revokeRole(
- IGsm(MiscEthereum.GSM_USDC).CONFIGURATOR_ROLE(),
- OLD_GHO_STEWARD
- );
-
- IGsm(MiscEthereum.GSM_USDT).revokeRole(
- IGsm(MiscEthereum.GSM_USDT).CONFIGURATOR_ROLE(),
- OLD_GHO_STEWARD
- );
-
- // Give Risk admin role to the steward
- AaveV3Ethereum.ACL_MANAGER.addRiskAdmin(GHO_STEWARD);
-
- // Give bucket manager role to the steward
- IGhoToken(MiscEthereum.GHO_TOKEN).grantRole(
- IGhoToken(MiscEthereum.GHO_TOKEN).BUCKET_MANAGER_ROLE(),
- GHO_STEWARD
- );
-
- // Give configurator role on usdc, usdt gsm to the stewards
- IGsm(MiscEthereum.GSM_USDC).grantRole(
- IGsm(MiscEthereum.GSM_USDC).CONFIGURATOR_ROLE(),
- GHO_STEWARD
- );
- IGsm(MiscEthereum.GSM_USDT).grantRole(
- IGsm(MiscEthereum.GSM_USDT).CONFIGURATOR_ROLE(),
- GHO_STEWARD
- );
-
- // Whitelist all the facilitators on the stewards, including: GhoAToken, GhoFlashMinter, GSM USDC, GSM USDT
- IGhoStewardV2(GHO_STEWARD).setControlledFacilitator(
- IGhoToken(MiscEthereum.GHO_TOKEN).getFacilitatorsList(),
- true
- );
- }
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.t.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.t.sol
deleted file mode 100644
index 58846f282..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.t.sol
+++ /dev/null
@@ -1,287 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IGhoStewardV2} from './interfaces/IGhoStewardV2.sol';
-import {IGhoToken} from './interfaces/IGho.sol';
-import {IGsmFeeStrategy} from './interfaces/IGsmFeeStrategy.sol';
-import {IGsm} from './interfaces/IGSM.sol';
-import {IDefaultInterestRateStrategy} from 'aave-v3-core/contracts/interfaces/IDefaultInterestRateStrategy.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_GhoStewardUpdate_20240602} from './AaveV3Ethereum_GhoStewardUpdate_20240602.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_GhoStewardUpdate_20240602
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.t.sol
- -vv
- */
-contract AaveV3Ethereum_GhoStewardUpdate_20240602_Test is ProtocolV3TestBase {
- AaveV3Ethereum_GhoStewardUpdate_20240602 internal proposal;
- address public RISK_COUNCIL;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20017052);
- proposal = new AaveV3Ethereum_GhoStewardUpdate_20240602();
- RISK_COUNCIL = IGhoStewardV2(proposal.GHO_STEWARD()).RISK_COUNCIL();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest('AaveV3Ethereum_GhoStewardUpdate_20240602', AaveV3Ethereum.POOL, address(proposal));
- }
-
- function test_adminPermissions() public {
- executePayload(vm, address(proposal));
-
- // Check that the old steward has been removed from roles
-
- assertFalse(AaveV3Ethereum.ACL_MANAGER.isPoolAdmin(proposal.OLD_GHO_STEWARD()));
-
- assertFalse(
- IGhoToken(MiscEthereum.GHO_TOKEN).hasRole(
- IGhoToken(MiscEthereum.GHO_TOKEN).BUCKET_MANAGER_ROLE(),
- proposal.OLD_GHO_STEWARD()
- )
- );
-
- assertFalse(
- IGsm(MiscEthereum.GSM_USDT).hasRole(
- IGsm(MiscEthereum.GSM_USDT).CONFIGURATOR_ROLE(),
- proposal.OLD_GHO_STEWARD()
- )
- );
-
- assertFalse(
- IGsm(MiscEthereum.GSM_USDC).hasRole(
- IGsm(MiscEthereum.GSM_USDC).CONFIGURATOR_ROLE(),
- proposal.OLD_GHO_STEWARD()
- )
- );
-
- assertTrue(AaveV3Ethereum.ACL_MANAGER.isRiskAdmin(proposal.GHO_STEWARD()));
- assertTrue(
- IGhoToken(MiscEthereum.GHO_TOKEN).hasRole(
- IGhoToken(MiscEthereum.GHO_TOKEN).BUCKET_MANAGER_ROLE(),
- proposal.GHO_STEWARD()
- )
- );
- assertTrue(
- IGsm(MiscEthereum.GSM_USDT).hasRole(
- IGsm(MiscEthereum.GSM_USDT).CONFIGURATOR_ROLE(),
- proposal.GHO_STEWARD()
- )
- );
- assertTrue(
- IGsm(MiscEthereum.GSM_USDC).hasRole(
- IGsm(MiscEthereum.GSM_USDC).CONFIGURATOR_ROLE(),
- proposal.GHO_STEWARD()
- )
- );
-
- address[] memory controlledFacilitatorsList = IGhoStewardV2(proposal.GHO_STEWARD())
- .getControlledFacilitators();
- address[] memory ghoFacilitatorList = IGhoToken(MiscEthereum.GHO_TOKEN).getFacilitatorsList();
- assertEq(controlledFacilitatorsList.length, ghoFacilitatorList.length);
-
- for (uint256 i = 0; i < controlledFacilitatorsList.length; i++) {
- assertEq(controlledFacilitatorsList[i], ghoFacilitatorList[i]);
- }
- }
-
- function testUpdateGhoBorrowRate() public {
- executePayload(vm, address(proposal));
-
- uint256 oldBorrowRate = _getGhoBorrowRate();
- uint256 newBorrowRate = oldBorrowRate + 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGhoBorrowRate(newBorrowRate);
- vm.stopPrank();
-
- uint256 currentBorrowRate = _getGhoBorrowRate();
- assertEq(currentBorrowRate, newBorrowRate);
- }
-
- function testLowerGhoBorrowRate() public {
- executePayload(vm, address(proposal));
-
- uint256 oldBorrowRate = _getGhoBorrowRate();
- uint256 newBorrowRate = oldBorrowRate - 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGhoBorrowRate(newBorrowRate);
- vm.stopPrank();
-
- uint256 currentBorrowRate = _getGhoBorrowRate();
- assertEq(currentBorrowRate, newBorrowRate);
- }
-
- function testUpdateGhoBorrowCap() public {
- executePayload(vm, address(proposal));
-
- (uint256 oldBorrowCap, ) = AaveV3Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps(
- MiscEthereum.GHO_TOKEN
- );
- uint256 newBorrowCap = oldBorrowCap + 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGhoBorrowCap(newBorrowCap);
- vm.stopPrank();
-
- (uint256 updatedBorrowCap, ) = AaveV3Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps(
- MiscEthereum.GHO_TOKEN
- );
- assertEq(newBorrowCap, updatedBorrowCap);
- }
-
- function testLowerGhoBorrowCap() public {
- executePayload(vm, address(proposal));
-
- (uint256 oldBorrowCap, ) = AaveV3Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps(
- MiscEthereum.GHO_TOKEN
- );
- uint256 newBorrowCap = oldBorrowCap - 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGhoBorrowCap(newBorrowCap);
- vm.stopPrank();
-
- (uint256 updatedBorrowCap, ) = AaveV3Ethereum.AAVE_PROTOCOL_DATA_PROVIDER.getReserveCaps(
- MiscEthereum.GHO_TOKEN
- );
- assertEq(newBorrowCap, updatedBorrowCap);
- }
-
- function testUpdateFacilitatorBucketCapacity() public {
- executePayload(vm, address(proposal));
- address[] memory ghoFacilitatorList = IGhoToken(MiscEthereum.GHO_TOKEN).getFacilitatorsList();
-
- for (uint256 i = 0; i < ghoFacilitatorList.length; i++) {
- address ghoFacilitator = ghoFacilitatorList[i];
- (uint256 currentBucketCapacity, ) = IGhoToken(MiscEthereum.GHO_TOKEN).getFacilitatorBucket(
- ghoFacilitator
- );
- uint128 newBucketCapacity = uint128(currentBucketCapacity) + 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateFacilitatorBucketCapacity(
- ghoFacilitator,
- newBucketCapacity
- );
- vm.stopPrank();
-
- (uint256 updatedCapacity, ) = IGhoToken(MiscEthereum.GHO_TOKEN).getFacilitatorBucket(
- ghoFacilitator
- );
- assertEq(newBucketCapacity, updatedCapacity);
- }
- }
-
- function testUpdateGsmExposureCap() public {
- executePayload(vm, address(proposal));
-
- address[2] memory gsmList;
- gsmList[0] = MiscEthereum.GSM_USDC;
- gsmList[1] = MiscEthereum.GSM_USDT;
-
- for (uint256 i = 0; i < gsmList.length; i++) {
- address gsm = gsmList[i];
-
- uint128 oldExposureCap = IGsm(gsm).getExposureCap();
- uint128 newExposureCap = oldExposureCap + 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGsmExposureCap(gsm, newExposureCap);
- vm.stopPrank();
-
- uint128 currentExposureCap = IGsm(gsm).getExposureCap();
- assertEq(currentExposureCap, newExposureCap);
- }
- }
-
- function testLowerGsmExposureCap() public {
- executePayload(vm, address(proposal));
-
- address[2] memory gsmList;
- gsmList[0] = MiscEthereum.GSM_USDC;
- gsmList[1] = MiscEthereum.GSM_USDT;
-
- for (uint256 i = 0; i < gsmList.length; i++) {
- address gsm = gsmList[i];
-
- uint128 oldExposureCap = IGsm(gsm).getExposureCap();
- uint128 newExposureCap = oldExposureCap - 1;
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGsmExposureCap(gsm, newExposureCap);
- vm.stopPrank();
-
- uint128 currentExposureCap = IGsm(gsm).getExposureCap();
- assertEq(currentExposureCap, newExposureCap);
- }
- }
-
- function testUpdateGsmBuySellFeesBuyFee() public {
- executePayload(vm, address(proposal));
-
- address[2] memory gsmList;
- gsmList[0] = MiscEthereum.GSM_USDC;
- gsmList[1] = MiscEthereum.GSM_USDT;
-
- for (uint256 i = 0; i < gsmList.length; i++) {
- address gsm = gsmList[i];
-
- address feeStrategy = IGsm(gsm).getFeeStrategy();
- uint256 buyFee = IGsmFeeStrategy(feeStrategy).getBuyFee(1e4);
- uint256 sellFee = IGsmFeeStrategy(feeStrategy).getSellFee(1e4);
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGsmBuySellFees(gsm, buyFee + 1, sellFee + 1);
- vm.stopPrank();
-
- address newStrategy = IGsm(gsm).getFeeStrategy();
- uint256 newBuyFee = IGsmFeeStrategy(newStrategy).getBuyFee(1e4);
- uint256 newSellFee = IGsmFeeStrategy(newStrategy).getSellFee(1e4);
-
- assertEq(newBuyFee, buyFee + 1);
- assertEq(newSellFee, sellFee + 1);
- }
- }
-
- function testLowerGsmBuySellFeesBuyFee() public {
- executePayload(vm, address(proposal));
-
- address[2] memory gsmList;
- gsmList[0] = MiscEthereum.GSM_USDC;
- gsmList[1] = MiscEthereum.GSM_USDT;
-
- for (uint256 i = 0; i < gsmList.length; i++) {
- address gsm = gsmList[i];
-
- address feeStrategy = IGsm(gsm).getFeeStrategy();
- uint256 buyFee = IGsmFeeStrategy(feeStrategy).getBuyFee(1e4);
- uint256 sellFee = IGsmFeeStrategy(feeStrategy).getSellFee(1e4);
-
- vm.startPrank(RISK_COUNCIL);
- IGhoStewardV2(proposal.GHO_STEWARD()).updateGsmBuySellFees(gsm, buyFee - 1, sellFee - 1);
- vm.stopPrank();
-
- address newStrategy = IGsm(gsm).getFeeStrategy();
- uint256 newBuyFee = IGsmFeeStrategy(newStrategy).getBuyFee(1e4);
- uint256 newSellFee = IGsmFeeStrategy(newStrategy).getSellFee(1e4);
-
- assertEq(newBuyFee, buyFee - 1);
- assertEq(newSellFee, sellFee - 1);
- }
- }
-
- function _getGhoBorrowRate() internal view returns (uint256) {
- address currentInterestRateStrategy = AaveV3Ethereum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getInterestRateStrategyAddress(address(MiscEthereum.GHO_TOKEN));
- return IDefaultInterestRateStrategy(currentInterestRateStrategy).getBaseVariableBorrowRate();
- }
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate.md b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate.md
deleted file mode 100644
index 87dd3a336..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Gho Steward Update"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-gho-stewards/16466/11"
----
-
-## Simple Summary
-
-This proposal seeks to update the GHO steward to an more efficient version, allowing more granular control over GHO to increase it’s efficiency
-
-## Motivation
-
-The GHO peg is strong, and supply is growing. As GHO matures, new strategies can now be implemented to make it more liquid, resilient and help it grow larger. For example, a strong GSM is expected to allow larger cap increases, allowing faster growth of the supply. Also, in dynamic markets, tighter control on borrow rates is expected to improve asset efficiency.
-
-## Specification
-
-The upgraded Gho Steward can be found on the [gho-core github](https://github.com/aave/gho-core/blob/main/src/contracts/misc/GhoStewardV2.sol)
-
-Changes:
-
-- GSM fee strategy can now be updated by 50 bps both ways
-- GHO Borrow cap can now be updated both ways
-- GHO exposure cap can now be updated both ways
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a39a86866b72f8f8edb187b8ec453fc895faf9c3/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a39a86866b72f8f8edb187b8ec453fc895faf9c3/src/20240602_AaveV3Ethereum_GhoStewardUpdate/AaveV3Ethereum_GhoStewardUpdate_20240602.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-gho-stewards/16466/11)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate_20240602.s.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate_20240602.s.sol
deleted file mode 100644
index 7228aaf68..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate_20240602.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_GhoStewardUpdate_20240602} from './AaveV3Ethereum_GhoStewardUpdate_20240602.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate_20240602.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/GhoStewardUpdate_20240602.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_GhoStewardUpdate_20240602).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate_20240602.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_GhoStewardUpdate_20240602).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240602_AaveV3Ethereum_GhoStewardUpdate/GhoStewardUpdate.md'
- )
- );
- }
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/config.ts b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/config.ts
deleted file mode 100644
index 073b4f36e..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum'],
- title: 'Gho Steward Update',
- shortName: 'GhoStewardUpdate',
- date: '20240602',
- author: 'ACI',
- discussion: 'https://governance.aave.com/t/arfc-gho-stewards/16466/11',
- snapshot: '',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20002947}}},
-};
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGSM.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGSM.sol
deleted file mode 100644
index 596740394..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGSM.sol
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IAccessControl} from 'aave-v3-core/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol';
-
-interface IGsm is IAccessControl {
- function CONFIGURATOR_ROLE() external pure returns (bytes32);
-
- function getExposureCap() external view returns (uint128);
-
- function getFeeStrategy() external view returns (address);
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGho.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGho.sol
deleted file mode 100644
index e7b88cd52..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGho.sol
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IAccessControl} from 'aave-v3-core/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol';
-
-interface IGhoToken is IAccessControl {
- function BUCKET_MANAGER_ROLE() external pure returns (bytes32);
-
- function getFacilitatorsList() external view returns (address[] memory);
-
- function getFacilitatorBucket(address facilitator) external view returns (uint256, uint256);
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGhoStewardV2.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGhoStewardV2.sol
deleted file mode 100644
index 2b0138da6..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGhoStewardV2.sol
+++ /dev/null
@@ -1,158 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.10;
-
-/**
- * @title IGhoStewardV2
- * @author Aave Labs
- * @notice Defines the basic interface of the GhoStewardV2
- */
-interface IGhoStewardV2 {
- struct GhoDebounce {
- uint40 ghoBorrowCapLastUpdate;
- uint40 ghoBorrowRateLastUpdate;
- }
-
- struct GsmDebounce {
- uint40 gsmExposureCapLastUpdated;
- uint40 gsmFeeStrategyLastUpdated;
- }
-
- /**
- * @notice Updates the bucket capacity of facilitator, only if:
- * - respects `MINIMUM_DELAY`, the minimum time delay between updates
- * - the update changes up to 100% upwards
- * - the facilitator is controlled
- * @dev Only callable by Risk Council
- * @param facilitator The facilitator address
- * @param newBucketCapacity The new facilitator bucket capacity
- */
- function updateFacilitatorBucketCapacity(address facilitator, uint128 newBucketCapacity) external;
-
- /**
- * @notice Updates the GHO borrow cap, only if:
- * - respects `MINIMUM_DELAY`, the minimum time delay between updates
- * - the update changes up to 100% upwards or downwards
- * @dev Only callable by Risk Council
- * @param newBorrowCap The new borrow cap (in whole tokens)
- */
- function updateGhoBorrowCap(uint256 newBorrowCap) external;
-
- /**
- * @notice Updates the borrow rate of GHO, only if:
- * - respects `MINIMUM_DELAY`, the minimum time delay between updates
- * - the update changes up to `GHO_BORROW_RATE_CHANGE_MAX` upwards or downwards
- * - the update is lower than `GHO_BORROW_RATE_MAX`
- * @dev Only callable by Risk Council
- * @param newBorrowRate The new variable borrow rate (expressed in ray) (e.g. 0.0150e27 results in 1.50%)
- */
- function updateGhoBorrowRate(uint256 newBorrowRate) external;
-
- /**
- * @notice Updates the exposure cap of the GSM, only if:
- * - respects `MINIMUM_DELAY`, the minimum time delay between updates
- * - the update changes up to 100% upwards or downwards
- * @dev Only callable by Risk Council
- * @param gsm The gsm address to update
- * @param newExposureCap The new exposure cap (in underlying asset terms)
- */
- function updateGsmExposureCap(address gsm, uint128 newExposureCap) external;
-
- /**
- * @notice Updates the fixed percent fees of the GSM, only if:
- * - respects `MINIMUM_DELAY`, the minimum time delay between updates
- * - the update changes up to `GSM_FEE_RATE_CHANGE_MAX` upwards or downwards (for both buy and sell individually)
- * @dev Only callable by Risk Council
- * @param gsm The gsm address to update
- * @param buyFee The new buy fee (expressed in bps) (e.g. 0.0150e4 results in 1.50%)
- * @param sellFee The new sell fee (expressed in bps) (e.g. 0.0150e4 results in 1.50%)
- */
- function updateGsmBuySellFees(address gsm, uint256 buyFee, uint256 sellFee) external;
-
- /**
- * @notice Adds/Removes controlled facilitators
- * @dev Only callable by owner
- * @param facilitatorList A list of facilitators addresses to add to control
- * @param approve True to add as controlled facilitators, false to remove
- */
- function setControlledFacilitator(address[] memory facilitatorList, bool approve) external;
-
- /**
- * @notice Returns the maximum increase/decrease for GHO borrow rate updates.
- * @return The maximum increase change for borrow rate updates in ray (e.g. 0.010e27 results in 1.00%)
- */
- function GHO_BORROW_RATE_CHANGE_MAX() external view returns (uint256);
-
- /**
- * @notice Returns the maximum increase for GSM fee rates (buy or sell).
- * @return The maximum increase change for GSM fee rates updates in bps (e.g. 0.010e4 results in 1.00%)
- */
- function GSM_FEE_RATE_CHANGE_MAX() external view returns (uint256);
-
- /**
- * @notice Returns maximum value that can be assigned to GHO borrow rate.
- * @return The maximum value that can be assigned to GHO borrow rate in ray (e.g. 0.01e27 results in 1.0%)
- */
- function GHO_BORROW_RATE_MAX() external view returns (uint256);
-
- /**
- * @notice Returns the minimum delay that must be respected between parameters update.
- * @return The minimum delay between parameter updates (in seconds)
- */
- function MINIMUM_DELAY() external view returns (uint256);
-
- /**
- * @notice Returns the address of the Pool Addresses Provider of the Aave V3 Ethereum Pool
- * @return The address of the PoolAddressesProvider of Aave V3 Ethereum Pool
- */
- function POOL_ADDRESSES_PROVIDER() external view returns (address);
-
- /**
- * @notice Returns the address of the Gho Token
- * @return The address of the GhoToken
- */
- function GHO_TOKEN() external view returns (address);
-
- /**
- * @notice Returns the address of the fixed rate strategy factory
- * @return The address of the FixedRateStrategyFactory
- */
- function FIXED_RATE_STRATEGY_FACTORY() external view returns (address);
-
- /**
- * @notice Returns the address of the risk council
- * @return The address of the RiskCouncil
- */
- function RISK_COUNCIL() external view returns (address);
-
- /**
- * @notice Returns the list of controlled facilitators by this steward.
- * @return An array of facilitator addresses
- */
- function getControlledFacilitators() external view returns (address[] memory);
-
- /**
- * @notice Returns timestamp of the last update of GHO parameters
- * @return The GhoDebounce struct describing the last update of GHO parameters
- */
- function getGhoTimelocks() external view returns (GhoDebounce memory);
-
- /**
- * @notice Returns timestamp of the last update of Gsm parameters
- * @param gsm The GSM address
- * @return The GsmDebounce struct describing the last update of GSM parameters
- */
- function getGsmTimelocks(address gsm) external view returns (GsmDebounce memory);
-
- /**
- * @notice Returns timestamp of the facilitators last bucket capacity update
- * @param facilitator The facilitator address
- * @return The unix time of the last bucket capacity (in seconds).
- */
- function getFacilitatorBucketCapacityTimelock(address facilitator) external view returns (uint40);
-
- /**
- * @notice Returns the list of Fixed Fee Strategies for GSM
- * @return An array of FixedFeeStrategy addresses
- */
- function getGsmFeeStrategies() external view returns (address[] memory);
-}
diff --git a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGsmFeeStrategy.sol b/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGsmFeeStrategy.sol
deleted file mode 100644
index 8c0dc8acf..000000000
--- a/src/20240602_AaveV3Ethereum_GhoStewardUpdate/interfaces/IGsmFeeStrategy.sol
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-interface IGsmFeeStrategy {
- function getBuyFee(uint256 grossAmount) external view returns (uint256);
-
- function getSellFee(uint256 grossAmount) external view returns (uint256);
-
- function getGrossAmountFromTotalBought(uint256 totalAmount) external view returns (uint256);
-
- function getGrossAmountFromTotalSold(uint256 totalAmount) external view returns (uint256);
-}
diff --git a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol
deleted file mode 100644
index 5a3b683f5..000000000
--- a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol
+++ /dev/null
@@ -1,64 +0,0 @@
-// 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 Adjusting Interest Rate Curve for weETH on Arbitrum
- * @author ACI
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xed2fd3dfee1f29f04b6cda4a5c4629fcca32a5c961b1b3e2a49ba6842367ce31
- * - Discussion: https://governance.aave.com/t/arfc-adjusting-interest-rate-curve-for-weeth-on-arbitrum/17804
- */
-contract AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603 is
- AaveV3PayloadArbitrum
-{
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ArbitrumAssets.weETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(35_00),
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: EngineFlags.KEEP_CURRENT,
- variableRateSlope2: EngineFlags.KEEP_CURRENT,
- stableRateSlope1: EngineFlags.KEEP_CURRENT,
- stableRateSlope2: EngineFlags.KEEP_CURRENT,
- baseStableRateOffset: EngineFlags.KEEP_CURRENT,
- stableRateExcessOffset: EngineFlags.KEEP_CURRENT,
- optimalStableToTotalDebtRatio: EngineFlags.KEEP_CURRENT
- })
- });
-
- return rateStrategies;
- }
- function borrowsUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.BorrowUpdate[] memory)
- {
- IAaveV3ConfigEngine.BorrowUpdate[]
- memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1);
-
- borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({
- asset: AaveV3ArbitrumAssets.weETH_UNDERLYING,
- enabledToBorrow: EngineFlags.KEEP_CURRENT,
- flashloanable: EngineFlags.KEEP_CURRENT,
- stableRateModeEnabled: EngineFlags.KEEP_CURRENT,
- borrowableInIsolation: EngineFlags.KEEP_CURRENT,
- withSiloedBorrowing: EngineFlags.KEEP_CURRENT,
- reserveFactor: 45_00
- });
-
- return borrowUpdates;
- }
-}
diff --git a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.t.sol b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.t.sol
deleted file mode 100644
index 488ccd19e..000000000
--- a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.t.sol
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603} from './AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.t.sol -vv
- */
-contract AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603_Test is
- ProtocolV3TestBase
-{
- AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 217920822);
- proposal = new AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum.md b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum.md
deleted file mode 100644
index f7e9ee081..000000000
--- a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: " Adjusting Interest Rate Curve for weETH on Arbitrum"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-adjusting-interest-rate-curve-for-weeth-on-arbitrum/17804"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0xed2fd3dfee1f29f04b6cda4a5c4629fcca32a5c961b1b3e2a49ba6842367ce31"
----
-
-## Simple Summary
-
-The current proposal suggests adjusting the Interest Rate Curve for weETH on Arbitrum network to align with the mainnet, so Risk Parameters will be the same for weETH on Mainnet, Arbitrum, and Base networks.
-
-The aim is to optimize the utilization rates and improve revenue for the DAO.
-
-## Motivation
-
-By adjusting the Interest Rate Curve and updating the RF, we aim to encourage Increase efficiency and optimize DAO revenue for the weETH asset.
-
-## Specification
-
-Change Arbitrum Risk Parameters for weETH to align with Mainnet & Base.
-
-**Proposed Changes:**
-
-| Parameter | Value |
-| -------------- | ------ |
-| Uoptimal | 35.00% |
-| Reserve Factor | 45.00% |
-
-## References
-
-- Implementation: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/15298f4d41cd6165cc15d9c03d49c9affa7bbb4b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol)
-- Tests: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/15298f4d41cd6165cc15d9c03d49c9affa7bbb4b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xed2fd3dfee1f29f04b6cda4a5c4629fcca32a5c961b1b3e2a49ba6842367ce31)
-- [Discussion](https://governance.aave.com/t/arfc-adjusting-interest-rate-curve-for-weeth-on-arbitrum/17804)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol
deleted file mode 100644
index 1aae12ab6..000000000
--- a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603} from './AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.sol';
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum_20240603.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum_20240603).creationCode
- );
- payloads[0] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/AdjustingInterestRateCurveForWeETHOnArbitrum.md'
- )
- );
- }
-}
diff --git a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/config.ts b/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/config.ts
deleted file mode 100644
index 099013a2b..000000000
--- a/src/20240603_AaveV3Arbitrum_AdjustingInterestRateCurveForWeETHOnArbitrum/config.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Arbitrum'],
- title: ' Adjusting Interest Rate Curve for weETH on Arbitrum',
- shortName: 'AdjustingInterestRateCurveForWeETHOnArbitrum',
- date: '20240603',
- author: 'ACI',
- discussion:
- 'https://governance.aave.com/t/arfc-adjusting-interest-rate-curve-for-weeth-on-arbitrum/17804',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0xed2fd3dfee1f29f04b6cda4a5c4629fcca32a5c961b1b3e2a49ba6842367ce31',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Arbitrum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'weETH',
- params: {
- optimalUtilizationRate: '35',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '7',
- variableRateSlope2: '300',
- stableRateSlope1: '7',
- stableRateSlope2: '300',
- baseStableRateOffset: '0',
- stableRateExcessOffset: '00',
- optimalStableToTotalDebtRatio: '0',
- },
- },
- ],
- BORROWS_UPDATE: [
- {
- enabledToBorrow: 'KEEP_CURRENT',
- flashloanable: 'KEEP_CURRENT',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'DISABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '45',
- asset: 'weETH',
- },
- ],
- },
- cache: {blockNumber: 217920822},
- },
- },
-};
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol
new file mode 100644
index 000000000..6b886a48b
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
+import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+
+interface IAaveArbEthERC20Bridge {
+ function bridge(address token, address l1token, address gateway, uint256 amount) external;
+}
+
+/**
+ * @title May Funding Update
+ * @author karpatkey_TokenLogic
+ * - Snapshot: Direct-to-AIP
+ * - Discussion: https://governance.aave.com/t/arfc-may-funding-update/17768
+ */
+contract AaveV3Arbitrum_MayFundingUpdate_20240603 is IProposalGenericExecutor {
+ using SafeERC20 for IERC20;
+
+ IAaveArbEthERC20Bridge public constant BRIDGE =
+ IAaveArbEthERC20Bridge(0x0335ffa9af5CE05590d6C9A75B645470e07744a9);
+ address public constant USDC_GATEWAY = 0x096760F208390250649E3e8763348E783AEF5562;
+
+ function execute() external {
+ AaveV3Arbitrum.COLLECTOR.transfer(
+ AaveV3ArbitrumAssets.USDC_UNDERLYING,
+ address(BRIDGE),
+ IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Arbitrum.COLLECTOR))
+ );
+
+ AaveV3Arbitrum.COLLECTOR.transfer(
+ AaveV3ArbitrumAssets.USDC_A_TOKEN,
+ address(this),
+ IERC20(AaveV3ArbitrumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Arbitrum.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Arbitrum.POOL.withdraw(
+ AaveV3ArbitrumAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(BRIDGE)
+ );
+
+ uint256 usdcBalance = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf(address(BRIDGE));
+
+ BRIDGE.bridge(
+ AaveV3ArbitrumAssets.USDC_UNDERLYING,
+ AaveV3EthereumAssets.USDC_UNDERLYING,
+ USDC_GATEWAY,
+ usdcBalance
+ );
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol
new file mode 100644
index 000000000..7595793fa
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
+import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+
+import 'forge-std/Test.sol';
+import {stdStorage, StdStorage} from 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3Arbitrum_MayFundingUpdate_20240603} from './AaveV3Arbitrum_MayFundingUpdate_20240603.sol';
+
+contract GatewayMock {
+ function outboundTransfer(address, address, uint256, bytes calldata) external {}
+}
+
+/**
+ * @dev Test for AaveV3Arbitrum_MayFundingUpdate_20240603
+ * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol -vv
+ */
+contract AaveV3Arbitrum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase {
+ using stdStorage for StdStorage;
+
+ address internal COLLECTOR = address(AaveV3Arbitrum.COLLECTOR);
+
+ AaveV3Arbitrum_MayFundingUpdate_20240603 internal proposal;
+
+ event Bridge(address indexed token, uint256 amount);
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('arbitrum'), 226121182);
+ proposal = new AaveV3Arbitrum_MayFundingUpdate_20240603();
+ GatewayMock mock = new GatewayMock();
+ vm.etch(proposal.USDC_GATEWAY(), address(mock).code);
+ stdstore.target(address(proposal.BRIDGE())).sig('owner()').checked_write(
+ GovernanceV3Arbitrum.EXECUTOR_LVL_1
+ );
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ // function test_defaultProposalExecution() public {
+ // defaultTest('AaveV3Arbitrum_MayFundingUpdate_20240603', AaveV3Arbitrum.POOL, address(proposal));
+ // }
+
+ function test_bridge() public {
+ uint256 collectorUsdcBalanceBefore = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAusdcBalanceBefore = IERC20(AaveV3ArbitrumAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ vm.expectEmit(address(proposal.BRIDGE()));
+ emit Bridge(AaveV3ArbitrumAssets.USDC_UNDERLYING, 342589968476);
+ executePayload(vm, address(proposal));
+
+ uint256 collectorUsdcBalanceAfter = IERC20(AaveV3ArbitrumAssets.USDC_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAusdcBalanceAfter = IERC20(AaveV3ArbitrumAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ assertApproxEqAbs(collectorUsdcBalanceAfter, 0, 1e6);
+ assertApproxEqAbs(collectorAusdcBalanceAfter, 1e6, 1e6);
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol
new file mode 100644
index 000000000..eaa28fe51
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol
@@ -0,0 +1,326 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
+import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
+import {AaveSwapper} from 'aave-helpers/swaps/AaveSwapper.sol';
+import {IAaveWstethWithdrawer} from 'aave-helpers/asset-manager/interfaces/IAaveWstethWithdrawer.sol';
+
+/**
+ * @title May Funding Update
+ * @author karpatkey_TokenLogic
+ * - Snapshot: Direct-to-AIP
+ * - Discussion: https://governance.aave.com/t/arfc-may-funding-update/17768
+ */
+contract AaveV3Ethereum_MayFundingUpdate_20240603 is IProposalGenericExecutor {
+ using SafeERC20 for IERC20;
+
+ AaveSwapper public constant SWAPPER = AaveSwapper(MiscEthereum.AAVE_SWAPPER);
+ IAaveWstethWithdrawer public constant AAVE_STETH_WITHDRAWER =
+ IAaveWstethWithdrawer(0x2C4d3C146b002079949d7EecD07f261A39c98c4d);
+
+ address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC;
+ address public constant DAI_FEED = 0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9;
+ address public constant LUSD_FEED = 0x3D7aE7E594f2f2091Ad8798313450130d0Aba3a0;
+ address public constant PYUSD_FEED = 0x8f1dF6D7F2db73eECE86a18b4381F4707b918FB1;
+ address public constant USDC_FEED = 0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6;
+ address public constant DPI_FEED = 0xD2A593BF7594aCE1faD597adb697b5645d5edDB2;
+ address public constant USDT_FEED = 0x3E7d1eAB13ad0104d2750B8863b489D65364e32D;
+ address public constant RETH_FEED = 0x536218f9E9Eb48863970252233c8F271f554C2d0;
+ address public constant MILKMAN = 0x11C76AD590ABDFFCD980afEC9ad951B160F02797;
+ address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c;
+ address public constant FRONTIER_SAFE = 0xCDb4fA6ba08bF1FB7Aa9fDf6002E78EDc431a642;
+ uint256 public constant WSTETH_AMOUNT = 350 ether;
+ uint256 public constant FRONTIER_ALLOWANCE_AMOUNT = 2493 ether;
+ uint256 public constant AETH_USDT_AMOUNT = 2_000_000e6;
+ uint256 public constant AETH_USDC_AMOUNT = 1_500_000e6;
+
+ function execute() external {
+ _withdrawAndSwapForGHO();
+ _migrateWeth();
+ _depositAllLink();
+ _unwrapLsts();
+
+ /// FRONTIER allowance
+ AaveV3Ethereum.COLLECTOR.approve(
+ AaveV3EthereumAssets.WETH_UNDERLYING,
+ FRONTIER_SAFE,
+ FRONTIER_ALLOWANCE_AMOUNT
+ );
+ }
+
+ function _withdrawAndSwapForGHO() internal {
+ /// aEthDAI & aDAI
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.DAI_A_TOKEN,
+ address(this),
+ IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e18
+ );
+
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV2EthereumAssets.DAI_A_TOKEN,
+ address(this),
+ IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e18
+ );
+
+ AaveV3Ethereum.POOL.withdraw(
+ AaveV3EthereumAssets.DAI_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ AaveV2Ethereum.POOL.withdraw(
+ AaveV2EthereumAssets.DAI_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ uint256 daiBalance = IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(address(SWAPPER));
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.DAI_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ DAI_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ daiBalance,
+ 50
+ );
+
+ /// aEthLUSD
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.LUSD_A_TOKEN,
+ address(this),
+ IERC20(AaveV3EthereumAssets.LUSD_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e18
+ );
+
+ AaveV3Ethereum.POOL.withdraw(
+ AaveV3EthereumAssets.LUSD_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ uint256 lusdBalance = IERC20(AaveV3EthereumAssets.LUSD_UNDERLYING).balanceOf(address(SWAPPER));
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.LUSD_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ LUSD_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ lusdBalance,
+ 150
+ );
+
+ /// aEthPYUSD
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.PYUSD_A_TOKEN,
+ address(this),
+ IERC20(AaveV3EthereumAssets.PYUSD_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Ethereum.POOL.withdraw(
+ AaveV3EthereumAssets.PYUSD_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ uint256 pyusdBalance = IERC20(AaveV3EthereumAssets.PYUSD_UNDERLYING).balanceOf(
+ address(SWAPPER)
+ );
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.PYUSD_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ PYUSD_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ pyusdBalance,
+ 100
+ );
+
+ /// aUSDC & aEthUSDC
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV2EthereumAssets.USDC_A_TOKEN,
+ address(this),
+ IERC20(AaveV2EthereumAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.USDC_A_TOKEN,
+ address(this),
+ AETH_USDC_AMOUNT
+ );
+
+ AaveV2Ethereum.POOL.withdraw(
+ AaveV2EthereumAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ AaveV3Ethereum.POOL.withdraw(
+ AaveV3EthereumAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ uint256 usdcBalance = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(address(SWAPPER));
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.USDC_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ USDC_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ usdcBalance,
+ 50
+ );
+
+ /// DPI
+ uint256 dpiBalance = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf(
+ address(AaveV3Ethereum.COLLECTOR)
+ );
+
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV2EthereumAssets.DPI_UNDERLYING,
+ address(SWAPPER),
+ dpiBalance
+ );
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV2EthereumAssets.DPI_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ DPI_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ dpiBalance,
+ 500
+ );
+
+ /// aEthUSDT
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.USDT_A_TOKEN,
+ address(this),
+ AETH_USDT_AMOUNT
+ );
+
+ AaveV3Ethereum.POOL.withdraw(
+ AaveV3EthereumAssets.USDT_UNDERLYING,
+ type(uint256).max,
+ address(SWAPPER)
+ );
+
+ uint256 usdtBalance = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf(address(SWAPPER));
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.USDT_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ USDT_FEED,
+ GHO_USD_FEED,
+ address(AaveV3Ethereum.COLLECTOR),
+ usdtBalance,
+ 50
+ );
+ }
+
+ function _unwrapLsts() internal {
+ uint256 rethBalance = IERC20(AaveV3EthereumAssets.rETH_UNDERLYING).balanceOf(
+ address(AaveV3Ethereum.COLLECTOR)
+ );
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.rETH_UNDERLYING,
+ address(SWAPPER),
+ rethBalance
+ );
+
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.wstETH_UNDERLYING,
+ address(AAVE_STETH_WITHDRAWER),
+ WSTETH_AMOUNT
+ );
+
+ uint256[] memory amounts = new uint256[](1);
+ amounts[0] = WSTETH_AMOUNT;
+
+ AAVE_STETH_WITHDRAWER.startWithdraw(amounts);
+
+ SWAPPER.swap(
+ MILKMAN,
+ PRICE_CHECKER,
+ AaveV3EthereumAssets.rETH_UNDERLYING,
+ AaveV3EthereumAssets.WETH_UNDERLYING,
+ RETH_FEED,
+ AaveV3EthereumAssets.WETH_ORACLE,
+ address(AaveV3Ethereum.COLLECTOR),
+ rethBalance,
+ 50
+ );
+ }
+
+ function _depositAllLink() internal {
+ uint256 linkAmount = IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).balanceOf(
+ address(AaveV3Ethereum.COLLECTOR)
+ );
+
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV3EthereumAssets.LINK_UNDERLYING,
+ address(this),
+ linkAmount
+ );
+
+ IERC20(AaveV3EthereumAssets.LINK_UNDERLYING).forceApprove(
+ address(AaveV3Ethereum.POOL),
+ type(uint256).max
+ );
+
+ AaveV3Ethereum.POOL.deposit(
+ AaveV3EthereumAssets.LINK_UNDERLYING,
+ linkAmount,
+ address(AaveV3Ethereum.COLLECTOR),
+ 0
+ );
+ }
+
+ function _migrateWeth() internal {
+ AaveV3Ethereum.COLLECTOR.transfer(
+ AaveV2EthereumAssets.WETH_A_TOKEN,
+ address(this),
+ IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Ethereum.COLLECTOR)) - 1e18
+ );
+
+ AaveV2Ethereum.POOL.withdraw(
+ AaveV2EthereumAssets.WETH_UNDERLYING,
+ type(uint256).max,
+ address(this)
+ );
+
+ uint256 wethAmount = IERC20(AaveV2EthereumAssets.WETH_UNDERLYING).balanceOf(address(this));
+ IERC20(AaveV2EthereumAssets.WETH_UNDERLYING).forceApprove(
+ address(AaveV3Ethereum.POOL),
+ wethAmount
+ );
+
+ AaveV3Ethereum.POOL.deposit(
+ AaveV2EthereumAssets.WETH_UNDERLYING,
+ wethAmount,
+ address(AaveV3Ethereum.COLLECTOR),
+ 0
+ );
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol
new file mode 100644
index 000000000..e9a34b416
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol
@@ -0,0 +1,341 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3Ethereum_MayFundingUpdate_20240603} from './AaveV3Ethereum_MayFundingUpdate_20240603.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
+
+/**
+ * @dev Test for AaveV3Ethereum_MayFundingUpdate_20240603
+ * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol -vv
+ */
+contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase {
+ event SwapRequested(
+ address milkman,
+ address indexed fromToken,
+ address indexed toToken,
+ address fromOracle,
+ address toOracle,
+ uint256 amount,
+ address indexed recipient,
+ uint256 slippage
+ );
+
+ AaveV3Ethereum_MayFundingUpdate_20240603 internal proposal;
+ address internal COLLECTOR = address(AaveV3Ethereum.COLLECTOR);
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 20369591);
+ proposal = new AaveV3Ethereum_MayFundingUpdate_20240603();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Ethereum_MayFundingUpdate_20240603', AaveV3Ethereum.POOL, address(proposal));
+
+ uint256 allowanceAmount = IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).allowance(
+ COLLECTOR,
+ proposal.FRONTIER_SAFE()
+ );
+
+ assertEq(allowanceAmount, proposal.FRONTIER_ALLOWANCE_AMOUNT());
+ }
+
+ function test_withdrawAndSwapForGho() public {
+ uint256 collectorAdaiv2BalanceBefore = IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorAdaiv3BalanceBefore = IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorLusdBalanceBefore = IERC20(AaveV3EthereumAssets.LUSD_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorPyusdBalanceBefore = IERC20(AaveV3EthereumAssets.PYUSD_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorUsdcBalanceBefore = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorDpiBalanceBefore = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorAdaiv2BalanceAfter = IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorAdaiv3BalanceAfter = IERC20(AaveV3EthereumAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorLusdBalanceAfter = IERC20(AaveV3EthereumAssets.LUSD_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorPyusdBalanceAfter = IERC20(AaveV3EthereumAssets.PYUSD_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorUsdcBalanceAfter = IERC20(AaveV3EthereumAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorDpiBalanceAfter = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ /// DAI
+ uint256 swapperDaiBalance = IERC20(AaveV3EthereumAssets.DAI_UNDERLYING).balanceOf(
+ 0x33020117F0f3eB5E12361096a7631ba9Fe61FdAe
+ );
+
+ assertApproxEqAbs(collectorAdaiv2BalanceAfter, 1e18, 1000e18);
+ assertApproxEqAbs(collectorAdaiv3BalanceAfter, 1e18, 1e18);
+ assertApproxEqAbs(
+ swapperDaiBalance,
+ collectorAdaiv2BalanceBefore + collectorAdaiv3BalanceBefore,
+ 10e18
+ );
+
+ /// LUSD
+ uint256 swapperLusdBalance = IERC20(AaveV3EthereumAssets.LUSD_UNDERLYING).balanceOf(
+ 0xf799Cc3ee26230Cda22131433aDe1A3FC4F4c621
+ );
+
+ assertApproxEqAbs(collectorLusdBalanceAfter, 1e18, 1e18);
+ assertApproxEqAbs(swapperLusdBalance, collectorLusdBalanceBefore, 1e18);
+
+ /// PYUSD
+ uint256 swapperPyusdBalance = IERC20(AaveV3EthereumAssets.PYUSD_UNDERLYING).balanceOf(
+ 0xf40420092cdCD6981148cE2958387D13AEfB9379
+ );
+
+ assertApproxEqAbs(collectorPyusdBalanceAfter, 1e18, 1e18);
+ assertApproxEqAbs(swapperPyusdBalance, collectorPyusdBalanceBefore, 1e18);
+
+ /// USDC
+ uint256 swapperUsdcBalance = IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).balanceOf(
+ 0xE0817A4B73ea8292aF9afF3C5666b915CA2851C9
+ );
+
+ assertApproxEqAbs(collectorUsdcBalanceAfter, 1e18, 1e18);
+ assertApproxEqAbs(swapperUsdcBalance, collectorUsdcBalanceBefore, 1e18);
+
+ /// DPI
+ uint256 swapperDpiBalance = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf(
+ 0xffAA0B1c1e89739785f710D1249211b9323a997C
+ );
+
+ assertApproxEqAbs(collectorDpiBalanceAfter, 1e18, 1e18);
+ assertApproxEqAbs(swapperDpiBalance, collectorDpiBalanceBefore, 1e18);
+
+ /// USDT
+ uint256 swapperUsdtBalance = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf(
+ 0x9EE16E27B90454ff9EFcED41b441a9588ae097Cd
+ );
+
+ assertApproxEqAbs(swapperUsdtBalance, proposal.AETH_USDT_AMOUNT(), 1e18);
+ }
+
+ function test_unwrapLsts() public {
+ uint256 collectorRethBalanceBefore = IERC20(AaveV3EthereumAssets.rETH_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorWstethBalanceBefore = IERC20(AaveV3EthereumAssets.wstETH_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 withdrawerBalanceBefore = IERC20(AaveV3EthereumAssets.wstETH_UNDERLYING).balanceOf(
+ address(proposal.AAVE_STETH_WITHDRAWER())
+ );
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorRethBalanceAfter = IERC20(AaveV3EthereumAssets.rETH_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorWstethBalanceAfter = IERC20(AaveV3EthereumAssets.wstETH_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 withdrawerBalanceAfter = IERC20(AaveV3EthereumAssets.wstETH_UNDERLYING).balanceOf(
+ address(proposal.AAVE_STETH_WITHDRAWER())
+ );
+
+ /// RETH
+ uint256 swapperRethBalance = IERC20(AaveV3EthereumAssets.rETH_UNDERLYING).balanceOf(
+ 0x50a6239f3d9b452E60273f28098D1BF22813b939
+ );
+
+ assertApproxEqAbs(collectorRethBalanceAfter, 0, 1e18);
+ assertApproxEqAbs(swapperRethBalance, collectorRethBalanceBefore, 1e18);
+
+ /// WSTETH
+ assertApproxEqAbs(
+ collectorWstethBalanceAfter,
+ collectorWstethBalanceBefore - proposal.WSTETH_AMOUNT(),
+ 1e16
+ );
+
+ assertEq(withdrawerBalanceAfter, withdrawerBalanceBefore);
+ }
+
+ function test_swapEvents() public {
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.DAI_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.DAI_FEED(),
+ proposal.GHO_USD_FEED(),
+ 1931651887069694121996324, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 50
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.LUSD_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.LUSD_FEED(),
+ proposal.GHO_USD_FEED(),
+ 26176609646753004781352, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 150
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.PYUSD_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.PYUSD_FEED(),
+ proposal.GHO_USD_FEED(),
+ 119858878007, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 100
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.USDC_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.USDC_FEED(),
+ proposal.GHO_USD_FEED(),
+ 4039151285202, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 50
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV2EthereumAssets.DPI_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.DPI_FEED(),
+ proposal.GHO_USD_FEED(),
+ 137080139851167463608, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 500
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.USDT_UNDERLYING,
+ AaveV3EthereumAssets.GHO_UNDERLYING,
+ proposal.USDT_FEED(),
+ proposal.GHO_USD_FEED(),
+ 2000000000000, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 50
+ );
+
+ vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER);
+ emit SwapRequested(
+ proposal.MILKMAN(),
+ AaveV3EthereumAssets.rETH_UNDERLYING,
+ AaveV3EthereumAssets.WETH_UNDERLYING,
+ proposal.RETH_FEED(),
+ AaveV3EthereumAssets.WETH_ORACLE,
+ 1883870013343165667402, // Hardcoded as dynamic
+ address(AaveV3Ethereum.COLLECTOR),
+ 50
+ );
+
+ executePayload(vm, address(proposal));
+ }
+
+ function test_wethMigration() public {
+ uint256 collectorAwethv2BalanceBefore = IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAwethv3BalanceBefore = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorAwethv2BalanceAfter = IERC20(AaveV2EthereumAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorAwethv3BalanceAfter = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ assertApproxEqAbs(collectorAwethv2BalanceAfter, 1e18, 1e18);
+
+ assertApproxEqAbs(
+ collectorAwethv3BalanceAfter,
+ collectorAwethv2BalanceBefore + collectorAwethv3BalanceBefore,
+ 2e18
+ );
+ }
+
+ function test_depositLink() public {
+ uint256 collectorLinkBalanceBefore = IERC20(AaveV2EthereumAssets.LINK_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorAlinkBalanceBefore = IERC20(AaveV3EthereumAssets.LINK_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorLinkBalanceAfter = IERC20(AaveV2EthereumAssets.LINK_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorAlinkBalanceAfter = IERC20(AaveV3EthereumAssets.LINK_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ assertEq(collectorLinkBalanceAfter, 0);
+ assertApproxEqAbs(
+ collectorAlinkBalanceAfter,
+ collectorAlinkBalanceBefore + collectorLinkBalanceBefore,
+ 3e18
+ );
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol
new file mode 100644
index 000000000..18b2f92d7
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
+import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+
+interface IAaveOpEthERC20Bridge {
+ function bridge(address token, address l1Token, uint256 amount) external;
+}
+
+/**
+ * @title May Funding Update
+ * @author karpatkey_TokenLogic
+ * - Snapshot: Direct-to-AIP
+ * - Discussion: https://governance.aave.com/t/arfc-may-funding-update/17768
+ */
+contract AaveV3Optimism_MayFundingUpdate_20240603 is IProposalGenericExecutor {
+ using SafeERC20 for IERC20;
+
+ IAaveOpEthERC20Bridge public constant BRIDGE =
+ IAaveOpEthERC20Bridge(0xc3250A20F8a7BbDd23adE87737EE46A45Fe5543E);
+
+ function execute() external {
+ AaveV3Optimism.COLLECTOR.transfer(
+ AaveV3OptimismAssets.USDC_UNDERLYING,
+ address(BRIDGE),
+ IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Optimism.COLLECTOR))
+ );
+
+ AaveV3Optimism.COLLECTOR.transfer(
+ AaveV3OptimismAssets.USDC_A_TOKEN,
+ address(this),
+ IERC20(AaveV3OptimismAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Optimism.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Optimism.POOL.withdraw(
+ AaveV3OptimismAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(BRIDGE)
+ );
+
+ uint256 usdcBalance = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf(address(BRIDGE));
+
+ BRIDGE.bridge(
+ AaveV3OptimismAssets.USDC_UNDERLYING,
+ AaveV3EthereumAssets.USDC_UNDERLYING,
+ usdcBalance
+ );
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol
new file mode 100644
index 000000000..4442364d3
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol';
+import {GovernanceV3Optimism} from 'aave-address-book/GovernanceV3Optimism.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+
+import 'forge-std/Test.sol';
+import {stdStorage, StdStorage} from 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3Optimism_MayFundingUpdate_20240603} from './AaveV3Optimism_MayFundingUpdate_20240603.sol';
+
+/**
+ * @dev Test for AaveV3Optimism_MayFundingUpdate_20240603
+ * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol -vv
+ */
+contract AaveV3Optimism_MayFundingUpdate_20240603_Test is ProtocolV3TestBase {
+ using stdStorage for StdStorage;
+
+ address internal COLLECTOR = address(AaveV3Optimism.COLLECTOR);
+ AaveV3Optimism_MayFundingUpdate_20240603 internal proposal;
+
+ event Bridge(address indexed token, uint256 amount);
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('optimism'), 121928261);
+ proposal = new AaveV3Optimism_MayFundingUpdate_20240603();
+ stdstore.target(address(proposal.BRIDGE())).sig('owner()').checked_write(
+ GovernanceV3Optimism.EXECUTOR_LVL_1
+ );
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Optimism_MayFundingUpdate_20240603', AaveV3Optimism.POOL, address(proposal));
+ }
+
+ function test_bridge() public {
+ uint256 collectorUsdcBalanceBefore = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAusdcBalanceBefore = IERC20(AaveV3OptimismAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ vm.expectEmit(address(proposal.BRIDGE()));
+ emit Bridge(AaveV3OptimismAssets.USDC_UNDERLYING, 770765807687);
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorUsdcBalanceAfter = IERC20(AaveV3OptimismAssets.USDC_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAusdcBalanceAfter = IERC20(AaveV3OptimismAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ assertApproxEqAbs(collectorUsdcBalanceAfter, 0, 1e6);
+ assertApproxEqAbs(collectorAusdcBalanceAfter, 1e6, 1e6);
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol
new file mode 100644
index 000000000..82518b932
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol
@@ -0,0 +1,141 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
+import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
+
+interface IAavePolEthERC20Bridge {
+ function bridge(address token, uint256 amount) external;
+}
+
+/**
+ * @title May Funding Update
+ * @author karpatkey_TokenLogic
+ * - Snapshot: Direct-to-AIP
+ * - Discussion: https://governance.aave.com/t/arfc-may-funding-update/17768
+ */
+contract AaveV3Polygon_MayFundingUpdate_20240603 is IProposalGenericExecutor {
+ using SafeERC20 for IERC20;
+
+ IAavePolEthERC20Bridge public constant BRIDGE =
+ IAavePolEthERC20Bridge(MiscPolygon.AAVE_POL_ETH_BRIDGE);
+
+ function execute() external {
+ _migrate();
+ _bridge();
+ }
+
+ function _migrate() internal {
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV2PolygonAssets.USDT_A_TOKEN,
+ address(this),
+ IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV2PolygonAssets.DAI_A_TOKEN,
+ address(this),
+ IERC20(AaveV2PolygonAssets.DAI_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e18
+ );
+
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV2PolygonAssets.WETH_A_TOKEN,
+ address(this),
+ IERC20(AaveV2PolygonAssets.WETH_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e18
+ );
+
+ AaveV2Polygon.POOL.withdraw(
+ AaveV2PolygonAssets.USDT_UNDERLYING,
+ type(uint256).max,
+ address(this)
+ );
+
+ AaveV2Polygon.POOL.withdraw(
+ AaveV2PolygonAssets.DAI_UNDERLYING,
+ type(uint256).max,
+ address(this)
+ );
+
+ AaveV2Polygon.POOL.withdraw(
+ AaveV2PolygonAssets.WETH_UNDERLYING,
+ type(uint256).max,
+ address(this)
+ );
+
+ uint256 usdtAmount = IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).balanceOf(address(this));
+ IERC20(AaveV2PolygonAssets.USDT_UNDERLYING).forceApprove(
+ address(AaveV3Polygon.POOL),
+ usdtAmount
+ );
+
+ uint256 daiAmount = IERC20(AaveV2PolygonAssets.DAI_UNDERLYING).balanceOf(address(this));
+ IERC20(AaveV2PolygonAssets.DAI_UNDERLYING).forceApprove(address(AaveV3Polygon.POOL), daiAmount);
+
+ uint256 wethAmount = IERC20(AaveV2PolygonAssets.WETH_UNDERLYING).balanceOf(address(this));
+ IERC20(AaveV2PolygonAssets.WETH_UNDERLYING).forceApprove(
+ address(AaveV3Polygon.POOL),
+ wethAmount
+ );
+
+ AaveV3Polygon.POOL.deposit(
+ AaveV2PolygonAssets.USDT_UNDERLYING,
+ usdtAmount,
+ address(AaveV3Polygon.COLLECTOR),
+ 0
+ );
+
+ AaveV3Polygon.POOL.deposit(
+ AaveV2PolygonAssets.DAI_UNDERLYING,
+ daiAmount,
+ address(AaveV3Polygon.COLLECTOR),
+ 0
+ );
+
+ AaveV3Polygon.POOL.deposit(
+ AaveV2PolygonAssets.WETH_UNDERLYING,
+ wethAmount,
+ address(AaveV3Polygon.COLLECTOR),
+ 0
+ );
+ }
+
+ function _bridge() internal {
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV3PolygonAssets.USDC_UNDERLYING,
+ address(BRIDGE),
+ IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf(address(AaveV3Polygon.COLLECTOR))
+ );
+
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV3PolygonAssets.USDC_A_TOKEN,
+ address(this),
+ IERC20(AaveV3PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
+ );
+
+ AaveV3Polygon.POOL.withdraw(
+ AaveV3PolygonAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(BRIDGE)
+ );
+
+ AaveV3Polygon.COLLECTOR.transfer(
+ AaveV2PolygonAssets.USDC_A_TOKEN,
+ address(this),
+ IERC20(AaveV2PolygonAssets.USDC_A_TOKEN).balanceOf(address(AaveV3Polygon.COLLECTOR)) - 1e6
+ );
+
+ AaveV2Polygon.POOL.withdraw(
+ AaveV2PolygonAssets.USDC_UNDERLYING,
+ type(uint256).max,
+ address(BRIDGE)
+ );
+
+ uint256 usdcBalance = IERC20(AaveV2PolygonAssets.USDC_UNDERLYING).balanceOf(address(BRIDGE));
+
+ BRIDGE.bridge(AaveV2PolygonAssets.USDC_UNDERLYING, usdcBalance);
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol
new file mode 100644
index 000000000..7295cce94
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol
@@ -0,0 +1,125 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol';
+import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {AaveV3Polygon_MayFundingUpdate_20240603} from './AaveV3Polygon_MayFundingUpdate_20240603.sol';
+
+/**
+ * @dev Test for AaveV3Polygon_MayFundingUpdate_20240603
+ * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol -vv
+ */
+contract AaveV3Polygon_MayFundingUpdate_20240603_Test is ProtocolV3TestBase {
+ AaveV3Polygon_MayFundingUpdate_20240603 internal proposal;
+
+ address internal COLLECTOR = address(AaveV3Polygon.COLLECTOR);
+
+ event Bridge(address token, uint256 amount);
+ event Transfer(address from, address to, uint256 amount);
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('polygon'), 57725360);
+ proposal = new AaveV3Polygon_MayFundingUpdate_20240603();
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest('AaveV3Polygon_MayFundingUpdate_20240603', AaveV3Polygon.POOL, address(proposal));
+ }
+
+ function test_migrate() public {
+ uint256 collectorUsdtv2BalanceBefore = IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorUsdtv3BalanceBefore = IERC20(AaveV3PolygonAssets.USDT_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorDaiv2BalanceBefore = IERC20(AaveV2PolygonAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorDaiv3BalanceBefore = IERC20(AaveV3PolygonAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorWethv2BalanceBefore = IERC20(AaveV2PolygonAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorWethv3BalanceBefore = IERC20(AaveV3PolygonAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorUsdtv2BalanceAfter = IERC20(AaveV2PolygonAssets.USDT_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorUsdtv3BalanceAfter = IERC20(AaveV3PolygonAssets.USDT_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorDaiv2BalanceAfter = IERC20(AaveV2PolygonAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorDaiv3BalanceAfter = IERC20(AaveV3PolygonAssets.DAI_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ uint256 collectorWethv2BalanceAfter = IERC20(AaveV2PolygonAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorWethv3BalanceAfter = IERC20(AaveV3PolygonAssets.WETH_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+
+ assertApproxEqAbs(collectorUsdtv2BalanceAfter, 1e6, 10e6);
+ assertApproxEqAbs(collectorDaiv2BalanceAfter, 1e18, 10e18);
+ assertApproxEqAbs(collectorWethv2BalanceAfter, 1e18, 1e18);
+
+ assertApproxEqAbs(
+ collectorUsdtv3BalanceAfter,
+ collectorUsdtv3BalanceBefore + collectorUsdtv2BalanceBefore,
+ 10e6
+ );
+
+ assertApproxEqAbs(
+ collectorDaiv3BalanceAfter,
+ collectorDaiv3BalanceBefore + collectorDaiv2BalanceBefore,
+ 10e18
+ );
+
+ assertApproxEqAbs(
+ collectorWethv3BalanceAfter,
+ collectorWethv3BalanceBefore + collectorWethv2BalanceBefore,
+ 1e18
+ );
+ }
+
+ function test_bridge() public {
+ vm.expectEmit(true, true, true, true, MiscPolygon.AAVE_POL_ETH_BRIDGE);
+ emit Bridge(AaveV3PolygonAssets.USDC_UNDERLYING, 146173577275);
+
+ executePayload(vm, address(proposal));
+
+ uint256 collectorAusdcv2BalanceAfter = IERC20(AaveV2PolygonAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorAusdcv3BalanceAfter = IERC20(AaveV3PolygonAssets.USDC_A_TOKEN).balanceOf(
+ COLLECTOR
+ );
+ uint256 collectorUsdcBalanceAfter = IERC20(AaveV3PolygonAssets.USDC_UNDERLYING).balanceOf(
+ COLLECTOR
+ );
+
+ assertApproxEqAbs(collectorAusdcv2BalanceAfter, 1e6, 10e6);
+ assertApproxEqAbs(collectorAusdcv3BalanceAfter, 1e6, 10e6);
+ assertApproxEqAbs(collectorUsdcBalanceAfter, 1e6, 10e6);
+ }
+}
diff --git a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md
new file mode 100644
index 000000000..c37aa7ee5
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md
@@ -0,0 +1,83 @@
+---
+title: "May Funding Update"
+author: "karpatkey_TokenLogic"
+discussions: "https://governance.aave.com/t/arfc-may-funding-update/17768"
+snapshot: "Direct-to-AIP"
+---
+
+## Simple Summary
+
+This proposal presents May’s funding update, including the following key activities:
+
+- Migrating holdings from v2 to v3 (Polygon and Ethereum)
+- Extending the DAO’s GHO runway to cover upcoming expenses
+- Create Allowances for Frontier Program funding
+
+## Motivation
+
+This proposal seeks to enhance the financial sustainability of the DAO and will follow the Direct-To-AIP as outlined in this [proposal](https://governance.aave.com/t/arfc-funding-update/16675).
+
+## Specification
+
+### Consolidate GHO Funding and Migrate funds from V2 to V3
+
+Perform the following Swaps and migration of assets from Aave v2 to v3. Assets are to be swapped for GHO.
+
+| Withdraw & Swap to GHO | Migrate Eth v2 to v3 | Migrate Pol v2 to v3 |
+| :--------------------: | :------------------: | :------------------: |
+| aEthDAI (All-1) | awETH (All-1) | amUSDT (All-1) |
+| aDAI (All-1) | | amwETH (All-1) |
+| aEthLUSD (All-1) | | amDAI (All-1) |
+| aEthPYUSD (All-1) | | |
+| aUSDC (All-1) | | |
+| DPI (All) | | |
+| aEthUSDT (2M) | | |
+| aEthUSDC (1.5M) | | |
+
+Transfer the following assets to Ethereum.
+
+| Polygon | Arbitrum | Optimism |
+| :--------------: | :--------------: | :--------------: |
+| USDC.e (All) | USDC.e (All) | USDC.e (All) |
+| aPolUSDC (All-1) | aArbUSDC (All-1) | aOptUSDC (All-1) |
+| amUSDC (All-1) | | |
+
+Deposit the following small holdings into the respective v3 deployment:
+
+| Deposit into Eth v3 |
+| :-----------------: |
+| LINK |
+
+### Frontier Funding
+
+The following LSTs are to be unstaked for ETH in order to fund the [Frontier initiative](https://snapshot.org/#/aave.eth/proposal/0x17da8b848323ed88b9c3ab391057c45a5737635dfe995ad66a84b389821b0867).
+
+| Unwrap Asset | Quantity | Methodology |
+| :----------: | :------: | :---------: |
+| rETH | All | Cowswap |
+| wstETH | 350 | Use Lido |
+
+Note that Cowswap solvers will use the underlying rETH redemptions mechanisms if required.
+
+A description of how the ETH is to be deployed has been outlined by ACI [here](https://governance.aave.com/t/arfc-expansion-of-frontier/17749).
+
+| Quantity Deployed | Provider |
+| :---------------: | :--------: |
+| 248 ETH | Stader |
+| 2,085 ETH | RocketPool |
+| 160 ETH | StakeWise |
+
+The Frontier SAFE `0xCDb4fA6ba08bF1FB7Aa9fDf6002E78EDc431a642` will be able to use the allowance function on `0x464C71f6c2F760DdA6093dCB91C24c39e5d6e18c` to claim the equivalent to 2,493 ETH.
+
+Any residual ETH will be deposited into Aave v3.
+
+## References
+
+- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol)
+- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol)
+- [Snapshot](Direct-to-AIP)
+- [Discussion](https://governance.aave.com/t/arfc-may-funding-update/17768)
+
+## Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol
similarity index 51%
rename from src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol
rename to src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol
index 66d41467e..d92359b83 100644
--- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol
+++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol
@@ -3,22 +3,22 @@ pragma solidity ^0.8.0;
import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript, GnosisScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-import {AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-import {AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
-import {AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol';
+import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
+import {AaveV3Ethereum_MayFundingUpdate_20240603} from './AaveV3Ethereum_MayFundingUpdate_20240603.sol';
+import {AaveV3Polygon_MayFundingUpdate_20240603} from './AaveV3Polygon_MayFundingUpdate_20240603.sol';
+import {AaveV3Optimism_MayFundingUpdate_20240603} from './AaveV3Optimism_MayFundingUpdate_20240603.sol';
+import {AaveV3Arbitrum_MayFundingUpdate_20240603} from './AaveV3Arbitrum_MayFundingUpdate_20240603.sol';
/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployPolygon chain=polygon
- * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/137/run-latest.json
+ * @dev Deploy Ethereum
+ * deploy-command: make deploy-ledger contract=src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol:DeployEthereum chain=mainnet
+ * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/MayFundingUpdate_20240603.s.sol/1/run-latest.json
*/
-contract DeployPolygon is PolygonScript {
+contract DeployEthereum is EthereumScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Ethereum_MayFundingUpdate_20240603).creationCode
);
// compose action
@@ -32,15 +32,15 @@ contract DeployPolygon is PolygonScript {
}
/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployOptimism chain=optimism
- * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/10/run-latest.json
+ * @dev Deploy Polygon
+ * deploy-command: make deploy-ledger contract=src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol:DeployPolygon chain=polygon
+ * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/MayFundingUpdate_20240603.s.sol/137/run-latest.json
*/
-contract DeployOptimism is OptimismScript {
+contract DeployPolygon is PolygonScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Polygon_MayFundingUpdate_20240603).creationCode
);
// compose action
@@ -54,15 +54,15 @@ contract DeployOptimism is OptimismScript {
}
/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/42161/run-latest.json
+ * @dev Deploy Optimism
+ * deploy-command: make deploy-ledger contract=src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol:DeployOptimism chain=optimism
+ * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/MayFundingUpdate_20240603.s.sol/10/run-latest.json
*/
-contract DeployArbitrum is ArbitrumScript {
+contract DeployOptimism is OptimismScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Optimism_MayFundingUpdate_20240603).creationCode
);
// compose action
@@ -76,15 +76,15 @@ contract DeployArbitrum is ArbitrumScript {
}
/**
- * @dev Deploy Gnosis
- * deploy-command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployGnosis chain=gnosis
- * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/100/run-latest.json
+ * @dev Deploy Arbitrum
+ * deploy-command: make deploy-ledger contract=src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol:DeployArbitrum chain=arbitrum
+ * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/MayFundingUpdate_20240603.s.sol/42161/run-latest.json
*/
-contract DeployGnosis is GnosisScript {
+contract DeployArbitrum is ArbitrumScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Arbitrum_MayFundingUpdate_20240603).creationCode
);
// compose action
@@ -99,7 +99,7 @@ contract DeployGnosis is GnosisScript {
/**
* @dev Create Proposal
- * command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:CreateProposal chain=mainnet
+ * command: make deploy-ledger contract=src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol:CreateProposal chain=mainnet
*/
contract CreateProposal is EthereumScript {
function run() external {
@@ -107,33 +107,33 @@ contract CreateProposal is EthereumScript {
PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](4);
// compose actions for validation
+ IPayloadsControllerCore.ExecutionAction[]
+ memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
+ actionsEthereum[0] = GovV3Helpers.buildAction(
+ type(AaveV3Ethereum_MayFundingUpdate_20240603).creationCode
+ );
+ payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
+
IPayloadsControllerCore.ExecutionAction[]
memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Polygon_MayFundingUpdate_20240603).creationCode
);
- payloads[0] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
+ payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
IPayloadsControllerCore.ExecutionAction[]
memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Optimism_MayFundingUpdate_20240603).creationCode
);
- payloads[1] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
+ payloads[2] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
IPayloadsControllerCore.ExecutionAction[]
memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
- );
- payloads[2] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsGnosis[0] = GovV3Helpers.buildAction(
- type(AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode
+ type(AaveV3Arbitrum_MayFundingUpdate_20240603).creationCode
);
- payloads[3] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
+ payloads[3] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
// create proposal
vm.startBroadcast();
@@ -141,10 +141,7 @@ contract CreateProposal is EthereumScript {
vm,
payloads,
GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md'
- )
+ GovV3Helpers.ipfsHashFile(vm, 'src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md')
);
}
}
diff --git a/src/20240603_Multi_MayFundingUpdate/config.ts b/src/20240603_Multi_MayFundingUpdate/config.ts
new file mode 100644
index 000000000..7a372b822
--- /dev/null
+++ b/src/20240603_Multi_MayFundingUpdate/config.ts
@@ -0,0 +1,19 @@
+import {ConfigFile} from '../../generator/types';
+export const config: ConfigFile = {
+ rootOptions: {
+ pools: ['AaveV3Ethereum', 'AaveV3Polygon', 'AaveV3Optimism', 'AaveV3Arbitrum'],
+ title: 'May Funding Update',
+ shortName: 'MayFundingUpdate',
+ date: '20240603',
+ author: 'karpatkey_TokenLogic',
+ discussion: 'https://governance.aave.com/t/arfc-may-funding-update/17768',
+ snapshot: 'Direct-to-AIP',
+ votingNetwork: 'POLYGON',
+ },
+ poolOptions: {
+ AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20369591}},
+ AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 57725360}},
+ AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 121928261}},
+ AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 226121182}},
+ },
+};
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 2f4c152f8..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadArbitrum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ArbitrumAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 6492f0b56..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 221211071);
- proposal = new AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 8485f26ac..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadAvalanche {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3AvalancheAssets.WETHe_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 74ba86588..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 46641063);
- proposal = new AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Avalanche.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 28d5f53a5..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol';
-import {AaveV3PayloadBNB} from 'aave-helpers/v3-config-engine/AaveV3PayloadBNB.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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadBNB {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3BNBAssets.ETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index a3fe8c26b..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('bnb'), 39559153);
- proposal = new AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3BNB.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 0d98c25a5..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612 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.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index d4f78ef5c..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('base'), 15720041);
- proposal = new AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Base.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 3ad4e560f..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadEthereum {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3EthereumAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 8e19bfece..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20078561);
- proposal = new AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index eb21eb931..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol';
-import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadGnosis {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3GnosisAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index d51724162..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('gnosis'), 34432968);
- proposal = new AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Gnosis.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 9e6c898be..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadMetis {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3MetisAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index e9a2eb1ce..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('metis'), 17329826);
- proposal = new AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Metis.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 934180bf2..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadOptimism {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3OptimismAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 882880d40..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('optimism'), 121315273);
- proposal = new AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Optimism.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 633cea800..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadPolygon {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3PolygonAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 4609ef430..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('polygon'), 58085999);
- proposal = new AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Polygon.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol
deleted file mode 100644
index 2dbf5b49e..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol';
-import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.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 Optimize ETH-correlated asset parameters
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc
- * - Discussion: https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886
- */
-contract AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612 is AaveV3PayloadScroll {
- function rateStrategiesUpdates()
- public
- pure
- override
- returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory)
- {
- IAaveV3ConfigEngine.RateStrategyUpdate[]
- memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1);
- rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({
- asset: AaveV3ScrollAssets.WETH_UNDERLYING,
- params: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: EngineFlags.KEEP_CURRENT,
- baseVariableBorrowRate: EngineFlags.KEEP_CURRENT,
- variableRateSlope1: _bpsToRay(2_70),
- 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/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.t.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
deleted file mode 100644
index 56867607d..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Test for AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612
- * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.t.sol -vv
- */
-contract AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612_Test is ProtocolV3TestBase {
- AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('scroll'), 6508767);
- proposal = new AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612',
- AaveV3Scroll.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters.md b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters.md
deleted file mode 100644
index adb0861d6..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: "Optimize ETH-correlated asset parameters"
-author: "Aave Chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc"
----
-
-## Simple Summary
-
-This proposal seeks to update parameters on ETH-correlated assets and coordinate caps management to improve Aave efficiency.
-
-## Motivation
-
-ETH and ETH-correlated assets are the largest reserves in the Aave protocol, leading to their usage as collateral and being one of the protocol’s largest revenue drivers.
-
-ETH is mainly used for two use cases:
-
-1. Collateral to borrow stablecoins
-2. Borrowed using ETH-correlated assets to leverage loop a staking/restaking yield.
-
-This second use case is very sensible to the borrowing cost of wETH and, if kept unchecked, can lead to a negative yield experience for some long-term users having significant leverage positions.
-
-To mitigate this, we propose to optimize the ETH-correlated assets parameters on all markets, and we seek governance greenlight on a cap management policy by risk stewards.
-
-## Specification
-
-wETH Slope 1 is optimized to 2.7% on all Aave instances, ensuring LST/wETH loops profitability
-
-Caps & rate management policy (not enforced with this AIP payload):
-
-- Maintain a minimum 25 bps discount between stETH 30-day avg APR and Slope 1 wETH borrow cost with monthly AIPs to enforce this policy
-- Support research and development to create new InterestRateStrategy contracts for wETH implementing this policy algorithmically.
-- Keep wETH borrow cap increases ceiling at 90% of currently supplied wETH on all networks
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/dff3f1ce4897d7ae0f8336640fe08518a6f22bb8/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc)
-- [Discussion](https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol
deleted file mode 100644
index c14c9e278..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol
+++ /dev/null
@@ -1,330 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-import {AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612} from './AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Polygon
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployPolygon chain=polygon
- * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/137/run-latest.json
- */
-contract DeployPolygon is PolygonScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployAvalanche chain=avalanche
- * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Optimism
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployOptimism chain=optimism
- * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/10/run-latest.json
- */
-contract DeployOptimism is OptimismScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Metis
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployMetis chain=metis
- * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/1088/run-latest.json
- */
-contract DeployMetis is MetisScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Base
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployBase chain=base
- * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/8453/run-latest.json
- */
-contract DeployBase is BaseScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Gnosis
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployGnosis chain=gnosis
- * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/100/run-latest.json
- */
-contract DeployGnosis is GnosisScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Scroll
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployScroll chain=scroll
- * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/534352/run-latest.json
- */
-contract DeployScroll is ScrollScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy BNB
- * deploy-command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:DeployBNB chain=bnb
- * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/OptimizeETHCorrelatedAssetParameters_20240612.s.sol/56/run-latest.json
- */
-contract DeployBNB is BNBScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters_20240612.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsPolygon[0] = GovV3Helpers.buildAction(
- type(AaveV3Polygon_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV3Avalanche_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsOptimism[0] = GovV3Helpers.buildAction(
- type(AaveV3Optimism_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsMetis[0] = GovV3Helpers.buildAction(
- type(AaveV3Metis_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBase[0] = GovV3Helpers.buildAction(
- type(AaveV3Base_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[6] = GovV3Helpers.buildBasePayload(vm, actionsBase);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsGnosis[0] = GovV3Helpers.buildAction(
- type(AaveV3Gnosis_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[7] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsScroll[0] = GovV3Helpers.buildAction(
- type(AaveV3Scroll_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[8] = GovV3Helpers.buildScrollPayload(vm, actionsScroll);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsBNB[0] = GovV3Helpers.buildAction(
- type(AaveV3BNB_OptimizeETHCorrelatedAssetParameters_20240612).creationCode
- );
- payloads[9] = GovV3Helpers.buildBNBPayload(vm, actionsBNB);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/OptimizeETHCorrelatedAssetParameters.md'
- )
- );
- }
-}
diff --git a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/config.ts b/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/config.ts
deleted file mode 100644
index 6393e7fec..000000000
--- a/src/20240612_Multi_OptimizeETHCorrelatedAssetParameters/config.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- configFile: './config.ts',
- author: 'Aave Chan Initiative',
- pools: [
- 'AaveV3Ethereum',
- 'AaveV3Polygon',
- 'AaveV3Avalanche',
- 'AaveV3Optimism',
- 'AaveV3Arbitrum',
- 'AaveV3Metis',
- 'AaveV3Base',
- 'AaveV3Gnosis',
- 'AaveV3Scroll',
- 'AaveV3BNB',
- ],
- title: 'Optimize ETH-correlated asset parameters',
- shortName: 'OptimizeETHCorrelatedAssetParameters',
- date: '20240612',
- discussion: 'https://governance.aave.com/t/arfc-optimize-eth-correlated-asset-parameters/17886',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x3d79b416cfa6c70a85d03d07148d3a2025b88f294694d76fb101167af332c2fc',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 20078561},
- },
- AaveV3Polygon: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 58085999},
- },
- AaveV3Avalanche: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETHe',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 46641063},
- },
- AaveV3Optimism: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 121315273},
- },
- AaveV3Arbitrum: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 221211071},
- },
- AaveV3Metis: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 17329826},
- },
- AaveV3Base: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 15720041},
- },
- AaveV3Gnosis: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 34432968},
- },
- AaveV3Scroll: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'WETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 6508767},
- },
- AaveV3BNB: {
- configs: {
- RATE_UPDATE_V3: [
- {
- asset: 'ETH',
- params: {
- optimalUtilizationRate: '',
- baseVariableBorrowRate: '',
- variableRateSlope1: '2.7',
- variableRateSlope2: '',
- stableRateSlope1: '',
- stableRateSlope2: '',
- baseStableRateOffset: '',
- stableRateExcessOffset: '',
- optimalStableToTotalDebtRatio: '',
- },
- },
- ],
- },
- cache: {blockNumber: 39559153},
- },
- },
-};
diff --git a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol b/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol
deleted file mode 100644
index e895e0bca..000000000
--- a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum, AaveV3ArbitrumEModes} 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';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-/**
- * @title GHO Cross-Chain Launch Part 2
- * @author Aave Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a
- * - Discussion: https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616
- */
-contract AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613 is AaveV3PayloadArbitrum {
- using SafeERC20 for IERC20;
-
- address public constant GHO = 0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33;
- uint256 public constant GHO_SEED_AMOUNT = 1e18;
-
- function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
- IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
-
- listings[0] = IAaveV3ConfigEngine.Listing({
- asset: GHO,
- assetSymbol: 'GHO',
- priceFeed: 0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb,
- eModeCategory: AaveV3ArbitrumEModes.NONE,
- enabledToBorrow: EngineFlags.ENABLED,
- stableRateModeEnabled: EngineFlags.DISABLED,
- borrowableInIsolation: EngineFlags.DISABLED,
- withSiloedBorrowing: EngineFlags.DISABLED,
- flashloanable: EngineFlags.ENABLED,
- ltv: 0,
- liqThreshold: 0,
- liqBonus: 0,
- reserveFactor: 10_00,
- supplyCap: 1_000_000,
- borrowCap: 900_000,
- debtCeiling: 0,
- liqProtocolFee: 0,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(90_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(12_00),
- variableRateSlope2: _bpsToRay(65_00),
- stableRateSlope1: _bpsToRay(0),
- stableRateSlope2: _bpsToRay(0),
- baseStableRateOffset: _bpsToRay(0),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(0)
- })
- });
-
- return listings;
- }
-
- function _postExecute() internal override {
- IERC20(GHO).forceApprove(address(AaveV3Arbitrum.POOL), GHO_SEED_AMOUNT);
- AaveV3Arbitrum.POOL.supply(GHO, GHO_SEED_AMOUNT, address(0), 0);
- }
-}
diff --git a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.t.sol b/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.t.sol
deleted file mode 100644
index 59fa627dd..000000000
--- a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.t.sol
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import 'forge-std/Test.sol';
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-import {AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613} from './AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.t.sol -vv
- */
-contract AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 225178100);
- proposal = new AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- // Mock Executor receives GHO, also makes sure total supply >= supply cap so e2e tests pass
- deal(proposal.GHO(), GovernanceV3Arbitrum.EXECUTOR_LVL_1, 1_000_000e18, true);
-
- defaultTest(
- 'AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
-
- (address aTokenAddress, , ) = AaveV3Arbitrum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getReserveTokensAddresses(proposal.GHO());
- assertGe(IERC20(aTokenAddress).balanceOf(address(0)), proposal.GHO_SEED_AMOUNT());
- }
-
- function test_defaultProposalExecutionExactSeed() public {
- // Mock Executor receives GHO seed amount
- deal(proposal.GHO(), GovernanceV3Arbitrum.EXECUTOR_LVL_1, proposal.GHO_SEED_AMOUNT());
-
- GovV3Helpers.executePayload(vm, address(proposal));
-
- (address aTokenAddress, , ) = AaveV3Arbitrum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getReserveTokensAddresses(proposal.GHO());
- assertGe(IERC20(aTokenAddress).balanceOf(address(0)), proposal.GHO_SEED_AMOUNT());
- }
-
- function testFail_defaultProposalExecutionNoSeed() public {
- GovV3Helpers.executePayload(vm, address(proposal));
- }
-}
diff --git a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2.md b/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2.md
deleted file mode 100644
index 7461840ae..000000000
--- a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: "GHO Cross-Chain - Part 2"
-author: "Aave Labs"
-discussions: "https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a"
----
-
-## Simple Summary
-
-This AIP is the Part 2 for the GHO Cross-Chain proposal and proposes the configuration of GHO on Arbitrum Aave V3 Pool in connection with the cross-chain implementation strategy.
-
-Following the successful expansion of GHO to the Arbitrum network, this AIP proposes to onboard GHO into the Arbitrum Aave Pool as a borrowable asset, adopting risk parameters formulated by Chaos Labs.
-
-## Motivation
-
-The implementation of the GHO Cross Chain proposal required the proposal AIP to be split into two separate AIPs. This proposal is the second AIP (“Part 2”) for configuration of GHO on Arbitrum Aave Pool adopting risk parameters formulated by Chaos Labs.
-
-## Specification
-
-The table below illustrates the configured risk parameters for **GHO**
-
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | false |
-| Borrowable | ENABLED |
-| Collateral Enabled | false |
-| Supply Cap (GHO) | 1,000,000 |
-| Borrow Cap (GHO) | 900,000 |
-| Debt Ceiling | USD 0 |
-| LTV | 0 % |
-| LT | 0 % |
-| Liquidation Bonus | 0 % |
-| Liquidation Protocol Fee | 0 % |
-| Reserve Factor | 10 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 12 % |
-| Variable Slope 2 | 65 % |
-| Uoptimal | 90 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 0 % |
-| Stable Slope2 | 0 % |
-| Base Stable Rate Offset | 0 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 0 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | DISABLED |
-| Oracle | 0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb |
-
-## References
-
-- Implementation: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/c7161d8c68339faa78dbb10d6c4d0fce1256306f/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol)
-- Tests: [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/c7161d8c68339faa78dbb10d6c4d0fce1256306f/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a)
-- [Discussion](https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2_20240613.s.sol b/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2_20240613.s.sol
deleted file mode 100644
index efc538156..000000000
--- a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2_20240613.s.sol
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613} from './AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613.sol';
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2_20240613.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/GHOCrossChainLaunchPart2_20240613.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2_20240613.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_GHOCrossChainLaunchPart2_20240613).creationCode
- );
- payloads[0] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/GHOCrossChainLaunchPart2.md'
- )
- );
- }
-}
diff --git a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/config.ts b/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/config.ts
deleted file mode 100644
index 508000ae6..000000000
--- a/src/20240613_AaveV3Arbitrum_GHOCrossChainLaunchPart2/config.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Arbitrum'],
- title: 'GHOCrossChainLaunchPart2',
- shortName: 'GHOCrossChainLaunchPart2',
- date: '20240613',
- author: 'Aave Labs',
- discussion: 'https://governance.aave.com/t/arfc-gho-cross-chain-launch/17616',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x2a6ffbcff41a5ef98b7542f99b207af9c1e79e61f859d0a62f3bf52d3280877a',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Arbitrum: {
- configs: {
- ASSET_LISTING: [
- {
- assetSymbol: 'GHO',
- decimals: 18,
- priceFeed: '0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb',
- ltv: '0',
- liqThreshold: '0',
- liqBonus: '0',
- debtCeiling: '0',
- liqProtocolFee: '0',
- enabledToBorrow: 'ENABLED',
- flashloanable: 'ENABLED',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'DISABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '10',
- supplyCap: '1000000',
- borrowCap: '900000',
- rateStrategyParams: {
- optimalUtilizationRate: '90',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '12',
- variableRateSlope2: '65',
- stableRateSlope1: '0',
- stableRateSlope2: '0',
- baseStableRateOffset: '0',
- stableRateExcessOffset: '0',
- optimalStableToTotalDebtRatio: '0',
- },
- eModeCategory: 'AaveV3ArbitrumEModes.NONE',
- asset: '0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33',
- },
- ],
- },
- cache: {blockNumber: 221463835},
- },
- },
-};
diff --git a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.sol b/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.sol
deleted file mode 100644
index 6d9005b5c..000000000
--- a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-/**
- * @title V4 AL Service Provider Proposal
- * @author Aave Labs
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x70dfd865b78c4c391e2b0729b907d152e6e8a0da683416d617d8f84782036349
- * - Discussion: https://governance.aave.com/t/arfc-al-service-provider-proposal/17974
- */
-contract AaveV3Ethereum_V4ALServiceProviderProposal_20240614 is IProposalGenericExecutor {
- address public constant AAVE_LABS = 0x1c037b3C22240048807cC9d7111be5d455F640bd;
-
- // 3 million GHO upfront
- uint256 public constant GHO_UPFRONT_AMOUNT = 3_000_000 ether;
-
- // 9 million GHO streamed over the year
- uint256 public constant GHO_STREAM_AMOUNT = 9_000_000 ether;
- uint256 public constant GHO_STREAM_DURATION = 365 days;
-
- uint256 public constant ACTUAL_STREAM =
- (GHO_STREAM_AMOUNT / GHO_STREAM_DURATION) * GHO_STREAM_DURATION;
-
- function execute() external {
- AaveV3Ethereum.COLLECTOR.createStream(
- AAVE_LABS,
- ACTUAL_STREAM,
- AaveV3EthereumAssets.GHO_UNDERLYING,
- block.timestamp,
- block.timestamp + GHO_STREAM_DURATION
- );
-
- AaveV3Ethereum.COLLECTOR.transfer(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- AAVE_LABS,
- GHO_UPFRONT_AMOUNT
- );
- }
-}
diff --git a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.t.sol b/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.t.sol
deleted file mode 100644
index 0b0132243..000000000
--- a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.t.sol
+++ /dev/null
@@ -1,311 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import 'forge-std/StdUtils.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_V4ALServiceProviderProposal_20240614} from './AaveV3Ethereum_V4ALServiceProviderProposal_20240614.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_V4ALServiceProviderProposal_20240614
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/AaveV3Ethereum_V4ALServiceProviderProposal_20240614.t.sol -vv
- */
-contract AaveV3Ethereum_V4ALServiceProviderProposal_20240614_Test is ProtocolV3TestBase {
- AaveV3Ethereum_V4ALServiceProviderProposal_20240614 internal proposal;
-
- address public constant AAVE_LABS = 0x1c037b3C22240048807cC9d7111be5d455F640bd;
- uint256 public constant GHO_UPFRONT_AMOUNT = 3_000_000 ether;
- uint256 public constant GHO_STREAM_AMOUNT = 9_000_000 ether;
- uint256 public constant GHO_STREAM_DURATION = 365 days;
- uint256 public constant ACTUAL_STREAM_AMOUNT_GHO =
- (GHO_STREAM_AMOUNT / GHO_STREAM_DURATION) * GHO_STREAM_DURATION;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20092863);
- proposal = new AaveV3Ethereum_V4ALServiceProviderProposal_20240614();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_V4ALServiceProviderProposal_20240614',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function testProposalExecution() public {
- uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- uint256 ALGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
- uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- // Check balances directly after proposal execution (upfront payment distributed to Aave Labs)
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS),
- ALGHOBalanceBefore + GHO_UPFRONT_AMOUNT
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- CollectorV3GHOBalanceBefore - GHO_UPFRONT_AMOUNT
- );
-
- // Checking if the streams have been created properly
- // Scoping to avoid "stack too deep" error
- {
- (
- address senderGHO,
- address recipientGHO,
- uint256 depositGHO,
- address tokenAddressGHO,
- uint256 startTimeGHO,
- uint256 stopTimeGHO,
- uint256 remainingBalanceGHO,
-
- ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);
-
- assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR));
- assertEq(recipientGHO, AAVE_LABS);
- assertEq(depositGHO, ACTUAL_STREAM_AMOUNT_GHO);
- assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING);
- assertEq(stopTimeGHO - startTimeGHO, GHO_STREAM_DURATION);
- assertEq(remainingBalanceGHO, ACTUAL_STREAM_AMOUNT_GHO);
- }
-
- // Checking if Aave Labs can withdraw from the stream
- vm.startPrank(AAVE_LABS);
- vm.warp(block.timestamp + GHO_STREAM_DURATION);
-
- // Currently Collector has less funds than stream amount
- assertLe(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- ACTUAL_STREAM_AMOUNT_GHO
- );
-
- // Partial withdrawal of Collector's remaining balance
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(
- nextCollectorStreamID,
- CollectorV3GHOBalanceBefore - GHO_UPFRONT_AMOUNT
- );
- uint256 nextALGHOBalance = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
-
- // Aave Labs received the entirety of Collector's balance
- assertEq(ALGHOBalanceBefore, nextALGHOBalance - CollectorV3GHOBalanceBefore);
-
- // Check Collector balance after stream withdrawal
- uint256 CollectorV3GHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- assertEq(CollectorV3GHOBalanceAfter, 0);
-
- vm.stopPrank();
- }
-
- // Test giving V2 Collector more funds and full withdrawing
- function testProposalExecutionPrankFunds() public {
- uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- uint256 ALGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
-
- // Giving the Collector enough funds to cover the stream
- deal(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- address(AaveV3Ethereum.COLLECTOR),
- GHO_UPFRONT_AMOUNT + GHO_STREAM_AMOUNT
- );
-
- uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- // Check balances directly after proposal execution (upfront payment distributed to Aave Labs)
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS),
- ALGHOBalanceBefore + GHO_UPFRONT_AMOUNT
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- CollectorV3GHOBalanceBefore - GHO_UPFRONT_AMOUNT
- );
-
- // Checking if the streams have been created properly
- // Scoping to avoid "stack too deep" error
- {
- (
- address senderGHO,
- address recipientGHO,
- uint256 depositGHO,
- address tokenAddressGHO,
- uint256 startTimeGHO,
- uint256 stopTimeGHO,
- uint256 remainingBalanceGHO,
-
- ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);
-
- assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR));
- assertEq(recipientGHO, AAVE_LABS);
- assertEq(depositGHO, ACTUAL_STREAM_AMOUNT_GHO);
- assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING);
- assertEq(stopTimeGHO - startTimeGHO, GHO_STREAM_DURATION);
- assertEq(remainingBalanceGHO, ACTUAL_STREAM_AMOUNT_GHO);
- }
-
- // Checking if Aave Labs can withdraw from the stream
- vm.startPrank(AAVE_LABS);
- vm.warp(block.timestamp + GHO_STREAM_DURATION);
-
- assertGe(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- ACTUAL_STREAM_AMOUNT_GHO
- );
-
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, ACTUAL_STREAM_AMOUNT_GHO);
- uint256 nextALGHOBalance = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
-
- assertEq(
- ALGHOBalanceBefore,
- nextALGHOBalance - (ACTUAL_STREAM_AMOUNT_GHO + GHO_UPFRONT_AMOUNT)
- );
-
- // Check Collector balance after stream withdrawal
- uint256 CollectorV3GHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- assertEq(
- CollectorV3GHOBalanceAfter,
- CollectorV3GHOBalanceBefore - (ACTUAL_STREAM_AMOUNT_GHO + GHO_UPFRONT_AMOUNT)
- );
-
- vm.stopPrank();
- }
-
- // Test showing V2 Collector currently doesn't have enough funds
- function testProposalExecutionFailureFunding() public {
- uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- uint256 ALGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
-
- uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- executePayload(vm, address(proposal));
-
- // Check balances directly after proposal execution (upfront payment distributed to Aave Labs)
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS),
- ALGHOBalanceBefore + GHO_UPFRONT_AMOUNT
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- CollectorV3GHOBalanceBefore - GHO_UPFRONT_AMOUNT
- );
-
- // Checking if the streams have been created properly
- // Scoping to avoid "stack too deep" error
- {
- (
- address senderGHO,
- address recipientGHO,
- uint256 depositGHO,
- address tokenAddressGHO,
- uint256 startTimeGHO,
- uint256 stopTimeGHO,
- uint256 remainingBalanceGHO,
-
- ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID);
-
- assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR));
- assertEq(recipientGHO, AAVE_LABS);
- assertEq(depositGHO, ACTUAL_STREAM_AMOUNT_GHO);
- assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING);
- assertEq(stopTimeGHO - startTimeGHO, GHO_STREAM_DURATION);
- assertEq(remainingBalanceGHO, ACTUAL_STREAM_AMOUNT_GHO);
- }
-
- // Checking if Aave Labs can withdraw from the stream
- vm.startPrank(AAVE_LABS);
- vm.warp(block.timestamp + GHO_STREAM_DURATION);
-
- assertLe(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- ACTUAL_STREAM_AMOUNT_GHO
- );
-
- vm.expectRevert(stdError.arithmeticError);
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, ACTUAL_STREAM_AMOUNT_GHO);
-
- vm.stopPrank();
- }
-
- function testProposalExecutionFuzzWithdrawalAmounts(
- uint256 withdrawalAmount,
- uint256 waitPeriod
- ) public {
- waitPeriod = bound(waitPeriod, 1, GHO_STREAM_DURATION);
- withdrawalAmount = bound(
- withdrawalAmount,
- 1,
- waitPeriod * (ACTUAL_STREAM_AMOUNT_GHO / GHO_STREAM_DURATION)
- );
-
- // Giving the Collector enough funds to cover the stream
- deal(
- AaveV3EthereumAssets.GHO_UNDERLYING,
- address(AaveV3Ethereum.COLLECTOR),
- GHO_UPFRONT_AMOUNT + GHO_STREAM_AMOUNT
- );
-
- assertGe(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- ACTUAL_STREAM_AMOUNT_GHO
- );
-
- uint256 ALGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
- uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId();
- executePayload(vm, address(proposal));
-
- // Check balances directly after proposal execution (upfront payment distributed to Aave Labs)
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS),
- ALGHOBalanceBefore + GHO_UPFRONT_AMOUNT
- );
- assertEq(
- IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)),
- CollectorV3GHOBalanceBefore - GHO_UPFRONT_AMOUNT
- );
-
- vm.startPrank(AAVE_LABS);
- vm.warp(block.timestamp + waitPeriod);
-
- // Withdraw fuzzed amount from stream
- AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, withdrawalAmount);
-
- uint256 ALGHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(AAVE_LABS);
- uint256 CollectorV3GHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(
- address(AaveV3Ethereum.COLLECTOR)
- );
-
- assertEq(ALGHOBalanceAfter - ALGHOBalanceBefore, withdrawalAmount + GHO_UPFRONT_AMOUNT);
- assertEq(
- CollectorV3GHOBalanceAfter,
- CollectorV3GHOBalanceBefore - (withdrawalAmount + GHO_UPFRONT_AMOUNT)
- );
-
- vm.stopPrank();
- }
-}
diff --git a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal.md b/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal.md
deleted file mode 100644
index bc06bd09e..000000000
--- a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-title: "AL Service Provider Proposal"
-author: "Aave Labs"
-discussions: "https://governance.aave.com/t/arfc-al-service-provider-proposal/17974"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x70dfd865b78c4c391e2b0729b907d152e6e8a0da683416d617d8f84782036349"
----
-
-## Summary
-
-This AIP proposes a one-year technical contributor engagement for the Aave Labs to act as a service provider for development of Aave V4 and a new visual identity.
-
-## Motivation
-
-Aave Labs seeks to be onboarded as a service provider to be one of the technical contributors to the Aave DAO. The specification below outlines the scope of the technical contributions of Aave Labs.
-
-## Specification
-
-The following are the key deliverables within the grant:
-
-### Aave Protocol V4
-
-Key deliverables for the 1 year scope of development include:
-
-- New Modular Architecture
-
- - An innovative design to enhance flexibility and efficiency, minimizing disruption for integrators.
-
-- Unified Liquidity Layer
-
- - A flexible liquidity management approach that allows for module modifications without needing to migrate liquidity.
-
-- Fuzzy-controlled Interest Rates
-
- - Automated rate adjustments based on market conditions, optimizing for both suppliers and borrowers. Utilizing Chainlink for precise data feeds, setting new standards in capital efficiency.
-
-- Liquidity Premiums
-
- - Adjusted borrowing costs based on collateral risk, ensuring fairer pricing. Higher risks incur higher premiums, while lower risks reduce costs.
-
-- Dynamic Risk Configuration
-
- - Allows dynamic adjustments to risk parameters based on market conditions without governance overhead.
-
-- Smart Accounts and Vaults
-
- - Simplifies user interactions with the protocol by allowing multiple smart accounts per wallet and enabling borrowing without direct collateral supply.
-
-- Automated Assets Offboarding
-
- - Streamlines the process of offboarding assets, reducing governance workload and ensuring predictable offboarding plans.
-
-- Enhanced Liquidation Engine
-
- - Introduces a variable liquidation factor, liquidation strategies, and batch liquidations to improve efficiency and borrower experience.
-
-- Automated Treasury Management
-
- - Implements a reverse auction mechanism for reserve factor assets, reducing governance overhead.
-
-- GHO Features
-
- - Native GHO Minting
-
- - Allows for more efficient minting of GHO directly from the liquidity layer.
-
- - GHO “Soft” Liquidations
-
- - Utilizes a LLAMM model to ease liquidations and manage market downturns, providing options for users to choose which collateral to liquidate to GHO.
-
- - Stablecoin Interest Paid in GHO
-
- - Suppliers can opt to receive interest payments in GHO, enhancing capital efficiency and providing additional benefits to the protocol.
-
- - Emergency Redemption Mechanism
- - A feature to handle prolonged and heavy depegging of GHO, ensuring stability and reliability.
-
-### Visual Identity Assets
-
-[Aave Visual Identity Guidelines | 2024](https://www.youtube.com/watch?v=TQHLCACwnbE)
-
-Deliverables include:
-
-- Provision of Visual Identity Assets: Compiling and delivering a package of visual identity assets, including, but are not limited to, logos, color schemes, typography guidelines, various Ronnie illustrations and other graphical elements.
-
-- Usage Guidelines: Instructions on how to implement the visual identity assets across various platforms and media, including digital and print formats. Practical examples and best practice scenarios demonstrating the potential usage of the visual identity assets.
-
-- Delivery: The assets will be delivered and packaged in a Github repository accessible to everyone and hosted within the Aave DAO Origin organization.
-
-## Pospective Second and Third Year Scope
-
-The DAO may renew the engagement with Aave Labs as a service provider for a technical contributor for a second and third year with that scope of work to be determined at a later date and subject to community input and ARFC approval.
-
-## Grant
-
-$12m GHO, including $3m upfront and $9m streamed over the year.
-
-## Evaluation Metrics
-
-- Monthly reporting of contributions to the Aave DAO.
-- Solicitation of feedback from other service providers working as technical contributors and DAO members.
-- Direct and transparent engagement with the DAO via the governance forum.
-
-## Principles
-
-- Aave Labs shall strictly adhere to the scope of its designated role as one of the service providers working as a technical contributor, ensuring all decisions and actions remain within our areas of the engagement.
-- Aave Labs shall prioritize the security and robustness of its technical contributions.
-- Any production-ready code written within the scope of the proposal will be moved to the Aave DAO’s GitHub repository.
-- Aave Labs shall engage with the DAO like all other contributors within the established working relationships and procedures of the Aave DAO. For example, decisions concerning risk configurations, DAO treasury, code audits, and other matters not covered by this proposal will need to be separately approved by the Aave DAO via TEMP CHECKs and Snapshots.
-
-## Copyright
-
-The text of this AIP is released under the [CC0 license](https://creativecommons.org/publicdomain/zero/1.0/). The visuals and the New Visual identity are subject to and governed by the license specified in the approved governance proposal by the Aave DAO.
diff --git a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal_20240614.s.sol b/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal_20240614.s.sol
deleted file mode 100644
index 7e2a18682..000000000
--- a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal_20240614.s.sol
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_V4ALServiceProviderProposal_20240614} from './AaveV3Ethereum_V4ALServiceProviderProposal_20240614.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal_20240614.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/V4ALServiceProviderProposal_20240614.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_V4ALServiceProviderProposal_20240614).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/V4ALServiceProviderProposal_20240614.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_V4ALServiceProviderProposal_20240614).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/ALServiceProviderProposal.md'
- )
- );
- }
-}
diff --git a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/config.ts b/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/config.ts
deleted file mode 100644
index c2c7a9c21..000000000
--- a/src/20240614_AaveV3Ethereum_V4ALServiceProviderProposal/config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- title: 'V4 AL Service Provider Proposal',
- author: 'Aave Labs',
- discussion: 'https://governance.aave.com/t/arfc-al-service-provider-proposal/17974',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x70dfd865b78c4c391e2b0729b907d152e6e8a0da683416d617d8f84782036349',
- pools: ['AaveV3Ethereum'],
- shortName: 'V4ALServiceProviderProposal',
- date: '20240614',
- },
- poolOptions: {AaveV3Ethereum: {configs: {}, cache: {blockNumber: 20092863}}},
-};
diff --git a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol b/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol
deleted file mode 100644
index 792bb0f1e..000000000
--- a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol';
-import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol';
-
-/**
- * @title Set ACI as Emission Manager for wAVAX on the Avalanche network
- * @author ACI
- * - Discussion: https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898/4
- */
-contract AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620 is
- IProposalGenericExecutor
-{
- address public constant AVAX_EMISSION_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd;
- address public constant GGAVAX = 0xA25EaF2906FA1a3a13EdAc9B9657108Af7B703e3;
-
- function execute() external {
- IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setEmissionAdmin(
- AaveV3AvalancheAssets.WAVAX_UNDERLYING,
- AVAX_EMISSION_ADMIN
- );
- IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setEmissionAdmin(
- AaveV3AvalancheAssets.sAVAX_UNDERLYING,
- AVAX_EMISSION_ADMIN
- );
- IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setEmissionAdmin(
- GGAVAX,
- AVAX_EMISSION_ADMIN
- );
- }
-}
diff --git a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.t.sol b/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.t.sol
deleted file mode 100644
index 01344b762..000000000
--- a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.t.sol
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620} from './AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol';
-
-/**
- * @dev Test for AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620
- * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.t.sol -vv
- */
-contract AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620_Test is
- ProtocolV3TestBase
-{
- AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('avalanche'), 46972185);
- proposal = new AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620',
- AaveV3Avalanche.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork.md b/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork.md
deleted file mode 100644
index 23793bff9..000000000
--- a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Set ACI as Emission Manager on the Avalanche network"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898/4"
----
-
-## Simple Summary
-
-Following coordination with the Avalanche Foundation, the ACI is requesting governance approval to appoint the ACI multisig to operate an LM program on the Avalanche network on their behalf.
-
-## Motivation
-
-Liquidity mining programs are essential for attracting liquidity providers by offering rewards for their participation. Effective management of these programs is crucial for the sustained growth of the Aave Ecosystem. Therefore, ACI, with its extensive experience and strategic partnerships, is well-positioned to manage these emissions effectively.
-
-A recent example is the [Long Term Incentive Program (LTIPP) ](https://forum.arbitrum.foundation/t/aave-ltipp-application-final/21741) from Arbitrum DAO, where Aave DAO will receive 750,000 ARB tokens, illustrating the benefits of coordinated emission management.
-
-## Specification
-
-The ACI multisig address will be set as the emission manager via the **`setEmissionAdmin()`** method in the relevant emission manager contracts.
-
-ACI multisig address: `0xac140648435d03f784879cd789130F22Ef588Fcd`
-
-This method will appoint the Aave Chan Initiative (ACI) wallet as the emissions admin for the wAVAX, ggAVAX & sAVAX assets on the Avalanche network
-
-## References
-
-- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/08854fc3e25d6934a737ea89b17b55a34fc3aa08/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol)
-- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/08854fc3e25d6934a737ea89b17b55a34fc3aa08/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.t.sol)
-- [Discussion](https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898/4)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol b/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol
deleted file mode 100644
index dc85bd3c9..000000000
--- a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, AvalancheScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620} from './AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.sol';
-
-/**
- * @dev Deploy Avalanche
- * deploy-command: make deploy-ledger contract=src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol:DeployAvalanche chain=avalanche
- * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol/43114/run-latest.json
- */
-contract DeployAvalanche is AvalancheScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620)
- .creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsAvalanche[0] = GovV3Helpers.buildAction(
- type(AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork_20240620)
- .creationCode
- );
- payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork.md'
- )
- );
- }
-}
diff --git a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/config.ts b/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/config.ts
deleted file mode 100644
index c28731ca8..000000000
--- a/src/20240620_AaveV3Avalanche_SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork/config.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Avalanche'],
- title: 'Set ACI as Emission Manager for wAVAX on the Avalanche network',
- shortName: 'SetACIAsEmissionManagerForWAVAXOnTheAvalancheNetwork',
- date: '20240620',
- author: 'ACI',
- discussion:
- 'https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898/4',
- snapshot: '',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 46972185}}},
-};
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol b/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol
deleted file mode 100644
index a58b28392..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol
+++ /dev/null
@@ -1,23 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol';
-import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol';
-
-/**
- * @title Set ACI as Emission Manager
- * @author ACI
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x364de11d3a298f2c76721a8926cb32823cc29d0a95eadecbc0a98c628a38194b
- * - Discussion: https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898#arfc-set-aci-as-emission-manager-for-liquidity-mining-programs-1
- */
-contract AaveV3Arbitrum_SetACIAsEmissionManager_20240620 is IProposalGenericExecutor {
- address public constant ARB_EMISSION_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd;
-
- function execute() external {
- IEmissionManager(AaveV3Arbitrum.EMISSION_MANAGER).setEmissionAdmin(
- AaveV3ArbitrumAssets.ARB_UNDERLYING,
- ARB_EMISSION_ADMIN
- );
- }
-}
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.t.sol b/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.t.sol
deleted file mode 100644
index 9b5bbd5dc..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Arbitrum_SetACIAsEmissionManager_20240620} from './AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol';
-
-/**
- * @dev Test for AaveV3Arbitrum_SetACIAsEmissionManager_20240620
- * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.t.sol -vv
- */
-contract AaveV3Arbitrum_SetACIAsEmissionManager_20240620_Test is ProtocolV3TestBase {
- AaveV3Arbitrum_SetACIAsEmissionManager_20240620 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('arbitrum'), 223817611);
- proposal = new AaveV3Arbitrum_SetACIAsEmissionManager_20240620();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Arbitrum_SetACIAsEmissionManager_20240620',
- AaveV3Arbitrum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol b/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol
deleted file mode 100644
index 5bbd3a003..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol
+++ /dev/null
@@ -1,22 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol';
-
-/**
- * @title Set ACI as Emission Manager
- * @author ACI
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x364de11d3a298f2c76721a8926cb32823cc29d0a95eadecbc0a98c628a38194b
- * - Discussion: https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898#arfc-set-aci-as-emission-manager-for-liquidity-mining-programs-1
- */
-
-contract AaveV3Ethereum_SetACIAsEmissionManager_20240620 is IProposalGenericExecutor {
- address public constant SD = 0x30D20208d987713f46DFD34EF128Bb16C404D10f;
- address public constant SD_EMISSION_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd;
-
- function execute() external {
- IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(SD, SD_EMISSION_ADMIN);
- }
-}
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.t.sol b/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.t.sol
deleted file mode 100644
index d4bc0ebde..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.t.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_SetACIAsEmissionManager_20240620} from './AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_SetACIAsEmissionManager_20240620
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.t.sol -vv
- */
-contract AaveV3Ethereum_SetACIAsEmissionManager_20240620_Test is ProtocolV3TestBase {
- AaveV3Ethereum_SetACIAsEmissionManager_20240620 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20132543);
- proposal = new AaveV3Ethereum_SetACIAsEmissionManager_20240620();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_SetACIAsEmissionManager_20240620',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-}
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager.md b/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager.md
deleted file mode 100644
index a99b9d99d..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: "Set ACI as Emission Manager for Aave Liquidity Mining programs"
-author: "ACI"
-discussions: "https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898#arfc-set-aci-as-emission-manager-for-liquidity-mining-programs-1"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x364de11d3a298f2c76721a8926cb32823cc29d0a95eadecbc0a98c628a38194b"
----
-
-## Simple Summary
-
-The current ARFC proposes to appoint the Aave Chan Initiative (ACI) as the Emission Manager for liquidity mining programs across Aave instances. This will enable ACI to manage incentive programs funded by different partners, with the purpose of stimulating market activity and growth.
-
-## Motivation
-
-Liquidity mining programs are essential for attracting liquidity providers by offering rewards for their participation. Effective management of these programs is crucial for the sustained growth of the Aave Ecosystem. Therefore, ACI, with its extensive experience and strategic partnerships, is well-positioned to manage these emissions effectively.
-
-A recent example is the [Long Term Incentive Program (LTIPP)](https://forum.arbitrum.foundation/t/aave-ltipp-application-final/21741) from Arbitrum DAO, where Aave DAO will receive 750,000 ARB tokens, illustrating the benefits of coordinated emission management.
-
-## Specification
-
-- Appointment of ACI as Emission Manager for Liquidity Mining Programs
-
-1. ACI will be authorized to manage Emission Programs for Liquidity Mining across Aave Markets.
-2. ACI’s multisig address will be the one receiving and distributing emissions on behalf of the DAO.
-
-- Appointment of ACI as coordinator with ecosystem partners, to define and implement emission strategies, managing the distribution of rewards to liquidity providers, and monitor & adjust emissions based on market performance.
-- Integration of Liquidity mining program as part of “Dolce Vita” service of the ACI at no extra cost for the DAO.
-- Make the ACI multisig the emission manager for ARB on Arbitrum
-- Make the ACI multisig the emission manager for SD on Ethereum
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c8993d5412d87ad14204f5e065c267b301cd5d1/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c8993d5412d87ad14204f5e065c267b301cd5d1/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c8993d5412d87ad14204f5e065c267b301cd5d1/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Ethereum_SetACIAsEmissionManager_20240620.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c8993d5412d87ad14204f5e065c267b301cd5d1/src/20240620_Multi_SetACIAsEmissionManager/AaveV3Arbitrum_SetACIAsEmissionManager_20240620.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x364de11d3a298f2c76721a8926cb32823cc29d0a95eadecbc0a98c628a38194b)
-- [Discussion](https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898#arfc-set-aci-as-emission-manager-for-liquidity-mining-programs-1)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol b/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol
deleted file mode 100644
index 4c2514492..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol
+++ /dev/null
@@ -1,90 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
-import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
-import {EthereumScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_SetACIAsEmissionManager_20240620} from './AaveV3Ethereum_SetACIAsEmissionManager_20240620.sol';
-import {AaveV3Arbitrum_SetACIAsEmissionManager_20240620} from './AaveV3Arbitrum_SetACIAsEmissionManager_20240620.sol';
-
-/**
- * @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/SetACIAsEmissionManager_20240620.s.sol/1/run-latest.json
- */
-contract DeployEthereum is EthereumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_SetACIAsEmissionManager_20240620).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Deploy Arbitrum
- * deploy-command: make deploy-ledger contract=src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol:DeployArbitrum chain=arbitrum
- * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/SetACIAsEmissionManager_20240620.s.sol/42161/run-latest.json
- */
-contract DeployArbitrum is ArbitrumScript {
- function run() external broadcast {
- // deploy payloads
- address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Arbitrum_SetACIAsEmissionManager_20240620).creationCode
- );
-
- // compose action
- IPayloadsControllerCore.ExecutionAction[]
- memory actions = new IPayloadsControllerCore.ExecutionAction[](1);
- actions[0] = GovV3Helpers.buildAction(payload0);
-
- // register action at payloadsController
- GovV3Helpers.createPayload(actions);
- }
-}
-
-/**
- * @dev Create Proposal
- * command: make deploy-ledger contract=src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager_20240620.s.sol:CreateProposal chain=mainnet
- */
-contract CreateProposal is EthereumScript {
- function run() external {
- // create payloads
- PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2);
-
- // compose actions for validation
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_SetACIAsEmissionManager_20240620).creationCode
- );
- payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
-
- IPayloadsControllerCore.ExecutionAction[]
- memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1);
- actionsArbitrum[0] = GovV3Helpers.buildAction(
- type(AaveV3Arbitrum_SetACIAsEmissionManager_20240620).creationCode
- );
- payloads[1] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum);
-
- // create proposal
- vm.startBroadcast();
- GovV3Helpers.createProposal(
- vm,
- payloads,
- GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
- GovV3Helpers.ipfsHashFile(
- vm,
- 'src/20240620_Multi_SetACIAsEmissionManager/SetACIAsEmissionManager.md'
- )
- );
- }
-}
diff --git a/src/20240620_Multi_SetACIAsEmissionManager/config.ts b/src/20240620_Multi_SetACIAsEmissionManager/config.ts
deleted file mode 100644
index a85feabc6..000000000
--- a/src/20240620_Multi_SetACIAsEmissionManager/config.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- pools: ['AaveV3Ethereum', 'AaveV3Arbitrum'],
- title: 'Set ACI as Emission Manager',
- shortName: 'SetACIAsEmissionManager',
- date: '20240620',
- author: 'ACI',
- discussion:
- 'https://governance.aave.com/t/arfc-set-aci-as-emission-manager-for-liquidity-mining-programs/17898#arfc-set-aci-as-emission-manager-for-liquidity-mining-programs-1',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x364de11d3a298f2c76721a8926cb32823cc29d0a95eadecbc0a98c628a38194b',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20132543}},
- AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 223817611}},
- },
-};
diff --git a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol b/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol
deleted file mode 100644
index 3d63a53b8..000000000
--- a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AaveV3Ethereum, AaveV3EthereumEModes} 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';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
-
-/**
- * @title Onboard sUSDe to Aave V3 on Ethereum
- * @author Aave Chan Initiative
- * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9c6dcf2af7d79467f34e52b505c25d5e4c89af77f00396307d42fc4816797cd9
- * - Discussion: https://governance.aave.com/t/arfc-onboard-susde-to-aave-v3-on-ethereum/17191
- */
-contract AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621 is AaveV3PayloadEthereum {
- using SafeERC20 for IERC20;
-
- address public constant sUSDe = 0x9D39A5DE30e57443BfF2A8307A4256c8797A3497;
- uint256 public constant sUSDe_SEED_AMOUNT = 1e18;
-
- function _postExecute() internal override {
- IERC20(sUSDe).forceApprove(address(AaveV3Ethereum.POOL), sUSDe_SEED_AMOUNT);
- AaveV3Ethereum.POOL.supply(sUSDe, sUSDe_SEED_AMOUNT, address(AaveV3Ethereum.COLLECTOR), 0);
- }
-
- function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
- IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1);
-
- listings[0] = IAaveV3ConfigEngine.Listing({
- asset: sUSDe,
- assetSymbol: 'sUSDe',
- priceFeed: 0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A,
- eModeCategory: AaveV3EthereumEModes.NONE,
- enabledToBorrow: EngineFlags.DISABLED,
- stableRateModeEnabled: EngineFlags.DISABLED,
- borrowableInIsolation: EngineFlags.DISABLED,
- withSiloedBorrowing: EngineFlags.DISABLED,
- flashloanable: EngineFlags.ENABLED,
- ltv: 72_00,
- liqThreshold: 75_00,
- liqBonus: 8_50,
- reserveFactor: 20_00,
- supplyCap: 85_000_000,
- borrowCap: 0,
- debtCeiling: 40_000_000,
- liqProtocolFee: 10_00,
- rateStrategyParams: IV3RateStrategyFactory.RateStrategyParams({
- optimalUsageRatio: _bpsToRay(90_00),
- baseVariableBorrowRate: _bpsToRay(0),
- variableRateSlope1: _bpsToRay(0),
- variableRateSlope2: _bpsToRay(0),
- stableRateSlope1: _bpsToRay(0),
- stableRateSlope2: _bpsToRay(0),
- baseStableRateOffset: _bpsToRay(0),
- stableRateExcessOffset: _bpsToRay(0),
- optimalStableToTotalDebtRatio: _bpsToRay(0)
- })
- });
-
- return listings;
- }
-}
diff --git a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.t.sol b/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.t.sol
deleted file mode 100644
index ccb7eb744..000000000
--- a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.t.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
-import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
-import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
-
-import 'forge-std/Test.sol';
-import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
-import {AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621} from './AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol';
-
-/**
- * @dev Test for AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621
- * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.t.sol -vv
- */
-contract AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621_Test is ProtocolV3TestBase {
- AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621 internal proposal;
-
- function setUp() public {
- vm.createSelectFork(vm.rpcUrl('mainnet'), 20145914);
- proposal = new AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621();
- }
-
- /**
- * @dev executes the generic test suite including e2e and config snapshots
- */
- function test_defaultProposalExecution() public {
- defaultTest(
- 'AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621',
- AaveV3Ethereum.POOL,
- address(proposal)
- );
- }
-
- function test_collectorHassUSDeFunds() public {
- GovV3Helpers.executePayload(vm, address(proposal));
- (address aTokenAddress, , ) = AaveV3Ethereum
- .AAVE_PROTOCOL_DATA_PROVIDER
- .getReserveTokensAddresses(proposal.sUSDe());
- assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 10 ** 18);
- }
-}
diff --git a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum.md b/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum.md
deleted file mode 100644
index add722c17..000000000
--- a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: "Onboard sUSDe to Aave V3 on Ethereum"
-author: "Aave Chan Initiative"
-discussions: "https://governance.aave.com/t/arfc-onboard-susde-to-aave-v3-on-ethereum/17191"
-snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9c6dcf2af7d79467f34e52b505c25d5e4c89af77f00396307d42fc4816797cd9"
----
-
-## Simple Summary
-
-This is an ARFC to seek approval for the addition of sUSDe to Aave V3 on Ethereum, following the consensus reached in the [TEMP CHECK](https://snapshot.org/#/aave.eth/proposal/0x3263dbee34f5afe513a1a6c5bcd5207684cee03473e1b3d7616993dbd87ab881) and [ARFC](https://snapshot.org/#/aave.eth/proposal/0x9c6dcf2af7d79467f34e52b505c25d5e4c89af77f00396307d42fc4816797cd9) stage.
-
-## Motivation
-
-As discussed in the TEMP CHECK, Ethena's synthetic dollar, USDe, provides a stable crypto-native solution for a cash and carry structured product. The staked version of USDe, sUSDe, earns yield from the protocol and has high potential for strong collateral demand.
-
-## Specification
-
-Amendment: opposed to the initial snapshot the aip enables flashloaning to stay consistent with other assets on the network.
-
-The table below illustrates the configured risk parameters for **sUSDe**
-
-| Parameter | Value |
-| ---------------------------------- | -----------------------------------------: |
-| Isolation Mode | true |
-| Borrowable | DISABLED |
-| Collateral Enabled | true |
-| Supply Cap (sUSDe) | 85,000,000 |
-| Borrow Cap (sUSDe) | 0 |
-| Debt Ceiling | USD 40,000,000 |
-| LTV | 72 % |
-| LT | 75 % |
-| Liquidation Bonus | 8.5 % |
-| Liquidation Protocol Fee | 10 % |
-| Reserve Factor | 20 % |
-| Base Variable Borrow Rate | 0 % |
-| Variable Slope 1 | 0 % |
-| Variable Slope 2 | 0 % |
-| Uoptimal | 90 % |
-| Stable Borrowing | DISABLED |
-| Stable Slope1 | 0 % |
-| Stable Slope2 | 0 % |
-| Base Stable Rate Offset | 0 % |
-| Stable Rate Excess Offset | 0 % |
-| Optimal Stable To Total Debt Ratio | 0 % |
-| Flashloanable | ENABLED |
-| Siloed Borrowing | DISABLED |
-| Borrowable in Isolation | DISABLED |
-| Oracle | 0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A |
-
-## References
-
-- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3166c85ff34b56b61cf9019b1dce97bf0a2141b2/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol)
-- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3166c85ff34b56b61cf9019b1dce97bf0a2141b2/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.t.sol)
-- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9c6dcf2af7d79467f34e52b505c25d5e4c89af77f00396307d42fc4816797cd9)
-- [Discussion](https://governance.aave.com/t/arfc-onboard-susde-to-aave-v3-on-ethereum/17191)
-
-## Copyright
-
-Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/config.ts b/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/config.ts
deleted file mode 100644
index a523d457c..000000000
--- a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/config.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import {ConfigFile} from '../../generator/types';
-export const config: ConfigFile = {
- rootOptions: {
- author: 'Aave Chan Initiative',
- pools: ['AaveV3Ethereum'],
- title: 'Onboard sUSDe to Aave V3 on Ethereum',
- shortName: 'OnboardSUSDeToAaveV3OnEthereum',
- date: '20240621',
- discussion: 'https://governance.aave.com/t/arfc-onboard-susde-to-aave-v3-on-ethereum/17191',
- snapshot:
- 'https://snapshot.org/#/aave.eth/proposal/0x9c6dcf2af7d79467f34e52b505c25d5e4c89af77f00396307d42fc4816797cd9',
- votingNetwork: 'POLYGON',
- },
- poolOptions: {
- AaveV3Ethereum: {
- configs: {
- ASSET_LISTING: [
- {
- assetSymbol: 'sUSDe',
- decimals: 18,
- priceFeed: '0xb37aE8aBa6C0C1Bf2c509fc06E11aa4AF29B665A',
- ltv: '72',
- liqThreshold: '75',
- liqBonus: '8.5',
- debtCeiling: '40000000',
- liqProtocolFee: '10',
- enabledToBorrow: 'DISABLED',
- flashloanable: 'ENABLED',
- stableRateModeEnabled: 'DISABLED',
- borrowableInIsolation: 'DISABLED',
- withSiloedBorrowing: 'DISABLED',
- reserveFactor: '20',
- supplyCap: '85000000',
- borrowCap: '0',
- rateStrategyParams: {
- optimalUtilizationRate: '90',
- baseVariableBorrowRate: '0',
- variableRateSlope1: '0',
- variableRateSlope2: '0',
- stableRateSlope1: '0',
- stableRateSlope2: '0',
- baseStableRateOffset: '0',
- stableRateExcessOffset: '0',
- optimalStableToTotalDebtRatio: '0',
- },
- eModeCategory: 'AaveV3EthereumEModes.NONE',
- asset: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
- },
- ],
- },
- cache: {blockNumber: 20142490},
- },
- },
-};
diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol
new file mode 100644
index 000000000..60851aeae
--- /dev/null
+++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';
+
+/**
+ * @title Tooling Update Allowance
+ * @author TokenLogic
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x461571b38365b12ebe39b80d4d9663daa9c7e574cd4bf190ec6fb48dec96371f
+ * - Discussion: https://governance.aave.com/t/arfc-treasury-management-tooling-upgrade/15201
+ */
+contract AaveV3Ethereum_ToolingUpdateAllowance_20240707 is IProposalGenericExecutor {
+ address public constant TOKEN_LOGIC = 0x3e4A9f478C0c13A15137Fc81e9d8269F127b4B40;
+ uint256 public constant ALLOWANCE = 12_430 ether;
+
+ function execute() external {
+ AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.GHO_UNDERLYING, TOKEN_LOGIC, ALLOWANCE);
+ }
+}
diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol
new file mode 100644
index 000000000..a76cd609f
--- /dev/null
+++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol';
+import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol';
+
+import {AaveV3Ethereum_ToolingUpdateAllowance_20240707} from './AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol';
+
+/**
+ * @dev Test for AaveV3Ethereum_ToolingUpdateAllowance_20240707
+ * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol -vv
+ */
+contract AaveV3Ethereum_ToolingUpdateAllowance_20240707_Test is ProtocolV3TestBase {
+ AaveV3Ethereum_ToolingUpdateAllowance_20240707 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 20257930);
+ proposal = new AaveV3Ethereum_ToolingUpdateAllowance_20240707();
+ }
+
+ function test_defaultProposalExecution() public {
+ assertEq(
+ IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
+ address(AaveV3Ethereum.COLLECTOR),
+ proposal.TOKEN_LOGIC()
+ ),
+ 0
+ );
+
+ executePayload(vm, address(proposal));
+
+ assertEq(
+ IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance(
+ address(AaveV3Ethereum.COLLECTOR),
+ proposal.TOKEN_LOGIC()
+ ),
+ proposal.ALLOWANCE()
+ );
+ }
+}
diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance.md b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance.md
new file mode 100644
index 000000000..cd4113abc
--- /dev/null
+++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance.md
@@ -0,0 +1,41 @@
+---
+title: "Treasury Tooling Payment"
+author: "TokenLogic"
+discussions: "https://governance.aave.com/t/arfc-treasury-management-tooling-upgrade/15201"
+snapshot: "https://snapshot.org/#/aave.eth/proposal/0x461571b38365b12ebe39b80d4d9663daa9c7e574cd4bf190ec6fb48dec96371f"
+---
+
+# Summary
+
+This AIP grants payment to TokenLogic for 12,430 GHO for delivery of three asset bridging contracts.
+
+# Motivation
+
+For the Aave DAO to move assets between networks, intermediary contracts are required to link each Treasury to a preferred bridge, enabling assets to move between Treasury addresses. TokenLogic was engaged by Aave DAO to provide these intermediary bridging contracts, connecting Arbitrum, Optimism, and Avalanche to Ethereum.
+
+Due to technical considerations relating to the Avalanche bridge itself, the Avalanche-related scope was substituted with Polygon's Plasma bridge. The contracts developed by TokenLogic have been peer-reviewed and are in the process of being used for various funding proposals.
+
+The internal Aave asset bridging contracts are linked below:
+
+- [Optimism Bridge](https://github.com/bgd-labs/aave-helpers/pull/304)
+- [Arbitrum Bridge](https://github.com/bgd-labs/aave-helpers/pull/209)
+- [Plasma Bridge](https://github.com/bgd-labs/aave-helpers/pull/261)
+
+The Plasma contract was used within the [April Funding Update](https://app.aave.com/governance/v3/proposal/?proposalId=103) and both the Optimism and Arbitrum contracts within the [May Funding Update](https://github.com/bgd-labs/aave-proposals-v3/pull/370) proposal.
+
+# Specification
+
+Create an Allowance for 12,430 GHO to the following address.
+
+TokenLogic: `0x3e4A9f478C0c13A15137Fc81e9d8269F127b4B40`
+
+# References
+
+- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/ca87247401e8c2a38cf03f751ac197869c63daaf/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol)
+- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/ca87247401e8c2a38cf03f751ac197869c63daaf/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol)
+- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x461571b38365b12ebe39b80d4d9663daa9c7e574cd4bf190ec6fb48dec96371f)
+- [Discussion](https://governance.aave.com/t/arfc-treasury-management-tooling-upgrade/15201)
+
+# Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3_20240521.s.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol
similarity index 70%
rename from src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3_20240521.s.sol
rename to src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol
index 603362746..da17d41c0 100644
--- a/src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3_20240521.s.sol
+++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol
@@ -4,18 +4,18 @@ pragma solidity ^0.8.0;
import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_OnboardingETHxToAaveV3_20240521} from './AaveV3Ethereum_OnboardingETHxToAaveV3_20240521.sol';
+import {AaveV3Ethereum_ToolingUpdateAllowance_20240707} from './AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol';
/**
* @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3_20240521.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardingETHxToAaveV3_20240521.s.sol/1/run-latest.json
+ * deploy-command: make deploy-ledger contract=src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol:DeployEthereum chain=mainnet
+ * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ToolingUpdateAllowance_20240707.s.sol/1/run-latest.json
*/
contract DeployEthereum is EthereumScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_OnboardingETHxToAaveV3_20240521).creationCode
+ type(AaveV3Ethereum_ToolingUpdateAllowance_20240707).creationCode
);
// compose action
@@ -30,7 +30,7 @@ contract DeployEthereum is EthereumScript {
/**
* @dev Create Proposal
- * command: make deploy-ledger contract=src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3_20240521.s.sol:CreateProposal chain=mainnet
+ * command: make deploy-ledger contract=src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol:CreateProposal chain=mainnet
*/
contract CreateProposal is EthereumScript {
function run() external {
@@ -41,7 +41,7 @@ contract CreateProposal is EthereumScript {
IPayloadsControllerCore.ExecutionAction[]
memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_OnboardingETHxToAaveV3_20240521).creationCode
+ type(AaveV3Ethereum_ToolingUpdateAllowance_20240707).creationCode
);
payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
@@ -53,7 +53,7 @@ contract CreateProposal is EthereumScript {
GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
GovV3Helpers.ipfsHashFile(
vm,
- 'src/20240521_AaveV3Ethereum_OnboardingETHxToAaveV3/OnboardingETHxToAaveV3.md'
+ 'src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance.md'
)
);
}
diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/config.ts b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/config.ts
new file mode 100644
index 000000000..11b22965d
--- /dev/null
+++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/config.ts
@@ -0,0 +1,15 @@
+import {ConfigFile} from '../../generator/types';
+export const config: ConfigFile = {
+ rootOptions: {
+ pools: ['AaveV3Ethereum'],
+ title: 'Tooling Update Allowance',
+ shortName: 'ToolingUpdateAllowance',
+ date: '20240707',
+ author: 'TokenLogic',
+ discussion: 'https://governance.aave.com/t/arfc-treasury-management-tooling-upgrade/15201',
+ snapshot:
+ 'https://snapshot.org/#/aave.eth/proposal/0x461571b38365b12ebe39b80d4d9663daa9c7e574cd4bf190ec6fb48dec96371f',
+ votingNetwork: 'POLYGON',
+ },
+ poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20257930}}},
+};
diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol
new file mode 100644
index 000000000..bc95d02c0
--- /dev/null
+++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol
@@ -0,0 +1,149 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol';
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
+import {AaveV3PayloadEthereumLido} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereumLido.sol';
+import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
+import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol';
+import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol';
+import {IPoolAddressesProviderRegistry} from 'aave-v3-core/contracts/interfaces/IPoolAddressesProviderRegistry.sol';
+
+/**
+ * @title Lido Ethereum Instance Activation
+ * @author Catapulta @catapulta_sh
+ * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9403b7f704ade0d6510591e4846fd85c84b19d134c0814511af914751ecfad5d
+ * - Discussion: https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047
+ */
+contract AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720 is AaveV3PayloadEthereumLido {
+ using SafeERC20 for IERC20;
+
+ address public constant ACI_MULTISIG = 0xac140648435d03f784879cd789130F22Ef588Fcd;
+
+ address public constant wstETH = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0;
+ uint256 public constant wstETH_SEED_AMOUNT = 1e17;
+ address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
+ uint256 public constant WETH_SEED_AMOUNT = 1e17;
+
+ function _preExecute() internal override {
+ bytes32 incentivesControllerTagId = keccak256('INCENTIVES_CONTROLLER');
+ AaveV3EthereumLido.POOL_ADDRESSES_PROVIDER.setAddress(
+ incentivesControllerTagId,
+ address(AaveV3Ethereum.DEFAULT_INCENTIVES_CONTROLLER)
+ );
+ // Set Lido Ethereum as ID 43, previous instance is Scroll with ID 42
+ IPoolAddressesProviderRegistry(AaveV3Ethereum.POOL_ADDRESSES_PROVIDER_REGISTRY)
+ .registerAddressesProvider(address(AaveV3EthereumLido.POOL_ADDRESSES_PROVIDER), 43);
+ }
+
+ function _postExecute() internal override {
+ AaveV3EthereumLido.ACL_MANAGER.addPoolAdmin(0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30);
+ AaveV3EthereumLido.ACL_MANAGER.addRiskAdmin(AaveV3EthereumLido.CAPS_PLUS_RISK_STEWARD);
+
+ (address aEthLidoWETH, , ) = AaveV3EthereumLido
+ .AAVE_PROTOCOL_DATA_PROVIDER
+ .getReserveTokensAddresses(WETH);
+
+ IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(aEthLidoWETH, ACI_MULTISIG);
+ IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).setEmissionAdmin(WETH, ACI_MULTISIG);
+
+ // Seed wstETH and WETH to the pool
+ IERC20(wstETH).forceApprove(address(AaveV3EthereumLido.POOL), wstETH_SEED_AMOUNT);
+ AaveV3EthereumLido.POOL.supply(
+ wstETH,
+ wstETH_SEED_AMOUNT,
+ address(AaveV3Ethereum.COLLECTOR),
+ 0
+ );
+ IERC20(WETH).forceApprove(address(AaveV3EthereumLido.POOL), WETH_SEED_AMOUNT);
+ AaveV3EthereumLido.POOL.supply(WETH, WETH_SEED_AMOUNT, address(AaveV3Ethereum.COLLECTOR), 0);
+
+ // Catapulta service fee
+ AaveV3Ethereum.COLLECTOR.transfer(
+ MiscEthereum.GHO_TOKEN,
+ 0x6D53be86136c3d4AA6448Ce4bF6178AD66e63661,
+ 15000e18
+ );
+ }
+
+ function eModeCategoriesUpdates()
+ public
+ pure
+ override
+ returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory)
+ {
+ IAaveV3ConfigEngine.EModeCategoryUpdate[]
+ memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1);
+
+ eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({
+ eModeCategory: 1,
+ ltv: 93_50,
+ liqThreshold: 95_50,
+ liqBonus: 1_00,
+ priceSource: 0x0000000000000000000000000000000000000000,
+ label: 'ETH correlated'
+ });
+
+ return eModeUpdates;
+ }
+
+ function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) {
+ IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](2);
+
+ listings[0] = IAaveV3ConfigEngine.Listing({
+ asset: wstETH,
+ assetSymbol: 'wstETH',
+ priceFeed: 0xB4aB0c94159bc2d8C133946E7241368fc2F2a010,
+ eModeCategory: 1,
+ enabledToBorrow: EngineFlags.ENABLED,
+ stableRateModeEnabled: EngineFlags.DISABLED,
+ borrowableInIsolation: EngineFlags.DISABLED,
+ withSiloedBorrowing: EngineFlags.DISABLED,
+ flashloanable: EngineFlags.ENABLED,
+ ltv: 80_00,
+ liqThreshold: 81_00,
+ liqBonus: 6_00,
+ reserveFactor: 5_00,
+ supplyCap: 650_000,
+ borrowCap: 12_000,
+ debtCeiling: 0,
+ liqProtocolFee: 10_00,
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: 45_00,
+ baseVariableBorrowRate: 0,
+ variableRateSlope1: 3_50,
+ variableRateSlope2: 85_00
+ })
+ });
+ listings[1] = IAaveV3ConfigEngine.Listing({
+ asset: WETH,
+ assetSymbol: 'WETH',
+ priceFeed: 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419,
+ eModeCategory: 1,
+ enabledToBorrow: EngineFlags.ENABLED,
+ stableRateModeEnabled: EngineFlags.DISABLED,
+ borrowableInIsolation: EngineFlags.DISABLED,
+ withSiloedBorrowing: EngineFlags.DISABLED,
+ flashloanable: EngineFlags.ENABLED,
+ ltv: 82_00,
+ liqThreshold: 83_00,
+ liqBonus: 5_00,
+ reserveFactor: 10_00,
+ supplyCap: 900_000,
+ borrowCap: 810_000,
+ debtCeiling: 0,
+ liqProtocolFee: 10_00,
+ rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({
+ optimalUsageRatio: 90_00,
+ baseVariableBorrowRate: 0,
+ variableRateSlope1: 2_50,
+ variableRateSlope2: 85_00
+ })
+ });
+
+ return listings;
+ }
+}
diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol
new file mode 100644
index 000000000..0418f6673
--- /dev/null
+++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';
+import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol';
+import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';
+import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
+import {IPoolAddressesProviderRegistry} from 'aave-v3-core/contracts/interfaces/IPoolAddressesProviderRegistry.sol';
+import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol';
+import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
+
+import 'forge-std/Test.sol';
+import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol';
+import {AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720} from './AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol';
+import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
+
+/**
+ * @dev Test for AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720
+ * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol -vv
+ */
+contract AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720_Test is ProtocolV3TestBase {
+ AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720 internal proposal;
+
+ function setUp() public {
+ vm.createSelectFork(vm.rpcUrl('mainnet'), 20347071);
+ proposal = new AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720();
+
+ deal(proposal.WETH(), GovernanceV3Ethereum.EXECUTOR_LVL_1, 1e17);
+ deal(proposal.wstETH(), GovernanceV3Ethereum.EXECUTOR_LVL_1, 1e17);
+ }
+
+ /**
+ * @dev executes the generic test suite including e2e and config snapshots
+ */
+ function test_defaultProposalExecution() public {
+ defaultTest(
+ 'AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720',
+ AaveV3EthereumLido.POOL,
+ address(proposal)
+ );
+ }
+
+ function test_collectorHaswstETHFunds() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ (address aTokenAddress, , ) = AaveV3EthereumLido
+ .AAVE_PROTOCOL_DATA_PROVIDER
+ .getReserveTokensAddresses(proposal.wstETH());
+ assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 1e17);
+ }
+
+ function test_collectorHasWETHFunds() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ (address aTokenAddress, , ) = AaveV3EthereumLido
+ .AAVE_PROTOCOL_DATA_PROVIDER
+ .getReserveTokensAddresses(proposal.WETH());
+ assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Ethereum.COLLECTOR)), 1e17);
+ }
+
+ function test_lidoEthereumAddressesProvider_setAddress_incentivesController_Ethereum() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ assertEq(
+ AaveV3EthereumLido.POOL_ADDRESSES_PROVIDER.getAddress(keccak256('INCENTIVES_CONTROLLER')),
+ address(AaveV3Ethereum.DEFAULT_INCENTIVES_CONTROLLER)
+ );
+ }
+
+ function test_ethereumAddressesProviderRegistry_registry_lidoAddressesProvider() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ assertEq(
+ IPoolAddressesProviderRegistry(AaveV3Ethereum.POOL_ADDRESSES_PROVIDER_REGISTRY)
+ .getAddressesProviderIdByAddress(address(AaveV3EthereumLido.POOL_ADDRESSES_PROVIDER)),
+ 43
+ );
+ }
+
+ function test_lidoAclManager_roles() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ assertTrue(
+ AaveV3EthereumLido.ACL_MANAGER.isPoolAdmin(0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30)
+ );
+ assertTrue(
+ AaveV3EthereumLido.ACL_MANAGER.isRiskAdmin(AaveV3EthereumLido.CAPS_PLUS_RISK_STEWARD)
+ );
+ }
+
+ function test_emissions_admin() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ (address aWETH, , ) = AaveV3EthereumLido.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses(
+ proposal.WETH()
+ );
+ assertEq(
+ IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(aWETH),
+ proposal.ACI_MULTISIG()
+ );
+ assertEq(aWETH, 0xfA1fDbBD71B0aA16162D76914d69cD8CB3Ef92da);
+ assertEq(
+ IEmissionManager(AaveV3Ethereum.EMISSION_MANAGER).getEmissionAdmin(proposal.WETH()),
+ proposal.ACI_MULTISIG()
+ );
+ }
+
+ function test_deployment_service_fees() public {
+ GovV3Helpers.executePayload(vm, address(proposal));
+ assertEq(
+ IERC20(MiscEthereum.GHO_TOKEN).balanceOf(0x6D53be86136c3d4AA6448Ce4bF6178AD66e63661),
+ 15000e18
+ );
+ }
+}
diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation.md b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation.md
new file mode 100644
index 000000000..ae3bbb130
--- /dev/null
+++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation.md
@@ -0,0 +1,88 @@
+---
+title: "Lido Ethereum Instance Activation"
+author: "Catapulta @catapulta_sh"
+discussions: "https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047"
+snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9403b7f704ade0d6510591e4846fd85c84b19d134c0814511af914751ecfad5d"
+---
+
+## Simple Summary
+
+This AIP proposal activates the Ethereum Lido V3.1 instance, as discussed in [[ARFC] Deploy a Lido Aave v3 Instance](https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047).
+
+## Motivation
+
+Aave and Lido have historically seen symbiotic growth, with stETH being one of the premier collaterals on Aave and leveraged staking being one of the most profitable use cases for both Aave DAO and Lido users.
+
+Lido is in the process of launching the Lido Alliance, which will reward novel use cases of staked ETH and support further growth of the Lido ecosystem. This ARFC proposal suggests that Aave supports Lido Alliance efforts by deploying a new Aave V3 ETH market for Lido. This Aave v3 instance will be designed and tuned to support stETH leverage loopers. The deployment will only include wstETH and wETH assets with E-Mode enabled.
+
+Lido has committed incentive programs and ecosystem support for this instance in order to bootstrap liquidity and promote additional programs within the Lido Alliance.
+
+This instance will be bootstrapped with wETH from the Ahab program to attract wETH liquidity.
+
+wETH suppliers will also be proposed to be eligible to a dedicated Merit Boost
+
+## Specification
+
+The Lido Alliance’s Aave v3 instance payload implements the following:
+
+- Pre-execution:
+ - Sets Ethereum V3 Incentives Controller to manage Ethereum Lido incentives.
+ - Register Ethereum Lido instance in Ethereum V3 PoolAddressesProviderRegistry.
+- Execution:
+
+ - Add eMode category for ETH correlated assets:
+ - LTV: 93.50%
+ - LQT: 95.50%
+ - LiqBonus: 1%
+ - Oracle: Not set
+ - Label : 'Eth correlated'
+ - Listing of wstETH and WETH tokens.
+
+ The table below illustrates the configured risk parameters for **wstETH** and **WETH** tokens.
+
+| Parameter | wstETH | WETH |
+| ---------------------------------- | -----------------------------------------: | -----------------------------------------: |
+| Isolation Mode | false | false |
+| Borrowable | ENABLED | ENABLED |
+| Collateral Enabled | true | true |
+| Supply Cap (wstETH) | 650,000 | 900,000 |
+| Borrow Cap (wstETH) | 12,000 | 810,000 |
+| Debt Ceiling | USD 0 | USD 0 |
+| LTV | 80 % | 82 % |
+| LT | 81 % | 83 % |
+| Liquidation Bonus | 6 % | 5 % |
+| Liquidation Protocol Fee | 10 % | 10 % |
+| Reserve Factor | 5 % | 10 % |
+| Base Variable Borrow Rate | 0 % | 0 % |
+| Variable Slope 1 | 3.5 % | 2.5 % |
+| Variable Slope 2 | 85 % | 85 % |
+| Uoptimal | 45 % | 90 % |
+| Stable Borrowing | DISABLED | DISABLED |
+| Stable Slope1 | 0 % | 0 % |
+| Stable Slope2 | 0 % | 0 % |
+| Base Stable Rate Offset | 0 % | 0 % |
+| Stable Rate Excess Offset | 0 % | 0 % |
+| Optimal Stable To Total Debt Ratio | 0 % | 0 % |
+| Flashloanable | ENABLED | ENABLED |
+| Siloed Borrowing | DISABLED | DISABLED |
+| Borrowable in Isolation | DISABLED | DISABLED |
+| Oracle | 0xB4aB0c94159bc2d8C133946E7241368fc2F2a010 | 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 |
+
+- Post-execution:
+ - Set Ethereum PROTOCOL_GUARDIAN as temporary Pool Admin of Ethereum Lido instance.
+ - Set Risk Admin to CapsPlusRisk Steward contract, with **ACI** as admin of this steward that can bump caps with a delay of 2 days per cap update.
+ - Set **ACI** as emission admin of WETH and aWETH rewards for LM program.
+ - Seed initial wstETH and WETH token liquidity for security measures.
+ - Send 15.000 GHO as service fee for Catapulta deployment service provider.
+
+## References
+
+- Implementation: [payload](https://github.com/bgd-labs/aave-proposals-v3/blob/cca3d21be3bea0c591ebab6bf48b61234c2fac88/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol)
+- Permissions: [Lido Instances Permissions Table](https://github.com/bgd-labs/aave-permissions-book/blob/23b6085a2c5b9342f0c72d205808e10655489c3c/out/MAINNET-LIDO.md)
+- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/cca3d21be3bea0c591ebab6bf48b61234c2fac88/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol)
+- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9403b7f704ade0d6510591e4846fd85c84b19d134c0814511af914751ecfad5d)
+- [Discussion](https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047)
+
+## Copyright
+
+Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
diff --git a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol
similarity index 65%
rename from src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol
rename to src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol
index afbff5b8b..4329c1ce4 100644
--- a/src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol
+++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol
@@ -4,18 +4,18 @@ pragma solidity ^0.8.0;
import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol';
import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';
import {EthereumScript} from 'aave-helpers/ScriptUtils.sol';
-import {AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621} from './AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621.sol';
+import {AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720} from './AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol';
/**
* @dev Deploy Ethereum
- * deploy-command: make deploy-ledger contract=src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol:DeployEthereum chain=mainnet
- * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol/1/run-latest.json
+ * deploy-command: make deploy-ledger contract=src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol:DeployEthereum chain=mainnet
+ * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/LidoEthereumInstanceActivation_20240720.s.sol/1/run-latest.json
*/
contract DeployEthereum is EthereumScript {
function run() external broadcast {
// deploy payloads
address payload0 = GovV3Helpers.deployDeterministic(
- type(AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621).creationCode
+ type(AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720).creationCode
);
// compose action
@@ -30,7 +30,7 @@ contract DeployEthereum is EthereumScript {
/**
* @dev Create Proposal
- * command: make deploy-ledger contract=src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum_20240621.s.sol:CreateProposal chain=mainnet
+ * command: make deploy-ledger contract=src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol:CreateProposal chain=mainnet
*/
contract CreateProposal is EthereumScript {
function run() external {
@@ -41,7 +41,7 @@ contract CreateProposal is EthereumScript {
IPayloadsControllerCore.ExecutionAction[]
memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1);
actionsEthereum[0] = GovV3Helpers.buildAction(
- type(AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum_20240621).creationCode
+ type(AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720).creationCode
);
payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);
@@ -53,7 +53,7 @@ contract CreateProposal is EthereumScript {
GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL,
GovV3Helpers.ipfsHashFile(
vm,
- 'src/20240621_AaveV3Ethereum_OnboardSUSDeToAaveV3OnEthereum/OnboardSUSDeToAaveV3OnEthereum.md'
+ 'src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation.md'
)
);
}
diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/config.ts b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/config.ts
new file mode 100644
index 000000000..7a6b51f5a
--- /dev/null
+++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/config.ts
@@ -0,0 +1,95 @@
+import {ConfigFile} from '../../generator/types';
+export const config: ConfigFile = {
+ rootOptions: {
+ pools: ['AaveV3EthereumLido'],
+ title: 'Lido Ethereum Instance Activation',
+ shortName: 'LidoEthereumInstanceActivation',
+ date: '20240720',
+ author: 'Catapulta @catapulta_sh',
+ discussion: 'https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047',
+ snapshot:
+ 'https://snapshot.org/#/aave.eth/proposal/0x9403b7f704ade0d6510591e4846fd85c84b19d134c0814511af914751ecfad5d',
+ votingNetwork: 'POLYGON',
+ },
+ poolOptions: {
+ AaveV3EthereumLido: {
+ configs: {
+ EMODES_UPDATES: [
+ {
+ eModeCategory: 1,
+ ltv: '93.5',
+ liqThreshold: '95.5',
+ liqBonus: '1',
+ priceSource: '0x0000000000000000000000000000000000000000',
+ label: 'ETH Lido EMode',
+ },
+ ],
+ ASSET_LISTING: [
+ {
+ assetSymbol: 'wstETH',
+ decimals: 18,
+ priceFeed: '0xB4aB0c94159bc2d8C133946E7241368fc2F2a010',
+ ltv: '80',
+ liqThreshold: '81',
+ liqBonus: '6',
+ debtCeiling: '0',
+ liqProtocolFee: '10',
+ enabledToBorrow: 'ENABLED',
+ flashloanable: 'ENABLED',
+ stableRateModeEnabled: 'DISABLED',
+ borrowableInIsolation: 'DISABLED',
+ withSiloedBorrowing: 'DISABLED',
+ reserveFactor: '5',
+ supplyCap: '650000',
+ borrowCap: '12000',
+ rateStrategyParams: {
+ optimalUtilizationRate: '45',
+ baseVariableBorrowRate: '0',
+ variableRateSlope1: '3.5',
+ variableRateSlope2: '85',
+ stableRateSlope1: '0',
+ stableRateSlope2: '0',
+ baseStableRateOffset: '0',
+ stableRateExcessOffset: '0',
+ optimalStableToTotalDebtRatio: '0',
+ },
+ eModeCategory: '0',
+ asset: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
+ },
+ {
+ assetSymbol: 'WETH',
+ decimals: 18,
+ priceFeed: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419',
+ ltv: '82',
+ liqThreshold: '83',
+ liqBonus: '5',
+ debtCeiling: '0',
+ liqProtocolFee: '10',
+ enabledToBorrow: 'ENABLED',
+ flashloanable: 'ENABLED',
+ stableRateModeEnabled: 'DISABLED',
+ borrowableInIsolation: 'DISABLED',
+ withSiloedBorrowing: 'DISABLED',
+ reserveFactor: '10',
+ supplyCap: '900000',
+ borrowCap: '810000',
+ rateStrategyParams: {
+ optimalUtilizationRate: '90',
+ baseVariableBorrowRate: '0',
+ variableRateSlope1: '2.5',
+ variableRateSlope2: '85',
+ stableRateSlope1: '0',
+ stableRateSlope2: '0',
+ baseStableRateOffset: '0',
+ stableRateExcessOffset: '0',
+ optimalStableToTotalDebtRatio: '0',
+ },
+ eModeCategory: '0',
+ asset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
+ },
+ ],
+ },
+ cache: {blockNumber: 20347071},
+ },
+ },
+};
diff --git a/yarn.lock b/yarn.lock
index 401d2f296..fa7b1cf3e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -34,37 +34,37 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@bgd-labs/aave-address-book@^2.25.1", "@bgd-labs/aave-address-book@^2.26.1":
- version "2.26.1"
- resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-2.26.1.tgz#f1238a1a0826c26a2dd4090c59755e9d1079457a"
- integrity sha512-HkFgIZvZu8Kry+lXh+LuNcCHKf7sQQXjrxGHsh5AJgtdaOpiY76fFQUnZKIe3VaF84hABujB6QfKhNEaQxQIPw==
-
-"@bgd-labs/aave-cli@0.12.0":
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.12.0.tgz#fa191cd9482de3424d6a587e9a76750638139351"
- integrity sha512-enloPqeCMMh/I311PNshoGcvBwiy0PMJ0J1w9mhpNwf4pDAVBGMbWjZsi5/vglNQJ5VqrJw91MqWe6o8LeovfA==
- dependencies:
- "@bgd-labs/aave-address-book" "^2.25.1"
- "@bgd-labs/aave-v3-governance-cache" "^0.0.13"
- "@bgd-labs/js-utils" "^1.3.0"
+"@bgd-labs/aave-address-book@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c"
+ integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ==
+
+"@bgd-labs/aave-cli@0.16.2":
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.2.tgz#b995358aa5f3a86bdd61e7b539c56ba071e53e18"
+ integrity sha512-+X7crEcX1HPdbi+9ZUF0c2TJ0oA9hLseYBWM/ogN04P6hjoRzOCGb5Wv2lK0bhesI2+OWTAHI23am986veZiPQ==
+ dependencies:
+ "@bgd-labs/aave-address-book" "^3.0.0"
+ "@bgd-labs/aave-v3-governance-cache" "^1.0.6"
+ "@bgd-labs/js-utils" "^1.4.2"
"@commander-js/extra-typings" "^11.1.0"
"@inquirer/prompts" "^3.3.2"
chalk "^4.1.2"
commander "^11.1.0"
deepmerge "^4.3.1"
dotenv "^16.4.1"
- find-object-paths "^1.0.2"
+ find-object-paths "^1.1.0"
gray-matter "^4.0.3"
ipfs-only-hash "^4.0.0"
json-bigint "^1.0.0"
object-hash "^3.0.0"
- viem "^2.9.20"
- zod "^3.22.4"
+ viem "^2.17.11"
+ zod "^3.23.8"
-"@bgd-labs/aave-v3-governance-cache@^0.0.13":
- version "0.0.13"
- resolved "https://registry.yarnpkg.com/@bgd-labs/aave-v3-governance-cache/-/aave-v3-governance-cache-0.0.13.tgz#f63d0fe9b9f03b8605e2524b35a51aa9490ac2f4"
- integrity sha512-kXezI2gN6IeFQHOO2cjbIrrHmos2QuGTCKnn7t2nQcQHJ35wNBCX9+AZymoqROd6fyIgz7qTpatj+0/K5ifhdg==
+"@bgd-labs/aave-v3-governance-cache@^1.0.6":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-v3-governance-cache/-/aave-v3-governance-cache-1.0.6.tgz#a56268e5e759b84d3691c8b23f23743170d04468"
+ integrity sha512-FpWMBxt18c8pk+10gvWtHBuXhb1uVYF63PgIs6CY4WMSEs/42KCmGYJSamCNYR9nEEX4PVqjPViu3zBoqZOgCQ==
"@bgd-labs/js-utils@^1.3.0":
version "1.3.0"
@@ -76,6 +76,16 @@
gray-matter "^4.0.3"
tsx "^4.7.1"
+"@bgd-labs/js-utils@^1.4.2":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@bgd-labs/js-utils/-/js-utils-1.4.2.tgz#dd6d954fdda153d76cbcabaeff9b7e8adcf528b1"
+ integrity sha512-hKiorNIyEApdH1w7laYQ+sGkrCGZTem9kD5Ud7YP/ZKtkoPx12FcTAp+P+JZ42BerPEqzGLZMDRJDB2ZGKeAJw==
+ dependencies:
+ "@supercharge/promise-pool" "^3.1.1"
+ bs58 "^5.0.0"
+ gray-matter "^4.0.3"
+ tsx "^4.7.1"
+
"@commander-js/extra-typings@^11.1.0":
version "11.1.0"
resolved "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-11.1.0.tgz"
@@ -585,11 +595,30 @@
dependencies:
"@noble/hashes" "1.3.2"
+"@noble/curves@1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6"
+ integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==
+ dependencies:
+ "@noble/hashes" "1.4.0"
+
+"@noble/curves@^1.4.0", "@noble/curves@~1.4.0":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9"
+ integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==
+ dependencies:
+ "@noble/hashes" "1.4.0"
+
"@noble/hashes@1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2":
version "1.3.2"
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz"
integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==
+"@noble/hashes@1.4.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426"
+ integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz"
@@ -713,6 +742,11 @@
resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz"
integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==
+"@scure/base@~1.1.6":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30"
+ integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==
+
"@scure/bip32@1.3.2":
version "1.3.2"
resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz"
@@ -722,6 +756,15 @@
"@noble/hashes" "~1.3.2"
"@scure/base" "~1.1.2"
+"@scure/bip32@1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67"
+ integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==
+ dependencies:
+ "@noble/curves" "~1.4.0"
+ "@noble/hashes" "~1.4.0"
+ "@scure/base" "~1.1.6"
+
"@scure/bip39@1.2.1":
version "1.2.1"
resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz"
@@ -730,6 +773,14 @@
"@noble/hashes" "~1.3.0"
"@scure/base" "~1.1.0"
+"@scure/bip39@1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3"
+ integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==
+ dependencies:
+ "@noble/hashes" "~1.4.0"
+ "@scure/base" "~1.1.6"
+
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz"
@@ -854,6 +905,11 @@ abitype@1.0.0:
resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97"
integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==
+abitype@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6"
+ integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw==
+
acorn-walk@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
@@ -1322,10 +1378,10 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-find-object-paths@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/find-object-paths/-/find-object-paths-1.0.2.tgz#93148ebfda10aa1a4f44fa81f8c12d2b64d26754"
- integrity sha512-V6gO/vcQnimA/1H1XqYyfJEn+QxEkQqnUwc0WZJ1TJcNVOYD5JNfMTmEHKGUB93iMgebRXBi0WjsPITzK0HIWA==
+find-object-paths@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-object-paths/-/find-object-paths-1.1.0.tgz#2d2fe99f24c95e63af4b51377a1ba0510490376c"
+ integrity sha512-UJvfPQibLUOrXl76PJ49cYbXJPsU1lYX6Pw7mHVW+ahaGx6kVHiozNIQriDc/EOlSvkDa6L9GyTFXPYQsa6sGA==
find-up@^4.1.0:
version "4.1.0"
@@ -1566,6 +1622,11 @@ isows@1.0.3:
resolved "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz"
integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==
+isows@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061"
+ integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==
+
it-all@^1.0.5:
version "1.0.6"
resolved "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz"
@@ -2539,7 +2600,22 @@ varint@^6.0.0:
resolved "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz"
integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==
-viem@^2.9.20, viem@^2.9.25:
+viem@^2.17.11:
+ version "2.18.0"
+ resolved "https://registry.yarnpkg.com/viem/-/viem-2.18.0.tgz#ea0d037f0db356e6d71f1251243825345d6dc08f"
+ integrity sha512-HA4Dj+PCNWvvZDThWcUPg0sjiS8uwGRaxs3CMBOASL/j0p2pD4nR9vY/y/pAiRr491hGCnrSCVCmb/qqA57wIw==
+ dependencies:
+ "@adraffy/ens-normalize" "1.10.0"
+ "@noble/curves" "1.4.0"
+ "@noble/hashes" "1.4.0"
+ "@scure/bip32" "1.4.0"
+ "@scure/bip39" "1.3.0"
+ abitype "1.0.5"
+ isows "1.0.4"
+ webauthn-p256 "0.0.5"
+ ws "8.17.1"
+
+viem@^2.9.25:
version "2.9.25"
resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.25.tgz#afcf320790e175b2afc83d29819f56cb50906f0d"
integrity sha512-W0QOXCsYQppnV89PQP0EnCvfZIEsDYqmpVakLPNrok4Q4B7651M3MV/sYifYcLWv3Mn4KUyMCUlVxlej6CfC/w==
@@ -2601,6 +2677,14 @@ vitest@^1.4.0:
vite-node "1.4.0"
why-is-node-running "^2.2.2"
+webauthn-p256@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/webauthn-p256/-/webauthn-p256-0.0.5.tgz#0baebd2ba8a414b21cc09c0d40f9dd0be96a06bd"
+ integrity sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg==
+ dependencies:
+ "@noble/curves" "^1.4.0"
+ "@noble/hashes" "^1.4.0"
+
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
@@ -2652,6 +2736,11 @@ ws@8.13.0:
resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+ws@8.17.1:
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
+ integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
@@ -2672,7 +2761,7 @@ yocto-queue@^1.0.0:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
-zod@^3.22.4:
- version "3.22.4"
- resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz"
- integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
+zod@^3.23.8:
+ version "3.23.8"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
+ integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==