Skip to content

feat: certora cvl v0.5.11 - #1292

Open
yan-man wants to merge 22 commits into
mainfrom
feat/certora-cvl-v0.5.11
Open

feat: certora cvl v0.5.11#1292
yan-man wants to merge 22 commits into
mainfrom
feat/certora-cvl-v0.5.11

Conversation

@yan-man

@yan-man yan-man commented Mar 28, 2026

Copy link
Copy Markdown
Contributor
  • incorporate Certora formal verification specs for v0.5.11, including CI workflow

certora-run[bot]

This comment was marked as resolved.

@github-actions

github-actions Bot commented Mar 28, 2026

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

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersAddCapVariableEmptyTest
[PASS] test_maxDeposit_returnsCapTimesUnits() (gas: 50171)
[PASS] test_maxMint_returnsSharesOfCap() (gas: 63283)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 34.42ms (343.25µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersAddCapVariablePartialTest
[PASS] test_maxDeposit_returnsRemaining() (gas: 55189)
[PASS] test_maxMint_returnsSharesOfRemaining() (gas: 68238)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 29.44ms (402.85µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersAddCapZeroTest
[PASS] test_maxDeposit_returnsZero() (gas: 46658)
[PASS] test_maxMint_returnsZero() (gas: 51164)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 29.18ms (291.74µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersCapExceededByYieldTest
[PASS] test_maxDeposit_returnsZero() (gas: 46669)
[PASS] test_maxMint_returnsZero() (gas: 51153)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 29.93ms (314.15µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersExactBoundaryAfterYieldTest
[PASS] test_maxDeposit_exactBoundary_succeeds() (gas: 144076)
[PASS] test_maxMint_exactBoundary_succeeds() (gas: 153486)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.14ms (657.34µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersExactBoundaryLimitedLiquidityTest
[PASS] test_maxRedeem_exactBoundary_limitedLiquidity_succeeds() (gas: 110933)
[PASS] test_maxWithdraw_exactBoundary_limitedLiquidity_succeeds() (gas: 106557)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.69ms (546.01µs CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersHaltedTest
[PASS] test_maxDeposit_returnsZero() (gas: 28305)
[PASS] test_maxMint_returnsZero() (gas: 44847)
[PASS] test_maxRedeem_returnsZero() (gas: 47038)
[PASS] test_maxWithdraw_returnsZero() (gas: 46940)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 30.19ms (515.18µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersLiquidityGreaterThanBalanceTest
[PASS] test_maxRedeem_returnsSharesOfBalance() (gas: 62494)
[PASS] test_maxWithdraw_returnsBalance() (gas: 62159)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.47ms (390.45µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersLiquidityLessThanBalanceTest
[PASS] test_maxRedeem_returnsSharesOfLiquidity() (gas: 62483)
[PASS] test_maxWithdraw_returnsLiquidity() (gas: 62158)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.40ms (390.55µs CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersNotActiveAndHaltedTest
[PASS] test_maxDeposit_returnsZero() (gas: 28291)
[PASS] test_maxMint_returnsZero() (gas: 44833)
[PASS] test_maxRedeem_returnsZero() (gas: 47024)
[PASS] test_maxWithdraw_returnsZero() (gas: 46926)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 31.23ms (498.03µs CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersNotActiveTest
[PASS] test_maxDeposit_returnsZero() (gas: 28291)
[PASS] test_maxMint_returnsZero() (gas: 44833)
[PASS] test_maxRedeem_returnsZero() (gas: 47024)
[PASS] test_maxWithdraw_returnsZero() (gas: 46926)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 30.22ms (465.34µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersOwnerZeroSharesTest
[PASS] test_maxRedeem_returnsZero() (gas: 48857)
[PASS] test_maxWithdraw_returnsZero() (gas: 48748)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.19ms (271.85µs CPU time)

Ran 2 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.MaxGetters.t.sol:TokenizationSpokeMaxGettersZeroLiquidityTest
[PASS] test_maxRedeem_returnsZero() (gas: 48857)
[PASS] test_maxWithdraw_returnsZero() (gas: 48770)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.49ms (284.18µs CPU time)

Ran 9 tests for tests/gas/TokenizationSpoke.Operations.gas.t.sol:TokenizationSpokeOperations_Gas_Tests
[PASS] test_deposit() (gas: 129545)
[PASS] test_depositWithSig() (gas: 215233)
[PASS] test_mint() (gas: 162401)
[PASS] test_mintWithSig() (gas: 250186)
[PASS] test_permit() (gas: 118561)
[PASS] test_redeem() (gas: 880797)
[PASS] test_redeemWithSig() (gas: 331091)
[PASS] test_withdraw() (gas: 846243)
[PASS] test_withdrawWithSig() (gas: 331976)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 53.05ms (7.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, μ: 16691, ~: 17009)
Logs:
  Bound result 18

[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.52s (1.48s 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.33ms (103.76µ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.92ms (573.31µ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.96ms 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.59ms (1.08ms CPU time)

Ran 10 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.Permit.t.sol:TokenizationSpokePermitTest
[PASS] test_nonces_uses_permit_nonce_key_namespace(bytes32) (runs: 5000, μ: 17692, ~: 17692)
[PASS] test_permit() (gas: 93108)
[PASS] test_permit_revertsWith_InvalidAddress_dueTo_ZeroAddressOwner() (gas: 50986)
[PASS] test_permit_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 28602)
[PASS] test_permit_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 51462)
[PASS] test_permit_revertsWith_InvalidSignature_dueTo_invalid_nonce_at_arbitrary_namespace(bytes32) (runs: 5000, μ: 55234, ~: 55234)
[PASS] test_permit_revertsWith_InvalidSignature_dueTo_invalid_nonce_at_permit_key_namespace(bytes32) (runs: 5000, μ: 57112, ~: 57112)
[PASS] test_renounceAllowance() (gas: 35330)
[PASS] test_renounceAllowance_noop() (gas: 24209)
[PASS] test_usePermitNonce(bytes32) (runs: 5000, μ: 18112, ~: 18112)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 8.27s (8.24s CPU time)

Ran 4 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.Reverts.InsufficientAllowance.t.sol:TokenizationSpokeInsufficientAllowanceTest
[PASS] test_depositWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 316735)
[PASS] test_deposit_revertsWith_ERC20InsufficientAllowance() (gas: 71641)
[PASS] test_mintWithSig_revertsWith_ERC20InsufficientAllowance() (gas: 328278)
[PASS] test_mint_revertsWith_ERC20InsufficientAllowance() (gas: 76522)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 37.13ms (5.22ms CPU time)

Ran 6 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.Upgradeable.t.sol:TokenizationSpokeUpgradeableTest
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 5000, μ: 2840521, ~: 2840521)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 5000, μ: 2861686, ~: 2861679)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 5000, μ: 5665607, ~: 5665600)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 2837244)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 5000, μ: 5681774, ~: 5681758)
Logs:
  Bound result 1000000000

[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 5654429)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 16.52s (16.49s 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, μ: 154394, ~: 153972)
[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, μ: 154350, ~: 153928)
[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, μ: 155455, ~: 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, μ: 154412, ~: 153990)
[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, μ: 142703, ~: 143557)
[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, μ: 142696, ~: 143550)
[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, μ: 154391, ~: 153969)
[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.05s (43.00s CPU time)

Ran 12 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.WithSig.Reverts.InvalidSignature.t.sol:TokenizationSpokeWithSigInvalidSignatureTest
[PASS] test_depositWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 167574, ~: 167016)
[PASS] test_depositWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 29553)
[PASS] test_depositWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 27803)
[PASS] test_mintWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 167505, ~: 166947)
[PASS] test_mintWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 29531)
[PASS] test_mintWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 27833)
[PASS] test_redeemWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 167529, ~: 166971)
[PASS] test_redeemWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 29490)
[PASS] test_redeemWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 27814)
[PASS] test_withdrawWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 167549, ~: 166991)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_ExpiredDeadline() (gas: 29551)
[PASS] test_withdrawWithSig_revertsWith_InvalidSignature_dueTo_InvalidSigner() (gas: 27856)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 27.01s (26.98s 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 17.01s (16.98s 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.28ms (4.58ms 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 35.85ms (4.74ms 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.43ms (1.20ms 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 554.98ms (524.51ms 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.85ms (3.19ms CPU time)

Ran 5 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.WithSig.t.sol:TokenizationSpokeWithSigTest
[PASS] test_depositWithSig(bytes32) (runs: 5000, μ: 354040, ~: 353483)
[PASS] test_mintWithSig(bytes32) (runs: 5000, μ: 353289, ~: 352732)
[PASS] test_redeemWithSig(bytes32) (runs: 5000, μ: 334943, ~: 334301)
[PASS] test_useNonce_monotonic(bytes32) (runs: 5000, μ: 17145, ~: 17145)
[PASS] test_withdrawWithSig(bytes32) (runs: 5000, μ: 335966, ~: 335297)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 53.70s (53.67s CPU time)

Ran 8 tests for tests/contracts/tokenization-spoke/TokenizationSpoke.t.sol:TokenizationSpokeTest
[PASS] test_deposit() (gas: 242373)
[PASS] test_deposit_receiverDifferentFromCaller() (gas: 228828)
[PASS] test_mint() (gas: 241592)
[PASS] test_mint_receiverDifferentFromCaller() (gas: 228096)
[PASS] test_redeem() (gas: 226496)
[PASS] test_redeem_ownerDifferentFromCaller() (gas: 258221)
[PASS] test_withdraw() (gas: 222553)
[PASS] test_withdraw_ownerDifferentFromCaller() (gas: 254263)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 43.09ms (12.95ms CPU time)

Ran 7 tests for tests/contracts/treasury-spoke/TreasurySpoke.Upgradeable.t.sol:TreasurySpokeUpgradeableTest
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 5000, μ: 888998, ~: 888998)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 5000, μ: 904197, ~: 904190)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 5000, μ: 1778359, ~: 1778352)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_revertsWith_InvalidAddress() (gas: 7098)
[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 886490)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 5000, μ: 1780969, ~: 1780953)
Logs:
  Bound result 1000000000

[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 14290)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 11.45s (11.42s CPU time)

Ran 23 tests for tests/contracts/treasury-spoke/TreasurySpoke.t.sol:TreasurySpokeTest
[PASS] test_deploy_reverts_on_invalid_params() (gas: 7142)
[PASS] test_getters() (gas: 1470232)
[PASS] test_initial_state() (gas: 433743)
[PASS] test_supply(uint256) (runs: 5000, μ: 143344, ~: 143134)
Logs:
  Bound result 700000000000000000

[PASS] test_supplySkimmed(uint256) (runs: 5000, μ: 141501, ~: 141291)
Logs:
  Bound result 700000000000000000

[PASS] test_supplySkimmed_multiHub_differentAsset(uint256,uint256) (runs: 5000, μ: 263850, ~: 264116)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_supplySkimmed_multiHub_sameAsset(uint256) (runs: 5000, μ: 253583, ~: 253372)
Logs:
  Bound result 700000000000000000

[PASS] test_supplySkimmed_revertsWith_InsufficientTransferred(uint256) (runs: 5000, μ: 83423, ~: 84009)
Logs:
  Bound result 700000000000000000

[PASS] test_supplySkimmed_revertsWith_OwnableUnauthorizedAccount() (gas: 25250)
[PASS] test_supply_multiHub_differentAsset(uint256,uint256) (runs: 5000, μ: 268260, ~: 268526)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_supply_multiHub_sameAsset(uint256) (runs: 5000, μ: 255949, ~: 255738)
Logs:
  Bound result 700000000000000000

[PASS] test_supply_revertsWith_OwnableUnauthorizedAccount() (gas: 25319)
[PASS] test_transfer_fuzz(address,uint256,uint256) (runs: 5000, μ: 105296, ~: 106178)
Logs:
  Bound result 896916018860441862045596081631317837
  Bound result 620530605117181186887565112005323131

[PASS] test_transfer_revertsWith_ERC20InsufficientBalance(uint256) (runs: 5000, μ: 609042, ~: 609042)
[PASS] test_transfer_revertsWith_OwnableUnauthorizedAccount() (gas: 21897)
[PASS] test_withdraw_fuzz_amount_feesOnly(uint256) (runs: 5000, μ: 819379, ~: 819094)
Logs:
  Bound result 700000000000000000

[PASS] test_withdraw_fuzz_amount_interestAndFees(uint256) (runs: 5000, μ: 817067, ~: 816893)
Logs:
  Bound result 700000000000000000

[PASS] test_withdraw_fuzz_amount_interestOnly(uint256) (runs: 5000, μ: 851623, ~: 851333)
Logs:
  Bound result 999999999999999999999999999998

[PASS] test_withdraw_fuzz_maxLiquidityFee(uint256,uint256,uint256) (runs: 5000, μ: 883146, ~: 881756)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 80677111

[PASS] test_withdraw_maxLiquidityFee() (gas: 882499)
Logs:
  Bound result 2
  Bound result 1000000000000000000000
  Bound result 29376000

[PASS] test_withdraw_multiHub_differentAsset(uint256,uint256) (runs: 5000, μ: 291165, ~: 291277)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_withdraw_multiHub_sameAsset(uint256) (runs: 5000, μ: 281600, ~: 281310)
Logs:
  Bound result 700000000000000000

[PASS] test_withdraw_revertsWith_OwnableUnauthorizedAccount() (gas: 25330)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 71.88s (71.85s CPU time)

Ran 12 tests for tests/contracts/spoke/libraries/UserPositionUtils.t.sol:UserPositionUtilsTest
[PASS] test_applyPremiumDelta() (gas: 26238)
[PASS] test_calculatePremiumDelta() (gas: 17570)
[PASS] test_calculatePremiumRay() (gas: 19422)
[PASS] test_calculateRestoreAmount() (gas: 24251)
[PASS] test_fuzz_applyPremiumDelta((int256,int256,uint256)) (runs: 5000, μ: 34335, ~: 34453)
Logs:
  Bound result 111909824546585946303881311519
  Bound result 0

[PASS] test_fuzz_calculatePremiumDelta((uint256,uint256,int256,uint256,uint256,uint256,uint256)) (runs: 5000, μ: 49056, ~: 49220)
Logs:
  Bound result 1000000000000000000000000003
  Bound result 3
  Bound result -587592131872415209524341566500
  Bound result 228622787900151
  Bound result 122170668579645
  Bound result 99999
  Bound result 26635120011735472905607663553

[PASS] test_fuzz_calculatePremiumRay(uint256,int256,uint256) (runs: 5000, μ: 33347, ~: 33280)
Logs:
  Bound result 99000000000000000000000000773
  Bound result 898842046793144366833378630708
  Bound result 17869

[PASS] test_fuzz_calculateRestoreAmount(uint256,uint256,int256,uint256,uint256) (runs: 5000, μ: 42578, ~: 42560)
Logs:
  Bound result 71892158194320522147230230861
  Bound result 14876628525845802083213
  Bound result 193402794099889712078177319665859792404
  Bound result 2683139293619584261203042
  Bound result 15305

[PASS] test_fuzz_getUserDebt_DrawnIndex(uint256,uint256,int256,uint256) (runs: 5000, μ: 39637, ~: 39603)
Logs:
  Bound result 10285931761460056055964513929
  Bound result 364256759614167806228868235117
  Bound result -178462056718704601941898858
  Bound result 370041050254979127254336089444

[PASS] test_fuzz_getUserDebt_HubAndAssetId(uint256,uint256,int256,uint256) (runs: 5000, μ: 45598, ~: 45564)
Logs:
  Bound result 10285931761460056055964513929
  Bound result 364256759614167806228868235117
  Bound result -178462056718704601941898858
  Bound result 370041050254979127254336089444

[PASS] test_getUserDebt_DrawnIndex() (gas: 23467)
[PASS] test_getUserDebt_HubAndAssetId() (gas: 30216)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 4.37s (4.36s CPU time)

Ran 17 tests for tests/contracts/libraries/math/WadRayMath.t.sol:WadRayMathDifferentialTest
[PASS] test_bpsToRay_fuzz(uint256) (runs: 5000, μ: 11777, ~: 11826)
[PASS] test_bpsToWad_fuzz(uint256) (runs: 5000, μ: 11773, ~: 11813)
[PASS] test_constants() (gas: 12879)
[PASS] test_fromRayUp_fuzz(uint256) (runs: 5000, μ: 11047, ~: 11072)
[PASS] test_fromWadDown_fuzz(uint256) (runs: 5000, μ: 9378, ~: 9378)
[PASS] test_fuzz_rayDiv(uint256,uint256) (runs: 5000, μ: 12434, ~: 12807)
[PASS] test_fuzz_rayMul(uint256,uint256) (runs: 5000, μ: 11618, ~: 12155)
[PASS] test_fuzz_wadDiv(uint256,uint256) (runs: 5000, μ: 12620, ~: 12918)
[PASS] test_fuzz_wadMul(uint256,uint256) (runs: 5000, μ: 11577, ~: 12134)
[PASS] test_rayDiv() (gas: 39659)
[PASS] test_rayMul() (gas: 28767)
[PASS] test_roundRayUp_fuzz(uint256) (runs: 5000, μ: 12770, ~: 12909)
[PASS] test_roundRayUp_overflow() (gas: 14831)
[PASS] test_toRay_fuzz(uint256) (runs: 5000, μ: 11693, ~: 12264)
[PASS] test_toWad_fuzz(uint256) (runs: 5000, μ: 11836, ~: 12262)
[PASS] test_wadDiv() (gas: 40065)
[PASS] test_wadMul() (gas: 28408)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 2.58s (2.57s CPU time)

Ran 7 tests for tests/contracts/spoke/libraries/EIP712Hash.t.sol:EIP712HashTest
[PASS] test_constants() (gas: 9906)
[PASS] test_hash_positionManagerUpdate_fuzz((address,bool)) (runs: 5000, μ: 5339, ~: 5339)
[PASS] test_hash_setUserPositionManagers_fuzz((address,(address,bool)[],uint256,uint256)) (runs: 5000, μ: 279945, ~: 282010)
[PASS] test_hash_tokenizedDeposit_fuzz((address,uint256,address,uint256,uint256)) (runs: 5000, μ: 6515, ~: 6515)
[PASS] test_hash_tokenizedMint_fuzz((address,uint256,address,uint256,uint256)) (runs: 5000, μ: 6514, ~: 6514)
[PASS] test_hash_tokenizedRedeem_fuzz((address,uint256,address,uint256,uint256)) (runs: 5000, μ: 6515, ~: 6515)
[PASS] test_hash_tokenizedWithdraw_fuzz((address,uint256,address,uint256,uint256)) (runs: 5000, μ: 6536, ~: 6536)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 16.79s (16.79s 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, μ: 6656417, ~: 6506258)
Logs:
  Bound result 688246027879663861870333934469
  Bound result 611751555254259661766551983360
  Bound result 7559
  Bound result 12784
  Bound result 1977
  Bound result 19868821230087
  Bound result 499999800000000001
  Bound result 18107
  Bound result 531
  Bound result 1977
  Bound result 19868821230087
  Bound result 499999800000000001
  Bound result 18107

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

Ran 6 tests for tests/contracts/hub/fees/Hub.PayFee.t.sol:HubPayFeeTest
[PASS] test_payFee_fuzz(uint256,uint256) (runs: 5000, μ: 712220, ~: 712380)
Logs:
  Bound result 80000000000000000000000000
  Bound result 0
  Bound result 2596000000000000000

[PASS] test_payFee_fuzz_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 712652, ~: 712929)
Logs:
  Bound result 1
  Bound result 331140237
  Bound result 1

[PASS] test_payFee_revertsWith_InvalidShares() (gas: 25298)
[PASS] test_payFee_revertsWith_SpokeNotActive() (gas: 67924)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded() (gas: 142707)
[PASS] test_payFee_revertsWith_underflow_added_shares_exceeded_with_interest() (gas: 646910)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 27.77s (27.74s 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, μ: 2358985, ~: 2410922)
Logs:
  Bound result 399689378631262050030180083907
  Bound result 91213558025843298110010426369
  Bound result 137194839325814207
  Bound result 22060124320603096060
  Bound result 17638653339653610861

[PASS] test_getUserRiskPremium_fuzz_applyingInterest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1673268, ~: 1730549)
Logs:
  Bound result 4475075785254438
  Bound result 346803276684397183850384383239
  Bound result 145253857480925558
  Bound result 28168306973900195421

