Skip to content

docs: consolidated tech docs - #1297

Open
yan-man wants to merge 21 commits into
mainfrom
docs/tech-docs
Open

docs: consolidated tech docs #1297
yan-man wants to merge 21 commits into
mainfrom
docs/tech-docs

Conversation

@yan-man

@yan-man yan-man commented Apr 3, 2026

Copy link
Copy Markdown
Contributor
  • merge after all tech docs are merged into this intermediate branch

CanonicalJP and others added 6 commits March 21, 2026 11:18
Co-authored-by: Cheyenne Atapour <cheyenneatapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Comment thread docs/features/LiquidationEngine.md
@github-actions

github-actions Bot commented Apr 3, 2026

Copy link
Copy Markdown
🌈 Test Results
No files changed, compilation skipped

Ran 2 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.InsufficientAllowance.t.sol:SignatureGateway_InsufficientAllowance_Test
[PASS] test_repayWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 463594)
[PASS] test_supplyWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 87496)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 32.94ms (4.07ms CPU time)

Ran 19 tests for tests/contracts/spoke/AaveOracle.t.sol:AaveOracleTest
[PASS] test_constructor() (gas: 15250)
[PASS] test_decimals() (gas: 8358)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 16685, ~: 17009)
Logs:
  Bound result 1

[PASS] test_getReservePrice() (gas: 46794)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 44558)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10899)
[PASS] test_getReservePrices() (gas: 76746)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 48933)
[PASS] test_getReserveSource() (gas: 47184)
[PASS] test_setReserveSource() (gas: 44204)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 97493)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17205)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 16954)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 12996)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 5010870)
[PASS] test_setSpoke() (gas: 5039232)
[PASS] test_setSpoke_revertsWith_InvalidAddress() (gas: 10892)
[PASS] test_setSpoke_revertsWith_OnlyDeployer(address) (runs: 5000, μ: 13465, ~: 13465)
[PASS] test_setSpoke_revertsWith_SpokeAlreadySet() (gas: 15102)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 1.45s (1.40s CPU time)

Ran 2 tests for tests/deployments/procedures/deploy/spoke/AaveV4AaveOracleDeployProcedure.t.sol:AaveV4AaveOracleDeployProcedureTest
[PASS] test_deployAaveOracle() (gas: 524367)
[PASS] test_deployAaveOracle_reverts_inputValidation() (gas: 8466)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.99ms (99.28µs CPU time)

Ran 2 tests for tests/deployments/procedures/deploy/AaveV4AccessManagerEnumerableDeployProcedure.t.sol:AaveV4AccessManagerEnumerableDeployProcedureTest
[PASS] test_deployAccessManagerEnumerable() (gas: 4403059)
[PASS] test_deployAccessManagerEnumerable_reverts() (gas: 10562)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.85ms (571.03µs CPU time)

Ran 6 tests for tests/deployments/procedures/deploy/roles/AaveV4AccessManagerRolesProcedure.t.sol:AaveV4AccessManagerRolesProcedureTest
[PASS] test_grantAccessManagerAdminRole() (gas: 177653)
[PASS] test_grantAccessManagerAdminRole_reverts() (gas: 14087)
[PASS] test_labelAllRoles() (gas: 1713955)
[PASS] test_labelAllRoles_reverts_zeroAddress() (gas: 8466)
[PASS] test_replaceDefaultAdminRole() (gas: 144664)
[PASS] test_replaceDefaultAdminRole_reverts() (gas: 178594)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 7.01ms (1.98ms CPU time)

Ran 5 tests for tests/deployments/batches/AaveV4AuthorityBatch.t.sol:AaveV4AuthorityBatchTest
[PASS] test_adminRoleMemberTracking() (gas: 21955)
[PASS] test_differentSaltProducesDifferentAddress() (gas: 14349)
[PASS] test_getReport() (gas: 19926)
[PASS] test_noOtherRolesInitialized() (gas: 15847)
[PASS] test_revert_zeroAdmin() (gas: 3765)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 6.51ms (1.03ms CPU time)

Ran 21 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.InvalidSignature.t.sol:SignatureGatewayInvalidSignatureTest
[PASS] test_borrowWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155226, ~: 154787)
[PASS] test_borrowWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39263)
[PASS] test_borrowWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37609)
[PASS] test_repayWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155182, ~: 154743)
[PASS] test_repayWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39284)
[PASS] test_repayWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37588)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 154539, ~: 155631)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39358)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37680)
[PASS] test_supplyWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155244, ~: 154805)
[PASS] test_supplyWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39329)
[PASS] test_supplyWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37620)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 141570, ~: 140298)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidSignatureDueTo_InvalidSigner() (gas: 25576)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 27259)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 141563, ~: 140291)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidSignatureDueTo_InvalidSigner() (gas: 25486)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 27230)
[PASS] test_withdrawWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155223, ~: 154784)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39370)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37609)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 43.21s (43.18s CPU time)

Ran 7 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.SpokeNotRegistered.t.sol:SignatureGateway_SpokeNotRegistered_Test
[PASS] test_borrowWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13433, ~: 13433)
[PASS] test_repayWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13411, ~: 13411)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_SpokeNotRegistered((address,uint256,bool,address,uint256,uint256)) (runs: 5000, μ: 13446, ~: 13446)
[PASS] test_supplyWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13476, ~: 13476)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_SpokeNotRegistered((address,address,uint256,uint256)) (runs: 5000, μ: 13709, ~: 13709)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_SpokeNotRegistered((address,address,uint256,uint256)) (runs: 5000, μ: 13665, ~: 13665)
[PASS] test_withdrawWithSig_revertsWith_SpokeNotRegistered((address,uint256,uint256,address,uint256,uint256)) (runs: 5000, μ: 13476, ~: 13476)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 16.92s (16.89s CPU time)

Ran 7 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.Unauthorized.t.sol:SignatureGateway_Unauthorized_PositionManagerActive_Test
[PASS] test_borrowWithSig_revertsWith_Unauthorized() (gas: 80669)
[PASS] test_repayWithSig_revertsWith_Unauthorized() (gas: 118700)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_Unauthorized() (gas: 73255)
[PASS] test_supplyWithSig_revertsWith_Unauthorized() (gas: 140299)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_Unauthorized() (gas: 81545)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_Unauthorized() (gas: 81655)
[PASS] test_withdrawWithSig_revertsWith_Unauthorized() (gas: 79681)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 34.02ms (4.53ms CPU time)

Ran 7 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.Reverts.Unauthorized.t.sol:SignatureGateway_Unauthorized_PositionManagerNotActive_Test
[PASS] test_borrowWithSig_revertsWith_Unauthorized() (gas: 78461)
[PASS] test_repayWithSig_revertsWith_Unauthorized() (gas: 116492)
[PASS] test_setUsingAsCollateralWithSig_revertsWith_Unauthorized() (gas: 71047)
[PASS] test_supplyWithSig_revertsWith_Unauthorized() (gas: 138091)
[PASS] test_updateUserDynamicConfigWithSig_revertsWith_Unauthorized() (gas: 79337)
[PASS] test_updateUserRiskPremiumWithSig_revertsWith_Unauthorized() (gas: 79447)
[PASS] test_withdrawWithSig_revertsWith_Unauthorized() (gas: 77473)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 33.78ms (4.48ms CPU time)

Ran 4 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.SetSelfAsUserPositionManagerWithSig.t.sol:SignatureGatewaySetSelfAsUserPositionManagerTest
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 140247)
[PASS] test_setSelfAsUserPositionManagerWithSig_forwards_correct_call() (gas: 32698)
[PASS] test_setSelfAsUserPositionManagerWithSig_ignores_underlying_spoke_reverts() (gas: 29754)
[PASS] test_setSelfAsUserPositionManagerWithSig_revertsWith_SpokeNotRegistered() (gas: 16553)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 31.35ms (1.21ms CPU time)

Ran 14 tests for tests/contracts/position-manager/SignatureGateway/SignatureGateway.t.sol:SignatureGatewayTest
[PASS] test_borrowWithSig() (gas: 843431)
[PASS] test_multicall() (gas: 681960)
[PASS] test_multicall_atomicity_on_revert() (gas: 551378)
[PASS] test_multicall_no_atomicity_with_trycatch() (gas: 653662)
[PASS] test_renouncePositionManagerRole() (gas: 29776)
[PASS] test_renouncePositionManagerRole_revertsWith_OnlyOwner() (gas: 18135)
[PASS] test_repayWithSig() (gas: 856488)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 336990)
[PASS] test_setUsingAsCollateralWithSig() (gas: 543151)
[PASS] test_supplyWithSig() (gas: 629653)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 361979)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 1068979)
[PASS] test_useNonce_monotonic(bytes32) (runs: 5000, μ: 13346, ~: 13346)
[PASS] test_withdrawWithSig() (gas: 633591)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 538.47ms (508.70ms CPU time)

Ran 3 tests for tests/contracts/spoke/misc/Spoke.Access.t.sol:SpokeAccessTest
[PASS] testAccess_change_authority() (gas: 519305)
[PASS] testAccess_hub_functions_callable_by_spokes() (gas: 603850)
[PASS] testAccess_spoke_admin_config_access() (gas: 496807)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 31.57ms (2.92ms CPU time)

Ran 1 test for tests/contracts/spoke/accrual/Spoke.AccrueInterest.Scenario.t.sol:SpokeAccrueInterestScenarioTest
[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime_twoActions((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 6659308, ~: 6506820)
Logs:
  Bound result 416966230219621053938274952927
  Bound result 0
  Bound result 255831241153786906
  Bound result 41191294854201435881
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 481970306954558904
  Bound result 12412
  Bound result 6
  Bound result 124281697546210950467266407747
  Bound result 33522909571553656
  Bound result 481970306954558904
  Bound result 12412

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

Ran 20 tests for tests/contracts/spoke/risk-premium/Spoke.RiskPremium.t.sol:SpokeRiskPremiumTest
[PASS] test_getUserRiskPremium_fuzz_applyInterest_two_reserves_borrowed(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 2360992, ~: 2410922)
Logs:
  Bound result 999999999999999999999998
  Bound result 11269
  Bound result 4256
  Bound result 45000000000000000000
  Bound result 22281

[PASS] test_getUserRiskPremium_fuzz_applyingInterest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1673610, ~: 1730549)
Logs:
  Bound result 160990532950455040192167397585
  Bound result 872
  Bound result 277777774222222222
  Bound result 28195891046972191868

[PASS] test_getUserRiskPremium_fuzz_four_reserves_change_cr(uint256,uint256,uint256,uint256,uint256,uint24) (runs: 5000, μ: 2090634, ~: 2072980)
Logs:
  Bound result 6369
  Bound result 748111466082993287060025057983
  Bound result 1
  Bound result 163154532952117007
  Bound result 6304403909286328381
  Bound result 60380874664557845373500555178

[PASS] test_getUserRiskPremium_fuzz_four_reserves_change_one_price(uint256,uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 2268757, ~: 2252681)
Logs:
  Bound result 8218757779814625
  Bound result 748111466082993287060025057983
  Bound result 1
  Bound result 163154532952117007
  Bound result 6304403909286328381
  Bound result 60380874664557845373500555178

[PASS] test_getUserRiskPremium_fuzz_four_reserves_prices_supply_debt((uint256,uint256,uint256,uint256,uint24,uint256),(uint256,uint256,uint256,uint256,uint24,uint256),(uint256,uint256,uint256,uint256,uint24,uint256),(uint256,uint256,uint256,uint256,uint24,uint256)) (runs: 5000, μ: 1988135, ~: 1996265)
Logs:
  Bound result 6437
  Bound result 6325
  Bound result 3199
  Bound result 6461905220641469020
  Bound result 1411
  Bound result 1337
  Bound result 1097
  Bound result 15722
  Bound result 8752
  Bound result 15163
  Bound result 10000000000000000
  Bound result 10000000000000000
  Bound result 10387
  Bound result 20533
  Bound result 44329
  Bound result 18146

[PASS] test_getUserRiskPremium_fuzz_four_reserves_supply_and_borrow(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 1584930, ~: 1579543)
Logs:
  Bound result 999999999999999999999998
  Bound result 4256
  Bound result 11269
  Bound result 45000000000000000000
  Bound result 22281

[PASS] test_getUserRiskPremium_fuzz_single_reserve_collateral_borrowed_amount(uint256) (runs: 5000, μ: 427677, ~: 427177)
Logs:
  Bound result 3124043968137

[PASS] test_getUserRiskPremium_fuzz_supply_does_not_impact(uint256,uint256) (runs: 5000, μ: 607020, ~: 606905)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_getUserRiskPremium_fuzz_three_reserves_supply_and_borrow(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1255120, ~: 1295105)
Logs:
  Bound result 160990532950455040192167397585
  Bound result 1777777777777777777777777777
  Bound result 872
  Bound result 28195891046972191868

[PASS] test_getUserRiskPremium_fuzz_two_reserves_supply_and_borrow(uint256,uint256,uint256) (runs: 5000, μ: 1049547, ~: 1082497)
Logs:
  Bound result 615514462186775432459
  Bound result 573251106969745917
  Bound result 446067553769140138733721804

[PASS] test_getUserRiskPremium_multi_reserve_collateral() (gas: 969150)
[PASS] test_getUserRiskPremium_multi_reserve_collateral_lower_rp_than_highest_cr() (gas: 1735618)
[PASS] test_getUserRiskPremium_multi_reserve_collateral_weth_partial_cover() (gas: 1309006)
[PASS] test_getUserRiskPremium_no_collateral() (gas: 98052)
[PASS] test_getUserRiskPremium_no_collateral_set() (gas: 200717)
[PASS] test_getUserRiskPremium_single_reserve_collateral() (gas: 211079)
[PASS] test_getUserRiskPremium_single_reserve_collateral_borrowed() (gas: 421913)
[PASS] test_getUserRiskPremium_two_reserves_equal_parts() (gas: 1122489)
[PASS] test_riskPremium_collateral_insufficient_to_cover_debt() (gas: 2469247)
[PASS] test_riskPremium_postActions() (gas: 1342164)
Suite result: ok. 20 passed; 0 failed; 0 skipped; finished in 246.12s (246.07s CPU time)

Ran 15 tests for tests/contracts/spoke/position-manager/Spoke.SetUserPositionManagerWithSig.t.sol:SpokeSetUserPositionManagersWithSigTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 5039341)
[PASS] test_eip712Domain() (gas: 5044742)
[PASS] test_positionManagerUpdate_typeHash() (gas: 3903)
[PASS] test_setUserPositionManager_typeHash() (gas: 15642)
[PASS] test_setUserPositionManagersWithSig() (gas: 287767)
[PASS] test_setUserPositionManagersWithSig_ERC1271() (gas: 374521)
[PASS] test_setUserPositionManagersWithSig_ERC1271_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 458227, ~: 455925)
[PASS] test_setUserPositionManagersWithSig_ERC1271_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 277122)
[PASS] test_setUserPositionManagersWithSig_ERC1271_revertsWith_InvalidSignature_dueTo_InvalidHash() (gas: 328428)
[PASS] test_setUserPositionManagersWithSig_multiple_updates((address,bool)[]) (runs: 5000, μ: 2443443, ~: 2408147)
[PASS] test_setUserPositionManagersWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 259907, ~: 263400)
[PASS] test_setUserPositionManagersWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 33302)
[PASS] test_setUserPositionManagersWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 33695)
[PASS] test_setUserPositionManagersWithSig_zero_updates() (gas: 256432)
[PASS] test_useNonce_monotonic(bytes32) (runs: 5000, μ: 19474, ~: 19474)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 59.88s (59.85s CPU time)

Ran 9 tests for tests/contracts/spoke/misc/Spoke.SetUsingAsCollateral.t.sol:SpokeSetUsingAsCollateralTest
[PASS] test_setUsingAsCollateral() (gas: 314916)
[PASS] test_setUsingAsCollateral_collateralStatusUnchanged() (gas: 474354)
[PASS] test_setUsingAsCollateral_revertsWith_MaximumUserReservesExceeded() (gas: 5706493)
[PASS] test_setUsingAsCollateral_revertsWith_ReentrancyGuardReentrantCall() (gas: 777432)
[PASS] test_setUsingAsCollateral_revertsWith_ReserveFrozen() (gas: 106635)
[PASS] test_setUsingAsCollateral_revertsWith_ReserveNotListed() (gas: 28527)
[PASS] test_setUsingAsCollateral_revertsWith_ReservePaused() (gas: 65885)
[PASS] test_setUsingAsCollateral_to_limit_disable_enable_again() (gas: 5963016)
[PASS] test_setUsingAsCollateral_unlimited_whenLimitIsMax() (gas: 826611)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 44.52ms (11.62ms CPU time)

Ran 7 tests for tests/contracts/spoke/accrual/Spoke.AccrueInterest.t.sol:SpokeAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 155586)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 711054, ~: 710886)
Logs:
  Bound result 9

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

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

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

[SKIP: pending rft] test_accrueInterest_fuzz_RPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 0, μ: 0, ~: 0)
[PASS] test_accrueInterest_fuzz_RatesRPBorrowAndSkipTime((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),(uint96,uint96,uint96,uint96),uint40) (runs: 5000, μ: 4871836, ~: 4892338)
Logs:
  Bound result 410886848
  Bound result 7600
  Bound result 6714
  Bound result 8357
  Bound result 11908
  Bound result 811749079544293631087761720463
  Bound result 45000000
  Bound result 282574488339931
  Bound result 6284
  Bound result 6610
  Bound result 20001
  Bound result 3805
  Bound result 1035
  Bound result 11908
  Bound result 920749545124571
  Bound result 51668
  Bound result 25

Suite result: ok. 6 passed; 0 failed; 1 skipped; finished in 141.18s (141.15s CPU time)

Ran 5 tests for tests/contracts/spoke/accrual/Spoke.AccrueLiquidityFee.EdgeCases.t.sol:SpokeAccrueLiquidityFeeEdgeCasesTest
[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 558034, ~: 558106)
Logs:
  Bound result 19892
  Bound result 337777777
  Bound result 0
  Bound result 9784

[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 818989, ~: 819002)
Logs:
  Bound result 14405
  Bound result 288000000
  Bound result 0
  Bound result 5470
  Bound result 11007

[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 281470908)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 197683658)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 558123)
Logs:
  Bound result 5000
  Bound result 34560000
  Bound result 2
  Bound result 500000000000000000000

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

Ran 15 tests for tests/contracts/spoke/supply/Spoke.Supply.t.sol:SpokeSupplyTest
[PASS] test_fuzz_supply_effect_on_ex_rates(uint256,uint256) (runs: 5000, μ: 716919, ~: 717825)
Logs:
  Bound result 100
  Bound result 68691281934999

[PASS] test_supply() (gas: 379017)
[PASS] test_supply_does_not_update_risk_premium() (gas: 2096070)
[PASS] test_supply_fuzz_amounts(uint256) (runs: 5000, μ: 503453, ~: 503121)
Logs:
  Bound result 3124043968137

[PASS] test_supply_fuzz_index_increase_no_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1263703, ~: 1271668)
Logs:
  Bound result 829158376550
  Bound result 88379
  Bound result 2
  Bound result 228553423

[PASS] test_supply_fuzz_index_increase_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1456036, ~: 1464045)
Logs:
  Bound result 829158376550
  Bound result 88379
  Bound result 2
  Bound result 228553423

[PASS] test_supply_fuzz_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 62087, ~: 61801)
Logs:
  Bound result 3124043968137

[PASS] test_supply_index_increase_no_premium() (gas: 1347847)
[PASS] test_supply_index_increase_with_premium() (gas: 1406237)
[PASS] test_supply_revertsWith_ERC20InsufficientAllowance() (gas: 39662)
[PASS] test_supply_revertsWith_InvalidSupplyAmount() (gas: 47318)
[PASS] test_supply_revertsWith_ReentrancyGuardReentrantCall() (gas: 278566)
[PASS] test_supply_revertsWith_ReserveFrozen() (gas: 63609)
[PASS] test_supply_revertsWith_ReserveNotListed() (gas: 22912)
[PASS] test_supply_revertsWith_ReservePaused() (gas: 63538)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 91.23s (91.20s CPU time)

Ran 1 test for tests/contracts/spoke/configuration/Spoke.UpdateUserDynamicConfig.t.sol:SpokeUpdateUserDynamicConfigTest
[PASS] test_updateUserDynamicConfig_revertsWith_ReentrancyGuardReentrantCall() (gas: 641500)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 30.64ms (849.55µs CPU time)

Ran 1 test for tests/contracts/spoke/risk-premium/Spoke.UpdateUserRiskPremium.t.sol:SpokeUpdateUserRiskPremiumTest
[PASS] test_updateUserRiskPremium_revertsWith_ReentrancyGuardReentrantCall() (gas: 640502)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 30.61ms (953.35µs CPU time)

Ran 7 tests for tests/contracts/spoke/accrual/Spoke.AccrueLiquidityFee.t.sol:SpokeAccrueLiquidityFeeTest
[PASS] test_accrueLiquidityFee() (gas: 923020)
[PASS] test_accrueLiquidityFee_NoActionTaken() (gas: 138320)
[PASS] test_accrueLiquidityFee_NoInterest_OnlySupply(uint40) (runs: 5000, μ: 261785, ~: 261744)
Logs:
  Bound result 9

[PASS] test_accrueLiquidityFee_exact() (gas: 929328)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 1006694, ~: 1031646)
Logs:
  Bound result 68691281934999
  Bound result 0

[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 563962)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 922952)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 21.12s (21.09s CPU time)

Ran 10 tests for tests/contracts/spoke/misc/Spoke.Upgradeable.t.sol:SpokeUpgradeableTest
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 5000, μ: 6787198, ~: 6787198)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 5000, μ: 6815820, ~: 6815812)
Logs:
  Bound result 649

[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 5000, μ: 13565313, ~: 13565305)
Logs:
  Bound result 649

[PASS] test_proxy_constructor_revertsWith_InvalidAddress() (gas: 5010664)
[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 6784571)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 5000, μ: 14842007, ~: 14841990)
Logs:
  Bound result 649

[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 11790763)
[PASS] test_proxy_reinitialization_revertsWith_InvalidAddress() (gas: 11791497)
[PASS] test_proxy_storage_persists_across_upgrade() (gas: 14830499)
[PASS] test_spoke_revision_accessible() (gas: 5015138)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 25.06s (25.03s CPU time)

Ran 6 tests for tests/contracts/spoke/misc/Spoke.UserAccountData.t.sol:SpokeUserAccountDataTest
[PASS] test_userAccountData_scenario1() (gas: 512094)
[PASS] test_userAccountData_scenario2() (gas: 573068)
[PASS] test_userAccountData_scenario3() (gas: 573269)
[PASS] test_userAccountData_scenario4() (gas: 851337)
[PASS] test_userAccountData_scenario5() (gas: 734661)
[PASS] test_userAccountData_scenario6() (gas: 703086)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 35.26ms (4.33ms CPU time)

Ran 5 tests for tests/contracts/spoke/borrow/Spoke.Borrow.EdgeCases.t.sol:SpokeBorrowEdgeCasesTest
[PASS] test_borrow_fuzz_rounding_effect(uint256,uint256) (runs: 5000, μ: 1630637, ~: 1630742)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_borrow_fuzz_rounding_effect_inflated_ex_rate(uint256,uint256,uint256) (runs: 5000, μ: 2402410, ~: 2402492)
Logs:
  Bound result 19131
  Bound result 990000000000000000
  Bound result 462550270

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

[PASS] test_borrow_rounding_effect_multiple_actions() (gas: 1975581)
[PASS] test_borrow_rounding_effect_shares() (gas: 1778817)
Logs:
  Bound result 5000000000000000000
  Bound result 94608000

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

Ran 21 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.HealthFactor.t.sol:SpokeWithdrawHealthFactorTest
[PASS] test_unsetCollateral_fuzz_revertsWith_HealthFactorBelowThreshold(uint256) (runs: 5000, μ: 917787, ~: 917399)
Logs:
  Bound result 3124043968137

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_interest_increase(uint256,uint256) (runs: 5000, μ: 666468, ~: 666865)
Logs:
  Bound result 946
  Bound result 664947059

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 5000, μ: 897501, ~: 897598)
Logs:
  Bound result 25000000000000000
  Bound result 10096

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai(uint256,uint256,uint256) (runs: 5000, μ: 1161031, ~: 1161321)
Logs:
  Bound result 184
  Bound result 846358950
  Bound result 9837

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth(uint256,uint256,uint256) (runs: 5000, μ: 1161464, ~: 1161337)
Logs:
  Bound result 184
  Bound result 846358950
  Bound result 9837

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256) (runs: 5000, μ: 952510, ~: 953065)
Logs:
  Bound result 25000000000000000
  Bound result 10096

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts(uint256,uint256) (runs: 5000, μ: 1020827, ~: 1020301)
Logs:
  Bound result 243566643229693896170601593502
  Bound result 21653304

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop(uint256,uint256,uint256) (runs: 5000, μ: 1270794, ~: 1270525)
Logs:
  Bound result 4025
  Bound result 4294967295
  Bound result 271

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 1058500, ~: 1058134)
Logs:
  Bound result 4025
  Bound result 4294967295
  Bound result 271

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_price_drop(uint256,uint256) (runs: 5000, μ: 879497, ~: 879738)
Logs:
  Bound result 17820
  Bound result 4654

[PASS] test_withdraw_fuzz_revertsWith_HealthFactorBelowThreshold_singleBorrow(uint256) (runs: 5000, μ: 631166, ~: 631136)
Logs:
  Bound result 422056457348955450402177305176

[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_interest_increase() (gas: 661596)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 892973)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_dai() (gas: 1155174)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_price_drop_weth() (gas: 1155177)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 948087)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 1015421)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_price_drop() (gas: 1264002)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1051871)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_price_drop() (gas: 874342)
[PASS] test_withdraw_revertsWith_HealthFactorBelowThreshold_singleBorrow() (gas: 632654)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 158.24s (158.21s CPU time)

Ran 5 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.Scenario.t.sol:SpokeWithdrawScenarioTest
[PASS] test_withdraw_fuzz_all_liquidity_with_interest_multi_user((uint256,uint256,uint256,uint256,uint256[2],uint256)) (runs: 5000, μ: 1128807, ~: 1152984)
Logs:
  Bound result 0
  Bound result 219914860
  Bound result 393503056918434871754798181699
  Bound result 272755692
  Bound result 464077857
  Bound result 26814693655084276391245140455
  Bound result 92257

[PASS] test_withdraw_fuzz_partial_full_with_interest(uint256,uint256,uint256,uint40) (runs: 5000, μ: 964498, ~: 964496)
Logs:
  Bound result 3920
  Bound result 1640
  Bound result 1002
  Bound result 24044

[PASS] test_withdraw_round_trip_deposit_withdraw(uint256,uint256,address,uint256) (runs: 5000, μ: 417524, ~: 417513)
Logs:
  Bound result 4
  Bound result 18446462603027742720
  Bound result 500000000000000000000000000

[PASS] test_withdraw_round_trip_withdraw_deposit(uint256,uint256,uint256,address,uint256) (runs: 5000, μ: 438611, ~: 437931)
Logs:
  Bound result 1
  Bound result 999999999999999999999999999998
  Bound result 1
  Bound result 2

[PASS] test_withdraw_underwater_reserve_not_collateral() (gas: 974201)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 77.32s (77.29s CPU time)

Ran 6 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.Validation.t.sol:SpokeWithdrawValidationTest
[PASS] test_withdraw_fuzz_revertsWith_InsufficientLiquidity_with_debt(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 445296, ~: 445388)
Logs:
  Bound result 1
  Bound result 10577
  Bound result 2146
  Bound result 240
  Bound result 704000000

[PASS] test_withdraw_fuzz_revertsWith_InsufficientSupply_zero_supplied(uint256) (runs: 5000, μ: 60950, ~: 60661)
Logs:
  Bound result 3124043968137

[PASS] test_withdraw_revertsWith_InsufficientLiquidity_with_debt() (gas: 437887)
[PASS] test_withdraw_revertsWith_InvalidAmount_zero_supplied() (gas: 57304)
[PASS] test_withdraw_revertsWith_ReserveNotListed() (gas: 22475)
[PASS] test_withdraw_revertsWith_ReservePaused() (gas: 63021)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 6.33s (6.30s CPU time)

Ran 17 tests for tests/contracts/spoke/borrow/Spoke.Borrow.HealthFactor.t.sol:SpokeBorrowHealthFactorTest
[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_collateral_price_drop(uint256,uint256) (runs: 5000, μ: 898556, ~: 898540)
Logs:
  Bound result 100
  Bound result 68691281934999

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls(uint256,uint256) (runs: 5000, μ: 870479, ~: 870824)
Logs:
  Bound result 9501
  Bound result 3630907520

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 909767, ~: 909776)
Logs:
  Bound result 20044800
  Bound result 2172
  Bound result 44

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

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 1153965, ~: 1154086)
Logs:
  Bound result 100
  Bound result 1100000000000000000000000000
  Bound result 373

[PASS] test_borrow_fuzz_revertsWith_HealthFactorBelowThreshold_with_interest(uint256,uint256) (runs: 5000, μ: 683821, ~: 684012)
Logs:
  Bound result 2
  Bound result 595590744

[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold() (gas: 651179)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_collateral_price_drop_weth() (gas: 892821)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls() (gas: 864648)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai() (gas: 1116105)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth() (gas: 1116104)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_with_interest() (gas: 902326)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts() (gas: 1106709)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_multiple_debts_with_interest() (gas: 1145633)
[PASS] test_borrow_revertsWith_HealthFactorBelowThreshold_with_interest() (gas: 678719)
[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_dai(uint256,uint256,uint256) (runs: 5000, μ: 1120046, ~: 1120264)
Logs:
  Bound result 164622246243
  Bound result 746835
  Bound result 12939

[PASS] test_fuzz_borrow_revertsWith_HealthFactorBelowThreshold_multiple_colls_collateral_price_drop_weth(uint256,uint256,uint256) (runs: 5000, μ: 1120402, ~: 1120263)
Logs:
  Bound result 164622246243
  Bound result 746835
  Bound result 12939

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

Ran 14 tests for tests/contracts/spoke/withdraw/Spoke.Withdraw.t.sol:SpokeWithdrawTest
[PASS] test_fuzz_withdraw_effect_on_ex_rates(uint256,uint256) (runs: 5000, μ: 748255, ~: 750424)
Logs:
  Bound result 100
  Bound result 68691281934999

[PASS] test_withdraw_all_liquidity() (gas: 407013)
[PASS] test_withdraw_all_liquidity_with_interest_no_premium() (gas: 1203912)
[PASS] test_withdraw_all_liquidity_with_interest_with_premium() (gas: 1211938)
[PASS] test_withdraw_fuzz_all_elapsed_with_interest(uint256,uint256,uint40) (runs: 5000, μ: 790159, ~: 790078)
Logs:
  Bound result 999999999999999999999999999997
  Bound result 499999999999999999999999999997
  Bound result 7880

[PASS] test_withdraw_fuzz_all_greater_than_supplied(uint256) (runs: 5000, μ: 410914, ~: 410625)
Logs:
  Bound result 3124043968137

[PASS] test_withdraw_fuzz_all_liquidity_with_interest_no_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 1323128, ~: 1336665)
Logs:
  Bound result 3
  Bound result 1000000000000000000
  Bound result 6085491225525
  Bound result 3087
  Bound result 502205933

[PASS] test_withdraw_fuzz_all_liquidity_with_interest_with_premium((uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 1322793, ~: 1336188)
Logs:
  Bound result 3
  Bound result 1000000000000000000
  Bound result 6085491225525
  Bound result 3087
  Bound result 502205933

[PASS] test_withdraw_fuzz_all_with_interest(uint256,uint256) (runs: 5000, μ: 804179, ~: 804126)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_withdraw_fuzz_suppliedAmount(uint256) (runs: 5000, μ: 412862, ~: 412573)
Logs:
  Bound result 3124043968137

[PASS] test_withdraw_max_greater_than_supplied() (gas: 381530)
[PASS] test_withdraw_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 665334)
[PASS] test_withdraw_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 407513)
[PASS] test_withdraw_same_block() (gas: 322837)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 122.72s (122.69s CPU time)

Ran 16 tests for tests/contracts/spoke/configurator/SpokeConfigurator.GranularAccessControl.t.sol:SpokeConfiguratorGranularAccessControlTest
[PASS] test_fuzz_unauthorized_cannotCall_liquidationConfigManagerMethods(address) (runs: 5000, μ: 119635, ~: 119635)
[PASS] test_fuzz_unauthorized_cannotCall_positionManagerAdminMethods(address) (runs: 5000, μ: 42270, ~: 42270)
[PASS] test_fuzz_unauthorized_cannotCall_reserveManagerMethods(address) (runs: 5000, μ: 461123, ~: 461123)
[PASS] test_liquidationConfigManager_canCall_updateLiquidationConfig() (gas: 62598)
[PASS] test_liquidationConfigManager_canCall_updateLiquidationTargetHealthFactor() (gas: 62173)
[PASS] test_liquidationConfigManager_cannotCall_anyPositionManagerAdminMethod() (gas: 39043)
[PASS] test_liquidationConfigManager_cannotCall_anyReserveMethod() (gas: 461075)
[PASS] test_positionManagerAdmin_canCall_updatePositionManager() (gas: 75207)
[PASS] test_positionManagerAdmin_cannotCall_anyLiquidationConfigMethod() (gas: 117087)
[PASS] test_positionManagerAdmin_cannotCall_anyReserveMethod() (gas: 460879)
[PASS] test_reserveManager_canCall_freezeAllReserves() (gas: 157066)
[PASS] test_reserveManager_canCall_pauseAllReserves() (gas: 157029)
[PASS] test_reserveManager_canCall_updateFrozen() (gas: 65260)
[PASS] test_reserveManager_canCall_updatePaused() (gas: 65207)
[PASS] test_reserveManager_cannotCall_anyLiquidationConfigMethod() (gas: 117064)
[PASS] test_reserveManager_cannotCall_anyPositionManagerAdminMethod() (gas: 39020)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 6.15s (6.12s CPU time)

Ran 48 tests for tests/contracts/spoke/configurator/SpokeConfigurator.t.sol:SpokeConfiguratorTest
[PASS] test_addCollateralFactor() (gas: 125701)
[PASS] test_addCollateralFactor_revertsWith_AccessManagedUnauthorized() (gas: 29201)
[PASS] test_addDynamicReserveConfig() (gas: 105484)
[PASS] test_addDynamicReserveConfig_revertsWith_AccessManagedUnauthorized() (gas: 29375)
[PASS] test_addLiquidationBonus_revertsWith_AccessManagedUnauthorized() (gas: 29125)
[PASS] test_addLiquidationFee() (gas: 125688)
[PASS] test_addLiquidationFee_revertsWith_AccessManagedUnauthorized() (gas: 29081)
[PASS] test_addMaxLiquidationBonus() (gas: 125715)
[PASS] test_addReserve() (gas: 407227)
[PASS] test_addReserve_revertsWith_AccessManagedUnauthorized() (gas: 30056)
[PASS] test_freezeAllReserves() (gas: 202923)
[PASS] test_freezeAllReserves_revertsWith_AccessManagedUnauthorized() (gas: 26902)
[PASS] test_freezeReserve() (gas: 72379)
[PASS] test_freezeReserve_revertsWith_AccessManagedUnauthorized() (gas: 29026)
[PASS] test_pauseAllReserves() (gas: 202782)
[PASS] test_pauseAllReserves_revertsWith_AccessManagedUnauthorized() (gas: 26857)
[PASS] test_pauseReserve() (gas: 72328)
[PASS] test_pauseReserve_revertsWith_AccessManagedUnauthorized() (gas: 29002)
[PASS] test_updateBorrowable() (gas: 102957)
[PASS] test_updateBorrowable_revertsWith_AccessManagedUnauthorized() (gas: 29083)
[PASS] test_updateCollateralFactor() (gas: 82803)
[PASS] test_updateCollateralFactor_revertsWith_AccessManagedUnauthorized() (gas: 29202)
[PASS] test_updateCollateralRisk() (gas: 77023)
[PASS] test_updateCollateralRisk_revertsWith_AccessManagedUnauthorized() (gas: 29054)
[PASS] test_updateDynamicReserveConfig() (gas: 2899200)
[PASS] test_updateDynamicReserveConfig_revertsWith_AccessManagedUnauthorized() (gas: 29414)
[PASS] test_updateFrozen() (gas: 105722)
[PASS] test_updateFrozen_revertsWith_AccessManagedUnauthorized() (gas: 29082)
[PASS] test_updateHealthFactorForMaxBonus() (gas: 68276)
[PASS] test_updateHealthFactorForMaxBonus_revertsWith_AccessManagedUnauthorized() (gas: 26869)
[PASS] test_updateLiquidationBonusFactor() (gas: 71236)
[PASS] test_updateLiquidationBonusFactor_revertsWith_AccessManagedUnauthorized() (gas: 26892)
[PASS] test_updateLiquidationConfig() (gas: 65834)
[PASS] test_updateLiquidationConfig_revertsWith_AccessManagedUnauthorized() (gas: 27176)
[PASS] test_updateLiquidationFee() (gas: 82864)
[PASS] test_updateLiquidationFee_revertsWith_AccessManagedUnauthorized() (gas: 29199)
[PASS] test_updateLiquidationTargetHealthFactor() (gas: 71154)
[PASS] test_updateLiquidationTargetHealthFactor_revertsWith_AccessManagedUnauthorized() (gas: 26913)
[PASS] test_updateMaxLiquidationBonus() (gas: 82801)
[PASS] test_updateMaxLiquidationBonus_revertsWith_AccessManagedUnauthorized() (gas: 29180)
[PASS] test_updatePaused() (gas: 105637)
[PASS] test_updatePaused_revertsWith_AccessManagedUnauthorized() (gas: 29103)
[PASS] test_updatePositionManager() (gas: 74403)
[PASS] test_updatePositionManager_revertsWith_AccessManagedUnauthorized() (gas: 27045)
[PASS] test_updateReceiveSharesEnabled() (gas: 103009)
[PASS] test_updateReceiveSharesEnabled_revertsWith_AccessManagedUnauthorized() (gas: 29126)
[PASS] test_updateReservePriceSource() (gas: 257998)
[PASS] test_updateReservePriceSource_revertsWith_AccessManagedUnauthorized() (gas: 29078)
Suite result: ok. 48 passed; 0 failed; 0 skipped; finished in 54.12ms (24.34ms CPU time)

Ran 31 tests for tests/config-engine/SpokeEngine.t.sol:SpokeEngineTest
[PASS] test_executeSpokeDynamicReserveConfigAdditions() (gas: 119357)
[PASS] test_executeSpokeDynamicReserveConfigAdditions_revert_invalidCollateralFactorAndMaxLiquidationBonus() (gas: 83675)
[PASS] test_executeSpokeDynamicReserveConfigUpdates_allKeepCurrent() (gas: 67907)
[PASS] test_executeSpokeDynamicReserveConfigUpdates_allUpdated() (gas: 108208)
[PASS] test_executeSpokeDynamicReserveConfigUpdates_multipleReserves() (gas: 159310)
[PASS] test_executeSpokeDynamicReserveConfigUpdates_partialUpdate() (gas: 107146)
[PASS] test_executeSpokeLiquidationConfigUpdates_allSet() (gas: 70929)
[PASS] test_executeSpokeLiquidationConfigUpdates_bonusFactorOnly() (gas: 73756)
[PASS] test_executeSpokeLiquidationConfigUpdates_maxBonusOnly() (gas: 73668)
[PASS] test_executeSpokeLiquidationConfigUpdates_multipleSpokes() (gas: 108925)
[PASS] test_executeSpokeLiquidationConfigUpdates_noneSet() (gas: 35612)
[PASS] test_executeSpokeLiquidationConfigUpdates_targetOnly() (gas: 73707)
[PASS] test_executeSpokePositionManagerUpdates() (gas: 85961)
[PASS] test_executeSpokePositionManagerUpdates_deactivate() (gas: 79957)
[PASS] test_executeSpokePositionManagerUpdates_multipleUpdates() (gas: 1200178)
[PASS] test_executeSpokeReserveConfigUpdates_allKeepCurrent() (gas: 60887)
[PASS] test_executeSpokeReserveConfigUpdates_allSet() (gas: 208328)
[PASS] test_executeSpokeReserveConfigUpdates_crossSpoke_differentFields() (gas: 176269)
[PASS] test_executeSpokeReserveConfigUpdates_multipleSpokes() (gas: 148826)
[PASS] test_executeSpokeReserveConfigUpdates_onlyCollateralRisk() (gas: 101833)
[PASS] test_executeSpokeReserveConfigUpdates_onlyPriceSource() (gas: 290543)
[PASS] test_executeSpokeReserveListings() (gas: 617585)
[PASS] test_executeSpokeReserveListings_multipleReserves() (gas: 3194266)
[PASS] test_fuzz_executeSpokeDynamicReserveConfigUpdates_collateralFactor(uint256) (runs: 5000, μ: 111134, ~: 111271)
Logs:
  Bound result 1671

[PASS] test_fuzz_executeSpokeDynamicReserveConfigUpdates_liquidationFee(uint256) (runs: 5000, μ: 111000, ~: 111152)
Logs:
  Bound result 4978

[PASS] test_fuzz_executeSpokeDynamicReserveConfigUpdates_maxLiquidationBonus(uint256) (runs: 5000, μ: 111285, ~: 111323)
Logs:
  Bound result 10767

[PASS] test_fuzz_executeSpokeLiquidationConfigUpdates_allSet(uint256,uint256,uint256) (runs: 5000, μ: 73756, ~: 73691)
Logs:
  Bound result 615514462186775432459
  Bound result 498141543913148729
  Bound result 5827

[PASS] test_fuzz_executeSpokeLiquidationConfigUpdates_bonusFactorOnly(uint256) (runs: 5000, μ: 76667, ~: 76839)
Logs:
  Bound result 4978

[PASS] test_fuzz_executeSpokeLiquidationConfigUpdates_maxBonusOnly(uint256) (runs: 5000, μ: 76482, ~: 76786)
Logs:
  Bound result 3124043968137

[PASS] test_fuzz_executeSpokeLiquidationConfigUpdates_targetOnly(uint256) (runs: 5000, μ: 76714, ~: 76868)
Logs:
  Bound result 340282366920938463462374610555812179593

[PASS] test_fuzz_executeSpokeReserveConfigUpdates_onlyCollateralRisk(uint256) (runs: 5000, μ: 104695, ~: 104899)
Logs:
  Bound result 28010

Suite result: ok. 31 passed; 0 failed; 0 skipped; finished in 9.41s (9.39s CPU time)

Ran 6 tests for tests/contracts/spoke/libraries/SpokeUtils.t.sol:SpokeUtilsTest
[PASS] test_fuzz_toValue(uint256,uint256,uint256) (runs: 5000, μ: 15803, ~: 15867)
Logs:
  Bound result 615514462186775432459
  Bound result 9
  Bound result 9140094126966428

[PASS] test_get() (gas: 180662)
[PASS] test_get_revertsWith_ReserveNotListed() (gas: 167206)
[PASS] test_toValue() (gas: 8851)
[PASS] test_toValue_revertsWith_ArithmeticOverflow() (gas: 8982)
[PASS] test_toValue_revertsWith_ArithmeticUnderflow() (gas: 8757)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 497.73ms (468.04ms CPU time)

Ran 6 tests for tests/contracts/spoke/borrow/Spoke.Borrow.Scenario.t.sol:SpokeBorrowScenarioTest
[PASS] test_borrow_fuzz_multi_spoke_multi_reserves(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 2051944, ~: 2061310)
Logs:
  Bound result 999999999999999999999996
  Bound result 4081
  Bound result 1313373042
  Bound result 45000000000000000000
  Bound result 13675

[PASS] test_borrow_fuzz_single_spoke_multi_reserves(uint256,uint256,uint256,uint256) (runs: 5000, μ: 2025666, ~: 2035319)
Logs:
  Bound result 3173
  Bound result 153494200
  Bound result 27777770666666666
  Bound result 18210846105896266062

[PASS] test_borrow_fuzz_single_spoke_multi_reserves_multi_user(uint256,uint256,uint256,uint256) (runs: 5000, μ: 2875316, ~: 2884973)
Logs:
  Bound result 3173
  Bound result 153494200
  Bound result 1777777777777777777777777777
  Bound result 117826625249700349

[PASS] test_borrow_fuzz_skip_borrow(uint256,uint256,uint256) (runs: 5000, μ: 1202356, ~: 1202610)
Logs:
  Bound result 615514462186775432459
  Bound result 218470873395738003579119570309
  Bound result 10765498

[PASS] test_borrow_skip_borrow() (gas: 1201331)
Logs:
  Bound result 10000000000000000000
  Bound result 20000000000000000000
  Bound result 31536000

[PASS] test_userAccountData_does_not_include_zero_cf_collateral() (gas: 1456971)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 151.18s (151.14s CPU time)

Ran 14 tests for tests/contracts/position-manager/TakerPositionManager/TakerPositionManager.Permit.t.sol:TakerPositionManagerPermitTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 5674)
[PASS] test_approveBorrowWithSig_fuzz(address,uint256,uint256) (runs: 5000, μ: 192193, ~: 191675)
Logs:
  Bound result 4
  Bound result 144506855745494289

[PASS] test_approveBorrowWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155930, ~: 155656)
[PASS] test_approveBorrowWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39837)
[PASS] test_approveBorrowWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37722)
[PASS] test_approveBorrowWithSig_revertsWith_SpokeNotRegistered() (gas: 191331)
[PASS] test_approveWithdrawWithSig_fuzz(address,uint256,uint256) (runs: 5000, μ: 192138, ~: 191620)
Logs:
  Bound result 4
  Bound result 144506855745494289

[PASS] test_approveWithdrawWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 155906, ~: 155632)
[PASS] test_approveWithdrawWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 39811)
[PASS] test_approveWithdrawWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 37689)
[PASS] test_approveWithdrawWithSig_revertsWith_SpokeNotRegistered() (gas: 191265)
[PASS] test_borrowPermit_typeHash() (gas: 9850)
[PASS] test_eip712Domain() (gas: 11015)
[PASS] test_withdrawPermit_typeHash() (gas: 9845)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 25.46s (25.43s CPU time)

Ran 17 tests for tests/contracts/spoke/borrow/Spoke.Borrow.Validation.t.sol:SpokeBorrowValidationTest
[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded(uint256,uint40) (runs: 5000, μ: 117650, ~: 117664)
Logs:
  Bound result 4
  Bound result 1

[PASS] test_borrow_fuzz_revertsWith_DrawCapExceeded_due_to_interest(uint256) (runs: 5000, μ: 698167, ~: 698395)
Logs:
  Bound result 683968137

[PASS] test_borrow_fuzz_revertsWith_InsufficientLiquidity(uint256,uint256) (runs: 5000, μ: 301134, ~: 300891)
Logs:
  Bound result 100

[PASS] test_borrow_fuzz_revertsWith_InvalidAmount(uint256) (runs: 5000, μ: 39348, ~: 39404)
Logs:
  Bound result 2

[PASS] test_borrow_fuzz_revertsWith_ReserveFrozen(uint256,uint256) (runs: 5000, μ: 71108, ~: 70883)
Logs:
  Bound result 4
  Bound result 100

[PASS] test_borrow_fuzz_revertsWith_ReserveNotBorrowable(uint256,uint256) (runs: 5000, μ: 71186, ~: 70961)
Logs:
  Bound result 4
  Bound result 100

[PASS] test_borrow_fuzz_revertsWith_ReserveNotListed(uint256,uint256) (runs: 5000, μ: 27461, ~: 27183)
Logs:
  Bound result 1000100000000000000

[PASS] test_borrow_fuzz_revertsWith_ReservePaused(uint256,uint256) (runs: 5000, μ: 71027, ~: 70802)
Logs:
  Bound result 4
  Bound result 100

[PASS] test_borrow_revertsWith_InsufficientLiquidity() (gas: 300846)
Logs:
  Bound result 10000000000000000000

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

[PASS] test_borrow_revertsWith_MaximumUserReservesExceeded() (gas: 6874786)
[PASS] test_borrow_revertsWith_ReserveFrozen() (gas: 72399)
Logs:
  Bound result 2
  Bound result 1

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

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

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

[PASS] test_borrow_to_limit_repay_borrow_again() (gas: 7150365)
[PASS] test_borrow_unlimited_whenLimitIsMax() (gas: 2130717)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 15.27s (15.24s CPU time)

Ran 4 tests for tests/contracts/spoke/borrow/Spoke.Borrow.t.sol:SpokeBorrowTest
[PASS] test_borrow() (gas: 1114253)
[PASS] test_borrow_fuzz_amounts(uint256,uint256) (runs: 5000, μ: 1123624, ~: 1123475)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubDraw() (gas: 405220)
[PASS] test_borrow_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 535003)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 27.31s (27.28s CPU time)

Ran 29 tests for tests/contracts/spoke/configuration/Spoke.Config.t.sol:SpokeConfigTest
[PASS] test_addReserve() (gas: 406355)
[PASS] test_addReserve_fuzz_revertsWith_AssetNotListed() (gas: 271465)
[PASS] test_addReserve_revertsWith_InvalidAddress_hub() (gas: 5056065)
[PASS] test_addReserve_revertsWith_InvalidAddress_oracle() (gas: 5101739)
[PASS] test_addReserve_revertsWith_InvalidAssetId() (gas: 32875)
[PASS] test_addReserve_revertsWith_InvalidUnderlyingDecimals() (gas: 259381)
[PASS] test_addReserve_revertsWith_ReserveExists() (gas: 382361)
[PASS] test_getReserveId_fuzz(uint256) (runs: 5000, μ: 55513, ~: 58208)
Logs:
  Bound result 2

[PASS] test_getReserveId_fuzz_multipleHubs(uint256) (runs: 5000, μ: 20595773, ~: 20598503)
Logs:
  Bound result 1

[PASS] test_getReserveId_fuzz_revertsWith_ReserveNotListed(uint256) (runs: 5000, μ: 34507, ~: 34495)
Logs:
  Bound result 3124043968137

[PASS] test_spoke_deploy() (gas: 5009443)
[PASS] test_spoke_deploy_reverts_on_InvalidConstructorInput() (gas: 747272)
[PASS] test_spoke_deploy_reverts_on_InvalidMaxUserReservesLimit() (gas: 749515)
[PASS] test_spoke_deploy_reverts_on_InvalidOracleDecimals() (gas: 749554)
[PASS] test_updateLiquidationConfig_fuzz_liqBonusConfig((uint128,uint64,uint16)) (runs: 5000, μ: 53202, ~: 53281)
Logs:
  Bound result 1708126567894405
  Bound result 12
  Bound result 340282366920938463462374607436975099147

[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_healthFactorForMaxBonus((uint128,uint64,uint16)) (runs: 5000, μ: 37040, ~: 37285)
Logs:
  Bound result 17448452200277446021
  Bound result 12
  Bound result 340282366920938463462374607436975099147

[PASS] test_updateLiquidationConfig_fuzz_revertsWith_InvalidLiquidationConfig_liquidationBonusFactor((uint128,uint64,uint16)) (runs: 5000, μ: 36784, ~: 36823)
Logs:
  Bound result 1708126567894405
  Bound result 55547
  Bound result 340282366920938463462374607436975099147

[PASS] test_updateLiquidationConfig_fuzz_targetHealthFactor(uint128) (runs: 5000, μ: 47094, ~: 47392)
Logs:
  Bound result 340282366920938463462374607431768731273

[PASS] test_updateLiquidationConfig_liqBonusConfig() (gas: 52256)
Logs:
  Bound result 900000000000000000
  Bound result 1000
  Bound result 1000000000000000000

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

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

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

[PASS] test_updateReserveConfig() (gas: 54681)
[PASS] test_updateReserveConfig_fuzz((uint24,bool,bool,bool,bool)) (runs: 5000, μ: 55940, ~: 55776)
Logs:
  Bound result 818

[PASS] test_updateReserveConfig_revertsWith_InvalidCollateralRisk() (gas: 40213)
[PASS] test_updateReserveConfig_revertsWith_ReserveNotListed() (gas: 36811)
[PASS] test_updateReservePriceSource() (gas: 239202)
[PASS] test_updateReservePriceSource_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 35334, ~: 35334)
[PASS] test_updateReservePriceSource_revertsWith_ReserveNotListed() (gas: 34875)
Suite result: ok. 29 passed; 0 failed; 0 skipped; finished in 37.18s (37.15s CPU time)

Ran 26 tests for tests/contracts/position-manager/TakerPositionManager/TakerPositionManager.t.sol:TakerPositionManagerTest
[PASS] test_approveBorrow_fuzz(address,uint256,uint256) (runs: 5000, μ: 63791, ~: 63570)
Logs:
  Bound result 0
  Bound result 2596000000000000000

[PASS] test_approveBorrow_revertsWith_SpokeNotRegistered() (gas: 17537)
[PASS] test_approveWithdraw_fuzz(address,uint256,uint256) (runs: 5000, μ: 63813, ~: 63592)
Logs:
  Bound result 0
  Bound result 2596000000000000000

[PASS] test_approveWithdraw_revertsWith_SpokeNotRegistered() (gas: 17492)
[PASS] test_borrowOnBehalfOf() (gas: 649822)
Logs:
  Bound result 5000000000000000000
  Bound result 5000000000000000000

[PASS] test_borrowOnBehalfOf_fuzz(uint256,uint256) (runs: 5000, μ: 670300, ~: 670428)
Logs:
  Bound result 68691281934999
  Bound result 618221537415092

[PASS] test_borrowOnBehalfOf_fuzz_noAllowanceDecrease(uint256) (runs: 5000, μ: 647820, ~: 647572)
Logs:
  Bound result 3124043968137

[PASS] test_borrowOnBehalfOf_fuzz_withInterest(uint256,uint256,uint256) (runs: 5000, μ: 807348, ~: 807339)
Logs:
  Bound result 11179
  Bound result 301
  Bound result 253

[PASS] test_borrowOnBehalfOf_revertsWith_InsufficientBorrowAllowance(uint256) (runs: 5000, μ: 312888, ~: 313097)
Logs:
  Bound result 3124043968137

[PASS] test_borrowOnBehalfOf_revertsWith_ReserveNotListed() (gas: 59187)
[PASS] test_borrowOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17468)
[PASS] test_multicall() (gas: 81468)
[PASS] test_renounceBorrowAllowance_fuzz(uint256) (runs: 5000, μ: 51494, ~: 51292)
Logs:
  Bound result 3124043968137

[PASS] test_renounceBorrowAllowance_noop_alreadyRenounced() (gas: 45520)
[PASS] test_renounceBorrowAllowance_revertsWith_SpokeNotRegistered() (gas: 17416)
[PASS] test_renounceWithdrawAllowance_fuzz(uint256) (runs: 5000, μ: 51580, ~: 51378)
Logs:
  Bound result 3124043968137

[PASS] test_renounceWithdrawAllowance_noop_alreadyRenounced() (gas: 45613)
[PASS] test_renounceWithdrawAllowance_revertsWith_SpokeNotRegistered() (gas: 17458)
[PASS] test_withdrawOnBehalfOf() (gas: 349363)
Logs:
  Bound result 100000000000000000000

[PASS] test_withdrawOnBehalfOf_fuzz(uint256) (runs: 5000, μ: 349086, ~: 349433)
Logs:
  Bound result 3124043968137

[PASS] test_withdrawOnBehalfOf_fuzz_allBalance(uint256) (runs: 5000, μ: 302609, ~: 302407)
Logs:
  Bound result 3124043968137

[PASS] test_withdrawOnBehalfOf_fuzz_allBalanceWithInterest(uint256,uint256) (runs: 5000, μ: 804728, ~: 804675)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_withdrawOnBehalfOf_fuzz_allBalance_noAllowanceDecreased(uint256) (runs: 5000, μ: 291700, ~: 291498)
Logs:
  Bound result 3124043968137

[PASS] test_withdrawOnBehalfOf_revertsWith_InsufficientWithdrawAllowance(uint256) (runs: 5000, μ: 196202, ~: 196411)
Logs:
  Bound result 3124043968137

[PASS] test_withdrawOnBehalfOf_revertsWith_ReserveNotListed() (gas: 59273)
[PASS] test_withdrawOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17528)
Suite result: ok. 26 passed; 0 failed; 0 skipped; finished in 83.60s (83.57s CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.Config.t.sol:TokenizationSpokeConfigTest
[PASS] test_configuration() (gas: 22860)
[PASS] test_constructor_asset_correctly_set() (gas: 58228)
[PASS] test_constructor_reverts_when_invalid_setup() (gas: 18939)
[PASS] test_setUp() (gas: 74802)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 31.32ms (1.17ms CPU time)

Ran 7 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.Constants.t.sol:TokenizationSpokeConstantsTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 14504)
[PASS] test_deposit_typeHash() (gas: 15206)
[PASS] test_eip712Domain() (gas: 19697)
[PASS] test_mint_typeHash() (gas: 15232)
[PASS] test_permit_typeHash() (gas: 15171)
[PASS] test_redeem_typeHash() (gas: 15126)
[PASS] test_withdraw_typeHash() (gas: 15129)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 32.43ms (2.32ms CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.DepositWithPermit.t.sol:TokenizationSpokeDepositWithPermitTest
[PASS] test_depositWithPermit() (gas: 244484)
[PASS] test_depositWithPermit_forwards_correct_call() (gas: 200254)
[PASS] test_depositWithPermit_ignores_permit_reverts() (gas: 189443)
[PASS] test_depositWithPermit_works_with_existing_allowance() (gas: 210030)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 33.41ms (3.15ms CPU time)

Ran 10 tests for tests/contracts/spoke/configuration/Spoke.DynamicConfig.Triggers.t.sol:SpokeDynamicConfigTriggersTest
[PASS] test_borrow_triggers_dynamicConfigUpdate() (gas: 1507027)
[PASS] test_liquidate_does_not_trigger_dynamicConfigUpdate() (gas: 1791484)
[PASS] test_repay_does_not_trigger_dynamicConfigUpdate() (gas: 1059510)
[PASS] test_supply_does_not_trigger_dynamicConfigUpdate() (gas: 1278177)
[PASS] test_updateUserDynamicConfig_doesHFCheck() (gas: 946006)
[PASS] test_updateUserDynamicConfig_reverts_when_not_authorized(address) (runs: 5000, μ: 1128564, ~: 1128564)
[PASS] test_updateUserDynamicConfig_triggers_dynamicConfigUpdate() (gas: 733635)
[PASS] test_updateUserDynamicConfig_updatesRP() (gas: 1455628)
[PASS] test_usingAsCollateral_triggers_dynamicConfigUpdate() (gas: 1532949)
[PASS] test_withdraw_triggers_dynamicConfigUpdate() (gas: 1537580)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 21.67s (21.64s CPU time)

Ran 21 tests for tests/contracts/spoke/configuration/Spoke.DynamicConfig.t.sol:SpokeDynamicConfigTest
[PASS] test_addDynamicReserveConfig() (gas: 79207)
[PASS] test_addDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_incompatible(uint16,uint32) (runs: 5000, μ: 46187, ~: 46353)
Logs:
  Bound result 9010
  Bound result 11100

[PASS] test_addDynamicReserveConfig_once() (gas: 509156)
[PASS] test_addDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 47779, ~: 47779)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 57244)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 40398)
[PASS] test_addDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 40861)
[PASS] test_addDynamicReserveConfig_revertsWith_MaximumDynamicConfigKeyReached() (gas: 43388)
[PASS] test_addDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28264)
[PASS] test_fuzz_addDynamicReserveConfig_spaced_dup_updates(bytes32) (runs: 5000, μ: 415634, ~: 446143)
[PASS] test_fuzz_addDynamicReserveConfig_trailing_order(bytes32) (runs: 5000, μ: 396756, ~: 430120)
[PASS] test_offboardReserve_existing_borrows_remain_unaffected() (gas: 1263471)
[PASS] test_updateDynamicReserveConfig() (gas: 1135624)
[PASS] test_updateDynamicReserveConfig_fuzz_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus(uint16,uint32) (runs: 5000, μ: 56905, ~: 57071)
Logs:
  Bound result 9010
  Bound result 11100

[PASS] test_updateDynamicReserveConfig_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 47780, ~: 47780)
[PASS] test_updateDynamicReserveConfig_revertsWith_DynamicConfigKeyUninitialized() (gas: 49027)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactor() (gas: 50058)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_collateralFactor() (gas: 50837)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidCollateralFactorAndMaxLiquidationBonus_liquidationBonus() (gas: 51029)
[PASS] test_updateDynamicReserveConfig_revertsWith_InvalidLiquidationFee() (gas: 51533)
[PASS] test_updateDynamicReserveConfig_revertsWith_ReserveNotListed() (gas: 28679)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 21.17s (21.14s CPU time)

Ran 5 tests for tests/gas/Spoke.Getters.gas.t.sol:SpokeGetters_Gas_Tests
[PASS] test_getUserAccountData() (gas: 23662)
[PASS] test_getUserAccountData_oneSupplies() (gas: 295196)
[PASS] test_getUserAccountData_twoSupplies() (gas: 537085)
[PASS] test_getUserAccountData_twoSupplies_oneBorrows() (gas: 1078969)
[PASS] test_getUserAccountData_twoSupplies_twoBorrows() (gas: 1661266)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 50.28ms (4.48ms CPU time)

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

[PASS] test_getLiquidationBonus_fuzz_configured(uint256,uint256,uint16,uint64) (runs: 5000, μ: 99712, ~: 100072)
Logs:
  Bound result 2
  Bound result 12010
  Bound result 9998
  Bound result 11792

[PASS] test_getLiquidationBonus_fuzz_notConfigured(uint256,uint256) (runs: 5000, μ: 77697, ~: 77926)
Logs:
  Bound result 4
  Bound result 100

[PASS] test_getLiquidationBonus_notConfigured() (gas: 78914)
Logs:
  Bound result 2
  Bound result 1000000000000000000

[PASS] test_premiumRayGetters() (gas: 1712901)
[PASS] test_protocol_getters() (gas: 303394)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.54s (2.50s CPU time)

Ran 4 tests for tests/contracts/spoke/liquidation/Spoke.LiquidationCall.Dust.t.sol:SpokeLiquidationCallDustTest
[PASS] test_collateralDust_min_debtToTarget() (gas: 18141762)
[PASS] test_debtToCover_exceeds_collateralValue() (gas: 18130095)
[PASS] test_dustColl_allowed() (gas: 17989115)
[PASS] test_dustDebt_allowed() (gas: 18120483)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 66.31ms (28.84ms CPU time)

Ran 14 tests for tests/contracts/spoke/liquidation/Spoke.LiquidationCall.Scenarios.t.sol:SpokeLiquidationCallScenariosTest
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRefreshPremium() (gas: 26375654)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRemove() (gas: 26245287)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubReportDeficit() (gas: 26358207)
[PASS] test_liquidationCall_revertsWith_ReentrancyGuardReentrantCall_hubRestore() (gas: 26321642)
[PASS] test_liquidationCall_scenario1() (gas: 4734080)
[PASS] test_liquidationCall_scenario2() (gas: 4742449)
[PASS] test_liquidationCall_scenario3() (gas: 3801221)
[PASS] test_liquidationCall_scenario4() (gas: 28133182)
[PASS] test_liquidationCall_scenario5() (gas: 3946715)
[PASS] test_liquidationCall_scenario6() (gas: 2711758)
[PASS] test_liquidationCall_scenario7() (gas: 3777633)
[PASS] test_liquidationCall_scenario8() (gas: 2540440)
[PASS] test_scenario_halted_asset() (gas: 27308236)
[PASS] test_scenario_halted_asset_with_deficit() (gas: 27151134)
Suite result: ok. 14 passed; 0 failed; 0 skipped; finished in 212.96ms (176.77ms CPU time)

Ran 26 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.ERC4626Compliance.t.sol:TokenizationSpokeERC4626ComplianceTest
[PASS] test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 5000, μ: 664136, ~: 600795)
Logs:
  Bound result 69
  Bound result 6305654

[PASS] test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 5000, μ: 664496, ~: 601229)
Logs:
  Bound result 69
  Bound result 6305654

[PASS] test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 5000, μ: 669970, ~: 60...*[Comment body truncated]*

@github-actions

github-actions Bot commented Apr 3, 2026

Copy link
Copy Markdown

♻️ Forge Gas Snapshots

🔕 Unchanged
Path Value
snapshots/ConfigPositionManager.Operations.json
renounceCanUpdateUserDynamicConfigPermission 28,037
renounceCanUpdateUserRiskPremiumPermission 27,971
renounceCanUpdateUsingAsCollateralPermission 27,994
renounceGlobalPermission 27,952
setCanSetUsingAsCollateralPermission 50,136
setCanUpdateUserDynamicConfigPermission 50,158
setCanUpdateUserRiskPremiumPermission 50,158
setGlobalPermission 50,110
setUsingAsCollateralOnBehalfOf 77,828
updateUserDynamicConfigOnBehalfOf 52,342
updateUserRiskPremiumOnBehalfOf 140,135
snapshots/GiverPositionManager.Operations.json
repayOnBehalfOf 176,497
supplyOnBehalfOf 143,072
snapshots/Hub.Operations.json
add 91,610
add: with transfer 112,942
draw 109,072
eliminateDeficit: full 77,541
eliminateDeficit: partial 87,146
mintFeeShares 87,668
payFee 75,720
refreshPremium 75,289
remove: full 80,564
remove: partial 85,702
reportDeficit 116,908
restore: full 81,488
restore: full - with transfer 188,919
restore: partial 90,198
restore: partial - with transfer 148,213
transferShares 74,540
snapshots/NativeTokenGateway.Operations.json
borrowNative 238,707
repayNative 172,321
supplyAsCollateralNative 165,113
supplyNative 139,728
withdrawNative: full 129,898
withdrawNative: partial 142,172
snapshots/PositionManagerBase.Operations.json
setSelfAsUserPositionManagerWithSig 75,041
snapshots/SignatureGateway.Operations.json
borrowWithSig 222,144
repayWithSig 192,513
setSelfAsUserPositionManagerWithSig 75,138
setUsingAsCollateralWithSig 85,380
supplyWithSig 155,914
updateUserDynamicConfigWithSig 63,113
updateUserRiskPremiumWithSig 61,995
withdrawWithSig 135,124
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 13,014
getUserAccountData: supplies: 1, borrows: 0 56,072
getUserAccountData: supplies: 2, borrows: 0 89,894
getUserAccountData: supplies: 2, borrows: 1 112,389
getUserAccountData: supplies: 2, borrows: 2 133,792
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first 199,509
borrow: second action, same reserve 179,375
liquidationCall (receiveShares): full 314,227
liquidationCall (receiveShares): partial 313,645
liquidationCall (reportDeficit): full 380,307
liquidationCall: full 332,763
liquidationCall: partial 332,181
permitReserve + repay (multicall) 169,938
permitReserve + supply (multicall) 151,663
permitReserve + supply + enable collateral (multicall) 166,114
repay: full 129,276
repay: partial 134,234
setUserPositionManagersWithSig: disable 46,772
setUserPositionManagersWithSig: enable 68,684
supply + enable collateral (multicall) 146,316
supply: 0 borrows, collateral disabled 127,753
supply: 0 borrows, collateral enabled 110,724
supply: second action, same reserve 110,653
updateUserDynamicConfig: 1 collateral 76,251
updateUserDynamicConfig: 2 collaterals 92,825
updateUserRiskPremium: 1 borrow 104,446
updateUserRiskPremium: 2 borrows 114,563
usingAsCollateral: 0 borrows, enable 59,616
usingAsCollateral: 1 borrow, disable 114,490
usingAsCollateral: 1 borrow, enable 42,504
usingAsCollateral: 2 borrows, disable 138,182
usingAsCollateral: 2 borrows, enable 42,516
withdraw: 0 borrows, full 135,058
withdraw: 0 borrows, partial 140,394
withdraw: 1 borrow, partial 169,591
withdraw: 2 borrows, partial 186,292
withdraw: non collateral 111,299
snapshots/Spoke.Operations.json
borrow: first 269,297
borrow: second action, same reserve 212,163
liquidationCall (receiveShares): full 347,124
liquidationCall (receiveShares): partial 346,542
liquidationCall (reportDeficit): full 372,507
liquidationCall: full 365,660
liquidationCall: partial 365,078
permitReserve + repay (multicall) 166,334
permitReserve + supply (multicall) 151,663
permitReserve + supply + enable collateral (multicall) 166,114
repay: full 123,355
repay: partial 142,713
setUserPositionManagersWithSig: disable 46,772
setUserPositionManagersWithSig: enable 68,684
supply + enable collateral (multicall) 146,316
supply: 0 borrows, collateral disabled 127,753
supply: 0 borrows, collateral enabled 110,724
supply: second action, same reserve 110,653
updateUserDynamicConfig: 1 collateral 76,251
updateUserDynamicConfig: 2 collaterals 92,825
updateUserRiskPremium: 1 borrow 158,658
updateUserRiskPremium: 2 borrows 210,210
usingAsCollateral: 0 borrows, enable 59,616
usingAsCollateral: 1 borrow, disable 168,699
usingAsCollateral: 1 borrow, enable 42,504
usingAsCollateral: 2 borrows, disable 241,825
usingAsCollateral: 2 borrows, enable 42,516
withdraw: 0 borrows, full 135,058
withdraw: 0 borrows, partial 140,394
withdraw: 1 borrow, partial 221,298
withdraw: 2 borrows, partial 270,470
withdraw: non collateral 111,299
snapshots/TakerPositionManager.Operations.json
approveBorrow 49,807
approveBorrowWithSig 65,689
approveWithdraw 49,816
approveWithdrawWithSig 65,643
borrowOnBehalfOf 332,512
renounceBorrowAllowance 27,929
renounceWithdrawAllowance 27,983
withdrawOnBehalfOf: full 127,209
withdrawOnBehalfOf: partial 138,811
snapshots/TokenizationSpoke.Operations.json
deposit 118,614
depositWithSig 129,518
mint 118,251
mintWithSig 129,130
permit 62,766
redeem: on behalf, full 95,212
redeem: on behalf, partial 119,015
redeem: self, full 94,282
redeem: self, partial 113,482
redeemWithSig 128,864
withdraw: on behalf, full 95,646
withdraw: on behalf, partial 119,557
withdraw: self, full 94,824
withdraw: self, partial 114,024
withdrawWithSig 129,405

@github-actions

github-actions Bot commented Apr 3, 2026

Copy link
Copy Markdown

Forge Build Sizes

🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
AaveOracle 2,396 2,529 22,180 46,623
AaveV4AaveOracleDeployProcedure 21 47 24,555 49,105
AaveV4AccessManagerEnumerableDeployProcedure 21 47 24,555 49,105
AaveV4AccessManagerRolesProcedure 44 94 24,532 49,058
AaveV4AuthorityBatch 145 24,028 24,431 25,124
AaveV4ConfigEngine 9,079 9,107 15,497 40,045
AaveV4ConfigPositionManagerDeployProcedure 21 47 24,555 49,105
AaveV4ConfiguratorBatch 150 27,491 24,426 21,661
AaveV4DeployBase 44 94 24,532 49,058
AaveV4DeployOrchestration 123 173 24,453 48,979
AaveV4DeployProcedureBase 21 47 24,555 49,105
AaveV4GatewayBatch 150 23,513 24,426 25,639
AaveV4GiverPositionManagerDeployProcedure 21 47 24,555 49,105
AaveV4HubConfiguratorDeployProcedure 21 47 24,555 49,105
AaveV4HubConfiguratorRolesProcedure 44 94 24,532 49,058
AaveV4HubDeployProcedure 21 47 24,555 49,105
AaveV4HubInstanceBatch 215 8,845 24,361 40,307
AaveV4HubRolesProcedure 44 94 24,532 49,058
AaveV4InterestRateStrategyDeployProcedure 21 47 24,555 49,105
AaveV4NativeTokenGatewayDeployProcedure 21 47 24,555 49,105
AaveV4PayloadSize 11,289 11,462 13,287 37,690
AaveV4PositionManagerBatch 215 35,572 24,361 13,580
AaveV4SignatureGatewayDeployProcedure 21 47 24,555 49,105
AaveV4SpokeConfiguratorDeployProcedure 21 47 24,555 49,105
AaveV4SpokeConfiguratorRolesProcedure 44 94 24,532 49,058
AaveV4SpokeDeployProcedure 21 47 24,555 49,105
AaveV4SpokeInstanceBatch 215 9,395 24,361 39,757
AaveV4SpokeRolesProcedure 44 94 24,532 49,058
AaveV4TakerPositionManagerDeployProcedure 21 47 24,555 49,105
AaveV4TestOrchestrationWrapper 2,990 3,018 21,586 46,134
AaveV4TokenizationSpokeBatch 150 21,572 24,426 27,580
AaveV4TokenizationSpokeDeployProcedure 21 47 24,555 49,105
AaveV4TreasurySpokeBatch 145 9,715 24,431 39,437
AaveV4TreasurySpokeDeployProcedure 21 47 24,555 49,105
AccessManager 12,985 14,210 11,591 34,942
AccessManagerEngine 4,426 4,478 20,150 44,674
AccessManagerEnumerable 21,008 22,847 3,568 26,305
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,626 2,811 21,950 46,341
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
BatchReports 44 94 24,532 49,058
BytecodeHelper 44 94 24,532 49,058
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
ConfigData 44 94 24,532 49,058
ConfigPermissionsMap 44 94 24,532 49,058
ConfigPermissionsMapWrapper 1,001 1,029 23,575 48,123
ConfigPositionManager 13,555 14,109 11,021 35,043
Create2Utils 134 184 24,442 48,968
Create2UtilsWrapper 6,162 6,190 18,414 42,962
DeployConstants 133 183 24,443 48,969
Dummy 21 47 24,555 49,105
ECDSA 44 94 24,532 49,058
ECDSA.spoke 16 44 24,560 49,108
EIP712Hash (src/position-manager/libraries/EIP712Hash.sol) 771 823 23,805 48,329
EIP712Hash (src/spoke/libraries/EIP712Hash.sol) 441 493 24,135 48,659
EIP712Hash.spoke 491 521 24,085 48,631
EIP712Types 44 94 24,532 49,058
ERC1967Proxy 135 891 24,441 48,261
ERC1967Utils 44 94 24,532 49,058
EngineFlags 44 94 24,532 49,058
EngineFlagsHarness 339 367 24,237 48,785
EnumerableSet 44 94 24,532 49,058
EnumerableSet.hub 16 44 24,560 49,108
Errors 44 94 24,532 49,058
ExtSloadWrapper 394 422 24,182 48,730
GiverPositionManager 6,924 7,199 17,652 41,953
Hashes 44 94 24,532 49,058
HubActions 44 94 24,532 49,058
HubConfigurator 13,833 14,067 10,743 35,085
HubEngine 13,521 13,573 11,055 35,579
HubInstance 24,353 24,560 223 24,592
InputUtils 44 94 24,532 49,058
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 12,519 12,571 12,057 36,581
LiquidationLogic.spoke 9,835 9,867 14,741 39,285
Logger 7,000 7,853 17,576 41,299
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
MetadataLogger 10,599 11,457 13,977 37,695
MinimalAaveV4Payload 11,389 11,562 13,187 37,590
MockERC1271Wallet 828 962 23,748 48,190
MockERC20 2,540 3,006 22,036 46,146
MockGovernanceExecutor 896 1,027 23,680 48,125
MockNoncesKeyed 858 886 23,718 48,266
MockPriceFeed 538 1,187 24,038 47,965
MockReentrantCaller 882 1,083 23,694 48,069
MockSkimSpoke 1,116 1,275 23,460 47,877
MockTokenizationListingPayload 11,976 12,380 12,600 36,772
NativeTokenGateway 8,787 9,204 15,789 39,948
NoncesKeyed 644 672 23,932 48,480
NoncesKeyed.spoke 387 413 24,189 48,739
OrchestrationReports 44 94 24,532 49,058
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
PositionManagerBaseWrapper 5,100 5,375 19,476 43,777
PositionManagerEngine 1,021 1,073 23,555 48,079
PositionManagerNoMulticall 5,036 5,311 19,540 43,841
PositionStatusMap 44 94 24,532 49,058
PositionStatusMap.spoke 16 44 24,560 49,108
PositionStatusMapWrapper 3,341 3,369 21,235 45,783
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
ProxyHelper 44 94 24,532 49,058
RescuableWrapper 973 1,107 23,603 48,045
ReserveFlagsMap 44 94 24,532 49,058
ReserveFlagsMap.spoke 16 44 24,560 49,108
ReserveFlagsMapWrapper 928 956 23,648 48,196
Roles 325 377 24,251 48,775
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 12,208 12,749 12,368 36,403
SlotDerivation 44 94 24,532 49,058
SlotDerivation.hub 16 44 24,560 49,108
SlotDerivation.spoke 16 44 24,560 49,108
SpokeActions 44 94 24,532 49,058
SpokeConfigurator 11,825 12,059 12,751 37,093
SpokeEngine 8,730 8,782 15,846 40,370
SpokeInstance 24,291 25,098 285 24,054
SpokeUtils 96 146 24,480 49,006
SpokeUtils.spoke 71 99 24,505 49,053
SpokeUtilsWrapper 1,827 1,855 22,749 47,297
StorageSlot 44 94 24,532 49,058
StorageSlot.hub 16 44 24,560 49,108
StorageSlot.spoke 16 44 24,560 49,108
TakerPositionManager 12,153 12,707 12,423 36,445
TestTokensBatch 388 6,337 24,188 42,815
TestTypes 44 94 24,532 49,058
TestnetERC20 3,649 4,525 20,927 44,627
TestnetERC20DeployProcedure 21 47 24,555 49,105
Time 44 94 24,532 49,058
TokenizationSpokeDeployer 23,031 23,083 1,545 26,069
TokenizationSpokeInstance 13,627 14,953 10,949 34,199
TransientSlot 44 94 24,532 49,058
TransientSlot.spoke 16 44 24,560 49,108
TransparentUpgradeableProxy 1,419 4,078 23,157 45,074
TreasurySpokeInstance 4,004 4,218 20,572 44,934
UserPositionUtils 44 94 24,532 49,058
UserPositionUtils.spoke 16 44 24,560 49,108
UserPositionUtilsWrapper 3,263 3,291 21,313 45,861
WETH9 2,148 2,614 22,428 46,538
WETHDeployProcedure 21 47 24,555 49,105
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,514 1,542 23,062 47,610

@yan-man yan-man changed the title docs: tech docs docs: consolidated tech docs Apr 3, 2026
Comment thread docs/Glossary.md

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

confirmation on terminology for "standard spokes"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

if we agee that "Standard Spoke" is the the official name for the standard Spoke. I'll update all docs to have both words capitalized on the first letter

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

dont feel too strongly, works for me as long as we're consistent

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I asked cc @EthWarrior his thoughts here too

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

He says Canonical is good, I like it too

Comment thread docs/features/SiloedBorrowing.md Outdated

@yan-man yan-man Apr 6, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Documentation should justify why multiple Hub assets for the same underlying token are allowed and how to reason about them

note from before (audit report)

CanonicalJP and others added 6 commits April 6, 2026 20:44
…t but receiving 0 collateral (LiquidationEngine.md)
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
Co-authored-by: YBM <31329384+yan-man@users.noreply.github.com>
Co-authored-by: CheyenneAtapour <CheyenneAtapour@gmail.com>
@CheyenneAtapour
CheyenneAtapour marked this pull request as ready for review April 9, 2026 19:26
Copilot AI review requested due to automatic review settings April 9, 2026 19:26

This comment was marked as outdated.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/Glossary.md Outdated
Comment thread docs/features/LiquidationEngine.md
@CanonicalJP
CanonicalJP requested review from avniculae and removed request for CanonicalJP May 21, 2026 17:37
Kogaroshi
Kogaroshi previously approved these changes Jun 8, 2026
defispartan
defispartan previously approved these changes Jul 30, 2026
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.

7 participants