Skip to content

Conversation

@DhairyaSethi
Copy link
Member

No description provided.

@github-actions
Copy link

github-actions bot commented Jan 8, 2026

Forge Build Sizes

🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
AaveOracle 1,842 2,580 22,734 46,572
AccessManager 10,198 11,423 14,378 37,729
AccessManagerEnumerable 12,137 13,534 12,439 35,618
Address 44 94 24,532 49,058
Arrays 44 94 24,532 49,058
AssetInterestRateStrategy 2,349 2,534 22,227 46,618
AssetLogic 44 94 24,532 49,058
AuthorityUtils 44 94 24,532 49,058
Bytes 44 94 24,532 49,058
Comparators 44 94 24,532 49,058
Constants 447 499 24,129 48,653
ECDSA 44 94 24,532 49,058
EIP712Hash 441 493 24,135 48,659
EIP712Types 44 94 24,532 49,058
ERC1967Proxy 122 934 24,454 48,218
ERC1967Utils 44 94 24,532 49,058
EnumerableSet 44 94 24,532 49,058
Errors 44 94 24,532 49,058
GatewayBaseWrapper 1,810 2,085 22,766 47,067
Hub 21,587 21,821 2,989 27,331
HubConfigurator 9,981 10,254 14,595 38,898
JsonBindings 9,244 9,296 15,332 39,856
KeyValueList 44 94 24,532 49,058
KeyValueListWrapper 802 830 23,774 48,322
LibBit 44 94 24,532 49,058
LiquidationLogic 6,560 6,612 18,016 42,540
LiquidationLogicWrapper 10,961 11,135 13,615 38,017
Math 44 94 24,532 49,058
MathUtils 44 94 24,532 49,058
MockERC1271Wallet 599 733 23,977 48,419
MockERC20 1,913 2,379 22,663 46,773
MockNoncesKeyed 601 629 23,975 48,523
MockPriceFeed 642 1,300 23,934 47,852
MockSkimSpoke 923 1,082 23,653 48,070
NativeTokenGateway 4,889 5,306 19,687 43,846
NoncesKeyed 425 453 24,151 48,699
Panic 44 94 24,532 49,058
PercentageMath 44 94 24,532 49,058
PercentageMathWrapper 592 620 23,984 48,532
PositionStatusMap 44 94 24,532 49,058
PositionStatusMapWrapper 2,389 2,417 22,187 46,735
Premium 44 94 24,532 49,058
ProxyAdmin 977 1,213 23,599 47,939
RescuableWrapper 770 904 23,806 48,248
ReserveFlagsMap 44 94 24,532 49,058
ReserveFlagsMapWrapper 1,075 1,103 23,501 48,049
Roles 153 203 24,423 48,949
SafeCast 44 94 24,532 49,058
SafeERC20 44 94 24,532 49,058
SharesMath 44 94 24,532 49,058
SignatureChecker 44 94 24,532 49,058
SignatureGateway 9,907 10,418 14,669 38,734
SlotDerivation 44 94 24,532 49,058
SpokeConfigurator 8,659 8,932 15,917 40,220
SpokeInstance 24,541 25,284 35 23,868
StorageSlot 44 94 24,532 49,058
TestnetERC20 2,810 3,686 21,766 45,466
Time 44 94 24,532 49,058
TransientSlot 44 94 24,532 49,058
TransparentUpgradeableProxy 1,073 3,445 23,503 45,707
TreasurySpoke 2,764 3,179 21,812 45,973
UnitPriceFeed 700 1,635 23,876 47,517
UserPositionDebt 44 94 24,532 49,058
UserPositionDebtWrapper 2,695 2,723 21,881 46,429
Utils 44 94 24,532 49,058
WETH9 1,864 2,330 22,712 46,822
WadRayMath 44 94 24,532 49,058
WadRayMathWrapper 1,371 1,399 23,205 47,753

@github-actions
Copy link

github-actions bot commented Jan 8, 2026

🌈 Test Results
No files changed, compilation skipped

Ran 1 test for tests/unit/Spoke/Spoke.MultipleHub.SiloedBorrowing.t.sol:SpokeMultipleHubSiloedBorrowingTest
[PASS] test_siloed_borrowing() (gas: 667419)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 14.68ms (1.17ms CPU time)

Ran 3 tests for tests/unit/Spoke/Spoke.Access.t.sol:SpokeAccessTest
[PASS] testAccess_change_authority() (gas: 515895)
[PASS] testAccess_hub_functions_callable_by_spokes() (gas: 579019)
[PASS] testAccess_spoke_admin_config_access() (gas: 494131)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 23.02ms (3.27ms CPU time)

Ran 2 tests for tests/unit/Spoke/Spoke.MultipleHub.t.sol:SpokeMultipleHubTest
[PASS] test_borrow_secondHub() (gas: 896989)
[PASS] test_borrow_thirdHub() (gas: 738417)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.47ms (3.67ms CPU time)

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_Gas_Tests
[PASS] test_borrow() (gas: 1337080)
[PASS] test_liquidation_full() (gas: 1892678)
[PASS] test_liquidation_partial() (gas: 1892387)
[PASS] test_liquidation_receiveShares_full() (gas: 1882372)
[PASS] test_liquidation_receiveShares_partial() (gas: 1882089)
[PASS] test_multicall_ops() (gas: 1410944)
[PASS] test_repay() (gas: 876502)
[PASS] test_setUserPositionManagerWithSig() (gas: 302264)
[PASS] test_supply() (gas: 542220)
[PASS] test_updateRiskPremium() (gas: 1329028)
[PASS] test_updateUserDynamicConfig() (gas: 581796)
[PASS] test_usingAsCollateral() (gas: 1483101)
[PASS] test_withdraw() (gas: 1964251)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 63.86ms (31.50ms CPU time)

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 115.90ms (95.44ms CPU time)

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_ZeroRiskPremium_Gas_Tests
[PASS] test_borrow() (gas: 1096592)
[PASS] test_liquidation_full() (gas: 1754387)
[PASS] test_liquidation_partial() (gas: 1754096)
[PASS] test_liquidation_receiveShares_full() (gas: 1744081)
[PASS] test_liquidation_receiveShares_partial() (gas: 1743798)
[PASS] test_multicall_ops() (gas: 1327249)
[PASS] test_repay() (gas: 783742)
[PASS] test_setUserPositionManagerWithSig() (gas: 306712)
[PASS] test_supply() (gas: 544892)
[PASS] test_updateRiskPremium() (gas: 942460)
[PASS] test_updateUserDynamicConfig() (gas: 586244)
[PASS] test_usingAsCollateral() (gas: 1087205)
[PASS] test_withdraw() (gas: 1593456)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 60.87ms (26.09ms CPU time)

Ran 4 tests for tests/unit/Spoke/Spoke.PermitReserve.t.sol:SpokePermitReserveTest
[PASS] test_permitReserve() (gas: 89200)
[PASS] test_permitReserve_forwards_correct_call() (gas: 36410)
[PASS] test_permitReserve_ignores_permit_reverts() (gas: 25167)
[PASS] test_permitReserve_revertsWith_ReserveNotListedIn() (gas: 23207)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 20.90ms (1.06ms CPU time)

Ran 12 tests for tests/unit/Spoke/Spoke.PositionManager.t.sol:SpokePositionManagerTest
[PASS] test_disableApproval_on_InactivePositionManager() (gas: 99880)
[PASS] test_onlyPositionManager_on_borrow() (gas: 537106)
[PASS] test_onlyPositionManager_on_repay() (gas: 560687)
[PASS] test_onlyPositionManager_on_supply() (gas: 290708)
[PASS] test_onlyPositionManager_on_updateUserDynamicConfig() (gas: 1280181)
[PASS] test_onlyPositionManager_on_updateUserRiskPremium() (gas: 1410456)
[PASS] test_onlyPositionManager_on_usingAsCollateral() (gas: 143048)
[PASS] test_onlyPositionManager_on_withdraw() (gas: 320913)
[PASS] test_renouncePositionManagerRole() (gas: 20039)
[PASS] test_renouncePositionManagerRole_noop_from_disabled() (gas: 21345)
[PASS] test_setApprovalForPositionManager(bytes32) (runs: 10000, μ: 19930, ~: 19880)
[PASS] test_setApproval_revertsWith_InactivePositionManager() (gas: 20176)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 857.37ms (837.33ms CPU time)

Ran 17 tests for tests/unit/AaveOracle.t.sol:AaveOracleTest
[PASS] testDECIMALS() (gas: 8379)
[PASS] test_constructor() (gas: 16641)
[PASS] test_deploy_revertsWith_InvalidAddress() (gas: 5370)
[PASS] test_description() (gas: 12049)
[PASS] test_fuzz_constructor(uint8) (runs: 10000, μ: 20596, ~: 20921)
Logs:
  Bound result 4

[PASS] test_getReservePrice() (gas: 47398)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 46691)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10998)
[PASS] test_getReservePrices() (gas: 79462)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 49374)
[PASS] test_getReserveSource() (gas: 47628)
[PASS] test_setReserveSource() (gas: 44488)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 97705)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 15349)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 15171)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 10984)
[PASS] test_spoke() (gas: 10559)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 1.70s (1.69s CPU time)

Ran 8 tests for tests/unit/AccessManagerEnumerable.t.sol:AccessManagerEnumerableTest
[PASS] test_getRoleMembers_fuzz(uint256,uint256) (runs: 10000, μ: 1921326, ~: 1920052)
Logs:
  Bound result 3
  Bound result 9

[PASS] test_getRoleTargetFunctions_fuzz(uint256,uint256) (runs: 10000, μ: 1118531, ~: 1117552)
Logs:
  Bound result 4
  Bound result 14

[PASS] test_grantRole() (gas: 239205)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 10000, μ: 856242, ~: 851108)
Logs:
  Bound result 4

[PASS] test_revokeRole() (gas: 259646)
[PASS] test_setTargetFunctionRole() (gas: 274815)
[PASS] test_setTargetFunctionRole_skipAddToAdminRole() (gas: 29820)
[PASS] test_setTargetFunctionRole_withReplace() (gas: 336391)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 25.35s (25.35s CPU time)

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

[PASS] test_calculateInterestRate_AtMaxUtilization() (gas: 24958)
Logs:
  Bound result 10000
  Bound result 213388054175223396384462362416

[PASS] test_calculateInterestRate_LeftToKinkPoint(uint256) (runs: 10000, μ: 24540, ~: 24690)
Logs:
  Bound result 2318
  Bound result 229374715647482091571138230737

[PASS] test_calculateInterestRate_RightToKinkPoint(uint256) (runs: 10000, μ: 25638, ~: 25690)
Logs:
  Bound result 8883
  Bound result 469158951330113724014865642322

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

[PASS] test_calculateInterestRate_fuzz_ZeroDebt(uint256) (runs: 10000, μ: 19180, ~: 18950)
Logs:
  Bound result 1329227995784915872903807060280344574

[PASS] test_calculateInterestRate_revertsWith_InterestRateDataNotSet() (gas: 11361)
[PASS] test_deploy_revertsWith_InvalidAddress() (gas: 3916)
[PASS] test_getBaseVariableBorrowRate() (gas: 14864)
[PASS] test_getInterestRateData() (gas: 19653)
[PASS] test_getMaxVariableBorrowRate() (gas: 15312)
[PASS] test_getOptimalUsageRatio() (gas: 14735)
[PASS] test_getVariableRateSlope1() (gas: 14810)
[PASS] test_getVariableRateSlope2() (gas: 14877)
[PASS] test_maxBorrowRate() (gas: 8431)
[PASS] test_maxOptimalRatio() (gas: 8431)
[PASS] test_minOptimalRatio() (gas: 8440)
[PASS] test_setInterestRateData() (gas: 69812)
[PASS] test_setInterestRateData_revertsWith_InvalidMaxRate() (gas: 42072)
[PASS] test_setInterestRateData_revertsWith_InvalidOptimalUsageRatio() (gas: 43120)
[PASS] test_setInterestRateData_revertsWith_InvalidRateData() (gas: 35395)
[PASS] test_setInterestRateData_revertsWith_OnlyHub() (gas: 23786)
[PASS] test_setInterestRateData_revertsWith_Slope2MustBeGteSlope1() (gas: 37980)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 2.18s (2.17s CPU time)

Ran 8 tests for tests/unit/misc/EIP712Hash.t.sol:EIP712HashTest
[PASS] test_constants() (gas: 5450)
[PASS] test_hash_borrow_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 10000, μ: 4659, ~: 4659)
[PASS] test_hash_repay_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 10000, μ: 4615, ~: 4615)
[PASS] test_hash_setUsingAsCollateral_fuzz((address,uint256,bool,address,uint256,uint256)) (runs: 10000, μ: 4902, ~: 4902)
[PASS] test_hash_supply_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 10000, μ: 4703, ~: 4703)
[PASS] test_hash_updateUserDynamicConfig_fuzz((address,address,uint256,uint256)) (runs: 10000, μ: 4441, ~: 4441)
[PASS] test_hash_updateUserRiskPremium_fuzz((address,address,uint256,uint256)) (runs: 10000, μ: 4462, ~: 4462)
[PASS] test_hash_withdraw_fuzz((address,uint256,uint256,address,uint256,uint256)) (runs: 10000, μ: 4681, ~: 4681)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.85s (1.85s CPU time)

Ran 8 tests for tests/unit/misc/GatewayBase.t.sol:GatewayBaseTest
[PASS] test_constructor() (gas: 17646)
[PASS] test_registerSpoke_fuzz(address) (runs: 10000, μ: 42033, ~: 42033)
[PASS] test_registerSpoke_revertsWith_InvalidAddress() (gas: 13345)
[PASS] test_registerSpoke_revertsWith_OwnableUnauthorizedAccount() (gas: 14077)
[PASS] test_registerSpoke_unregister() (gas: 36599)
[PASS] test_renouncePositionManagerRole() (gas: 65281)
[PASS] test_renouncePositionManagerRole_revertsWith_InvalidAddress() (gas: 76695)
[PASS] test_renouncePositionManagerRole_revertsWith_OwnableUnauthorizedAccount() (gas: 76856)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 711.67ms (691.10ms CPU time)

Ran 5 tests for tests/gas/Gateways.Operations.gas.t.sol:NativeTokenGateway_Gas_Tests
[PASS] test_borrowNative() (gas: 922127)
[PASS] test_repayNative() (gas: 996932)
[PASS] test_supplyAndCollateralNative() (gas: 306548)
[PASS] test_supplyNative() (gas: 288339)
[PASS] test_withdrawNative() (gas: 511014)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 36.90ms (4.55ms CPU time)

Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 749728)
[PASS] test_repayWithSig() (gas: 986703)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 207421)
[PASS] test_setUsingAsCollateralWithSig() (gas: 290425)
[PASS] test_supplyWithSig() (gas: 462683)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 144529)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 142178)
[PASS] test_withdrawWithSig() (gas: 412693)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 41.61ms (8.37ms CPU time)

Ran 6 tests for tests/unit/Hub/Hub.Access.t.sol:HubAccessTest
[PASS] test_change_authority() (gas: 210550)
[PASS] test_change_role_responsibility() (gas: 122065)
[PASS] test_hub_access_manager_exposure() (gas: 12684)
[PASS] test_hub_admin_access() (gas: 1205062)
[PASS] test_migrate_role_responsibility() (gas: 682280)
[PASS] test_setInterestRateData_access() (gas: 103546)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.00ms (4.12ms CPU time)

Ran 12 tests for tests/unit/Spoke/Spoke.SetUserPositionManagerWithSig.t.sol:SpokeSetUserPositionManagerWithSigTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 16466)
[PASS] test_eip712Domain() (gas: 22064)
[PASS] test_setUserPositionManagerWithSig() (gas: 243619)
[PASS] test_setUserPositionManagerWithSig_ERC1271() (gas: 306735)
[PASS] test_setUserPositionManagerWithSig_ERC1271_revertsWith_InvalidAccountNonce(bytes32) (runs: 10000, μ: 377691, ~: 376628)
[PASS] test_setUserPositionManagerWithSig_ERC1271_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 228741)
[PASS] test_setUserPositionManagerWithSig_ERC1271_revertsWith_InvalidSignature_dueTo_InvalidHash() (gas: 279413)
[PASS] test_setUserPositionManagerWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 10000, μ: 221855, ~: 221667)
[PASS] test_setUserPositionManagerWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 30686)
[PASS] test_setUserPositionManagerWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 31970)
[PASS] test_setUserPositionManager_typeHash() (gas: 4015)
[PASS] test_useNonce_monotonic(bytes32) (runs: 10000, μ: 17972, ~: 17972)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 33.62s (33.59s CPU time)

Ran 5 tests for tests/unit/Spoke/Spoke.SetUsingAsCollateral.t.sol:SpokeConfigTest
[PASS] test_setUsingAsCollateral() (gas: 313686)
[PASS] test_setUsingAsCollateral_collateralStatusUnchanged() (gas: 454124)
[PASS] test_setUsingAsCollateral_revertsWith_ReserveFrozen() (gas: 105264)
[PASS] test_setUsingAsCollateral_revertsWith_ReserveNotListed() (gas: 21986)
[PASS] test_setUsingAsCollateral_revertsWith_ReservePaused() (gas: 64656)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 25.97ms (4.80ms 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: 10000, μ: 696607, ~: 696449)
Logs:
  Bound result 23162263323885398575441255248
  Bound result 551881300
  Bound result 49590960403421108064013229239

[PASS] test_repay_less_than_share() (gas: 584451)
[PASS] test_repay_only_base_debt_interest() (gas: 758320)
[PASS] test_repay_only_base_debt_no_premium() (gas: 641611)
[PASS] test_repay_supply_ex_rate_decr() (gas: 1484674)
[PASS] test_repay_supply_ex_rate_decr_skip_time() (gas: 1482002)
[PASS] test_repay_zero_shares_nonzero_premium_debt() (gas: 762039)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 32.94s (32.92s CPU time)

Ran 19 tests for tests/unit/Hub/Hub.Add.t.sol:HubAddTest
[PASS] test_add_AddCapReachedButNotExceeded_rounding() (gas: 675285)
[PASS] test_add_fuzz_AddCapReachedButNotExceeded(uint40) (runs: 10000, μ: 160183, ~: 160147)
Logs:
  Bound result 15037

[PASS] test_add_fuzz_multi_asset_multi_spoke(uint256,uint256,uint256) (runs: 10000, μ: 330207, ~: 330441)
Logs:
  Bound result 0
  Bound result 1575216395950
  Bound result 928472014338291480805654358905

[PASS] test_add_fuzz_revertsWith_AddCapExceeded(uint40) (runs: 10000, μ: 112999, ~: 112962)
Logs:
  Bound result 11349

[PASS] test_add_fuzz_revertsWith_AddCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 10000, μ: 274483, ~: 274376)
Logs:
  Bound result 8547
  Bound result 5640
  Bound result 17864

[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 10000, μ: 229999, ~: 230208)
Logs:
  Bound result 999999999999999999999999999998
  Bound result 1083898954
  Bound result 3

[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 10000, μ: 345555, ~: 345454)
Logs:
  Bound result 3
  Bound result 13697321729441020

[PASS] test_add_fuzz_single_spoke_multi_add(uint256,uint256) (runs: 10000, μ: 822162, ~: 822213)
Logs:
  Bound result 179871023565643289081028563687
  Bound result 1

[PASS] test_add_multi_add_minimal_shares() (gas: 328544)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 368149)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 64867)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 13475)
[PASS] test_add_revertsWith_InvalidShares() (gas: 230124)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 228043)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 98590)
[PASS] test_add_revertsWith_SpokePaused() (gas: 98707)
[PASS] test_add_single_asset() (gas: 333479)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_add_with_increased_index() (gas: 308110)
[PASS] test_add_with_increased_index_with_premium() (gas: 688658)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 97.13s (97.11s CPU time)

Ran 14 tests for tests/unit/Spoke/Spoke.Supply.t.sol:SpokeSupplyTest
[PASS] test_fuzz_supply_effect_on_ex_rates(uint256,uint256) (runs: 10000, μ: 706674, ~: 707783)
Logs:
  Bound result 412441420
  Bound result 1

[PASS] test_supply() (gas: 302919)
[PASS] test_supply_does_not_update_risk_premium() (gas: 1658466)
[PASS] test_supply_fuzz_amounts(uint256) (runs: 10000, μ: 430541, ~: 430231)
Logs:
  Bound result 12850

[PASS] test_supply_fuzz_index_increase_no_premium(uint256,uint256,uint256,uint256) (runs: 10000, μ: 662778, ~: 663030)
Logs:
  Bound result 326411577960326964584540511358
  Bound result 87024
  Bound result 0
  Bound result 852737811

[PASS] test_supply_fuzz_index_increase_with_premium(uint256,uint256,uint256,uint256) (runs: 10000, μ: 759535, ~: 759687)
Logs:
  Bound result 569831226909633041724989878950
  Bound result 35391
  Bound result 0
  Bound result 1937552

[PASS] test_supply_fuzz_revertsWith_ERC20InsufficientBalance(uint256) (runs: 10000, μ: 62254, ~: 61986)
Logs:
  Bound result 23399

[PASS] test_supply_index_increase_no_premium() (gas: 864815)
[PASS] test_supply_index_increase_with_premium() (gas: 923733)
[PASS] test_supply_revertsWith_ERC20InsufficientAllowance() (gas: 39740)
[PASS] test_supply_revertsWith_InvalidSupplyAmount() (gas: 41953)
[PASS] test_supply_revertsWith_ReserveFrozen() (gas: 65102)
[PASS] test_supply_revertsWith_ReserveNotListed() (gas: 22091)
[PASS] test_supply_revertsWith_ReservePaused() (gas: 65022)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 101.94s (101.92s CPU time)

Ran 8 tests for tests/unit/Spoke/Spoke.Upgradeable.t.sol:SpokeUpgradeableTest
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 10000, μ: 5014278, ~: 5014278)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 10000, μ: 5036730, ~: 5036723)
Logs:
  Bound result 1

[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 10000, μ: 10021635, ~: 10021628)
Logs:
  Bound result 1728000000

[PASS] test_proxy_constructor_revertsWith_InvalidAddress() (gas: 9519)
[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 5011139)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 10000, μ: 10938561, ~: 10938550)
Logs:
  Bound result 456

[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 5015115)
[PASS] test_proxy_reinitialization_revertsWith_InvalidAddress() (gas: 5016833)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 42.25s (42.22s CPU time)

Ran 6 tests for tests/unit/Spoke/Spoke.UserAccountData.t.sol:SpokeUserAccountDataTest
[PASS] test_userAccountData_scenario1() (gas: 499849)
[PASS] test_userAccountData_scenario2() (gas: 561970)
[PASS] test_userAccountData_scenario3() (gas: 562245)
[PASS] test_userAccountData_scenario4() (gas: 838871)
[PASS] test_userAccountData_scenario5() (gas: 717637)
[PASS] test_userAccountData_scenario6() (gas: 690081)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 27.01ms (4.64ms CPU time)

Ran 35 tests for tests/unit/Hub/Hub.Config.t.sol:HubConfigTest
[PASS] test_addAsset_fuzz(address,uint8,address) (runs: 10000, μ: 413985, ~: 414017)
Logs:
  Bound result 18

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_feeReceiver(address,uint8,address) (runs: 10000, μ: 46608, ~: 46938)
Logs:
  Bound result 0

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 10000, μ: 46641, ~: 46969)
Logs:
  Bound result 0

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 10000, μ: 37700, ~: 37700)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 10000, μ: 47155, ~: 46949)
Logs:
  Bound result 22

[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 10000, μ: 47413, ~: 47648)
Logs:
  Bound result 3

[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 10000, μ: 106583063, ~: 36219)
Logs:
  Bound result 7

[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 767668)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 764724)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 47752)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 10000, μ: 125842, ~: 125896)
Logs:
  Bound result 0

[PASS] test_addSpoke_fuzz_revertsWith_AssetNotListed(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 10000, μ: 34721, ~: 34709)
Logs:
  Bound result 1082385666380563208490542499155

[PASS] test_addSpoke_fuzz_revertsWith_InvalidAddress_spoke(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 10000, μ: 33424, ~: 33474)
Logs:
  Bound result 0

[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 38854)
[PASS] test_hub_deploy_revertsWith_InvalidAddress() (gas: 3842)
[PASS] test_hub_max_riskPremium() (gas: 8525)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 732191)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 626186)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 72090)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 10000, μ: 268856, ~: 269125)
Logs:
  Bound result 4
  Bound result 1481

[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 10000, μ: 822558, ~: 822505)
Logs:
  Bound result 4
  Bound result 317
  Bound result 4
  Bound result 0
  Bound result 4
  Bound result 317

[PASS] test_updateAssetConfig_fuzz_LiquidityFee(uint256,uint16) (runs: 10000, μ: 725128, ~: 725087)
Logs:
  Bound result 2
  Bound result 18
  Bound result 2
  Bound result 18

[PASS] test_updateAssetConfig_fuzz_NewFeeReceiver(uint256) (runs: 10000, μ: 831327, ~: 831447)
Logs:
  Bound result 2
  Bound result 2
  Bound result 500

[PASS] test_updateAssetConfig_fuzz_NewInterestRateStrategy(uint256) (runs: 10000, μ: 706015, ~: 706140)
Logs:
  Bound result 0

[PASS] test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed(uint256) (runs: 10000, μ: 883648, ~: 883772)
Logs:
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 1000

[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 10000, μ: 680254, ~: 680306)
Logs:
  Bound result 0
  Bound result 0
  Bound result 1000
  Bound result 0
  Bound result 1000
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 0
  Bound result 0

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidInterestRateStrategy(uint256) (runs: 10000, μ: 59944, ~: 59995)
Logs:
  Bound result 3

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidLiquidityFee(uint256,(address,uint16,address,address)) (runs: 10000, μ: 40977, ~: 40880)
Logs:
  Bound result 1
  Bound result 3

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 490553)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 10000, μ: 202231, ~: 202502)
Logs:
  Bound result 1
  Bound result 5366

[PASS] test_updateAssetConfig_fuzz_revertsWith_setInterestRateDataReverts(uint256,(address,uint16,address,address)) (runs: 10000, μ: 65091, ~: 64994)
Logs:
  Bound result 4
  Bound result 208

[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 708280)
Logs:
  Bound result 2
  Bound result 500
  Bound result 2
  Bound result 500
  Bound result 2
  Bound result 500
  Bound result 0
  Bound result 1000

[PASS] test_updateSpokeConfig_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 10000, μ: 58449, ~: 58515)
Logs:
  Bound result 0

[PASS] test_updateSpokeConfig_fuzz_revertsWith_SpokeNotListed(uint256,address,(uint40,uint40,uint24,bool,bool)) (runs: 10000, μ: 40442, ~: 40504)
Logs:
  Bound result 3

[PASS] test_updateSpokeConfig_revertsWith_AssetNotListed() (gas: 29334)
Suite result: ok. 35 passed; 0 failed; 0 skipped; finished in 200.65s (200.63s CPU time)

Ran 16 tests for tests/unit/Hub/Hub.Draw.t.sol:HubDrawTest
[PASS] test_draw_DifferentSpokes() (gas: 362336)
[PASS] test_draw_fuzz_IncreasedBorrowRate(uint256,uint256) (runs: 10000, μ: 705051, ~: 705097)
Logs:
  Bound result 1
  Bound result 90283052741385934335699328104

[PASS] test_draw_fuzz_amounts_same_block(uint256,uint256) (runs: 10000, μ: 289005, ~: 288910)
Logs:
  Bound result 0
  Bound result 1

[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded(uint40) (runs: 10000, μ: 81418, ~: 81382)
Logs:
  Bound result 21624328385

[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 10000, μ: 293860, ~: 294131)
Logs:
  Bound result 3559
  Bound result 3914
  Bound result 2

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 10000, μ: 34073, ~: 33863)
Logs:
  Bound result 1
  Bound result 1104251137795585799102

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_draw(uint256) (runs: 10000, μ: 175316, ~: 175045)
Logs:
  Bound result 665235841099068870896188205484

[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_remove(uint256) (runs: 10000, μ: 136202, ~: 136013)
Logs:
  Bound result 866065786519167270736346684059

[PASS] test_draw_fuzz_revertsWith_InvalidAddress(uint256) (runs: 10000, μ: 15757, ~: 15757)
[PASS] test_draw_revertsWith_DrawCapExceeded_due_to_deficit() (gas: 274342)
[PASS] test_draw_revertsWith_InsufficientLiquidity() (gas: 28097)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_draw() (gas: 171620)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_remove() (gas: 133323)
[PASS] test_draw_revertsWith_InvalidAmount() (gas: 15877)
[PASS] test_draw_revertsWith_SpokeNotActive() (gas: 59712)
[PASS] test_draw_revertsWith_SpokePaused() (gas: 59785)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 50.78s (50.75s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueInterest.t.sol:SpokeAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 132063)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 10000, μ: 639081, ~: 638923)
Logs:
  Bound result 4

[PASS] test_accrueInterest_NoInterest_OnlySupply(uint40) (runs: 10000, μ: 252250, ~: 252281)
Logs:
  Bound result 0

[PASS] test_accrueInterest_TenPercentRp(uint256,uint40) (runs: 10000, μ: 584604, ~: 585091)
Logs:
  Bound result 230960906588280552217423844417
  Bound result 527228561

[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 10000, μ: 542190, ~: 542485)
Logs:
  Bound result 24976343554918515039707354982
  Bound result 159898500

[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 10000, μ: 3866318, ~: 3882582)
Logs:
  Bound result 1506448242639236025915
  Bound result 2
  Bound result 344222380883448727249606972084
  Bound result 21713302
  Bound result 63470475548665421696603393446
  Bound result 500000000000000000000000000000
  Bound result 67949351497068729552390
  Bound result 2203468747309471129461
  Bound result 116595
  Bound result 63470475548665421696603393446
  Bound result 500000000000000000000000000000
  Bound result 67949351497068729552390
  Bound result 2203468747309471129461

[PASS] test_accrueInterest_fuzz_RatesRPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),(uint96,uint96,uint96,uint96),uint40) (runs: 10000, μ: 3930707, ~: 3949298)
Logs:
  Bound result 9
  Bound result 15405
  Bound result 5900000000
  Bound result 700000000000000000
  Bound result 579760926
  Bound result 282860109778948621113262157166
  Bound result 3600000000000000000000
  Bound result 6800
  Bound result 16194
  Bound result 6066
  Bound result 20452
  Bound result 16427
  Bound result 486504908
  Bound result 579760926
  Bound result 20360109774523621113263003697
  Bound result 108725708198528297876
  Bound result 6800

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

Ran 6 tests for tests/unit/Hub/Hub.EliminateDeficit.t.sol:HubEliminateDeficitTest
[PASS] test_eliminateDeficit(uint256) (runs: 10000, μ: 657194, ~: 657194)
[PASS] test_eliminateDeficit_allowSpokePaused() (gas: 429463)
[PASS] test_eliminateDeficit_fuzz_revertsWith_ArithmeticUnderflow_CallerSpokeNoFunds(uint256) (runs: 10000, μ: 343589, ~: 343589)
[PASS] test_eliminateDeficit_fuzz_revertsWith_callerSpokeNotActive(address) (runs: 10000, μ: 28908, ~: 28908)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountNoDeficit() (gas: 20068)
[PASS] test_eliminateDeficit_revertsWith_InvalidAmount_ZeroAmountWithDeficit() (gas: 340599)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 35.36s (35.34s CPU time)

Ran 6 tests for tests/unit/Hub/Hub.MintFeeShares.t.sol:HubMintFeeSharesTest
[PASS] test_mintFeeShares() (gas: 314993)
[PASS] test_mintFeeShares_noFees() (gas: 370412)
[PASS] test_mintFeeShares_noShares() (gas: 301362)
[PASS] test_mintFeeShares_revertsWith_AccessManagedUnauthorized() (gas: 25025)
[PASS] test_mintFeeShares_revertsWith_AssetNotListed() (gas: 27812)
[PASS] test_mintFeeShares_revertsWith_SpokeNotActive() (gas: 245976)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.79ms (4.50ms CPU time)

Ran 9 tests for tests/gas/Hub.Operations.gas.t.sol:HubOperations_Gas_Tests
[PASS] test_add() (gas: 273543)
[PASS] test_deficit() (gas: 1181399)
[PASS] test_draw() (gas: 423925)
[PASS] test_mintFeeShares() (gas: 508292)
[PASS] test_payFee_transferShares() (gas: 975461)
[PASS] test_refreshPremium() (gas: 636657)
[PASS] test_remove() (gas: 314977)
[PASS] test_restore() (gas: 891946)
[PASS] test_restore_with_transfer() (gas: 892614)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 40.67ms (7.84ms 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: 10000, μ: 540644, ~: 540718)
Logs:
  Bound result 372500000000000000000
  Bound result 100000
  Bound result 8162
  Bound result 3

[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 10000, μ: 792284, ~: 792335)
Logs:
  Bound result 3176
  Bound result 249999999999999999999999999999
  Bound result 23468
  Bound result 648
  Bound result 2

[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 717644604)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 303124638)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 541002)
Logs:
  Bound result 500000000000000000000
  Bound result 5000
  Bound result 34560000
  Bound result 2

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

Ran 6 tests for tests/unit/Hub/Hub.PayFee.t.sol:HubPayFeeTest
[PASS] test_payFee_fuzz(uint256,uint256) (runs: 10000, μ: 707987, ~: 708130)
Logs:
  Bound result 114401265751
  Bound result 0
  Bound result 5945380293

[PASS] test_payFee_fuzz_with_interest(uint256,uint256,uint256) (runs: 10000, μ: 708457, ~: 708729)
Logs:
  Bound result 3
  Bound result 784775096
  Bound result 2

[PASS] test_payFee_revertsWith_InvalidShares() (gas: 20137)
[PASS] test_payFee_revertsWith_SpokeNotActive() (gas: 59678)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded() (gas: 138907)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded_with_interest() (gas: 653077)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 52.93s (52.91s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueLiquidityFee.t.sol:SpokeAccrueLiquidityFeeTest
[PASS] test_accrueLiquidityFee() (gas: 881944)
[PASS] test_accrueLiquidityFee_NoActionTaken() (gas: 120065)
[PASS] test_accrueLiquidityFee_NoInterest_OnlySupply(uint40) (runs: 10000, μ: 247258, ~: 247256)
Logs:
  Bound result 41907

[PASS] test_accrueLiquidityFee_exact() (gas: 888610)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 10000, μ: 959706, ~: 981649)
Logs:
  Bound result 94089528298259561612054
  Bound result 29627

[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 546876)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 901085)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 43.60s (43.58s CPU time)

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

[PASS] test_reclaim_fullAmount() (gas: 661472)
[PASS] test_reclaim_fuzz(uint256,uint256,uint256) (runs: 10000, μ: 682471, ~: 681689)
Logs:
  Bound result 736859776283892489568423027248
  Bound result 80000000000000000000
  Bound result 13

[PASS] test_reclaim_multipleSweepsAndReclaims() (gas: 789768)
[PASS] test_reclaim_revertsWith_AssetNotListed() (gas: 12439)
[PASS] test_reclaim_revertsWith_InvalidAmount_zero() (gas: 93115)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController(address) (runs: 10000, μ: 93980, ~: 93980)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController_init() (gas: 40003)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept() (gas: 98578)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept_afterSweep() (gas: 461593)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 31.10s (31.08s CPU time)

Ran 21 tests for tests/unit/Spoke/Spoke.Withdraw.HealthFactor.t.sol:SpokeWithdrawHealthFactorTest
[PASS] test_unsetCollateral_fuzz_revertsWith_HealthFactorBelowThreshold(uint256) (runs: 10000, μ: 761052, ~: 760786)
Logs:
  Bound result 161511189662172960847968519596

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_interest_increase(uint256,uint256) (runs: 10000, μ: 656230, ~: 656747)
Logs:
  Bound result 9080
  Bound result 750000000

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 10000, μ: 883654, ~: 884451)
Logs:
  Bound result 200000000
  Bound result 124

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai(uint256,uint256,uint256) (runs: 10000, μ: 1147231, ~: 1149231)
Logs:
  Bound result 35174396
  Bound result 1162190
  Bound result 463259900

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth(uint256,uint256,uint256) (runs: 10000, μ: 1148510, ~: 1149225)
Logs:
  Bound result 181995348004
  Bound result 890
  Bound result 20857

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256) (runs: 10000, μ: 940069, ~: 942147)
Logs:
  Bound result 5826
  Bound result 17133

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 10000, μ: 1004511, ~: 1004409)
Logs:
  Bound result 14424
  Bound result 168

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop(uint256,uint256,uint256) (runs: 10000, μ: 1253277, ~: 1253518)
Logs:
  Bound result 7392
  Bound result 22650
  Bound result 250000000000000000000

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 10000, μ: 1041398, ~: 1041600)
Logs:
  Bound result 251091894
  Bound result 734843480199528806409439188995
  Bound result 8257122

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_price_drop(uint256,uint256) (runs: 10000, μ: 869305, ~: 869168)
Logs:
  Bound result 2303
  Bound result 256

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_singleBorrow(uint256) (runs: 10000, μ: 620616, ~: 620404)
Logs:
  Bound result 700000000000000000

[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_interest_increase() (gas: 651382)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 879870)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai() (gas: 1142832)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth() (gas: 1142812)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 937006)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 999423)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop() (gas: 1246760)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1035183)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_price_drop() (gas: 864064)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_singleBorrow() (gas: 622562)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 330.82s (330.80s CPU time)

Ran 12 tests for tests/unit/Hub/Hub.RefreshPremium.t.sol:HubRefreshPremiumTest
[PASS] test_refreshPremium_emitsEvent() (gas: 259520)
[PASS] test_refreshPremium_fuzz_positiveDeltas(uint256,int256,int256) (runs: 10000, μ: 488078, ~: 492769)
Logs:
  Bound result 999999999999999999999900000001
  Bound result 11249
  Bound result 120000000

[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 10000, μ: 469675, ~: 478963)
Logs:
  Bound result 1
  Bound result 1
  Bound result 5
  Bound result 348857405270125634153646177958

[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 895821)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 10000, μ: 461578, ~: 461527)
Logs:
  Bound result 8000

[PASS] test_refreshPremium_negativeDeltas_withAccrual(uint256) (runs: 10000, μ: 534472, ~: 534147)
Logs:
  Bound result 0

[PASS] test_refreshPremium_pausedSpokesAllowed() (gas: 120453)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 856098)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 874294)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 57758)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 921229)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 710889)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 44.86s (44.84s CPU time)

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

[PASS] test_remove_all_with_interest() (gas: 377919)
[PASS] test_remove_fuzz(uint256,uint256) (runs: 10000, μ: 209231, ~: 209034)
Logs:
  Bound result 1
  Bound result 8596

[PASS] test_remove_fuzz_all_liquidity_with_interest(uint256,uint256) (runs: 10000, μ: 429899, ~: 430159)
Logs:
  Bound result 3968527870998290
  Bound result 479087929

[PASS] test_remove_fuzz_multi_spoke(uint256,uint256) (runs: 10000, μ: 293895, ~: 294021)
Logs:
  Bound result 716796065597291239375772369658
  Bound result 277408601408908088226182587823

[PASS] test_remove_fuzz_multi_spoke_with_interest(uint256,uint256,uint256,uint256) (runs: 10000, μ: 433362, ~: 433926)
Logs:
  Bound result 56181105326071633715137630583
  Bound result 43818894673928366284862369417
  Bound result 1
  Bound result 14144491

[PASS] test_remove_revertsWith_InsufficientLiquidity() (gas: 160467)
[PASS] test_remove_revertsWith_InsufficientLiquidity_exceeding_added_amount() (gas: 148158)
[PASS] test_remove_revertsWith_InsufficientLiquidity_zero_added() (gas: 20745)
[PASS] test_remove_revertsWith_InvalidAddress() (gas: 15718)
[PASS] test_remove_revertsWith_InvalidAmount() (gas: 17819)
[PASS] test_remove_revertsWith_SpokeNotActive() (gas: 59802)
[PASS] test_remove_revertsWith_SpokePaused() (gas: 59908)
[PASS] test_remove_revertsWith_underflow_exceeding_added_amount() (gas: 188116)
[PASS] test_remove_revertsWtih_underflow_one_extra_wei() (gas: 372890)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 66.65s (66.63s CPU time)

Ran 5 tests for tests/unit/Spoke/Spoke.Borrow.EdgeCases.t.sol:SpokeBorrowEdgeCasesTest
[PASS] test_borrow_fuzz_rounding_effect(uint256,uint256) (runs: 10000, μ: 1050455, ~: 1050590)
Logs:
  Bound result 115
  Bound result 185399002606151606685831967409

[PASS] test_borrow_fuzz_rounding_effect_inflated_ex_rate(uint256,uint256,uint256) (runs: 10000, μ: 1418649, ~: 1418747)
Logs:
  Bound result 24534982268148940857
  Bound result 63140936408460948197217
  Bound result 370676316

[PASS] test_borrow_fuzz_rounding_effect_shares(uint256,uint256) (runs: 10000, μ: 1083838, ~: 1083598)
Logs:
  Bound result 236041164352414197936550499282
  Bound result 540584149

[PASS] test_borrow_rounding_effect_multiple_actions() (gas: 1147417)
[PASS] test_borrow_rounding_effect_shares() (gas: 1082813)
Logs:
  Bound result 5000000000000000000
  Bound result 94608000

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

Ran 5 tests for tests/unit/Spoke/Spoke.Withdraw.Scenario.t.sol:SpokeWithdrawScenarioTest
[PASS] test_withdraw_fuzz_all_liquidity_with_interest_multi_user((uint256,uint256,uint256,uint256,uint256[2],uint256)) (runs: 10000, μ: 869856, ~: 869915)
Logs:
  Bound result 0
  Bound result 2126681
  Bound result 8516443524749288116073441
  Bound result 142208474
  Bound result 54303318
  Bound result 3397117502297039271537573
  Bound result 65922

[PASS] test_withdraw_fuzz_partial_full_with_interest(uint256,uint256,uint256,uint40) (runs: 10000, μ: 717457, ~: 717516)
Logs:
  Bound result 26811779724364726784
  Bound result 2
  Bound result 5725193543988693087
  Bound result 3616165

[PASS] test_withdraw_round_trip_deposit_withdraw(uint256,uint256,address,uint256) (runs: 10000, μ: 416930, ~: 416940)
Logs:
  Bound result 0
  Bound result 255
  Bound result 1000000000000000000000000

[PASS] test_withdraw_round_trip_withdraw_deposit(uint256,uint256,uint256,address,uint256) (runs: 10000, μ: 438473, ~: 437795)
Logs:
  Bound result 1
  Bound result 787815326973978325463902193753
  Bound result 12854354692533578670773784305
  Bound result 212184673026021674536097806246

[PASS] test_withdraw_underwater_reserve_not_collateral() (gas: 821822)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 119.34s (119.31s CPU time)

Ran 6 tests for tests/unit/Spoke/Spoke.Withdraw.Validation.t.sol:SpokeWithdrawValidationTest
[PASS] test_withdraw_fuzz_revertsWith_InsufficientLiquidity_with_debt(uint256,uint256,uint256,uint256,uint256) (runs: 10000, μ: 432473, ~: 432718)
Logs:
  Bound result 0
  Bound result 11863
  Bound result 5455
  Bound result 24448
  Bound result 180000000

[PASS] test_withdraw_fuzz_revertsWith_InsufficientSupply_zero_supplied(uint256) (runs: 10000, μ: 52972, ~: 52708)
Logs:
  Bound result 1000000000000000000000000000000

[PASS] test_withdraw_revertsWith_InsufficientLiquidity_with_debt() (gas: 429164)
[PASS] test_withdraw_revertsWith_InvalidAmount_zero_supplied() (gas: 49281)
[PASS] test_withdraw_revertsWith_ReserveNotListed() (gas: 22048)
[PASS] test_withdraw_revertsWith_ReservePaused() (gas: 64899)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 12.57s (12.55s CPU time)

Ran 7 tests for tests/unit/Hub/Hub.ReportDeficit.t.sol:HubReportDeficitTest
[PASS] test_reportDeficit_fuzz_revertsWith_SurplusDrawnDeficitReported(uint256) (runs: 10000, μ: 221782, ~: 221521)
Logs:
  Bound result 3084

[PASS] test_reportDeficit_fuzz_revertsWith_SurplusPremiumRayDeficitReported(uint256) (runs: 10000, μ: 223377, ~: 223103)
Logs:
  Bound result 5766

[PASS] test_reportDeficit_fuzz_with_premium(uint256,uint256,uint256,uint256) (runs: 10000, μ: 676846, ~: 677711)
Logs:
  Bound result 3
  Bound result 599597451
  Bound result 1
  Bound result 521007901455350743918792379

[PASS] test_reportDeficit_paused() (gas: 271263)
[PASS] test_reportDeficit_revertsWith_InvalidAmount() (gas: 24122)
[PASS] test_reportDeficit_revertsWith_SpokeNotActive(address) (runs: 10000, μ: 32527, ~: 32527)
[PASS] test_reportDeficit_with_premium() (gas: 676264)
Logs:
  Bound result 10000000000
  Bound result 31536000
  Bound result 5000000000
  Bound result 0

Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 37.63s (37.61s 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: 10000, μ: 1214565, ~: 1219451)
Logs:
  Bound result 5827
  Bound result 4100
  Bound result 9043
  Bound result 7600
  Bound result 1320
  Bound result 1333

[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: 10000, μ: 2026633, ~: 1996592)
Logs:
  Bound result 136
  Bound result 750
  Bound result 12000000000000000000000000000
  Bound result 51214989874233280936144128986140772502013762712926711515271717983386859616936
  Bound result 5000000000
  Bound result 300000000000000000
  Bound result 864000000

[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: 10000, μ: 6004799, ~: 6005078)
Logs:
  Bound result 1583732293221532
  Bound result 124226345538228563158192226477
  Bound result 1437750599579719796
  Bound result 43681521828772609991509217285
  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935
  Bound result 258628111202730762031350557
  Bound result 28669834816508917247402296
  Bound result 32788473733568423227
  Bound result 124500071911446106313672447343
  Bound result 52404286538614834528970489640
  Bound result 251
  Bound result 27197
  Bound result 44403525046472059661352532121115612300783162423377613020367541639699350563357
  Bound result 1153020375161671885518684098811386756124836
  Bound result 41721501105350346113032134559397651410647023115346584930170612
  Bound result 153
  Bound result 111481396545333491040794365959
  Bound result 49084109540923890721061489027
  Bound result 1
  Bound result 96288
  Bound result 32323135037341580581417551190371125849612992939218892258814249980932381
  Bound result 75389791893148699710971998656201199845038489204794511
  Bound result 1894461447270442623284138059250831214369164199000375036516513175947
  Bound result 140049153038110585447770408216641726677
  Bound result 419

[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: 10000, μ: 4255756, ~: 4255951)
Logs:
  Bound result 83089245738667100770610241149
  Bound result 9700856381061859547896762425
  Bound result 106663985166388135
  Bound result 428129419210341478
  Bound result 422539803172343972055260501436290430795847
  Bound result 43802082365689483545678922520
  Bound result 22690368320814631821882873662906876277509096074541537134716629346340531
  Bound result 1
  Bound result 124999999999999999999999999999
  Bound result 1457183138611939227764
  Bound result 20
  Bound result 75860823273537839464957306502
  Bound result 1345762169131386004436664553880251762485065482651
  Bound result 53269829992515802453215506228153733690555807598237554755915988447
  Bound result 46366102601365873709380644
  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935
  Bound result 69495352

[PASS] test_repay_partial_then_max() (gas: 684373)
[PASS] test_repay_round_trip_borrow_repay(uint256,uint256,uint40,address,uint256) (runs: 10000, μ: 868470, ~: 871189)
Logs:
  Bound result 1
  Bound result 960000000000000000
  Bound result 6716
  Bound result 7491

[PASS] test_repay_round_trip_repay_borrow(uint256,uint256,uint256,uint40,address,uint256) (runs: 10000, μ: 953516, ~: 963373)
Logs:
  Bound result 3
  Bound result 6000
  Bound result 546
  Bound result 37500000000000000000
  Bound result 1030000000000000000

[PASS] test_repay_two_users_repay_same_reserve((uint256,uint256,uint256,uint256,uint256,uint256,address),(uint256,uint256,uint256,uint256,uint256,uint256,address),uint256) (runs: 10000, μ: 1462304, ~: 1492474)
Logs:
  Bound result 103178726698718531993594849281
  Bound result 173284149
  Bound result 221542458097909883503369
  Bound result 2005204964760182404335643
  Bound result 505246258

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

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

Ran 3 tests for tests/unit/Hub/Hub.Rescue.t.sol:HubRescueTest
[PASS] test_cannot_rescue_liquidity_fee_reverts_with_InsufficientTransferred() (gas: 279900)
[PASS] test_rescue_fuzz_with_interest(uint256,uint256) (runs: 10000, μ: 526154, ~: 526142)
Logs:
  Bound result 19351592
  Bound result 57672528920699548499508579418

[PASS] test_rescue_scenario_fuzz(uint256) (runs: 10000, μ: 462912, ~: 462717)
Logs:
  Bound result 48292777383942

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

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

[PASS] test_restore_full_amount_with_interest_and_premium() (gas: 677542)
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: 10000, μ: 368196, ~: 368305)
Logs:
  Bound result 548973771218010997730
  Bound result 229022463289483
  Bound result 172132551

[PASS] test_restore_fuzz_full_amount_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 10000, μ: 667898, ~: 679493)
Logs:
  Bound result 25000000000000000000
  Bound result 960000000000000000
  Bound result 20880
  Bound result 184

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest(uint256,uint256,uint256) (runs: 10000, μ: 248120, ~: 249307)
Logs:
  Bound result 10711
  Bound result 10683
  Bound result 3151

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 10000, μ: 639833, ~: 640030)
Logs:
  Bound result 1
  Bound result 1
  Bound result 488482992
  Bound result 1

[PASS] test_restore_one_share_delta_increase_revertsWith_InvalidPremiumChange() (gas: 214533)
[PASS] test_restore_partial_drawn() (gas: 330538)
[PASS] test_restore_partial_same_block() (gas: 326324)
[PASS] test_restore_premiumDeltas_twoWeiIncrease_realizedDelta() (gas: 236238)
[PASS] test_restore_revertsWith_InsufficientTransferred() (gas: 258503)
[PASS] test_restore_revertsWith_InvalidAmount_zero() (gas: 53477)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumIncrease() (gas: 221685)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumSharesIncrease() (gas: 221729)
[PASS] test_restore_revertsWith_SpokeNotActive_whenPaused() (gas: 165985)
[PASS] test_restore_revertsWith_SpokePaused() (gas: 93448)
[PASS] test_restore_revertsWith_SurplusDrawnRestored() (gas: 364815)
[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest() (gas: 247883)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 15768000

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

[PASS] test_restore_revertsWith_SurplusPremiumRayRestored() (gas: 534370)
[PASS] test_restore_revertsWith_underflow_offsetIncrease() (gas: 232925)
[PASS] test_restore_tooMuchDrawn_revertsWith_SurplusDrawnRestored() (gas: 221898)
[PASS] test_restore_when_asset_frozen() (gas: 428262)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 41.21s (41.19s CPU time)

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

Ran 4 tests for tests/unit/Hub/Hub.Skim.t.sol:HubSkimTest
[PASS] test_skimAdd_fuzz_donationAfterAdd(uint256,uint256,uint256) (runs: 10000, μ: 228295, ~: 228298)
Logs:
  Bound result 0
  Bound result 1728000000
  Bound result 200000000

[PASS] test_skimAdd_fuzz_donationBeforeAdd(uint256,uint256,uint256) (runs: 10000, μ: 228349, ~: 228352)
Logs:
  Bound result 2
  Bound result 22566231799
  Bound result 96964150062199968570990735755

[PASS] test_skimAdd_fuzz_wrongSpokeTransfer(uint256,uint256,uint256) (runs: 10000, μ: 217213, ~: 217154)
Logs:
  Bound result 3
  Bound result 220191254
  Bound result 54

[PASS] test_skimRestore_fuzz_liquidityDonation(uint256,uint256,uint256) (runs: 10000, μ: 276202, ~: 277893)
Logs:
  Bound result 3
  Bound result 48949110635294594111246965440
  Bound result 15

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

Ran 10 tests for tests/unit/Hub/Hub.SpokeConfig.t.sol:HubSpokeConfigTest
[PASS] test_add_active_paused_scenarios() (gas: 293912)
[PASS] test_draw_active_paused_scenarios() (gas: 294341)
[PASS] test_eliminateDeficit_active_paused_scenarios() (gas: 651631)
[PASS] test_mintFeeShares_active_paused_scenarios() (gas: 857310)
[PASS] test_payFeeShares_active_paused_scenarios() (gas: 348069)
[PASS] test_refreshPremium_active_paused_scenarios() (gas: 260108)
[PASS] test_remove_active_paused_scenarios() (gas: 309142)
[PASS] test_reportDeficit_active_paused_scenarios() (gas: 442423)
[PASS] test_restore_active_paused_scenarios() (gas: 349173)
[PASS] test_transferShares_fuzz_active_paused_scenarios(bool,bool,bool,bool) (runs: 10000, μ: 209405, ~: 209312)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 8.47s (8.44s CPU time)

Ran 12 tests for tests/unit/Spoke/Spoke.Withdraw.t.sol:SpokeWithdrawTest
[PASS] test_fuzz_withdraw_effect_on_ex_rates(uint256,uint256) (runs: 10000, μ: 735583, ~: 737682)
Logs:
  Bound result 32000000
  Bound result 497000000000000000

[PASS] test_withdraw_all_liquidity() (gas: 235131)
[PASS] test_withdraw_all_liquidity_with_interest_no_premium() (gas: 784497)
[PASS] test_withdraw_all_liquidity_with_interest_with_premium() (gas: 791701)
[PASS] test_withdraw_fuzz_all_elapsed_with_interest(uint256,uint256,uint40) (runs: 10000, μ: 664320, ~: 664225)
Logs:
  Bound result 18845
  Bound result 7512
  Bound result 2814

[PASS] test_withdraw_fuzz_all_greater_than_supplied(uint256) (runs: 10000, μ: 238089, ~: 237896)
Logs:
  Bound result 563890960535603734654611706276

[PASS] test_withdraw_fuzz_all_liquidity_with_interest_no_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 10000, μ: 843356, ~: 843897)
Logs:
  Bound result 0
  Bound result 92651360569421861105855858871
  Bound result 6921581745196860494201085651
  Bound result 99999
  Bound result 774040151

[PASS] test_withdraw_fuzz_all_liquidity_with_interest_with_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 10000, μ: 856824, ~: 856871)
Logs:
  Bound result 0
  Bound result 34789
  Bound result 7246
  Bound result 47923
  Bound result 665

[PASS] test_withdraw_fuzz_all_with_interest(uint256,uint256) (runs: 10000, μ: 675297, ~: 675292)
Logs:
  Bound result 917722322937972495493913508402
  Bound result 178995921961485646859300812331

[PASS] test_withdraw_fuzz_suppliedAmount(uint256) (runs: 10000, μ: 238070, ~: 237880)
Logs:
  Bound result 313784510060429619176231003129

[PASS] test_withdraw_max_greater_than_supplied() (gas: 218933)
[PASS] test_withdraw_same_block() (gas: 243295)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 160.75s (160.73s CPU time)

Ran 49 tests for tests/unit/SpokeConfigurator.t.sol:SpokeConfiguratorTest
[PASS] test_addCollateralFactor() (gas: 113881)
[PASS] test_addCollateralFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 17995)
[PASS] test_addDynamicReserveConfig() (gas: 96182)
[PASS] test_addDynamicReserveConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 18267)
[PASS] test_addLiquidationBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 18102)
[PASS] test_addLiquidationFee() (gas: 113859)
[PASS] test_addLiquidationFee_revertsWith_OwnableUnauthorizedAccount() (gas: 17995)
[PASS] test_addMaxLiquidationBonus() (gas: 113940)
[PASS] test_addReserve() (gas: 420029)
[PASS] test_addReserve_revertsWith_MaximumReservesReached() (gas: 253826)
[PASS] test_addReserve_revertsWith_OwnableUnauthorizedAccount() (gas: 19139)
[PASS] test_freezeAllReserves() (gas: 199042)
[PASS] test_freezeAllReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15774)
[PASS] test_pauseAllReserves() (gas: 198871)
[PASS] test_pauseAllReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15731)
[PASS] test_updateBorrowable() (gas: 96457)
[PASS] test_updateBorrowable_revertsWith_OwnableUnauthorizedAccount() (gas: 17993)
[PASS] test_updateCollateralFactor() (gas: 71501)
[PASS] test_updateCollateralFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 18116)
[PASS] test_updateCollateralRisk() (gas: 70767)
[PASS] test_updateCollateralRisk_revertsWith_OwnableUnauthorizedAccount() (gas: 18027)
[PASS] test_updateDynamicReserveConfig() (gas: 2725058)
[PASS] test_updateDynamicReserveConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 18357)
[PASS] test_updateFrozen() (gas: 99371)
[PASS] test_updateFrozen_revertsWith_OwnableUnauthorizedAccount() (gas: 18058)
[PASS] test_updateHealthFactorForMaxBonus() (gas: 57251)
[PASS] test_updateHealthFactorForMaxBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 15862)
[PASS] test_updateLiquidatable() (gas: 96570)
[PASS] test_updateLiquidatable_revertsWith_OwnableUnauthorizedAccount() (gas: 18059)
[PASS] test_updateLiquidationBonusFactor() (gas: 60269)
[PASS] test_updateLiquidationBonusFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 15795)
[PASS] test_updateLiquidationConfig() (gas: 57065)
[PASS] test_updateLiquidationConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 16125)
[PASS] test_updateLiquidationFee() (gas: 71508)
[PASS] test_updateLiquidationFee_revertsWith_OwnableUnauthorizedAccount() (gas: 18075)
[PASS] test_updateLiquidationTargetHealthFactor() (gas: 60270)
[PASS] test_updateLiquidationTargetHealthFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 15886)
[PASS] test_updateMaxLiquidationBonus() (gas: 71462)
[PASS] test_updateMaxLiquidationBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 18010)
[PASS] test_updateMaxReserves() (gas: 42648)
[PASS] test_updateMaxReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15821)
[PASS] test_updatePaused() (gas: 99246)
[PASS] test_updatePaused_revertsWith_OwnableUnauthorizedAccount() (gas: 18058)
[PASS] test_updatePositionManager() (gas: 62828)
[PASS] test_updatePositionManager_revertsWith_OwnableUnauthorizedAccount() (gas: 15917)
[PASS] test_updateReceiveSharesEnabled() (gas: 96500)
[PASS] test_updateReceiveSharesEnabled_revertsWith_OwnableUnauthorizedAccount() (gas: 18012)
[PASS] test_updateReservePriceSource() (gas: 250193)
[PASS] test_updateReservePriceSource_revertsWith_OwnableUnauthorizedAccount() (gas: 17987)
Suite result: ok. 49 passed; 0 failed; 0 skipped; finished in 45.40ms (23.52ms CPU time)

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

[PASS] test_sweep_does_not_impact_utilization(uint256,uint256) (runs: 10000, μ: 635591, ~: 636683)
Logs:
  Bound result 807666773866059253631603007703
  Bound result 799351692736563656336378425633

[PASS] test_sweep_fuzz(uint256,uint256) (runs: 10000, μ: 486884, ~: 486890)
Logs:
  Bound result 104201255265181788609171584255
  Bound result 18771635647425992638784047881

[PASS] test_sweep_revertsWith_AssetNotListed() (gas: 12406)
[PASS] test_sweep_revertsWith_InsufficientLiquidity() (gas: 222388)
[PASS] test_sweep_revertsWith_InvalidAmount() (gas: 104209)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController(address) (runs: 10000, μ: 94702, ~: 94702)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController_init() (gas: 40016)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 38.86s (38.84s CPU time)

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

[PASS] test_transferShares_fuzz(uint256,uint256) (runs: 10000, μ: 192254, ~: 192464)
Logs:
  Bound result 9700
  Bound result 4298

[PASS] test_transferShares_fuzz_revertsWith_underflow_spoke_added_shares_exceeded(uint256) (runs: 10000, μ: 151659, ~: 151383)
Logs:
  Bound result 79601690249260152562284666051

[PASS] test_transferShares_revertsWith_AddCapExceeded() (gas: 194958)
[PASS] test_transferShares_revertsWith_SpokeNotActive() (gas: 176511)
[PASS] test_transferShares_revertsWith_SpokePaused() (gas: 178870)
[PASS] test_transferShares_zeroShares_revertsWith_InvalidShares() (gas: 22457)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 15.67s (15.65s 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: 10000, μ: 888324, ~: 888331)
Logs:
  Bound result 39000
  Bound result 3772

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 10000, μ: 856740, ~: 858085)
Logs:
  Bound result 355555555555555555556
  Bound result 9270

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256,uint256) (runs: 10000, μ: 894222, ~: 895343)
Logs:
  Bound result 9700
  Bound result 281474976645120
  Bound result 184

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 10000, μ: 1096012, ~: 1096120)
Logs:
  Bound result 4571224282895329672
  Bound result 499999999999999999990603166797

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 10000, μ: 1136893, ~: 1136766)
Logs:
  Bound result 999000000000000000
  Bound result 35843399398158517434305759283
  Bound result 308794704

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_with_interest(uint256,uint256) (runs: 10000, μ: 674067, ~: 674370)
Logs:
  Bound result 378
  Bound result 1

[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold() (gas: 640966)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_collateral_price_drop_weth() (gas: 882412)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 851683)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai() (gas: 1103458)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth() (gas: 1103502)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 890587)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 1089164)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1129539)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_with_interest() (gas: 668958)
[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai(uint256,uint256,uint256) (runs: 10000, μ: 1106690, ~: 1108260)
Logs:
  Bound result 1800000000
  Bound result 121
  Bound result 120000000

[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth(uint256,uint256,uint256) (runs: 10000, μ: 1107635, ~: 1108282)
Logs:
  Bound result 6637
  Bound result 1586361352866
  Bound result 376606675446150561

Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 270.75s (270.73s CPU time)

Ran 6 tests for tests/unit/Hub/HubAccrueInterest.t.sol:HubAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 43656)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 10000, μ: 401946, ~: 401854)
Logs:
  Bound result 15

[PASS] test_accrueInterest_NoInterest_OnlyAdd(uint40) (runs: 10000, μ: 210914, ~: 210858)
Logs:
  Bound result 22883

[PASS] test_accrueInterest_fuzz_BorrowAmountAndElapsed(uint256,uint40) (runs: 10000, μ: 276626, ~: 276266)
Logs:
  Bound result 321595642394716127064762623799
  Bound r...*[Comment body truncated]*

@github-actions
Copy link

github-actions bot commented Jan 8, 2026

♻️ Forge Gas Snapshots

Path Value
snapshots/SignatureGateway.Operations.json
borrowWithSig ↓0% (-36) 215,857
repayWithSig ↓0% (-36) 189,124
setSelfAsUserPositionManagerWithSig ↓0% (-36) 74,822
setUsingAsCollateralWithSig ↓0% (-24) 85,029
supplyWithSig ↓0% (-38) 153,167
updateUserDynamicConfigWithSig ↓0% (-36) 62,733
updateUserRiskPremiumWithSig ↓0% (-36) 61,543
withdrawWithSig ↓0% (-29) 131,684
snapshots/Spoke.Operations.ZeroRiskPremium.json
setUserPositionManagerWithSig: disable ↓1% (-312) 44,534
setUserPositionManagerWithSig: enable ↓0% (-312) 68,563
snapshots/Spoke.Operations.json
setUserPositionManagerWithSig: disable ↓1% (-312) 44,534
setUserPositionManagerWithSig: enable ↓0% (-312) 68,563
🔕 Unchanged
Path Value
snapshots/Hub.Operations.json
add 88,006
add: with transfer 109,613
draw 105,931
eliminateDeficit: full 59,781
eliminateDeficit: partial 69,429
mintFeeShares 86,130
payFee 72,302
refreshPremium 71,999
remove: full 76,993
remove: partial 81,640
reportDeficit 115,076
restore: full 80,471
restore: full - with transfer 173,521
restore: partial 89,137
restore: partial - with transfer 147,400
transferShares 71,192
snapshots/NativeTokenGateway.Operations.json
borrowNative 229,604
repayNative 168,312
supplyAsCollateralNative 160,373
supplyNative 136,476
withdrawNative: full 125,620
withdrawNative: partial 136,825
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 11,937
getUserAccountData: supplies: 1, borrows: 0 48,600
getUserAccountData: supplies: 2, borrows: 0 80,378
getUserAccountData: supplies: 2, borrows: 1 100,166
getUserAccountData: supplies: 2, borrows: 2 118,596
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first 191,325
borrow: second action, same reserve 171,297
liquidationCall (receiveShares): full 300,391
liquidationCall (receiveShares): partial 300,109
liquidationCall: full 310,756
liquidationCall: partial 310,474
permitReserve + repay (multicall) 166,317
permitReserve + supply (multicall) 146,862
permitReserve + supply + enable collateral (multicall) 160,573
repay: full 126,382
repay: partial 131,271
supply + enable collateral (multicall) 140,624
supply: 0 borrows, collateral disabled 123,679
supply: 0 borrows, collateral enabled 106,601
supply: second action, same reserve 106,579
updateUserDynamicConfig: 1 collateral 73,694
updateUserDynamicConfig: 2 collaterals 88,551
updateUserRiskPremium: 1 borrow 94,804
updateUserRiskPremium: 2 borrows 104,619
usingAsCollateral: 0 borrows, enable 58,915
usingAsCollateral: 1 borrow, disable 105,072
usingAsCollateral: 1 borrow, enable 41,803
usingAsCollateral: 2 borrows, disable 126,055
usingAsCollateral: 2 borrows, enable 41,815
withdraw: 0 borrows, full 128,910
withdraw: 0 borrows, partial 133,473
withdraw: 1 borrow, partial 161,036
withdraw: 2 borrows, partial 174,214
withdraw: non collateral 106,544
snapshots/Spoke.Operations.json
borrow: first 262,009
borrow: second action, same reserve 204,981
liquidationCall (receiveShares): full 334,242
liquidationCall (receiveShares): partial 333,960
liquidationCall: full 344,607
liquidationCall: partial 344,325
permitReserve + repay (multicall) 163,504
permitReserve + supply (multicall) 146,862
permitReserve + supply + enable collateral (multicall) 160,573
repay: full 120,544
repay: partial 139,833
supply + enable collateral (multicall) 140,624
supply: 0 borrows, collateral disabled 123,679
supply: 0 borrows, collateral enabled 106,601
supply: second action, same reserve 106,579
updateUserDynamicConfig: 1 collateral 73,694
updateUserDynamicConfig: 2 collaterals 88,551
updateUserRiskPremium: 1 borrow 151,368
updateUserRiskPremium: 2 borrows 204,852
usingAsCollateral: 0 borrows, enable 58,915
usingAsCollateral: 1 borrow, disable 161,636
usingAsCollateral: 1 borrow, enable 41,803
usingAsCollateral: 2 borrows, disable 234,288
usingAsCollateral: 2 borrows, enable 41,815
withdraw: 0 borrows, full 128,910
withdraw: 0 borrows, partial 133,473
withdraw: 1 borrow, partial 215,098
withdraw: 2 borrows, partial 259,848
withdraw: non collateral 106,544

@DhairyaSethi DhairyaSethi marked this pull request as ready for review January 9, 2026 10:20
Copy link
Contributor

Choose a reason for hiding this comment

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

do you want to keep this nightly until foundry merges in the nightly random fix into stable ?

Copy link
Member Author

@DhairyaSethi DhairyaSethi Jan 9, 2026

Choose a reason for hiding this comment

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

i tested and gas numbers are the same w nightly and stable

for now, we can:

  • nightly w seed
  • stable w/o seed

i am inclined towards the former (need to add back seed here after we reach consensus)

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