[PASS] test_getUserRiskPremium_fuzz_four_reserves_change_cr(uint256,uint256,uint256,uint256,uint256,uint24) (runs: 5000, μ: 2090531, ~: 2072980)
Logs:
  Bound result 677
  Bound result 189
  Bound result 2989705018929936598
  Bound result 0
  Bound result 99389463372627470674
  Bound result 952516542933738469136203552

[PASS] test_getUserRiskPremium_fuzz_four_reserves_change_one_price(uint256,uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 2268604, ~: 2252681)
Logs:
  Bound result 2667053080410069
  Bound result 189
  Bound result 2989705018929936598
  Bound result 0
  Bound result 99389463372627470674
  Bound result 952516542933738469136203552

[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, μ: 1988852, ~: 1996295)
Logs:
  Bound result 18
  Bound result 27
  Bound result 259200000
  Bound result 9259
  Bound result 2
  Bound result 7
  Bound result 23086
  Bound result 2705
  Bound result 10000000000000000
  Bound result 1565
  Bound result 6634652662230263
  Bound result 3201
  Bound result 18922
  Bound result 7032
  Bound result 58622
  Bound result 94591

[PASS] test_getUserRiskPremium_fuzz_four_reserves_supply_and_borrow(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 1582607, ~: 1579543)
Logs:
  Bound result 399689378631262050030180083907
  Bound result 487079309328974541148217920208
  Bound result 12850229434672365
  Bound result 22060124320603096060
  Bound result 17638653339653610861

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

