{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"0edcb64f-c0cf-4ac9-afed-176758f17cde","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"4d160aa3d573a3314d9e024a362b973ee9185e7fe1b84bb4c0dc623420783add","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"}],"objective":"Fix the concrete Sepolia admission failure of UNLOCK job 672489ef-8304-403f-855c-b9dce583bc31 and parked launch 55d5370e-7256-465c-808f-09ba4cc8ccee (launch 1534). Continue the published source https://github.com/identity-md-launches/launch-1534-unlock at f77cf377f6eb58f05ef9b9c61f36407933d5053a, reconciling any newer accepted work. No old bundle recovery or rewrite from scratch is needed.\n\nExact failure: HookDeployer runtime is 26264 bytes, exceeding 24576. UnlkHook itself is 24328 bytes. src/HookDeployer.sol embeds type(UnlkHook).creationCode. scripts/release_artifacts.py incorrectly exempts HookDeployer from its size assertion, although the actual service rejects it.\n\nMake HookDeployer a small pure encoder: remove its UnlkHook import; initCode must accept bytes memory hookCreationCode plus Config calldata and concatenate the provided code with the same four ABI-encoded constructor arguments. initCodeHash must accept the same arguments and hash initCode's result. This helper must not gain deployment authority or become a production factory. Update callers in test/fixtures/SystemFixture.sol and test/FailurePaths.t.sol to supply type(UnlkHook).creationCode. Preserve the official factory launch, manifest placeholders, hook flags and all token/trading/oracle/claim/setup behavior.\n\nRemove the HookDeployer exception from release_artifacts.py; every release artifact must pass actual EIP-170 runtime and initcode limits. Do not increase limits, weaken protected checks or merely hide an oversized artifact. Add a regression test that deploys the helper, asserts runtime <=24576, compares its output/hash to the reviewed hook creation code plus four encoded addresses, and detects a changed setup authority. Run the complete existing suite and confirm creation/runtime bytes for token, hook, router, oracle and claim evidence are unchanged. Refresh the helper ABI, artifact/source digests and outdated size documentation.\n\nDeliver the actual published fix commit, reproducible commands/results and all artifact sizes. Rerun the real IMD admission check if a supported operation is available. Do not claim a local test is service admission, or that job.continue redeploys. Identify the supported way to retry the parked launch against the reviewed fixed commit; do not invent a retry endpoint or silently deploy another token.\n\nSepolia activation remains a separate release prerequisite: confirm the concrete authorized actor and transactions for deployCompanions, actual round-0 certification and configureAndActivate before any broadcast. Keep unresolved protocol-fee halt, treasury reward-round powers and manipulation risks disclosed; this size fix does not authorize acceptance of new risks. No mainnet transactions. If continuation can only publish code, report that explicitly along with the remaining release operation.","parentJobId":"672489ef-8304-403f-855c-b9dce583bc31","planHash":"e5ff82305ca5aaf93c69bb4bcdba6e91dff593e40914ea813d7c657ebd21f9d3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"672489ef-8304-403f-855c-b9dce583bc31","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1534-unlock"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51503","feedbackHash":"2f8946f41410022b59717c32c0815d56628b19213b5fbc080649af10633cf8b3","nodeKey":"build_contract_project","submissionHash":"4d160aa3d573a3314d9e024a362b973ee9185e7fe1b84bb4c0dc623420783add","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"fe4f528b9e4ad3775497d8334c7c5bff18086614ec9803d7b9f08c3dbf93885e","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"187d53a28ef1814a1b538308b0704fc5a9e0888e355a644bfaa28f34acec7790","device":"c1fc321231608a52","findings":[],"hash":"4d160aa3d573a3314d9e024a362b973ee9185e7fe1b84bb4c0dc623420783add","nodeId":"3c7d39b9-5755-4408-9e08-d54b7145dc40","outcome":"completed","summary":"Implemented the pure encoder fix, removed the size exemption, and refreshed ABI, digests, tests, and documentation.\n\n| Artifact | Creation | Full initcode | Runtime |\n|---|---:|---:|---:|\n| UnlkToken | 3444 | 3444 | 2320 |\n| UnlkHook | 25702 | 25830 | 24328 |\n| UnlkSwapRouter | 8102 | 8166 | 7761 |\n| MerkleClaimEvidence | 5943 | 6007 | 5675 |\n| UnlkOracle | 7857 | 7953 | 7517 |\n| HookDeployer | 756 | 756 | **728** |\n\nAll five production contracts’ bytecode remains unchanged. `forge build`, **175 Foundry tests**, five release-gate tests, and `forge fmt --check` pass. `imd launch check .` passes **locally**, not as service re-admission.\n\n[Reproducible commands and release handoff](docs/SIZE_FIX.md) document the remaining work:\n\n- **Publication pending:** no new published fix SHA is available during this step; IMD’s publisher must return it after acceptance.\n- No supported public parked-launch retry operation was found. IMD must establish re-admission of **the same launch 1534** against the reviewed fixed commit. `job.continue` only publishes code. [IMD documentation](https://imd.fun/docs/)\n- Owner `0x48e4e74fe1d0c14404ceb57b9fec5b21329c6ec9` must execute staging and activation; actual round-0 certification and signing arrangements remain prerequisites.\n- Protocol-fee halt, treasury reward-round powers, and manipulation risks remain unresolved.\n\nNo transactions were broadcast. Fresh Sepolia RPC verification returned **HTTP 403 Forbidden**; historical verification remains explicitly dated.","treeHash":"0710257dd00656d130b4c56b7a669734955bb1ef","usage":{"cachedInputTokens":2612608,"inputTokens":136526,"model":"gpt-6-astra","outputTokens":25632,"runtime":"codex","turns":7,"wallClockMs":887421}}],"verification":[{"checks":[{"durationMs":18707,"exitCode":0,"name":"build","output":"Compiling 132 files with Solc 0.8.26\nSolc 0.8.26 finished in 18.57s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/BatchSettlementProperties.t.sol:14:9:\n   |\n14 |         selfdestruct(recipient);\n   |         ^^^^^^^^^^^^\n\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/NativeCustodyInvariants.t.sol:15:9:\n   |\n15 |         selfdestruct(recipient);\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to view\n   --> src/UnlkHook.sol:205:5:\n    |\n205 |     function afterInitialize(address, PoolKey calldata key, uint160, int24)\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":11092,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/HookDeployer.t.sol:HookDeployerTest\n[PASS] testChangedCreationBodyCannotMatchReviewedHash() (gas: 135884)\n[PASS] testChangedSetupAuthorityChangesHashAndCreate2Prediction() (gas: 226190)\n[PASS] testDeployedHelperFitsEvmCodeLimits() (gas: 8947)\n[PASS] testFuzzEncodesCallerSuppliedBytesAndFourAddresses(bytes,address,address,address,address) (runs: 256, μ: 20401, ~: 20352)\n[PASS] testReviewedHookInitCodeAndHash() (gas: 196590)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 13.08ms (12.09ms CPU time)\n\nRan 2 tests for test/LocalScript.t.sol:LocalScriptTest\n[PASS] testLocalScriptRefusesPublicChainId() (gas: 13983272)\n[PASS] testLocalSimulationFunctionDoesNotDependOnCaller() (gas: 68079045)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 14.87ms (14.15ms CPU time)\n\nRan 2 tests for test/TwoStage.t.sol:StageOneConstructorTest\n[PASS] testConstructorRejectsMissingOrConflatedInputs() (gas: 8207)\n[PASS] testOnlyFactoryCanInitializeTheHooksPool() (gas: 43150)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 17.14ms (173.96µs CPU time)\n\nRan 2 tests for test/Stage2Script.t.sol:Stage2ScriptTest\n[PASS] testStage2DeploysFromActualIdentitiesAndOwnerActivates() (gas: 6832294)\n[PASS] testStage2RefusesUnknownLaunchNumber() (gas: 33767)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 22.08ms (1.95ms CPU time)\n\nRan 1 test for test/EvidenceAndOracleProperties.t.sol:RouterDeadlineTest\n[PASS] testDeadlineIsInclusive() (gas: 422030)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 23.09ms (490.90µs CPU time)\n\nRan 10 tests for test/CreditsAndFees.t.sol:CreditsAndFeesTest\n[PASS] testAttestationRequiresActualClaimAndExactLeaf() (gas: 438961)\n[PASS] testClaimTransferAndPayerTransferDoNotDuplicateCredit() (gas: 577960)\n[PASS] testFeeCollectionDoesNotReducePrincipal() (gas: 646031)\n[PASS] testNativeClaimNeverDependsOnAdapterOrFeed() (gas: 846757)\n[PASS] testNativeClaimThenAttestThenSyncThenSale() (gas: 1280110)\n[PASS] testNegativeLiquidityForbiddenEvenForFactory() (gas: 82464)\n[PASS] testProofReleaseAndDedupRemainNativeRules() (gas: 573172)\n[PASS] testSaleFeesCountGrossInputAndNeverCreditFeeRecipients() (gas: 1188451)\n[PASS] testUnauthorizedLiquidityAndDonationNoCredit() (gas: 232025)\n[PASS] testUnclaimedRewardsNotEligible() (gas: 39399)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 28.89ms (3.29ms CPU time)\n\nRan 4 tests for test/SecurityRegression.t.sol:EvidenceCertificationRegressionTest\n[PASS] testActualLaterRoundClaimsHaveNoArtificialCumulativeCeiling() (gas: 1510126)\n[PASS] testDuplicateRecipientCannotOvercreditSmallerActualClaim() (gas: 441218)\n[PASS] testIncompleteTreeCannotBeCertified() (gas: 59593)\n[PASS] testOddTreeReconstructionAndPreCertificationNativeClaim() (gas: 580532)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 32.84ms (1.68ms CPU time)\n\nRan 6 tests for test/ActivationRobustness.t.sol:ActivationRobustnessTest\n[PASS] testPolicySeedRecordsCapacityAndConfirmsTiers() (gas: 30335357)\n[PASS] testSeedBelowOpeningValueFloorCannotLaunch() (gas: 9047798)\n[PASS] testSeedBelowThePoolShareBandCannotLaunch() (gas: 9043839)\n[PASS] testSeedInsideTheOnePercentBandActivates() (gas: 15647267)\n[PASS] testStagingRunsActivationPreconditionsAndCanRepeat() (gas: 21081828)\n[PASS] testSubDustSeedRoundingStillActivates() (gas: 16005370)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 37.00ms (18.26ms CPU time)\n\nRan 1 test for test/RevisionProperties.t.sol:RestagingIsolationTest\n[PASS] testAbandonedBundleIsInertAndMixedBundlesAreRefused() (gas: 6919999)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 21.40ms (1.44ms CPU time)\n\nRan 5 tests for test/EvidenceAndOracleProperties.t.sol:MultiLeafEvidenceTest\n[PASS] testDecreasingEvidenceCannotRevokePreviouslyCreditedClaims() (gas: 1100787)\n[PASS] testProofsFromTheActualTreeCreditExactlyWhatWasDelivered() (gas: 2298120)\n[PASS] testSiblingCannotAttestAnotherWalletsClaim() (gas: 771379)\n[PASS] testSweptRoundFreezesEvidence() (gas: 1136221)\n[PASS] testTheTreeIsWellFormed() (gas: 40973)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 39.55ms (2.87ms CPU time)\n\nRan 8 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test100PercentAloneIsNotFullUnlock() (gas: 7307385)\n[PASS] testArbitraryHookDataAndMultihopPayloadCannotSelectVictim() (gas: 89207)\n[PASS] testCallbacksAllRequireCanonicalManager() (gas: 211512)\n[PASS] testForeignPoolKeyRejectedEvenWithManagerPrank() (gas: 49882)\n[PASS] testNoMintPauseBlacklistUpgradeOrCounterResetEntrypoint() (gas: 114793)\n[PASS] testProtocolFeeChangeCannotSilentlyAlterTradingEconomics() (gas: 357261)\n[PASS] testQuotaMultiplicationDoesNotOverflowAtMaxEligible() (gas: 239235)\n[PASS] testTokenMintsWholeSupplyToDeployerOnly() (gas: 32832)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 40.46ms (7.67ms CPU time)\n\nRan 2 tests for test/SecurityRegression.t.sol:StagingCreationRegressionTest\n[PASS] testCounterfeitConstructorIsRefusedBeforeAnyDeployment() (gas: 6161976)\n[PASS] testOnlySetupAuthorityMayStageAndOnlyUntilActivation() (gas: 11784008)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 21.12ms (2.16ms CPU time)\n\nRan 1 test for test/FailurePaths.t.sol:UnpaidLaunchTest\n[PASS] testNoRequesterMeansNoPayerCreditAnywhere() (gas: 1264616)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 53.88ms (1.04ms CPU time)\n\nRan 4 tests for test/SecurityRegression.t.sol:CodeAuthenticationRegressionTest\n[PASS] testActivationExternalFailureRollsBackEveryBinding() (gas: 913067)\n[PASS] testInconsistentImmutablePatchesAreRejected() (gas: 1782922)\n[PASS] testLaterFactoryDonationsCannotRewriteInitialAllocationReceipts() (gas: 688991)\n[PASS] testRuntimeMutationCannotPassGetterChecks() (gas: 84703)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 67.03ms (4.82ms CPU time)\n\nRan 13 tests for test/TwoStage.t.sol:StageOneTest\n[PASS] testActivationSealsAndCannotBeReplayed() (gas: 5901690)\n[PASS] testCrossLaunchNumberRejected() (gas: 5361101)\n[PASS] testFactoryLiquidityAllowedBeforeActivationButPrincipalStaysLocked() (gas: 37293)\n[PASS] testFirstTierConfirmsBelowTenEthActualReserves() (gas: 35384808)\n[PASS] testLaunchSucceedsWithoutCompanions() (gas: 122562)\n[PASS] testPayerCanTransferBeforeActivationWithoutLosingHistoricalCredit() (gas: 5893013)\n[PASS] testPayerCreditOnlyAfterActivationAndFromOriginalTransferReceipt() (gas: 5842154)\n[PASS] testRequesterReassignmentCannotMoveInitialAllocationCredit() (gas: 5848820)\n[PASS] testSepoliaRequiresPublishedChainlinkFeed() (gas: 5377611)\n[PASS] testSwapsSyncAndMilestonesRevertBeforeActivation() (gas: 5849964)\n[PASS] testTransfersAndNativeClaimsWorkBeforeActivationAndClaimIsCreditedLater() (gas: 6199971)\n[PASS] testUnauthorizedActivationRejected() (gas: 5373249)\n[PASS] testWrongContractsRejected() (gas: 6061423)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 66.43ms (32.76ms CPU time)\n\nRan 1 test for test/SecurityRegression.t.sol:LargeTreeCertificationTest\n[PASS] testMaximumSortedTreeFitsTransactionGasLimit() (gas: 15973574)\nLogs:\n  1024-leaf sorted certification gas: 13939470\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 71.65ms (40.46ms CPU time)\n\nRan 3 tests for test/FailurePaths.t.sol:ActivationFailurePathsTest\n[PASS] testCompanionConstructorsRejectMissingInputs() (gas: 6057)\n[PASS] testCrossLaunchSetupIsRefusedInEveryDirection() (gas: 31144365)\n[PASS] testSepoliaRefusesLocallyClonedServicesEvenWithFeedAtPublishedAddress() (gas: 676754)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 73.02ms (26.90ms CPU time)\n\nRan 3 tests for test/ReleaseConfig.t.sol:ReleaseConfigTest\n[PASS] testReadOnlyReleaseChecksOnLocalFixture() (gas: 2011487)\n[PASS] testReadOnlyReleaseChecksRejectWrongChainOrHash() (gas: 1903758)\n[PASS] testStageOneAloneCannotPassReleaseGate() (gas: 75663436)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 103.23ms (61.02ms CPU time)\n\nRan 17 tests for test/Oracle.t.sol:OracleTest\n[PASS] testBadChainlinkRoundsAndAnswersFailClosed() (gas: 2352246)\n[PASS] testConfirmationGapRestartsRatherThanCountingUnobservedTime() (gas: 14857451)\n[PASS] testEveryTierAndPermanentUnlock() (gas: 136511302)\n[PASS] testFallingPricesNeverLowerReachedTier() (gas: 29259665)\n[PASS] testInvalidDataCannotCountTowardPendingConfirmationOrRevokeRights() (gas: 15083422)\n[PASS] testInvalidDataLongerThanGapRestartsOnNextValidCall() (gas: 694951)\n[PASS] testLongInvalidIntervalRestartsWhetherObservedOrNot() (gas: 807692)\n[PASS] testNegativeTickAveragesRoundConservativelyForBothOrders() (gas: 767868)\n[PASS] testObservedAndUnobservedInvalidIntervalsAgree() (gas: 29667292)\n[PASS] testOneBlockSpikeCannotConfirm() (gas: 739290)\n[PASS] testOracleCannotBeReboundOrConfiguredByAnyone() (gas: 73530)\n[PASS] testRealFeedCadenceCannotBeUsedToResetConfirmation() (gas: 18790257)\n[PASS] testSameTimestampManipulationHasNoTimeWeight() (gas: 758610)\n[PASS] testStaleCheckpointAndFeedPreventNewTierButNotTrades() (gas: 1329158)\n[PASS] testSustainedManipulationRequiresWindowAndConfirmation() (gas: 15126515)\n[PASS] testThresholdMappingBoundaries() (gas: 69776)\n[PASS] testWarmupAndExactWindow() (gas: 400906)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 108.14ms (147.52ms CPU time)\n\nRan 7 tests for test/NativeLaunch.t.sol:NativeLaunchTest\n[PASS] testDeepNativePoolWarmsUpAndCanUnlock() (gas: 136092722)\n[PASS] testNativeBatchSettlement() (gas: 865791)\n[PASS] testNativeBuySellAndFeeDistribution() (gas: 1124516)\n[PASS] testNativeExactOutputRefundToAuthenticatedCaller() (gas: 451888)\n[PASS] testNativeValueMismatchAndUnsolicitedSendRejected() (gas: 91952)\n[PASS] testOneSidedOpeningLocks87PercentWithoutEthFunding() (gas: 62608)\n[PASS] testThinLaunchCannotUnlockFromInitialSpotOrTinyBuy() (gas: 29938965)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 111.04ms (109.03ms CPU time)\n\nRan 4 tests for test/ActivationRobustness.t.sol:ChunkedCertificationTest\n[PASS] testChunkBoundsAndSizeAreFixedByTheFirstChunk() (gas: 29517535)\n[PASS] testDuplicateAcrossChunksWrongRootAndForeignSessionsAreRefused() (gas: 231631551)\n[PASS] testSingleLeafRoundCertifiesThroughTheChunkedPath() (gas: 398202)\n[PASS] testSingleShotRefusesButChunksCertifyAndCredit() (gas: 124071664)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 144.26ms (90.66ms CPU time)\n\nRan 11 tests for test/NativeLaunch.t.sol:NativeWithdrawalTest\n[PASS] testDeepNativePoolWarmsUpAndCanUnlock() (gas: 136092723)\n[PASS] testNativeBatchSettlement() (gas: 865791)\n[PASS] testNativeBuySellAndFeeDistribution() (gas: 1124527)\n[PASS] testNativeExactOutputRefundToAuthenticatedCaller() (gas: 451977)\n[PASS] testNativeSettlementResetsPriorSyncCurrency() (gas: 604340)\n[PASS] testNativeValueMismatchAndUnsolicitedSendRejected() (gas: 91930)\n[PASS] testNativeWithdrawalUsesCEIAndCannotDoubleWithdraw() (gas: 994842)\n[PASS] testOneSidedOpeningLocks87PercentWithoutEthFunding() (gas: 62586)\n[PASS] testOtherWalletCannotWithdrawNativeRefund() (gas: 459878)\n[PASS] testRejectingNativeWalletCanTradeAndRetryWithdrawal() (gas: 1073164)\n[PASS] testThinLaunchCannotUnlockFromInitialSpotOrTinyBuy() (gas: 29938965)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 161.06ms (142.13ms CPU time)\n\nRan 3 tests for test/SecurityRegression.t.sol:OracleOutageRegressionTest\n[PASS] testDepthDipInvalidatesWholeWindowAndRetainsReachedRights() (gas: 16312506)\n[PASS] testFinalTierRequiresItsOwnTwentyFourHours() (gas: 138827744)\n[PASS] testNextTierClockWaitsForItsOwnThreshold() (gas: 15293513)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 189.96ms (135.96ms CPU time)\n\nRan 2 tests for test/RevisionProperties.t.sol:ChunkedCertificationPropertiesTest\n[PASS] testFuzz_abandonedSessionIsInertAndRestartable(uint8,uint256) (runs: 128, μ: 2510388, ~: 2029600)\n[PASS] testFuzz_anyChunkingAndReductionScheduleMatchesSingleShot(uint8,uint256,uint256,uint256,uint8,uint8) (runs: 128, μ: 3995718, ~: 3458071)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 230.89ms (143.51ms CPU time)\n\nRan 1 test for test/StageOneInvariants.t.sol:StageOneInvariantTest\n[PASS]\nStageOneInvariantTest invariants:\n[PASS] invariant_onlyTheAuthorizedCallActivates\n[PASS] invariant_tokenAndClaimsIndependentOfTheHook\n[PASS] invariant_unconfiguredPoolIsInert\n StageOneInvariantTest invariants (runs: 96, calls: 3840, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| StageOneHandler | advance          | 460   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | attemptActivate  | 494   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | claimAndAttest   | 462   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | directSwap       | 466   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | foreignLiquidity | 498   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | routerSwap       | 479   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | syncAndMilestone | 513   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| StageOneHandler | transfer         | 468   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 744.81ms (692.82ms CPU time)\n\nRan 2 tests for test/RevisionProperties.t.sol:SeedGatePropertiesTest\n[PASS] testFuzz_launchedSeedIsAlwaysLiquidAndRefusedSeedIsAlwaysBelowFloor(uint8) (runs: 96, μ: 10875236, ~: 9043277)\n[PASS] testFuzz_poolShareBandDecidesLaunchAndActivation(uint16) (runs: 96, μ: 11451501, ~: 9040781)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.01s (217.38ms CPU time)\n\nRan 8 tests for test/Launch.t.sol:LaunchTest\n[PASS] testCompanionsAreImmutablyBound() (gas: 37886)\n[PASS] testFactoryHoldsPrincipalAndCannotRemoveIt() (gas: 333697)\n[PASS] testLaunchAllocationAndLockedPrincipal() (gas: 191055)\n[PASS] testLaunchIsOnceAndDeployerOnly() (gas: 2730017)\n[PASS] testOnlyCanonicalManagerCanCallHook() (gas: 66479)\n[PASS] testPayerCreditExactDeduplicated() (gas: 137462)\n[PASS] testUnauthorizedFactoryAndWrongPoolRejected() (gas: 80623)\n[PASS] testUnconfiguredComponentsFailClosed() (gas: 42307)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.03s (1.32ms CPU time)\n\nRan 3 tests for test/ManipulationEconomics.t.sol:ManipulationEconomicsTest\n[PASS] testCounterSellingOfAllInitialNonPoolTokens() (gas: 157719009)\nLogs:\n  gross ETH capital (wei): 404492004375936755769\n  attacker ETH exit (wei): 139667041180374722901\n  net ETH exit cost before fee recapture (wei): 264824963195562032868\n  payer ETH fee receipts (wei): 4044920043759367559\n  counter-seller ETH proceeds (wei): 259768813140862823404\n  duration seconds: 201600\n\n[PASS] testPayerCanRecaptureItsNativeFeeShare() (gas: 144653849)\nLogs:\n  gross ETH capital (wei): 181211119085726918584\n  attacker ETH exit (wei): 178745758707992549273\n  net ETH exit cost before fee recapture (wei): 2465360377734369311\n  payer ETH fee receipts (wei): 1812111190857269186\n  counter-seller ETH proceeds (wei): 0\n  duration seconds: 201600\n  net ETH cost after native fee recapture (wei): 653249186877100125\n\n[PASS] testSustainedManipulationUnlockAndExit() (gas: 144667569)\nLogs:\n  gross ETH capital (wei): 181211119085726918584\n  attacker ETH exit (wei): 178745758707992549273\n  net ETH exit cost before fee recapture (wei): 2465360377734369311\n  payer ETH fee receipts (wei): 1812111190857269186\n  counter-seller ETH proceeds (wei): 0\n  duration seconds: 201600\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.09s (319.23ms CPU time)\n\nRan 9 tests for test/Trading.t.sol:TradingTest\n[PASS] testAnotherWalletCannotConsumeVictimsAllowanceOrQuota() (gas: 470687)\n[PASS] testDirectManagerAndForeignRouterSpoofingRejected() (gas: 644028)\n[PASS] testDonatedRouterBalancesCannotCreateCreditOrBeSwept() (gas: 496022)\n[PASS] testExactOutputSaleAccountsActualInput() (gas: 732168)\n[PASS] testExcessSaleRollsBackPoolBalancesOracleAndNonce() (gas: 797176)\n[PASS] testFuzzQuotaBoundary(uint96) (runs: 256, μ: 1032794, ~: 1032869)\n[PASS] testReplayOldCallbackHasNoLiveContext() (gas: 425843)\n[PASS] testSaleBoundaryExecutedInputIncludesPoolFee() (gas: 1062165)\n[PASS] testTransfersDoNotMoveRightsOrAllowChainCredit() (gas: 827129)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 1.44s (1.42s CPU time)\n\nRan 3 tests for test/EvidenceAndOracleProperties.t.sol:OracleReferenceTest\n[PASS] testCheckpointReplacementRewritesOnlyTheCurrentSecond() (gas: 994219)\n[PASS] testFuzzFdvIsMonotonicInTheEthUsdAnswer(uint64,uint64) (runs: 256, μ: 750411, ~: 750531)\n[PASS] testFuzzTwapMatchesBruteForceReference(uint256) (runs: 160, μ: 2692667, ~: 2586419)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.57s (1.99s CPU time)\n\nRan 17 tests for test/FailurePaths.t.sol:RouterAndHookFailurePathsTest\n[PASS] testBatchBoundsAndValueMustMatch() (gas: 186758)\n[PASS] testBatchIsAtomicWhenALaterStepFails() (gas: 830450)\n[PASS] testConfirmationRequiresSixHoursAndCannotSkipTiers() (gas: 15340175)\n[PASS] testFullUnlockKeepsFeesAndRouterAuthentication() (gas: 137004282)\n[PASS] testFuzzOperationHashBindsTraderNonceAndChain(address,uint256,uint64) (runs: 256, μ: 17656, ~: 17656)\n[PASS] testFuzzRemainingQuotaFormula(uint128,uint128,uint8) (runs: 512, μ: 7293364, ~: 7293203)\n[PASS] testFuzzTierIsMonotonicInFdv(uint256,uint256) (runs: 512, μ: 16945, ~: 16913)\n[PASS] testFuzzTransfersMoveExactlyTheAmount(address,uint96) (runs: 256, μ: 122009, ~: 122475)\n[PASS] testHookRejectsMalformedRouteDataAndUnknownSenders() (gas: 238753)\n[PASS] testPartialFillAtPriceLimitChargesOnlyExecutedInput() (gas: 1208964)\n[PASS] testQuotaWidensWithTierAndNeverDoubleCounts() (gas: 16785891)\n[PASS] testRequesterChangeAfterActivationDoesNotMoveThePayer() (gas: 146383)\n[PASS] testRouterCallbackNeedsALiveSwap() (gas: 73817)\n[PASS] testRouterRefusesDegenerateRequests() (gas: 500273)\n[PASS] testSecondRoundClaimsAccumulateOncePerRound() (gas: 995639)\n[PASS] testSlippageRefusalsLeaveNoTrace() (gas: 895597)\n[PASS] testSyncForStrangerAndZeroAddressCreatesNothing() (gas: 108400)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 1.63s (1.71s CPU time)\n\nRan 5 tests for test/BatchSettlementProperties.t.sol:BatchSettlementPropertiesTest\n[PASS] testFuzz_BatchEqualsSequentialExecution(uint256,uint8,bool) (runs: 1000, μ: 4497244, ~: 4045980)\n[PASS] testFuzz_FailureAtAnyBatchIndexRestoresAllowancesFeesAndCredits(uint256,uint8) (runs: 1000, μ: 11327930, ~: 11049233)\n[PASS] test_MaximumMixedBatchOnFreshTokenOnlyManager() (gas: 9205385)\n[PASS] test_OneWeiShortAllowanceRestoresEntireBatchAndRetryWorks() (gas: 1867639)\n[PASS] test_PartialSaleMayPrefundMoreThanQuotaButChargesOnlyExecution() (gas: 903643)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.62s (3.11s CPU time)\n\nRan 1 test for test/Invariants.t.sol:SystemInvariantTest\n[PASS]\nSystemInvariantTest invariants:\n[PASS] invariantEligibleEqualsOnlyExecutedBuysAndSynchronizedProofs\n[PASS] invariantNoActorExceedsItsQuotaBeforeUnlock\n[PASS] invariantPrincipalLiquidityNeverDecreases\n[PASS] invariantSupplyConservedAndRouterHasNoCustody\n SystemInvariantTest invariants (runs: 128, calls: 5120, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| ActionHandler | advance  | 857   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | buy      | 855   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | claim    | 813   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | sell     | 880   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | sync     | 839   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | transfer | 876   | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.84s (1.80s CPU time)\n\nRan 1 test for test/Invariants.t.sol:FullyUnlockedInvariantTest\n[PASS]\nFullyUnlockedInvariantTest invariants:\n[PASS] invariantEligibleEqualsOnlyExecutedBuysAndSynchronizedProofs\n[PASS] invariantNoActorExceedsItsQuotaBeforeUnlock\n[PASS] invariantPrincipalLiquidityNeverDecreases\n[PASS] invariantSupplyConservedAndRouterHasNoCustody\n[PASS] invariantUnlockRemainsPermanentDespiteInvalidFeed\n FullyUnlockedInvariantTest invariants (runs: 128, calls: 5120, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| ActionHandler | advance  | 857   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | buy      | 855   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | claim    | 813   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | sell     | 880   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | sync     | 839   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| ActionHandler | transfer | 876   | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.98s (1.81s CPU time)\n\nRan 2 tests for test/RevisionProperties.t.sol:MilestoneSampleInvariantTest\n[PASS]\nMilestoneSampleInvariantTest invariants:\n[PASS] invariant_confirmationNeedsAnUnbrokenChainOfValidSamples\n[PASS] invariant_invalidSamplesNeverAdvanceTiers\n[PASS] invariant_nothingEverRelocksAndStateIsConsistent\n MilestoneSampleInvariantTest invariants (runs: 48, calls: 1920, reverts: 0)\n\n╭------------------------+----------+-------+---------+----------╮\n| Contract               | Selector | Calls | Reverts | Discards |\n+================================================================+\n| MilestoneSampleHandler | advance  | 315   | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| MilestoneSampleHandler | corrupt  | 343   | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| MilestoneSampleHandler | heal     | 314   | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| MilestoneSampleHandler | march    | 309   | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| MilestoneSampleHandler | sample   | 308   | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| MilestoneSampleHandler | setPrice | 331   | 0       | 0        |\n╰------------------------+----------+-------+---------+----------╯\n\n[PASS] testHandlerReachesTiersAndEveryCorruptionIsInvalid() (gas: 12640787)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.22s (2.20s CPU time)\n\nRan 2 tests for test/QuotaInvariants.t.sol:QuotaInvariantTest\n[PASS]\nQuotaInvariantTest invariants:\n[PASS] invariant_configurationSealedAndRouteEnforced\n[PASS] invariant_ledgerMatchesExecutedDeltas\n[PASS] invariant_milestonesMonotonicAndConsistent\n[PASS] invariant_principalLockedAndFeeTermsFixed\n[PASS] invariant_routerNativeSolvency\n[PASS] invariant_salesNeverExceedQuota\n[PASS] invariant_supplyConservedAndNoCustody\n QuotaInvariantTest invariants (runs: 96, calls: 5760, reverts: 0)\n\n╭--------------+-----------------+-------+---------+----------╮\n| Contract     | Selector        | Calls | Reverts | Discards |\n+=============================================================+\n| QuotaHandler | advance         | 348   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | buyExactIn      | 351   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | buyExactOut     | 398   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | claimAndAttest  | 368   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | claimFees       | 340   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | directSwap      | 341   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | donate          | 369   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | foreignActivate | 338   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | sellExactOut    | 383   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | sellOverQuota   | 367   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | sellWithinQuota | 748   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | setFeed         | 366   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | sync            | 360   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | transfer        | 347   | 0       | 0        |\n|--------------+-----------------+-------+---------+----------|\n| QuotaHandler | withdrawNative  | 336   | 0       | 0        |\n╰--------------+-----------------+-------+---------+----------╯\n\n[PASS] testHandlerActionsActuallyExecute() (gas: 23814275)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.06s (3.04s CPU time)\n\nRan 2 tests for test/ClaimLifecycleInvariants.t.sol:ClaimLifecycleInvariantsTest\n[PASS]\nClaimLifecycleInvariantsTest invariants:\n[PASS] invariant_DistributorReservesAndCashMatchIndependentRoundModel\n[PASS] invariant_FixedSupplyAndInitialReceiptsSurviveAllClaimSequences\n[PASS] invariant_OnlyDeliveredAttestedAndSyncedClaimsCreateRights\n ClaimLifecycleInvariantsTest invariants (runs: 256, calls: 20480, reverts: 0)\n\n╭-----------------------+-------------------+-------+---------+----------╮\n| Contract              | Selector          | Calls | Reverts | Discards |\n+========================================================================+\n| ClaimLifecycleHandler | advance           | 1884  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | attest            | 1908  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | certify           | 1857  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | claim             | 1937  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | deliverAndSync    | 1839  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | openRound         | 1877  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | sweep             | 1832  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | sync              | 1830  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | syncPayer         | 1894  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | transferOrDonate  | 1786  | 0       | 0        |\n|-----------------------+-------------------+-------+---------+----------|\n| ClaimLifecycleHandler | unauthorizedRound | 1836  | 0       | 0        |\n╰-----------------------+-------------------+-------+---------+----------╯\n\n[PASS] test_ModelExercisesDelayedCertificationSweepsAndRecycledFunding() (gas: 4966220)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 9.68s (9.65s CPU time)\n\nRan 2 tests for test/NativeCustodyInvariants.t.sol:NativeCustodyInvariantsTest\n[PASS]\nNativeCustodyInvariantsTest invariants:\n[PASS] invariant_ManagerHasNoUnsettledDeltaOrReusableRouteContext\n[PASS] invariant_NativeLiabilitiesRemainFullyBackedAndBelongToTheirWallet\n[PASS] invariant_TransfersDonationsAndFailedBatchesCannotCreateOrMoveRights\n NativeCustodyInvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------+--------------+-------+---------+----------╮\n| Contract             | Selector     | Calls | Reverts | Discards |\n+==================================================================+\n| NativeCustodyHandler | donateTokens | 2771  | 0       | 0        |\n|----------------------+--------------+-------+---------+----------|\n| NativeCustodyHandler | failBatch    | 2800  | 0       | 0        |\n|----------------------+--------------+-------+---------+----------|\n| NativeCustodyHandler | forceEther   | 2690  | 0       | 0        |\n|----------------------+--------------+-------+---------+----------|\n| NativeCustodyHandler | tradeBatch   | 2721  | 0       | 0        |\n|----------------------+--------------+-------+---------+----------|\n| NativeCustodyHandler | transfer     | 2647  | 0       | 0        |\n|----------------------+--------------+-------+---------+----------|\n| NativeCustodyHandler | withdraw     | 2755  | 0       | 0        |\n╰----------------------+--------------+-------+---------+----------╯\n\n[PASS] test_HandlerTradesRejectsReentersAndDrainsWithoutTakingDonations() (gas: 5300451)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.95s (10.93s CPU time)\n\nRan 38 test suites in 10.95s (41.55s CPU time): 175 tests passed, 0 failed, 0 skipped (175 total tests)\n","passed":true},{"durationMs":125,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MerkleClaimEvidence.abandonSession(uint256)\",\"MerkleClaimEvidence.attest(uint256,address,uint256,bytes32[])\",\"MerkleClaimEvidence.certifyRound(uint256,address[],uint256[])\",\"MerkleClaimEvidence.reduce(uint256,uint256)\",\"MerkleClaimEvidence.submitLeaves(uint256,uint256,address[],uint256[])\",\"UnlkHook.afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\",\"UnlkHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"UnlkHook.afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\",\"UnlkHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"UnlkHook.beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\",\"UnlkHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"UnlkHook.beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\",\"UnlkHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"UnlkHook.configureAndActivate(address,address,address,uint64)\",\"UnlkHook.deployCompanions(uint64,address,bytes,bytes,bytes)\",\"UnlkHook.syncPayer()\",\"UnlkHook.syncRewards(address)\",\"UnlkHook.updateMilestone()\",\"UnlkOracle.bind((address,address,uint24,int24,address),address,int24,int24)\",\"UnlkOracle.checkpoint()\",\"UnlkSwapRouter.receive()\",\"UnlkSwapRouter.swap((bool,int256,uint160,uint256,uint256,uint256))\",\"UnlkSwapRouter.swapBatch((bool,int256,uint160,uint256,uint256,uint256)[])\",\"UnlkSwapRouter.unlockCallback(bytes)\",\"UnlkSwapRouter.withdrawNative()\",\"UnlkToken.approve(address,uint256)\",\"UnlkToken.transfer(address,uint256)\",\"UnlkToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"LICENSE\":25,\"README.md\":153,\"RELEASE_STATUS.json\":49,\"dependencies.lock.json\":24,\"docs/ARTIFACTS.json\":64,\"docs/BUILD_RESULTS.txt\":21,\"docs/BYTECODE_COMPARISON_RESULTS.txt\":8,\"docs/DEPLOYMENT.md\":158,\"docs/ECONOMICS_RESULTS.txt\":49,\"docs/FMT_RESULTS.txt\":0,\"docs/FORK_RESULTS.txt\":24,\"docs/IMD_LAUNCH_CHECK_RESULTS.txt\":1,\"docs/LINT_RESULTS.txt\":372,\"docs/MINIMAL_ENV_TEST_RESULTS.txt\":543,\"docs/NETWORK_VERIFICATION_RESULTS.txt\":7,\"docs/PROTECTED_TEST_RESULTS.txt\":22,\"docs/RECOVERY.md\":65,\"docs/RELEASE_ARTIFACT_TEST_RESULTS.txt\":10,\"docs/SECURITY_REVIEW.md\":128,\"docs/SIZE_FIX.md\":146,\"docs/SOURCE_SHA256SUMS\":458,\"docs/SOURCE_VERIFICATION_RESULTS.txt\":458,\"docs/TEST_RESULTS.txt\":485,\"docs/VALIDATION.md\":131,\"docs/abi/CheckReleaseConfig.json\":46,\"docs/abi/HookDeployer.json\":94,\"docs/abi/IChainlinkEthUsd.json\":48,\"docs/abi/IClaimEvidence.json\":47,\"docs/abi/IHooks.json\":789,\"docs/abi/ILaunchFactoryView.json\":115,\"docs/abi/ILaunchRegistryView.json\":70,\"docs/abi/IMerkleDistributor.json\":125,\"docs/abi/IPoolManager.json\":1286,\"docs/abi/IRouteContext.json\":20,\"docs/abi/LaunchFactory.json\":896,\"docs/abi/LaunchFees.json\":323,\"docs/abi/LaunchRegistry.json\":320,\"docs/abi/MerkleClaimEvidence.json\":461,\"docs/abi/MerkleDistributor.json\":451,\"docs/abi/Stage2.json\":225,\"docs/abi/UnlkHook.json\":1973,\"docs/abi/UnlkOracle.json\":443,\"docs/abi/UnlkSwapRouter.json\":359,\"docs/abi/UnlkToken.json\":425,\"docs/network/capabilities.json\":345,\"docs/network/factory-artifacts.json\":2201,\"docs/network/factory-reference.json\":420,\"docs/network/factory.runtime.hex\":1,\"docs/network/feed-reference.json\":67,\"docs/network/feed-rounds.json\":134,\"docs/network/feed.runtime.hex\":1,\"docs/network/fees.runtime.hex\":1,\"docs/network/job-identity.json\":14,\"docs/network/manager.runtime.hex\":1,\"docs/network/policies.json\":36,\"docs/network/registry-reference.json\":108,\"docs/network/registry.runtime.hex\":1,\"docs/network/sepolia.json\":309,\"docs/network/services.json\":29,\"docs/network/size-fix-status.json\":126,\"foundry.toml\":31,\"launch.json\":35,\"rehearsal/Sepolia.t.sol\":112,\"remappings.txt\":4,\"script/CheckReleaseConfig.s.sol\":85,\"script/LocalDemo.s.sol\":41,\"script/Stage2.s.sol\":98,\"scripts/check.sh\":12,\"scripts/check_protected.py\":31,\"scripts/export_abis.py\":33,\"scripts/generate_code_checks.py\":22,\"scripts/mine-hook.sh\":9,\"scripts/prepare_claim_tree.py\":37,\"scripts/rehearse-sepolia.sh\":4,\"scripts/release_artifacts.py\":56,\"scripts/verify_network.py\":46,\"src/HookDeployer.sol\":37,\"src/HookFlags.sol\":45,\"src/MerkleClaimEvidence.sol\":200,\"src/UnlkHook.sol\":719,\"src/UnlkOracle.sol\":190,\"src/UnlkSwapRouter.sol\":225,\"src/UnlkToken.sol\":42,\"src/interfaces/IIntegration.sol\":86,\"src/libraries/OperationHash.sol\":15,\"src/libraries/ReviewedCode.sol\":10,\"src/libraries/SeedDepth.sol\":41,\"src/libraries/SepoliaRelease.sol\":11,\"test/ADDITIONAL_COVERAGE.md\":94,\"test/ActivationRobustness.t.sol\":303,\"test/Adversarial.t.sol\":117,\"test/BatchSettlementProperties.t.sol\":272,\"test/ClaimLifecycleInvariants.t.sol\":444,\"test/CreditsAndFees.t.sol\":176,\"test/EvidenceAndOracleProperties.t.sol\":349,\"test/FailurePaths.t.sol\":581,\"test/HookDeployer.t.sol\":96,\"test/Invariants.t.sol\":220,\"test/Launch.t.sol\":112,\"test/LocalScript.t.sol\":28,\"test/ManipulationEconomics.t.sol\":117,\"test/NativeCustodyInvariants.t.sol\":296,\"test/NativeLaunch.t.sol\":236,\"test/Oracle.t.sol\":422,\"test/QuotaInvariants.t.sol\":529,\"test/ReleaseConfig.t.sol\":32,\"test/RevisionProperties.t.sol\":593,\"test/SecurityRegression.t.sol\":337,\"test/Stage2Script.t.sol\":62,\"test/StageOneInvariants.t.sol\":281,\"test/Trading.t.sol\":171,\"test/TwoStage.t.sol\":302,\"test/fixtures/LocalFixtures.sol\":59,\"test/fixtures/SystemFixture.sol\":372,\"test/imd/HookFlags.sol\":45,\"test/imd/LaunchFactory.sol\":375,\"test/imd/LaunchFees.sol\":73,\"test/imd/LaunchRegistry.sol\":109,\"test/imd/MerkleDistributor.sol\":181,\"test/imd/PoolFees.sol\":220,\"test/imd/README.md\":29,\"test/mocks/MockERC20.sol\":11,\"test/test_release_artifacts.py\":96},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":3957,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/UnlkSwapRouter.sol:104: Reentrancy in UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166):\n[high/medium] reentrancy-balance at src/UnlkSwapRouter.sol:104: Reentrancy in UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166):\n[medium/medium] divide-before-multiply at src/UnlkOracle.sol:122: UnlkOracle.twapTick() (src/UnlkOracle.sol#122-147) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/UnlkOracle.sol:122: UnlkOracle.twapTick() (src/UnlkOracle.sol#122-147) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/UnlkOracle.sol:90: UnlkOracle.checkpoint() (src/UnlkOracle.sol#90-115) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/UnlkOracle.sol:90: UnlkOracle.checkpoint() (src/UnlkOracle.sol#90-115) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/UnlkHook.sol:478: Reentrancy in UnlkHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/UnlkHook.sol#478-509):\n[medium/medium] uninitialized-local at src/UnlkHook.sol:411: UnlkHook._verifyLaunchRecord(uint64).hookSeen (src/UnlkHook.sol#411) is a local variable never initialized\n[medium/medium] uninitialized-local at src/UnlkHook.sol:410: UnlkHook._verifyLaunchRecord(uint64).tokenSeen (src/UnlkHook.sol#410) is a local variable never initialized\n[medium/medium] uninitialized-local at src/UnlkHook.sol:669: UnlkHook._updateMilestone().fdv (src/UnlkHook.sol#669) is a local variable never initialized\n[medium/medium] uninitialized-local at src/UnlkSwapRouter.sol:114: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256).state (src/UnlkSwapRouter.sol#114) is a local variable never initialized\n[medium/medium] unused-return at src/UnlkHook.sol:363: UnlkHook._verifySeed() (src/UnlkHook.sol#363-374) ignores return value by (liquidity,None,None) = poolManager.getPositionInfo(poolId,launchFactory,seedTickLower,seedTickUpper,bytes32(0)) (src/UnlkHook.sol#364-365)\n[medium/medium] unused-return at src/UnlkOracle.sol:90: UnlkOracle.checkpoint() (src/UnlkOracle.sol#90-115) ignores return value by (liquidity,None,None) = poolManager.getPositionInfo(poolId,factory,rangeLowerTick,rangeUpperTick,bytes32(0)) (src/UnlkOracle.sol#93-94)\n[medium/medium] unused-return at src/UnlkHook.sol:531: UnlkHook._recordSeed(ModifyLiquidityParams) (src/UnlkHook.sol#531-549) ignores return value by (sqrtPrice,None,None,None) = poolManager.getSlot0(poolId) (src/UnlkHook.sol#536)\n[medium/medium] unused-return at src/UnlkHook.sol:456: UnlkHook.beforeSwap(address,PoolKey,SwapParams,bytes) (src/UnlkHook.sol#456-476) ignores return value by (None,None,protocolFee,lpFee) = poolManager.getSlot0(poolId) (src/UnlkHook.sol#470)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: outputBefore = state.outputToken.balanceOf(msg.sender) (src/UnlkSwapRouter.sol#155)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: key = hook.poolKey() (src/UnlkSwapRouter.sol#113)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: state.baseInput = state.inputToken.balanceOf(address(this)) (src/UnlkSwapRouter.sol#120-122)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: state.outputToken.balanceOf(msg.sender) != outputBefore + output (src/UnlkSwapRouter.sol#157)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: ! hook.activated() || block.timestamp > request.deadline || request.amountSpecified == 0 || request.amountSpecified == type()(int256).min || request.maxInput == 0 || request.maxInput > uint256(uint128(type()(int128).max)) || request.minOutput == 0 (src/UnlkSwapRouter.sol#109-111)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: result = poolManager.unlock(abi.encode(key,params,operationNonce,request.maxInput)) (src/UnlkSwapRouter.sol#139)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: state.baseOutput = state.outputToken.balanceOf(address(this)) (src/UnlkSwapRouter.sol#123-124)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) has external calls inside a loop: state.inputToken.balanceOf(address(this)) != state.baseInput + request.maxInput (src/UnlkSwapRouter.sol#129)\n[low/medium] calls-loop at src/UnlkSwapRouter.sol:172: UnlkSwapRouter._balance(IERC20) (src/UnlkSwapRouter.sol#172-174) has external calls inside a loop: currency.balanceOf(address(this)) (src/UnlkSwapRouter.sol#173)\n[low/medium] reentrancy-benign at src/UnlkHook.sol:651: Reentrancy in UnlkHook.updateMilestone() (src/UnlkHook.sol#651-655):\n[low/medium] reentrancy-benign at src/UnlkSwapRouter.sol:104: Reentrancy in UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166):\n[low/medium] reentrancy-benign at src/UnlkHook.sol:478: Reentrancy in UnlkHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/UnlkHook.sol#478-509):\n[low/medium] reentrancy-events at src/UnlkHook.sol:478: Reentrancy in UnlkHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/UnlkHook.sol#478-509):\n[low/medium] reentrancy-events at src/UnlkHook.sol:275: Reentrancy in UnlkHook.configureAndActivate(address,IClaimEvidence,UnlkOracle,uint64) (src/UnlkHook.sol#275-324):\n[low/medium] reentrancy-events at src/UnlkHook.sol:651: Reentrancy in UnlkHook.updateMilestone() (src/UnlkHook.sol#651-655):\n[low/medium] timestamp at src/UnlkOracle.sol:122: UnlkOracle.twapTick() (src/UnlkOracle.sol#122-147) uses timestamp for comparisons\n[low/medium] timestamp at src/UnlkOracle.sol:90: UnlkOracle.checkpoint() (src/UnlkOracle.sol#90-115) uses timestamp for comparisons\n[low/medium] timestamp at src/UnlkSwapRouter.sol:104: UnlkSwapRouter._swap(UnlkSwapRouter.SwapRequest,uint256) (src/UnlkSwapRouter.sol#104-166) uses timestamp for comparisons\n[low/medium] timestamp at src/UnlkOracle.sol:166: UnlkOracle._ethUsd() (src/UnlkOracle.sol#166-179) uses timestamp for comparisons\n[low/medium] timestamp at src/UnlkHook.sol:667: UnlkHook._updateMilestone() (src/UnlkHook.sol#667-709) uses timestamp for comparisons\n[low/medium] timestamp at src/UnlkOracle.sol:150: UnlkOracle.fdvUsd() (src/UnlkOracle.sol#150-164) uses timestamp for comparisons","passed":true},{"durationMs":759,"exitCode":0,"name":"aderyn","output":"[high] eth-send-unchecked-address at src/UnlkSwapRouter.sol:184: ETH transferred without address checks\n[high] reentrancy-state-change at src/MerkleClaimEvidence.sol:190: Reentrancy: State change after external call (8 places)\n[high] unprotected-initializer at src/HookDeployer.sol:19: Unprotected initializer (2 places)\n[low] costly-loop at src/MerkleClaimEvidence.sol:121: Costly operations inside loop (3 places)\n[low] internal-function-used-once at src/HookFlags.sol:35: Internal Function Used Only Once (2 places)\n[low] large-numeric-literal at src/UnlkHook.sol:69: Large Numeric Literal (16 places)\n[low] literal-instead-of-constant at src/UnlkHook.sol:463: Literal Instead of Constant (13 places)\n[low] missing-inheritance at src/UnlkOracle.sol:15: Missing Inheritance\n[low] require-revert-in-loop at src/MerkleClaimEvidence.sol:75: Loop Contains `require`/`revert` (5 places)\n[low] state-change-without-event at src/UnlkHook.sol:456: State Change Without Event (4 places)\n[low] unchecked-return at src/UnlkHook.sol:335: Unchecked Return (2 places)\n[low] uninitialized-local-variable at src/MerkleClaimEvidence.sol:121: Uninitialized Local Variable (2 places)\n[low] unused-import at src/libraries/OperationHash.sol:4: Unused Import","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4d160aa3d573a3314d9e024a362b973ee9185e7fe1b84bb4c0dc623420783add","verifiedTreeHash":"0710257dd00656d130b4c56b7a669734955bb1ef","verifierVersion":"0.1.0+327e1e9f"}]}