Skip to content

poc: emit bitmap#1169

Open
DhairyaSethi wants to merge 7 commits intodevfrom
poc/dynconfigevent
Open

poc: emit bitmap#1169
DhairyaSethi wants to merge 7 commits intodevfrom
poc/dynconfigevent

Conversation

@DhairyaSethi
Copy link
Member

No description provided.

@github-actions
Copy link

github-actions bot commented Jan 31, 2026

🌈 Test Results
No files changed, compilation skipped

Ran 4 tests for tests/unit/Spoke/Liquidations/Spoke.LiquidationCall.Dust.t.sol:SpokeLiquidationCallDustTest
[PASS] test_collateralDust_min_debtToTarget() (gas: 9624399)
[PASS] test_debtToCover_exceeds_collateralValue() (gas: 9616804)
[PASS] test_dustColl_allowed() (gas: 9482508)
[PASS] test_dustDebt_allowed() (gas: 9611795)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 56.46ms (20.16ms CPU time)

Ran 14 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_Gas_Tests
[PASS] test_borrow() (gas: 1337668)
[PASS] test_liquidation_full() (gas: 1906667)
[PASS] test_liquidation_partial() (gas: 1906384)
[PASS] test_liquidation_receiveShares_full() (gas: 1897234)
[PASS] test_liquidation_receiveShares_partial() (gas: 1896953)
[PASS] test_liquidation_reportDeficit_full() (gas: 1886283)
[PASS] test_multicall_ops() (gas: 1412423)
[PASS] test_repay() (gas: 872889)
[PASS] test_setUserPositionManagersWithSig() (gas: 307284)
[PASS] test_supply() (gas: 542426)
[PASS] test_updateRiskPremium() (gas: 1318956)
[PASS] test_updateUserDynamicConfig() (gas: 594111)
[PASS] test_usingAsCollateral() (gas: 1484992)
[PASS] test_withdraw() (gas: 1959387)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 87.65ms (32.33ms CPU time)

Ran 14 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_ZeroRiskPremium_Gas_Tests
[PASS] test_borrow() (gas: 1103962)
[PASS] test_liquidation_full() (gas: 1771814)
[PASS] test_liquidation_partial() (gas: 1771531)
[PASS] test_liquidation_receiveShares_full() (gas: 1762381)
[PASS] test_liquidation_receiveShares_partial() (gas: 1762100)
[PASS] test_liquidation_reportDeficit_full() (gas: 1808089)
[PASS] test_multicall_ops() (gas: 1329761)
[PASS] test_repay() (gas: 781995)
[PASS] test_setUserPositionManagersWithSig() (gas: 311738)
[PASS] test_supply() (gas: 545107)
[PASS] test_updateRiskPremium() (gas: 946508)
[PASS] test_updateUserDynamicConfig() (gas: 598565)
[PASS] test_usingAsCollateral() (gas: 1103244)
[PASS] test_withdraw() (gas: 1599601)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 75.32ms (28.68ms 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: 22993)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 25.36ms (1.13ms CPU time)

Ran 10 tests for tests/unit/Spoke/Spoke.PositionManager.t.sol:SpokePositionManagerTest
[PASS] test_onlyPositionManager_on_borrow() (gas: 541089)
[PASS] test_onlyPositionManager_on_repay() (gas: 563031)
[PASS] test_onlyPositionManager_on_supply() (gas: 291990)
[PASS] test_onlyPositionManager_on_updateUserDynamicConfig() (gas: 1294726)
[PASS] test_onlyPositionManager_on_updateUserRiskPremium() (gas: 1416204)
[PASS] test_onlyPositionManager_on_usingAsCollateral() (gas: 147821)
[PASS] test_onlyPositionManager_on_withdraw() (gas: 320944)
[PASS] test_renouncePositionManagerRole() (gas: 20290)
[PASS] test_renouncePositionManagerRole_noop_from_disabled() (gas: 21926)
[PASS] test_setApprovalForPositionManager(bytes32) (runs: 5000, μ: 18133, ~: 18133)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 405.48ms (381.90ms CPU time)

Ran 20 tests for tests/unit/AaveOracle.t.sol:AaveOracleTest
[PASS] test_DECIMALS() (gas: 8326)
[PASS] test_constructor() (gas: 18428)
[PASS] test_description() (gas: 12039)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 19887, ~: 20214)
Logs:
  Bound result 1

[PASS] test_getReservePrice() (gas: 48776)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 48047)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10898)
[PASS] test_getReservePrices() (gas: 80715)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 50930)
[PASS] test_getReserveSource() (gas: 48946)
[PASS] test_setReserveSource() (gas: 45988)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 102779)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17228)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 17065)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 13021)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 5051592)
[PASS] test_setSpoke() (gas: 5079493)
[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.14s (1.12s 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, μ: 688696, ~: 688517)
Logs:
  Bound result 97612385398899630614842
  Bound result 138010191
  Bound result 94575821765687438291648

[PASS] test_repay_less_than_share() (gas: 581455)
[PASS] test_repay_only_base_debt_interest() (gas: 759850)
[PASS] test_repay_only_base_debt_no_premium() (gas: 643157)
[PASS] test_repay_supply_ex_rate_decr() (gas: 1477481)
[PASS] test_repay_supply_ex_rate_decr_skip_time() (gas: 1474097)
[PASS] test_repay_zero_shares_nonzero_premium_debt() (gas: 762648)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 15.03s (15.00s CPU time)

Ran 17 tests for tests/unit/AccessManagerEnumerable.t.sol:AccessManagerEnumerableTest
[PASS] test_getRoleMembers_fuzz(uint256,uint256) (runs: 5000, μ: 1981485, ~: 1980367)
Logs:
  Bound result 9
  Bound result 10

[PASS] test_getRoleTargetSelectors_fuzz(uint256,uint256) (runs: 5000, μ: 1528839, ~: 1527966)
Logs:
  Bound result 9
  Bound result 10

[PASS] test_grantRole() (gas: 315886)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 5000, μ: 922902, ~: 919753)
Logs:
  Bound result 5

[PASS] test_revokeRole() (gas: 323138)
[PASS] test_setRoleAdmin_fuzz_trackAdminRoles_multipleRoles_multipleAdmins(uint256) (runs: 5000, μ: 2161397, ~: 2244247)
Logs:
  Bound result 12

[PASS] test_setRoleAdmin_fuzz_trackRolesAndTrackAdminRoles_multipleRoles(uint256) (runs: 5000, μ: 1975394, ~: 2114661)
Logs:
  Bound result 12

[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 22.38s (22.38s CPU time)

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

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

[PASS] test_calculateInterestRate_LeftToKinkPoint(uint256) (runs: 5000, μ: 24231, ~: 24372)
Logs:
  Bound result 137
  Bound result 252173843969976304268974536488

[PASS] test_calculateInterestRate_RightToKinkPoint(uint256) (runs: 5000, μ: 25364, ~: 25411)
Logs:
  Bound result 8137
  Bound result 252173843969976304268974536488

[PASS] test_calculateInterestRate_ZeroDebtZeroLiquidity() (gas: 18783)
Logs:
  Bound result 0

[PASS] test_calculateInterestRate_fuzz_ZeroDebt(uint256) (runs: 5000, μ: 19083, ~: 18834)
Logs:
  Bound result 3124043968137

[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 1.14s (1.12s 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, μ: 453554, ~: 449260)
[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.43s (21.43s 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, μ: 960846, ~: 936230)
Logs:
  Bound result 812

[PASS] test_extSloads(uint256,bytes) (runs: 5000, μ: 1005357, ~: 937179)
Logs:
  Bound result 362

Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 60.21s (60.21s 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: 65337)
[PASS] test_renouncePositionManagerRole_revertsWith_InvalidAddress() (gas: 74242)
[PASS] test_renouncePositionManagerRole_revertsWith_OwnableUnauthorizedAccount() (gas: 74461)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 422.71ms (398.34ms CPU time)

Ran 5 tests for tests/gas/Gateways.Operations.gas.t.sol:NativeTokenGateway_Gas_Tests
[PASS] test_borrowNative() (gas: 924353)
[PASS] test_repayNative() (gas: 993918)
[PASS] test_supplyAndCollateralNative() (gas: 308505)
[PASS] test_supplyNative() (gas: 286736)
[PASS] test_withdrawNative() (gas: 508864)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 48.77ms (4.28ms CPU time)

Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 751488)
[PASS] test_repayWithSig() (gas: 984427)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 209662)
[PASS] test_setUsingAsCollateralWithSig() (gas: 292627)
[PASS] test_supplyWithSig() (gas: 461059)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 149565)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 143206)
[PASS] test_withdrawWithSig() (gas: 409988)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 52.44ms (7.91ms CPU time)

Ran 6 tests for tests/unit/Hub/Hub.Access.t.sol:HubAccessTest
[PASS] test_change_authority() (gas: 206696)
[PASS] test_change_role_responsibility() (gas: 121264)
[PASS] test_hub_access_manager_exposure() (gas: 13439)
[PASS] test_hub_admin_access() (gas: 1350400)
[PASS] test_migrate_role_responsibility() (gas: 709031)
[PASS] test_setInterestRateData_access() (gas: 102679)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 27.97ms (3.91ms CPU time)

Ran 1 test for tests/unit/Spoke/Spoke.AccrueInterest.Scenario.t.sol:SpokeAccrueInterestScenarioTest
[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime_twoActions((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 5308040, ~: 5133525)
Logs:
  Bound result 416966230219621053938274952927
  Bound result 0
  Bound result 796581240052418918521216347353
  Bound result 563389367259961125742974148930
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 198784650842049752704523792805
  Bound result 12412
  Bound result 6
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 198784650842049752704523792805
  Bound result 12412

Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 126.69s (126.66s CPU time)

Ran 19 tests for tests/unit/Hub/Hub.Add.t.sol:HubAddTest
[PASS] test_add_AddCapReachedButNotExceeded_rounding() (gas: 667324)
[PASS] test_add_fuzz_AddCapReachedButNotExceeded(uint40) (runs: 5000, μ: 157899, ~: 157854)
Logs:
  Bound result 9

[PASS] test_add_fuzz_multi_asset_multi_spoke(uint256,uint256,uint256) (runs: 5000, μ: 332517, ~: 332656)
Logs:
  Bound result 3
  Bound result 218470873395738003579119570309
  Bound result 446067553769140138733721804

[PASS] test_add_fuzz_revertsWith_AddCapExceeded(uint40) (runs: 5000, μ: 112438, ~: 112393)
Logs:
  Bound result 9

[PASS] test_add_fuzz_revertsWith_AddCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 267110, ~: 266975)
Logs:
  Bound result 1291
  Bound result 1071208440522043736492
  Bound result 173721804

[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 5000, μ: 223949, ~: 224149)
Logs:
  Bound result 472857025091776839778846927542
  Bound result 775698876
  Bound result 1

[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 5000, μ: 342390, ~: 342416)
Logs:
  Bound result 3
  Bound result 24801959478194250780329

[PASS] test_add_fuzz_single_spoke_multi_add(uint256,uint256) (runs: 5000, μ: 805374, ~: 805403)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_add_multi_add_minimal_shares() (gas: 322574)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 360330)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 64504)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 13631)
[PASS] test_add_revertsWith_InvalidShares() (gas: 223488)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 224358)
[PASS] test_add_revertsWith_SpokeHalted() (gas: 99705)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 99741)
[PASS] test_add_single_asset() (gas: 330264)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_add_with_increased_index() (gas: 301390)
[PASS] test_add_with_increased_index_with_premium() (gas: 680841)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 44.33s (44.31s CPU time)

Ran 38 tests for tests/unit/Hub/Hub.Config.t.sol:HubConfigTest
[PASS] test_addAsset_fuzz(address,uint8,address) (runs: 5000, μ: 390363, ~: 390402)
Logs:
  Bound result 18

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_feeReceiver(address,uint8,address) (runs: 5000, μ: 45287, ~: 44992)
Logs:
  Bound result 14

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 5000, μ: 45330, ~: 45035)
Logs:
  Bound result 14

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 5000, μ: 36719, ~: 36719)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 5000, μ: 45943, ~: 45986)
Logs:
  Bound result 19

[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 5000, μ: 46020, ~: 46308)
Logs:
  Bound result 0

[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 5000, μ: 80332735023, ~: 34963)
Logs:
  Bound result 0

[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 956640)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 953770)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 48980)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 126676, ~: 126726)
Logs:
  Bound result 2

[PASS] test_addSpoke_fuzz_revertsWith_AssetNotListed(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 35246, ~: 35235)
Logs:
  Bound result 115792089237210883131902427821989989825587643461317453859929938703719099006974

[PASS] test_addSpoke_fuzz_revertsWith_InvalidAddress_spoke(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 33929, ~: 33979)
Logs:
  Bound result 2

[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 39773)
[PASS] test_getAssetId() (gas: 73160)
[PASS] test_getAssetId_fuzz_revertsWith_AssetNotListed(address) (runs: 5000, μ: 18561, ~: 18561)
[PASS] test_hub_deploy_reverts_on_InvalidConstructorInput() (gas: 828595)
[PASS] test_hub_max_riskPremium() (gas: 8610)
[PASS] test_isUnderlyingListed() (gas: 1178408)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 719507)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 618803)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 70708)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 5000, μ: 269305, ~: 269621)
Logs:
  Bound result 2
  Bound result 5526

[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 5000, μ: 822268, ~: 822129)
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, μ: 724733, ~: 724594)
Logs:
  Bound result 3
  Bound result 1
  Bound result 3
  Bound result 1

[PASS] test_updateAssetConfig_fuzz_NewFeeReceiver(uint256) (runs: 5000, μ: 823730, ~: 823764)
Logs:
  Bound result 3
  Bound result 3
  Bound result 1000

[PASS] test_updateAssetConfig_fuzz_NewInterestRateStrategy(uint256) (runs: 5000, μ: 698324, ~: 698358)
Logs:
  Bound result 3

[PASS] test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed(uint256) (runs: 5000, μ: 875331, ~: 875365)
Logs:
  Bound result 3
  Bound result 3
  Bound result 3
  Bound result 1000

[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 5000, μ: 700588, ~: 700641)
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, μ: 61083, ~: 61136)
Logs:
  Bound result 3

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidLiquidityFee(uint256,(address,uint16,address,address)) (runs: 5000, μ: 40144, ~: 40042)
Logs:
  Bound result 2
  Bound result 5526

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 485665)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 198818, ~: 199256)
Logs:
  Bound result 0
  Bound result 1

[PASS] test_updateAssetConfig_fuzz_revertsWith_setInterestRateDataReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 95909, ~: 96293)
Logs:
  Bound result 3
  Bound result 0

[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 880180)
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, μ: 59225, ~: 59284)
Logs:
  Bound result 2

[PASS] test_updateSpokeConfig_fuzz_revertsWith_SpokeNotListed(uint256,address,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 40525, ~: 40592)
Logs:
  Bound result 1

[PASS] test_updateSpokeConfig_revertsWith_AssetNotListed() (gas: 29639)
Suite result: ok. 38 passed; 0 failed; 0 skipped; finished in 94.95s (94.92s CPU time)

Ran 16 tests for tests/unit/Hub/Hub.Draw.t.sol:HubDrawTest
[PASS] test_draw_DifferentSpokes() (gas: 355609)
[PASS] test_draw_fuzz_IncreasedBorrowRate(uint256,uint256) (runs: 5000, μ: 696808, ~: 696945)
Logs:
  Bound result 3
  Bound result 100

[PASS] test_draw_fuzz_amounts_same_block(uint256,uint256) (runs: 5000, μ: 289182, ~: 289205)
Logs:
  Bound result 3
  Bound result 100

[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded(uint40) (runs: 5000, μ: 82329, ~: 82284)
Logs:
  Bound result 9

[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 287070, ~: 287319)
Logs:
  Bound result 1291
  Bound result 70309
  Bound result 173721804

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 34736, ~: 34512)
Logs:
  Bound result 3
  Bound result 100

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_draw(uint256) (runs: 5000, μ: 172812, ~: 172522)
Logs:
  Bound result 3124043968137

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_remove(uint256) (runs: 5000, μ: 134510, ~: 134305)
Logs:
  Bound result 3124043968137

[PASS] test_draw_fuzz_revertsWith_InvalidAddress(uint256) (runs: 5000, μ: 16138, ~: 16138)
[PASS] test_draw_revertsWith_DrawCapExceeded_due_to_deficit() (gas: 270524)
[PASS] test_draw_revertsWith_InsufficientLiquidity() (gas: 28289)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_draw() (gas: 169133)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_remove() (gas: 131641)
[PASS] test_draw_revertsWith_InvalidAmount() (gas: 16269)
[PASS] test_draw_revertsWith_SpokeHalted() (gas: 61452)
[PASS] test_draw_revertsWith_SpokeNotActive() (gas: 61391)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 23.21s (23.18s CPU time)

Ran 8 tests for tests/unit/Hub/Hub.EliminateDeficit.t.sol:HubEliminateDeficitTest
[PASS] test_eliminateDeficit(uint256) (runs: 5000, μ: 663621, ~: 663621)
[PASS] test_eliminateDeficit_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 32580, ~: 32580)
[PASS] test_eliminateDeficit_fuzz_revertsWith_ArithmeticUnderflow_CallerSpokeNoFunds(uint256) (runs: 5000, μ: 352014, ~: 352014)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountNoDeficit() (gas: 36025)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountWithDeficit() (gas: 348189)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_on_UnregisteredCoveredSpoke() (gas: 36412)
[PASS] test_eliminateDeficit_revertsWith_SpokeNotActive_on_UnregisteredAsset() (gas: 384011)
[PASS] test_eliminateDeficit_revertsWith_callerSpokeNotActive() (gas: 159412)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 16.34s (16.31s CPU time)

Ran 6 tests for tests/unit/Hub/Hub.MintFeeShares.t.sol:HubMintFeeSharesTest
[PASS] test_mintFeeShares() (gas: 311952)
[PASS] test_mintFeeShares_noFees() (gas: 367852)
[PASS] test_mintFeeShares_noShares() (gas: 293098)
[PASS] test_mintFeeShares_revertsWith_AccessManagedUnauthorized() (gas: 24139)
[PASS] test_mintFeeShares_revertsWith_AssetNotListed() (gas: 27553)
[PASS] test_mintFeeShares_revertsWith_SpokeNotActive() (gas: 242798)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 28.23ms (3.94ms CPU time)

Ran 9 tests for tests/gas/Hub.Operations.gas.t.sol:HubOperations_Gas_Tests
[PASS] test_add() (gas: 270142)
[PASS] test_deficit() (gas: 1332851)
[PASS] test_draw() (gas: 418616)
[PASS] test_mintFeeShares() (gas: 500015)
[PASS] test_payFee_transferShares() (gas: 973359)
[PASS] test_refreshPremium() (gas: 639194)
[PASS] test_remove() (gas: 310715)
[PASS] test_restore() (gas: 877950)
[PASS] test_restore_with_transfer() (gas: 878615)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 49.95ms (6.90ms CPU time)

Ran 6 tests for tests/unit/Hub/Hub.PayFee.t.sol:HubPayFeeTest
[PASS] test_payFee_fuzz(uint256,uint256) (runs: 5000, μ: 704006, ~: 704154)
Logs:
  Bound result 68691281934999
  Bound result 0
  Bound result 100

[PASS] test_payFee_fuzz_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 704459, ~: 704702)
Logs:
  Bound result 615514462186775432459
  Bound result 10765498
  Bound result 571193127101173104469

[PASS] test_payFee_revertsWith_InvalidShares() (gas: 20356)
[PASS] test_payFee_revertsWith_SpokeNotActive() (gas: 61390)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded() (gas: 138746)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded_with_interest() (gas: 643497)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.71s (24.69s 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, μ: 1212455, ~: 1217258)
Logs:
  Bound result 9671
  Bound result 11280
  Bound result 24024024024024024025
  Bound result 17470
  Bound result 796
  Bound result 9608

[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, μ: 2015202, ~: 1985454)
Logs:
  Bound result 17691
  Bound result 34560000
  Bound result 1000000000
  Bound result 17876
  Bound result 2000000000000000000
  Bound result 10000000000000000000000000000
  Bound result 842

[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, μ: 5938116, ~: 5938397)
Logs:
  Bound result 21880
  Bound result 100000000000000000
  Bound result 113
  Bound result 2037
  Bound result 931100000000000000
  Bound result 216
  Bound result 53660280083298761863322250544944886152122880547192670768272673805321799360845
  Bound result 192
  Bound result 17605
  Bound result 86400
  Bound result 21387
  Bound result 17306
  Bound result 7600
  Bound result 9000000000000000000000
  Bound result 11599
  Bound result 8587
  Bound result 11
  Bound result 78340066645871065499466465281
  Bound result 23376
  Bound result 111
  Bound result 10000
  Bound result 604800
  Bound result 61091349063465911747873899044606992885496025680114747940094786284142442053633
  Bound result 19887
  Bound result 10514

[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, μ: 4208146, ~: 4208401)
Logs:
  Bound result 81046247085328807221424381188
  Bound result 107988334739669479149889503479
  Bound result 7000000000000000000
  Bound result 90032235805375033957940302488
  Bound result 2000000000000000000000000000
  Bound result 200000000000
  Bound result 10500000000000000000000
  Bound result 14849
  Bound result 6000000000000000000000000000
  Bound result 4294967295
  Bound result 1323
  Bound result 9216
  Bound result 23723
  Bound result 1006300000000000000
  Bound result 8009
  Bound result 8500
  Bound result 8456

[PASS] test_repay_partial_then_max() (gas: 686117)
[PASS] test_repay_round_trip_borrow_repay(uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 865708, ~: 868231)
Logs:
  Bound result 2
  Bound result 40156480554970129807
  Bound result 470178205
  Bound result 17274227773553515385346548028

[PASS] test_repay_round_trip_repay_borrow(uint256,uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 949390, ~: 959123)
Logs:
  Bound result 0
  Bound result 2022
  Bound result 15188
  Bound result 856
  Bound result 264231834955014069151771058332

[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, μ: 1454834, ~: 1484641)
Logs:
  Bound result 5401549876140600956580819487
  Bound result 65251468040295843421393
  Bound result 11263328023241632836759
  Bound result 7707153379656042561281651440489383780992440
  Bound result 681445185

Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 296.71s (296.68s CPU time)

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

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueInterest.t.sol:SpokeAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 133063)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 633940, ~: 633769)
Logs:
  Bound result 9

[PASS] test_accrueInterest_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 250190, ~: 250184)
Logs:
  Bound result 9

[PASS] test_accrueInterest_TenPercentRp(uint256,uint40) (runs: 5000, μ: 580500, ~: 580877)
Logs:
  Bound result 68691281934999
  Bound result 0

[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 540222, ~: 540672)
Logs:
  Bound result 68691281934999
  Bound result 0

[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 3866483, ~: 3882597)
Logs:
  Bound result 416966230219621053938274952927
  Bound result 0
  Bound result 796581240052418918521216347353
  Bound result 563389367259961125742974148930
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 198784650842049752704523792805
  Bound result 12412
  Bound result 6
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 198784650842049752704523792805
  Bound result 12412

[PASS] test_accrueInterest_fuzz_RatesRPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),(uint96,uint96,uint96,uint96),uint40) (runs: 5000, μ: 3937465, ~: 3952620)
Logs:
  Bound result 558026838861657873908459897617
  Bound result 3000
  Bound result 1890
  Bound result 719206528
  Bound result 8022
  Bound result 4138529641
  Bound result 10627200
  Bound result 1985529411
  Bound result 6205
  Bound result 97567
  Bound result 1
  Bound result 11483
  Bound result 12272
  Bound result 8022
  Bound result 4138529641
  Bound result 10627200
  Bound result 1985529411

Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 187.71s (187.68s CPU time)

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

[PASS] test_reclaim_fullAmount() (gas: 635244)
[PASS] test_reclaim_fuzz(uint256,uint256,uint256) (runs: 5000, μ: 654502, ~: 653739)
Logs:
  Bound result 615514462186775432459
  Bound result 571193127101173104469
  Bound result 564283877115702805413

[PASS] test_reclaim_multipleSweepsAndReclaims() (gas: 743856)
[PASS] test_reclaim_revertsWith_AssetNotListed() (gas: 13093)
[PASS] test_reclaim_revertsWith_InsufficientTransferred() (gas: 456531)
[PASS] test_reclaim_revertsWith_InsufficientTransferred_noSwept() (gas: 102557)
[PASS] test_reclaim_revertsWith_InvalidAmount_zero() (gas: 92727)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93610, ~: 93610)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController_init() (gas: 40516)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept_afterSweep() (gas: 619883)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 14.71s (14.68s 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, μ: 541426, ~: 541560)
Logs:
  Bound result 2160
  Bound result 13496
  Bound result 160000000
  Bound result 4

[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 797026, ~: 797128)
Logs:
  Bound result 7769
  Bound result 10582
  Bound result 6379
  Bound result 192000000
  Bound result 0

[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 646785655)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 258501100)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 541722)
Logs:
  Bound result 500000000000000000000
  Bound result 5000
  Bound result 34560000
  Bound result 2

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

Ran 12 tests for tests/unit/Hub/Hub.RefreshPremium.t.sol:HubRefreshPremiumTest
[PASS] test_refreshPremium_emitsEvent() (gas: 254820)
[PASS] test_refreshPremium_fuzz_positiveDeltas(uint256,int256,int256) (runs: 5000, μ: 491040, ~: 496401)
Logs:
  Bound result 999999999910000000000000000001
  Bound result 1
  Bound result 5386

[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 5000, μ: 468352, ~: 477762)
Logs:
  Bound result 7290
  Bound result 370
  Bound result 25000000000000000
  Bound result 15832

[PASS] test_refreshPremium_haltedSpokesAllowed() (gas: 121447)
[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 892996)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 5000, μ: 461293, ~: 461846)
Logs:
  Bound result 3124043968137

[PASS] test_refreshPremium_negativeDeltas_withAccrual(uint256) (runs: 5000, μ: 532673, ~: 532891)
Logs:
  Bound result 3124043968137

[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 848404)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 869682)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 58921)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 915174)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 712877)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 20.43s (20.41s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueLiquidityFee.t.sol:SpokeAccrueLiquidityFeeTest
[PASS] test_accrueLiquidityFee() (gas: 863407)
[PASS] test_accrueLiquidityFee_NoActionTaken() (gas: 122022)
[PASS] test_accrueLiquidityFee_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 245143, ~: 245100)
Logs:
  Bound result 9

[PASS] test_accrueLiquidityFee_exact() (gas: 869271)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 941534, ~: 963442)
Logs:
  Bound result 68691281934999
  Bound result 0

[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 547569)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 897933)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 19.45s (19.42s CPU time)

Ran 15 tests for tests/unit/Hub/Hub.Remove.t.sol:HubRemoveTest
[PASS] test_remove() (gas: 209059)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_remove_all_with_interest() (gas: 368462)
[PASS] test_remove_fuzz(uint256,uint256) (runs: 5000, μ: 207827, ~: 207765)
Logs:
  Bound result 4
  Bound result 100

[PASS] test_remove_fuzz_all_liquidity_with_interest(uint256,uint256) (runs: 5000, μ: 419670, ~: 419908)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_remove_fuzz_multi_spoke(uint256,uint256) (runs: 5000, μ: 289084, ~: 289186)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_remove_fuzz_multi_spoke_with_interest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 422451, ~: 422934)
Logs:
  Bound result 7162
  Bound result 44562075618179104787922082173
  Bound result 25000000000000000
  Bound result 14916

[PASS] test_remove_revertsWith_InsufficientLiquidity() (gas: 158441)
[PASS] test_remove_revertsWith_InsufficientLiquidity_exceeding_added_amount() (gas: 147506)
[PASS] test_remove_revertsWith_InsufficientLiquidity_zero_added() (gas: 21376)
[PASS] test_remove_revertsWith_InvalidAddress() (gas: 16471)
[PASS] test_remove_revertsWith_InvalidAmount() (gas: 18628)
[PASS] test_remove_revertsWith_SpokeHalted() (gas: 61971)
[PASS] test_remove_revertsWith_SpokeNotActive() (gas: 61880)
[PASS] test_remove_revertsWith_underflow_exceeding_added_amount() (gas: 185398)
[PASS] test_remove_revertsWtih_underflow_one_extra_wei() (gas: 364768)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 29.98s (29.95s CPU time)

Ran 7 tests for tests/unit/Hub/Hub.ReportDeficit.t.sol:HubReportDeficitTest
[PASS] test_reportDeficit_fuzz_revertsWith_SurplusDrawnDeficitReported(uint256) (runs: 5000, μ: 218039, ~: 217740)
Logs:
  Bound result 3124043968137

[PASS] test_reportDeficit_fuzz_revertsWith_SurplusPremiumRayDeficitReported(uint256) (runs: 5000, μ: 219065, ~: 218765)
Logs:
  Bound result 3124043968137

[PASS] test_reportDeficit_fuzz_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 674843, ~: 675725)
Logs:
  Bound result 7438
  Bound result 13539
  Bound result 2257
  Bound result 25000000000000000

[PASS] test_reportDeficit_halted() (gas: 265224)
[PASS] test_reportDeficit_revertsWith_InvalidAmount() (gas: 24893)
[PASS] test_reportDeficit_revertsWith_SpokeNotActive(address) (runs: 5000, μ: 33865, ~: 33865)
[PASS] test_reportDeficit_with_premium() (gas: 674304)
Logs:
  Bound result 10000000000
  Bound result 31536000
  Bound result 5000000000
  Bound result 0

Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 17.93s (17.90s CPU time)

Ran 3 tests for tests/unit/Hub/Hub.Rescue.t.sol:HubRescueTest
[PASS] test_cannot_rescue_liquidity_fee_reverts_with_InsufficientTransferred() (gas: 274485)
[PASS] test_rescue_fuzz_with_interest(uint256,uint256) (runs: 5000, μ: 514740, ~: 514697)
Logs:
  Bound result 351500639
  Bound result 1256746

[PASS] test_rescue_scenario_fuzz(uint256) (runs: 5000, μ: 454260, ~: 454052)
Logs:
  Bound result 3124043968137

Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 17.62s (17.60s CPU time)

Ran 5 tests for tests/unit/Spoke/Spoke.Borrow.EdgeCases.t.sol:SpokeBorrowEdgeCasesTest
[PASS] test_borrow_fuzz_rounding_effect(uint256,uint256) (runs: 5000, μ: 1051035, ~: 1051130)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_borrow_fuzz_rounding_effect_inflated_ex_rate(uint256,uint256,uint256) (runs: 5000, μ: 1426709, ~: 1426790)
Logs:
  Bound result 6398
  Bound result 1979
  Bound result 81647149

[PASS] test_borrow_fuzz_rounding_effect_shares(uint256,uint256) (runs: 5000, μ: 1092178, ~: 1091926)
Logs:
  Bound result 68691281934999
  Bound result 832464101

[PASS] test_borrow_rounding_effect_multiple_actions() (gas: 1155831)
[PASS] test_borrow_rounding_effect_shares() (gas: 1091188)
Logs:
  Bound result 5000000000000000000
  Bound result 94608000

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

Ran 23 tests for tests/unit/Hub/Hub.Restore.t.sol:HubRestoreTest
[PASS] test_restore_full_amount_with_interest() (gas: 364467)
Logs:
  Bound result 1000000000000000000000
  Bound result 500000000000000000000
  Bound result 31536000

[PASS] test_restore_full_amount_with_interest_and_premium() (gas: 677228)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 31536000
  Bound result 1

[PASS] test_restore_fuzz_full_amount_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 365791, ~: 365885)
Logs:
  Bound result 615514462186775432459
  Bound result 571193127101173104469
  Bound result 173721804

[PASS] test_restore_fuzz_full_amount_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 668096, ~: 679169)
Logs:
  Bound result 8001
  Bound result 3074
  Bound result 160000000
  Bound result 59

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 243864, ~: 245029)
Logs:
  Bound result 615514462186775432459
  Bound result 571193127101173104469
  Bound result 173721804

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 641783, ~: 641967)
Logs:
  Bound result 8001
  Bound result 3074
  Bound result 160000000
  Bound result 59

[PASS] test_restore_one_share_delta_increase_revertsWith_InvalidPremiumChange() (gas: 212023)
[PASS] test_restore_partial_drawn() (gas: 322839)
[PASS] test_restore_partial_same_block() (gas: 322965)
[PASS] test_restore_premiumDeltas_twoWeiIncrease_realizedDelta() (gas: 232750)
[PASS] test_restore_revertsWith_InsufficientTransferred() (gas: 252534)
[PASS] test_restore_revertsWith_InvalidAmount_zero() (gas: 55190)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumIncrease() (gas: 219010)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumSharesIncrease() (gas: 218987)
[PASS] test_restore_revertsWith_SpokeHalted() (gas: 96400)
[PASS] test_restore_revertsWith_SpokeNotActive_whenPaused() (gas: 178529)
[PASS] test_restore_revertsWith_SurplusDrawnRestored() (gas: 361711)
[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest() (gas: 243654)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 15768000

[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest_and_premium() (gas: 640049)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 31536000
  Bound result 1

[PASS] test_restore_revertsWith_SurplusPremiumRayRestored() (gas: 527106)
[PASS] test_restore_revertsWith_underflow_offsetIncrease() (gas: 227844)
[PASS] test_restore_tooMuchDrawn_revertsWith_SurplusDrawnRestored() (gas: 217219)
[PASS] test_restore_when_asset_frozen() (gas: 435785)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 18.69s (18.67s CPU time)

Ran 1 test for tests/unit/Hub/Hub.Rounding.t.sol:HubRoundingTest
[PASS] test_sharePriceWithMultipleDonations() (gas: 664838367)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.00s (2.97s CPU time)

Ran 4 tests for tests/unit/Hub/Hub.Skim.t.sol:HubSkimTest
[PASS] test_skimAdd_fuzz_donationAfterAdd(uint256,uint256,uint256) (runs: 5000, μ: 228253, ~: 228322)
Logs:
  Bound result 3
  Bound result 18470873395738003579119570309
  Bound result 446067553769140138733721804

[PASS] test_skimAdd_fuzz_donationBeforeAdd(uint256,uint256,uint256) (runs: 5000, μ: 228285, ~: 228354)
Logs:
  Bound result 3
  Bound result 18470873395738003579119570309
  Bound result 446067553769140138733721804

[PASS] test_skimAdd_fuzz_wrongSpokeTransfer(uint256,uint256,uint256) (runs: 5000, μ: 217376, ~: 217318)
Logs:
  Bound result 3
  Bound result 18132171100462486213502917929
  Bound result 446067553769140138733721804

[PASS] test_skimRestore_fuzz_liquidityDonation(uint256,uint256,uint256) (runs: 5000, μ: 272681, ~: 274099)
Logs:
  Bound result 3
  Bound result 18470873395738003579119570309
  Bound result 446067553769140138733721804

Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 27.51s (27.47s CPU time)

Ran 10 tests for tests/unit/Hub/Hub.SpokeConfig.t.sol:HubSpokeConfigTest
[PASS] test_add_active_halted_scenarios() (gas: 303697)
[PASS] test_draw_active_halted_scenarios() (gas: 304401)
[PASS] test_eliminateDeficit_active_halted_scenarios() (gas: 839045)
[PASS] test_mintFeeShares_active_halted_scenarios() (gas: 840127)
[PASS] test_payFeeShares_active_halted_scenarios() (gas: 369293)
[PASS] test_refreshPremium_active_halted_scenarios() (gas: 267114)
[PASS] test_remove_active_halted_scenarios() (gas: 319533)
[PASS] test_reportDeficit_active_halted_scenarios() (gas: 444976)
[PASS] test_restore_active_halted_scenarios() (gas: 355320)
[PASS] test_transferShares_fuzz_active_halted_scenarios(bool,bool,bool,bool) (runs: 5000, μ: 213534, ~: 213548)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 4.16s (4.14s CPU time)

Ran 8 tests for tests/unit/Hub/Hub.Sweep.t.sol:HubSweepTest
[PASS] test_sweep() (gas: 483313)
Logs:
  Bound result 1000000000000000000000
  Bound result 1000000000000000000000

[PASS] test_sweep_does_not_impact_utilization(uint256,uint256) (runs: 5000, μ: 630393, ~: 631544)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_sweep_fuzz(uint256,uint256) (runs: 5000, μ: 483843, ~: 483833)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_sweep_revertsWith_AssetNotListed() (gas: 12581)
[PASS] test_sweep_revertsWith_InsufficientLiquidity() (gas: 219906)
[PASS] test_sweep_revertsWith_InvalidAmount() (gas: 103891)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93952, ~: 93952)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController_init() (gas: 40055)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 18.32s (18.30s CPU time)

Ran 7 tests for tests/unit/Hub/Hub.TransferShares.t.sol:HubTransferSharesTest
[PASS] test_transferShares() (gas: 191458)
Logs:
  Bound result 1000000000000000000000
  Bound result 1000000000000000000000

[PASS] test_transferShares_fuzz(uint256,uint256) (runs: 5000, μ: 194838, ~: 195041)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_transferShares_fuzz_revertsWith_underflow_spoke_added_shares_exceeded(uint256) (runs: 5000, μ: 151444, ~: 151155)
Logs:
  Bound result 3124043968137

[PASS] test_transferShares_revertsWith_AddCapExceeded() (gas: 195772)
[PASS] test_transferShares_revertsWith_SpokeHalted() (gas: 184926)
[PASS] test_transferShares_revertsWith_SpokeNotActive() (gas: 178190)
[PASS] test_transferShares_zeroShares_revertsWith_InvalidShares() (gas: 22595)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 7.62s (7.59s CPU time)

Ran 17 tests for tests/unit/Spoke/Spoke.Repay.t.sol:SpokeRepayTest
[PASS] test_fuzz_amounts_repay_only_premium(uint256,uint256,uint40) (runs: 5000, μ: 870020, ~: 873220)
Logs:
  Bound result 615514462186775432459
  Bound result 6348
  Bound result 363243867333215

[PASS] test_fuzz_repay_amounts_only_interest(uint256,uint256,uint40) (runs: 5000, μ: 881666, ~: 886973)
Logs:
  Bound result 615514462186775432459
  Bound result 6348
  Bound result 6773030186390597

[PASS] test_fuzz_repay_only_premium(uint256,uint40) (runs: 5000, μ: 757191, ~: 757499)
Logs:
  Bound result 68691281934999
  Bound result 1
  Bound result 1

[PASS] test_fuzz_repay_same_block_fuzz_amounts(uint256,uint256) (runs: 5000, μ: 887304, ~: 897717)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_fuzz_repay_x_y_shares(uint256,uint40) (runs: 5000, μ: 620334, ~: 620558)
Logs:
  Bound result 68691281934999
  Bound result 1

[PASS] test_repay() (gas: 698570)
[PASS] test_repay_all_with_accruals() (gas: 419558)
[PASS] test_repay_fuzz_amountsAndWait(uint256,uint256,uint40) (runs: 5000, μ: 928195, ~: 930143)
Logs:
  Bound result 615514462186775432459
  Bound result 571193127101173104469
  Bound result 6348

[PASS] test_repay_fuzz_amounts_base_debt(uint256,uint256,uint40) (runs: 5000, μ: 926249, ~: 939367)
Logs:
  Bound result 615514462186775432459
  Bound result 6348
  Bound result 12587671819954927

[PASS] test_repay_fuzz_amounts_base_debt_no_premium(uint256,uint256,uint40) (runs: 5000, μ: 806023, ~: 815301)
Logs:
  Bound result 615514462186775432459
  Bound result 6348
  Bound result 12587671819954927

[PASS] test_repay_fuzz_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 556319, ~: 556480)
Logs:
  Bound result 3124043968137

[PASS] test_repay_max() (gas: 599375)
[PASS] test_repay_multiple_reserves_fuzz_amountsAndWait(uint256,uint256,uint256,uint256,uint256,uint40) (runs: 5000, μ: 3286217, ~: 3292312)
Logs:
  Bound result 248111466093868109584737499669
  Bound result 1
  Bound result 292118375570773983824922877658
  Bound result 497988695728090053839266215334
  Bound result 5861
  Bound result 2947297

[PASS] test_repay_only_interest() (gas: 721830)
[PASS] test_repay_revertsWith_ERC20InsufficientAllowance() (gas: 558683)
[PASS] test_repay_revertsWith_ReentrancyGuardReentrantCall() (gas: 650672)
[PASS] test_repay_same_block() (gas: 680899)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 185.72s (185.70s CPU time)

Ran 5 tests for tests/unit/Spoke/Spoke.ReserveConfig.t.sol:SpokeReserveConfigTest
[PASS] test_borrow_fuzz_borrowable_paused_frozen_scenarios(bool,bool,bool) (runs: 5000, μ: 284025, ~: 258581)
[PASS] test_repay_fuzz_paused_scenarios(bool) (runs: 5000, μ: 555646, ~: 554286)
[PASS] test_setUsingAsCollateral_fuzz_paused_frozen_scenarios(bool) (runs: 5000, μ: 187846, ~: 187858)
[PASS] test_supply_paused_frozen_scenarios() (gas: 322293)
[PASS] test_withdraw_paused_scenarios() (gas: 297680)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 16.13s (16.10s CPU time)

Ran 6 tests for tests/unit/Hub/HubAccrueInterest.t.sol:HubAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 42658)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 391668, ~: 391564)
Logs:
  Bound result 9

[PASS] test_accrueInterest_NoInterest_OnlyAdd(uint40) (runs: 5000, μ: 206818, ~: 206752)
Logs:
  Bound result 9

[PASS] test_accrueInterest_fuzz_BorrowAmountAndElapsed(uint256,uint40) (runs: 5000, μ: 271354, ~: 271241)
Logs:
  Bound result 68691281934999
  Bound result 1

[PASS] test_accrueInterest_fuzz_BorrowAmountRateAndElapsed(uint256,uint256,uint40) (runs: 5000, μ: 392439, ~: 392185)
Logs:
  Bound result 615514462186775432459
  Bound result 27544
  Bound result 6348

[PASS] test_accrueInterest_fuzz_BorrowAndWait(uint40) (runs: 5000, μ: 270073, ~: 269969)
Logs:
  Bound result 9

Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.60s (24.57s CPU time)

Ran 13 tests for tests/unit/HubConfigurator.GranularAccessControl.t.sol:HubConfiguratorGranularAccessControlTest
[PASS] test_assetManager_canCall_deactivateAsset() (gas: 138311)
[PASS] test_assetManager_canCall_freezeAsset() (gas: 138808)
[PASS] test_assetManager_canCall_haltAsset() (gas: 138304)
[PASS] test_assetManager_canCall_updateLiquidityFee() (gas: 84252)
[PASS] test_assetManager_cannotCall_anySpokeManagerMethod() (gas: 354044)
[PASS] test_fuzz_unauthorized_cannotCall_assetManagerMethods(address) (runs: 5000, μ: 277851, ~: 277851)
[PASS] test_fuzz_unauthorized_cannotCall_spokeManagerMethods(address) (runs: 5000, μ: 352501, ~: 352501)
[PASS] test_spokeManager_canCall_addSpoke() (gas: 126788)
[PASS] test_spokeManager_canCall_freezeSpoke() (gas: 185593)
[PASS] test_spokeManager_canCall_updateSpokeActive() (gas: 65981)
[PASS] test_spokeManager_canCall_updateSpokeCaps() (gas: 66571)
[PASS] test_spokeManager_canCall_updateSpokeHalted() (gas: 65950)
[PASS] test_spokeManager_cannotCall_anyAssetManagerMethod() (gas: 278828)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 5.78s (5.75s 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, μ: 448783, ~: 449354)
Logs:
  Bound result 18
  Bound result 402
  Bound result 7903
  Bound result 1001
  Bound result 792
  Bound result 794

[PASS] test_addAsset_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 42288, ~: 42657)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(bool,address,uint8,address,uint256,address) (runs: 5000, μ: 65192, ~: 65166)
Logs:
  Bound result 21
  Bound result 5098

[PASS] test_addAsset_revertsWith_InvalidAddress_irStrategy() (gas: 58278)
[PASS] test_addAsset_revertsWith_InvalidAddress_underlying() (gas: 58215)
[PASS] test_addAsset_revertsWith_InvalidLiquidityFee() (gas: 350383)
[PASS] test_addAsset_reverts_invalidIrData() (gas: 76481)
[PASS] test_addSpoke() (gas: 135454)
[PASS] test_addSpokeToAssets() (gas: 232696)
[PASS] test_addSpokeToAssets_revertsWith_AccessManagedUnauthorized() (gas: 28173)
[PASS] test_addSpokeToAssets_revertsWith_MismatchedConfigs() (gas: 35927)
[PASS] test_addSpoke_revertsWith_AccessManagedUnauthorized() (gas: 27817)
[PASS] test_deactivateAsset() (gas: 176571)
[PASS] test_deactivateAsset_revertsWith_AccessManagedUnauthorized() (gas: 28980)
[PASS] test_deactivateSpoke() (gas: 175379)
[PASS] test_deactivateSpoke_revertsWith_AccessManagedUnauthorized() (gas: 29017)
[PASS] test_freezeAsset() (gas: 250720)
[PASS] test_freezeAsset_revertsWith_AccessManagedUnauthorized() (gas: 28957)
[PASS] test_freezeSpoke() (gas: 268347)
[PASS] test_freezeSpoke_revertsWith_AccessManagedUnauthorized() (gas: 28983)
[PASS] test_haltAsset() (gas: 176538)
[PASS] test_haltAsset_revertsWith_AccessManagedUnauthorized() (gas: 28959)
[PASS] test_haltSpoke() (gas: 175422)
[PASS] test_haltSpoke_revertsWith_AccessManagedUnauthorized() (gas: 29047)
[PASS] test_updateFeeConfig_Scenario() (gas: 353334)
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, μ: 195306, ~: 195589)
Logs:
  Bound result 1
  Bound result 5528

[PASS] test_updateFeeConfig_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 28541, ~: 28541)
[PASS] test_updateFeeConfig_revertsWith_InvalidAddress_spoke() (gas: 59417)
[PASS] test_updateFeeConfig_revertsWith_InvalidLiquidityFee() (gas: 62571)
[PASS] test_updateFeeReceiver_Scenario() (gas: 227747)
[PASS] test_updateFeeReceiver_WithdrawFromOldSpoke() (gas: 429680)
[PASS] test_updateFeeReceiver_correctAccruals() (gas: 466644)
[PASS] test_updateFeeReceiver_fuzz(address) (runs: 5000, μ: 188860, ~: 188895)
[PASS] test_updateFeeReceiver_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 28203, ~: 28203)
[PASS] test_updateFeeReceiver_revertsWith_InvalidAddress_spoke() (gas: 64073)
[PASS] test_updateFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 89414)
[PASS] test_updateInterestRateData() (gas: 81945)
[PASS] test_updateInterestRateData_revertsWith_AccessManagedUnauthorized() (gas: 30139)
[PASS] test_updateInterestRateStrategy() (gas: 102783)
[PASS] test_updateInterestRateStrategy_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 39578, ~: 39578)
[PASS] test_updateInterestRateStrategy_revertsWith_InterestRateStrategyReverts() (gas: 85998)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidAddress_irStrategy() (gas: 75564)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidInterestRateStrategy() (gas: 76199)
[PASS] test_updateLiquidityFee_fuzz(uint256,uint16) (runs: 5000, μ: 100461, ~: 102085)
Logs:
  Bound result 3
  Bound result 0

[PASS] test_updateLiquidityFee_revertsWith_AccessManagedUnauthorized() (gas: 27627)
[PASS] test_updateLiquidityFee_revertsWith_InvalidLiquidityFee() (gas: 64212)
[PASS] test_updateReinvestmentController() (gas: 110937)
[PASS] test_updateReinvestmentController_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 28182, ~: 28182)
[PASS] test_updateSpokeActive() (gas: 99319)
[PASS] test_updateSpokeActive_revertsWith_AccessManagedUnauthorized() (gas: 31303)
[PASS] test_updateSpokeCaps() (gas: 75455)
[PASS] test_updateSpokeCaps_revertsWith_AccessManagedUnauthorized() (gas: 31260)
[PASS] test_updateSpokeDrawCap() (gas: 75282)
[PASS] test_updateSpokeDrawCap_revertsWith_AccessManagedUnauthorized() (gas: 31293)
[PASS] test_updateSpokeHalted() (gas: 102032)
[PASS] test_updateSpokeHalted_revertsWith_AccessManagedUnauthorized() (gas: 31302)
[PASS] test_updateSpokeRiskPremiumThreshold() (gas: 75305)
[PASS] test_updateSpokeRiskPremiumThreshold_revertsWith_AccessManagedUnauthorized() (gas: 31261)
[PASS] test_updateSpokeSupplyCap() (gas: 75277)
[PASS] test_updateSpokeSupplyCap_revertsWith_AccessManagedUnauthorized() (gas: 31271)
Suite result: ok. 60 passed; 0 failed; 0 skipped; finished in 12.40s (12.37s CPU time)

Ran 17 tests for tests/unit/Spoke/Spoke.Borrow.HealthFactor.t.sol:SpokeBorrowHealthFactorTest
[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_collateral_price_drop(uint256,uint256) (runs: 5000, μ: 912443, ~: 912411)
Logs:
  Bound result 100
  Bound result 68691281934999

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 5000, μ: 859465, ~: 860078)
Logs:
  Bound result 90000000000000000000
  Bound result 12821

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 895122, ~: 895439)
Logs:
  Bound result 16978197397541
  Bound result 14961168679241
  Bound result 3

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 5000, μ: 1099098, ~: 1099313)
Logs:
  Bound result 99999999999068691281935000
  Bound result 99999999999000000000000101

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 1137152, ~: 1136991)
Logs:
  Bound result 27
  Bound result 489855705179353925200836329530
  Bound result 156030498

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_with_interest(uint256,uint256) (runs: 5000, μ: 675020, ~: 675300)
Logs:
  Bound result 25000000000000000
  Bound result 352000000

[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold() (gas: 643419)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_collateral_price_drop_weth() (gas: 906661)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 853841)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai() (gas: 1126741)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth() (gas: 1126785)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 890448)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 1092636)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1129970)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_with_interest() (gas: 670006)
[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai(uint256,uint256,uint256) (runs: 5000, μ: 1130684, ~: 1131288)
Logs:
  Bound result 77482892411
  Bound result 54994262
  Bound result 194401

[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth(uint256,uint256,uint256) (runs: 5000, μ: 1131154, ~: 1131310)
Logs:
  Bound result 77482892411
  Bound result 54994262
  Bound result 194401

Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 121.93s (121.90s 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, μ: 231324, ~: 232296)
[PASS] test_fuzz_add_unique(uint256,uint256) (runs: 5000, μ: 254140, ~: 254508)
Logs:
  Bound result 100

[PASS] test_fuzz_get(uint256[]) (runs: 5000, μ: 408309, ~: 409179)
[PASS] test_fuzz_get_uninitialized(uint256[]) (runs: 5000, μ: 279586, ~: 261724)
[PASS] test_fuzz_get_uninitialized_sorted(uint256[]) (runs: 5000, μ: 186023, ~: 161277)
[PASS] test_fuzz_sortByKey(uint256[]) (runs: 5000, μ: 466196, ~: 460979)
[PASS] test_fuzz_sortByKey_length(uint256) (runs: 5000, μ: 217117, ~: 216306)
Logs:
  Bound result 37

[PASS] test_fuzz_sortByKey_with_collision(uint256[]) (runs: 5000, μ: 545242, ~: 542639)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 69.63s (69.63s 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, μ: 30200, ~: 30267)
Logs:
  Bound result 1
  Bound result 11604
  Bound result 8176
  Bound result 1101723444617478663
  Bound result 12412
  Bound result 4101085102398758
  Bound result 9
  Bound result 624281697546212355234969681685
  Bound result 0

[PASS] test_calculateDebtToLiquidate_fuzz_AmountAdjustedDueToDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 31929, ~: 32003)
Logs:
  Bound result 1
  Bound result 11604
  Bound result 8176
  Bound result 1101723444617478663
  Bound result 12412
  Bound result 4101085102398758
  Bound result 9
  Bound result 624281697546212355234969681685
  Bound result 0
  Bound result 2

[PASS] test_calculateDebtToLiquidate_fuzz_ImpossibleToAdjustForDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 33999, ~: 33950)
Logs:
  Bound result 1
  Bound result 11604
  Bound result 8176
  Bound result 1101723444617478663
  Bound result 12412
  Bound result 4101085102398758
  Bound result 9
  Bound result 624281697546212355234969681685
  Bound result 0
  Bound result 5
  Bound result 10000000000000000
  Bound result 1

Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.47s (3.45s 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, μ: 22804, ~: 22724)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

[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, μ: 19930, ~: 19850)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

[PASS] test_calculateDebtToTargetHealthFactor_fuzz_revertsWith_DivisionByZero_ZeroAssetPrice((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 22562, ~: 22482)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

[PASS] test_calculateDebtToTargetHealthFactor_revertsWith_ArithmeticError_TargetHealthFactorLessThanHealthFactor((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 22545, ~: 22465)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.97s (2.95s CPU time)

Ran 16 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.EvaluateDeficit.t.sol:LiquidationLogicEvaluateDeficitTest
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCM() (gas: 8885)
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCO() (gas: 8853)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCM() (gas: 8874)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCO() (gas: 8841)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCM() (gas: 8867)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCO() (gas: 8934)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCM() (gas: 8899)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCO() (gas: 8887)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCM() (gas: 8887)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCO() (gas: 8876)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCM() (gas: 8810)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCO() (gas: 8843)
[PASS] test_evaluateDeficit_CRN_SCCO_DRE_BRCM() (gas: 8820)
[PASS] test_evaluateDeficit_CRN_SC...*[Comment body truncated]*

@github-actions
Copy link

github-actions bot commented Jan 31, 2026

♻️ Forge Gas Snapshots

Path Value
snapshots/NativeTokenGateway.Operations.json
borrowNative ↑1% (+2146) 230,143
supplyAsCollateralNative ↑2% (+3206) 163,411
snapshots/SignatureGateway.Operations.json
borrowWithSig ↑1% (+2146) 215,321
setUsingAsCollateralWithSig ↑4% (+3206) 88,615
updateUserDynamicConfigWithSig ↑3% (+2145) 65,274
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first ↑1% (+2139) 191,744
borrow: second action, same reserve ↑1% (+2139) 171,610
permitReserve + supply + enable collateral (multicall) ↑2% (+3206) 164,507
supply + enable collateral (multicall) ↑2% (+3206) 144,687
updateUserDynamicConfig: 1 collateral ↑3% (+2141) 76,744
updateUserDynamicConfig: 2 collaterals ↑2% (+2141) 91,661
usingAsCollateral: 0 borrows, enable ↑5% (+3206) 62,844
usingAsCollateral: 1 borrow, disable ↑2% (+2142) 107,123
usingAsCollateral: 1 borrow, enable ↑8% (+3206) 45,732
usingAsCollateral: 2 borrows, disable ↑2% (+2142) 128,231
usingAsCollateral: 2 borrows, enable ↑8% (+3206) 45,744
withdraw: 0 borrows, full ↑2% (+2138) 130,135
withdraw: 0 borrows, partial ↑2% (+2139) 134,871
withdraw: 1 borrow, partial ↑1% (+2139) 161,308
withdraw: 2 borrows, partial ↑1% (+2138) 175,425
snapshots/Spoke.Operations.json
borrow: first ↑1% (+2146) 260,734
borrow: second action, same reserve ↑1% (+2146) 203,600
liquidationCall (receiveShares): full ↑0% (+13) 327,687
liquidationCall (receiveShares): partial ↑0% (+13) 327,405
liquidationCall (reportDeficit): full ↑0% (+13) 345,561
liquidationCall: full ↑0% (+13) 337,179
liquidationCall: partial ↑0% (+13) 336,897
permitReserve + supply + enable collateral (multicall) ↑2% (+3206) 164,507
supply + enable collateral (multicall) ↑2% (+3206) 144,687
updateUserDynamicConfig: 1 collateral ↑3% (+2141) 76,744
updateUserDynamicConfig: 2 collaterals ↑2% (+2141) 91,661
updateUserRiskPremium: 1 borrow ↑0% (+13) 148,357
updateUserRiskPremium: 2 borrows ↑0% (+13) 198,109
usingAsCollateral: 0 borrows, enable ↑5% (+3206) 62,844
usingAsCollateral: 1 borrow, disable ↑1% (+2146) 160,531
usingAsCollateral: 1 borrow, enable ↑8% (+3206) 45,732
usingAsCollateral: 2 borrows, disable ↑1% (+2145) 230,255
usingAsCollateral: 2 borrows, enable ↑8% (+3206) 45,744
withdraw: 0 borrows, full ↑2% (+2138) 130,135
withdraw: 0 borrows, partial ↑2% (+2139) 134,871
withdraw: 1 borrow, partial ↑1% (+2145) 212,216
withdraw: 2 borrows, partial ↑1% (+2146) 257,987
🔕 Unchanged
Path Value
snapshots/Hub.Operations.json
add 86,709
add: with transfer 108,006
draw 104,177
eliminateDeficit: full 72,584
eliminateDeficit: partial 82,189
mintFeeShares 82,770
payFee 70,834
refreshPremium 70,391
remove: full 75,613
remove: partial 80,751
reportDeficit 111,899
restore: full 76,569
restore: full - with transfer 169,178
restore: partial 85,291
restore: partial - with transfer 143,271
transferShares 69,648
snapshots/NativeTokenGateway.Operations.json
repayNative 166,265
supplyNative 135,802
withdrawNative: full 125,580
withdrawNative: partial 136,774
snapshots/SignatureGateway.Operations.json
repayWithSig 186,537
setSelfAsUserPositionManagerWithSig 75,385
supplyWithSig 152,034
updateUserRiskPremiumWithSig 62,099
withdrawWithSig 130,834
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 13,005
getUserAccountData: supplies: 1, borrows: 0 49,355
getUserAccountData: supplies: 2, borrows: 0 80,991
getUserAccountData: supplies: 2, borrows: 1 100,457
getUserAccountData: supplies: 2, borrows: 2 119,226
snapshots/Spoke.Operations.ZeroRiskPremium.json
liquidationCall (receiveShares): full 295,586
liquidationCall (receiveShares): partial 295,304
liquidationCall (reportDeficit): full 350,919
liquidationCall: full 305,078
liquidationCall: partial 304,796
permitReserve + repay (multicall) 164,506
permitReserve + supply (multicall) 146,828
repay: full 123,800
repay: partial 128,770
setUserPositionManagersWithSig: disable 47,039
setUserPositionManagersWithSig: enable 68,951
supply: 0 borrows, collateral disabled 122,874
supply: 0 borrows, collateral enabled 105,845
supply: second action, same reserve 105,774
updateUserRiskPremium: 1 borrow 94,940
updateUserRiskPremium: 2 borrows 104,075
withdraw: non collateral 105,920
snapshots/Spoke.Operations.json
permitReserve + repay (multicall) 161,988
permitReserve + supply (multicall) 146,828
repay: full 117,879
repay: partial 137,249
setUserPositionManagersWithSig: disable 47,039
setUserPositionManagersWithSig: enable 68,951
supply: 0 borrows, collateral disabled 122,874
supply: 0 borrows, collateral enabled 105,845
supply: second action, same reserve 105,774
withdraw: non collateral 105,920

@github-actions
Copy link

github-actions bot commented Jan 31, 2026

Forge Build Sizes

Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
PositionStatusMapWrapper ↑48% (+1616) 4,957 ↑48% (+1616) 4,985 ↓8% (-1616) 19,619 ↓4% (-1616) 44,167
SpokeInstance ↑3% (+675) 24,395 ↑3% (+675) 25,202 ↓79% (-675) 181 ↓3% (-675) 23,950
🔕 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 466 518 24,110 48,634
Create2Utils 134 184 24,442 48,968
DeployUtils 44 94 24,532 49,058
DeployWrapper 3,330 3,358 21,246 45,794
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 23,547 23,744 1,029 25,408
HubConfigurator 13,833 14,029 10,743 35,123
JsonBindings 12,853 12,905 11,723 36,247
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 9,375 9,427 15,201 39,725
LiquidationLogic.spoke 6,949 6,981 17,627 42,171
LiquidationLogicWrapper 13,366 13,540 11,210 35,612
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
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 928 956 23,648 48,196
Roles 218 269 24,358 48,883
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,642 11,838 12,934 37,314
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

"updateUserDynamicConfig: 1 collateral": "74603",
"updateUserDynamicConfig: 2 collaterals": "89520",
"updateUserDynamicConfig: 1 collateral": "76744",
"updateUserDynamicConfig: 2 collaterals": "91661",
Copy link
Member

@miguelmtzinf miguelmtzinf Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't be the same increase as for 2 collaterals? ~2.1k
gas increase isn't flat now?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the gas increase between both old snasphots and new ones is flat here (+2141 on both)

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