[PASS] test_getUserRiskPremium_fuzz_supply_does_not_impact(uint256,uint256) (runs: 5000, μ: 607022, ~: 606905)
Logs:
  Bound result 80000000000000000000000000
  Bound result 596000000000000000

[PASS] test_getUserRiskPremium_fuzz_three_reserves_supply_and_borrow(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1254683, ~: 1295105)
Logs:
  Bound result 4475075785254438
  Bound result 149854217388389874189986683847
  Bound result 42830599330452951
  Bound result 28168306973900195421

[PASS] test_getUserRiskPremium_fuzz_two_reserves_supply_and_borrow(uint256,uint256,uint256) (runs: 5000, μ: 1048332, ~: 1082497)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 161864027721225736371419722135

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

Ran 11 tests for tests/contracts/hub/add-remove/Hub.Reclaim.t.sol:HubReclaimTest
[PASS] test_reclaim() (gas: 642334)
Logs:
  Bound result 1000000000000000000000
  Bound result 500000000000000000000
  Bound result 200000000000000000000

[PASS] test_reclaim_fullAmount() (gas: 623453)
[PASS] test_reclaim_fuzz(uint256,uint256,uint256) (runs: 5000, μ: 644011, ~: 643310)
Logs:
  Bound result 1
  Bound result 1
  Bound result 1

[PASS] test_reclaim_multipleSweepsAndReclaims() (gas: 734012)
[PASS] test_reclaim_revertsWith_AssetNotListed() (gas: 18447)
[PASS] test_reclaim_revertsWith_InsufficientTransferred() (gas: 442924)
[PASS] test_reclaim_revertsWith_InsufficientTransferred_noSwept() (gas: 109383)
[PASS] test_reclaim_revertsWith_InvalidAmount_zero() (gas: 99136)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 98357, ~: 98357)
[PASS] test_reclaim_revertsWith_OnlyReinvestmentController_init() (gas: 46036)
[PASS] test_reclaim_revertsWith_underflow_exceedsSwept_afterSweep() (gas: 606671)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 16.19s (16.16s CPU time)

Ran 12 tests for tests/contracts/hub/draw-restore/Hub.RefreshPremium.t.sol:HubRefreshPremiumTest
[PASS] test_refreshPremium_emitsEvent() (gas: 264186)
[PASS] test_refreshPremium_fuzz_positiveDeltas(uint256,int256,int256) (runs: 5000, μ: 502794, ~: 509033)
Logs:
  Bound result 1000000000000000000000000000000
  Bound result 108632842769905402063264967525
  Bound result 100000000000

[PASS] test_refreshPremium_fuzz_withAccrual(uint256,uint256,uint256,uint256) (runs: 5000, μ: 480937, ~: 490442)
Logs:
  Bound result 4475075785254438
  Bound result 414479499784986
  Bound result 451223520496473717365188934664917977241033
  Bound result 134801555566947040342414729001

[PASS] test_refreshPremium_haltedSpokesAllowed() (gas: 129404)
[PASS] test_refreshPremium_maxRiskPremiumThreshold() (gas: 910790)
[PASS] test_refreshPremium_negativeDeltas(uint256) (runs: 5000, μ: 472542, ~: 472498)
Logs:
  Bound result 700000000000000000

[PASS] test_refreshPremium_negativeDeltas_withAccrual(uint256) (runs: 5000, μ: 544243, ~: 544467)
Logs:
  Bound result 700000000000000000

[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_NonZeroRestoredPremiumRay() (gas: 867378)
[PASS] test_refreshPremium_revertsWith_InvalidPremiumChange_RiskPremiumThresholdExceeded_DecreasingPremium() (gas: 886242)
[PASS] test_refreshPremium_revertsWith_SpokeNotActive() (gas: 65397)
[PASS] test_refreshPremium_riskPremiumThreshold() (gas: 933880)
[PASS] test_refreshPremium_spokePremiumUpdateIsContained() (gas: 723261)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 20.29s (20.26s 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, μ: 460278, ~: 461824)
[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, μ: 2443496, ~: 2411000)
[PASS] test_setUserPositionManagersWithSig_revertsWith_InvalidAccountNonce(bytes32) (runs: 5000, μ: 258300, ~: 257501)
[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 60.24s (60.21s 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 43.94ms (11.65ms CPU time)

Ran 15 tests for tests/contracts/hub/add-remove/Hub.Remove.t.sol:HubRemoveTest
[PASS] test_remove() (gas: 221433)
Logs:
  Bound result 2
  Bound result 100000000000000000000

[PASS] test_remove_all_with_interest() (gas: 387732)
[PASS] test_remove_fuzz(uint256,uint256) (runs: 5000, μ: 220242, ~: 220306)
Logs:
  Bound result 0
  Bound result 2596000000000000000

[PASS] test_remove_fuzz_all_liquidity_with_interest(uint256,uint256) (runs: 5000, μ: 438434, ~: 438707)
Logs:
  Bound result 100000000000000000000
  Bound result 544000000

[PASS] test_remove_fuzz_multi_spoke(uint256,uint256) (runs: 5000, μ: 304344, ~: 304458)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_remove_fuzz_multi_spoke_with_interest(uint256,uint256,uint256,uint256) (runs: 5000, μ: 439473, ~: 439978)
Logs:
  Bound result 4475075785254438
  Bound result 27990576729831268045496833807
  Bound result 16891460059776472506697061478
  Bound result 541975908

[PASS] test_remove_revertsWith_InsufficientLiquidity() (gas: 162043)
[PASS] test_remove_revertsWith_InsufficientLiquidity_exceeding_added_amount() (gas: 151233)
[PASS] test_remove_revertsWith_InsufficientLiquidity_zero_added() (gas: 26348)
[PASS] test_remove_revertsWith_InvalidAddress() (gas: 21463)
[PASS] test_remove_revertsWith_InvalidAmount() (gas: 23620)
[PASS] test_remove_revertsWith_SpokeHalted() (gas: 68400)
[PASS] test_remove_revertsWith_SpokeNotActive() (gas: 68398)
[PASS] test_remove_revertsWith_underflow_exceeding_added_amount() (gas: 186917)
[PASS] test_remove_revertsWtih_underflow_one_extra_wei() (gas: 367420)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 31.85s (31.82s CPU time)

Ran 7 tests for tests/contracts/hub/deficit/Hub.ReportDeficit.t.sol:HubReportDeficitTest
[PASS] test_reportDeficit_fuzz_revertsWith_SurplusDrawnDeficitReported(uint256) (runs: 5000, μ: 229168, ~: 229606)
Logs:
  Bound result 700000000000000000

[PASS] test_reportDeficit_fuzz_revertsWith_SurplusPremiumRayDeficitReported(uint256) (runs: 5000, μ: 229858, ~: 230296)
Logs:
  Bound result 700000000000000000

[PASS] test_reportDeficit_fuzz_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 381756, ~: 382431)
Logs:
  Bound result 792
  Bound result 10
  Bound result 102
  Bound result 63

[PASS] test_reportDeficit_halted() (gas: 274045)
[PASS] test_reportDeficit_revertsWith_InvalidAmount() (gas: 27786)
[PASS] test_reportDeficit_revertsWith_SpokeNotActive(address) (runs: 5000, μ: 40042, ~: 40042)
[PASS] test_reportDeficit_with_premium() (gas: 381054)
Logs:
  Bound result 10000000000
  Bound result 31536000
  Bound result 5000000000
  Bound result 0

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

Ran 3 tests for tests/contracts/hub/misc/Hub.Rescue.t.sol:HubRescueTest
[PASS] test_cannot_rescue_liquidity_fee_reverts_with_InsufficientTransferred() (gas: 277182)
[PASS] test_rescue_fuzz_with_interest(uint256,uint256) (runs: 5000, μ: 520756, ~: 520712)
Logs:
  Bound result 546449777
  Bound result 100000000000000000000000000000

[PASS] test_rescue_scenario_fuzz(uint256) (runs: 5000, μ: 458913, ~: 458708)
Logs:
  Bound result 700000000000000000

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

Ran 23 tests for tests/contracts/hub/draw-restore/Hub.Restore.t.sol:HubRestoreTest
[PASS] test_restore_full_amount_with_interest() (gas: 379923)
Logs:
  Bound result 1000000000000000000000
  Bound result 500000000000000000000
  Bound result 31536000

[PASS] test_restore_full_amount_with_interest_and_premium() (gas: 695434)
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, μ: 381204, ~: 381298)
Logs:
  Bound result 1
  Bound result 1
  Bound result 80677111

[PASS] test_restore_fuzz_full_amount_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 685590, ~: 697386)
Logs:
  Bound result 4475075785254438
  Bound result 1195560508342773
  Bound result 73429313
  Bound result 14401321381430

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest(uint256,uint256,uint256) (runs: 5000, μ: 255558, ~: 256677)
Logs:
  Bound result 1
  Bound result 1
  Bound result 80677111

[PASS] test_restore_fuzz_revertsWith_SurplusDrawnRestored_with_interest_and_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 655141, ~: 655404)
Logs:
  Bound result 4475075785254438
  Bound result 1195560508342773
  Bound result 73429313
  Bound result 14401321381430

[PASS] test_restore_one_share_delta_increase_revertsWith_InvalidPremiumChange() (gas: 246388)
[PASS] test_restore_partial_drawn() (gas: 341434)
[PASS] test_restore_partial_same_block() (gas: 340516)
[PASS] test_restore_premiumDeltas_twoWeiIncrease_realizedDelta() (gas: 244814)
[PASS] test_restore_revertsWith_InsufficientTransferred() (gas: 264148)
[PASS] test_restore_revertsWith_InvalidAmount_zero() (gas: 67795)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumIncrease() (gas: 253321)
[PASS] test_restore_revertsWith_InvalidPremiumChange_premiumSharesIncrease() (gas: 253365)
[PASS] test_restore_revertsWith_SpokeHalted() (gas: 110434)
[PASS] test_restore_revertsWith_SpokeNotActive_whenPaused() (gas: 196951)
[PASS] test_restore_revertsWith_SurplusDrawnRestored() (gas: 371756)
[PASS] test_restore_revertsWith_SurplusDrawnRestored_with_interest() (gas: 255279)
Logs:
  Bound result 100000000000000000000
  Bound result 50000000000000000000
  Bound result 15768000

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

[PASS] test_restore_revertsWith_SurplusPremiumRayRestored() (gas: 517967)
[PASS] test_restore_revertsWith_underflow_offsetIncrease() (gas: 262202)
[PASS] test_restore_tooMuchDrawn_revertsWith_SurplusDrawnRestored() (gas: 222111)
[PASS] test_restore_when_asset_caps_reset() (gas: 459000)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 19.08s (19.05s 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, μ: 711048, ~: 710886)
Logs:
  Bound result 4757

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

[PASS] test_accrueInterest_TenPercentRp(uint256,uint40) (runs: 5000, μ: 613266, ~: 613715)
Logs:
  Bound result 80000000000000000000000000
  Bound result 724598919

[PASS] test_accrueInterest_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 572533, ~: 572913)
Logs:
  Bound result 80000000000000000000000000
  Bound result 724598919

[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, μ: 4871790, ~: 4892338)
Logs:
  Bound result 305375510110605085784250
  Bound result 838324472593858632247811151037
  Bound result 479838552462878223
  Bound result 78332134910116782229
  Bound result 320722892869241549999882771013
  Bound result 208534014331542203242891652683
  Bound result 601072247187333131
  Bound result 38467602528369177241
  Bound result 185
  Bound result 53845
  Bound result 30746
  Bound result 61159
  Bound result 198027
  Bound result 320722892869241549999882771013
  Bound result 208534014331542203242891652683
  Bound result 601072247187333131
  Bound result 38467602528369177241

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

Ran 1 test for tests/contracts/hub/misc/Hub.Rounding.t.sol:HubRoundingTest
[PASS] test_sharePriceWithMultipleDonations() (gas: 681921221)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.90s (2.87s 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, μ: 558029, ~: 558105)
Logs:
  Bound result 75908
  Bound result 73429313
  Bound result 3
  Bound result 360452665066617555

[PASS] test_accrueLiquidityFee_fuzz_maxLiquidityFee_with_premium_multiple_users(uint256,uint256,uint256,uint256,uint256) (runs: 5000, μ: 819029, ~: 819122)
Logs:
  Bound result 10861
  Bound result 91588948
  Bound result 2
  Bound result 237267049552026281710378789740
  Bound result 95530386142700665705760270418

[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.10s (18.07s 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, μ: 716831, ~: 717825)
Logs:
  Bound result 544000000
  Bound result 80000000000000000000000000

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

[PASS] test_supply_fuzz_index_increase_no_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1263826, ~: 1271819)
Logs:
  Bound result 1000000000000000000000000000000
  Bound result 52352
  Bound result 3
  Bound result 688857307

[PASS] test_supply_fuzz_index_increase_with_premium(uint256,uint256,uint256,uint256) (runs: 5000, μ: 1456156, ~: 1464045)
Logs:
  Bound result 1000000000000000000000000000000
  Bound result 52352
  Bound result 3
  Bound result 688857307

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

[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 90.34s (90.31s 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.18ms (846.54µ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.34ms (902.46µs CPU time)

Ran 4 tests for tests/contracts/hub/misc/Hub.Skim.t.sol:HubSkimTest
[PASS] test_skimAdd_fuzz_donationAfterAdd(uint256,uint256,uint256) (runs: 5000, μ: 241467, ~: 241427)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 61864027721225739099728677111

[PASS] test_skimAdd_fuzz_donationBeforeAdd(uint256,uint256,uint256) (runs: 5000, μ: 241477, ~: 241437)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 61864027721225739099728677111

[PASS] test_skimAdd_fuzz_wrongSpokeTransfer(uint256,uint256,uint256) (runs: 5000, μ: 230536, ~: 230486)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 124013

[PASS] test_skimRestore_fuzz_liquidityDonation(uint256,uint256,uint256) (runs: 5000, μ: 282218, ~: 283377)
Logs:
  Bound result 0
  Bound result 409652
  Bound result 328839

Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 33.79s (33.76s 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, μ: 261787, ~: 261744)
Logs:
  Bound result 4510

[PASS] test_accrueLiquidityFee_exact() (gas: 929328)
[PASS] test_accrueLiquidityFee_fuzz_BorrowAmountAndSkipTime(uint256,uint40) (runs: 5000, μ: 1007277, ~: 1031646)
Logs:
  Bound result 80000000000000000000000000
  Bound result 214295263

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

Ran 10 tests for tests/contracts/hub/configuration/Hub.SpokeConfig.t.sol:HubSpokeConfigTest
[PASS] test_add_active_halted_scenarios() (gas: 320777)
[PASS] test_draw_active_halted_scenarios() (gas: 323360)
[PASS] test_eliminateDeficit_active_halted_scenarios() (gas: 859545)
[PASS] test_mintFeeShares_active_halted_scenarios() (gas: 854206)
[PASS] test_payFeeShares_active_halted_scenarios() (gas: 390412)
[PASS] test_refreshPremium_active_halted_scenarios() (gas: 286040)
[PASS] test_remove_active_halted_scenarios() (gas: 337215)
[PASS] test_reportDeficit_active_halted_scenarios() (gas: 466692)
[PASS] test_restore_active_halted_scenarios() (gas: 372855)
[PASS] test_transferShares_fuzz_active_halted_scenarios(bool,bool,bool,bool) (runs: 5000, μ: 223479, ~: 223453)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 4.09s (4.06s 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, μ: 6815819, ~: 6815812)
Logs:
  Bound result 1000000000

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

[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, μ: 14842006, ~: 14841990)
Logs:
  Bound result 1000000000

[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.15s (25.12s 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.16ms (4.36ms CPU time)

Ran 8 tests for tests/contracts/hub/misc/Hub.Sweep.t.sol:HubSweepTest
[PASS] test_sweep() (gas: 471853)
Logs:
  Bound result 1000000000000000000000
  Bound result 1000000000000000000000

[PASS] test_sweep_does_not_impact_utilization(uint256,uint256) (runs: 5000, μ: 653590, ~: 654743)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_sweep_fuzz(uint256,uint256) (runs: 5000, μ: 476271, ~: 476465)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_sweep_revertsWith_AssetNotListed() (gas: 17956)
[PASS] test_sweep_revertsWith_InsufficientLiquidity() (gas: 227157)
[PASS] test_sweep_revertsWith_InvalidAmount() (gas: 110855)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController(address) (runs: 5000, μ: 98425, ~: 98425)
[PASS] test_sweep_revertsWith_OnlyReinvestmentController_init() (gas: 45573)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 20.05s (20.02s CPU time)

Ran 7 tests for tests/contracts/hub/add-remove/Hub.TransferShares.t.sol:HubTransferSharesTest
[PASS] test_transferShares() (gas: 199716)
Logs:
  Bound result 1000000000000000000000
  Bound result 1000000000000000000000

[PASS] test_transferShares_fuzz(uint256,uint256) (runs: 5000, μ: 203094, ~: 203299)
Logs:
  Bound result 80000000000000000000000000
  Bound result 2596000000000000000

[PASS] test_transferShares_fuzz_revertsWith_underflow_spoke_added_shares_exceeded(uint256) (runs: 5000, μ: 155824, ~: 155537)
Logs:
  Bound result 700000000000000000

[PASS] test_transferShares_revertsWith_AddCapExceeded() (gas: 211348)
[PASS] test_transferShares_revertsWith_SpokeHalted() (gas: 190902)
[PASS] test_transferShares_revertsWith_SpokeNotActive() (gas: 184103)
[PASS] test_transferShares_zeroShares_revertsWith_InvalidShares() (gas: 27543)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 9.03s (9.00s CPU time)

Ran 10 tests for tests/contracts/hub/misc/Hub.Upgradeable.t.sol:HubUpgradeableTest
[PASS] test_hub_revision_accessible() (gas: 5003152)
[PASS] test_implementation_constructor_fuzz(uint64) (runs: 5000, μ: 6332111, ~: 6332111)
[PASS] test_proxy_constructor_fuzz(uint64) (runs: 5000, μ: 6350276, ~: 6350269)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_fuzz_revertsWith_InvalidInitialization(uint64) (runs: 5000, μ: 12660275, ~: 12660268)
Logs:
  Bound result 1000000000

[PASS] test_proxy_constructor_revertsWith_InvalidAddress() (gas: 4998882)
[PASS] test_proxy_constructor_revertsWith_InvalidInitialization_ZeroRevision() (gas: 6329422)
[PASS] test_proxy_reinitialization_fuzz(uint64) (runs: 5000, μ: 14073221, ~: 14073206)
Logs:
  Bound result 1000000000

[PASS] test_proxy_reinitialization_revertsWith_CallerNotProxyAdmin() (gas: 12650654)
[PASS] test_proxy_reinitialization_revertsWith_InvalidAddress() (gas: 12651077)
[PASS] test_proxy_storage_persists_across_upgrade() (gas: 14073302)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 20.50s (20.47s CPU time)

Ran 8 tests for tests/contracts/hub/misc/HubAccrueInterest.t.sol:HubAccrueInterestTest
[PASS] test_accrueInterest_NoActionTaken() (gas: 48710)
[PASS] test_accrueInterest_NoInterest_NoDebt(uint40) (runs: 5000, μ: 406996, ~: 406870)
Logs:
  Bound result 4279

[PASS] test_accrueInterest_NoInterest_OnlyAdd(uint40) (runs: 5000, μ: 210195, ~: 210139)
Logs:
  Bound result 4279

[PASS] test_accrueInterest_fuzz_BorrowAmountAndElapsed(uint256,uint40) (runs: 5000, μ: 279989, ~: 279897)
Logs:
  Bound result 80000000000000000000000000
  Bound result 169539317360

[PASS] test_accrueInterest_fuzz_BorrowAmountRateAndElapsed(uint256,uint256,uint40) (runs: 5000, μ: 398614, ~: 398372)
Logs:
  Bound result 1
  Bound result 9648
  Bound result 166135

[PASS] test_accrueInterest_fuzz_BorrowAndWait(uint40) (runs: 5000, μ: 278696, ~: 278605)
Logs:
  Bound result 4279

[PASS] test_getAssetDrawnRate_MatchesStoredAfterAction() (gas: 195004)
[PASS] test_getAssetDrawnRate_fuzz_DiffersAfterTimePasses(uint40) (runs: 5000, μ: 219590, ~: 219462)
Logs:
  Bound result 4279

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

Ran 13 tests for tests/contracts/hub/configurator/HubConfigurator.GranularAccessControl.t.sol:HubConfiguratorGranularAccessControlTest
[PASS] test_assetManager_canCall_deactivateAsset() (gas: 149209)
[PASS] test_assetManager_canCall_haltAsset() (gas: 149223)
[PASS] test_assetManager_canCall_resetAssetCaps() (gas: 149707)
[PASS] test_assetManager_canCall_updateLiquidityFee() (gas: 90157)
[PASS] test_assetManager_cannotCall_anySpokeManagerMethod() (gas: 354221)
[PASS] test_fuzz_unauthorized_cannotCall_assetManagerMethods(address) (runs: 5000, μ: 279962, ~: 279962)
[PASS] test_fuzz_unauthorized_cannotCall_spokeManagerMethods(address) (runs: 5000, μ: 354590, ~: 354590)
[PASS] test_spokeManager_canCall_addSpoke() (gas: 132156)
[PASS] test_spokeManager_canCall_resetSpokeCaps() (gas: 205666)
[PASS] test_spokeManager_canCall_updateSpokeActive() (gas: 71977)
[PASS] test_spokeManager_canCall_updateSpokeCaps() (gas: 72523)
[PASS] test_spokeManager_canCall_updateSpokeHalted() (gas: 71946)
[PASS] test_spokeManager_cannotCall_anyAssetManagerMethod() (gas: 279027)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 5.60s (5.57s CPU time)

Ran 60 tests for tests/contracts/hub/configurator/HubConfigurator.t.sol:HubConfiguratorTest
[PASS] test_addAsset_fuzz(bool,address,uint8,address,uint256,uint16,uint32,uint32,uint32) (runs: 5000, μ: 457866, ~: 458540)
Logs:
  Bound result 13
  Bound result 103
  Bound result 7821
  Bound result 28531
  Bound result 751
  Bound result 44090

[PASS] test_addAsset_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 48838, ~: 49221)
[PASS] test_addAsset_fuzz_revertsWith_InvalidAssetDecimals(bool,address,uint8,address,uint256,address) (runs: 5000, μ: 70257, ~: 70214)
Logs:
  Bound result 19
  Bound result 2878

[PASS] test_addAsset_revertsWith_InvalidAddress_irStrategy() (gas: 63250)
[PASS] test_addAsset_revertsWith_InvalidAddress_underlying() (gas: 63187)
[PASS] test_addAsset_revertsWith_InvalidLiquidityFee() (gas: 356185)
[PASS] test_addAsset_reverts_invalidIrData() (gas: 81471)
[PASS] test_addSpoke() (gas: 140965)
[PASS] test_addSpokeToAssets() (gas: 239204)
[PASS] test_addSpokeToAssets_revertsWith_AccessManagedUnauthorized() (gas: 28169)
[PASS] test_addSpokeToAssets_revertsWith_MismatchedConfigs() (gas: 35971)
[PASS] test_addSpoke_revertsWith_AccessManagedUnauthorized() (gas: 27836)
[PASS] test_deactivateAsset() (gas: 191176)
[PASS] test_deactivateAsset_revertsWith_AccessManagedUnauthorized() (gas: 29021)
[PASS] test_deactivateSpoke() (gas: 192554)
[PASS] test_deactivateSpoke_revertsWith_AccessManagedUnauthorized() (gas: 29035)
[PASS] test_haltAsset() (gas: 191232)
[PASS] test_haltAsset_revertsWith_AccessManagedUnauthorized() (gas: 28977)
[PASS] test_haltSpoke() (gas: 192574)
[PASS] test_haltSpoke_revertsWith_AccessManagedUnauthorized() (gas: 29023)
[PASS] test_resetAssetCaps() (gas: 265416)
[PASS] test_resetAssetCaps_revertsWith_AccessManagedUnauthorized() (gas: 28952)
[PASS] test_resetSpokeCaps() (gas: 285587)
[PASS] test_resetSpokeCaps_revertsWith_AccessManagedUnauthorized() (gas: 29087)
[PASS] test_updateFeeConfig_Scenario() (gas: 366884)
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, μ: 202966, ~: 203255)
Logs:
  Bound result 4
  Bound result 5784

[PASS] test_updateFeeConfig_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 35062, ~: 35062)
[PASS] test_updateFeeConfig_revertsWith_InvalidAddress_spoke() (gas: 65284)
[PASS] test_updateFeeConfig_revertsWith_InvalidLiquidityFee() (gas: 68932)
[PASS] test_updateFeeReceiver_Scenario() (gas: 237399)
[PASS] test_updateFeeReceiver_WithdrawFromOldSpoke() (gas: 2132208)
[PASS] test_updateFeeReceiver_correctAccruals() (gas: 2170340)
[PASS] test_updateFeeReceiver_fuzz(address) (runs: 5000, μ: 196109, ~: 196127)
[PASS] test_updateFeeReceiver_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 34746, ~: 34746)
[PASS] test_updateFeeReceiver_revertsWith_InvalidAddress_spoke() (gas: 69939)
[PASS] test_updateFeeReceiver_revertsWith_SpokeAlreadyListed() (gas: 95268)
[PASS] test_updateInterestRateData() (gas: 86852)
[PASS] test_updateInterestRateData_revertsWith_AccessManagedUnauthorized() (gas: 30180)
[PASS] test_updateInterestRateStrategy() (gas: 109286)
[PASS] test_updateInterestRateStrategy_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 46099, ~: 46099)
[PASS] test_updateInterestRateStrategy_revertsWith_DrawnRateStrategyReverts() (gas: 91881)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidAddress_irStrategy() (gas: 81455)
[PASS] test_updateInterestRateStrategy_revertsWith_InvalidInterestRateStrategy() (gas: 81656)
[PASS] test_updateLiquidityFee_fuzz(uint256,uint16) (runs: 5000, μ: 107267, ~: 108851)
Logs:
  Bound result 2
  Bound result 4000

[PASS] test_updateLiquidityFee_revertsWith_AccessManagedUnauthorized() (gas: 27622)
[PASS] test_updateLiquidityFee_revertsWith_InvalidLiquidityFee() (gas: 70079)
[PASS] test_updateReinvestmentController() (gas: 117309)
[PASS] test_updateReinvestmentController_fuzz_revertsWith_AccessManagedUnauthorized(address) (runs: 5000, μ: 34703, ~: 34703)
[PASS] test_updateSpokeActive() (gas: 107347)
[PASS] test_updateSpokeActive_revertsWith_AccessManagedUnauthorized() (gas: 31321)
[PASS] test_updateSpokeAddCap() (gas: 81852)
[PASS] test_updateSpokeAddCap_revertsWith_AccessManagedUnauthorized() (gas: 31290)
[PASS] test_updateSpokeCaps() (gas: 81965)
[PASS] test_updateSpokeCaps_revertsWith_AccessManagedUnauthorized() (gas: 31300)
[PASS] test_updateSpokeDrawCap() (gas: 81770)
[PASS] test_updateSpokeDrawCap_revertsWith_AccessManagedUnauthorized() (gas: 31289)
[PASS] test_updateSpokeHalted() (gas: 110103)
[PASS] test_updateSpokeHalted_revertsWith_AccessManagedUnauthorized() (gas: 31276)
[PASS] test_updateSpokeRiskPremiumThreshold() (gas: 81837)
[PASS] test_updateSpokeRiskPremiumThreshold_revertsWith_AccessManagedUnauthorized() (gas: 31301)
Suite result: ok. 60 passed; 0 failed; 0 skipped; finished in 13.16s (13.13s CPU time)

Ran 46 tests for tests/config-engine/HubEngine.t.sol:HubEngineTest
[PASS] test_computeImplementationAddress() (gas: 23584)
[PASS] test_executeHubAssetCapsResets() (gas: 181431)
[PASS] test_executeHubAssetConfigUpdates_allFields() (gas: 334425)
[PASS] test_executeHubAssetConfigUpdates_crossHub() (gas: 247710)
[PASS] test_executeHubAssetConfigUpdates_feeBoth() (gas: 240719)
[PASS] test_executeHubAssetConf...*[Comment body truncated]*

@github-actions

github-actions Bot commented Mar 28, 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,066 9,094 15,510 40,058
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,229 11,402 13,347 37,750
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,165 4,217 20,411 44,935
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,366 13,418 11,210 35,734
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,329 11,502 13,247 37,650
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,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 22,920 22,972 1,656 26,180
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

@github-actions

github-actions Bot commented Mar 28, 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

@yan-man
yan-man marked this pull request as ready for review March 30, 2026 17:15
Comment thread .github/workflows/certora-fastRules.yml Outdated
# certora/conf/libs/LiquidationLogic.conf --rule collateralToLiquidateValueLessThanDebtToLiquidate
# certora/conf/HubValidState.conf --rule totalAssetsVsShares_eliminateDeficit
# certora/conf/LiquidationReportDeficit.conf
# certora/conf/Liquidation.conf

@yan-man yan-man Mar 30, 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.

note: Liquidation spec is flaky and commented out here (but succeeds on local run)

Comment thread .github/workflows/minimize-certora-comments.yml Outdated
certora-run[bot]

This comment was marked as resolved.

Comment thread docs/overview.md Outdated
@yan-man yan-man mentioned this pull request Mar 31, 2026
Comment thread certora/spec/SpokeHealthFactor.spec

@certora-run certora-run Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Verified Rules

  • Group ID: 5445aa6d-1449-4cef-9539-6e3b7d63ea85
  • Commit: 87e03ba
Job Result TIMEOUT VERIFIED Link
Spoke.conf --rule realizedPremiumRayConsistency 1 1 Link
Successful Jobs
Job Result TIMEOUT VERIFIED Link
SpokeWithHub.conf --rule userSuppliedShareConsistency 0 2 Link
SpokeWithHub.conf --rule userPremiumShareConsistency 0 2 Link
SpokeWithHub.conf --rule userPremiumOffsetConsistency 0 2 Link
SpokeWithHub.conf --rule userDrawnShareConsistency 0 2 Link
SpokeWithHub.conf --exclude_rule userDrawnShareConsistency userPremiumShareConsistency userPremiumOffsetConsistency userSuppliedShareConsistency 0 3 Link
SpokeUserIntegrity.conf 0 1 Link
SpokeIntegrity.conf 0 10 Link
SpokeHealthFactor.conf --exclude_rule userHealthAboveThreshold userHealthBelowThresholdCanOnlyIncreaseHealthFactor 0 1 Link
SpokeHealthCheck.conf 0 2 Link
Spoke.conf --rule increaseCollateralOrReduceDebtFunctions 0 2 Link
Spoke.conf --rule drawnSharesZero 0 2 Link
Spoke.conf --rule collateralFactorNotZero 0 2 Link
Spoke.conf --exclude_rule drawnSharesZero noCollateralNoDebt increaseCollateralOrReduceDebtFunctions collateralFactorNotZero realizedPremiumRayConsistency 0 13 Link
LiquidationUserIntegrity.conf 0 1 Link
LiquidationIntegrity.conf 0 2 Link
libs/VerifySymbolicPositionStatus.conf 0 8 Link
libs/SpokeUtils_toValue.conf 0 2 Link
libs/SharesMath.conf 0 10 Link
libs/Premium.conf 0 2 Link
libs/PositionStatus.conf 0 9 Link
libs/Math.conf 0 19 Link
libs/LiquidationLogic_debtToLiquidate.conf 0 4 Link
libs/LiquidationLogic.conf --exclude_rule collateralToLiquidateValueLessThanDebtToLiquidate collateralToLiquidateValueLessThanDebtToLiquidate_general 0 5 Link
libs/LiquidationLogic_Bonus.conf 0 8 Link
libs/LibBit.conf 0 6 Link
HubValidState.conf --exclude_rule totalAssetsVsShares_eliminateDeficit totalAssetsVsShares 0 12 Link
HubIntegrity.conf 0 17 Link
Hub.conf --rule noChangeToOtherSpoke 0 1 Link
Hub.conf --exclude_rule noChangeToOtherSpoke supplyExchangeRateIsMonotonic supplyExchangeRateIsMonotonic_eliminateDeficit_simplified totalAssetsCompareToSuppliedAmount_noVirtual 0 3 Link
HubAccrueUnrealizedFee.conf 0 3 Link
HubAccrueSupplyRate.conf --exclude_rule previewRemoveByShares_withoutAccrue_time_monotonic previewRemoveByAssets_withoutAccrue_time_monotonic 0 10 Link
HubAccrueIntegrity.conf 0 9 Link

@certora-run certora-run Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Verified Rules

  • Group ID: e9cca798-2dd3-44b2-a484-fae5c30d0cf8
  • Commit: 7c3067f
Job Result TIMEOUT VERIFIED Link
libs/SharesMath.conf 1 9 Link
Successful Jobs
Job Result TIMEOUT VERIFIED Link
SpokeWithHub.conf --rule userSuppliedShareConsistency 0 2 Link
SpokeWithHub.conf --rule userPremiumShareConsistency 0 2 Link
SpokeWithHub.conf --rule userPremiumOffsetConsistency 0 2 Link
SpokeWithHub.conf --rule userDrawnShareConsistency 0 2 Link
SpokeWithHub.conf --exclude_rule userDrawnShareConsistency userPremiumShareConsistency userPremiumOffsetConsistency userSuppliedShareConsistency 0 3 Link
SpokeUserIntegrity.conf 0 1 Link
SpokeIntegrity.conf 0 10 Link
SpokeHealthFactor.conf --exclude_rule userHealthAboveThreshold userHealthBelowThresholdCanOnlyIncreaseHealthFactor 0 1 Link
SpokeHealthCheck.conf 0 2 Link
Spoke.conf --rule increaseCollateralOrReduceDebtFunctions 0 2 Link
Spoke.conf --rule drawnSharesZero 0 2 Link
Spoke.conf --rule collateralFactorNotZero 0 2 Link
Spoke.conf --exclude_rule drawnSharesZero noCollateralNoDebt increaseCollateralOrReduceDebtFunctions collateralFactorNotZero realizedPremiumRayConsistency 0 13 Link
LiquidationUserIntegrity.conf 0 1 Link
LiquidationIntegrity.conf 0 2 Link
libs/VerifySymbolicPositionStatus.conf 0 8 Link
libs/SpokeUtils_toValue.conf 0 2 Link
libs/Premium.conf 0 2 Link
libs/PositionStatus.conf 0 9 Link
libs/Math.conf 0 19 Link
libs/LiquidationLogic_debtToLiquidate.conf 0 4 Link
libs/LiquidationLogic.conf --exclude_rule collateralToLiquidateValueLessThanDebtToLiquidate collateralToLiquidateValueLessThanDebtToLiquidate_general 0 5 Link
libs/LiquidationLogic_Bonus.conf 0 8 Link
libs/LibBit.conf 0 6 Link
HubValidState.conf --exclude_rule totalAssetsVsShares_eliminateDeficit totalAssetsVsShares 0 12 Link
HubIntegrity.conf 0 17 Link
Hub.conf --rule noChangeToOtherSpoke 0 1 Link
Hub.conf --exclude_rule noChangeToOtherSpoke supplyExchangeRateIsMonotonic supplyExchangeRateIsMonotonic_eliminateDeficit_simplified totalAssetsCompareToSuppliedAmount_noVirtual 0 3 Link
HubAccrueUnrealizedFee.conf 0 3 Link
HubAccrueSupplyRate.conf --exclude_rule previewRemoveByShares_withoutAccrue_time_monotonic previewRemoveByAssets_withoutAccrue_time_monotonic 0 10 Link
HubAccrueIntegrity.conf 0 9 Link

DhairyaSethi
DhairyaSethi previously approved these changes May 1, 2026

@certora-run certora-run Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Verified Rules

  • Group ID: 06704f9e-bf1f-4b76-a8ed-bf4cf9f53f20
  • Commit: a4cd8f6
Job Result VERIFIED Link
Successful Jobs
Job Result VERIFIED Link
SpokeWithHub.conf --rule userSuppliedShareConsistency 2 Link
SpokeWithHub.conf --rule userPremiumShareConsistency 2 Link
SpokeWithHub.conf --rule userPremiumOffsetConsistency 2 Link
SpokeWithHub.conf --rule userDrawnShareConsistency 2 Link
SpokeWithHub.conf --exclude_rule userDrawnShareConsistency userPremiumShareConsistency userPremiumOffsetConsistency userSuppliedShareConsistency 3 Link
SpokeUserIntegrity.conf 1 Link
SpokeIntegrity.conf 10 Link
SpokeHealthFactor.conf --exclude_rule userHealthAboveThreshold userHealthBelowThresholdCanOnlyIncreaseHealthFactor 1 Link
SpokeHealthCheck.conf 2 Link
Spoke.conf --rule increaseCollateralOrReduceDebtFunctions 2 Link
Spoke.conf --rule drawnSharesZero 2 Link
Spoke.conf --rule collateralFactorNotZero 2 Link
Spoke.conf --exclude_rule drawnSharesZero noCollateralNoDebt increaseCollateralOrReduceDebtFunctions collateralFactorNotZero realizedPremiumRayConsistency 13 Link
LiquidationUserIntegrity.conf 1 Link
LiquidationIntegrity.conf 2 Link
libs/VerifySymbolicPositionStatus.conf 8 Link
libs/SpokeUtils_toValue.conf 2 Link
libs/Premium.conf 2 Link
libs/PositionStatus.conf 9 Link
libs/Math.conf 19 Link
libs/LiquidationLogic_debtToLiquidate.conf 4 Link
libs/LiquidationLogic.conf --exclude_rule collateralToLiquidateValueLessThanDebtToLiquidate collateralToLiquidateValueLessThanDebtToLiquidate_general 5 Link
libs/LiquidationLogic_Bonus.conf 8 Link
libs/LibBit.conf 6 Link
HubValidState.conf --exclude_rule totalAssetsVsShares_eliminateDeficit totalAssetsVsShares 12 Link
HubIntegrity.conf 17 Link
Hub.conf --rule noChangeToOtherSpoke 1 Link
Hub.conf --exclude_rule noChangeToOtherSpoke supplyExchangeRateIsMonotonic supplyExchangeRateIsMonotonic_eliminateDeficit_simplified totalAssetsCompareToSuppliedAmount_noVirtual 3 Link
HubAccrueUnrealizedFee.conf 3 Link
HubAccrueSupplyRate.conf --exclude_rule previewRemoveByShares_withoutAccrue_time_monotonic previewRemoveByAssets_withoutAccrue_time_monotonic 10 Link
HubAccrueIntegrity.conf 9 Link

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants