Skip to content

Conversation

@Kogaroshi
Copy link
Contributor

Reduce Spoke viaIR opti runs to get more codesize margin

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

♻️ Forge Gas Snapshots

Path Value
snapshots/NativeTokenGateway.Operations.json
borrowNative ↑0% (+66) 227,729
repayNative ↑0% (+6) 166,163
snapshots/SignatureGateway.Operations.json
borrowWithSig ↑0% (+54) 212,907
repayWithSig ↑0% (+6) 186,435
updateUserDynamicConfigWithSig ↑0% (+12) 63,098
updateUserRiskPremiumWithSig ↑0% (+12) 62,080
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 ↑0% (+12) 12,974
getUserAccountData: supplies: 1, borrows: 0 ↑0% (+24) 49,275
getUserAccountData: supplies: 2, borrows: 0 ↑0% (+36) 80,862
getUserAccountData: supplies: 2, borrows: 1 ↑0% (+48) 100,285
getUserAccountData: supplies: 2, borrows: 2 ↑0% (+60) 119,054
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first ↑0% (+36) 189,327
borrow: second action, same reserve ↑0% (+36) 169,276
liquidationCall (receiveShares): full ↑0% (+72) 295,050
liquidationCall (receiveShares): partial ↑0% (+72) 294,768
liquidationCall: full ↑0% (+72) 304,335
liquidationCall: partial ↑0% (+72) 304,053
permitReserve + repay (multicall) ↑0% (+6) 164,426
repay: full ↑0% (+6) 123,742
repay: partial ↑0% (+6) 128,712
updateUserDynamicConfig: 1 collateral ↑0% (+24) 74,572
updateUserDynamicConfig: 2 collaterals ↑0% (+36) 89,489
updateUserRiskPremium: 1 borrow ↑0% (+36) 94,817
updateUserRiskPremium: 2 borrows ↑0% (+36) 103,952
usingAsCollateral: 1 borrow, disable ↑0% (+36) 104,932
usingAsCollateral: 2 borrows, disable ↑0% (+48) 126,040
withdraw: 0 borrows, full ↑0% (+24) 127,683
withdraw: 0 borrows, partial ↑0% (+24) 132,369
withdraw: 1 borrow, partial ↑0% (+36) 158,763
withdraw: 2 borrows, partial ↑0% (+48) 172,881
snapshots/Spoke.Operations.json
borrow: first ↑0% (+66) 258,259
borrow: second action, same reserve ↑0% (+66) 201,208
liquidationCall (receiveShares): full ↑0% (+102) 327,087
liquidationCall (receiveShares): partial ↑0% (+102) 326,805
liquidationCall: full ↑0% (+102) 336,372
liquidationCall: partial ↑0% (+102) 336,090
permitReserve + repay (multicall) ↑0% (+4) 161,924
repay: full ↑0% (+6) 117,821
repay: partial ↑0% (+6) 137,191
updateUserDynamicConfig: 1 collateral ↑0% (+24) 74,572
updateUserDynamicConfig: 2 collaterals ↑0% (+36) 89,489
updateUserRiskPremium: 1 borrow ↑0% (+66) 148,170
updateUserRiskPremium: 2 borrows ↑0% (+84) 197,895
usingAsCollateral: 1 borrow, disable ↑0% (+66) 158,285
usingAsCollateral: 2 borrows, disable ↑0% (+96) 227,983
withdraw: 0 borrows, full ↑0% (+24) 127,683
withdraw: 0 borrows, partial ↑0% (+24) 132,369
withdraw: 1 borrow, partial ↑0% (+66) 209,614
withdraw: 2 borrows, partial ↑0% (+96) 255,357
🔕 Unchanged
Path Value
snapshots/Hub.Operations.json
add 86,624
add: with transfer 107,921
draw 104,105
eliminateDeficit: full 72,338
eliminateDeficit: partial 81,943
mintFeeShares 82,661
payFee 70,786
refreshPremium 70,367
remove: full 75,357
remove: partial 80,495
reportDeficit 111,875
restore: full 76,533
restore: full - with transfer 169,118
restore: partial 85,255
restore: partial - with transfer 143,235
transferShares 69,588
snapshots/NativeTokenGateway.Operations.json
supplyAsCollateralNative 160,016
supplyNative 135,699
withdrawNative: full 125,318
withdrawNative: partial 136,447
snapshots/SignatureGateway.Operations.json
setSelfAsUserPositionManagerWithSig 75,397
setUsingAsCollateralWithSig 85,349
supplyWithSig 151,931
withdrawWithSig 130,572
snapshots/Spoke.Operations.ZeroRiskPremium.json
permitReserve + supply (multicall) 146,699
permitReserve + supply + enable collateral (multicall) 161,112
setUserPositionManagersWithSig: disable 47,027
setUserPositionManagersWithSig: enable 68,939
supply + enable collateral (multicall) 141,292
supply: 0 borrows, collateral disabled 122,767
supply: 0 borrows, collateral enabled 105,738
supply: second action, same reserve 105,667
usingAsCollateral: 0 borrows, enable 59,578
usingAsCollateral: 1 borrow, enable 42,466
usingAsCollateral: 2 borrows, enable 42,478
withdraw: non collateral 105,615
snapshots/Spoke.Operations.json
permitReserve + supply (multicall) 146,699
permitReserve + supply + enable collateral (multicall) 161,112
setUserPositionManagersWithSig: disable 47,027
setUserPositionManagersWithSig: enable 68,939
supply + enable collateral (multicall) 141,292
supply: 0 borrows, collateral disabled 122,767
supply: 0 borrows, collateral enabled 105,738
supply: second action, same reserve 105,667
usingAsCollateral: 0 borrows, enable 59,578
usingAsCollateral: 1 borrow, enable 42,466
usingAsCollateral: 2 borrows, enable 42,478
withdraw: non collateral 105,615

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

🌈 Test Results
No files changed, compilation skipped

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

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_Gas_Tests
[PASS] test_borrow() (gas: 1321188)
[PASS] test_liquidation_full() (gas: 1902179)
[PASS] test_liquidation_partial() (gas: 1901896)
[PASS] test_liquidation_receiveShares_full() (gas: 1892953)
[PASS] test_liquidation_receiveShares_partial() (gas: 1892672)
[PASS] test_multicall_ops() (gas: 1402663)
[PASS] test_repay() (gas: 866818)
[PASS] test_setUserPositionManagersWithSig() (gas: 307172)
[PASS] test_supply() (gas: 538732)
[PASS] test_updateRiskPremium() (gas: 1310099)
[PASS] test_updateUserDynamicConfig() (gas: 583103)
[PASS] test_usingAsCollateral() (gas: 1465508)
[PASS] test_withdraw() (gas: 1940333)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 82.19ms (34.32ms CPU time)

Ran 13 tests for tests/gas/Spoke.Operations.gas.t.sol:SpokeOperations_ZeroRiskPremium_Gas_Tests
[PASS] test_borrow() (gas: 1087714)
[PASS] test_liquidation_full() (gas: 1767460)
[PASS] test_liquidation_partial() (gas: 1767177)
[PASS] test_liquidation_receiveShares_full() (gas: 1758234)
[PASS] test_liquidation_receiveShares_partial() (gas: 1757953)
[PASS] test_multicall_ops() (gas: 1320027)
[PASS] test_repay() (gas: 775982)
[PASS] test_setUserPositionManagersWithSig() (gas: 311626)
[PASS] test_supply() (gas: 541413)
[PASS] test_updateRiskPremium() (gas: 937948)
[PASS] test_updateUserDynamicConfig() (gas: 587557)
[PASS] test_usingAsCollateral() (gas: 1084038)
[PASS] test_withdraw() (gas: 1580832)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 62.13ms (24.94ms CPU time)

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

