feat: hub + spoke overview - #1293
Open
defispartan wants to merge 2 commits into
Open
Conversation
Forge Build Sizes🔕 Unchanged
|
♻️ Forge Gas Snapshots🔕 Unchanged
|
🌈 Test ResultsNo files changed, compilation skipped
Ran 19 tests for tests/contracts/spoke/AaveOracle.t.sol:AaveOracleTest
[PASS] test_constructor() (gas: 15306)
[PASS] test_decimals() (gas: 8358)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 16734, ~: 17061)
Logs:
Bound result 1
[PASS] test_getReservePrice() (gas: 46794)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 44603)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10899)
[PASS] test_getReservePrices() (gas: 76746)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 48911)
[PASS] test_getReserveSource() (gas: 47184)
[PASS] test_setReserveSource() (gas: 44249)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 97493)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17183)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 16954)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 12996)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 5029386)
[PASS] test_setSpoke() (gas: 5057683)
[PASS] test_setSpoke_revertsWith_InvalidAddress() (gas: 10870)
[PASS] test_setSpoke_revertsWith_OnlyDeployer(address) (runs: 5000, μ: 13442, ~: 13442)
[PASS] test_setSpoke_revertsWith_SpokeAlreadySet() (gas: 15102)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 1.07s (1.04s CPU time)
Ran 3 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.LiquidateCollateral.t.sol:LiquidationLogicLiquidateCollateralTest
[PASS] test_liquidateCollateral_fuzz(uint256,uint256,bool) (runs: 5000, μ: 211370, ~: 195686)
Logs:
Bound result 99999999999940000001
Bound result 13327
[PASS] test_liquidateCollateral_revertsWith_ArithmeticUnderflow() (gas: 28038)
[PASS] test_liquidateCollateral_revertsWith_ArithmeticUnderflow_FeeShares() (gas: 123714)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.90s (2.86s CPU time)
Ran 4 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.LiquidateDebt.t.sol:LiquidationLogicLiquidateDebtTest
[PASS] test_liquidateDebt_fuzz(uint256) (runs: 5000, μ: 236478, ~: 226680)
[PASS] test_liquidateDebt_revertsWith_ArithmeticUnderflow() (gas: 111896)
[PASS] test_liquidateDebt_revertsWith_InsufficientAllowance() (gas: 121308)
[PASS] test_liquidateDebt_revertsWith_InsufficientBalance() (gas: 181768)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.72s (3.70s CPU time)
Ran 4 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.LiquidateUser.t.sol:LiquidationLogicLiquidateUserTest
[PASS] test_liquidateUser() (gas: 383987)
[PASS] test_liquidateUser_revertsWith_InvalidDebtToCover() (gas: 78746)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Collateral() (gas: 149820)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Debt() (gas: 153950)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 74.11ms (4.88ms CPU time)
Ran 50 tests for tests/contracts/access/AccessManagerEnumerable.t.sol:AccessManagerEnumerableTest
[PASS] test_getLabelOfRole_revertsForAdminRole() (gas: 15937)
[PASS] test_getLabelOfRole_revertsForPublicRole() (gas: 15996)
[PASS] test_getLabelOfRole_revertsForUnlabeledRole() (gas: 15965)
[PASS] test_getLabelRole_revertsWithUnregisteredLabel() (gas: 11859)
[PASS] test_getRoleMembers_fuzz(uint256,uint256) (runs: 5000, μ: 2096845, ~: 2095721)
Logs:
Bound result 9
Bound result 10
[PASS] test_getRoleOfTargetSelector() (gas: 505164)
[PASS] test_getRoleOfTargetSelector_afterReassignment() (gas: 364143)
[PASS] test_getRoleTargetSelectors_fuzz(uint256,uint256) (runs: 5000, μ: 1743646, ~: 1742778)
Logs:
Bound result 9
Bound result 10
[PASS] test_grantRole() (gas: 435571)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 5000, μ: 1029869, ~: 1034661)
Logs:
Bound result 9
[PASS] test_isAdminRole() (gas: 245794)
[PASS] test_isAdminRole_excludesAdminRole() (gas: 89137)
[PASS] test_isAdminRole_multipleRoles() (gas: 441098)
[PASS] test_isLabelAssigned() (gas: 206189)
[PASS] test_isLabelAssigned_afterRelabel() (gas: 257137)
[PASS] test_isLabelAssigned_afterRemoval() (gas: 164483)
[PASS] test_isRole() (gas: 245831)
[PASS] test_isRoleLabeled() (gas: 204928)
[PASS] test_isRoleLabeled_afterRelabel() (gas: 256147)
[PASS] test_isRoleLabeled_afterRemoval() (gas: 163819)
[PASS] test_isRole_afterLabel() (gas: 201007)
[PASS] test_isRole_excludesAdminAndPublicRole() (gas: 218195)
[PASS] test_labelRole_onlyAuthorized_revertsWithUnauthorizedAccount() (gas: 13327)
[PASS] test_labelRole_relabel() (gas: 268258)
[PASS] test_labelRole_relabelTrackedRole_noDuplicate() (gas: 264781)
[PASS] test_labelRole_removeLabel() (gas: 175413)
[PASS] test_labelRole_removeLabelOnUnlabeledRole_revertsWithUnlabeledRole() (gas: 20083)
[PASS] test_labelRole_revertsWithAlreadyLabeledRole() (gas: 204993)
[PASS] test_labelRole_revertsWithAlreadyLabeledRole_evenIfLabelAlsoUsed() (gas: 347242)
[PASS] test_labelRole_revertsWithDuplicateLabel() (gas: 208101)
[PASS] test_labelRole_trackLabels() (gas: 368802)
[PASS] test_labelRole_tracksAlreadyTrackedRole_noDuplicate() (gas: 214156)
[PASS] test_labelRole_tracksUntrackedRole() (gas: 206424)
[PASS] test_renounceRole() (gas: 435727)
[PASS] test_renounceRole_shouldNotTrack() (gas: 24687)
[PASS] test_revokeRole() (gas: 437941)
[PASS] test_revokeRole_shouldNotTrack() (gas: 33311)
[PASS] test_setRoleAdmin_fuzz_trackAdminRoles_multipleRoles_multipleAdmins(uint256) (runs: 5000, μ: 2144605, ~: 2197017)
Logs:
Bound result 12
[PASS] test_setRoleAdmin_fuzz_trackRolesAndTrackAdminRoles_multipleRoles(uint256) (runs: 5000, μ: 1960884, ~: 1899644)
Logs:
Bound result 12
[PASS] test_setRoleAdmin_trackAdminOfRoles() (gas: 606296)
[PASS] test_setRoleAdmin_trackAdminOfRoles_changeAdminRole() (gas: 577396)
[PASS] test_setRoleAdmin_trackAdminRoles() (gas: 609417)
[PASS] test_setRoleAdmin_trackRolesAndTrackAdminRoles() (gas: 386651)
[PASS] test_setRoleGuardian_trackRoles() (gas: 266703)
[PASS] test_setTargetFunctionRole() (gas: 611297)
[PASS] test_setTargetFunctionRole_multipleTargets() (gas: 1198461)
[PASS] test_setTargetFunctionRole_removeTarget() (gas: 1029312)
[PASS] test_setTargetFunctionRole_skipAddPublicRole() (gas: 211675)
[PASS] test_setTargetFunctionRole_skipAddToAdminRole() (gas: 39629)
[PASS] test_setTargetFunctionRole_withReplace() (gas: 884760)
Suite result: ok. 50 passed; 0 failed; 0 skipped; finished in 24.09s (24.09s CPU time)
Ran 22 tests for tests/contracts/hub/AssetInterestRateStrategy.t.sol:AssetInterestRateStrategyTest
[PASS] test_calculateInterestRate_AtMaxUtilization() (gas: 24643)
Logs:
Bound result 10000
Bound result 778565440757296803935461404101
[PASS] test_calculateInterestRate_AtOptimalPoint() (gas: 24281)
Logs:
Bound result 2000
Bound result 778565440757296803935461404101
[PASS] test_calculateInterestRate_LeftToOptimalPoint(uint256) (runs: 5000, μ: 24191, ~: 24330)
Logs:
Bound result 137
Bound result 252173843969976304268974536488
[PASS] test_calculateInterestRate_RightToOptimalPoint(uint256) (runs: 5000, μ: 25366, ~: 25416)
Logs:
Bound result 8137
Bound result 252173843969976304268974536488
[PASS] test_calculateInterestRate_ZeroDebtZeroLiquidity() (gas: 18749)
Logs:
Bound result 0
[PASS] test_calculateInterestRate_fuzz_ZeroDebt(uint256) (runs: 5000, μ: 19050, ~: 18800)
Logs:
Bound result 3124043968137
[PASS] test_calculateInterestRate_revertsWith_InterestRateDataNotSet() (gas: 11226)
[PASS] test_deploy_revertsWith_InvalidAddress() (gas: 3724)
[PASS] test_getBaseDrawnRate() (gas: 14789)
[PASS] test_getInterestRateData() (gas: 19326)
[PASS] test_getMaxDrawnRate() (gas: 15235)
[PASS] test_getOptimalUsageRatio() (gas: 14750)
[PASS] test_getRateGrowthAfterOptimal() (gas: 14791)
[PASS] test_getRateGrowthBeforeOptimal() (gas: 14813)
[PASS] test_maxDrawnRate() (gas: 8270)
[PASS] test_maxOptimalRatio() (gas: 8313)
[PASS] test_minOptimalRatio() (gas: 8321)
[PASS] test_setInterestRateData() (gas: 68976)
[PASS] test_setInterestRateData_revertsWith_InvalidMaxDrawnRate() (gas: 41783)
[PASS] test_setInterestRateData_revertsWith_InvalidOptimalUsageRatio() (gas: 42401)
[PASS] test_setInterestRateData_revertsWith_InvalidRateData() (gas: 35313)
[PASS] test_setInterestRateData_revertsWith_OnlyHub() (gas: 23563)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 1.18s (1.16s CPU time)
Ran 6 tests for tests/contracts/position-manager/libraries/ConfigPermissionsMap.t.sol:ConfigPermissionsMapTest
[PASS] test_constants() (gas: 12031)
[PASS] test_getConfigPermissionValues(uint8) (runs: 5000, μ: 13703, ~: 13703)
[PASS] test_setCanSetUsingAsCollateral_fuzz(uint8,bool) (runs: 5000, μ: 10578, ~: 10566)
[PASS] test_setCanUpdateUserDynamicConfig_fuzz(uint8,bool) (runs: 5000, μ: 10602, ~: 10590)
[PASS] test_setCanUpdateUserRiskPremium_fuzz(uint8,bool) (runs: 5000, μ: 10634, ~: 10622)
[PASS] test_setGlobalPermissions_fuzz(bool) (runs: 5000, μ: 13145, ~: 13155)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.03s (1.03s CPU time)
Ran 10 tests for tests/contracts/spoke/configuration/Spoke.DynamicConfig.Triggers.t.sol:SpokeDynamicConfigTriggersTest
[PASS] test_borrow_triggers_dynamicConfigUpdate() (gas: 1506111)
[PASS] test_liquidate_does_not_trigger_dynamicConfigUpdate() (gas: 1790730)
[PASS] test_repay_does_not_trigger_dynamicConfigUpdate() (gas: 1058891)
[PASS] test_supply_does_not_trigger_dynamicConfigUpdate() (gas: 1277274)
[PASS] test_updateUserDynamicConfig_doesHFCheck() (gas: 945792)
[PASS] test_updateUserDynamicConfig_reverts_when_not_authorized(address) (runs: 5000, μ: 1287585, ~: 1287585)
[PASS] test_updateUserDynamicConfig_triggers_dynamicConfigUpdate() (gas: 733095)
[PASS] test_updateUserDynamicConfig_updatesRP() (gas: 1455009)
[PASS] test_usingAsCollateral_triggers_dynamicConfigUpdate() (gas: 1531925)
[PASS] test_withdraw_triggers_dynamicConfigUpdate() (gas: 1536691)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 28.94s (28.92s CPU time)
Ran 8 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.LiquidationAmounts.t.sol:LiquidationLogicLiquidationAmountsTest
[PASS] test_calculateLiquidationAmounts_EnoughCollateral() (gas: 176578)
[PASS] test_calculateLiquidationAmounts_InsufficientCollateral() (gas: 177239)
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_CollateralDust((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 298331, ~: 287447)
Logs:
Bound result 3
Bound result 2767
Bound result 443124196721905572
Bound result 14843
Bound result 8
Bound result 18
Bound result 13290
Bound result 5661
Bound result 1999999999999999997
Bound result 443124196721905572
Bound result 9304570613870847
Bound result 9
Bound result 999999999999999999999999999997
Bound result 1000000000000000000000000000
Bound result 28591
Bound result 54527
Bound result 6504484831365108
Bound result 7
Bound result 1109
Bound result 18850239771387979476210927906
Bound result 0
Bound result 6504484831365108
Bound result 26
Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoCollateralDust((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 251368, ~: 239697)
Logs:
Bound result 3
Bound result 2767
Bound result 443124196721905572
Bound result 14843
Bound result 8
Bound result 18
Bound result 13290
Bound result 5661
Bound result 1999999999999999997
Bound result 443124196721905572
Bound result 9304570613870847
Bound result 9
Bound result 999999999999999999999999999997
Bound result 1000000000000000000000000000
Bound result 28591
Bound result 54527
Bound result 6504484831365108
Bound result 7
Bound result 1109
Bound result 18850239771387979476210927906
Bound result 0
Bound result 18850239771387979476210927906
Bound result 999999999999999999999999999997
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoDebtLeft((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 269983, ~: 258288)
Logs:
Bound result 449773931704024038
Bound result 2029
Bound result 975000000000000000
Bound result 13212
Bound result 7
Bound result 690117525930955846287473086629380880116853955985747504966589821774
Bound result 10767
Bound result 6338
Bound result 1000000000000050001
Bound result 975000000000000000
Bound result 5949022044948992
Bound result 10
Bound result 3757
Bound result 99000000000000000004040511983
Bound result 824068
Bound result 298320
Bound result 604800
Bound result 14
Bound result 8745
Bound result 10000000
Bound result 2
Bound result 690117525930955846287473086629380880116853955985747504966589821774
Bound result 10767
Bound result 6338
Bound result 1000000000000050001
Bound result 975000000000000000
Bound result 5949022044948992
Bound result 10
Bound result 3757
Bound result 99000000000000000004040511983
Bound result 824068
Bound result 298320
Bound result 5949022044948992
Bound result 28
Bound result 1000000000000000000000010000001
Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639297
[PASS] test_calculateLiquidationAmounts_fuzz_InsufficientCollateral((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 256216, ~: 244898)
Logs:
Bound result 4170
Bound result 4233
Bound result 0
Bound result 14665
Bound result 11
Bound result 381
Bound result 14665
Bound result 4473
Bound result 1499999999999999974
Bound result 0
Bound result 10000000000000000
Bound result 17
Bound result 1893
Bound result 99000000000000000000000013026
Bound result 300
Bound result 9999887500001
Bound result 7001
Bound result 7
Bound result 165
Bound result 15484
Bound result 0
Bound result 15484
Bound result 1893
[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Collateral((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 280784, ~: 269392)
Logs:
Bound result 3886412
Bound result 2
Bound result 147
Bound result 12468
Bound result 6
Bound result 28951245481117846533722652
Bound result 12468
Bound result 3739
Bound result 1000109044247905327
Bound result 147
Bound result 1766670143596910
Bound result 14
Bound result 885000589634409638603543244567
Bound result 45625495039344622427514351693
Bound result 1
Bound result 45089934476
Bound result 9035404749081580
Bound result 15
Bound result 274
Bound result 471071379138868438154450132077
Bound result 5
Bound result 9035404749081580
Bound result 3252684925
Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935
[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Debt((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 261387, ~: 249631)
Logs:
Bound result 449773931704024038
Bound result 2029
Bound result 975000000000000000
Bound result 13212
Bound result 7
Bound result 690117525930955846287473086629380880116853955985747504966589821774
Bound result 10767
Bound result 6338
Bound result 1000000000000050001
Bound result 975000000000000000
Bound result 5949022044948992
Bound result 10
Bound result 3757
Bound result 99000000000000000004040511983
Bound result 824068
Bound result 298320
Bound result 604800
Bound result 14
Bound result 8745
Bound result 10000000
Bound result 2
Bound result 690117525930955846287473086629380880116853955985747504966589821774
Bound result 10767
Bound result 6338
Bound result 1000000000000050001
Bound result 975000000000000000
Bound result 5949022044948992
Bound result 10
Bound result 3757
Bound result 99000000000000000004040511983
Bound result 824068
Bound result 298320
Bound result 5949022044948992
Bound result 28
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 41.06s (41.01s CPU time)
Ran 4 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.LiquidationBonus.t.sol:LiquidationLogicLiquidationBonusTest
[PASS] test_calculateLiquidationBonus_MinBonusDueToRounding() (gas: 12555)
[PASS] test_calculateLiquidationBonus_PartialBonus() (gas: 12532)
[PASS] test_calculateLiquidationBonus_fuzz_ConstantBonus(uint256,uint256,uint256,uint256) (runs: 5000, μ: 20372, ~: 20151)
Logs:
Bound result 3535
Bound result 846
Bound result 0
Bound result 10290
[PASS] test_calculateLiquidationBonus_fuzz_MaxBonus(uint256,uint256,uint256,uint256) (runs: 5000, μ: 23294, ~: 23073)
Logs:
Bound result 3535
Bound result 846
Bound result 0
Bound result 10290
Bound result 0
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.23s (1.19s CPU time)
Ran 11 tests for tests/contracts/spoke/libraries/liquidation-logic/LiquidationLogic.ValidateLiquidationCall.t.sol:LiquidationLogicValidateLiquidationCallTest
[PASS] test_validateLiquidationCall() (gas: 26058)
[PASS] test_validateLiquidationCall_revertsWith_CannotReceiveShares() (gas: 259720)
[PASS] test_validateLiquidationCall_revertsWith_HealthFactorNotBelowThreshold() (gas: 31790)
[PASS] test_validateLiquidationCall_revertsWith_InvalidDebtToCover() (gas: 26862)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotBorrowed() (gas: 27001)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotEnabledAsCollateral_NotUsingAsCollateral() (gas: 27056)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotEnabledAsCollateral_ZeroCollateralFactor() (gas: 27063)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotSupplied() (gas: 26970)
[PASS] test_validateLiquidationCall_revertsWith_ReservePaused_CollateralPaused() (gas: 32012)
[PASS] test_validateLiquidationCall_revertsWith_ReservePaused_DebtPaused() (gas: 32012)
[PASS] test_validateLiquidationCall_revertsWith_SelfLiquidation() (gas: 33724)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 28.07ms (1.66ms CPU time)
Ran 21 tests for tests/contracts/spoke/configuration/Spoke.DynamicConfig.t.sol:SpokeDynamicConfigTest
[PASS] test_addDynamicReserveConfig() (gas: 79180)
[PASS] test_addDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_incompatible(uint16,uint32) (runs: 5000, μ: 46219, ~: 46391)
Logs:
Bound result 9010
Bound result 11100
[PASS] test_addDynamicReserveConfig_once() (gas: 508859)
[PASS] test_addDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 45602, ~: 45602)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 57217)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 40371)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 40878)
[PASS] test_addDynamicReserveConfig_revertsWith_MaximumDynamicConfigKeyReached() (gas: 43361)
[PASS] test_addDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28264)
[PASS] test_fuzz_addDynamicReserveConfig_spaced_dup_updates(bytes32) (runs: 5000, μ: 415388, ~: 445873)
[PASS] test_fuzz_addDynamicReserveConfig_trailing_order(bytes32) (runs: 5000, μ: 396633, ~: 429985)
[PASS] test_offboardReserve_existing_borrows_remain_unaffected() (gas: 1263146)
[PASS] test_updateDynamicReserveConfig() (gas: 1718912)
[PASS] test_updateDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus(uint16,uint32) (runs: 5000, μ: 56823, ~: 56995)
Logs:
Bound result 9010
Bound result 11100
[PASS] test_updateDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 45581, ~: 45581)
[PASS] test_updateDynamicReserveConfig_revertsWith_DynamicConfigKeyUninitialized() (gas: 48973)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactor() (gas: 50049)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 50783)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 50953)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 51457)
[PASS] test_updateDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28657)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 22.52s (22.49s CPU time)
Ran 5 tests for tests/gas/Spoke.Getters.gas.t.sol:SpokeGetters_Gas_Tests
[PASS] test_getUserAccountData() (gas: 23662)
[PASS] test_getUserAccountData_oneSupplies() (gas: 295196)
[PASS] test_getUserAccountData_twoSupplies() (gas: 537085)
[PASS] test_getUserAccountData_twoSupplies_oneBorrows() (gas: 1078969)
[PASS] test_getUserAccountData_twoSupplies_twoBorrows() (gas: 1661266)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 58.28ms (4.99ms CPU time)
Ran 29 tests for tests/contracts/libraries/math/MathUtils.t.sol:MathUtilsTest
[PASS] test_add_edge_cases() (gas: 4658)
[PASS] test_add_negative_operand(uint256,int256) (runs: 5000, μ: 9156, ~: 8920)
Logs:
Bound result -57896044618658097711785492504343953926634992332820282013197946218740589849150
[PASS] test_add_positive_operand(uint256,int256) (runs: 5000, μ: 3898, ~: 3894)
[PASS] test_calculateLinearInterest() (gas: 4433)
[PASS] test_calculateLinearInterest_add_edge() (gas: 4890)
[PASS] test_calculateLinearInterest_edge_cases() (gas: 16223)
Logs:
Bound result 0
Bound result 1
Bound result 864000000
Bound result 864000000
[PASS] test_calculateLinearInterest_reverts_on_past_timestamp(uint40) (runs: 5000, μ: 7606, ~: 7438)
Logs:
Bound result 9
[PASS] test_constants() (gas: 3110)
[PASS] test_fuzz_calculateLinearInterest(uint96,uint40,uint256) (runs: 5000, μ: 8640, ~: 8869)
Logs:
Bound result 10765498
[PASS] test_fuzz_divUp(uint256,uint256) (runs: 5000, μ: 3540, ~: 3544)
[PASS] test_fuzz_mulDivDown(uint256,uint256,uint256) (runs: 5000, μ: 3535, ~: 3599)
[PASS] test_fuzz_mulDivUp(uint256,uint256,uint256) (runs: 5000, μ: 3635, ~: 3769)
[PASS] test_min(uint256,uint256) (runs: 5000, μ: 3259, ~: 3260)
[PASS] test_mulDivDown_NoRemainder() (gas: 3290)
[PASS] test_mulDivDown_RevertOnDivByZero() (gas: 3085)
[PASS] test_mulDivDown_RevertOnOverflow() (gas: 3173)
[PASS] test_mulDivDown_WithRemainder() (gas: 3246)
[PASS] test_mulDivDown_ZeroAOrB() (gas: 3721)
[PASS] test_mulDivUp_NoRemainder() (gas: 3271)
[PASS] test_mulDivUp_RevertOnDivByZero() (gas: 3128)
[PASS] test_mulDivUp_RevertOnOverflow() (gas: 3174)
[PASS] test_mulDivUp_WithRemainder() (gas: 3293)
[PASS] test_mulDivUp_ZeroAOrB() (gas: 3771)
[PASS] test_signedSub(uint256,uint256) (runs: 5000, μ: 8624, ~: 8553)
Logs:
Bound result 68691281934999
Bound result 100
[PASS] test_signedSub_revertsWith_SafeCastOverflowedUintToInt(uint256) (runs: 5000, μ: 7649, ~: 7702)
Logs:
Bound result 57896044618658097711785492504343953926634992332820282019728792007080608788105
[PASS] test_uncheckedAdd(uint256,uint256) (runs: 5000, μ: 3469, ~: 3460)
[PASS] test_uncheckedExp(uint256,uint256) (runs: 5000, μ: 12726, ~: 10123)
[PASS] test_uncheckedSub(uint256,uint256) (runs: 5000, μ: 3445, ~: 3526)
[PASS] test_zeroFloorSub(uint256,uint256) (runs: 5000, μ: 3333, ~: 3298)
Suite result: ok. 29 passed; 0 failed; 0 skipped; finished in 3.62s (3.60s CPU time)
Ran 6 tests for tests/contracts/spoke/misc/Spoke.Getters.t.sol:SpokeGettersTest
[PASS] test_getLiquidationBonus_configured() (gas: 100881)
Logs:
Bound result 2
Bound result 1000000000000000000
Bound result 4000
Bound result 900000000000000000
[PASS] test_getLiquidationBonus_fuzz_configured(uint256,uint256,uint16,uint64) (runs: 5000, μ: 99668, ~: 100011)
Logs:
Bound result 1
Bound result 6862
Bound result 2999
Bound result 469390602750270781
[PASS] test_getLiquidationBonus_fuzz_notConfigured(uint256,uint256) (runs: 5000, μ: 77602, ~: 77822)
Logs:
Bound result 4
Bound result 100
[PASS] test_getLiquidationBonus_notConfigured() (gas: 78810)
Logs:
Bound result 2
Bound result 1000000000000000000
[PASS] test_premiumRayGetters() (gas: 1712630)
[PASS] test_protocol_getters() (gas: 303359)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.61s (2.57s CPU time)
Ran 4 tests for tests/contracts/spoke/liquidation/Spoke.LiquidationCall.Dust.t.sol:SpokeLiquidationCallDustTest
[PASS] test_collateralDust_min_debtToTarget() (gas: 18141111)
[PASS] test_debtToCover_exceeds_collateralValue() (gas: 18129444)
[PASS] test_dustColl_allowed() (gas: 17988464)
[PASS] test_dustDebt_allowed() (gas: 18119832)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 68.66ms (31.45ms CPU time)
Ran 14 tests for tests/contracts/spoke/liquidation/Spoke.LiquidationCall.Scenarios.t.sol:SpokeLiquidationCallScenariosTest
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 26375540)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 26245173)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubReportDeficit() (gas: 26358115)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRestore() (gas: 26321528)
[PASS] test_liquidationCall_scenario1() (gas: 4733599)
[PASS] test_liquidationCall_scenario2() (gas: 4741968)
[PASS] test_liquidationCall_scenario3() (gas: 3800889)
[PASS] test_liquidationCall_scenario4() (gas: 28132837)
[PASS] test_liquidationCall_scenario5() (gas: 3946383)
[PASS] test_liquidationCall_scenario6() (gas: 2711353)
[PASS] test_liquidationCall_scenario7() (gas: 3777151)
[PASS] test_liquidationCall_scenario8() (gas: 2540326)
[PASS] test_scenario_halted_asset() (gas: 27308008)
[PASS] test_scenario_halted_asset_with_deficit() (gas: 27150906)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 224.52ms (191.43ms CPU time)
Ran 26 tests for tests/contracts/position-manager/ConfigPositionManager/ConfigPositionManager.Permit.t.sol:ConfigPositionManagerPermitTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 5711)
[PASS] test_eip712Domain() (gas: 10941)
[PASS] test_setCanSetUsingAsCollateralPermissionPermit_typeHash() (gas: 9929)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158907, ~: 157939)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 145135, ~: 142739)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28471)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32786)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 61776)
[PASS] test_setCanUpdateUserDynamicConfigPermissionPermit_typeHash() (gas: 9863)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158846, ~: 157878)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 145112, ~: 142716)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28440)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32788)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 61767)
[PASS] test_setCanUpdateUserRiskPremiumPermissionPermit_typeHash() (gas: 9949)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158890, ~: 157922)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 145113, ~: 142717)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28417)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32755)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 61744)
[PASS] test_setGlobalPermissionPermit_typeHash() (gas: 10002)
[PASS] test_setGlobalPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 161308, ~: 160341)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 145095, ~: 142699)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28404)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32794)
[PASS] test_setGlobalPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 61729)
Suite result: ok. 26 passed; 0 failed; 0 skipped; finished in 49.15s (49.12s CPU time)
Ran 39 tests for tests/contracts/position-manager/ConfigPositionManager/ConfigPositionManager.t.sol:ConfigPositionManagerTest
[PASS] test_multicall() (gas: 85099)
[PASS] test_renounceCanUpdateUserDynamicConfigPermission() (gas: 42271)
[PASS] test_renounceCanUpdateUserDynamicConfigPermission_revertsWith_SpokeNotRegistered() (gas: 17467)
[PASS] test_renounceCanUpdateUserRiskPremiumPermission() (gas: 42236)
[PASS] test_renounceCanUpdateUserRiskPremiumPermission_revertsWith_SpokeNotRegistered() (gas: 17422)
[PASS] test_renounceCanUpdateUsingAsCollateralPermission() (gas: 42228)
[PASS] test_renounceCanUpdateUsingAsCollateralPermission_revertsWith_SpokeNotRegistered() (gas: 17446)
[PASS] test_renounceGlobalPermission() (gas: 43007)
[PASS] test_renounceGlobalPermission_revertsWith_SpokeNotRegistered() (gas: 17445)
[PASS] test_setCanSetUsingAsCollateralPermission() (gas: 52821)
[PASS] test_setCanSetUsingAsCollateralPermission_remove() (gas: 42299)
[PASS] test_setCanSetUsingAsCollateralPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17885)
[PASS] test_setCanSetUsingAsCollateralPermission_revertsWith_SpokeNotRegistered() (gas: 17475)
[PASS] test_setCanUpdateUserDynamicConfigPermission() (gas: 52830)
[PASS] test_setCanUpdateUserDynamicConfigPermission_remove() (gas: 42379)
[PASS] test_setCanUpdateUserDynamicConfigPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17960)
[PASS] test_setCanUpdateUserDynamicConfigPermission_revertsWith_SpokeNotRegistered() (gas: 17561)
[PASS] test_setCanUpdateUserRiskPremiumPermission() (gas: 52831)
[PASS] test_setCanUpdateUserRiskPremiumPermission_remove() (gas: 42396)
[PASS] test_setCanUpdateUserRiskPremiumPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17960)
[PASS] test_setCanUpdateUserRiskPremiumPermission_revertsWith_SpokeNotRegistered() (gas: 17520)
[PASS] test_setGlobalPermission() (gas: 54293)
[PASS] test_setGlobalPermission_removeAllPermissions() (gas: 43148)
[PASS] test_setGlobalPermission_removePreviousPermissions() (gas: 47752)
[PASS] test_setGlobalPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17889)
[PASS] test_setGlobalPermission_revertsWith_SpokeNotRegistered() (gas: 17562)
[PASS] test_setGlobalPermission_setThenRemove() (gas: 49401)
[PASS] test_setUsingAsCollateralOnBehalfOf_fuzz_withGlobalPermission(uint256,bool) (runs: 5000, μ: 111763, ~: 116602)
Logs:
Bound result 2
[PASS] test_setUsingAsCollateralOnBehalfOf_fuzz_withPermission(uint256,bool) (runs: 5000, μ: 111822, ~: 116661)
Logs:
Bound result 2
[PASS] test_setUsingAsCollateralOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 22151)
[PASS] test_setUsingAsCollateralOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17562)
[PASS] test_updateUserDynamicConfigOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 19930)
[PASS] test_updateUserDynamicConfigOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17489)
[PASS] test_updateUserDynamicConfigOnBehalfOf_withGlobalPermission() (gas: 74639)
[PASS] test_updateUserDynamicConfigOnBehalfOf_withPermission() (gas: 74696)
[PASS] test_updateUserRiskPremiumOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 19910)
[PASS] test_updateUserRiskPremiumOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17491)
[PASS] test_updateUserRiskPremiumOnBehalfOf_withGlobalPermission() (gas: 829706)
[PASS] test_updateUserRiskPremiumOnBehalfOf_withPermission() (gas: 829764)
Suite result: ok. 39 passed; 0 failed; 0 skipped; finished in 10.32s (10.29s CPU time)
Ran 8 tests for tests/contracts/position-manager/libraries/EIP712Hash.t.sol:EIP712HashTest
[PASS] test_constants() (gas: 11129)
[PASS] test_hash_borrow_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6689, ~: 6689)
[PASS] test_hash_repay_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6690, ~: 6690)
[PASS] test_hash_setUsingAsCollateral_fuzz((address,uint256,bool,address,uint256,uint256)) (runs: 5000, μ: 7148, ~: 7148)
[PASS] test_hash_supply_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6733, ~: 6733)
[PASS] test_hash_updateUserDynamicConfig_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6349, ~: 6349)
[PASS] test_hash_updateUserRiskPremium_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6370, ~: 6370)
[PASS] test_hash_withdraw_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6711, ~: 6711)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 5.06s (5.06s CPU time)
Ran 41 tests for tests/contracts/position-manager/NativeTokenGateway.t.sol:NativeTokenGatewayTest
[PASS] test_borrowNative() (gas: 676349)
Logs:
Bound result 5000000000000000000
[PASS] test_borrowNative_fuzz(uint256) (runs: 5000, μ: 675784, ~: 677038)
Logs:
Bound result 3124043968137
[PASS] test_borrowNative_revertsWith_InvalidAmount() (gas: 32511)
[PASS] test_borrowNative_revertsWith_NotNativeWrappedAsset() (gas: 32564)
[PASS] test_borrowNative_revertsWith_ReentrancyGuardReentrantCall_hubDraw() (gas: 283116)
[PASS] test_borrowNative_revertsWith_ReentrancyGuardReentrantCall_spokeBorrow() (gas: 271200)
[PASS] test_borrowNative_revertsWith_SpokeNotRegistered() (gas: 25379)
[PASS] test_constructor() (gas: 12742)
[PASS] test_constructor_revertsWith_InvalidAddress() (gas: 5936)
[PASS] test_fallback_revertsWith_UnsupportedAction() (gas: 17639)
[PASS] test_multicall_revertsWith_UnsupportedAction() (gas: 11200)
[PASS] test_receive_revertsWith_UnsupportedAction() (gas: 17408)
[PASS] test_repayNative() (gas: 773191)
Logs:
Bound result 5000000000000000000
[PASS] test_repayNative_excessAmount() (gas: 681691)
[PASS] test_repayNative_fuzz(uint256) (runs: 5000, μ: 769046, ~: 773802)
Logs:
Bound result 3124043968137
[PASS] test_repayNative_fuzz_withInterest(uint256,uint256) (runs: 5000, μ: 692692, ~: 687774)
Logs:
Bound result 90000068691281935000
Bound result 25920101
[PASS] test_repayNative_revertsWith_InvalidAmount() (gas: 32459)
[PASS] test_repayNative_revertsWith_NativeAmountMismatch() (gas: 30069)
[PASS] test_repayNative_revertsWith_NotNativeWrappedAsset() (gas: 39272)
[PASS] test_repayNative_revertsWith_ReentrancyGuardReentrantCall_hubRestore() (gas: 331633)
[PASS] test_repayNative_revertsWith_ReentrancyGuardReentrantCall_spokeRepay() (gas: 308258)
[PASS] test_repayNative_revertsWith_SpokeNotRegistered() (gas: 38722)
[PASS] test_supplyAndCollateralNative() (gas: 340285)
Logs:
Bound result 100000000000000000000
[PASS] test_supplyAndCollateralNative_fuzz(uint256) (runs: 5000, μ: 340582, ~: 340291)
Logs:
Bound result 3124043968137
[PASS] test_supplyNative() (gas: 311958)
Logs:
Bound result 100000000000000000000
[PASS] test_supplyNative_fuzz(uint256) (runs: 5000, μ: 312298, ~: 312007)
Logs:
Bound result 3124043968137
[PASS] test_supplyNative_revertsWith_InvalidAmount() (gas: 32524)
[PASS] test_supplyNative_revertsWith_NativeAmountMismatch() (gas: 29942)
[PASS] test_supplyNative_revertsWith_NotNativeWrappedAsset() (gas: 39259)
[PASS] test_supplyNative_revertsWith_ReentrancyGuardReentrantCall_hubAdd() (gas: 374255)
[PASS] test_supplyNative_revertsWith_ReentrancyGuardReentrantCall_spokeSupply() (gas: 336151)
[PASS] test_supplyNative_revertsWith_SpokeNotRegistered() (gas: 38712)
[PASS] test_withdrawNative() (gas: 339984)
Logs:
Bound result 100000000000000000000
[PASS] test_withdrawNative_fuzz(uint256) (runs: 5000, μ: 339575, ~: 340011)
Logs:
Bound result 3124043968137
[PASS] test_withdrawNative_fuzz_allBalance(uint256) (runs: 5000, μ: 273447, ~: 273243)
Logs:
Bound result 3124043968137
[PASS] test_withdrawNative_fuzz_allBalanceWithInterest(uint256,uint256) (runs: 5000, μ: 625022, ~: 624956)
Logs:
Bound result 68691281934999
Bound result 100
[PASS] test_withdrawNative_revertsWith_InvalidAmount() (gas: 32497)
[PASS] test_withdrawNative_revertsWith_NotNativeWrappedAsset() (gas: 32553)
[PASS] test_withdrawNative_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 304919)
[PASS] test_withdrawNative_revertsWith_ReentrancyGuardReentrantCall_spokeWithdraw() (gas: 271219)
[PASS] test_withdrawNative_revertsWith_SpokeNotRegistered() (gas: 25346)
Suite result: ok. 41 passed; 0 failed; 0 skipped; finished in 72.09s (72.07s CPU time)
Ran 3 tests for tests/contracts/utils/NoncesKeyed.t.sol:NoncesKeyedTest
[PASS] test_useCheckedNonce_monotonic(bytes32) (runs: 5000, μ: 12861, ~: 12861)
[PASS] test_useCheckedNonce_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 95304, ~: 94399)
[PASS] test_useNonce_monotonic(bytes32) (runs: 5000, μ: 13573, ~: 13573)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.00s (3.99s CPU time)
Ran 10 tests for tests/contracts/libraries/math/PercentageMath.t.sol:PercentageMathTest
[PASS] test_constants() (gas: 8604)
[PASS] test_fromBpsDown() (gas: 9654)
[PASS] test_percentDiv() (gas: 14993)
[PASS] test_percentDivUp_ge_value(uint256,uint256) (runs: 5000, μ: 15140, ~: 15261)
Logs:
Bound result 100
Bound result 68691281934999
[PASS] test_percentDivUp_le_value(uint256,uint256) (runs: 5000, μ: 15347, ~: 15347)
Logs:
Bound result 90101
Bound result 68691281934999
[PASS] test_percentDiv_fuzz(uint256,uint256) (runs: 5000, μ: 12594, ~: 12760)
[PASS] test_percentMul() (gas: 14932)
[PASS] test_percentMulUp_ge_value(uint256,uint256) (runs: 5000, μ: 15330, ~: 15330)
Logs:
Bound result 90101
Bound result 68691281934999
[PASS] test_percentMulUp_le_value(uint256,uint256) (runs: 5000, μ: 15143, ~: 15264)
Logs:
Bound result 100
Bound result 68691281934999
[PASS] test_percentMul_fuzz(uint256,uint256) (runs: 5000, μ: 11515, ~: 12063)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 1.52s (1.52s CPU time)
Ran 17 tests for tests/contracts/position-manager/PositionManagerBase.t.sol:PositionManagerBaseTest
[PASS] test_constructor() (gas: 17254)
[PASS] test_getReserveUnderlying_fuzz(uint256) (runs: 5000, μ: 36863, ~: 36919)
Logs:
Bound result 2
[PASS] test_getReserveUnderlying_revertsWith_ReserveNotListed() (gas: 25763)
[PASS] test_multicall() (gas: 73159)
[PASS] test_multicall_atomicity_on_revert() (gas: 48159)
[PASS] test_multicall_revertsWith_UnsupportedAction() (gas: 11221)
[PASS] test_permitReserveUnderlying() (gas: 128723)
[PASS] test_permitReserveUnderlying_forwards_correct_call() (gas: 78212)
[PASS] test_permitReserveUnderlying_ignores_permit_reverts() (gas: 67290)
[PASS] test_permitReserveUnderlying_revertsWith_ReserveNotListed() (gas: 58196)
[PASS] test_registerSpoke_fuzz(address) (runs: 5000, μ: 41663, ~: 41663)
[PASS] test_registerSpoke_revertsWith_InvalidAddress() (gas: 13110)
[PASS] test_registerSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 15958)
[PASS] test_registerSpoke_unregister() (gas: 36135)
[PASS] test_renouncePositionManagerRole() (gas: 65482)
[PASS] test_renouncePositionManagerRole_revertsWith_OwnableUnauthorizedAccount() (gas: 74573)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 131411)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 1.03s (998.67ms CPU time)
Ran 10 tests for tests/contracts/position-manager/libraries/PositionManagerEIP712Hash.t.sol:PositionManagerEIP712HashTest
[PASS] test_constants() (gas: 13441)
[PASS] test_hash_borrowPermit_fuzz((address,uint256,address,address,uint256,uint256,uint256)) (runs: 5000, μ: 4833, ~: 4833)
[PASS] test_hash_borrow_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6689, ~: 6689)
[PASS] test_hash_repay_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6690, ~: 6690)
[PASS] test_hash_setUsingAsCollateral_fuzz((address,uint256,bool,address,uint256,uint256)) (runs: 5000, μ: 7126, ~: 7126)
[PASS] test_hash_supply_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6733, ~: 6733)
[PASS] test_hash_updateUserDynamicConfig_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6349, ~: 6349)
[PASS] test_hash_updateUserRiskPremium_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6370, ~: 6370)
[PASS] test_hash_withdrawPermit_fuzz((address,uint256,address,address,uint256,uint256,uint256)) (runs: 5000, μ: 4832, ~: 4832)
[PASS] test_hash_withdraw_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6689, ~: 6689)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 5.41s (5.41s CPU time)
Ran 11 tests for tests/gas/PositionManagers.Operations.gas.t.sol:ConfigPositionManager_Gas_Tests
[PASS] test_renounceCanUpdateUserDynamicConfigPermission() (gas: 93932)
[PASS] test_renounceCanUpdateUserRiskPremiumPermission() (gas: 93889)
[PASS] test_renounceCanUpdateUsingAsCollateralPermission() (gas: 93890)
[PASS] test_renounceGlobalPermission() (gas: 93783)
[PASS] test_setCanSetUsingAsCollateralPermission() (gas: 69564)
[PASS] test_setCanUpdateUserDynamicConfigPermission() (gas: 69605)
[PASS] test_setCanUpdateUserRiskPremiumPermission() (gas: 69562)
[PASS] test_setGlobalPermission() (gas: 69518)
[PASS] test_setUsingAsCollateralOnBehalfOf_fuzz_withGlobalPermission() (gas: 147866)
[PASS] test_updateUserDynamicConfigOnBehalfOf_withGlobalPermission() (gas: 123022)
[PASS] test_updateUserRiskPremiumOnBehalfOf_withGlobalPermission() (gas: 733947)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 50.81ms (2.51ms CPU time)
Ran 2 tests for tests/gas/PositionManagers.Operations.gas.t.sol:GiverPositionManager_Gas_Tests
[PASS] test_repayOnBehalfOf() (gas: 950233)
[PASS] test_supplyOnBehalfOf() (gas: 292431)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 49.00ms (1.89ms CPU time)
Ran 1 test for tests/gas/PositionManagers.Operations.gas.t.sol:PositionManager_Gas_Tests
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 215967)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 47.39ms (841.89µs CPU time)
Ran 8 tests for tests/gas/PositionManagers.Operations.gas.t.sol:TakerPositionManager_Gas_Tests
[PASS] test_approveBorrow() (gas: 69198)
[PASS] test_approveBorrowWithSig() (gas: 155463)
[PASS] test_approveWithdraw() (gas: 69205)
[PASS] test_approveWithdrawWithSig() (gas: 155448)
[PASS] test_borrowOnBehalfOf() (gas: 794038)
[PASS] test_renounceBorrowAllowance() (gas: 93678)
[PASS] test_renounceWithdrawAllowance() (gas: 93741)
[PASS] test_withdrawOnBehalfOf() (gas: 607569)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 50.55ms (3.87ms CPU time)
Ran 3 tests for tests/contracts/utils/ExtSload.t.sol:ExtSloadTest
[PASS] test_extSload(bytes32) (runs: 5000, μ: 9767, ~: 9767)
[PASS] test_extSloads(uint256) (runs: 5000, μ: 952128, ~: 914497)
Logs:
Bound result 812
[PASS] test_extSloads(uint256,bytes) (runs: 5000, μ: 1003570, ~: 955120)
Logs:
Bound result 362
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 61.40s (61.40s CPU time)
Ran 5 tests for tests/gas/Gateways.Operations.gas.t.sol:NativeTokenGateway_Gas_Tests
[PASS] test_borrowNative() (gas: 947983)
[PASS] test_repayNative() (gas: 1020514)
[PASS] test_supplyAndCollateralNative() (gas: 315108)
[PASS] test_supplyNative() (gas: 294582)
[PASS] test_withdrawNative() (gas: 527815)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 50.71ms (4.50ms CPU time)
Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 766879)
[PASS] test_repayWithSig() (gas: 983023)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 209294)
[PASS] test_setUsingAsCollateralWithSig() (gas: 294316)
[PASS] test_supplyWithSig() (gas: 447274)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 145250)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 143093)
[PASS] test_withdrawWithSig() (gas: 423521)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 55.98ms (8.53ms CPU time)
Ran 21 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.HealthFactor.t.sol:SpokeWithdrawHealthFactorTest
[PASS] test_unsetCollateral_fuzz_revertsWith_HealthFactorBelowThreshold(uint256) (runs: 5000, μ: 917470, ~: 917078)
Logs:
Bound result 3124043968137
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_interest_increase(uint256,uint256) (runs: 5000, μ: 666458, ~: 666838)
Logs:
Bound result 80
Bound result 327323530
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 5000, μ: 897442, ~: 897544)
Logs:
Bound result 2867247507249
Bound result 2917432920835457
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai(uint256,uint256,uint256) (runs: 5000, μ: 1160991, ~: 1161267)
Logs:
Bound result 2
Bound result 1100000000000000000
Bound result 96
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth(uint256,uint256,uint256) (runs: 5000, μ: 1161429, ~: 1161283)
Logs:
Bound result 200000000
Bound result 1100000000000000000
Bound result 96
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256) (runs: 5000, μ: 952450, ~: 953011)
Logs:
Bound result 2867247507249
Bound result 2917432920835457
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 5000, μ: 1020824, ~: 1020247)
Logs:
Bound result 1831884821
Bound result 120
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop(uint256,uint256,uint256) (runs: 5000, μ: 1270776, ~: 1270471)
Logs:
Bound result 16223
Bound result 294810381084112878185707385574
Bound result 3000000000000000000
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 1058463, ~: 1058058)
Logs:
Bound result 16223
Bound result 294810381084112878185707385574
Bound result 3000000000000000000
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_price_drop(uint256,uint256) (runs: 5000, μ: 879467, ~: 879813)
Logs:
Bound result 132268384570
Bound result 644966812442621595807
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_singleBorrow(uint256) (runs: 5000, μ: 631157, ~: 631109)
Logs:
Bound result 24080
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_interest_increase() (gas: 661569)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 892897)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai() (gas: 1155120)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth() (gas: 1155123)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 948033)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 1015367)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop() (gas: 1263948)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1051862)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_price_drop() (gas: 874315)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_singleBorrow() (gas: 632627)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 168.75s (168.72s CPU time)
Ran 12 tests for tests/contracts/position-manager/GiverPositionManager.t.sol:GiverPositionManagerTest
[PASS] test_multicall() (gas: 348052)
[PASS] test_repayOnBehalfOf() (gas: 662400)
Logs:
Bound result 50000000000000000000
[PASS] test_repayOnBehalfOf_fuzz(uint256) (runs: 5000, μ: 659291, ~: 662628)
Logs:
Bound result 3124043968137
[PASS] test_repayOnBehalfOf_fuzz_withInterest(uint256,uint256) (runs: 5000, μ: 593858, ~: 590214)
Logs:
Bound result 900000068691281935000
Bound result 25920101
[PASS] test_repayOnBehalfOf_maxRepay() (gas: 583981)
[PASS] test_repayOnBehalfOf_maxRepay_revertsWith_InvalidRepayAmount() (gas: 490693)
[PASS] test_repayOnBehalfOf_revertsWith_ReserveNotListed() (gas: 32367)
[PASS] test_repayOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 28767)
[PASS] test_supplyOnBehalfOf() (gas: 315270)
Logs:
Bound result 100000000000000000000
[PASS] test_supplyOnBehalfOf_fuzz(uint256) (runs: 5000, μ: 315567, ~: 315341)
Logs:
Bound result 3124043968137
[PASS] test_supplyOnBehalfOf_revertsWith_ReserveNotListed() (gas: 32428)
[PASS] test_supplyOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 28817)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 30.59s (30.57s CPU time)
Ran 6 tests for tests/contracts/hub/misc/Hub.Access.t.sol:HubAccessTest
[PASS] test_change_authority() (gas: 213977)
[PASS] test_change_role_responsibility() (gas: 131759)
[PASS] test_hub_access_manager_exposure() (gas: 18422)
[PASS] test_hub_admin_access() (gas: 1364028)
[PASS] test_migrate_role_responsibility() (gas: 718316)
[PASS] test_setInterestRateData_access() (gas: 113564)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 29.86ms (4.29ms CPU time)
Ran 19 tests for tests/contracts/hub/add-remove/Hub.Add.t.sol:HubAddTest
[PASS] test_add_AddCapReachedButNotExceeded_rounding() (gas: 680262)
[PASS] test_add_fuzz_AddCapReachedButNotExceeded(uint40) (runs: 5000, μ: 173465, ~: 173421)
Logs:
Bound result 9
[PASS] test_add_fuzz_multi_asset_multi_spoke(uint256,uint256,uint256) (runs: 5000, μ: 348248, ~: 348396)
Logs:
Bound result 3
Bound result 218470873395738003579119570309
Bound result 446067553769140138733721804
[PASS] test_add_fuzz_revertsWith_AddCapExceeded(uint40) (runs: 5000, μ: 127526, ~: 127482)
Logs:
Bound result 9
[PASS] test_add_fuzz_revertsWith_AddCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 281827, ~: 281693)
Logs:
Bound result 1291
Bound result 1071208440522043736492
Bound result 173721804
[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 5000, μ: 228039, ~: 228238)
Logs:
Bound result 999999999904900000000000000001
Bound result 3122070484
Bound result 9
[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 5000, μ: 360363, ~: 360383)
Logs:
Bound result 0
Bound result 714477922937634359008573850498
[PASS] test_add_fuzz_single_spoke_multi_add(uint256,uint256) (runs: 5000, μ: 839570, ~: 839599)
Logs:
Bound result 68691281934999
Bound result 100
[PASS] test_add_multi_add_minimal_shares() (gas: 332551)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 363552)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 69426)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 18616)
[PASS] test_add_revertsWith_InvalidShares() (gas: 228061)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 228597)
[PASS] test_add_revertsWith_SpokeHalted() (gas: 106274)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 106255)
[PASS] test_add_single_asset() (gas: 351288)
Logs:
Bound result 2
Bound result 100000000000000000000
[PASS] test_add_with_increased_index() (gas: 324174)
[PASS] test_add_with_increased_index_with_premium() (gas: 687684)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 49.07s (49.05s CPU time)
Ran 5 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.Scenario.t.sol:SpokeWithdrawScenarioTest
[PASS] test_withdraw_fuzz_all_liquidity_with_interest_multi_user((uint256,uint256,uint256,uint256,uint256[2],uint256)) (runs: 5000, μ: 1127826, ~: 1152296)
Logs:
Bound result 2
Bound result 991466614162668518126885086414
Bound result 3692366002731856463108822170
Bound result 454377326
Bound result 136923370
Bound result 440735623449517850262567531806
Bound result 16904
[PASS] test_withdraw_fuzz_partial_full_with_interest(uint256,uint256,uint256,uint40) (runs: 5000, μ: 963937, ~: 963915)
Logs:
Bound result 3
Bound result 1
Bound result 1
Bound result 5355
[PASS] test_withdraw_round_trip_deposit_withdraw(uint256,uint256,address,uint256) (runs: 5000, μ: 417459, ~: 417444)
Logs:
Bound result 4
Bound result 386061929037201014875895872375
Bound result 50000000000000000000
[PASS] test_withdraw_round_trip_withdraw_deposit(uint256,uint256,uint256,address,uint256) (runs: 5000, μ: 438568, ~: 437872)
Logs:
Bound result 2
Bound result 2
Bound result 435990357906337338302356819498
Bound result 950702884693869056163874704002
[PASS] test_withdraw_underwater_reserve_not_collateral() (gas: 973916)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 78.39s (78.36s CPU time)
Ran 6 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.Validation.t.sol:SpokeWithdrawValidationTest
[PASS] test_withdraw_fuzz_revertsWith_InsufficientLiquidity_with_debt(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 445269, ~: 445345)
Logs:
Bound result 1
Bound result 13800454394220
Bound result 519825888141
Bound result 73242
Bound result 175908665
[PASS] test_withdraw_fuzz_revertsWith_InsufficientSupply_zero_supplied(uint256) (runs: 5000, μ: 60954, ~: 60661)
Logs:
Bound result 3124043968137
[PASS] test_withdraw_revertsWith_InsufficientLiquidity_with_debt() (gas: 437909)
[PASS] test_withdraw_revertsWith_InvalidAmount_zero_supplied() (gas: 57304)
[PASS] test_withdraw_revertsWith_ReserveNotListed() (gas: 22475)
[PASS] test_withdraw_revertsWith_ReservePaused() (gas: 63021)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 6.43s (6.40s CPU time)
Ran 32 tests for tests/contracts/spoke/libraries/PositionStatusMap.t.sol:PositionStatusMapTest
[PASS] test_borrowCount() (gas: 108156)
[PASS] test_borrowCount(uint256) (runs: 5000, μ: 1905686, ~: 1746195)
Logs:
Bound result 812
[PASS] test_borrowCount_ignoresInvalidBits() (gas: 122840)
[PASS] test_bucketId() (gas: 8878)
[PASS] test_collateralCount() (gas: 108082)
[PASS] test_collateralCount(uint256) (runs: 5000, μ: 1921154, ~: 1761955)
Logs:
Bound result 812
[PASS] test_collateralCount_ignoresInvalidBits() (gas: 123031)
[PASS] test_constants() (gas: 44556)
[PASS] test_fls() (gas: 509035)
[PASS] test_fromBitId(uint256,uint256) (runs: 5000, μ: 14089, ~: 14384)
Logs:
Bound result 151
Bound result 100
[PASS] test_fuzz_setBorrowing(uint256,bool) (runs: 5000, μ: 22277, ~: 32159)
[PASS] test_fuzz_setUseAsCollateral(uint256,bool) (runs: 5000, μ: 22352, ~: 32234)
[PASS] test_getBucketWord(uint256) (runs: 5000, μ: 14254, ~: 14254)
[PASS] test_isUsingAsCollateralOrBorrowing_slot0() (gas: 108352)
[PASS] test_isUsingAsCollateralOrBorrowing_slot1() (gas: 43980)
[PASS] test_isolateBorrowing(uint256) (runs: 5000, μ: 153053, ~: 153053)
[PASS] test_isolateBorrowingUntil(uint256,uint256) (runs: 5000, μ: 144729, ~: 144367)
[PASS] test_isolateCollateral(uint256) (runs: 5000, μ: 152994, ~: 152994)
[PASS] test_isolateCollateralUntil(uint256,uint256) (runs: 5000, μ: 144731, ~: 144369)
[PASS] test_isolateUntil(uint256,uint256) (runs: 5000, μ: 134642, ~: 134634)
[PASS] test_next(uint256) (runs: 5000, μ: 20145, ~: 18994)
Logs:
Bound result 649
[PASS] test_nextBorrowing(uint256) (runs: 5000, μ: 18072, ~: 16920)
Logs:
Bound result 649
[PASS] test_nextBorrowing_continuous() (gas: 61801685)
[PASS] test_nextCollateral(uint256) (runs: 5000, μ: 18270, ~: 17029)
Logs:
Bound result 649
[PASS] test_nextCollateral_continuous() (gas: 62157760)
[PASS] test_next_continuous() (gas: 89136467)
[PASS] test_popCount(bytes32) (runs: 5000, μ: 37926, ~: 38056)
[PASS] test_setBorrowing_slot0() (gas: 43906)
[PASS] test_setBorrowing_slot1() (gas: 43942)
[PASS] test_setUseAsCollateral_slot0() (gas: 44176)
[PASS] test_setUseAsCollateral_slot1() (gas: 44194)
[PASS] test_setters_use_correct_slot(uint256) (runs: 5000, μ: 36801, ~: 41561)
Suite result: ok. 32 passed; 0 failed; 0 skipped; finished in 162.82s (162.82s CPU time)
Ran 5 tests for tests/contracts/utils/Rescuable.t.sol:RescuableTest
[PASS] test_constructor() (gas: 12552)
[PASS] test_rescueNative_fuzz(uint256) (runs: 5000, μ: 33304, ~: 33509)
Logs:
Bound result 3124043968137
[PASS] test_rescueNative_revertsWith_OnlyRescueGuardian() (gas: 11067)
[PASS] test_rescueToken_fuzz(uint256) (runs: 5000, μ: 206659, ~: 206792)
Logs:
Bound result 3124043968137
[PASS] test_rescueToken_revertsWith_OnlyRescueGuardian() (gas: 180574)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 3.38s (3.36s CPU time)
Ran 7 tests for tests/contracts/spoke/libraries/ReserveFlagsMap.t.sol:ReserveFlagsMapTest
[PASS] test_constants() (gas: 12118)
[PASS] test_create_fuzz(bool,bool,bool,bool) (runs: 5000, μ: 14707, ~: 14707)
[PASS] test_setBorrowable_fuzz(uint8) (runs: 5000, μ: 13338, ~: 13338)
[PASS] test_setFrozen_fuzz(uint8) (runs: 5000, μ: 13280, ~: 13280)
[PASS] test_setPaused_fuzz(uint8) (runs: 5000, μ: 13289, ~: 13289)
[PASS] test_setReceiveSharesEnabled_fuzz(uint8) (runs: 5000, μ: 13196, ~: 13196)
[PASS] test_set_flags() (gas: 65513)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.33s (1.33s CPU time)
Ran 1 test for tests/contracts/libraries/types/Roles.t.sol:RolesTest
[PASS] test_constants() (gas: 5407)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 260.60µs (37.83µs CPU time)
Ran 10 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Constants.t.sol:SignatureGatewayConstantsTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 5629)
[PASS] test_borrow_typeHash() (gas: 9778)
[PASS] test_constructor() (gas: 3772)
[PASS] test_eip712Domain() (gas: 10918)
[PASS] test_repay_typeHash() (gas: 9880)
[PASS] test_setUsingAsCollateral_typeHash() (gas: 9825)
[PASS] test_supply_typeHash() (gas: 9872)
[PASS] test_updateUserDynamicConfig_typeHash() (gas: 9781)
[PASS] test_updateUserRiskPremium_typeHash() (gas: 9801)
[PASS] test_withdraw_typeHash() (gas: 9757)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 29.20ms (2.77ms CPU time)
Ran 5 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.PermitReserve.t.sol:SignatureGatewayPermitReserveTest
[PASS] test_permitReserve() (gas: 101530)
[PASS] test_permitReserve_forwards_correct_call() (gas: 51040)
[PASS] test_permitReserve_ignores_permit_reverts() (gas: 40087)
[PASS] test_permitReserve_revertsWith_ReserveNotListed() (gas: 31029)
[PASS] test_permitReserve_revertsWith_SpokeNotRegistered() (gas: 29349)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 27.79ms (1.68ms CPU time)
Ran 2 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.InsufficientAllowance.t.sol:SignatureGateway_InsufficientAllowance_Test
[PASS] test_repayWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 463594)
[PASS] test_supplyWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 87496)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.28ms (4.01ms CPU time)
Ran 38 tests for tests/contracts/hub/configuration/Hub.Config.t.sol:HubConfigTest
[PASS] test_addAsset_fuzz(address,uint8,address) (runs: 5000, μ: 399470, ~: 399509)
Logs:
Bound result 18
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_feeReceiver(address,uint8,address) (runs: 5000, μ: 50340, ~: 50038)
Logs:
Bound result 12
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 5000, μ: 50317, ~: 50015)
Logs:
Bound result 12
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 5000, μ: 41634, ~: 41634)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 5000, μ: 50946, ~: 50988)
Logs:
Bound result 28
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 5000, μ: 51047, ~: 51333)
Logs:
Bound result 4
[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 5000, μ: 80545823534, ~: 39937)
Logs:
Bound result 9
[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 961606)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 958639)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 54353)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 132572, ~: 132621)
Logs:
Bound result 3
[PASS] test_addSpoke_fuzz_revertsWith_AssetNotListed(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 40664, ~: 40653)
Logs:
Bound result 123
[PASS] test_addSpoke_fuzz_revertsWith_InvalidAddress_spoke(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 39262, ~: 39311)
Logs:
Bound result 3
[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 45260)
[PASS] test_getAssetId() (gas: 80480)
[PASS] test_getAssetId_fuzz_revertsWith_AssetNotListed(address) (runs: 5000, μ: 23521, ~: 23521)
[PASS] test_hub_deploy_reverts_on_InvalidConstructorInput() (gas: 772359)
[PASS] test_hub_max_riskPremium() (gas: 13555)
[PASS] test_isUnderlyingListed() (gas: 1184175)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 729791)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 626700)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 76582)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 5000, μ: 280291, ~: 280609)
Logs:
Bound result 1
Bound result 184
[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 5000, μ: 844225, ~: 844047)
Logs:
Bound result 3
Bound result 1
Bound result 3
Bound result 0
Bound result 3
Bound result 1
[PASS] test_updateAssetConfig_fuzz_LiquidityFee(uint256,uint16) (runs: 5000, μ: 744804, ~: 744626)
Logs:
Bound result 3
Bound result 1
Bound result 3
Bound result 1
[PASS] test_updateAssetConfig_fuzz_NewDrawnRateStrategy(uint256) (runs: 5000, μ: 715963, ~: 715964)
Logs:
Bound result 3
[PASS] test_updateAssetConfig_fuzz_NewFeeReceiver(uint256) (runs: 5000, μ: 843496, ~: 843497)
Logs:
Bound result 3
Bound result 3
Bound result 1000
[PASS] test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed(uint256) (runs: 5000, μ: 901507, ~: 901508)
Logs:
Bound result 3
Bound result 3
Bound result 3
Bound result 1000
[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 5000, μ: 745244, ~: 745297)
Logs:
Bound result 3
Bound result 3
Bound result 1000
Bound result 3
Bound result 1000
Bound result 3
Bound result 0
Bound result 3
Bound result 0
Bound result 3
Bound result 0
Bound result 3
Bound result 0
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidInterestRateStrategy(uint256) (runs: 5000, μ: 66930, ~: 66983)
Logs:
Bound result 3
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidLiquidityFee(uint256,(address,uint16,address,address)) (runs: 5000, μ: 45585, ~: 45483)
Logs:
Bound result 1
Bound result 184
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 478878)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 204774, ~: 204737)
Logs:
Bound result 4
Bound result 15
[PASS] test_updateAssetConfig_fuzz_revertsWith_setInterestRateDataReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 102202, ~: 102162)
Logs:
Bound result 0
Bound result 7500
[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 929300)
Logs:
Bound result 1
Bound result 500
Bound result 3
Bound result 1000
Bound result 5
Bound result 500
Bound result 3
Bound result 1000
[PASS] test_updateSpokeConfig_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 65097, ~: 65156)
Logs:
Bound result 3
[PASS] test_updateSpokeConfig_fuzz_revertsWith_SpokeNotListed(uint256,address,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 45965, ~: 46032)
Logs:
Bound result 1
[PASS] test_updateSpokeConfig_revertsWith_AssetNotListed() (gas: 35036)
Suite result: ok. 38 passed; 0 failed; 0 skipped; finished in 101.42s (101.40s CPU time)
Ran 21 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.InvalidSignature.t.sol:SignatureGatewayInvalidSignatureTest
[PASS] test_borrowWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155226, ~: 154787)
[PASS] test_borrowWithSig_revertsWith_InvalidSignature_dueT...*[Comment body truncated]* |
yan-man
reviewed
Mar 30, 2026
| ## Hub | ||
|
|
||
| The Hub is immutable and serves as the central coordinator for liquidity management in Aave V4. The design allows for multiple Hubs to exist, with each Hub maintaining oversight of its own set of Spokes. Each Hub sets the add/draw caps for its Spokes and enforces crucial accounting invariants. The design objective was to make the Hub as simple as possible. | ||
| The Hub is the central liquidity coordinator between Spokes in Aave V4. Multiple Hubs can operate independently, each managing its own set of Spokes. Hubs pool liquidity across Spokes—when a Spoke borrows for users, the liquidity comes from the Hub's pool, which is replenished by suppliers across all connected Spokes. Each Hub sets add/draw caps for its Spokes and enforces accounting invariants. The design objective is to keep the Hub as simple as possible. |
Contributor
There was a problem hiding this comment.
Suggested change
| The Hub is the central liquidity coordinator between Spokes in Aave V4. Multiple Hubs can operate independently, each managing its own set of Spokes. Hubs pool liquidity across Spokes—when a Spoke borrows for users, the liquidity comes from the Hub's pool, which is replenished by suppliers across all connected Spokes. Each Hub sets add/draw caps for its Spokes and enforces accounting invariants. The design objective is to keep the Hub as simple as possible. | |
| The Hub is the central liquidity coordinator between Spokes in Aave V4. Multiple Hubs can operate independently, each managing its own set of Spokes. Hubs pool liquidity across Spokes — when users borrow through a Spoke, the liquidity comes from the Hub's pool, which is replenished by suppliers across all connected Spokes. Each Hub sets add/draw caps for its Spokes and enforces accounting invariants. The design objective is to keep the Hub as simple as possible. |
Contributor
|
btw @defispartan we have updates to the overview doc in progress here: #1285, maybe we can add changes there |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.