Skip to content

feat : deploy & config verification script#1268

Draft
Kogaroshi wants to merge 4 commits intorft/payload-enginefrom
feat/deploy-verifications
Draft

feat : deploy & config verification script#1268
Kogaroshi wants to merge 4 commits intorft/payload-enginefrom
feat/deploy-verifications

Conversation

@Kogaroshi
Copy link
Contributor

Python script taking in input the deploy report and the configuration file, and verifies :

  • that correct contracts were deployed, and that onchain bytecode matches expected one
  • that all the configs are correctly applied to Hubs & Spokes

@github-actions
Copy link

github-actions bot commented Mar 16, 2026

🌈 Test Results
No files changed, compilation skipped

Ran 10 tests for tests/deployments/batches/AaveV4TokenizationSpokeBatch.t.sol:AaveV4TokenizationSpokeBatchTest
[PASS] test_differentSaltProducesDifferentAddress() (gas: 19778)
[PASS] test_getReport() (gas: 7747)
[PASS] test_revert_emptyShareName() (gas: 13533)
[PASS] test_revert_emptyShareSymbol() (gas: 13558)
[PASS] test_revert_invalidUnderlying() (gas: 15413)
[PASS] test_revert_zeroHub() (gas: 16289)
[PASS] test_revert_zeroSpokeProxyAdminOwner() (gas: 14177)
[PASS] test_tokenizationSpokeAsset() (gas: 15524)
[PASS] test_tokenizationSpokeAssetId() (gas: 15378)
[PASS] test_tokenizationSpokeHub() (gas: 15468)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 17.71ms (2.36ms CPU time)

Ran 3 tests for tests/unit/Spoke/Spoke.Access.t.sol:SpokeAccessTest
[PASS] testAccess_change_authority() (gas: 3173995)
[PASS] testAccess_hub_functions_callable_by_spokes() (gas: 569508)
[PASS] testAccess_spoke_admin_config_access() (gas: 491646)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 34.85ms (2.74ms CPU time)

Ran 3 tests for tests/deployments/procedures/deploy/spoke/AaveV4TokenizationSpokeDeployProcedure.t.sol:AaveV4TokenizationSpokeDeployProcedureTest
[PASS] test_deployUpgradeableTokenizationSpokeInstance() (gas: 3638107)
[PASS] test_deployUpgradeableTokenizationSpokeInstance_reverts() (gas: 36233)
[PASS] test_deployUpgradeableTokenizationSpokeInstance_revertsWith_failedCreate2FactoryCall() (gas: 96330)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 8.90ms (1.16ms CPU time)

Ran 5 tests for tests/deployments/batches/AaveV4TreasurySpokeBatch.t.sol:AaveV4TreasurySpokeBatchTest
[PASS] test_differentSaltProducesDifferentAddress() (gas: 9112)
[PASS] test_getReport() (gas: 5245)
[PASS] test_proxyAdminOwner() (gas: 12960)
[PASS] test_revert_zeroOwner() (gas: 3742)
[PASS] test_treasurySpokeOwner() (gas: 17535)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 4.83ms (670.62µs CPU time)

Ran 2 tests for tests/deployments/procedures/deploy/spoke/AaveV4TreasurySpokeDeployProcedure.t.sol:AaveV4TreasurySpokeDeployProcedureTest
[PASS] test_deployTreasurySpoke() (gas: 1632108)
[PASS] test_deployTreasurySpoke_reverts() (gas: 10585)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.54ms (313.20µs CPU time)

Ran 19 tests for tests/unit/AaveOracle.t.sol:AaveOracleTest
[PASS] test_constructor() (gas: 527185)
[PASS] test_decimals() (gas: 8313)
[PASS] test_fuzz_constructor(uint8) (runs: 5000, μ: 528596, ~: 528916)
Logs:
  Bound result 1

[PASS] test_getReservePrice() (gas: 46772)
[PASS] test_getReservePrice_revertsWith_InvalidPrice() (gas: 44558)
[PASS] test_getReservePrice_revertsWith_InvalidSource() (gas: 10876)
[PASS] test_getReservePrices() (gas: 76745)
[PASS] test_getReservePrices_revertsWith_InvalidSource() (gas: 48933)
[PASS] test_getReserveSource() (gas: 47161)
[PASS] test_setReserveSource() (gas: 44248)
[PASS] test_setReserveSource_revertsWith_InvalidPrice() (gas: 97405)
[PASS] test_setReserveSource_revertsWith_InvalidSource() (gas: 17138)
[PASS] test_setReserveSource_revertsWith_InvalidSourceDecimals() (gas: 16953)
[PASS] test_setReserveSource_revertsWith_OnlySpoke() (gas: 12996)
[PASS] test_setReserveSource_revertsWith_OracleMismatch() (gas: 6034106)
[PASS] test_setSpoke() (gas: 5550901)
[PASS] test_setSpoke_revertsWith_InvalidAddress() (gas: 10870)
[PASS] test_setSpoke_revertsWith_OnlyDeployer(address) (runs: 5000, μ: 13486, ~: 13486)
[PASS] test_setSpoke_revertsWith_SpokeAlreadySet() (gas: 15102)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 720.63ms (680.89ms 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 4.34ms (101.59µs CPU time)

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

Ran 4 tests for tests/deployments/procedures/deploy/roles/AaveV4AccessManagerRolesProcedure.t.sol:AaveV4AccessManagerRolesProcedureTest
[PASS] test_grantAccessManagerAdminRole() (gas: 177545)
[PASS] test_grantAccessManagerAdminRole_reverts() (gas: 14128)
[PASS] test_replaceDefaultAdminRole() (gas: 144634)
[PASS] test_replaceDefaultAdminRole_reverts() (gas: 178663)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.02ms (864.11µs CPU time)

Ran 5 tests for tests/deployments/batches/AaveV4AuthorityBatch.t.sol:AaveV4AuthorityBatchTest
[PASS] test_adminRoleMemberTracking() (gas: 21933)
[PASS] test_differentSaltProducesDifferentAddress() (gas: 14349)
[PASS] test_getReport() (gas: 19882)
[PASS] test_noOtherRolesInitialized() (gas: 15869)
[PASS] test_revert_zeroAdmin() (gas: 3765)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 5.36ms (917.17µs CPU time)

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

[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 5000, μ: 468150, ~: 477399)
Logs:
  Bound result 10349
  Bound result 1550
  Bound result 750000000
  Bound result 1643

[PASS] test_refreshPremium_haltedSpokesAllowed() (gas: 121536)
[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 898586)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 5000, μ: 460725, ~: 461309)
Logs:
  Bound result 3124043968137

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

[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 853771)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 875136)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 58974)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 920790)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 710944)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 20.71s (20.67s CPU time)

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

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

[PASS] test_grantRole() (gas: 315933)
[PASS] test_grantRole_fuzz(uint64,uint256) (runs: 5000, μ: 913976, ~: 920059)
Logs:
  Bound result 5

[PASS] test_renounceRole() (gas: 321091)
[PASS] test_renounceRole_shouldNotTrack() (gas: 24510)
[PASS] test_revokeRole() (gas: 323262)
[PASS] test_revokeRole_shouldNotTrack() (gas: 33158)
[PASS] test_setRoleAdmin_fuzz_trackAdminRoles_multipleRoles_multipleAdmins(uint256) (runs: 5000, μ: 2117294, ~: 2176942)
Logs:
  Bound result 12

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

[PASS] test_setRoleAdmin_trackAdminOfRoles() (gas: 606166)
[PASS] test_setRoleAdmin_trackAdminOfRoles_changeAdminRole() (gas: 577193)
[PASS] test_setRoleAdmin_trackAdminRoles() (gas: 602394)
[PASS] test_setRoleAdmin_trackRolesAndTrackAdminRoles() (gas: 378260)
[PASS] test_setRoleGuardian_trackRoles() (gas: 262021)
[PASS] test_setTargetFunctionRole() (gas: 489773)
[PASS] test_setTargetFunctionRole_multipleTargets() (gas: 1181595)
[PASS] test_setTargetFunctionRole_removeTarget() (gas: 1018326)
[PASS] test_setTargetFunctionRole_skipAddPublicRole() (gas: 206355)
[PASS] test_setTargetFunctionRole_skipAddToAdminRole() (gas: 34319)
[PASS] test_setTargetFunctionRole_withReplace() (gas: 672090)
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 22.42s (22.42s CPU time)

Ran 22 tests for tests/unit/AssetInterestRateStrategy.t.sol:AssetInterestRateStrategyTest
[PASS] test_calculateInterestRate_AtMaxUtilization() (gas: 24621)
Logs:
  Bound result 10000
  Bound result 452221174671990369444601363699

[PASS] test_calculateInterestRate_AtOptimalPoint() (gas: 24281)
Logs:
  Bound result 2000
  Bound result 452221174671990369444601363699

[PASS] test_calculateInterestRate_LeftToOptimalPoint(uint256) (runs: 5000, μ: 24187, ~: 24330)
Logs:
  Bound result 137
  Bound result 252173843969976304268974536488

[PASS] test_calculateInterestRate_RightToOptimalPoint(uint256) (runs: 5000, μ: 25300, ~: 25349)
Logs:
  Bound result 8137
  Bound result 252173843969976304268974536488

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

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

[PASS] test_calculateInterestRate_revertsWith_InterestRateDataNotSet() (gas: 11203)
[PASS] test_deploy_revertsWith_InvalidAddress() (gas: 36224)
[PASS] test_getBaseDrawnRate() (gas: 14769)
[PASS] test_getInterestRateData() (gas: 19268)
[PASS] test_getMaxDrawnRate() (gas: 15234)
[PASS] test_getOptimalUsageRatio() (gas: 14727)
[PASS] test_getRateGrowthAfterOptimal() (gas: 14791)
[PASS] test_getRateGrowthBeforeOptimal() (gas: 14791)
[PASS] test_maxDrawnRate() (gas: 8314)
[PASS] test_maxOptimalRatio() (gas: 8357)
[PASS] test_minOptimalRatio() (gas: 8299)
[PASS] test_setInterestRateData() (gas: 68941)
[PASS] test_setInterestRateData_revertsWith_InvalidMaxDrawnRate() (gas: 41761)
[PASS] test_setInterestRateData_revertsWith_InvalidOptimalUsageRatio() (gas: 42401)
[PASS] test_setInterestRateData_revertsWith_InvalidRateData() (gas: 35290)
[PASS] test_setInterestRateData_revertsWith_OnlyHub() (gas: 23496)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 1.28s (1.25s CPU time)

Ran 6 tests for tests/unit/position-manager/libraries/ConfigPermissions.t.sol:ConfigPermissionsTests
[PASS] test_constants() (gas: 12052)
[PASS] test_getConfigPermissionValues(uint8) (runs: 5000, μ: 13682, ~: 13682)
[PASS] test_setCanSetUsingAsCollateral_fuzz(uint8,bool) (runs: 5000, μ: 10623, ~: 10611)
[PASS] test_setCanUpdateUserDynamicConfig_fuzz(uint8,bool) (runs: 5000, μ: 10602, ~: 10590)
[PASS] test_setCanUpdateUserRiskPremium_fuzz(uint8,bool) (runs: 5000, μ: 10612, ~: 10600)
[PASS] test_setFullPermissions_fuzz(bool) (runs: 5000, μ: 13124, ~: 13134)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.05s (1.05s CPU time)

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

[PASS] test_remove_all_with_interest() (gas: 361829)
[PASS] test_remove_fuzz(uint256,uint256) (runs: 5000, μ: 204450, ~: 204507)
Logs:
  Bound result 4
  Bound result 100

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

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

[PASS] test_remove_fuzz_multi_spoke_with_interest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 412493, ~: 412989)
Logs:
  Bound result 10214
  Bound result 5441
  Bound result 260
  Bound result 12805

[PASS] test_remove_revertsWith_InsufficientLiquidity() (gas: 155153)
[PASS] test_remove_revertsWith_InsufficientLiquidity_exceeding_added_amount() (gas: 144228)
[PASS] test_remove_revertsWith_InsufficientLiquidity_zero_added() (gas: 21376)
[PASS] test_remove_revertsWith_InvalidAddress() (gas: 16471)
[PASS] test_remove_revertsWith_InvalidAmount() (gas: 18628)
[PASS] test_remove_revertsWith_SpokeHalted() (gas: 62005)
[PASS] test_remove_revertsWith_SpokeNotActive() (gas: 61914)
[PASS] test_remove_revertsWith_underflow_exceeding_added_amount() (gas: 178890)
[PASS] test_remove_revertsWtih_underflow_one_extra_wei() (gas: 354337)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 30.29s (30.26s CPU time)

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

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

[PASS] test_reportDeficit_fuzz_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 677997, ~: 678742)
Logs:
  Bound result 11037
  Bound result 12075
  Bound result 6031
  Bound result 750000000

[PASS] test_reportDeficit_halted() (gas: 265181)
[PASS] test_reportDeficit_revertsWith_InvalidAmount() (gas: 22761)
[PASS] test_reportDeficit_revertsWith_SpokeNotActive(address) (runs: 5000, μ: 33938, ~: 33938)
[PASS] test_reportDeficit_with_premium() (gas: 677102)
Logs:
  Bound result 10000000000
  Bound result 31536000
  Bound result 5000000000
  Bound result 0

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

Ran 26 tests for tests/unit/position-manager/ConfigPositionManager/ConfigPositionManager.Permit.t.sol:ConfigPositionManagerPermitTest
[PASS] test_DOMAIN_SEPARATOR() (gas: 2660213)
[PASS] test_eip712Domain() (gas: 2665410)
[PASS] test_setCanSetUsingAsCollateralPermissionPermit_typeHash() (gas: 9929)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158475, ~: 157641)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 144961, ~: 142564)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28199)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32569)
[PASS] test_setCanSetUsingAsCollateralPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 76385)
[PASS] test_setCanUpdateUserDynamicConfigPermissionPermit_typeHash() (gas: 9863)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158481, ~: 157647)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 144938, ~: 142541)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28190)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32549)
[PASS] test_setCanUpdateUserDynamicConfigPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 76398)
[PASS] test_setCanUpdateUserRiskPremiumPermissionPermit_typeHash() (gas: 9949)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 158458, ~: 157624)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 144873, ~: 142476)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28189)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32560)
[PASS] test_setCanUpdateUserRiskPremiumPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 76330)
[PASS] test_setGlobalPermissionPermit_typeHash() (gas: 9935)
[PASS] test_setGlobalPermissionWithSig_fuzz(address,bool) (runs: 5000, μ: 162732, ~: 162093)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 144899, ~: 142502)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28176)
[PASS] test_setGlobalPermissionWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 32555)
[PASS] test_setGlobalPermissionWithSig_revertsWith_SpokeNotRegistered() (gas: 76382)
Suite result: ok. 26 passed; 0 failed; 0 skipped; finished in 49.54s (49.51s CPU time)

Ran 39 tests for tests/unit/position-manager/ConfigPositionManager/ConfigPositionManager.t.sol:ConfigPositionManagerTest
[PASS] test_multicall() (gas: 84518)
[PASS] test_renounceCanUpdateUserDynamicConfigPermission() (gas: 41286)
[PASS] test_renounceCanUpdateUserDynamicConfigPermission_revertsWith_SpokeNotRegistered() (gas: 17489)
[PASS] test_renounceCanUpdateUserRiskPremiumPermission() (gas: 41198)
[PASS] test_renounceCanUpdateUserRiskPremiumPermission_revertsWith_SpokeNotRegistered() (gas: 17380)
[PASS] test_renounceCanUpdateUsingAsCollateralPermission() (gas: 41215)
[PASS] test_renounceCanUpdateUsingAsCollateralPermission_revertsWith_SpokeNotRegistered() (gas: 17424)
[PASS] test_renounceGlobalPermission() (gas: 42252)
[PASS] test_renounceGlobalPermission_revertsWith_SpokeNotRegistered() (gas: 17445)
[PASS] test_setCanSetUsingAsCollateralPermission() (gas: 54009)
[PASS] test_setCanSetUsingAsCollateralPermission_remove() (gas: 41304)
[PASS] test_setCanSetUsingAsCollateralPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17885)
[PASS] test_setCanSetUsingAsCollateralPermission_revertsWith_SpokeNotRegistered() (gas: 17512)
[PASS] test_setCanUpdateUserDynamicConfigPermission() (gas: 54054)
[PASS] test_setCanUpdateUserDynamicConfigPermission_remove() (gas: 41359)
[PASS] test_setCanUpdateUserDynamicConfigPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17959)
[PASS] test_setCanUpdateUserDynamicConfigPermission_revertsWith_SpokeNotRegistered() (gas: 17576)
[PASS] test_setCanUpdateUserRiskPremiumPermission() (gas: 54033)
[PASS] test_setCanUpdateUserRiskPremiumPermission_remove() (gas: 41341)
[PASS] test_setCanUpdateUserRiskPremiumPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17916)
[PASS] test_setCanUpdateUserRiskPremiumPermission_revertsWith_SpokeNotRegistered() (gas: 17557)
[PASS] test_setGlobalPermission() (gas: 55612)
[PASS] test_setGlobalPermission_removeAllPermissions() (gas: 42393)
[PASS] test_setGlobalPermission_removePreviousPermissions() (gas: 46538)
[PASS] test_setGlobalPermission_revertsWith_InvalidAddress_zeroDelegatee() (gas: 17869)
[PASS] test_setGlobalPermission_revertsWith_SpokeNotRegistered() (gas: 17510)
[PASS] test_setGlobalPermission_setThenRemove() (gas: 49972)
[PASS] test_setUsingAsCollateralOnBehalfOf_fuzz_withGlobalPermission(uint256,bool) (runs: 5000, μ: 105714, ~: 110551)
Logs:
  Bound result 2