Ran 20 tests for tests/unit/AaveOracle.t.sol:AaveOracleTest
[PASS] test_DECIMALS() (gas: 8326)
[PASS] test_constructor() (gas: 18424)
[PASS] test_description() (gas: 12039)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 19884, ~: 20210)
[PASS] test_getReservePrice() (gas: 48776)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 48043)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10894)
[PASS] test_getReservePrices() (gas: 80715)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 50926)
[PASS] test_getReserveSource() (gas: 48946)
[PASS] test_setReserveSource() (gas: 45988)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 102767)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17224)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 17061)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 13021)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 4976402)
[PASS] test_setSpoke() (gas: 5004310)
[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.02s (1.16s CPU time)

Ran 17 tests for tests/unit/AccessManagerEnumerable.t.sol:AccessManagerEnumerableTest
[PASS] test_getRoleMembers_fuzz(uint256,uint256) (runs: 5000, μ: 1981537, ~: 1980367)
[PASS] test_getRoleTargetSelectors_fuzz(uint256,uint256) (runs: 5000, μ: 1528970, ~: 1527966)
[PASS] test_grantRole() (gas: 315886)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 5000, μ: 931430, ~: 919753)
[PASS] test_revokeRole() (gas: 323138)
[PASS] test_setRoleAdmin_fuzz_trackAdminRoles_multipleRoles_multipleAdmins(uint256) (runs: 5000, μ: 2166870, ~: 2270707)
[PASS] test_setRoleAdmin_fuzz_trackRolesAndTrackAdminRoles_multipleRoles(uint256) (runs: 5000, μ: 1965770, ~: 1899754)
[PASS] test_setRoleAdmin_trackAdminOfRoles() (gas: 606131)
[PASS] test_setRoleAdmin_trackAdminOfRoles_changeAdminRole() (gas: 577217)
[PASS] test_setRoleAdmin_trackAdminRoles() (gas: 602311)
[PASS] test_setRoleAdmin_trackRolesAndTrackAdminRoles() (gas: 378311)
[PASS] test_setRoleGuardian_trackRoles() (gas: 263932)
[PASS] test_setTargetFunctionRole() (gas: 414440)
[PASS] test_setTargetFunctionRole_multipleTargets() (gas: 1103911)
[PASS] test_setTargetFunctionRole_removeTarget() (gas: 894967)
[PASS] test_setTargetFunctionRole_skipAddToAdminRole() (gas: 30940)
[PASS] test_setTargetFunctionRole_withReplace() (gas: 549104)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 24.23s (38.46s 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, μ: 448021, ~: 442178)
[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 20.62s (20.62s CPU time)

Ran 15 tests for tests/unit/Spoke/Spoke.Supply.t.sol:SpokeSupplyTest
[PASS] test_fuzz_supply_effect_on_ex_rates(uint256,uint256) (runs: 5000, μ: 697157, ~: 698062)
[PASS] test_supply() (gas: 303081)
[PASS] test_supply_does_not_update_risk_premium() (gas: 1657546)
[PASS] test_supply_fuzz_amounts(uint256) (runs: 5000, μ: 427411, ~: 427081)
[PASS] test_supply_fuzz_index_increase_no_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 664418, ~: 664670)
[PASS] test_supply_fuzz_index_increase_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 760836, ~: 760966)
[PASS] test_supply_fuzz_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 62045, ~: 61766)
[PASS] test_supply_index_increase_no_premium() (gas: 863368)
[PASS] test_supply_index_increase_with_premium() (gas: 920822)
[PASS] test_supply_revertsWith_ERC20InsufficientAllowance() (gas: 39631)
[PASS] test_supply_revertsWith_InvalidSupplyAmount() (gas: 42387)
[PASS] test_supply_revertsWith_ReentrancyGuardReentrantCall() (gas: 278514)
[PASS] test_supply_revertsWith_ReserveFrozen() (gas: 64403)
[PASS] test_supply_revertsWith_ReserveNotListed() (gas: 22912)
[PASS] test_supply_revertsWith_ReservePaused() (gas: 64307)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 49.77s (92.24s CPU time)

Ran 1 test for tests/unit/Spoke/Spoke.UpdateUserDynamicConfig.t.sol:SpokeUpdateUserDynamicConfigTest
[PASS] test_updateUserDynamicConfig_revertsWith_ReentrancyGuardReentrantCall() (gas: 629762)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 22.83ms (870.24µs CPU time)

Ran 1 test for tests/unit/Spoke/Spoke.UpdateUserRiskPremium.t.sol:SpokeUpdateUserRiskPremiumTest
[PASS] test_updateUserRiskPremium_revertsWith_ReentrancyGuardReentrantCall() (gas: 628764)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 22.54ms (900.44µs CPU time)

Ran 8 tests for tests/unit/Spoke/Spoke.Upgradeable.t.sol:SpokeUpgradeableTest
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 5000, μ: 6670319, ~: 6670319)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 5000, μ: 6691649, ~: 6691642)
[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 5000, μ: 13331647, ~: 13331639)
[PASS] test_proxy_constructor_revertsWith_InvalidAddress() (gas: 4975199)
[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 6667661)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 5000, μ: 14515519, ~: 14515504)
[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 11639081)
[PASS] test_proxy_reinitialization_revertsWith_InvalidAddress() (gas: 11639596)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 22.65s (39.38s CPU time)

Ran 6 tests for tests/unit/Spoke/Spoke.UserAccountData.t.sol:SpokeUserAccountDataTest
[PASS] test_userAccountData_scenario1() (gas: 499399)
[PASS] test_userAccountData_scenario2() (gas: 560207)
[PASS] test_userAccountData_scenario3() (gas: 560456)
[PASS] test_userAccountData_scenario4() (gas: 835208)
[PASS] test_userAccountData_scenario5() (gas: 717642)
[PASS] test_userAccountData_scenario6() (gas: 688000)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 31.05ms (4.52ms 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, μ: 962178, ~: 932278)
[PASS] test_extSloads(uint256,bytes) (runs: 5000, μ: 1023034, ~: 985861)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 58.67s (58.67s CPU time)

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

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

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

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

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

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

Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 743226)
[PASS] test_repayWithSig() (gas: 978257)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 209608)
[PASS] test_setUsingAsCollateralWithSig() (gas: 289254)
[PASS] test_supplyWithSig() (gas: 460713)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 145213)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 143156)
[PASS] test_withdrawWithSig() (gas: 409379)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 45.01ms (7.88ms CPU time)

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

Ran 19 tests for tests/unit/Hub/Hub.Add.t.sol:HubAddTest
[PASS] test_add_AddCapReachedButNotExceeded_rounding() (gas: 664082)
[PASS] test_add_fuzz_AddCapReachedButNotExceeded(uint40) (runs: 5000, μ: 157538, ~: 157495)
[PASS] test_add_fuzz_multi_asset_multi_spoke(uint256,uint256,uint256) (runs: 5000, μ: 331164, ~: 331291)
[PASS] test_add_fuzz_revertsWith_AddCapExceeded(uint40) (runs: 5000, μ: 112154, ~: 112113)
[PASS] test_add_fuzz_revertsWith_AddCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 266043, ~: 265907)
[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 5000, μ: 223423, ~: 223634)
[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 5000, μ: 341724, ~: 341744)
[PASS] test_add_fuzz_single_spoke_multi_add(uint256,uint256) (runs: 5000, μ: 798890, ~: 798910)
[PASS] test_add_multi_add_minimal_shares() (gas: 320018)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 359810)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 64480)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 13619)
[PASS] test_add_revertsWith_InvalidShares() (gas: 222924)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 224170)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 99533)
[PASS] test_add_revertsWith_SpokePaused() (gas: 99540)
[PASS] test_add_single_asset() (gas: 329572)
Logs:
  Bound result 2
  Bound result 100000000000000000000

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

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueInterest.t.sol:SpokeAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 132488)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 628132, ~: 627966)
[PASS] test_accrueInterest_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 249514, ~: 249502)
[PASS] test_accrueInterest_TenPercentRp(uint256,uint40) (runs: 5000, μ: 576933, ~: 577292)
[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 535610, ~: 536077)
[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 3838533, ~: 3854515)
[PASS] test_accrueInterest_fuzz_RatesRPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),(uint96,uint96,uint96,uint96),uint40) (runs: 5000, μ: 3909267, ~: 3923602)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 191.05s (281.57s 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, μ: 536421, ~: 536567)
[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 787889, ~: 788059)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 117469822)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 644507377)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 536729)
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.15s (27.88s CPU time)

Ran 7 tests for tests/unit/Spoke/Spoke.AccrueLiquidityFee.t.sol:SpokeAccrueLiquidityFeeTest
[PASS] test_accrueLiquidityFee() (gas: 857946)
[PASS] test_accrueLiquidityFee_NoActionTaken() (gas: 121608)
[PASS] test_accrueLiquidityFee_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 244605, ~: 244552)
[PASS] test_accrueLiquidityFee_exact() (gas: 863725)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 934172, ~: 954992)
[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 542592)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 890113)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 19.52s (35.69s CPU time)

Ran 21 tests for tests/unit/Spoke/Spoke.Withdraw.HealthFactor.t.sol:SpokeWithdrawHealthFactorTest
[PASS] test_unsetCollateral_fuzz_revertsWith_HealthFactorBelowThreshold(uint256) (runs: 5000, μ: 757801, ~: 757520)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_interest_increase(uint256,uint256) (runs: 5000, μ: 650171, ~: 650627)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 5000, μ: 875843, ~: 876180)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai(uint256,uint256,uint256) (runs: 5000, μ: 1159298, ~: 1160036)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth(uint256,uint256,uint256) (runs: 5000, μ: 1159885, ~: 1160053)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256) (runs: 5000, μ: 928248, ~: 929261)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 5000, μ: 995889, ~: 995744)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop(uint256,uint256,uint256) (runs: 5000, μ: 1266578, ~: 1266782)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 1031661, ~: 1031822)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_price_drop(uint256,uint256) (runs: 5000, μ: 885767, ~: 885882)
[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_singleBorrow(uint256) (runs: 5000, μ: 616479, ~: 616250)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_interest_increase() (gas: 645357)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 871631)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai() (gas: 1153885)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth() (gas: 1153887)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 924283)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 990842)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop() (gas: 1260225)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1025558)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_price_drop() (gas: 880656)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_singleBorrow() (gas: 617537)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 157.36s (290.26s CPU time)

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

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

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

[PASS] test_reclaim_fullAmount() (gas: 634379)
[PASS] test_reclaim_fuzz(uint256,uint256,uint256) (runs: 5000, μ: 653560, ~: 652777)
[PASS] test_reclaim_multipleSweepsAndReclaims() (gas: 742924)
[PASS] test_reclaim_revertsWith_AssetNotListed() (gas: 13093)
[PASS] test_reclaim_revertsWith_InsufficientTransferred() (gas: 455770)
[PASS] test_reclaim_revertsWith_InsufficientTransferred_noSwept() (gas: 102165)
[PASS] test_reclaim_revertsWith_InvalidAmount_zero() (gas: 92347)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93230, ~: 93230)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController_init() (gas: 40386)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept_afterSweep() (gas: 619122)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 14.93s (14.91s 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: 5000, μ: 865816, ~: 865838)
[PASS] test_withdraw_fuzz_partial_full_with_interest(uint256,uint256,uint256,uint40) (runs: 5000, μ: 710212, ~: 710260)
[PASS] test_withdraw_round_trip_deposit_withdraw(uint256,uint256,address,uint256) (runs: 5000, μ: 412431, ~: 412400)
[PASS] test_withdraw_round_trip_withdraw_deposit(uint256,uint256,uint256,address,uint256) (runs: 5000, μ: 433154, ~: 432445)
[PASS] test_withdraw_underwater_reserve_not_collateral() (gas: 814144)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 55.93s (79.43s CPU time)

Ran 14 tests for tests/unit/Spoke/Spoke.Borrow.Validation.t.sol:SpokeBorrowValidationTest
[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded(uint256,uint40) (runs: 5000, μ: 110477, ~: 110489)
[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint256) (runs: 5000, μ: 681427, ~: 681653)
[PASS] test_borrow_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 295210, ~: 294965)
[PASS] test_borrow_fuzz_revertsWith_InvalidAmount(uint256) (runs: 5000, μ: 34363, ~: 34420)
[PASS] test_borrow_fuzz_revertsWith_ReserveFrozen(uint256,uint256) (runs: 5000, μ: 71884, ~: 71657)
[PASS] test_borrow_fuzz_revertsWith_ReserveNotBorrowable(uint256,uint256) (runs: 5000, μ: 71992, ~: 71766)
[PASS] test_borrow_fuzz_revertsWith_ReserveNotListed(uint256,uint256) (runs: 5000, μ: 27413, ~: 27138)
[PASS] test_borrow_fuzz_revertsWith_ReservePaused(uint256,uint256) (runs: 5000, μ: 71800, ~: 71573)
[PASS] test_borrow_revertsWith_InsufficientLiquidity() (gas: 294832)
Logs:
  Bound result 10000000000000000000

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

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

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

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

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

Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 14.22s (14.20s 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: 5000, μ: 428781, ~: 428998)
[PASS] test_withdraw_fuzz_revertsWith_InsufficientSupply_zero_supplied(uint256) (runs: 5000, μ: 54888, ~: 54612)
[PASS] test_withdraw_revertsWith_InsufficientLiquidity_with_debt() (gas: 425452)
[PASS] test_withdraw_revertsWith_InvalidAmount_zero_supplied() (gas: 51232)
[PASS] test_withdraw_revertsWith_ReserveNotListed() (gas: 22408)
[PASS] test_withdraw_revertsWith_ReservePaused() (gas: 63870)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 5.62s (6.32s 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, μ: 1203795, ~: 1208388)
[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, μ: 2003186, ~: 1974580)
[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, μ: 5902370, ~: 5902644)
[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, μ: 4184182, ~: 4184470)
[PASS] test_repay_partial_then_max() (gas: 681300)
[PASS] test_repay_round_trip_borrow_repay(uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 858841, ~: 861716)
[PASS] test_repay_round_trip_repay_borrow(uint256,uint256,uint256,uint40,address,uint256) (runs: 5000, μ: 939496, ~: 948492)
[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, μ: 1448419, ~: 1477184)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 299.18s (299.16s CPU time)

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

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

Ran 12 tests for tests/unit/Hub/Hub.RefreshPremium.t.sol:HubRefreshPremiumTest
[PASS] test_refreshPremium_emitsEvent() (gas: 254285)
[PASS] test_refreshPremium_fuzz_positiveDeltas(uint256,int256,int256) (runs: 5000, μ: 487140, ~: 492001)
[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 5000, μ: 464534, ~: 473418)
[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 884914)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 5000, μ: 456919, ~: 456940)
[PASS] test_refreshPremium_negativeDeltas_withAccrual(uint256) (runs: 5000, μ: 525929, ~: 526155)
[PASS] test_refreshPremium_pausedSpokesAllowed() (gas: 121075)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 840672)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 862767)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 58757)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 907020)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 705121)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 20.25s (20.23s 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, μ: 683775, ~: 683601)
[PASS] test_repay_less_than_share() (gas: 577992)
[PASS] test_repay_only_base_debt_interest() (gas: 754899)
[PASS] test_repay_only_base_debt_no_premium() (gas: 639300)
[PASS] test_repay_supply_ex_rate_decr() (gas: 1464980)
[PASS] test_repay_supply_ex_rate_decr_skip_time() (gas: 1461693)
[PASS] test_repay_zero_shares_nonzero_premium_debt() (gas: 758667)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 14.85s (14.85s CPU time)

Ran 4 tests for tests/unit/Spoke/Spoke.Borrow.t.sol:SpokeBorrowTest
[PASS] test_borrow() (gas: 1118413)
[PASS] test_borrow_fuzz_amounts(uint256,uint256) (runs: 5000, μ: 1127455, ~: 1127523)
[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubDraw() (gas: 400144)
[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 525518)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 28.03s (28.01s CPU time)

Ran 24 tests for tests/unit/Spoke/Spoke.Config.t.sol:SpokeConfigTest
[PASS] test_addReserve() (gas: 418815)
[PASS] test_addReserve_fuzz_revertsWith_AssetNotListed() (gas: 285786)
[PASS] test_addReserve_revertsWith_InvalidAddress_hub() (gas: 5020432)
[PASS] test_addReserve_revertsWith_InvalidAddress_oracle() (gas: 5078619)
[PASS] test_addReserve_revertsWith_InvalidAssetId() (gas: 32930)
[PASS] test_addReserve_revertsWith_ReserveExists() (gas: 397643)
[PASS] test_spoke_deploy() (gas: 4972846)
[PASS] test_spoke_deploy_reverts_on_InvalidConstructorInput() (gas: 775170)
[PASS] test_spoke_deploy_reverts_on_InvalidOracleDecimals() (gas: 777414)
[PASS] test_updateLiquidationConfig_fuzz_liqBonusConfig((uint128,uint64,uint16)) (runs: 5000, μ: 52970, ~: 53041)
[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_healthFactorForMaxBonus((uint128,uint64,uint16)) (runs: 5000, μ: 36889, ~: 37137)
[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_liquidationBonusFactor((uint128,uint64,uint16)) (runs: 5000, μ: 36667, ~: 36438)
[PASS] test_updateLiquidationConfig_fuzz_targetHealthFactor(uint128) (runs: 5000, μ: 46953, ~: 47249)
[PASS] test_updateLiquidationConfig_liqBonusConfig() (gas: 52061)
Logs:
  Bound result 900000000000000000
  Bound result 1000
  Bound result 1000000000000000000

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

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

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

[PASS] test_updateReserveConfig() (gas: 55948)
[PASS] test_updateReserveConfig_fuzz((uint24,bool,bool,bool,bool,bool)) (runs: 5000, μ: 57024, ~: 56860)
[PASS] test_updateReserveConfig_revertsWith_InvalidCollateralRisk() (gas: 40341)
[PASS] test_updateReserveConfig_revertsWith_ReserveNotListed() (gas: 36851)
[PASS] test_updateReservePriceSource() (gas: 261449)
[PASS] test_updateReservePriceSource_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 31029, ~: 31031)
[PASS] test_updateReservePriceSource_revertsWith_ReserveNotListed() (gas: 34831)
Suite result: ok. 24 passed; 0 failed; 0 skipped; finished in 3.60s (3.57s CPU time)

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

[PASS] test_remove_all_with_interest() (gas: 366360)
[PASS] test_remove_fuzz(uint256,uint256) (runs: 5000, μ: 206366, ~: 206312)
[PASS] test_remove_fuzz_all_liquidity_with_interest(uint256,uint256) (runs: 5000, μ: 417162, ~: 417414)
[PASS] test_remove_fuzz_multi_spoke(uint256,uint256) (runs: 5000, μ: 287105, ~: 287219)
[PASS] test_remove_fuzz_multi_spoke_with_interest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 419771, ~: 420326)
[PASS] test_remove_revertsWith_InsufficientLiquidity() (gas: 157978)
[PASS] test_remove_revertsWith_InsufficientLiquidity_exceeding_added_amount() (gas: 147067)
[PASS] test_remove_revertsWith_InsufficientLiquidity_zero_added() (gas: 21306)
[PASS] test_remove_revertsWith_InvalidAddress() (gas: 16413)
[PASS] test_remove_revertsWith_InvalidAmount() (gas: 18525)
[PASS] test_remove_revertsWith_SpokeNotActive() (gas: 61694)
[PASS] test_remove_revertsWith_SpokePaused() (gas: 61676)
[PASS] test_remove_revertsWith_underflow_exceeding_added_amount() (gas: 184546)
[PASS] test_remove_revertsWtih_underflow_one_extra_wei() (gas: 362276)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 30.62s (30.59s CPU time)

Ran 10 tests for tests/unit/Spoke/Spoke.DynamicConfig.Triggers.t.sol:SpokeDynamicConfigTriggersTest
[PASS] test_borrow_triggers_dynamicConfigUpdate() (gas: 1333803)
[PASS] test_liquidate_does_not_trigger_dynamicConfigUpdate() (gas: 1608301)
[PASS] test_repay_does_not_trigger_dynamicConfigUpdate() (gas: 896794)
[PASS] test_supply_does_not_trigger_dynamicConfigUpdate() (gas: 1111483)
[PASS] test_updateUserDynamicConfig_doesHFCheck() (gas: 785453)
[PASS] test_updateUserDynamicConfig_reverts_when_not_authorized(address) (runs: 5000, μ: 1254814, ~: 1254814)
[PASS] test_updateUserDynamicConfig_triggers_dynamicConfigUpdate() (gas: 716654)
[PASS] test_updateUserDynamicConfig_updatesRP() (gas: 1284222)
[PASS] test_usingAsCollateral_triggers_dynamicConfigUpdate() (gas: 1360234)
[PASS] test_withdraw_triggers_dynamicConfigUpdate() (gas: 1362998)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 28.15s (28.13s CPU time)

Ran 7 tests for tests/unit/Hub/Hub.ReportDeficit.t.sol:HubReportDeficitTest
[PASS] test_reportDeficit_fuzz_revertsWith_SurplusDrawnDeficitReported(uint256) (runs: 5000, μ: 217829, ~: 217560)
[PASS] test_reportDeficit_fuzz_revertsWith_SurplusPremiumRayDeficitReported(uint256) (runs: 5000, μ: 218808, ~: 218518)
[PASS] test_reportDeficit_fuzz_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 670008, ~: 670829)
[PASS] test_reportDeficit_paused() (gas: 264951)
[PASS] test_reportDeficit_revertsWith_InvalidAmount() (gas: 24838)
[PASS] test_reportDeficit_revertsWith_SpokeNotActive(address) (runs: 5000, μ: 33829, ~: 33829)
[PASS] test_reportDeficit_with_premium() (gas: 669408)
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.79s (17.77s CPU time)

Ran 14 tests for tests/unit/Spoke/Spoke.Withdraw.t.sol:SpokeWithdrawTest
[PASS] test_fuzz_withdraw_effect_on_ex_rates(uint256,uint256) (runs: 5000, μ: 725094, ~: 726941)
[PASS] test_withdraw_all_liquidity() (gas: 237503)
[PASS] test_withdraw_all_liquidity_with_interest_no_premium() (gas: 793716)
[PASS] test_withdraw_all_liquidity_with_interest_with_premium() (gas: 800349)
[PASS] test_withdraw_fuzz_all_elapsed_with_interest(uint256,uint256,uint40) (runs: 5000, μ: 658404, ~: 658299)
[PASS] test_withdraw_fuzz_all_greater_than_supplied(uint256) (runs: 5000, μ: 240516, ~: 240321)
[PASS] test_withdraw_fuzz_all_liquidity_with_interest_no_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 853119, ~: 853569)
[PASS] test_withdraw_fuzz_all_liquidity_with_interest_with_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 864299, ~: 864430)
[PASS] test_withdraw_fuzz_all_with_interest(uint256,uint256) (runs: 5000, μ: 669696, ~: 669680)
[PASS] test_withdraw_fuzz_suppliedAmount(uint256) (runs: 5000, μ: 240430, ~: 240232)
[PASS] test_withdraw_max_greater_than_supplied() (gas: 221061)
[PASS] test_withdraw_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 652335)
[PASS] test_withdraw_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 401927)
[PASS] test_withdraw_same_block() (gas: 242739)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 75.00s (125.62s CPU time)

Ran 49 tests for tests/unit/SpokeConfigurator.t.sol:SpokeConfiguratorTest
[PASS] test_addCollateralFactor() (gas: 113423)
[PASS] test_addCollateralFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 17832)
[PASS] test_addDynamicReserveConfig() (gas: 95430)
[PASS] test_addDynamicReserveConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 18103)
[PASS] test_addLiquidationBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 17863)
[PASS] test_addLiquidationFee() (gas: 113401)
[PASS] test_addLiquidationFee_revertsWith_OwnableUnauthorizedAccount() (gas: 17778)
[PASS] test_addMaxLiquidationBonus() (gas: 113460)
[PASS] test_addReserve() (gas: 441981)
[PASS] test_addReserve_revertsWith_MaximumReservesReached() (gas: 273207)
[PASS] test_addReserve_revertsWith_OwnableUnauthorizedAccount() (gas: 18874)
[PASS] test_freezeAllReserves() (gas: 200464)
[PASS] test_freezeAllReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15611)
[PASS] test_pauseAllReserves() (gas: 200366)
[PASS] test_pauseAllReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15568)
[PASS] test_updateBorrowable() (gas: 93757)
[PASS] test_updateBorrowable_revertsWith_OwnableUnauthorizedAccount() (gas: 17770)
[PASS] test_updateCollateralFactor() (gas: 69695)
[PASS] test_updateCollateralFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 17910)
[PASS] test_updateCollateralRisk() (gas: 69549)
[PASS] test_updateCollateralRisk_revertsWith_OwnableUnauthorizedAccount() (gas: 17810)
[PASS] test_updateDynamicReserveConfig() (gas: 1478499)
[PASS] test_updateDynamicReserveConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 18170)
[PASS] test_updateFrozen() (gas: 96700)
[PASS] test_updateFrozen_revertsWith_OwnableUnauthorizedAccount() (gas: 17858)
[PASS] test_updateHealthFactorForMaxBonus() (gas: 59303)
[PASS] test_updateHealthFactorForMaxBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 15645)
[PASS] test_updateLiquidatable() (gas: 93848)
[PASS] test_updateLiquidatable_revertsWith_OwnableUnauthorizedAccount() (gas: 17836)
[PASS] test_updateLiquidationBonusFactor() (gas: 62164)
[PASS] test_updateLiquidationBonusFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 15601)
[PASS] test_updateLiquidationConfig() (gas: 56887)
[PASS] test_updateLiquidationConfig_revertsWith_OwnableUnauthorizedAccount() (gas: 15904)
[PASS] test_updateLiquidationFee() (gas: 69736)
[PASS] test_updateLiquidationFee_revertsWith_OwnableUnauthorizedAccount() (gas: 17890)
[PASS] test_updateLiquidationTargetHealthFactor() (gas: 62091)
[PASS] test_updateLiquidationTargetHealthFactor_revertsWith_OwnableUnauthorizedAccount() (gas: 15669)
[PASS] test_updateMaxLiquidationBonus() (gas: 69713)
[PASS] test_updateMaxLiquidationBonus_revertsWith_OwnableUnauthorizedAccount() (gas: 17847)
[PASS] test_updateMaxReserves() (gas: 42285)
[PASS] test_updateMaxReserves_revertsWith_OwnableUnauthorizedAccount() (gas: 15593)
[PASS] test_updatePaused() (gas: 96571)
[PASS] test_updatePaused_revertsWith_OwnableUnauthorizedAccount() (gas: 17835)
[PASS] test_updatePositionManager() (gas: 62518)
[PASS] test_updatePositionManager_revertsWith_OwnableUnauthorizedAccount() (gas: 15742)
[PASS] test_updateReceiveSharesEnabled() (gas: 93767)
[PASS] test_updateReceiveSharesEnabled_revertsWith_OwnableUnauthorizedAccount() (gas: 17812)
[PASS] test_updateReservePriceSource() (gas: 271412)
[PASS] test_updateReservePriceSource_revertsWith_OwnableUnauthorizedAccount() (gas: 17812)
Suite result: ok. 49 passed; 0 failed; 0 skipped; finished in 40.68ms (17.99ms CPU time)

Ran 21 tests for tests/unit/Spoke/Spoke.DynamicConfig.t.sol:SpokeDynamicConfigTest
[PASS] test_addDynamicReserveConfig() (gas: 79077)
[PASS] test_addDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_incompatible(uint16,uint32) (runs: 5000, μ: 46257, ~: 46423)
[PASS] test_addDynamicReserveConfig_once() (gas: 506664)
[PASS] test_addDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 43299, ~: 43299)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 57242)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 40411)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 40928)
[PASS] test_addDynamicReserveConfig_revertsWith_MaximumDynamicConfigKeyReached() (gas: 43453)
[PASS] test_addDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28291)
[PASS] test_fuzz_addDynamicReserveConfig_spaced_dup_updates(bytes32) (runs: 5000, μ: 406113, ~: 377838)
[PASS] test_fuzz_addDynamicReserveConfig_trailing_order(bytes32) (runs: 5000, μ: 390562, ~: 422969)
[PASS] test_offboardReserve_existing_borrows_remain_unaffected() (gas: 1124767)
[PASS] test_updateDynamicReserveConfig() (gas: 384732)
[PASS] test_updateDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus(uint16,uint32) (runs: 5000, μ: 56714, ~: 56886)
[PASS] test_updateDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 43323, ~: 43323)
[PASS] test_updateDynamicReserveConfig_revertsWith_ConfigKeyUninitialized() (gas: 48922)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactor() (gas: 49911)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 50641)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 50807)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 51366)
[PASS] test_updateDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28643)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 21.26s (21.24s CPU time)

Ran 5 tests for tests/gas/Spoke.Getters.gas.t.sol:SpokeGetters_Gas_Tests
[PASS] test_getUserAccountData() (gas: 23554)
[PASS] test_getUserAccountData_oneSupplies() (gas: 283328)
[PASS] test_getUserAccountData_twoSupplies() (gas: 517958)
[PASS] test_getUserAccountData_twoSupplies_oneBorrows() (gas: 1038292)
[PASS] test_getUserAccountData_twoSupplies_twoBorrows() (gas: 1595999)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 40.48ms (4.49ms CPU time)

Ran 6 tests for tests/unit/Spoke/Spoke.Getters.t.sol:SpokeGettersTest
[PASS] test_getLiquidationBonus_configured() (gas: 95293)
Logs:
  Bound result 2
  Bound result 1000000000000000000
  Bound result 4000
  Bound result 900000000000000000

[PASS] test_getLiquidationBonus_fuzz_configured(uint256,uint256,uint16,uint64) (runs: 5000, μ: 94153, ~: 94467)
[PASS] test_getLiquidationBonus_fuzz_notConfigured(uint256,uint256) (runs: 5000, μ: 72075, ~: 72287)
[PASS] test_getLiquidationBonus_notConfigured() (gas: 73275)
Logs:
  Bound result 2
  Bound result 1000000000000000000

[PASS] test_premiumRayGetters() (gas: 1538257)
[PASS] test_protocol_getters() (gas: 287345)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.11s (2.09s CPU time)

Ran 3 tests for tests/unit/Hub/Hub.Rescue.t.sol:HubRescueTest
[PASS] test_cannot_rescue_liquidity_fee_reverts_with_InsufficientTransferred() (gas: 273385)
[PASS] test_rescue_fuzz_with_interest(uint256,uint256) (runs: 5000, μ: 512691, ~: 512654)
[PASS] test_rescue_scenario_fuzz(uint256) (runs: 5000, μ: 452314, ~: 452108)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 17.79s (17.77s 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, μ: 1039331, ~: 1039439)
[PASS] test_borrow_fuzz_rounding_effect_inflated_ex_rate(uint256,uint256,uint256) (runs: 5000, μ: 1410103, ~: 1410174)
[PASS] test_borrow_fuzz_rounding_effect_shares(uint256,uint256) (runs: 5000, μ: 1082091, ~: 1081838)
[PASS] test_borrow_rounding_effect_multiple_actions() (gas: 1141062)
[PASS] test_borrow_rounding_effect_shares() (gas: 1081100)
Logs:
  Bound result 5000000000000000000
  Bound result 94608000

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

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

[PASS] test_restore_full_amount_with_interest_and_premium() (gas: 669421)
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, μ: 361761, ~: 361854)
[PASS] test_restore_fuzz_full_amount_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 659987, ~: 671362)
[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 243285, ~: 244524)
[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 634421, ~: 634612)
[PASS] test_restore_one_share_delta_increase_revertsWith_InvalidPremiumChange() (gas: 211496)
[PASS] test_restore_partial_drawn() (gas: 321738)
[PASS] test_restore_partial_same_block() (gas: 321914)
[PASS] test_restore_premiumDeltas_twoWeiIncrease_realizedDelta() (gas: 232199)
[PASS] test_restore_revertsWith_InsufficientTransferred() (gas: 251972)
[PASS] test_restore_revertsWith_InvalidAmount_zero() (gas: 55124)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumIncrease() (gas: 218461)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumSharesIncrease() (gas: 218460)
[PASS] test_restore_revertsWith_SpokeNotActive_whenPaused() (gas: 169067)
[PASS] test_restore_revertsWith_SpokePaused() (gas: 96117)
[PASS] test_restore_revertsWith_SurplusDrawnRestored() (gas: 360841)
[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest() (gas: 243127)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 15768000

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

[PASS] test_restore_revertsWith_SurplusPremiumRayRestored() (gas: 526536)
[PASS] test_restore_revertsWith_underflow_offsetIncrease() (gas: 227339)
[PASS] test_restore_tooMuchDrawn_revertsWith_SurplusDrawnRestored() (gas: 216814)
[PASS] test_restore_when_asset_frozen() (gas: 425587)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 19.05s (19.03s CPU time)

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

Ran 8 tests for tests/unit/UnitPriceFeed.t.sol:UnitPriceFeedTest
[PASS] testDECIMALS() (gas: 8305)
[PASS] test_constructor_revertsWith_Uint8Overflow() (gas: 4674)
[PASS] test_description() (gas: 11865)
[PASS] test_fuzz_latestRoundData(uint80) (runs: 5000, μ: 11105, ~: 11105)
[PASS] test_fuzz_latestRoundData_DifferentDecimals(uint8) (runs: 5000, μ: 14431, ~: 14630)
[PASS] test_getRoundData() (gas: 12402)
[PASS] test_getRoundData_futureRound() (gas: 12325)
[PASS] test_version() (gas: 8261)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 880.53ms (870.76ms CPU time)

Ran 17 tests for tests/unit/Spoke/TreasurySpoke.t.sol:TreasurySpokeTest
[PASS] test_borrow_revertsWith_UnsupportedAction() (gas: 9654)
[PASS] test_deploy_reverts_on_invalid_params() (gas: 4182)
[PASS] test_getters() (gas: 742501)
[PASS] test_initial_state() (gas: 167242)
[PASS] test_liquidationCall_revertsWith_UnsupportedAction() (gas: 10474)
[PASS] test_repay_revertsWith_UnsupportedAction() (gas: 9656)
[PASS] test_supply(uint256) (runs: 5000, μ: 124663, ~: 124458)
[PASS] test_supply_revertsWith_Unauthorized(address) (runs: 5000, μ: 16113, ~: 16113)
[PASS] test_transfer_fuzz(address,uint256,uint256) (runs: 5000, μ: 100182, ~: 101179)
[PASS] test_transfer_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 604008, ~: 604008)
[PASS] test_transfer_revertsWith_Unauthorized(address) (runs: 5000, μ: 14826, ~: 14826)
[PASS] test_withdraw_fuzz_amount_feesOnly(uint256) (runs: 5000, μ: 787994, ~: 787720)
[PASS] test_withdraw_fuzz_amount_interestAndFees(uint256) (runs: 5000, μ: 775137, ~: 774975)
[PASS] test_withdraw_fuzz_amount_interestOnly(uint256) (runs: 5000, μ: 807902, ~: 807623)
[PASS] test_withdraw_fuzz_maxLiquidityFee(uint256,uint256,uint256) (runs: 5000, μ: 848565, ~: 848648)
[PASS] test_withdraw_maxLiquidityFee() (gas: 849443)
Logs:
  Bound result 1000000000000000000000
  Bound result 29376000
  Bound result 2

[PASS] test_withdraw_revertsWith_Unauthorized(address) (runs: 5000, μ: 16476, ~: 16476)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 54.17s (106.39s CPU time)

Ran 4 tests for tests/unit/Hub/Hub.Skim.t.sol:HubSkimTest
[PASS] test_skimAdd_fuzz_donationAfterAdd(uint256,uint256,uint256) (runs: 5000, μ: 227256, ~: 227224)
[PASS] test_skimAdd_fuzz_donationBeforeAdd(uint256,uint256,uint256) (runs: 5000, μ: 227304, ~: 227376)
[PASS] test_skimAdd_fuzz_wrongSpokeTransfer(uint256,uint256,uint256) (runs: 5000, μ: 216390, ~: 216340)
[PASS] test_skimRestore_fuzz_liquidityDonation(uint256,uint256,uint256) (runs: 5000, μ: 271935, ~: 273268)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 28.59s (28.57s CPU time)

Ran 15 tests for tests/unit/WadRayMath.t.sol:WadRayMathDifferentialTests
[PASS] test_bpsToRay_fuzz(uint256) (runs: 5000, μ: 11800, ~: 12392)
[PASS] test_bpsToWad_fuzz(uint256) (runs: 5000, μ: 12043, ~: 12488)
[PASS] test_constants() (gas: 11505)
[PASS] test_fromRayUp_fuzz(uint256) (runs: 5000, μ: 11110, ~: 11138)
[PASS] test_fromWadDown_fuzz(uint256) (runs: 5000, μ: 9378, ~: 9378)
[PASS] test_fuzz_rayDiv(uint256,uint256) (runs: 5000, μ: 12480, ~: 12851)
[PASS] test_fuzz_rayMul(uint256,uint256) (runs: 5000, μ: 11624, ~: 12154)
[PASS] test_fuzz_wadDiv(uint256,uint256) (runs: 5000, μ: 12657, ~: 12983)
[PASS] test_fuzz_wadMul(uint256,uint256) (runs: 5000, μ: 11617, ~: 12177)
[PASS] test_rayDiv() (gas: 39637)
[PASS] test_rayMul() (gas: 28583)
[PASS] test_toRay_fuzz(uint256) (runs: 5000, μ: 11696, ~: 12251)
[PASS] test_toWad_fuzz(uint256) (runs: 5000, μ: 11947, ~: 12350)
[PASS] test_wadDiv() (gas: 40033)
[PASS] test_wadMul() (gas: 28400)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 1.93s (1.93s CPU time)

Ran 10 tests for tests/unit/Hub/Hub.SpokeConfig.t.sol:HubSpokeConfigTest
[PASS] test_add_active_paused_scenarios() (gas: 302089)
[PASS] test_draw_active_paused_scenarios() (gas: 303048)
[PASS] test_eliminateDeficit_active_paused_scenarios() (gas: 835831)
[PASS] test_mintFeeShares_active_paused_scenarios() (gas: 835071)
[PASS] test_payFeeShares_active_paused_scenarios() (gas: 367249)
[PASS] test_refreshPremium_active_paused_scenarios() (gas: 265802)
[PASS] test_remove_active_paused_scenarios() (gas: 317589)
[PASS] test_reportDeficit_active_paused_scenarios() (gas: 443613)
[PASS] test_restore_active_paused_scenarios() (gas: 353725)
[PASS] test_transferShares_fuzz_active_paused_scenarios(bool,bool,bool,bool) (runs: 5000, μ: 212639, ~: 212584)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 3.99s (3.97s CPU time)

Ran 12 tests for tests/unit/libraries/UserPositionDebt.t.sol:UserPositionDebtTest
[PASS] test_applyPremiumDelta() (gas: 26057)
[PASS] test_calculatePremiumDelta() (gas: 17570)
[PASS] test_calculatePremiumRay() (gas: 19396)
[PASS] test_calculateRestoreAmount() (gas: 24248)
[PASS] test_fuzz_applyPremiumDelta((int256,int256,uint256)) (runs: 5000, μ: 34038, ~: 34140)
[PASS] test_fuzz_calculatePremiumDelta((uint256,uint256,int256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 48929, ~: 49089)
[PASS] test_fuzz_calculatePremiumRay(uint256,int256,uint256) (runs: 5000, μ: 33246, ~: 33389)
[PASS] test_fuzz_calculateRestoreAmount(uint256,uint256,int256,uint256,uint256) (runs: 5000, μ: 42403, ~: 42395)
[PASS] test_fuzz_getUserDebt_DrawnIndex(uint256,uint256,int256,uint256) (runs: 5000, μ: 39490, ~: 39482)
[PASS] test_fuzz_getUserDebt_HubAndAssetId(uint256,uint256,int256,uint256) (runs: 5000, μ: 45419, ~: 45420)
[PASS] test_getUserDebt_DrawnIndex() (gas: 23463)
[PASS] test_getUserDebt_HubAndAssetId() (gas: 30124)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 6.13s (8.81s CPU time)

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

[PASS] test_sweep_does_not_impact_utilization(uint256,uint256) (runs: 5000, μ: 629231, ~: 630119)
[PASS] test_sweep_fuzz(uint256,uint256) (runs: 5000, μ: 482901, ~: 482900)
[PASS] test_sweep_revertsWith_AssetNotListed() (gas: 12581)
[PASS] test_sweep_revertsWith_InsufficientLiquidity() (gas: 219335)
[PASS] test_sweep_revertsWith_InvalidAmount() (gas: 103393)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93572, ~: 93572)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController_init() (gas: 39925)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 18.45s (18.42s CPU time)

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

[PASS] test_transferShares_fuzz(uint256,uint256) (runs: 5000, μ: 194023, ~: 194229)
[PASS] test_transferShares_fuzz_revertsWith_underflow_spoke_added_shares_exceeded(uint256) (runs: 5000, μ: 150963, ~: 150690)
[PASS] test_transferShares_revertsWith_AddCapExceeded() (gas: 194845)
[PASS] test_transferShares_revertsWith_SpokeNotActive() (gas: 177490)
[PASS] test_transferShares_revertsWith_SpokePaused() (gas: 179662)
[PASS] test_transferShares_zeroShares_revertsWith_InvalidShares() (gas: 22559)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 7.80s (7.78s CPU time)

Ran 4 tests for tests/unit/Spoke/Liquidations/Spoke.LiquidationCall.Dust.t.sol:SpokeLiquidationCallDustTest
[PASS] test_collateralDust_min_debtToTarget() (gas: 9386833)
[PASS] test_debtToCover_exceeds_collateralValue() (gas: 9379302)
[PASS] test_dustColl_allowed() (gas: 9245005)
[PASS] test_dustDebt_allowed() (gas: 9374315)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 57.01ms (20.24ms CPU time)

Ran 6 tests for tests/unit/Hub/HubAccrueInterest.t.sol:HubAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 42540)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 389291, ~: 389195)
[PASS] test_accrueInterest_NoInterest_OnlyAdd(uint40) (runs: 5000, μ: 206055, ~: 205992)
[PASS] test_accrueInterest_fuzz_BorrowAmountAndElapsed(uint256,uint40) (runs: 5000, μ: 270276, ~: 270173)
[PASS] test_accrueInterest_fuzz_BorrowAmountRateAndElapsed(uint256,uint256,uint40) (runs: 5000, μ: 390231, ~: 390003)
[PASS] test_accrueInterest_fuzz_BorrowAndWait(uint40) (runs: 5000, μ: 269002, ~: 268901)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.88s (24.86s CPU time)

Ran 35 tests for tests/unit/Hub/Hub.Config.t.sol:HubConfigTest
[PASS] test_addAsset_fuzz(address,uint8,address) (runs: 5000, μ: 412292, ~: 412332)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_feeReceiver(address,uint8,address) (runs: 5000, μ: 45232, ~: 44933)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 5000, μ: 45241, ~: 44942)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 5000, μ: 36628, ~: 36628)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 5000, μ: 45843, ~: 45893)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 5000, μ: 45928, ~: 46215)
[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 5000, μ: 83315920720, ~: 34870)
[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 981867)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 978975)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 46470)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 126555, ~: 126608)
[PASS] test_addSpoke_fuzz_revertsWith_AssetNotListed(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 35212, ~: 35199)
[PASS] test_addSpoke_fuzz_revertsWith_InvalidAddress_spoke(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 33880, ~: 33931)
[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 39667)
[PASS] test_hub_deploy_reverts_on_InvalidConstructorInput() (gas: 776973)
[PASS] test_hub_max_riskPremium() (gas: 8588)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 718030)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 617825)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 70382)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 5000, μ: 268226, ~: 268578)
[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 5000, μ: 819628, ~: 819493)
[PASS] test_updateAssetConfig_fuzz_LiquidityFee(uint256,uint16) (runs: 5000, μ: 722166, ~: 722029)
[PASS] test_updateAssetConfig_fuzz_NewFeeReceiver(uint256) (runs: 5000, μ: 821185, ~: 821219)
[PASS] test_updateAssetConfig_fuzz_NewInterestRateStrategy(uint256) (runs: 5000, μ: 696258, ~: 696287)
[PASS] test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed(uint256) (runs: 5000, μ: 872150, ~: 872180)
[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 5000, μ: 695378, ~: 695427)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidInterestRateStrategy(uint256) (runs: 5000, μ: 60847, ~: 60898)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidLiquidityFee(uint256,(address,uint16,address,address)) (runs: 5000, μ: 40111, ~: 40018)
[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 484410)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 198408, ~: 198871)
[PASS] test_updateAssetConfig_fuzz_revertsWith_setInterestRateDataReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 95552, ~: 96007)
[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 996266)
Logs:
  Bound result 0
  Bound result 1000
  Bound result 5
  Bound result 500
  Bound result 3
  Bound result 1000
  Bound result 1
  Bound result 500

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

Ran 16 tests for tests/unit/Hub/Hub.Draw.t.sol:HubDrawTest
[PASS] test_draw_DifferentSpokes() (gas: 354768)
[PASS] test_draw_fuzz_IncreasedBorrowRate(uint256,uint256) (runs: 5000, μ: 695325, ~: 695462)
[PASS] test_draw_fuzz_amounts_same_block(uint256,uint256) (runs: 5000, μ: 287784, ~: 287798)
[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded(uint40) (runs: 5000, μ: 82140, ~: 82096)
[PASS] test_draw_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint40,uint256,uint256) (runs: 5000, μ: 286473, ~: 286724)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 34706, ~: 34486)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_draw(uint256) (runs: 5000, μ: 172360, ~: 172081)
[PASS] test_draw_fuzz_revertsWith_InsufficientLiquidity_due_to_remove(uint256) (runs: 5000, μ: 134004, ~: 133805)
[PASS] test_draw_fuzz_revertsWith_InvalidAddress(uint256) (runs: 5000, μ: 16102, ~: 16102)
[PASS] test_draw_revertsWith_DrawCapExceeded_due_to_deficit() (gas: 269919)
[PASS] test_draw_revertsWith_InsufficientLiquidity() (gas: 28241)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_draw() (gas: 168692)
[PASS] test_draw_revertsWith_InsufficientLiquidity_due_to_remove() (gas: 131141)
[PASS] test_draw_revertsWith_InvalidAmount() (gas: 16233)
[PASS] test_draw_revertsWith_SpokeNotActive() (gas: 61236)
[PASS] test_draw_revertsWith_SpokePaused() (gas: 61188)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 22.91s (32.87s 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, μ: 865065, ~: 868076)
[PASS] test_fuzz_repay_amounts_only_interest(uint256,uint256,uint40) (runs: 5000, μ: 876939, ~: 881785)
[PASS] test_fuzz_repay_only_premium(uint256,uint40) (runs: 5000, μ: 751995, ~: 752311)
[PASS] test_fuzz_repay_same_block_fuzz_amounts(uint256,uint256) (runs: 5000, μ: 881379, ~: 892026)
[PASS] test_fuzz_repay_x_y_shares(uint256,uint40) (runs: 5000, μ: 615408, ~: 615647)
[PASS] test_repay() (gas: 693772)
[PASS] test_repay_all_with_accruals() (gas: 415248)
[PASS] test_repay_fuzz_amountsAndWait(uint256,uint256,uint40) (runs: 5000, μ: 922331, ~: 924327)
[PASS] test_repay_fuzz_amounts_base_debt(uint256,uint256,uint40) (runs: 5000, μ: 920978, ~: 934062)
[PASS] test_repay_fuzz_amounts_base_debt_no_premium(uint256,uint256,uint40) (runs: 5000, μ: 801621, ~: 811096)
[PASS] test_repay_fuzz_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 552335, ~: 552472)
[PASS] test_repay_max() (gas: 594713)
[PASS] test_repay_multiple_reserves_fuzz_amountsAndWait(uint256,uint256,uint256,uint256,uint256,uint40) (runs: 5000, μ: 3270538, ~: 3276929)
[PASS] test_repay_only_interest() (gas: 716944)
[PASS] test_repay_revertsWith_ERC20InsufficientAllowance() (gas: 554706)
[PASS] test_repay_revertsWith_ReentrancyGuardReentrantCall() (gas: 646611)
[PASS] test_repay_same_block() (gas: 676204)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 191.24s (320.31s CPU time)

Ran 4 tests for tests/unit/Spoke/Spoke.RiskPremium.Scenario.t.sol:SpokeRiskPremiumScenarioTest
[PASS] test_getUserRiskPremium_applyInterest_two_users_two_reserves_borrowed() (gas: 2692614)
[PASS] test_getUserRiskPremium_fuzz_inflight_calcs((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint40) (runs: 5000, μ: 2229921, ~: 2276523)
[PASS] test_getUserRiskPremium_fuzz_two_users_two_reserves_borrowed((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint16,uint16,uint40[3]) (runs: 5000, μ: 2482322, ~: 2642303)
[PASS] test_riskPremiumPropagatesCorrectly_singleBorrow() (gas: 1746002)
Suite result: ok....*[Comment body truncated]*

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

Forge Build Sizes

Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
DeployWrapper ↓55% (-3725) 3,048 ↓55% (-3725) 3,076 ↑21% (+3725) 21,528 ↑9% (+3725) 46,076
ExtSloadWrapper ↓2% (-9) 394 ↓2% (-9) 422 ↑0% (+9) 24,182 ↑0% (+9) 48,730
SpokeInstance ↓1% (-356) 24,033 ↓1% (-356) 24,765 ↑190% (+356) 543 ↑1% (+356) 24,387
🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
AaveOracle 2,834 3,488 21,742 45,664
AccessManager 12,985 14,210 11,591 34,942
AccessManagerEnumerable 16,881 18,699 7,695 30,453
Address 44 94 24,532 49,058
Arrays 44 94 24,532 49,058
Arrays.hub 16 44 24,560 49,108
Arrays.spoke 16 44 24,560 49,108
AssetInterestRateStrategy 2,709 2,894 21,867 46,258
AssetLogic 44 94 24,532 49,058
AssetLogic.hub 16 44 24,560 49,108
AuthorityUtils 44 94 24,532 49,058
AuthorityUtils.hub 16 44 24,560 49,108
AuthorityUtils.spoke 16 44 24,560 49,108
Bytes 44 94 24,532 49,058
Bytes.spoke 16 44 24,560 49,108
Comparators 44 94 24,532 49,058
Comparators.hub 16 44 24,560 49,108
Comparators.spoke 16 44 24,560 49,108
Constants 427 479 24,149 48,673
Create2Utils 134 184 24,442 48,968
DeployUtils 44 94 24,532 49,058
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
GatewayBaseWrapper 2,400 2,675 22,176 46,477
Hashes 44 94 24,532 49,058
Hub 24,489 24,686 87 24,466
HubConfigurator 13,133 13,406 11,443 35,746
JsonBindings 12,835 12,887 11,741 36,265
KeyValueList 44 94 24,532 49,058
KeyValueList.spoke 16 44 24,560 49,108
KeyValueListWrapper 957 985 23,619 48,167
LibBit 44 94 24,532 49,058
LibBit.spoke 16 44 24,560 49,108
LiquidationLogic 7,942 7,994 16,634 41,158
LiquidationLogic.spoke 5,603 5,635 18,973 43,517
LiquidationLogicWrapper 13,706 13,880 10,870 35,272
LowLevelCall 44 94 24,532 49,058
Math 44 94 24,532 49,058
Math.hub 16 44 24,560 49,108
Math.spoke 16 44 24,560 49,108
MathUtils 44 94 24,532 49,058
MathUtils.hub 16 44 24,560 49,108
MathUtils.spoke 16 44 24,560 49,108
MockERC1271Wallet 828 962 23,748 48,190
MockERC20 2,540 3,006 22,036 46,146
MockNoncesKeyed 858 886 23,718 48,266
MockPriceFeed 737 1,395 23,839 47,757
MockReentrantCaller 882 1,083 23,694 48,069
MockSkimSpoke 1,116 1,275 23,460 47,877
NativeTokenGateway 6,168 6,585 18,408 42,567
NoncesKeyed 644 672 23,932 48,480
NoncesKeyed.spoke 387 413 24,189 48,739
Panic 44 94 24,532 49,058
Panic.hub 16 44 24,560 49,108
Panic.spoke 16 44 24,560 49,108
PercentageMath 44 94 24,532 49,058
PercentageMath.hub 16 44 24,560 49,108
PercentageMath.spoke 16 44 24,560 49,108
PercentageMathWrapper 632 660 23,944 48,492
PositionStatusMap 44 94 24,532 49,058
PositionStatusMap.spoke 16 44 24,560 49,108
PositionStatusMapWrapper 3,102 3,130 21,474 46,022
Premium 44 94 24,532 49,058
Premium.hub 16 44 24,560 49,108
Premium.spoke 16 44 24,560 49,108
ProxyAdmin 1,320 1,556 23,256 47,596
RescuableWrapper 908 1,042 23,668 48,110
ReserveFlagsMap 44 94 24,532 49,058
ReserveFlagsMap.spoke 16 44 24,560 49,108
ReserveFlagsMapWrapper 1,075 1,103 23,501 48,049
Roles 184 234 24,392 48,918
SafeCast 44 94 24,532 49,058
SafeCast.hub 16 44 24,560 49,108
SafeCast.spoke 16 44 24,560 49,108
SafeERC20 44 94 24,532 49,058
SafeERC20.hub 16 44 24,560 49,108
SafeERC20.spoke 16 44 24,560 49,108
SharesMath 44 94 24,532 49,058
SharesMath.hub 16 44 24,560 49,108
SignatureChecker 44 94 24,532 49,058
SignatureChecker.spoke 16 44 24,560 49,108
SignatureGateway 11,466 12,005 13,110 37,147
SlotDerivation 44 94 24,532 49,058
SlotDerivation.hub 16 44 24,560 49,108
SlotDerivation.spoke 16 44 24,560 49,108
SpokeConfigurator 11,354 11,627 13,222 37,525
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

@Kogaroshi Kogaroshi marked this pull request as ready for review January 21, 2026 17:51
Copy link
Contributor

@CheyenneAtapour CheyenneAtapour left a comment

Choose a reason for hiding this comment

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

I'm in favor, helps with #1099

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants