|
| 1 | +// SPDX-License-Identifier: BUSL-1.1 |
| 2 | +pragma solidity ^0.8.0; |
| 3 | + |
| 4 | +import {IAaveV3ConfigEngine as IEngine} from '../../contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; |
| 5 | +import {EngineFlags} from '../../contracts/extensions/v3-config-engine/EngineFlags.sol'; |
| 6 | +import {AaveV3Payload} from '../../contracts/extensions/v3-config-engine/AaveV3Payload.sol'; |
| 7 | + |
| 8 | +contract HorizonPhaseOneUpdate is AaveV3Payload { |
| 9 | + address public constant GHO_ADDRESS = 0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f; |
| 10 | + address public constant USDC_ADDRESS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; |
| 11 | + address public constant RLUSD_ADDRESS = 0x8292Bb45bf1Ee4d140127049757C2E0fF06317eD; |
| 12 | + address public constant USTB_ADDRESS = 0x43415eB6ff9DB7E26A15b704e7A3eDCe97d31C4e; |
| 13 | + address public constant USCC_ADDRESS = 0x14d60E7FDC0D71d8611742720E4C50E7a974020c; |
| 14 | + address public constant USYC_ADDRESS = 0x136471a34f6ef19fE571EFFC1CA711fdb8E49f2b; |
| 15 | + address public constant JTRSY_ADDRESS = 0x8c213ee79581Ff4984583C6a801e5263418C4b86; |
| 16 | + address public constant JAAA_ADDRESS = 0x5a0F93D040De44e78F251b03c43be9CF317Dcf64; |
| 17 | + |
| 18 | + constructor(address configEngine) AaveV3Payload(IEngine(configEngine)) {} |
| 19 | + |
| 20 | + function capsUpdates() public view override returns (IEngine.CapsUpdate[] memory) { |
| 21 | + IEngine.CapsUpdate[] memory caps = new IEngine.CapsUpdate[](8); |
| 22 | + |
| 23 | + caps[0] = IEngine.CapsUpdate({ |
| 24 | + asset: USTB_ADDRESS, |
| 25 | + supplyCap: 1_800_000, |
| 26 | + borrowCap: EngineFlags.KEEP_CURRENT |
| 27 | + }); |
| 28 | + |
| 29 | + caps[1] = IEngine.CapsUpdate({ |
| 30 | + asset: USCC_ADDRESS, |
| 31 | + supplyCap: 960_000, |
| 32 | + borrowCap: EngineFlags.KEEP_CURRENT |
| 33 | + }); |
| 34 | + |
| 35 | + caps[2] = IEngine.CapsUpdate({ |
| 36 | + asset: USYC_ADDRESS, |
| 37 | + supplyCap: 10_300_000, |
| 38 | + borrowCap: EngineFlags.KEEP_CURRENT |
| 39 | + }); |
| 40 | + |
| 41 | + caps[3] = IEngine.CapsUpdate({ |
| 42 | + asset: JTRSY_ADDRESS, |
| 43 | + supplyCap: 4_600_000, |
| 44 | + borrowCap: EngineFlags.KEEP_CURRENT |
| 45 | + }); |
| 46 | + |
| 47 | + caps[4] = IEngine.CapsUpdate({ |
| 48 | + asset: JAAA_ADDRESS, |
| 49 | + supplyCap: 9_900_000, |
| 50 | + borrowCap: EngineFlags.KEEP_CURRENT |
| 51 | + }); |
| 52 | + |
| 53 | + caps[5] = IEngine.CapsUpdate({asset: GHO_ADDRESS, supplyCap: 1_000_000, borrowCap: 900_000}); |
| 54 | + |
| 55 | + caps[6] = IEngine.CapsUpdate({ |
| 56 | + asset: RLUSD_ADDRESS, |
| 57 | + supplyCap: 30_000_000, |
| 58 | + borrowCap: 27_000_000 |
| 59 | + }); |
| 60 | + |
| 61 | + caps[7] = IEngine.CapsUpdate({ |
| 62 | + asset: USDC_ADDRESS, |
| 63 | + supplyCap: 16_000_000, |
| 64 | + borrowCap: 14_400_000 |
| 65 | + }); |
| 66 | + |
| 67 | + return caps; |
| 68 | + } |
| 69 | + |
| 70 | + function collateralsUpdates() public view override returns (IEngine.CollateralUpdate[] memory) { |
| 71 | + IEngine.CollateralUpdate[] memory collaterals = new IEngine.CollateralUpdate[](5); |
| 72 | + |
| 73 | + collaterals[0] = IEngine.CollateralUpdate({ |
| 74 | + asset: USTB_ADDRESS, |
| 75 | + ltv: 83_00, |
| 76 | + liqThreshold: 88_00, |
| 77 | + liqBonus: 3_00, |
| 78 | + debtCeiling: EngineFlags.KEEP_CURRENT, |
| 79 | + liqProtocolFee: EngineFlags.KEEP_CURRENT |
| 80 | + }); |
| 81 | + |
| 82 | + collaterals[1] = IEngine.CollateralUpdate({ |
| 83 | + asset: USCC_ADDRESS, |
| 84 | + ltv: 73_00, |
| 85 | + liqThreshold: 80_00, |
| 86 | + liqBonus: 7_50, |
| 87 | + debtCeiling: EngineFlags.KEEP_CURRENT, |
| 88 | + liqProtocolFee: EngineFlags.KEEP_CURRENT |
| 89 | + }); |
| 90 | + |
| 91 | + collaterals[2] = IEngine.CollateralUpdate({ |
| 92 | + asset: USYC_ADDRESS, |
| 93 | + ltv: 85_00, |
| 94 | + liqThreshold: 89_00, |
| 95 | + liqBonus: 3_10, |
| 96 | + debtCeiling: EngineFlags.KEEP_CURRENT, |
| 97 | + liqProtocolFee: EngineFlags.KEEP_CURRENT |
| 98 | + }); |
| 99 | + |
| 100 | + collaterals[3] = IEngine.CollateralUpdate({ |
| 101 | + asset: JTRSY_ADDRESS, |
| 102 | + ltv: 77_00, |
| 103 | + liqThreshold: 83_00, |
| 104 | + liqBonus: 4_50, |
| 105 | + debtCeiling: EngineFlags.KEEP_CURRENT, |
| 106 | + liqProtocolFee: EngineFlags.KEEP_CURRENT |
| 107 | + }); |
| 108 | + |
| 109 | + collaterals[4] = IEngine.CollateralUpdate({ |
| 110 | + asset: JAAA_ADDRESS, |
| 111 | + ltv: 71_00, |
| 112 | + liqThreshold: 78_00, |
| 113 | + liqBonus: 9_00, |
| 114 | + debtCeiling: EngineFlags.KEEP_CURRENT, |
| 115 | + liqProtocolFee: EngineFlags.KEEP_CURRENT |
| 116 | + }); |
| 117 | + |
| 118 | + return collaterals; |
| 119 | + } |
| 120 | + |
| 121 | + function eModeCategoriesUpdates() |
| 122 | + public |
| 123 | + pure |
| 124 | + override |
| 125 | + returns (IEngine.EModeCategoryUpdate[] memory) |
| 126 | + { |
| 127 | + IEngine.EModeCategoryUpdate[] memory eModeCategories = new IEngine.EModeCategoryUpdate[](6); |
| 128 | + |
| 129 | + // USTB Stablecoins |
| 130 | + eModeCategories[0] = IEngine.EModeCategoryUpdate({ |
| 131 | + eModeCategory: 1, |
| 132 | + ltv: EngineFlags.KEEP_CURRENT, |
| 133 | + liqThreshold: EngineFlags.KEEP_CURRENT, |
| 134 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 135 | + label: '' |
| 136 | + }); |
| 137 | + |
| 138 | + // USCC Stablecoins |
| 139 | + eModeCategories[1] = IEngine.EModeCategoryUpdate({ |
| 140 | + eModeCategory: 3, |
| 141 | + ltv: EngineFlags.KEEP_CURRENT, |
| 142 | + liqThreshold: EngineFlags.KEEP_CURRENT, |
| 143 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 144 | + label: '' |
| 145 | + }); |
| 146 | + |
| 147 | + // USCC GHO |
| 148 | + eModeCategories[2] = IEngine.EModeCategoryUpdate({ |
| 149 | + eModeCategory: 4, |
| 150 | + ltv: 74_00, |
| 151 | + liqThreshold: 81_00, |
| 152 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 153 | + label: EngineFlags.KEEP_CURRENT_STRING |
| 154 | + }); |
| 155 | + |
| 156 | + // USYC Stablecoins |
| 157 | + eModeCategories[3] = IEngine.EModeCategoryUpdate({ |
| 158 | + eModeCategory: 5, |
| 159 | + ltv: EngineFlags.KEEP_CURRENT, |
| 160 | + liqThreshold: EngineFlags.KEEP_CURRENT, |
| 161 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 162 | + label: '' |
| 163 | + }); |
| 164 | + |
| 165 | + // JTRSY Stablecoins |
| 166 | + eModeCategories[4] = IEngine.EModeCategoryUpdate({ |
| 167 | + eModeCategory: 7, |
| 168 | + ltv: EngineFlags.KEEP_CURRENT, |
| 169 | + liqThreshold: EngineFlags.KEEP_CURRENT, |
| 170 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 171 | + label: '' |
| 172 | + }); |
| 173 | + |
| 174 | + // JAAA Stablecoins |
| 175 | + eModeCategories[5] = IEngine.EModeCategoryUpdate({ |
| 176 | + eModeCategory: 9, |
| 177 | + ltv: EngineFlags.KEEP_CURRENT, |
| 178 | + liqThreshold: EngineFlags.KEEP_CURRENT, |
| 179 | + liqBonus: EngineFlags.KEEP_CURRENT, |
| 180 | + label: '' |
| 181 | + }); |
| 182 | + |
| 183 | + return eModeCategories; |
| 184 | + } |
| 185 | + |
| 186 | + function assetsEModeUpdates() public view override returns (IEngine.AssetEModeUpdate[] memory) { |
| 187 | + IEngine.AssetEModeUpdate[] memory assetsEMode = new IEngine.AssetEModeUpdate[](20); |
| 188 | + |
| 189 | + uint256 index = 0; |
| 190 | + |
| 191 | + // USTB Stablecoins |
| 192 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 193 | + asset: USTB_ADDRESS, |
| 194 | + eModeCategory: 1, |
| 195 | + collateral: EngineFlags.DISABLED, |
| 196 | + borrowable: EngineFlags.KEEP_CURRENT |
| 197 | + }); |
| 198 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 199 | + asset: USDC_ADDRESS, |
| 200 | + eModeCategory: 1, |
| 201 | + collateral: EngineFlags.KEEP_CURRENT, |
| 202 | + borrowable: EngineFlags.DISABLED |
| 203 | + }); |
| 204 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 205 | + asset: RLUSD_ADDRESS, |
| 206 | + eModeCategory: 1, |
| 207 | + collateral: EngineFlags.KEEP_CURRENT, |
| 208 | + borrowable: EngineFlags.DISABLED |
| 209 | + }); |
| 210 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 211 | + asset: GHO_ADDRESS, |
| 212 | + eModeCategory: 1, |
| 213 | + collateral: EngineFlags.KEEP_CURRENT, |
| 214 | + borrowable: EngineFlags.DISABLED |
| 215 | + }); |
| 216 | + |
| 217 | + // USCC Stablecoins |
| 218 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 219 | + asset: USCC_ADDRESS, |
| 220 | + eModeCategory: 3, |
| 221 | + collateral: EngineFlags.DISABLED, |
| 222 | + borrowable: EngineFlags.KEEP_CURRENT |
| 223 | + }); |
| 224 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 225 | + asset: USDC_ADDRESS, |
| 226 | + eModeCategory: 3, |
| 227 | + collateral: EngineFlags.KEEP_CURRENT, |
| 228 | + borrowable: EngineFlags.DISABLED |
| 229 | + }); |
| 230 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 231 | + asset: RLUSD_ADDRESS, |
| 232 | + eModeCategory: 3, |
| 233 | + collateral: EngineFlags.KEEP_CURRENT, |
| 234 | + borrowable: EngineFlags.DISABLED |
| 235 | + }); |
| 236 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 237 | + asset: GHO_ADDRESS, |
| 238 | + eModeCategory: 3, |
| 239 | + collateral: EngineFlags.KEEP_CURRENT, |
| 240 | + borrowable: EngineFlags.DISABLED |
| 241 | + }); |
| 242 | + |
| 243 | + // USYC Stablecoins |
| 244 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 245 | + asset: USYC_ADDRESS, |
| 246 | + eModeCategory: 5, |
| 247 | + collateral: EngineFlags.DISABLED, |
| 248 | + borrowable: EngineFlags.KEEP_CURRENT |
| 249 | + }); |
| 250 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 251 | + asset: USDC_ADDRESS, |
| 252 | + eModeCategory: 5, |
| 253 | + collateral: EngineFlags.KEEP_CURRENT, |
| 254 | + borrowable: EngineFlags.DISABLED |
| 255 | + }); |
| 256 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 257 | + asset: RLUSD_ADDRESS, |
| 258 | + eModeCategory: 5, |
| 259 | + collateral: EngineFlags.KEEP_CURRENT, |
| 260 | + borrowable: EngineFlags.DISABLED |
| 261 | + }); |
| 262 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 263 | + asset: GHO_ADDRESS, |
| 264 | + eModeCategory: 5, |
| 265 | + collateral: EngineFlags.KEEP_CURRENT, |
| 266 | + borrowable: EngineFlags.DISABLED |
| 267 | + }); |
| 268 | + |
| 269 | + // JTRSY Stablecoins |
| 270 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 271 | + asset: JTRSY_ADDRESS, |
| 272 | + eModeCategory: 7, |
| 273 | + collateral: EngineFlags.DISABLED, |
| 274 | + borrowable: EngineFlags.KEEP_CURRENT |
| 275 | + }); |
| 276 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 277 | + asset: USDC_ADDRESS, |
| 278 | + eModeCategory: 7, |
| 279 | + collateral: EngineFlags.KEEP_CURRENT, |
| 280 | + borrowable: EngineFlags.DISABLED |
| 281 | + }); |
| 282 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 283 | + asset: RLUSD_ADDRESS, |
| 284 | + eModeCategory: 7, |
| 285 | + collateral: EngineFlags.KEEP_CURRENT, |
| 286 | + borrowable: EngineFlags.DISABLED |
| 287 | + }); |
| 288 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 289 | + asset: GHO_ADDRESS, |
| 290 | + eModeCategory: 7, |
| 291 | + collateral: EngineFlags.KEEP_CURRENT, |
| 292 | + borrowable: EngineFlags.DISABLED |
| 293 | + }); |
| 294 | + |
| 295 | + // JAAA Stablecoins |
| 296 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 297 | + asset: JAAA_ADDRESS, |
| 298 | + eModeCategory: 9, |
| 299 | + collateral: EngineFlags.DISABLED, |
| 300 | + borrowable: EngineFlags.KEEP_CURRENT |
| 301 | + }); |
| 302 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 303 | + asset: USDC_ADDRESS, |
| 304 | + eModeCategory: 9, |
| 305 | + collateral: EngineFlags.KEEP_CURRENT, |
| 306 | + borrowable: EngineFlags.DISABLED |
| 307 | + }); |
| 308 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 309 | + asset: RLUSD_ADDRESS, |
| 310 | + eModeCategory: 9, |
| 311 | + collateral: EngineFlags.KEEP_CURRENT, |
| 312 | + borrowable: EngineFlags.DISABLED |
| 313 | + }); |
| 314 | + assetsEMode[index++] = IEngine.AssetEModeUpdate({ |
| 315 | + asset: GHO_ADDRESS, |
| 316 | + eModeCategory: 9, |
| 317 | + collateral: EngineFlags.KEEP_CURRENT, |
| 318 | + borrowable: EngineFlags.DISABLED |
| 319 | + }); |
| 320 | + |
| 321 | + require(index == assetsEMode.length, 'length mismatch'); |
| 322 | + |
| 323 | + return assetsEMode; |
| 324 | + } |
| 325 | + |
| 326 | + function getPoolContext() public pure override returns (IEngine.PoolContext memory) { |
| 327 | + return IEngine.PoolContext({networkName: 'Horizon RWA', networkAbbreviation: 'HorRwa'}); |
| 328 | + } |
| 329 | +} |
0 commit comments