[PASS] test_setUsingAsCollateralOnBehalfOf_fuzz_withPermission(uint256,bool) (runs: 5000, μ: 105752, ~: 110589)
Logs:
  Bound result 2

[PASS] test_setUsingAsCollateralOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 22173)
[PASS] test_setUsingAsCollateralOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17530)
[PASS] test_updateUserDynamicConfigOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 19930)
[PASS] test_updateUserDynamicConfigOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17422)
[PASS] test_updateUserDynamicConfigOnBehalfOf_withGlobalPermission() (gas: 69720)
[PASS] test_updateUserDynamicConfigOnBehalfOf_withPermission() (gas: 69844)
[PASS] test_updateUserRiskPremiumOnBehalfOf_revertsWith_CallerNotAllowed() (gas: 19909)
[PASS] test_updateUserRiskPremiumOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 17469)
[PASS] test_updateUserRiskPremiumOnBehalfOf_withGlobalPermission() (gas: 809271)
[PASS] test_updateUserRiskPremiumOnBehalfOf_withPermission() (gas: 809306)
Suite result: ok. 39 passed; 0 failed; 0 skipped; finished in 10.85s (10.81s CPU time)

Ran 3 tests for tests/unit/Hub/Hub.Rescue.t.sol:HubRescueTest
[PASS] test_cannot_rescue_liquidity_fee_reverts_with_InsufficientTransferred() (gas: 265867)
[PASS] test_rescue_fuzz_with_interest(uint256,uint256) (runs: 5000, μ: 508049, ~: 508006)
Logs:
  Bound result 6166668
  Bound result 2540

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

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

Ran 11 tests for tests/deployments/utils/libraries/Create2Utils.t.sol:Create2UtilsTest
[PASS] testAddressFromLast20Bytes_fuzz(bytes32) (runs: 5000, μ: 8826, ~: 8826)
[PASS] testComputeCreate2Address_fuzz(bytes32,bytes) (runs: 5000, μ: 12061, ~: 12041)
[PASS] testComputeCreate2Address_fuzz(bytes32,bytes32) (runs: 5000, μ: 10699, ~: 10699)
[PASS] testCreate2Deploy_fuzz(bytes32) (runs: 5000, μ: 51562, ~: 51562)
[PASS] testCreate2Deploy_revertsWith_contractAlreadyDeployed(bytes32) (runs: 5000, μ: 52279, ~: 52279)
[PASS] testCreate2Deploy_revertsWith_create2AddressDerivationFailure(bytes32) (runs: 5000, μ: 13800, ~: 13800)
[PASS] testCreate2Deploy_revertsWith_failedCreate2FactoryCall(bytes32) (runs: 5000, μ: 1048773113209, ~: 1048773113129)
[PASS] testCreate2Deploy_revertsWith_missingCreate2Factory() (gas: 11694)
[PASS] testIsContractDeployed() (gas: 44966)
[PASS] testIsContractDeployed_fuzz(address) (runs: 5000, μ: 13618, ~: 13618)
[PASS] testProxify_fuzz(bytes32,address) (runs: 5000, μ: 749048, ~: 749048)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 3.35s (3.35s CPU time)

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

[PASS] test_restore_full_amount_with_interest_and_premium() (gas: 677404)
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, μ: 365356, ~: 365451)
Logs:
  Bound result 615514462186775432459
  Bound result 571193127101173104469
  Bound result 173721804

[PASS] test_restore_fuzz_full_amount_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 668232, ~: 679465)
Logs:
  Bound result 23066
  Bound result 5405
  Bound result 750000000
  Bound result 805

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

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 642058, ~: 642302)
Logs:
  Bound result 23066
  Bound result 5405
  Bound result 750000000
  Bound result 805

[PASS] test_restore_one_share_delta_increase_revertsWith_InvalidPremiumChange() (gas: 211618)
[PASS] test_restore_partial_drawn() (gas: 322405)
[PASS] test_restore_partial_same_block() (gas: 322531)
[PASS] test_restore_premiumDeltas_twoWeiIncrease_realizedDelta() (gas: 232328)
[PASS] test_restore_revertsWith_InsufficientTransferred() (gas: 252128)
[PASS] test_restore_revertsWith_InvalidAmount_zero() (gas: 58090)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumIncrease() (gas: 218581)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumSharesIncrease() (gas: 218581)
[PASS] test_restore_revertsWith_SpokeHalted() (gas: 99279)
[PASS] test_restore_revertsWith_SpokeNotActive_whenPaused() (gas: 181407)
[PASS] test_restore_revertsWith_SurplusDrawnRestored() (gas: 358216)
[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest() (gas: 243249)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 15768000

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

[PASS] test_restore_revertsWith_SurplusPremiumRayRestored() (gas: 508544)
[PASS] test_restore_revertsWith_underflow_offsetIncrease() (gas: 227438)
[PASS] test_restore_tooMuchDrawn_revertsWith_SurplusDrawnRestored() (gas: 213936)
[PASS] test_restore_when_asset_caps_reset() (gas: 435308)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 18.25s (18.22s CPU time)

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

Ran 1 test for tests/unit/Spoke/Spoke.AccrueInterest.Scenario.t.sol:SpokeAccrueInterestScenarioTest
[PASS] test_accrueInterest_fuzz_RPBorrowAndSkipTime_twoActions((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint40) (runs: 5000, μ: 5587056, ~: 5437484)
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 131.27s (131.24s CPU time)

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

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

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

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

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

Ran 10 tests for tests/unit/Hub/Hub.SpokeConfig.t.sol:HubSpokeConfigTest
[PASS] test_add_active_halted_scenarios() (gas: 301722)
[PASS] test_draw_active_halted_scenarios() (gas: 305378)
[PASS] test_eliminateDeficit_active_halted_scenarios() (gas: 831578)
[PASS] test_mintFeeShares_active_halted_scenarios() (gas: 819714)
[PASS] test_payFeeShares_active_halted_scenarios() (gas: 367538)
[PASS] test_refreshPremium_active_halted_scenarios() (gas: 268064)
[PASS] test_remove_active_halted_scenarios() (gas: 317564)
[PASS] test_reportDeficit_active_halted_scenarios() (gas: 446110)
[PASS] test_restore_active_halted_scenarios() (gas: 353304)
[PASS] test_transferShares_fuzz_active_halted_scenarios(bool,bool,bool,bool) (runs: 5000, μ: 211095, ~: 211109)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 4.03s (4.00s 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, μ: 954072, ~: 937219)
Logs:
  Bound result 812

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

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

Ran 5 tests for tests/gas/Gateways.Operations.gas.t.sol:NativeTokenGateway_Gas_Tests
[PASS] test_borrowNative() (gas: 924817)
[PASS] test_repayNative() (gas: 992785)
[PASS] test_supplyAndCollateralNative() (gas: 305250)
[PASS] test_supplyNative() (gas: 286669)
[PASS] test_withdrawNative() (gas: 508792)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 60.02ms (4.08ms CPU time)

Ran 8 tests for tests/gas/Gateways.Operations.gas.t.sol:SignatureGateway_Gas_Tests
[PASS] test_borrowWithSig() (gas: 748586)
[PASS] test_repayWithSig() (gas: 955129)
[PASS] test_setSelfAsUserPositionManagerWithSig() (gas: 209305)
[PASS] test_setUsingAsCollateralWithSig() (gas: 289375)
[PASS] test_supplyWithSig() (gas: 434298)
[PASS] test_updateUserDynamicConfigWithSig() (gas: 145272)
[PASS] test_updateUserRiskPremiumWithSig() (gas: 143127)
[PASS] test_withdrawWithSig() (gas: 409926)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 63.23ms (8.24ms CPU time)

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

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

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

[PASS] test_sweep_revertsWith_AssetNotListed() (gas: 12581)
[PASS] test_sweep_revertsWith_InsufficientLiquidity() (gas: 219868)
[PASS] test_sweep_revertsWith_InvalidAmount() (gas: 103903)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 93979, ~: 93979)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController_init() (gas: 40062)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 19.35s (19.31s CPU time)

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

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

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

[PASS] test_transferShares_revertsWith_AddCapExceeded() (gas: 192950)
[PASS] test_transferShares_revertsWith_SpokeHalted() (gas: 182055)
[PASS] test_transferShares_revertsWith_SpokeNotActive() (gas: 175374)
[PASS] test_transferShares_zeroShares_revertsWith_InvalidShares() (gas: 22607)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 8.45s (8.41s CPU time)

Ran 12 tests for tests/unit/position-manager/GiverPositionManager.t.sol:GiverPositionManagerTest
[PASS] test_multicall() (gas: 334983)
[PASS] test_repayOnBehalfOf() (gas: 640418)
Logs:
  Bound result 50000000000000000000

[PASS] test_repayOnBehalfOf_fuzz(uint256) (runs: 5000, μ: 637159, ~: 640646)
Logs:
  Bound result 3124043968137

[PASS] test_repayOnBehalfOf_fuzz_withInterest(uint256,uint256) (runs: 5000, μ: 571438, ~: 567792)
Logs:
  Bound result 900000068691281935000
  Bound result 25920101

[PASS] test_repayOnBehalfOf_maxRepay() (gas: 561604)
[PASS] test_repayOnBehalfOf_maxRepay_revertsWith_InvalidRepayAmount() (gas: 483251)
[PASS] test_repayOnBehalfOf_revertsWith_ReserveNotListed() (gas: 32366)
[PASS] test_repayOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 28756)
[PASS] test_supplyOnBehalfOf() (gas: 296678)
Logs:
  Bound result 100000000000000000000

[PASS] test_supplyOnBehalfOf_fuzz(uint256) (runs: 5000, μ: 296916, ~: 296706)
Logs:
  Bound result 3124043968137

[PASS] test_supplyOnBehalfOf_revertsWith_ReserveNotListed() (gas: 32405)
[PASS] test_supplyOnBehalfOf_revertsWith_SpokeNotRegistered() (gas: 28806)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 29.83s (29.80s CPU time)

Ran 6 tests for tests/unit/Hub/Hub.Access.t.sol:HubAccessTest
[PASS] test_change_authority() (gas: 2867628)
[PASS] test_change_role_responsibility() (gas: 110877)
[PASS] test_hub_access_manager_exposure() (gas: 13433)
[PASS] test_hub_admin_access() (gas: 1350682)
[PASS] test_migrate_role_responsibility() (gas: 935050)
[PASS] test_setInterestRateData_access() (gas: 102755)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 36.34ms (3.84ms CPU time)

Ran 8 tests for tests/unit/Hub/HubAccrueInterest.t.sol:HubAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 42781)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 387744, ~: 387620)
Logs:
  Bound result 9

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

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

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

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

[PASS] test_getAssetDrawnRate_MatchesStoredAfterAction() (gas: 187581)
[PASS] test_getAssetDrawnRate_fuzz_DiffersAfterTimePasses(uint40) (runs: 5000, μ: 210690, ~: 210549)
Logs:
  Bound result 9

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

Ran 13 tests for tests/unit/HubConfigurator.GranularAccessControl.t.sol:HubConfiguratorGranularAccessControlTest
[PASS] test_assetManager_canCall_deactivateAsset() (gas: 138373)
[PASS] test_assetManager_canCall_haltAsset() (gas: 138365)
[PASS] test_assetManager_canCall_resetAssetCaps() (gas: 138805)
[PASS] test_assetManager_canCall_updateLiquidityFee() (gas: 84257)
[PASS] test_assetManager_cannotCall_anySpokeManagerMethod() (gas: 354021)
[PASS] test_fuzz_unauthorized_cannotCall_assetManagerMethods(address) (runs: 5000, μ: 279742, ~: 279742)
[PASS] test_fuzz_unauthorized_cannotCall_spokeManagerMethods(address) (runs: 5000, μ: 354347, ~: 354347)
[PASS] test_spokeManager_canCall_addSpoke() (gas: 126758)
[PASS] test_spokeManager_canCall_resetSpokeCaps() (gas: 185749)
[PASS] test_spokeManager_canCall_updateSpokeActive() (gas: 66043)
[PASS] test_spokeManager_canCall_updateSpokeCaps() (gas: 66566)
[PASS] test_spokeManager_canCall_updateSpokeHalted() (gas: 66034)
[PASS] test_spokeManager_cannotCall_anyAssetManagerMethod() (gas: 278806)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 5.66s (5.63s CPU time)

Ran 60 tests for tests/unit/HubConfigurator.t.sol:HubConfiguratorTest
[PASS] test_addAsset_fuzz(bool,address,uint8,address,uint256,uint16,uint32,uint32,uint32) (runs: 5000, μ: 1006596, ~: 1007163)
Logs:
  Bound result 16
  Bound result 6729
  Bound result 3757
  Bound result 15440
  Bound result 34010
  Bound result 36227

[PASS] test_addAsset_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 48830, ~: 49199)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(bool,address,uint8,address,uint256,address) (runs: 5000, μ: 65205, ~: 65189)
Logs:
  Bound result 21
  Bound result 5098

[PASS] test_addAsset_revertsWith_InvalidAddress_irStrategy() (gas: 58262)
[PASS] test_addAsset_revertsWith_InvalidAddress_underlying() (gas: 58199)
[PASS] test_addAsset_revertsWith_InvalidLiquidityFee() (gas: 908350)
[PASS] test_addAsset_reverts_invalidIrData() (gas: 76480)
[PASS] test_addSpoke() (gas: 135489)
[PASS] test_addSpokeToAssets() (gas: 232820)
[PASS] test_addSpokeToAssets_revertsWith_AccessManagedUnauthorized() (gas: 28147)
[PASS] test_addSpokeToAssets_revertsWith_MismatchedConfigs() (gas: 35971)
[PASS] test_addSpoke_revertsWith_AccessManagedUnauthorized() (gas: 27791)
[PASS] test_deactivateAsset() (gas: 177029)
[PASS] test_deactivateAsset_revertsWith_AccessManagedUnauthorized() (gas: 28998)
[PASS] test_deactivateSpoke() (gas: 175835)
[PASS] test_deactivateSpoke_revertsWith_AccessManagedUnauthorized() (gas: 28992)
[PASS] test_haltAsset() (gas: 177018)
[PASS] test_haltAsset_revertsWith_AccessManagedUnauthorized() (gas: 28955)
[PASS] test_haltSpoke() (gas: 175878)
[PASS] test_haltSpoke_revertsWith_AccessManagedUnauthorized() (gas: 29023)
[PASS] test_resetAssetCaps() (gas: 251224)
[PASS] test_resetAssetCaps_revertsWith_AccessManagedUnauthorized() (gas: 28952)
[PASS] test_resetSpokeCaps() (gas: 268891)
[PASS] test_resetSpokeCaps_revertsWith_AccessManagedUnauthorized() (gas: 29065)
[PASS] test_updateFeeConfig_Scenario() (gas: 353194)
Logs:
  Bound result 0
  Bound result 1800
  Bound result 0
  Bound result 400
  Bound result 0
  Bound result 0

[PASS] test_updateFeeConfig_fuzz(uint256,uint16,address) (runs: 5000, μ: 195256, ~: 195561)
Logs:
  Bound result 4
  Bound result 3961

[PASS] test_updateFeeConfig_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 34996, ~: 34996)
[PASS] test_updateFeeConfig_revertsWith_InvalidAddress_spoke() (gas: 59417)
[PASS] test_updateFeeConfig_revertsWith_InvalidLiquidityFee() (gas: 62594)
[PASS] test_updateFeeReceiver_Scenario() (gas: 227711)
[PASS] test_updateFeeReceiver_WithdrawFromOldSpoke() (gas: 1272502)
[PASS] test_updateFeeReceiver_correctAccruals() (gas: 1308288)
[PASS] test_updateFeeReceiver_fuzz(address) (runs: 5000, μ: 188889, ~: 188889)
[PASS] test_updateFeeReceiver_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 34702, ~: 34702)
[PASS] test_updateFeeReceiver_revertsWith_InvalidAddress_spoke() (gas: 64072)
[PASS] test_updateFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 89436)
[PASS] test_updateInterestRateData() (gas: 81868)
[PASS] test_updateInterestRateData_revertsWith_AccessManagedUnauthorized() (gas: 30158)
[PASS] test_updateInterestRateStrategy() (gas: 102802)
[PASS] test_updateInterestRateStrategy_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 46076, ~: 46076)
[PASS] test_updateInterestRateStrategy_revertsWith_DrawnRateStrategyReverts() (gas: 85989)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidAddress_irStrategy() (gas: 75564)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidInterestRateStrategy() (gas: 76221)
[PASS] test_updateLiquidityFee_fuzz(uint256,uint16) (runs: 5000, μ: 100461, ~: 102068)
Logs:
  Bound result 3
  Bound result 0

[PASS] test_updateLiquidityFee_revertsWith_AccessManagedUnauthorized() (gas: 27622)
[PASS] test_updateLiquidityFee_revertsWith_InvalidLiquidityFee() (gas: 64212)
[PASS] test_updateReinvestmentController() (gas: 110911)
[PASS] test_updateReinvestmentController_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 34681, ~: 34681)
[PASS] test_updateSpokeActive() (gas: 99483)
[PASS] test_updateSpokeActive_revertsWith_AccessManagedUnauthorized() (gas: 31277)
[PASS] test_updateSpokeAddCap() (gas: 75422)
[PASS] test_updateSpokeAddCap_revertsWith_AccessManagedUnauthorized() (gas: 31268)
[PASS] test_updateSpokeCaps() (gas: 75557)
[PASS] test_updateSpokeCaps_revertsWith_AccessManagedUnauthorized() (gas: 31256)
[PASS] test_updateSpokeDrawCap() (gas: 75362)
[PASS] test_updateSpokeDrawCap_revertsWith_AccessManagedUnauthorized() (gas: 31267)
[PASS] test_updateSpokeHalted() (gas: 102218)
[PASS] test_updateSpokeHalted_revertsWith_AccessManagedUnauthorized() (gas: 31298)
[PASS] test_updateSpokeRiskPremiumThreshold() (gas: 75429)
[PASS] test_updateSpokeRiskPremiumThreshold_revertsWith_AccessManagedUnauthorized() (gas: 31235)
Suite result: ok. 60 passed; 0 failed; 0 skipped; finished in 11.80s (11.76s CPU time)

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

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

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

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

[PASS] test_add_fuzz_revertsWith_InvalidShares_due_to_index(uint256,uint256,uint256) (runs: 5000, μ: 220720, ~: 220916)
Logs:
  Bound result 999999999900000000000000004006
  Bound result 3102569651
  Bound result 10

[PASS] test_add_fuzz_single_asset(uint256,address,uint256) (runs: 5000, μ: 342533, ~: 342559)
Logs:
  Bound result 0
  Bound result 1397

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

[PASS] test_add_multi_add_minimal_shares() (gas: 316186)
[PASS] test_add_revertsWith_AmountDowncastOverflow() (gas: 357788)
[PASS] test_add_revertsWith_InsufficientTransferred() (gas: 64504)
[PASS] test_add_revertsWith_InvalidAmount() (gas: 13631)
[PASS] test_add_revertsWith_InvalidShares() (gas: 220255)
[PASS] test_add_revertsWith_SharesDowncastOverflow() (gas: 224404)
[PASS] test_add_revertsWith_SpokeHalted() (gas: 99829)
[PASS] test_add_revertsWith_SpokeNotActive() (gas: 99843)
[PASS] test_add_single_asset() (gas: 330408)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_add_with_increased_index() (gas: 298187)
[PASS] test_add_with_increased_index_with_premium() (gas: 674503)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 44.62s (44.58s CPU time)

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

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

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

[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 542990, ~: 543343)
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, μ: 4030126, ~: 4047043)
Logs:
  Bound result 411405848788079200951284955761
  Bound result 4500
  Bound result 5808
  Bound result 19274
  Bound result 17382
  Bound result 3333
  Bound result 5000000000
  Bound result 3291119784
  Bound result 19450
  Bound result 22
  Bound result 8233
  Bound result 1
  Bound result 22447
  Bound result 17382
  Bound result 3333
  Bound result 5000000000
  Bound result 3291119784

Suite result: ok. 6 passed; 0 failed; 1 skipped; finished in 110.80s (110.77s 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, μ: 545665, ~: 545725)
Logs:
  Bound result 5695
  Bound result 750000000
  Bound result 0
  Bound result 477235411008605295071243848033

[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 803299, ~: 803404)
Logs:
  Bound result 24104
  Bound result 222
  Bound result 0
  Bound result 11533
  Bound result 19541

[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_spoke() (gas: 277790935)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_multi_user() (gas: 194858233)
[PASS] test_accrueLiquidityFee_maxLiquidityFee_with_premium() (gas: 545787)
Logs:
  Bound result 5000
  Bound result 34560000
  Bound result 2
  Bound result 500000000000000000000

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

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

[PASS] test_accrueLiquidityFee_exact() (gas: 885393)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 953673, ~: 981402)
Logs:
  Bound result 68691281934999
  Bound result 0

[PASS] test_accrueLiquidityFee_maxLiquidityFee() (gas: 546929)
[PASS] test_accrueLiquidityFee_setUsingAsCollateral() (gas: 895978)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 19.12s (19.09s CPU time)

Ran 11 tests for tests/unit/libraries/KeyValueList.t.sol:KeyValueListTest
[PASS] test_add_unique() (gas: 352075)
[PASS] test_fuzz_add(uint256,uint256) (runs: 5000, μ: 231245, ~: 232296)
[PASS] test_fuzz_add_unique(uint256,uint256) (runs: 5000, μ: 236147, ~: 236956)
Logs:
  Bound result 100

[PASS] test_fuzz_get(uint256[]) (runs: 5000, μ: 377309, ~: 378109)
[PASS] test_fuzz_get_uninitialized(uint256[]) (runs: 5000, μ: 264434, ~: 249976)
[PASS] test_fuzz_get_uninitialized_sorted(uint256[]) (runs: 5000, μ: 180024, ~: 153157)
[PASS] test_fuzz_pack_unpack_roundtrip(uint256,uint256) (runs: 5000, μ: 9176, ~: 9363)
Logs:
  Bound result 1869986064
  Bound result 100

[PASS] test_fuzz_sortByKey(uint256[]) (runs: 5000, μ: 434903, ~: 429695)
[PASS] test_fuzz_sortByKey_length(uint256) (runs: 5000, μ: 199897, ~: 198623)
Logs:
  Bound result 37

[PASS] test_fuzz_sortByKey_with_collision(uint256[]) (runs: 5000, μ: 513191, ~: 510249)
[PASS] test_fuzz_uncheckedAt(uint256[]) (runs: 5000, μ: 150000, ~: 150694)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 71.34s (71.33s CPU time)

Ran 2 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.CollateralToLiquidate.t.sol:LiquidationLogicCollateralToLiquidateTest
[PASS] test_calculateCollateralAmountToLiquidate() (gas: 165019)
[PASS] test_calculateCollateralToLiquidate_fuzz((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 188391, ~: 176783)
Logs:
  Bound result 0
  Bound result 10
  Bound result 5625
  Bound result 22453318525466649636763644584
  Bound result 5
  Bound result 40
  Bound result 12
  Bound result 5625541975901246828944
  Bound result 11480

Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.63s (2.59s CPU time)

Ran 3 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.DebtToLiquidate.t.sol:LiquidationLogicDebtToLiquidateTest
[PASS] test_calculateDebtToLiquidate_fuzz((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 39413, ~: 39545)
Logs:
  Bound result 1631194238
  Bound result 10585
  Bound result 3436
  Bound result 1187448874948792728
  Bound result 232473893725761368
  Bound result 7575125999959706
  Bound result 15
  Bound result 306286583169637935431906209884
  Bound result 75679658657443156232320694161
  Bound result 101634016077
  Bound result 57926430471

[PASS] test_calculateDebtToLiquidate_fuzz_AmountAdjustedDueToDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 41832, ~: 42046)
Logs:
  Bound result 18822046599935410513651614155054
  Bound result 10213
  Bound result 6014
  Bound result 1417694694192823590
  Bound result 573600540329698003
  Bound result 4648017386000911
  Bound result 11
  Bound result 18233714595769
  Bound result 99000000000000000000054501304
  Bound result 9919303
  Bound result 57
  Bound result 4648017386000911
  Bound result 3989

[PASS] test_calculateDebtToLiquidate_fuzz_ImpossibleToAdjustForDust((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 42017, ~: 41980)
Logs:
  Bound result 1631194238
  Bound result 10585
  Bound result 3436
  Bound result 1187448874948792728
  Bound result 232473893725761368
  Bound result 7575125999959706
  Bound result 15
  Bound result 306286583169637935431906209884
  Bound result 75679658657443156232320694161
  Bound result 101634016077
  Bound result 57926430471
  Bound result 5
  Bound result 10000000000000000
  Bound result 101634016077

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

Ran 7 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.DebtToTargetHealthFactor.t.sol:LiquidationLogicDebtToTargetHealthFactorTest
[PASS] test_calculateDebtToTargetHealthFactor_HealthFactorEqualsTargetHealthFactor((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 23337, ~: 23388)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

[PASS] test_calculateDebtToTargetHealthFactor_NoPrecisionLoss() (gas: 27984)
[PASS] test_calculateDebtToTargetHealthFactor_PrecisionLoss() (gas: 17520)
[PASS] test_calculateDebtToTargetHealthFactor_UnitPrice() (gas: 27984)
[PASS] test_calculateDebtToTargetHealthFactor_fuzz_NoRevert((uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 20568, ~: 20538)
Logs:
  Bound result 3116123919
  Bound result 10725
  Bound result 2977
  Bound result 1486249897798496545
  Bound result 555054242782847130
  Bound result 6199474701275945
  Bound result 9

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

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

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

Ran 16 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.EvaluateDeficit.t.sol:LiquidationLogicEvaluateDeficitTest
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCM() (gas: 8941)
[PASS] test_evaluateDeficit_CRE_SCCM_DRE_BRCO() (gas: 8909)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCM() (gas: 8952)
[PASS] test_evaluateDeficit_CRE_SCCM_DRN_BRCO() (gas: 8897)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCM() (gas: 8945)
[PASS] test_evaluateDeficit_CRE_SCCO_DRE_BRCO() (gas: 8990)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCM() (gas: 8955)
[PASS] test_evaluateDeficit_CRE_SCCO_DRN_BRCO() (gas: 8943)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCM() (gas: 8943)
[PASS] test_evaluateDeficit_CRN_SCCM_DRE_BRCO() (gas: 8932)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCM() (gas: 8866)
[PASS] test_evaluateDeficit_CRN_SCCM_DRN_BRCO() (gas: 8899)
[PASS] test_evaluateDeficit_CRN_SCCO_DRE_BRCM() (gas: 8876)
[PASS] test_evaluateDeficit_CRN_SCCO_DRE_BRCO() (gas: 8933)
[PASS] test_evaluateDeficit_CRN_SCCO_DRN_BRCM() (gas: 8929)
[PASS] test_evaluateDeficit_CRN_SCCO_DRN_BRCO() (gas: 8918)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 36.38ms (1.18ms CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.ExecuteLiquidation.t.sol:LiquidationLogicExecuteLiquidationTest
[PASS] test_executeLiquidation() (gas: 372061)
[PASS] test_executeLiquidation_revertsWith_InvalidDebtToCover() (gas: 81065)
[PASS] test_executeLiquidation_revertsWith_MustNotLeaveDust_Collateral() (gas: 144801)
[PASS] test_executeLiquidation_revertsWith_MustNotLeaveDust_Debt() (gas: 145345)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 39.15ms (1.61ms CPU time)

Ran 3 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateCollateral.t.sol:LiquidationLogicLiquidateCollateralTest
[PASS] test_liquidateCollateral_fuzz(uint256,uint256,bool) (runs: 5000, μ: 204185, ~: 189092)
Logs:
  Bound result 10605966300000000000
  Bound result 6858

[PASS] test_liquidateCollateral_revertsWith_ArithmeticUnderflow() (gas: 28131)
[PASS] test_liquidateCollateral_revertsWith_ArithmeticUnderflow_FeeShares() (gas: 118356)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.70s (2.67s CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateDebt.t.sol:LiquidationLogicLiquidateDebtTest
[PASS] test_liquidateDebt_fuzz(uint256) (runs: 5000, μ: 228515, ~: 218717)
[PASS] test_liquidateDebt_revertsWith_ArithmeticUnderflow() (gas: 106137)
[PASS] test_liquidateDebt_revertsWith_InsufficientAllowance() (gas: 115595)
[PASS] test_liquidateDebt_revertsWith_InsufficientBalance() (gas: 177180)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.70s (2.67s CPU time)

Ran 4 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidateUser.t.sol:LiquidationLogicLiquidateUserTest
[PASS] test_liquidateUser() (gas: 373081)
[PASS] test_liquidateUser_revertsWith_InvalidDebtToCover() (gas: 73821)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Collateral() (gas: 141553)
[PASS] test_liquidateUser_revertsWith_MustNotLeaveDust_Debt() (gas: 146160)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 39.08ms (1.80ms CPU time)

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

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

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_irStrategy(address,uint8,address) (runs: 5000, μ: 45357, ~: 45057)
Logs:
  Bound result 3

[PASS] test_addAsset_fuzz_revertsWith_InvalidAddress_underlying(uint8,address,address) (runs: 5000, μ: 36654, ~: 36654)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(address,uint8,address,address) (runs: 5000, μ: 45896, ~: 45941)
Logs:
  Bound result 251

[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals_tooLow(address,uint8,address,address) (runs: 5000, μ: 46043, ~: 46330)
Logs:
  Bound result 2

[PASS] test_addAsset_fuzz_reverts_InvalidIrData(address,uint8,address,address) (runs: 5000, μ: 40486018234, ~: 34985)
Logs:
  Bound result 14

[PASS] test_addAsset_revertsWith_BlockTimestampDowncastOverflow() (gas: 956555)
[PASS] test_addAsset_revertsWith_DrawnRateDowncastOverflow() (gas: 953681)
[PASS] test_addAsset_reverts_UnderlyingAlreadyListed() (gas: 48915)
[PASS] test_addSpoke_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 126698, ~: 126748)
Logs:
  Bound result 5

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

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

[PASS] test_addSpoke_revertsWith_SpokeAlreadyListed() (gas: 39773)
[PASS] test_getAssetId() (gas: 73181)
[PASS] test_getAssetId_fuzz_revertsWith_AssetNotListed(address) (runs: 5000, μ: 18583, ~: 18583)
[PASS] test_hub_deploy_reverts_on_InvalidConstructorInput() (gas: 786876)
[PASS] test_hub_max_riskPremium() (gas: 8643)
[PASS] test_isUnderlyingListed() (gas: 1736179)
[PASS] test_updateAssetConfig_NewFeeReceiver_noFees() (gas: 718175)
[PASS] test_updateAssetConfig_NewFeeReceiver_revertsWith_SpokeNotActive_noFees() (gas: 613507)
[PASS] test_updateAssetConfig_UseExistingSpokeAndListedAsFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 70730)
[PASS] test_updateAssetConfig_fuzz(uint256,(address,uint16,address,address)) (runs: 5000, μ: 269260, ~: 269545)
Logs:
  Bound result 1
  Bound result 5526

[PASS] test_updateAssetConfig_fuzz_FromZeroLiquidityFee(uint256,uint16) (runs: 5000, μ: 819084, ~: 818914)
Logs:
  Bound result 3
  Bound result 1
  Bound result 3
  Bound result 0
  Bound result 3
  Bound result 1

[PASS] test_updateAssetConfig_fuzz_LiquidityFee(uint256,uint16) (runs: 5000, μ: 721504, ~: 721334)
Logs:
  Bound result 3
  Bound result 1
  Bound result 3
  Bound result 1

[PASS] test_updateAssetConfig_fuzz_NewDrawnRateStrategy(uint256) (runs: 5000, μ: 1256392, ~: 1256394)
Logs:
  Bound result 3

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

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

[PASS] test_updateAssetConfig_fuzz_Scenario(uint256) (runs: 5000, μ: 700436, ~: 700489)
Logs:
  Bound result 3
  Bound result 3
  Bound result 1000
  Bound result 3
  Bound result 1000
  Bound result 3
  Bound result 0
  Bound result 3
  Bound result 0
  Bound result 3
  Bound result 0
  Bound result 3
  Bound result 0

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidInterestRateStrategy(uint256) (runs: 5000, μ: 61105, ~: 61158)
Logs:
  Bound result 3

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

[PASS] test_updateAssetConfig_fuzz_revertsWith_InvalidReinvestmentController() (gas: 469843)
[PASS] test_updateAssetConfig_fuzz_revertsWith_calculateInterestRateReverts(uint256,(address,uint16,address,address)) (runs: 5000, μ: 198886, ~: 199295)
Logs:
  Bound result 4
  Bound result 15

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

[PASS] test_updateAssetConfig_oldFeeReceiver_flags() (gas: 875259)
Logs:
  Bound result 3
  Bound result 1000
  Bound result 5
  Bound result 500
  Bound result 3
  Bound result 1000
  Bound result 0
  Bound result 1000

[PASS] test_updateSpokeConfig_fuzz(uint256,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 59180, ~: 59239)
Logs:
  Bound result 3

[PASS] test_updateSpokeConfig_fuzz_revertsWith_SpokeNotListed(uint256,address,(uint40,uint40,uint24,bool,bool)) (runs: 5000, μ: 40547, ~: 40614)
Logs:
  Bound result 2

[PASS] test_updateSpokeConfig_revertsWith_AssetNotListed() (gas: 29661)
Suite result: ok. 38 passed; 0 failed; 0 skipped; finished in 92.93s (92.90s 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, μ: 1042266, ~: 1042361)
Logs:
  Bound result 68691281934999
  Bound result 100

[PASS] test_borrow_fuzz_rounding_effect_inflated_ex_rate(uint256,uint256,uint256) (runs: 5000, μ: 1414674, ~: 1414747)
Logs:
  Bound result 597528960716847526939947
  Bound result 395000775899076820696802
  Bound result 609857102

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

[PASS] test_borrow_rounding_effect_multiple_actions() (gas: 1147381)
[PASS] test_borrow_rounding_effect_shares() (gas: 1084274)
Logs:
  Bound result 5000000000000000000
  Bound result 94608000

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

Ran 8 tests for tests/unit/libraries/LiquidationLogic/LiquidationLogic.LiquidationAmounts.t.sol:LiquidationLogicLiquidationAmountsTest
[PASS] test_calculateLiquidationAmounts_EnoughCollateral() (gas: 166731)
[PASS] test_calculateLiquidationAmounts_InsufficientCollateral() (gas: 167437)
[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_CollateralDust((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 285989, ~: 274783)
Logs:
  Bound result 3
  Bound result 2767
  Bound result 443124196721905572
  Bound result 14843
  Bound result 8
  Bound result 18
  Bound result 13290
  Bound result 5661
  Bound result 1999999999999999997
  Bound result 443124196721905572
  Bound result 9304570613870847
  Bound result 9
  Bound result 999999999999999999999999999997
  Bound result 1000000000000000000000000000
  Bound result 28591
  Bound result 54527
  Bound result 6504484831365108
  Bound result 7
  Bound result 1109
  Bound result 18850239771387979476210927906
  Bound result 0
  Bound result 6504484831365108
  Bound result 26
  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935

[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoCollateralDust((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 240911, ~: 228936)
Logs:
  Bound result 3
  Bound result 2767
  Bound result 443124196721905572
  Bound result 14843
  Bound result 8
  Bound result 18
  Bound result 13290
  Bound result 5661
  Bound result 1999999999999999997
  Bound result 443124196721905572
  Bound result 9304570613870847
  Bound result 9
  Bound result 999999999999999999999999999997
  Bound result 1000000000000000000000000000
  Bound result 28591
  Bound result 54527
  Bound result 6504484831365108
  Bound result 7
  Bound result 1109
  Bound result 18850239771387979476210927906
  Bound result 0
  Bound result 18850239771387979476210927906
  Bound result 999999999999999999999999999997

[PASS] test_calculateLiquidationAmounts_fuzz_EnoughCollateral_NoDebtLeft((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 260030, ~: 248026)
Logs:
  Bound result 305647192271866193
  Bound result 8596
  Bound result 375151818457824964
  Bound result 10660
  Bound result 18
  Bound result 3
  Bound result 10650
  Bound result 2
  Bound result 1320660900608901589
  Bound result 375151818457824964
  Bound result 2459529247883382
  Bound result 14
  Bound result 688868459503709026022276783765
  Bound result 35620419098526773228444064473
  Bound result 30663477167
  Bound result 40658186962
  Bound result 3642834413111126
  Bound result 12
  Bound result 6498
  Bound result 945630876467233914863016616547
  Bound result 0
  Bound result 3
  Bound result 10650
  Bound result 2
  Bound result 1320660900608901589
  Bound result 375151818457824964
  Bound result 2459529247883382
  Bound result 14
  Bound result 688868459503709026022276783765
  Bound result 35620419098526773228444064473
  Bound result 30663477167
  Bound result 40658186962
  Bound result 2459529247883382
  Bound result 678767
  Bound result 945630876467233914863016616547
  Bound result 688868459503709026022276783765

[PASS] test_calculateLiquidationAmounts_fuzz_InsufficientCollateral((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 245800, ~: 234092)
Logs:
  Bound result 511
  Bound result 4408
  Bound result 0
  Bound result 10010
  Bound result 6
  Bound result 99608
  Bound result 10010
  Bound result 3645
  Bound result 1000000000000000045
  Bound result 0
  Bound result 94060736361194
  Bound result 14
  Bound result 5000000000000000000000000000
  Bound result 99000000000000000004425000001
  Bound result 17618
  Bound result 481706357738
  Bound result 15313
  Bound result 16
  Bound result 9986
  Bound result 1000000000
  Bound result 5
  Bound result 1336
  Bound result 5000000000000000000000000000

[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Collateral((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 268867, ~: 257135)
Logs:
  Bound result 3886412
  Bound result 2
  Bound result 147
  Bound result 12468
  Bound result 6
  Bound result 28951245481117846533722652
  Bound result 12468
  Bound result 3739
  Bound result 1000109044247905327
  Bound result 147
  Bound result 1766670143596910
  Bound result 14
  Bound result 885000589634409638603543244567
  Bound result 45625495039344622427514351693
  Bound result 1
  Bound result 45089934476
  Bound result 9035404749081580
  Bound result 15
  Bound result 274
  Bound result 471071379138868438154450132077
  Bound result 5
  Bound result 9035404749081580
  Bound result 3252684925
  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935

[PASS] test_calculateLiquidationAmounts_fuzz_revertsWith_MustNotLeaveDust_Debt((address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 251834, ~: 239784)
Logs:
  Bound result 305647192271866193
  Bound result 8596
  Bound result 37...*[Comment body truncated]*

@github-actions
Copy link

github-actions bot commented Mar 16, 2026

♻️ Forge Gas Snapshots

🔕 Unchanged
Path Value
snapshots/ConfigPositionManager.Operations.json
renounceCanUpdateUserDynamicConfigPermission 27,748
renounceCanUpdateUserRiskPremiumPermission 27,682
renounceCanUpdateUsingAsCollateralPermission 27,705
renounceGlobalPermission 27,663
setCanSetUsingAsCollateralPermission 49,848
setCanUpdateUserDynamicConfigPermission 49,870
setCanUpdateUserRiskPremiumPermission 49,870
setGlobalPermission 49,822
setUsingAsCollateralOnBehalfOf 72,503
updateUserDynamicConfigOnBehalfOf 50,433
updateUserRiskPremiumOnBehalfOf 131,974
snapshots/GiverPositionManager.Operations.json
repayOnBehalfOf 167,904
supplyOnBehalfOf 136,911
snapshots/Hub.Operations.json
add 86,692
add: with transfer 108,028
draw 104,148
eliminateDeficit: full 72,579
eliminateDeficit: partial 82,184
mintFeeShares 82,741
payFee 70,805
refreshPremium 70,362
remove: full 75,596
remove: partial 80,734
reportDeficit 111,925
restore: full 76,552
restore: full - with transfer 169,200
restore: partial 85,262
restore: partial - with transfer 143,281
transferShares 69,619
snapshots/NativeTokenGateway.Operations.json
borrowNative 232,042
repayNative 166,511
supplyAsCollateralNative 160,195
supplyNative 135,794
withdrawNative: full 125,572
withdrawNative: partial 136,764
snapshots/PositionManagerBase.Operations.json
setSelfAsUserPositionManagerWithSig 75,041
snapshots/SignatureGateway.Operations.json
borrowWithSig 215,467
repayWithSig 186,703
setSelfAsUserPositionManagerWithSig 75,138
setUsingAsCollateralWithSig 85,380
supplyWithSig 151,980
updateUserDynamicConfigWithSig 63,113
updateUserRiskPremiumWithSig 62,007
withdrawWithSig 130,797
snapshots/Spoke.Getters.json
getUserAccountData: supplies: 0, borrows: 0 13,014
getUserAccountData: supplies: 1, borrows: 0 51,132
getUserAccountData: supplies: 2, borrows: 0 84,514
getUserAccountData: supplies: 2, borrows: 1 106,572
getUserAccountData: supplies: 2, borrows: 2 127,538
snapshots/Spoke.Operations.ZeroRiskPremium.json
borrow: first 193,708
borrow: second action, same reserve 173,574
liquidationCall (receiveShares): full 305,343
liquidationCall (receiveShares): partial 304,761
liquidationCall (reportDeficit): full 370,494
liquidationCall: full 322,971
liquidationCall: partial 322,389
permitReserve + repay (multicall) 164,565
permitReserve + supply (multicall) 146,745
permitReserve + supply + enable collateral (multicall) 161,196
repay: full 123,903
repay: partial 128,861
setUserPositionManagersWithSig: disable 46,772
setUserPositionManagersWithSig: enable 68,684
supply + enable collateral (multicall) 141,398
supply: 0 borrows, collateral disabled 122,835
supply: 0 borrows, collateral enabled 105,806
supply: second action, same reserve 105,735
updateUserDynamicConfig: 1 collateral 76,251
updateUserDynamicConfig: 2 collaterals 92,825
updateUserRiskPremium: 1 borrow 99,069
updateUserRiskPremium: 2 borrows 108,749
usingAsCollateral: 0 borrows, enable 59,616
usingAsCollateral: 1 borrow, disable 109,113
usingAsCollateral: 1 borrow, enable 42,504
usingAsCollateral: 2 borrows, disable 132,368
usingAsCollateral: 2 borrows, enable 42,516
withdraw: 0 borrows, full 129,650
withdraw: 0 borrows, partial 134,546
withdraw: 1 borrow, partial 163,306
withdraw: 2 borrows, partial 179,570
withdraw: non collateral 105,891
snapshots/Spoke.Operations.json
borrow: first 262,632
borrow: second action, same reserve 205,498
liquidationCall (receiveShares): full 337,376
liquidationCall (receiveShares): partial 336,794
liquidationCall (reportDeficit): full 362,694
liquidationCall: full 355,004
liquidationCall: partial 354,422
permitReserve + repay (multicall) 162,036
permitReserve + supply (multicall) 146,745
permitReserve + supply + enable collateral (multicall) 161,196
repay: full 117,982
repay: partial 137,340
setUserPositionManagersWithSig: disable 46,772
setUserPositionManagersWithSig: enable 68,684
supply + enable collateral (multicall) 141,398
supply: 0 borrows, collateral disabled 122,835
supply: 0 borrows, collateral enabled 105,806
supply: second action, same reserve 105,735
updateUserDynamicConfig: 1 collateral 76,251
updateUserDynamicConfig: 2 collaterals 92,825
updateUserRiskPremium: 1 borrow 152,417
updateUserRiskPremium: 2 borrows 202,668
usingAsCollateral: 0 borrows, enable 59,616
usingAsCollateral: 1 borrow, disable 162,458
usingAsCollateral: 1 borrow, enable 42,504
usingAsCollateral: 2 borrows, disable 234,283
usingAsCollateral: 2 borrows, enable 42,516
withdraw: 0 borrows, full 129,650
withdraw: 0 borrows, partial 134,546
withdraw: 1 borrow, partial 214,149
withdraw: 2 borrows, partial 262,020
withdraw: non collateral 105,891
snapshots/TakerPositionManager.Operations.json
approveBorrow 49,802
approveBorrowWithSig 65,684
approveWithdraw 49,833
approveWithdrawWithSig 65,636
borrowOnBehalfOf 312,136
renounceBorrowAllowance 27,924
renounceWithdrawAllowance 28,000
withdrawOnBehalfOf: full 120,697
withdrawOnBehalfOf: partial 130,671
snapshots/TokenizationSpoke.Operations.json
deposit 113,234
depositWithSig 124,138
mint 112,915
mintWithSig 123,794
permit 62,766
redeem: on behalf, full 90,886
redeem: on behalf, partial 113,607
redeem: self, full 88,874
redeem: self, partial 108,074
redeemWithSig 123,456
withdraw: on behalf, full 91,302
withdraw: on behalf, partial 114,127
withdraw: self, full 89,394
withdraw: self, partial 108,594
withdrawWithSig 123,987

@github-actions
Copy link

github-actions bot commented Mar 16, 2026

Forge Build Sizes

Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
DeployConstants 133 183 24,443 48,969
🔕 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 19,937 24,431 29,215
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,310 24,426 25,842
AaveV4GiverPositionManagerDeployProcedure 21 47 24,555 49,105
AaveV4HubBatch 150 4,389 24,426 44,763
AaveV4HubConfiguratorDeployProcedure 21 47 24,555 49,105
AaveV4HubConfiguratorRolesProcedure 44 94 24,532 49,058
AaveV4HubDeployProcedure 21 47 24,555 49,105
AaveV4HubRolesProcedure 44 94 24,532 49,058
AaveV4InterestRateStrategyDeployProcedure 21 47 24,555 49,105
AaveV4NativeTokenGatewayDeployProcedure 21 47 24,555 49,105
AaveV4PositionManagerBatch 215 33,487 24,361 15,665
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,397 24,361 39,755
AaveV4SpokeRolesProcedure 44 94 24,532 49,058
AaveV4TakerPositionManagerDeployProcedure 21 47 24,555 49,105
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
AccessManagerEnumerable 16,917 18,756 7,659 30,396
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
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
ConfigPermissionsWrapper 1,001 1,029 23,575 48,123
ConfigPositionManager 12,937 13,491 11,639 35,661
Create2Utils 134 184 24,442 48,968
Create2UtilsWrapper 6,162 6,190 18,414 42,962
DeployUtils 44 94 24,532 49,058
DeployWrapper 3,205 3,233 21,371 45,919
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
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,614 6,889 17,962 42,263
Hashes 44 94 24,532 49,058
Hub 23,538 23,735 1,038 25,417
HubConfigurator 13,833 14,067 10,743 35,085
InputUtils 21 47 24,555 49,105
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 6,711 7,564 17,865 41,588
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 9,971 10,829 14,605 38,323
MockERC1271Wallet 828 962 23,748 48,190
MockERC20 2,540 3,006 22,036 46,146
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
NativeTokenGateway 8,685 9,102 15,891 40,050
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 4,998 5,273 19,578 43,879
PositionManagerNoMulticall 4,934 5,209 19,642 43,943
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 908 1,042 23,668 48,110
ReserveFlagsMap 44 94 24,532 49,058
ReserveFlagsMap.spoke 16 44 24,560 49,108
ReserveFlagsMapWrapper 928 956 23,648 48,196
Roles 751 803 23,825 48,349
RolesValidation 44 94 24,532 49,058
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,107 12,648 12,469 36,504
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,825 12,059 12,751 37,093
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 10,996 11,550 13,580 37,602
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
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 (tests/mocks/UserPositionDebtWrapper.sol) 3,263 3,291 21,313 45,861
UserPositionUtilsWrapper (tests/mocks/UserPositionUtilsWrapper.sol) 3,263 3,291 21,313 45,861
Utils 44 94 24,532 49,058
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

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.

1 participant