Skip to content

Conversation

@CanonicalJP
Copy link
Contributor

  • update overview.md to match changes in release v0.5.7 and v0.5.6
  • update README.md to include a reference to aave.com/docs

@github-actions
Copy link

github-actions bot commented Jan 9, 2026

♻️ Forge Gas Snapshots

🔕 Unchanged
Path Value
snapshots/Hub.Operations.json
add 86,624
add: with transfer 107,921
draw 104,105
eliminateDeficit: full 72,338
eliminateDeficit: partial 81,943
mintFeeShares 82,661
payFee 70,786
refreshPremium 70,367
remove: full 75,357
remove: partial 80,495
reportDeficit 111,875
restore: full 76,533
restore: full - with transfer 169,118
restore: partial 85,255
restore: partial - with transfer 143,235
transferShares 69,588
snapshots/NativeTokenGateway.Operations.json
borrowNative 227,663
repayNative 166,157
supplyAsCollateralNative 160,016
supplyNative 135,699
withdrawNative: full 125,318
withdrawNative: partial 136,447
snapshots/SignatureGateway.Operations.json
borrowWithSig 212,853
repayWithSig 186,429
setSelfAsUserPositionManagerWithSig 75,397
setUsingAsCollateralWithSig 85,349
supplyWithSig 151,931
updateUserDynamicConfigWithSig 63,086
updateUserRiskPremiumWithSig 62,068
withdrawWithSig 130,572
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 12,962
getUserAccountData: supplies: 1, borrows: 0 49,251
getUserAccountData: supplies: 2, borrows: 0 80,826
getUserAccountData: supplies: 2, borrows: 1 100,237
getUserAccountData: supplies: 2, borrows: 2 118,994
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first 189,291
borrow: second action, same reserve 169,240
liquidationCall (receiveShares): full 294,978
liquidationCall (receiveShares): partial 294,696
liquidationCall: full 304,263
liquidationCall: partial 303,981
permitReserve + repay (multicall) 164,420
permitReserve + supply (multicall) 146,699
permitReserve + supply + enable collateral (multicall) 161,112
repay: full 123,736
repay: partial 128,706
setUserPositionManagersWithSig: disable 47,027
setUserPositionManagersWithSig: enable 68,939
supply + enable collateral (multicall) 141,292
supply: 0 borrows, collateral disabled 122,767
supply: 0 borrows, collateral enabled 105,738
supply: second action, same reserve 105,667
updateUserDynamicConfig: 1 collateral 74,548
updateUserDynamicConfig: 2 collaterals 89,453
updateUserRiskPremium: 1 borrow 94,781
updateUserRiskPremium: 2 borrows 103,916
usingAsCollateral: 0 borrows, enable 59,578
usingAsCollateral: 1 borrow, disable 104,896
usingAsCollateral: 1 borrow, enable 42,466
usingAsCollateral: 2 borrows, disable 125,992
usingAsCollateral: 2 borrows, enable 42,478
withdraw: 0 borrows, full 127,659
withdraw: 0 borrows, partial 132,345
withdraw: 1 borrow, partial 158,727
withdraw: 2 borrows, partial 172,833
withdraw: non collateral 105,615
snapshots/Spoke.Operations.json
borrow: first 258,193
borrow: second action, same reserve 201,142
liquidationCall (receiveShares): full 326,985
liquidationCall (receiveShares): partial 326,703
liquidationCall: full 336,270
liquidationCall: partial 335,988
permitReserve + repay (multicall) 161,920
permitReserve + supply (multicall) 146,699
permitReserve + supply + enable collateral (multicall) 161,112
repay: full 117,815
repay: partial 137,185
setUserPositionManagersWithSig: disable 47,027
setUserPositionManagersWithSig: enable 68,939
supply + enable collateral (multicall) 141,292
supply: 0 borrows, collateral disabled 122,767
supply: 0 borrows, collateral enabled 105,738
supply: second action, same reserve 105,667
updateUserDynamicConfig: 1 collateral 74,548
updateUserDynamicConfig: 2 collaterals 89,453
updateUserRiskPremium: 1 borrow 148,104
updateUserRiskPremium: 2 borrows 197,811
usingAsCollateral: 0 borrows, enable 59,578
usingAsCollateral: 1 borrow, disable 158,219
usingAsCollateral: 1 borrow, enable 42,466
usingAsCollateral: 2 borrows, disable 227,887
usingAsCollateral: 2 borrows, enable 42,478
withdraw: 0 borrows, full 127,659
withdraw: 0 borrows, partial 132,345
withdraw: 1 borrow, partial 209,548
withdraw: 2 borrows, partial 255,261
withdraw: non collateral 105,615

@github-actions
Copy link

github-actions bot commented Jan 9, 2026

🌈 Test Results
No files changed, compilation skipped

Ran 1 test for tests/unit/Spoke/Spoke.AccrueInterest.Scenario.t.sol:SpokeAccrueInterestScenarioTest
[SKIP: pending rft] test_accrueInterest_fuzz_RPBorrowAndSkipTime_twoActions((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 0, μ: 0, ~: 0)
Suite result: ok. 0 passed; 0 failed; 1 skipped; finished in 26.32ms (4.38ms CPU time)

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_Gas_Tests
[PASS] test_borrow() (gas: 1320948)
[PASS] test_liquidation_full() (gas: 1901915)
[PASS] test_liquidation_partial() (gas: 1901632)
[PASS] test_liquidation_receiveShares_full() (gas: 1892689)
[PASS] test_liquidation_receiveShares_partial() (gas: 1892408)
[PASS] test_multicall_ops() (gas: 1402595)
[PASS] test_repay() (gas: 866740)
[PASS] test_setUserPositionManagersWithSig() (gas: 307172)
[PASS] test_supply() (gas: 538732)
[PASS] test_updateRiskPremium() (gas: 1309799)
[PASS] test_updateUserDynamicConfig() (gas: 583043)
[PASS] test_usingAsCollateral() (gas: 1465184)
[PASS] test_withdraw() (gas: 1939961)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 73.66ms (28.50ms CPU time)

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_ZeroRiskPremium_Gas_Tests
[PASS] test_borrow() (gas: 1087594)
[PASS] test_liquidation_full() (gas: 1767256)
[PASS] test_liquidation_partial() (gas: 1766973)
[PASS] test_liquidation_receiveShares_full() (gas: 1758030)
[PASS] test_liquidation_receiveShares_partial() (gas: 1757749)
[PASS] test_multicall_ops() (gas: 1319985)
[PASS] test_repay() (gas: 775934)
[PASS] test_setUserPositionManagersWithSig() (gas: 311626)
[PASS] test_supply() (gas: 541413)
[PASS] test_updateRiskPremium() (gas: 937804)
[PASS] test_updateUserDynamicConfig() (gas: 587497)
[PASS] test_usingAsCollateral() (gas: 1083870)
[PASS] test_withdraw() (gas: 1580616)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 62.17ms (24.75ms CPU time)

Ran 4 tests for tests/unit/Spoke/Spoke.PermitReserve.t.sol:SpokePermitReserveTest
[PASS] test_permitReserve() (gas: 88249)
[PASS] test_permitReserve_forwards_correct_call() (gas: 35576)
[PASS] test_permitReserve_ignores_permit_reverts() (gas: 24412)
[PASS] test_permitReserve_revertsWith_ReserveNotListedIn() (gas: 22971)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 26.35ms (1.04ms CPU time)

Ran 20 tests for tests/unit/AaveOracle.t.sol:AaveOracleTest
[PASS] test_DECIMALS() (gas: 8326)
[PASS] test_constructor() (gas: 18424)
[PASS] test_description() (gas: 12039)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 19884, ~: 20210)
[PASS] test_getReservePrice() (gas: 48776)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 48043)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10894)
[PASS] test_getReservePrices() (gas: 80715)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 50926)
[PASS] test_getReserveSource() (gas: 48946)
[PASS] test_setReserveSource() (gas: 45988)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 102767)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17224)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 17061)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 13021)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 5044893)
[PASS] test_setSpoke() (gas: 5072799)
[PASS] test_setSpoke_revertsWith_InvalidAddress() (gas: 10870)
[PASS] test_setSpoke_revertsWith_OnlyDeployer(address) (runs: 5000, μ: 13397, ~: 13397)
[PASS] test_setSpoke_revertsWith_SpokeAlreadySet() (gas: 15080)
Suite result: ok. 20 passed; 0 failed; 0 skipped; finished in 1.00s (1.13s CPU time)

Ran 17 tests for tests/unit/AccessManagerEnumerable.t.sol:AccessManagerEnumerableTest
[PASS] test_getRoleMembers_fuzz(uint256,uint256) (runs: 5000, μ: 1981446, ~: 1980367)
[PASS] test_getRoleTargetSelectors_fuzz(uint256,uint256) (runs: 5000, μ: 1528915, ~: 1527966)
[PASS] test_grantRole() (gas: 315886)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 5000, μ: 925710, ~: 919753)
[PASS] test_revokeRole() (gas: 323138)
[PASS] test_setRoleAdmin_fuzz_trackAdminRoles_multipleRoles_multipleAdmins(uint256) (runs: 5000, μ: 2158082, ~: 2270707)
[PASS] test_setRoleAdmin_fuzz_trackRolesAndTrackAdminRoles_multipleRoles(uint256) (runs: 5000, μ: 1950979, ~: 1899754)
[PASS] test_setRoleAdmin_trackAdminOfRoles() (gas: 606131)
[PASS] test_setRoleAdmin_trackAdminOfRoles_changeAdminRole() (gas: 577217)
[PASS] test_setRoleAdmin_trackAdminRoles() (gas: 602311)
[PASS] test_setRoleAdmin_trackRolesAndTrackAdminRoles() (gas: 378311)
[PASS] test_setRoleGuardian_trackRoles() (gas: 263932)
[PASS] test_setTargetFunctionRole() (gas: 414440)
[PASS] test_setTargetFunctionRole_multipleTargets() (gas: 1103911)
[PASS] test_setTargetFunctionRole_removeTarget() (gas: 894967)
[PASS] test_setTargetFunctionRole_skipAddToAdminRole() (gas: 30940)
[PASS] test_setTargetFunctionRole_withReplace() (gas: 549104)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 23.20s (37.48s CPU time)

Ran 10 tests for tests/unit/misc/EIP712Hash.t.sol:EIP712HashTest
[PASS] test_constants() (gas: 13531)
[PASS] test_hash_borrow_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6805, ~: 6805)
[PASS] test_hash_positionManagerUpdate_fuzz((address,bool)) (runs: 5000, μ: 6193, ~: 6193)
[PASS] test_hash_repay_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6806, ~: 6806)
[PASS] test_hash_setUserPositionManagers_fuzz((address,(address,bool)[],uint256,uint256)) (runs: 5000, μ: 444225, ~: 431569)
[PASS] test_hash_setUsingAsCollateral_fuzz((address,uint256,bool,address,uint256,uint256)) (runs: 5000, μ: 7305, ~: 7305)
[PASS] test_hash_supply_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6849, ~: 6849)
[PASS] test_hash_updateUserDynamicConfig_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6450, ~: 6450)
[PASS] test_hash_updateUserRiskPremium_fuzz((address,address,uint256,uint256)) (runs: 5000, μ: 6471, ~: 6471)
[PASS] test_hash_withdraw_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 6805, ~: 6805)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 21.47s (21.47s CPU time)

Ran 9 tests for tests/unit/libraries/KeyValueList.t.sol:KeyValueListTest
[PASS] test_add_unique() (gas: 354262)
[PASS] test_fuzz_add(uint256,uint256) (runs: 5000, μ: 231367, ~: 232296)
[PASS] test_fuzz_add_unique(uint256,uint256) (runs: 5000, μ: 252438, ~: 254508)
[PASS] test_fuzz_get(uint256[]) (runs: 5000, μ: 404191, ~: 409179)
[PASS] test_fuzz_get_uninitialized(uint256[]) (runs: 5000, μ: 280949, ~: 261548)
[PASS] test_fuzz_get_uninitialized_sorted(uint256[]) (runs: 5000, μ: 186115, ~: 162574)
[PASS] test_fuzz_sortByKey(uint256[]) (runs: 5000, μ: 458513, ~: 454104)
[PASS] test_fuzz_sortByKey_length(uint256) (runs: 5000, μ: 216906, ~: 213034)
[PASS] test_fuzz_sortByKey_with_collision(uint256[]) (runs: 5000, μ: 542493, ~: 536569)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 72.20s (72.19s CPU time)

Ran 3 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.DebtToLiquidate.t.sol:LiquidationLogicDebtToLiquidateTest
[PASS] test_calculateDebtToLiquidate_fuzz((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 30202, ~: 30269)
[PASS] test_calculateDebtToLiquidate_fuzz_AmountAdjustedDueToDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 31914, ~: 31991)
[PASS] test_calculateDebtToLiquidate_fuzz_ImpossibleToAdjustForDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 33973, ~: 33892)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.35s (3.33s CPU time)

Ran 60 tests for tests/unit/HubConfigurator.t.sol:HubConfiguratorTest
[PASS] test_addAsset_fuzz(bool,address,uint8,address,uint256,uint16,uint32,uint32,uint32) (runs: 5000, μ: 464335, ~: 465045)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(bool,address,uint8,address,uint256,address) (runs: 5000, μ: 56218, ~: 56194)
[PASS] test_addAsset_fuzz_revertsWith_OwnableUnauthorizedAccount(address) (runs: 5000, μ: 31031, ~: 31437)
[PASS] test_addAsset_revertsWith_InvalidAddress_irStrategy() (gas: 49370)
[PASS] test_addAsset_revertsWith_InvalidAddress_underlying() (gas: 49266)
[PASS] test_addAsset_revertsWith_InvalidLiquidityFee() (gas: 366576)
[PASS] test_addAsset_reverts_invalidIrData() (gas: 92850)
[PASS] test_addSpoke() (gas: 126499)
[PASS] test_addSpokeToAssets() (gas: 223580)
[PASS] test_addSpokeToAssets_revertsWith_MismatchedConfigs() (gas: 24589)
[PASS] test_addSpokeToAssets_revertsWith_OwnableUnauthorizedAccount() (gas: 16866)
[PASS] test_addSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 16620)
[PASS] test_deactivateAsset() (gas: 166916)
[PASS] test_deactivateAsset_revertsWith_OwnableUnauthorizedAccount() (gas: 17760)
[PASS] test_deactivateSpoke() (gas: 165682)
[PASS] test_deactivateSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 17807)
[PASS] test_freezeAsset() (gas: 241109)
[PASS] test_freezeAsset_revertsWith_OwnableUnauthorizedAccount() (gas: 17781)
[PASS] test_freezeSpoke() (gas: 258638)
[PASS] test_freezeSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 17807)
[PASS] test_haltAsset() (gas: 166861)
[PASS] test_haltAsset_revertsWith_OwnableUnauthorizedAccount() (gas: 17716)
[PASS] test_haltSpoke() (gas: 165627)
[PASS] test_haltSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 17759)
[PASS] test_updateFeeConfig_Scenario() (gas: 337011)
Logs:
  Bound result 0
  Bound result 1800
  Bound result 0
  Bound result 400
  Bound result 0
  Bound result 0

[PASS] test_updateFeeConfig_fuzz(uint256,uint16,address) (runs: 5000, μ: 185815, ~: 186099)
[PASS] test_updateFeeConfig_fuzz_revertsWith_OwnableUnauthorizedAccount(address) (runs: 5000, μ: 17277, ~: 17277)
[PASS] test_updateFeeConfig_revertsWith_InvalidAddress_spoke() (gas: 50474)
[PASS] test_updateFeeConfig_revertsWith_InvalidLiquidityFee() (gas: 53594)
[PASS] test_updateFeeReceiver_Scenario() (gas: 214826)
[PASS] test_updateFeeReceiver_WithdrawFromOldSpoke() (gas: 419033)
[PASS] test_updateFeeReceiver_correctAccruals() (gas: 455526)
[PASS] test_updateFeeReceiver_fuzz(address) (runs: 5000, μ: 179339, ~: 179339)
[PASS] test_updateFeeReceiver_fuzz_revertsWith_OwnableUnauthorizedAccount(address) (runs: 5000, μ: 16918, ~: 16918)
[PASS] test_updateFeeReceiver_revertsWith_InvalidAddress_spoke() (gas: 52286)
[PASS] test_updateFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 80185)
[PASS] test_updateInterestRateData() (gas: 73061)
[PASS] test_updateInterestRateData_revertsWith_OwnableUnauthorizedAccount() (gas: 18943)
[PASS] test_updateInterestRateStrategy() (gas: 93496)
[PASS] test_updateInterestRateStrategy_fuzz_revertsWith_OwnableUnauthorizedAccount(address) (runs: 5000, μ: 28359, ~: 28359)
[PASS] test_updateInterestRateStrategy_revertsWith_InterestRateStrategyReverts() (gas: 76899)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidAddress_irStrategy() (gas: 66622)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidInterestRateStrategy() (gas: 67126)
[PASS] test_updateLiquidityFee_fuzz(uint256,uint16) (runs: 5000, μ: 91161, ~: 92800)
[PASS] test_updateLiquidityFee_revertsWith_InvalidLiquidityFee() (gas: 55338)
[PASS] test_updateLiquidityFee_revertsWith_OwnableUnauthorizedAccount() (gas: 16383)
[PASS] test_updateReinvestmentController() (gas: 101673)
[PASS] test_updateReinvestmentController_fuzz_revertsWith_OwnableUnauthorizedAccount(address) (runs: 5000, μ: 16895, ~: 16895)
[PASS] test_updateSpokeActive() (gas: 87294)
[PASS] test_updateSpokeActive_revertsWith_OwnableUnauthorizedAccount() (gas: 20084)
[PASS] test_updateSpokeCaps() (gas: 66421)
[PASS] test_updateSpokeCaps_revertsWith_OwnableUnauthorizedAccount() (gas: 19998)
[PASS] test_updateSpokeDrawCap() (gas: 66246)
[PASS] test_updateSpokeDrawCap_revertsWith_OwnableUnauthorizedAccount() (gas: 20073)
[PASS] test_updateSpokeHalted() (gas: 90007)
[PASS] test_updateSpokeHalted_revertsWith_OwnableUnauthorizedAccount() (gas: 19985)
[PASS] test_updateSpokeRiskPremiumThreshold() (gas: 66247)
[PASS] test_updateSpokeRiskPremiumThreshold_revertsWith_OwnableUnauthorizedAccount() (gas: 19984)
[PASS] test_updateSpokeSupplyCap() (gas: 66264)
[PASS] test_updateSpokeSupplyCap_revertsWith_OwnableUnauthorizedAccount() (gas: 20017)
Suite result: ok. 60 passed; 0 failed; 0 skipped; finished in 86.63s (92.07s CPU time)

Ran 7 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.DebtToTargetHealthFactor.t.sol:LiquidationLogicDebtToTargetHealthFactorTest
[PASS] test_calculateDebtToTargetHealthFactor_HealthFactorEqualsTargetHealthFactor((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 22788, ~: 22724)
[PASS] test_calculateDebtToTargetHealthFactor_NoPrecisionLoss() (gas: 24870)
[PASS] test_calculateDebtToTargetHealthFactor_PrecisionLoss() (gas: 14911)
[PASS] test_calculateDebtToTargetHealthFactor_UnitPrice() (gas: 24870)
[PASS] test_calculateDebtToTargetHealthFactor_fuzz_NoRevert((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 19923, ~: 19850)
[PASS] test_calculateDebtToTargetHealthFactor_fuzz_revertsWith_DivisionByZero_ZeroAssetPrice((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 22557, ~: 22482)
[PASS] test_calculateDebtToTargetHealthFactor_revertsWith_ArithmeticError_TargetHealthFactorLessThanHealthFactor((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 22542, ~: 22465)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.76s (4.80s CPU time)

Ran 16 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.EvaluateDeficit.t.sol:LiquidationLogicEvaluateDeficitTest
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCM() (gas: 8928)
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCO() (gas: 8896)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCM() (gas: 8917)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCO() (gas: 8884)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCM() (gas: 8910)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCO() (gas: 8977)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCM() (gas: 8942)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCO() (gas: 8930)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCM() (gas: 8930)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCO() (gas: 8919)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCM() (gas: 8853)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCO() (gas: 8886)
[PASS] test_evaluateDeficit_CRN_SCCO_DRE_BRCM() (gas: 8863)
[PASS] test_evaluateDeficit_CRN_SCCO_DRE_BRCO() (gas: 8920)
[PASS] test_evaluateDeficit_CRN_SCCO_DRN_BRCM() (gas: 8871)
[PASS] test_evaluateDeficit_CRN_SCCO_DRN_BRCO() (gas: 8949)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 22.33ms (968.63µs CPU time)

Ran 5 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateCollateral.t.sol:LiquidationLogicLiquidateCollateralTest
[PASS] test_liquidateCollateral_fuzz(uint256,uint256) (runs: 5000, μ: 266778, ~: 267672)
[PASS] test_liquidateCollateral_fuzz_CollateralToLiquidatorIsZero(uint256) (runs: 5000, μ: 109874, ~: 110732)
[PASS] test_liquidateCollateral_fuzz_receiveShares_sharesToLiquidator(uint256,uint256) (runs: 5000, μ: 752930, ~: 754262)
[PASS] test_liquidateCollateral_fuzz_revertsWith_ArithmeticUnderflow(uint256,uint256) (runs: 5000, μ: 100551, ~: 100347)
[PASS] test_liquidateCollateral_receiveShares_sharesToLiquidatorIsZero() (gas: 737259)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 12.59s (13.88s CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateUser.t.sol:LiquidationLogicLiquidateUserTest
[PASS] test_liquidateUser() (gas: 363003)
[PASS] test_liquidateUser_revertsWith_InvalidDebtToCover() (gas: 76375)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Collateral() (gas: 109856)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Debt() (gas: 118992)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 36.27ms (1.35ms CPU time)

Ran 3 tests for tests/unit/misc/ExtSload.t.sol:ExtSloadTest
[PASS] test_extSload(bytes32) (runs: 5000, μ: 9767, ~: 9767)
[PASS] test_extSloads(uint256) (runs: 5000, μ: 963361, ~: 924374)
[PASS] test_extSloads(uint256,bytes) (runs: 5000, μ: 1005949, ~: 925531)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 61.06s (61.06s CPU time)

Ran 8 tests for tests/unit/misc/GatewayBase.t.sol:GatewayBaseTest
[PASS] test_constructor() (gas: 17151)
[PASS] test_registerSpoke_fuzz(address) (runs: 5000, μ: 41629, ~: 41629)
[PASS] test_registerSpoke_revertsWith_InvalidAddress() (gas: 13119)
[PASS] test_registerSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 13791)
[PASS] test_registerSpoke_unregister() (gas: 36076)
[PASS] test_renouncePositionManagerRole() (gas: 65293)
[PASS] test_renouncePositionManagerRole_revertsWith_InvalidAddress() (gas: 74220)
[PASS] test_renouncePositionManagerRole_revertsWith_OwnableUnauthorizedAccount() (gas: 74439)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 338.76ms (317.78ms CPU time)

Ran 5 tests for tests/gas/Gateways.Operations.gas.t.sol:NativeTokenGateway_Gas_Tests
[PASS] test_borrowNative() (gas: 915852)
[PASS] test_repayNative() (gas: 987725)
[PASS] test_supplyAndCollateralNative() (gas: 305003)
[PASS] test_supplyNative() (gas: 286552)
[PASS] test_withdrawNative() (gas: 507928)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 39.45ms (4.12ms CPU time)

Ran 23 tests for tests/unit/AssetInterestRateStrategy.t.sol:AssetInterestRateStrategyTest
[PASS] test_calculateInterestRate_AtKinkPoint() (gas: 24368)
Logs:
  Bound result 2000
  Bound result 959662086833673577500435173276

[PASS] test_calculateInterestRate_AtMaxUtilization() (gas: 24681)
Logs:
  Bound result 10000
  Bound result 595173906475565660813905454285

[PASS] test_calculateInterestRate_LeftToKinkPoint(uint256) (runs: 5000, μ: 24230, ~: 24372)
[PASS] test_calculateInterestRate_RightToKinkPoint(uint256) (runs: 5000, μ: 25363, ~: 25411)
[PASS] test_calculateInterestRate_ZeroDebtZeroLiquidity() (gas: 18783)
Logs:
  Bound result 0

[PASS] test_calculateInterestRate_fuzz_ZeroDebt(uint256) (runs: 5000, μ: 19066, ~: 18834)
[PASS] test_calculateInterestRate_revertsWith_InterestRateDataNotSet() (gas: 11225)
[PASS] test_deploy_revertsWith_InvalidAddress() (gas: 3746)
[PASS] test_getBaseVariableBorrowRate() (gas: 14812)
[PASS] test_getInterestRateData() (gas: 19290)
[PASS] test_getMaxVariableBorrowRate() (gas: 15258)
[PASS] test_getOptimalUsageRatio() (gas: 14705)
[PASS] test_getVariableRateSlope1() (gas: 14791)
[PASS] test_getVariableRateSlope2() (gas: 14746)
[PASS] test_maxBorrowRate() (gas: 8312)
[PASS] test_maxOptimalRatio() (gas: 8312)
[PASS] test_minOptimalRatio() (gas: 8321)
[PASS] test_setInterestRateData() (gas: 68999)
[PASS] test_setInterestRateData_revertsWith_InvalidMaxRate() (gas: 41819)
[PASS] test_setInterestRateData_revertsWith_InvalidOptimalUsageRatio() (gas: 42380)
[PASS] test_setInterestRateData_revertsWith_InvalidRateData() (gas: 35269)
[PASS] test_setInterestRateData_revertsWith_OnlyHub() (gas: 23502)
[PASS] test_setInterestRateData_revertsWith_Slope2MustBeGteSlope1() (gas: 37658)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 83.92s (84.09s CPU time)

Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 743118)
[PASS] test_repayWithSig() (gas: 978191)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 209608)
[PASS] test_setUsingAsCollateralWithSig() (gas: 289254)
[PASS] test_supplyWithSig() (gas: 460713)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 145189)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 143132)
[PASS] test_withdrawWithSig() (gas: 409379)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 43.78ms (7.63ms CPU time)

Ran 6 tests for tests/unit/Hub/Hub.Access.t.sol:HubAccessTest
[PASS] test_change_authority() (gas: 206288)
[PASS] test_change_role_responsibility() (gas: 121132)
[PASS] test_hub_access_manager_exposure() (gas: 13427)
[PASS] test_hub_admin_access() (gas: 1374988)
[PASS] test_migrate_role_responsibility() (gas: 657040)
[PASS] test_setInterestRateData_access() (gas: 102489)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.50ms (3.78ms CPU time)

Ran 8 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidationAmounts.t.sol:LiquidationLogicLiquidationAmountsTest
[PASS] test_calculateLiquidationAmounts_EnoughCollateral() (gas: 15199)
[PASS] test_calculateLiquidationAmounts_InsufficientCollateral() (gas: 15451)
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_CollateralDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 55939, ~: 55802)
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoCollateralDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 54972, ~: 54993)
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoDebtLeft((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 71284, ~: 71256)
[PASS] test_calculateLiquidationAmounts_fuzz_InsufficientCollateral((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 58474, ~: 58287)
[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Collateral((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 55435, ~: 55255)
[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Debt((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 67993, ~: 67973)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 17.73s (17.71s CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidationBonus.t.sol:LiquidationLogicLiquidationBonusTest
[PASS] test_calculateLiquidationBonus_MinBonusDueToRounding() (gas: 9265)
[PASS] test_calculateLiquidationBonus_PartialBonus() (gas: 9286)
[PASS] test_calculateLiquidationBonus_fuzz_ConstantBonus(uint256,uint256,uint256,uint256) (runs: 5000, μ: 17116, ~: 16909)
[PASS] test_calculateLiquidationBonus_fuzz_MaxBonus(uint256,uint256,uint256,uint256) (runs: 5000, μ: 19342, ~: 19134)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 972.11ms (949.98ms CPU time)

Ran 12 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.ValidateLiquidationCall.t.sol:LiquidationLogicValidateLiquidationCallTest
[PASS] test_validateLiquidationCall() (gas: 26045)
[PASS] test_validateLiquidationCall_revertsWith_CannotReceiveShares() (gas: 259541)
[PASS] test_validateLiquidationCall_revertsWith_CollateralCannotBeLiquidated() (gas: 45213)
[PASS] test_validateLiquidationCall_revertsWith_HealthFactorNotBelowThreshold() (gas: 31843)
[PASS] test_validateLiquidationCall_revertsWith_InvalidDebtToCover() (gas: 26816)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotBorrowed() (gas: 26935)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotEnabledAsCollateral_NotUsingAsCollateral() (gas: 27042)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotEnabledAsCollateral_ZeroCollateralFactor() (gas: 27072)
[PASS] test_validateLiquidationCall_revertsWith_ReserveNotSupplied() (gas: 26902)
[PASS] test_validateLiquidationCall_revertsWith_ReservePaused_CollateralPaused() (gas: 31944)
[PASS] test_validateLiquidationCall_revertsWith_ReservePaused_DebtPaused() (gas: 31944)
[PASS] test_validateLiquidationCall_revertsWith_SelfLiquidation() (gas: 33701)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 22.96ms (1.44ms CPU time)

Ran 27 tests for tests/unit/MathUtils.t.sol:MathUtilsTest
[PASS] test_add_edge_cases() (gas: 4679)
[PASS] test_add_negative_operand(uint256,int256) (runs: 5000, μ: 9086, ~: 8834)
[PASS] test_add_positive_operand(uint256,int256) (runs: 5000, μ: 3919, ~: 3916)
[PASS] test_calculateLinearInterest() (gas: 4368)
[PASS] test_calculateLinearInterest_add_edge() (gas: 4890)
[PASS] test_calculateLinearInterest_edge_cases() (gas: 16246)
Logs:
  Bound result 0
  Bound result 1
  Bound result 864000000
  Bound result 864000000

[PASS] test_calculateLinearInterest_reverts_on_past_timestamp(uint40) (runs: 5000, μ: 7540, ~: 7381)
[PASS] test_constants() (gas: 3110)
[PASS] test_fuzz_calculateLinearInterest(uint96,uint40,uint256) (runs: 5000, μ: 8581, ~: 8824)
[PASS] test_fuzz_mulDivDown(uint256,uint256,uint256) (runs: 5000, μ: 3514, ~: 3577)
[PASS] test_fuzz_mulDivUp(uint256,uint256,uint256) (runs: 5000, μ: 3599, ~: 3724)
[PASS] test_min(uint256,uint256) (runs: 5000, μ: 3281, ~: 3281)
[PASS] test_mulDivDown_NoRemainder() (gas: 3223)
[PASS] test_mulDivDown_RevertOnDivByZero() (gas: 3107)
[PASS] test_mulDivDown_RevertOnOverflow() (gas: 3161)
[PASS] test_mulDivDown_WithRemainder() (gas: 3268)
[PASS] test_mulDivDown_ZeroAOrB() (gas: 3721)
[PASS] test_mulDivUp_NoRemainder() (gas: 3249)
[PASS] test_mulDivUp_RevertOnDivByZero() (gas: 3084)
[PASS] test_mulDivUp_RevertOnOverflow() (gas: 3140)
[PASS] test_mulDivUp_WithRemainder() (gas: 3248)
[PASS] test_mulDivUp_ZeroAOrB() (gas: 3792)
[PASS] test_signedSub(uint256,uint256) (runs: 5000, μ: 8586, ~: 8530)
[PASS] test_signedSub_revertsWith_SafeCastOverflowedUintToInt(uint256) (runs: 5000, μ: 7650, ~: 7702)
[PASS] test_uncheckedAdd(uint256,uint256) (runs: 5000, μ: 3447, ~: 3438)
[PASS] test_uncheckedExp(uint256,uint256) (runs: 5000, μ: 12519, ~: 9743)
[PASS] test_uncheckedSub(uint256,uint256) (runs: 5000, μ: 3419, ~: 3340)
Suite result: ok. 27 passed; 0 failed; 0 skipped; finished in 1.79s (1.78s CPU time)

Ran 40 tests for tests/unit/misc/NativeTokenGateway.t.sol:NativeTokenGatewayTest
[PASS] test_borrowNative() (gas: 662747)
Logs:
  Bound result 5000000000000000000

[PASS] test_borrowNative_fuzz(uint256) (runs: 5000, μ: 662168, ~: 662798)
[PASS] test_borrowNative_revertsWith_InvalidAmount() (gas: 32382)
[PASS] test_borrowNative_revertsWith_NotNativeWrappedAsset() (gas: 32457)
[PASS] test_borrowNative_revertsWith_ReentrancyGuardReentrantCall_hubDraw() (gas: 283081)
[PASS] test_borrowNative_revertsWith_ReentrancyGuardReentrantCall_spokeBorrow() (gas: 271138)
[PASS] test_borrowNative_revertsWith_SpokeNotRegistered() (gas: 25340)
[PASS] test_constructor() (gas: 12715)
[PASS] test_constructor_revertsWith_InvalidAddress() (gas: 5958)
[PASS] test_fallback_revertsWith_UnsupportedAction() (gas: 17616)
[PASS] test_receive_revertsWith_UnsupportedAction() (gas: 17408)
[PASS] test_repayNative() (gas: 751768)
Logs:
  Bound result 5000000000000000000

[PASS] test_repayNative_excessAmount() (gas: 660287)
[PASS] test_repayNative_fuzz(uint256) (runs: 5000, μ: 746822, ~: 752333)
[PASS] test_repayNative_fuzz_withInterest(uint256,uint256) (runs: 5000, μ: 670651, ~: 666366)
[PASS] test_repayNative_revertsWith_InvalidAmount() (gas: 32463)
[PASS] test_repayNative_revertsWith_NativeAmountMismatch() (gas: 30030)
[PASS] test_repayNative_revertsWith_NotNativeWrappedAsset() (gas: 39231)
[PASS] test_repayNative_revertsWith_ReentrancyGuardReentrantCall_hubRestore() (gas: 325951)
[PASS] test_repayNative_revertsWith_ReentrancyGuardReentrantCall_spokeRepay() (gas: 303133)
[PASS] test_repayNative_revertsWith_SpokeNotRegistered() (gas: 38728)
[PASS] test_supplyAndCollateralNative() (gas: 333101)
Logs:
  Bound result 100000000000000000000

[PASS] test_supplyAndCollateralNative_fuzz(uint256) (runs: 5000, μ: 333407, ~: 333129)
[PASS] test_supplyNative() (gas: 304855)
Logs:
  Bound result 100000000000000000000

[PASS] test_supplyNative_fuzz(uint256) (runs: 5000, μ: 305164, ~: 304882)
[PASS] test_supplyNative_revertsWith_InvalidAmount() (gas: 32417)
[PASS] test_supplyNative_revertsWith_NativeAmountMismatch() (gas: 30014)
[PASS] test_supplyNative_revertsWith_NotNativeWrappedAsset() (gas: 39197)
[PASS] test_supplyNative_revertsWith_ReentrancyGuardReentrantCall_hubAdd() (gas: 374220)
[PASS] test_supplyNative_revertsWith_ReentrancyGuardReentrantCall_spokeSupply() (gas: 336133)
[PASS] test_supplyNative_revertsWith_SpokeNotRegistered() (gas: 38740)
[PASS] test_withdrawNative() (gas: 330881)
Logs:
  Bound result 100000000000000000000

[PASS] test_withdrawNative_fuzz(uint256) (runs: 5000, μ: 330458, ~: 330953)
[PASS] test_withdrawNative_fuzz_allBalance(uint256) (runs: 5000, μ: 267655, ~: 267456)
[PASS] test_withdrawNative_fuzz_allBalanceWithInterest(uint256,uint256) (runs: 5000, μ: 613438, ~: 613424)
[PASS] test_withdrawNative_revertsWith_InvalidAmount() (gas: 32479)
[PASS] test_withdrawNative_revertsWith_NotNativeWrappedAsset() (gas: 32512)
[PASS] test_withdrawNative_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 299983)
[PASS] test_withdrawNative_revertsWith_ReentrancyGuardReentrantCall_spokeWithdraw() (gas: 271200)
[PASS] test_withdrawNative_revertsWith_SpokeNotRegistered() (gas: 25395)
Suite result: ok. 40 passed; 0 failed; 0 skipped; finished in 62.61s (62.59s CPU time)

Ran 3 tests for tests/unit/NoncesKeyed.t.sol:NoncesKeyedTest
[PASS] test_useCheckedNonce_monotonic(bytes32) (runs: 5000, μ: 12863, ~: 12863)
[PASS] test_useCheckedNonce_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 97231, ~: 97553)
[PASS] test_useNonce_monotonic(bytes32) (runs: 5000, μ: 13531, ~: 13531)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.01s (4.01s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueInterest.t.sol:SpokeAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 132488)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 628046, ~: 627882)
[PASS] test_accrueInterest_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 249505, ~: 249502)
[PASS] test_accrueInterest_TenPercentRp(uint256,uint40) (runs: 5000, μ: 576854, ~: 577211)
[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 535521, ~: 535999)
[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 3838568, ~: 3853557)
[PASS] test_accrueInterest_fuzz_RatesRPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),(uint96,uint96,uint96,uint96),uint40) (runs: 5000, μ: 3908446, ~: 3923074)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 191.80s (282.84s CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateDebt.t.sol:LiquidationLogicLiquidateDebtTest
[PASS] test_liquidateDebt_fuzz(uint256) (runs: 5000, μ: 229907, ~: 229907)
[PASS] test_liquidateDebt_revertsWith_ArithmeticUnderflow() (gas: 97257)
[PASS] test_liquidateDebt_revertsWith_InsufficientAllowance() (gas: 124250)
[PASS] test_liquidateDebt_revertsWith_InsufficientBalance() (gas: 181665)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 90.13s (90.11s CPU time)

Ran 5 tests for tests/unit/Spoke/Spoke.AccrueLiquidityFee.EdgeCases.t.sol:SpokeAccrueLiquidityFeeEdgeCasesTest
[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 536373, ~: 536513)
[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 787781, ~: 787851)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 79609595)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 562079498)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 536675)
Logs:
  Bound result 500000000000000000000
  Bound result 5000
  Bound result 34560000
  Bound result 2

Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 17.76s (27.44s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueLiquidityFee.t.sol:SpokeAccrueLiquidityFeeTest
[PASS] test_accrueLiquidityFee() (gas: 857832)
[PASS] test_accrueLiquidityFee_NoActionTaken() (gas: 121608)
[PASS] test_accrueLiquidityFee_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 244615, ~: 244552)
[PASS] test_accrueLiquidityFee_exact() (gas: 863611)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 934096, ~: 954857)
[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 542538)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 889975)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 19.35s (35.35s CPU time)

Ran 35 tests for tests/unit/Hub/Hub.Config.t.sol:HubConfigTest
[PASS] test_addAsset_fuzz(address,uint8,address) (runs: 5000, μ: 412292, ~: 412332)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_feeReceiver(address,uint8,address) (runs: 5000, μ: 45242, ~: 44933)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 5000, μ: 45250, ~: 44942)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 5000, μ: 36628, ~: 36628)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 5000, μ: 45845, ~: 45893)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 5000, μ: 45931, ~: 46215)
[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 5000, μ: 86299097911, ~: 34870)
[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 981867)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 978975)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 46470)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 126556, ~: 126608)
[PASS] test_addSpoke_fuzz_revertsWith_AssetNotListed(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 35211, ~: 35199)
[PASS] test_addSpoke_fuzz_revertsWith_InvalidAddress_spoke(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 33883, ~: 33931)
[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 39667)
[PASS] test_hub_deploy_reverts_on_InvalidConstructorInput() (gas: 776973)
[PASS] test_hub_max_riskPremium() (gas: 8588)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 718030)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 617825)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 70382)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 5000, μ: 268218, ~: 268578)
[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 5000, μ: 819637, ~: 819493)
[PASS] test_updateAssetConfig_fuzz_LiquidityFee(uint256,uint16) (runs: 5000, μ: 722157, ~: 722029)
[PASS] test_updateAssetConfig_fuzz_NewFeeReceiver(uint256) (runs: 5000, μ: 821181, ~: 821219)
[PASS] test_updateAssetConfig_fuzz_NewInterestRateStrategy(uint256) (runs: 5000, μ: 696253, ~: 696287)
[PASS] test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed(uint256) (runs: 5000, μ: 872147, ~: 872180)
[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 5000, μ: 695371, ~: 695427)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidInterestRateStrategy(uint256) (runs: 5000, μ: 60846, ~: 60898)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidLiquidityFee(uint256,(address,uint16,address,address)) (runs: 5000, μ: 40109, ~: 40018)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 484410)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 198430, ~: 198871)
[PASS] test_updateAssetConfig_fuzz_revertsWith_setInterestRateDataReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 95561, ~: 96007)
[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 996266)
Logs:
  Bound result 2
  Bound result 500
  Bound result 1
  Bound result 500
  Bound result 3
  Bound result 1000
  Bound result 5
  Bound result 500

[PASS] test_updateSpokeConfig_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 59116, ~: 59178)
[PASS] test_updateSpokeConfig_fuzz_revertsWith_SpokeNotListed(uint256,address,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 40476, ~: 40544)
[PASS] test_updateSpokeConfig_revertsWith_AssetNotListed() (gas: 29603)
Suite result: ok. 35 passed; 0 failed; 0 skipped; finished in 94.69s (94.66s CPU time)

Ran 16 tests for tests/unit/Hub/Hub.Draw.t.sol:HubDrawTest
[PASS] test_draw_DifferentSpokes() (gas: 354768)
[PASS] test_draw_fuzz_IncreasedBorrowRate(uint256,uint256) (runs: 5000, μ: 695308, ~: 695440)
[PASS] test_draw_fuzz_amounts_same_block(uint256,uint256) (runs: 5000, μ: 287756, ~: 287776)
[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded(uint40) (runs: 5000, μ: 82137, ~: 82096)
[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 286450, ~: 286702)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 34684, ~: 34464)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_draw(uint256) (runs: 5000, μ: 172365, ~: 172081)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_remove(uint256) (runs: 5000, μ: 134001, ~: 133805)
[PASS] test_draw_fuzz_revertsWith_InvalidAddress(uint256) (runs: 5000, μ: 16102, ~: 16102)
[PASS] test_draw_revertsWith_DrawCapExceeded_due_to_deficit() (gas: 269919)
[PASS] test_draw_revertsWith_InsufficientLiquidity() (gas: 28241)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_draw() (gas: 168692)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_remove() (gas: 131141)
[PASS] test_draw_revertsWith_InvalidAmount() (gas: 16233)
[PASS] test_draw_revertsWith_SpokeHalted() (gas: 61264)
[PASS] test_draw_revertsWith_SpokeNotActive() (gas: 61203)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 23.17s (23.15s CPU time)

Ran 8 tests for tests/unit/Hub/Hub.EliminateDeficit.t.sol:HubEliminateDeficitTest
[PASS] test_eliminateDeficit(uint256) (runs: 5000, μ: 661045, ~: 661045)
[PASS] test_eliminateDeficit_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 32532, ~: 32532)
[PASS] test_eliminateDeficit_fuzz_revertsWith_ArithmeticUnderflow_CallerSpokeNoFunds(uint256) (runs: 5000, μ: 351255, ~: 351255)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountNoDeficit() (gas: 35965)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountWithDeficit() (gas: 347592)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_on_UnregisteredCoveredSpoke() (gas: 36352)
[PASS] test_eliminateDeficit_revertsWith_SpokeNotActive_on_UnregisteredAsset() (gas: 383390)
[PASS] test_eliminateDeficit_revertsWith_callerSpokeNotActive() (gas: 159188)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 16.24s (16.22s CPU time)

Ran 6 tests for tests/unit/Hub/Hub.MintFeeShares.t.sol:HubMintFeeSharesTest
[PASS] test_mintFeeShares() (gas: 310124)
[PASS] test_mintFeeShares_noFees() (gas: 365611)
[PASS] test_mintFeeShares_noShares() (gas: 291681)
[PASS] test_mintFeeShares_revertsWith_AccessManagedUnauthorized() (gas: 24115)
[PASS] test_mintFeeShares_revertsWith_AssetNotListed() (gas: 27529)
[PASS] test_mintFeeShares_revertsWith_SpokeNotActive() (gas: 242098)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 25.14ms (3.92ms CPU time)

Ran 29 tests for tests/unit/libraries/PositionStatusMap.t.sol:PositionStatusMapTest
[PASS] test_bucketId() (gas: 8878)
[PASS] test_collateralCount() (gas: 107741)
[PASS] test_collateralCount(uint256) (runs: 5000, μ: 1896972, ~: 1696899)
[PASS] test_collateralCount_ignoresInvalidBits() (gas: 122622)
[PASS] test_constants() (gas: 44556)
[PASS] test_fls() (gas: 509035)
[PASS] test_fromBitId(uint256,uint256) (runs: 5000, μ: 14045, ~: 14336)
[PASS] test_fuzz_setBorrowing(uint256,bool) (runs: 5000, μ: 22294, ~: 32093)
[PASS] test_fuzz_setUseAsCollateral(uint256,bool) (runs: 5000, μ: 22199, ~: 12282)
[PASS] test_getBucketWord(uint256) (runs: 5000, μ: 14179, ~: 14179)
[PASS] test_isUsingAsCollateralOrBorrowing_slot0() (gas: 108334)
[PASS] test_isUsingAsCollateralOrBorrowing_slot1() (gas: 43997)
[PASS] test_isolateBorrowing(uint256) (runs: 5000, μ: 153030, ~: 153030)
[PASS] test_isolateBorrowingUntil(uint256,uint256) (runs: 5000, μ: 144215, ~: 143779)
[PASS] test_isolateCollateral(uint256) (runs: 5000, μ: 152949, ~: 152949)
[PASS] test_isolateCollateralUntil(uint256,uint256) (runs: 5000, μ: 144481, ~: 144121)
[PASS] test_isolateUntil(uint256,uint256) (runs: 5000, μ: 134615, ~: 134600)
[PASS] test_next(uint256) (runs: 5000, μ: 20123, ~: 19506)
[PASS] test_nextBorrowing(uint256) (runs: 5000, μ: 18030, ~: 16896)
[PASS] test_nextBorrowing_continuous() (gas: 61581372)
[PASS] test_nextCollateral(uint256) (runs: 5000, μ: 18111, ~: 16939)
[PASS] test_nextCollateral_continuous() (gas: 61888601)
[PASS] test_next_continuous() (gas: 89142401)
[PASS] test_popCount(bytes32) (runs: 5000, μ: 37897, ~: 37899)
[PASS] test_setBorrowing_slot0() (gas: 43924)
[PASS] test_setBorrowing_slot1() (gas: 43924)
[PASS] test_setUseAsCollateral_slot0() (gas: 44105)
[PASS] test_setUseAsCollateral_slot1() (gas: 44088)
[PASS] test_setters_use_correct_slot(uint256) (runs: 5000, μ: 36226, ~: 41309)
Suite result: ok. 29 passed; 0 failed; 0 skipped; finished in 91.39s (91.39s CPU time)

Ran 19 tests for tests/unit/Hub/Hub.Add.t.sol:HubAddTest
[PASS] test_add_AddCapReachedButNotExceeded_rounding() (gas: 664082)
[PASS] test_add_fuzz_AddCapReachedButNotExceeded(uint40) (runs: 5000, μ: 157469, ~: 157428)
[PASS] test_add_fuzz_multi_asset_multi_spoke(uint256,uint256,uint256) (runs: 5000, μ: 331174, ~: 331313)
[PASS] test_add_fuzz_revertsWith_AddCapExceeded(uint40) (runs: 5000, μ: 112154, ~: 112113)
[PASS] test_add_fuzz_revertsWith_AddCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 266055, ~: 265929)
[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 5000, μ: 223412, ~: 223634)
[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 5000, μ: 341725, ~: 341746)
[PASS] test_add_fuzz_single_spoke_multi_add(uint256,uint256) (runs: 5000, μ: 798897, ~: 798932)
[PASS] test_add_multi_add_minimal_shares() (gas: 320018)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 359828)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 64480)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 13619)
[PASS] test_add_revertsWith_InvalidShares() (gas: 222924)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 224170)
[PASS] test_add_revertsWith_SpokeHalted() (gas: 99541)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 99577)
[PASS] test_add_single_asset() (gas: 329590)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_add_with_increased_index() (gas: 300271)
[PASS] test_add_with_increased_index_with_premium() (gas: 678419)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 178.30s (215.65s CPU time)

Ran 9 tests for tests/gas/Hub.Operations.gas.t.sol:HubOperations_Gas_Tests
[PASS] test_add() (gas: 269972)
[PASS] test_deficit() (gas: 1325968)
[PASS] test_draw() (gas: 418374)
[PASS] test_mintFeeShares() (gas: 499664)
[PASS] test_payFee_transferShares() (gas: 967016)
[PASS] test_refreshPremium() (gas: 633268)
[PASS] test_remove() (gas: 310118)
[PASS] test_restore() (gas: 877564)
[PASS] test_restore_with_transfer() (gas: 878229)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 43.36ms (6.83ms CPU time)

Ran 5 tests for tests/unit/Rescuable.t.sol:RescuableTest
[PASS] test_constructor() (gas: 12531)
[PASS] test_rescueNative_fuzz(uint256) (runs: 5000, μ: 33301, ~: 33478)
[PASS] test_rescueNative_revertsWith_OnlyRescueGuardian() (gas: 11089)
[PASS] test_rescueToken_fuzz(uint256) (runs: 5000, μ: 206629, ~: 206759)
[PASS] test_rescueToken_revertsWith_OnlyRescueGuardian() (gas: 180556)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 3.36s (3.34s CPU time)

Ran 10 tests for tests/unit/PercentageMath.t.sol:PercentageMathTests
[PASS] test_constants() (gas: 8604)
[PASS] test_fromBpsDown() (gas: 9654)
[PASS] test_percentDiv() (gas: 14993)
[PASS] test_percentDivUp_ge_value(uint256,uint256) (runs: 5000, μ: 15120, ~: 15261)
[PASS] test_percentDivUp_le_value(uint256,uint256) (runs: 5000, μ: 15346, ~: 15347)
[PASS] test_percentDiv_fuzz(uint256,uint256) (runs: 5000, μ: 12617, ~: 12760)
[PASS] test_percentMul() (gas: 14932)
[PASS] test_percentMulUp_ge_value(uint256,uint256) (runs: 5000, μ: 15331, ~: 15330)
[PASS] test_percentMulUp_le_value(uint256,uint256) (runs: 5000, μ: 15128, ~: 15264)
[PASS] test_percentMul_fuzz(uint256,uint256) (runs: 5000, μ: 11525, ~: 12063)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 96.22s (97.17s CPU time)

Ran 14 tests for tests/unit/Spoke/Spoke.Borrow.Validation.t.sol:SpokeBorrowValidationTest
[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded(uint256,uint40) (runs: 5000, μ: 110476, ~: 110489)
[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint256) (runs: 5000, μ: 681318, ~: 681551)
[PASS] test_borrow_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 295205, ~: 294965)
[PASS] test_borrow_fuzz_revertsWith_InvalidAmount(uint256) (runs: 5000, μ: 34368, ~: 34420)
[PASS] test_borrow_fuzz_revertsWith_ReserveFrozen(uint256,uint256) (runs: 5000, μ: 71865, ~: 71654)
[PASS] test_borrow_fuzz_revertsWith_ReserveNotBorrowable(uint256,uint256) (runs: 5000, μ: 71987, ~: 71763)
[PASS] test_borrow_fuzz_revertsWith_ReserveNotListed(uint256,uint256) (runs: 5000, μ: 27412, ~: 27138)
[PASS] test_borrow_fuzz_revertsWith_ReservePaused(uint256,uint256) (runs: 5000, μ: 71796, ~: 71570)
[PASS] test_borrow_revertsWith_InsufficientLiquidity() (gas: 294832)
Logs:
  Bound result 10000000000000000000

[PASS] test_borrow_revertsWith_InvalidAmount() (gas: 35995)
Logs:
  Bound result 2

[PASS] test_borrow_revertsWith_ReserveFrozen() (gas: 73192)
Logs:
  Bound result 2
  Bound result 1

[PASS] test_borrow_revertsWith_ReserveNotBorrowable() (gas: 73277)
Logs:
  Bound result 2
  Bound result 1

[PASS] test_borrow_revertsWith_ReserveNotListed() (gas: 28940)
Logs:
  Bound result 1

[PASS] test_borrow_revertsWith_ReservePaused() (gas: 73150)
Logs:
  Bound result 2
  Bound result 1

Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 14.46s (14.44s CPU time)

Ran 5 tests for tests/unit/misc/SignatureGateway/SignatureGateway.PermitReserve.t.sol:SignatureGatewayPermitReserveTest
[PASS] test_permitReserve() (gas: 101562)
[PASS] test_permitReserve_forwards_correct_call() (gas: 51057)
[PASS] test_permitReserve_ignores_permit_reverts() (gas: 40082)
[PASS] test_permitReserve_revertsWith_ReserveNotListed() (gas: 30997)
[PASS] test_permitReserve_revertsWith_SpokeNotRegistered() (gas: 29372)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 23.21ms (1.45ms CPU time)

Ran 2 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Reverts.InsufficientAllowance.t.sol:SignatureGateway_InsufficientAllowance_Test
[PASS] test_repayWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 452897)
[PASS] test_supplyWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 87253)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 24.69ms (3.08ms CPU time)

Ran 8 tests for tests/unit/ReserveFlags.t.sol:ReserveFlagsTests
[PASS] test_constants() (gas: 13493)
[PASS] test_create_fuzz(bool,bool,bool,bool,bool) (runs: 5000, μ: 16325, ~: 16319)
[PASS] test_setBorrowable_fuzz(uint8) (runs: 5000, μ: 13338, ~: 13338)
[PASS] test_setFrozen_fuzz(uint8) (runs: 5000, μ: 13301, ~: 13301)
[PASS] test_setLiquidatable_fuzz(uint8) (runs: 5000, μ: 13346, ~: 13346)
[PASS] test_setPaused_fuzz(uint8) (runs: 5000, μ: 13221, ~: 13221)
[PASS] test_setReceiveSharesEnabled_fuzz(uint8) (runs: 5000, μ: 13284, ~: 13284)
[PASS] test_set_flags() (gas: 94213)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.65s (2.15s CPU time)

Ran 10 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Constants.t.sol:SignatureGatewayConstantsTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 5650)
[PASS] test_borrow_typeHash() (gas: 9867)
[PASS] test_constructor() (gas: 3749)
[PASS] test_eip712Domain() (gas: 10940)
[PASS] test_repay_typeHash() (gas: 9813)
[PASS] test_setUsingAsCollateral_typeHash() (gas: 9802)
[PASS] test_supply_typeHash() (gas: 9826)
[PASS] test_updateUserDynamicConfig_typeHash() (gas: 9910)
[PASS] test_updateUserRiskPremium_typeHash() (gas: 9867)
[PASS] test_withdraw_typeHash() (gas: 9912)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 23.55ms (2.13ms CPU time)

Ran 8 tests for tests/unit/Spoke/Spoke.Repay.Scenario.t.sol:SpokeRepayScenarioTest
[PASS] test_fuzz_repay_borrow_twice_repay_twice((uint256,uint256,uint256,uint40),(uint256,uint256,uint256,uint40)) (runs: 5000, μ: 1203699, ~: 1208242)
[PASS] test_fuzz_repay_multiple_users_repay_same_reserve((uint256,uint256,uint256,uint256,uint256,uint256,address),(uint256,uint256,uint256,uint256,uint256,uint256,address),(uint256,uint256,uint256,uint256,uint256,uint256,address),uint256) (runs: 5000, μ: 2005048, ~: 1974388)
[PASS] test_repay_fuzz_multiple_users_multiple_assets(((uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),address),((uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),address),((uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),address),uint40) (runs: 5000, μ: 5901246, ~: 5901394)
[PASS] test_repay_fuzz_two_users_multiple_assets(((uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),address),((uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),(uint256,uint256,uint256,uint256,uint256),address),uint40) (runs: 5000, μ: 4183338, ~: 4183613)
[PASS] test_repay_partial_then_max() (gas: 681222)
[PASS] test_repay_round_trip_borrow_repay(uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 858742, ~: 861624)
[PASS] test_repay_round_trip_repay_borrow(uint256,uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 939607, ~: 948339)
[PASS] test_repay_two_users_repay_same_reserve((uint256,uint256,uint256,uint256,uint256,uint256,address),(uint256,uint256,uint256,uint256,uint256,uint256,address),uint256) (runs: 5000, μ: 1446759, ~: 1477061)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 301.58s (301.56s CPU time)

Ran 2 tests for tests/unit/Spoke/Spoke.Repay.Validation.t.sol:SpokeRepayValidationTest
[PASS] test_repay_revertsWith_ReserveNotListed() (gas: 23228)
[PASS] test_repay_revertsWith_ReservePaused() (gas: 64686)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 24.57ms (371.29µs CPU time)

Ran 10 tests for tests/unit/Spoke/Spoke.PositionManager.t.sol:SpokePositionManagerTest
[PASS] test_onlyPositionManager_on_borrow() (gas: 536767)
[PASS] test_onlyPositionManager_on_repay() (gas: 558265)
[PASS] test_onlyPositionManager_on_supply() (gas: 291330)
[PASS] test_onlyPositionManager_on_updateUserDynamicConfig() (gas: 1279818)
[PASS] test_onlyPositionManager_on_updateUserRiskPremium() (gas: 1408792)
[PASS] test_onlyPositionManager_on_usingAsCollateral() (gas: 144335)
[PASS] test_onlyPositionManager_on_withdraw() (gas: 319888)
[PASS] test_renouncePositionManagerRole() (gas: 20268)
[PASS] test_renouncePositionManagerRole_noop_from_disabled() (gas: 21882)
[PASS] test_setApprovalForPositionManager(bytes32) (runs: 5000, μ: 18111, ~: 18111)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 301.96s (301.94s CPU time)

Ran 6 tests for tests/unit/Hub/Hub.PayFee.t.sol:HubPayFeeTest
[PASS] test_payFee_fuzz(uint256,uint256) (runs: 5000, μ: 702278, ~: 702439)
[PASS] test_payFee_fuzz_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 702711, ~: 702987)
[PASS] test_payFee_revertsWith_InvalidShares() (gas: 20320)
[PASS] test_payFee_revertsWith_SpokeNotActive() (gas: 61202)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded() (gas: 138343)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded_with_interest() (gas: 642318)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.74s (37.08s CPU time)

Ran 4 tests for tests/unit/Spoke/Spoke.Borrow.t.sol:SpokeBorrowTest
[PASS] test_borrow() (gas: 1118143)
[PASS] test_borrow_fuzz_amounts(uint256,uint256) (runs: 5000, μ: 1127197, ~: 1127253)
[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubDraw() (gas: 400144)
[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 525482)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 27.82s (27.80s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.Repay.EdgeCases.t.sol:SpokeRepayEdgeCaseTest
[PASS] test_fuzz_repay_effect_on_ex_rates(uint256,uint256) (runs: 5000, μ: 683697, ~: 683517)
[PASS] test_repay_less_than_share() (gas: 577947)
[PASS] test_repay_only_base_debt_interest() (gas: 754821)
[PASS] test_repay_only_base_debt_no_premium() (gas: 639255)
[PASS] test_repay_supply_ex_rate_decr() (gas: 1464797)
[PASS] test_repay_supply_ex_rate_decr_skip_time() (gas: 1461510)
[PASS] test_repay_zero_shares_nonzero_premium_debt() (gas: 758592)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 14.37s (14.36s CPU time)

Ran 24 tests for tests/unit/Spoke/Spoke.Config.t.sol:SpokeConfigTest
[PASS] test_addReserve() (gas: 418791)
[PASS] test_addReserve_fuzz_revertsWith_AssetNotListed() (gas: 285786)
[PASS] test_addReserve_revertsWith_InvalidAddress_hub() (gas: 5088945)
[PASS] test_addReserve_revertsWith_InvalidAddress_oracle() (gas: 5147132)
[PASS] test_addReserve_revertsWith_InvalidAssetId() (gas: 32930)
[PASS] test_addReserve_revertsWith_ReserveExists() (gas: 397619)
[PASS] test_spoke_deploy() (gas: 5041356)
[PASS] test_spoke_deploy_reverts_on_InvalidConstructorInput() (gas: 776967)
[PASS] test_spoke_deploy_reverts_on_InvalidOracleDecimals() (gas: 779211)
[PASS] test_updateLiquidationConfig_fuzz_liqBonusConfig((uint128,uint64,uint16)) (runs: 5000, μ: 52960, ~: 53041)
[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_healthFactorForMaxBonus((uint128,uint64,uint16)) (runs: 5000, μ: 36879, ~: 37137)
[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_liquidationBonusFactor((uint128,uint64,uint16)) (runs: 5000, μ: 36664, ~: 36438)
[PASS] test_updateLiquidationConfig_fuzz_targetHealthFactor(uint128) (runs: 5000, μ: 46953, ~: 47249)
[PASS] test_updateLiquidationConfig_liqBonusConfig() (gas: 52061)
Logs:
  Bound result 900000000000000000
  Bound result 1000
  Bound result 1000000000000000000

[PASS] test_updateLiquidationConfig_revertsWith_InvalidLiquidationConfig_healthFactorForMaxBonus() (gas: 35597)
Logs:
  Bound result 1000000000000000000
  Bound result 1000
  Bound result 1000000000000000000

[PASS] test_updateLiquidationConfig_revertsWith_InvalidLiquidationConfig_liquidationBonusFactor() (gas: 35596)
Logs:
  Bound result 900000000000000000
  Bound result 10001
  Bound result 1000000000000000000

[PASS] test_updateLiquidationConfig_targetHealthFactor() (gas: 46578)
Logs:
  Bound result 1000000000000000001

[PASS] test_updateReserveConfig() (gas: 55945)
[PASS] test_updateReserveConfig_fuzz((uint24,bool,bool,bool,bool,bool)) (runs: 5000, μ: 57021, ~: 56857)
[PASS] test_updateReserveConfig_revertsWith_InvalidCollateralRisk() (gas: 40341)
[PASS] test_updateReserveConfig_revertsWith_ReserveNotListed() (gas: 36851)
[PASS] test_updateReservePriceSource() (gas: 261449)
[PASS] test_updateReservePriceSource_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 31031, ~: 31031)
[PASS] test_updateReservePriceSource_revertsWith_ReserveNotListed() (gas: 34831)
Suite result: ok. 24 passed; 0 failed; 0 skipped; finished in 3.80s (3.78s CPU time)

Ran 11 tests for tests/unit/Hub/Hub.Reclaim.t.sol:HubReclaimTest
[PASS] test_reclaim() (gas: 651839)
Logs:
  Bound result 1000000000000000000000
  Bound result 500000000000000000000
  Bound result 200000000000000000000

[PASS] test_reclaim_fullAmount() (gas: 634379)
[PASS] test_reclaim_fuzz(uint256,uint256,uint256) (runs: 5000, μ: 653543, ~: 652780)
[PASS] test_reclaim_multipleSweepsAndReclaims() (gas: 742924)
[PASS] test_reclaim_revertsWith_AssetNotListed() (gas: 13093)
[PASS] test_reclaim_revertsWith_InsufficientTransferred() (gas: 455770)
[PASS] test_reclaim_revertsWith_InsufficientTransferred_noSwept() (gas: 102165)
[PASS] test_reclaim_revertsWith_InvalidAmount_zero() (gas: 92347)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93230, ~: 93230)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController_init() (gas: 40386)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept_afterSweep() (gas: 619122)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 14.68s (16.25s CPU time)

Ran 21 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Reverts.InvalidSignature.t.sol:SignatureGatewayInvalidSignatureTest
[PASS] test_borrowWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 156250, ~: 155332)
[PASS] test_borrowWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39091)
[PASS] test_borrowWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37280)
[PASS] test_repayWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 158058, ~: 158681)
[PASS] test_repayWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39024)
[PASS] test_repayWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37324)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 156482, ~: 157055)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39052)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37350)
[PASS] test_supplyWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 157838, ~: 157025)
[PASS] test_supplyWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39069)
[PASS] test_supplyWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37312)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 147048, ~: 146727)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidSignatureDueTo_InvalidSigner() (gas: 25338)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 27068)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 145868, ~: 146764)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidSignatureDueTo_InvalidSigner() (gas: 25360)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 27105)
[PASS] test_withdrawWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 158740, ~: 158723)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39111)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37322)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 42.31s (66.55s CPU time)

Ran 7 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Reverts.SpokeNotRegistered.t.sol:SignatureGateway_SpokeNotRegistered_Test
[PASS] test_borrowWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13428, ~: 13428)
[PASS] test_repayWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13428, ~: 13428)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_SpokeNotRegistered((address,uint256,bool,address,uint256,uint256)) (runs: 5000, μ: 13397, ~: 13397)
[PASS] test_supplyWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13471, ~: 13471)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_SpokeNotRegistered((address,address,uint256,uint256)) (runs: 5000, μ: 13682, ~: 13682)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_SpokeNotRegistered((address,address,uint256,uint256)) (runs: 5000, μ: 13749, ~: 13749)
[PASS] test_withdrawWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13493, ~: 13493)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 12.14s (18.35s CPU time)

Ran 7 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Reverts.Unauthorized.t.sol:SignatureGateway_Unauthorized_PositionManagerActive_Test
[PASS] test_borrowWithSig_revertsWith_Unauthorized() (gas: 80421)
[PASS] test_repayWithSig_revertsWith_Unauthorized() (gas: 113388)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_Unauthorized() (gas: 72970)
[PASS] test_supplyWithSig_revertsWith_Unauthorized() (gas: 140050)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_Unauthorized() (gas: 81365)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_Unauthorized() (gas: 81542)
[PASS] test_withdrawWithSig_revertsWith_Unauthorized() (gas: 79432)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 26.28ms (4.07ms CPU time)

Ran 7 tests for tests/unit/misc/SignatureGateway/SignatureGateway.Reverts.Unauthorized.t.sol:SignatureGateway_Unauthorized_PositionManagerNotActive_Test
[PASS] test_borrowWithSig_revertsWith_Unauthorized() (gas: 78213)
[PASS] test_repayWithSig_revertsWith_Unauthorized() (gas: 111180)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_Unauthorized() (gas: 70762)
[PASS] test_supplyWithSig_revertsWith_Unauthorized() (gas: 137842)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_Unauthorized() (gas: 79157)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_Unauthorized() (gas: 79334)
[PASS] test_withdrawWithSig_revertsWith_Unauthorized() (gas: 77224)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 25.53ms (4.05ms CPU time)

Ran 4 tests for tests/unit/misc/SignatureGateway/SignatureGateway.SetSelfAsUserPositionManagerWithSig.t.sol:SignatureGatewaySetSelfAsUserPositionManagerTest
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 140506)
[PASS] test_setSelfAsUserPositionManagerWithSig_forwards_correct_call() (gas: 32923)
[PASS] test_setSelfAsUserPositionManagerWithSig_ignores_underlying_spoke_reverts() (gas: 29675)
[PASS] test_setSelfAsUserPositionManagerWithSig_revertsWith_SpokeNotRegistered() (gas: 16476)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 22.18ms (1.13ms CPU time)

Ran 12 tests for tests/unit/Hub/Hub.RefreshPremium.t.sol:HubRefreshPremiumTest
[PASS] test_refreshPremium_emitsEvent() (gas: 254285)
[PASS] test_refreshPremium_fuzz_positiveDeltas(uint256,int256,int256) (runs: 5000, μ: 486892, ~: 491947)
[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 5000, μ: 464663, ~: 473364)
[PASS] test_refreshPremium_haltedSpokesAllowed() (gas: 121119)
[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 884782)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 5000, μ: 456981, ~: 457448)
[PASS] test_refreshPremium_negativeDeltas_withAccrual(uint256) (runs: 5000, μ: 525833, ~: 526047)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 841485)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 862005)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 58757)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 906888)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 705013)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 20.35s (30.80s CPU time)

Ran 10 tests for tests/unit/Spoke/Spoke.DynamicConfig.Triggers.t.sol:SpokeDynamicConfigTriggersTest
[PASS] test_borrow_triggers_dynamicConfigUpdate() (gas: 1333630)
[PASS] test_liquidate_does_not_trigger_dynamicConfigUpdate() (gas: 1607983)
[PASS] test_repay_does_not_trigger_dynamicConfigUpdate() (gas: 896722)
[PASS] test_supply_does_not_trigger_dynamicConfigUpdate() (gas: 1111417)
[PASS] test_updateUserDynamicConfig_doesHFCheck() (gas: 785351)
[PASS] test_updateUserDynamicConfig_reverts_when_not_authorized(address) (runs: 5000, μ: 1254670, ~: 1254670)
[PASS] test_updateUserDynamicConfig_triggers_dynamicConfigUpdate() (gas: 716618)
[PASS] test_updateUserDynamicConfig_updatesRP() (gas: 1283970)
[PASS] test_usingAsCollateral_triggers_dynamicConfigUpdate() (gas: 1360078)
[PASS] test_withdraw_triggers_dynamicConfigUpdate() (gas: 1362818)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 28.36s (28.34s CPU time)

Ran 23 tests for tests/unit/Hub/Hub.Restore.t.sol:HubRestoreTest
[PASS] test_restore_full_amount_with_interest() (gas: 360459)
Logs:
  Bound result...*[Comment body truncated]*

@github-actions
Copy link

github-actions bot commented Jan 9, 2026

Forge Build Sizes

🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
AaveOracle 2,834 3,488 21,742 45,664
AccessManager 12,985 14,210 11,591 34,942
AccessManagerEnumerable 16,881 18,699 7,695 30,453
Address 44 94 24,532 49,058
Arrays 44 94 24,532 49,058
Arrays.hub 16 44 24,560 49,108
Arrays.spoke 16 44 24,560 49,108
AssetInterestRateStrategy 2,709 2,894 21,867 46,258
AssetLogic 44 94 24,532 49,058
AssetLogic.hub 16 44 24,560 49,108
AuthorityUtils 44 94 24,532 49,058
AuthorityUtils.hub 16 44 24,560 49,108
AuthorityUtils.spoke 16 44 24,560 49,108
Bytes 44 94 24,532 49,058
Bytes.spoke 16 44 24,560 49,108
Comparators 44 94 24,532 49,058
Comparators.hub 16 44 24,560 49,108
Comparators.spoke 16 44 24,560 49,108
Constants 427 479 24,149 48,673
Create2Utils 134 184 24,442 48,968
DeployUtils 44 94 24,532 49,058
DeployWrapper 3,048 3,076 21,528 46,076
ECDSA 44 94 24,532 49,058
ECDSA.spoke 16 44 24,560 49,108
EIP712Hash (src/position-manager/libraries/EIP712Hash.sol) 441 493 24,135 48,659
EIP712Hash (src/spoke/libraries/EIP712Hash.sol) 171 221 24,405 48,931
EIP712Hash.spoke 166 194 24,410 48,958
EIP712Types 44 94 24,532 49,058
ERC1967Proxy 135 891 24,441 48,261
ERC1967Utils 44 94 24,532 49,058
EnumerableSet 44 94 24,532 49,058
EnumerableSet.hub 16 44 24,560 49,108
Errors 44 94 24,532 49,058
ExtSloadWrapper 394 422 24,182 48,730
GatewayBaseWrapper 2,400 2,675 22,176 46,477
Hashes 44 94 24,532 49,058
Hub 24,489 24,686 87 24,466
HubConfigurator 13,133 13,406 11,443 35,746
JsonBindings 12,835 12,887 11,741 36,265
KeyValueList 44 94 24,532 49,058
KeyValueList.spoke 16 44 24,560 49,108
KeyValueListWrapper 957 985 23,619 48,167
LibBit 44 94 24,532 49,058
LibBit.spoke 16 44 24,560 49,108
LiquidationLogic 7,942 7,994 16,634 41,158
LiquidationLogic.spoke 5,603 5,635 18,973 43,517
LiquidationLogicWrapper 13,706 13,880 10,870 35,272
LowLevelCall 44 94 24,532 49,058
Math 44 94 24,532 49,058
Math.hub 16 44 24,560 49,108
Math.spoke 16 44 24,560 49,108
MathUtils 44 94 24,532 49,058
MathUtils.hub 16 44 24,560 49,108
MathUtils.spoke 16 44 24,560 49,108
MockERC1271Wallet 828 962 23,748 48,190
MockERC20 2,540 3,006 22,036 46,146
MockNoncesKeyed 858 886 23,718 48,266
MockPriceFeed 737 1,395 23,839 47,757
MockReentrantCaller 882 1,083 23,694 48,069
MockSkimSpoke 1,116 1,275 23,460 47,877
NativeTokenGateway 6,168 6,585 18,408 42,567
NoncesKeyed 644 672 23,932 48,480
NoncesKeyed.spoke 387 413 24,189 48,739
Panic 44 94 24,532 49,058
Panic.hub 16 44 24,560 49,108
Panic.spoke 16 44 24,560 49,108
PercentageMath 44 94 24,532 49,058
PercentageMath.hub 16 44 24,560 49,108
PercentageMath.spoke 16 44 24,560 49,108
PercentageMathWrapper 632 660 23,944 48,492
PositionStatusMap 44 94 24,532 49,058
PositionStatusMap.spoke 16 44 24,560 49,108
PositionStatusMapWrapper 3,102 3,130 21,474 46,022
Premium 44 94 24,532 49,058
Premium.hub 16 44 24,560 49,108
Premium.spoke 16 44 24,560 49,108
ProxyAdmin 1,320 1,556 23,256 47,596
RescuableWrapper 908 1,042 23,668 48,110
ReserveFlagsMap 44 94 24,532 49,058
ReserveFlagsMap.spoke 16 44 24,560 49,108
ReserveFlagsMapWrapper 1,075 1,103 23,501 48,049
Roles 184 234 24,392 48,918
SafeCast 44 94 24,532 49,058
SafeCast.hub 16 44 24,560 49,108
SafeCast.spoke 16 44 24,560 49,108
SafeERC20 44 94 24,532 49,058
SafeERC20.hub 16 44 24,560 49,108
SafeERC20.spoke 16 44 24,560 49,108
SharesMath 44 94 24,532 49,058
SharesMath.hub 16 44 24,560 49,108
SignatureChecker 44 94 24,532 49,058
SignatureChecker.spoke 16 44 24,560 49,108
SignatureGateway 11,466 12,005 13,110 37,147
SlotDerivation 44 94 24,532 49,058
SlotDerivation.hub 16 44 24,560 49,108
SlotDerivation.spoke 16 44 24,560 49,108
SpokeConfigurator 11,354 11,627 13,222 37,525
SpokeInstance 24,366 25,098 210 24,054
StorageSlot 44 94 24,532 49,058
StorageSlot.hub 16 44 24,560 49,108
StorageSlot.spoke 16 44 24,560 49,108
TestnetERC20 3,649 4,525 20,927 44,627
Time 44 94 24,532 49,058
TransientSlot 44 94 24,532 49,058
TransientSlot.spoke 16 44 24,560 49,108
TransparentUpgradeableProxy 1,419 4,078 23,157 45,074
TreasurySpoke 3,599 4,014 20,977 45,138
UnitPriceFeed 777 1,771 23,799 47,381
UserPositionDebt 44 94 24,532 49,058
UserPositionDebt.spoke 16 44 24,560 49,108
UserPositionDebtWrapper 3,259 3,287 21,317 45,865
Utils 44 94 24,532 49,058
WETH9 2,148 2,614 22,428 46,538
WadRayMath 44 94 24,532 49,058
WadRayMath.hub 16 44 24,560 49,108
WadRayMath.spoke 16 44 24,560 49,108
WadRayMathWrapper 1,394 1,422 23,182 47,730

@yan-man
Copy link
Contributor

yan-man commented Jan 21, 2026

@CanonicalJP need to also update any mentions of paused spokes in hub to halted if there are any, according to #1131

@CanonicalJP CanonicalJP marked this pull request as ready for review January 22, 2026 11:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants