{"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":"734d0f71-689f-46e6-bd98-b74bd4bad8b5","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"f527d06f81a4541711c90364bcbc2754efebae97b2b49e2a0c0d1c9daa0a3550","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"}],"objective":"Fix the four actionable findings in audit ef1f6915-b9df-441d-b2e5-db5e9d9e9b35 against commit cb6ca724441c9aebf9a38cb4d7426218e0712723.\n Eliminate the expireReview front-running path that discards a late, valid NotPassed one-shot callback; test both transaction orders and retries. Provide an honest recovery path when a retained receipt’s UUID was consumed or reserved by another ask. Prevent an old terminal reservation from burning a retry’s sole callback. Tighten discardReviewReceipt so a same-UUID field typo or invalid/used “true context” cannot silently erase a genuine verdict.\nRun the report’s proofs as regression tests, preserve cross-request binding and replay protection, recheck the 200k-gas callback with a realistic ERC-1271 signer, and rerun the existing listing/ad escrow tests. Do not claim the owner-supplied mapping is independently authenticated onchain; document any remaining owner-trust or live-Intake blocker plainly. Code only—no deployment or paid Intake request.","parentJobId":"39cbc332-bccf-42a4-977d-3dd95440ffab","planHash":"03e5c1414b0a59e851475ee1286585d6100f1fa16882ea29f5bca8fefc9b9a1f","previousHash":"6f4bac89d37093b69cbe1d9a6431b4e3acf65cd6f4a40083aa75150784e3ac4d","projectId":"28e81139-f2a5-4a5a-a239-b6c315b58e01","publication":{"commit":"0d9d440063465654f39ef7f3939b1b4d9c90c5f6","deliveredAt":"2026-10-16T06:30:35.741Z","repoUrl":"https://github.com/identity-md-launches/launch-1811-build-technical-foundation-hooks"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"4a7d11a34abe7ffdcb231ceffa6ea57a6a92f6dac2cc7aa8f18237347e22349c","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"92325192a4cfa58f9f111336d4d77627d783f5d5ca9cfdab4b12579ad218b232","device":"cd2c3a8d55620566","findings":[],"hash":"f527d06f81a4541711c90364bcbc2754efebae97b2b49e2a0c0d1c9daa0a3550","nodeId":"df61381b-6525-4784-9383-402edae41753","outcome":"completed","summary":"Implemented all four fixes: owner-assisted expiry, UUID-conflict recovery, receipt retention before reservation release, and stricter discard validation.\n\n- Solidity 0.8.26: `forge build`, `forge test`, and `forge fmt --check` pass.\n- 208 tests pass with both seeds, including audit proofs and listing/ad escrow regressions.\n- Cold 5-of-7 ERC-1271 callback: **168,106 / 200,000 gas**.\n\nOwner-trust requirements and live-Intake blockers are documented in [the remediation notes](docs/AUDIT_EF1F6915.md). The owner-supplied mapping is not independently authenticated onchain.\n\nNo live deployment or paid request.","treeHash":"841ae78bc290dc19a4173d5a855fba7248ffe33b","usage":{"cachedInputTokens":2869888,"inputTokens":152513,"model":"gpt-6-astra","outputTokens":26663,"runtime":"codex","turns":7,"wallClockMs":910759}}],"verification":[{"checks":[{"durationMs":9862,"exitCode":0,"name":"build","output":"Compiling 128 files with Solc 0.8.26\nSolc 0.8.26 finished in 9.72s\nCompiler run successful!\n","passed":true},{"durationMs":28426,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/AuditExpiryProof.t.sol:ExpiryFrontRunShoppingTest\n[PASS] testRequesterFrontRunsLateNotPassedWithExpiryAndReasks() (gas: 1254721)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.59ms (1.24ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] testProtocolSignatureVerifiesBeforeItsNonBoolAnswerIsRefused() (gas: 2030233)\n[PASS] test_acceptsAFreshSignatureFromTheVectorKeyAsDelivered() (gas: 2105970)\n[PASS] test_callbackSelectorsAreCanonical() (gas: 3965)\n[PASS] test_digestMatchesTheProtocol() (gas: 13912)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.10ms (1.72ms CPU time)\n\nRan 2 tests for test/ReviewBinding.t.sol:RequesterOwnershipTest\n[PASS] testMistypedHandoverCanBeCancelledOrReplacedAndOnlyNomineeAccepts() (gas: 430228)\n[PASS] testZeroAndSelfHandoversRefusedWithoutLosingControl() (gas: 103636)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.31ms (791.89µs CPU time)\n\nRan 3 tests for test/DeployHookJobRequester.t.sol:DeployHookJobRequesterTest\n[PASS] testCheckRefusesAddressesWithoutCodeAndUnsoldActions() (gas: 136080)\n[PASS] testDeployThenConfigureGivesAWorkingRequesterOwnedByTheNamedOwner() (gas: 6498506)\n[PASS] testRunRefusesZeroBroadcaster() (gas: 86380)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.50ms (2.37ms CPU time)\n\nRan 1 test for test/AuditReceiptConflictProof.t.sol:StuckReceiptProofTest\n[PASS] testOwnerCanCloseReceiptWhoseUuidWasConsumedElsewhere() (gas: 2536961)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.05ms (2.49ms CPU time)\n\nRan 6 tests for test/OracleSigner.t.sol:OracleSignerTest\n[PASS] testContractSignerUsesErc1271FallbackUnderTheStipend() (gas: 2589406)\n[PASS] testDelegatedSignerStillRejectsWrongKeyTamperingAndMalformedEcdsa() (gas: 2482709)\n[PASS] testEcdsaKeyRemainsValidEvenIfItsCodeRejectsErc1271() (gas: 2218833)\n[PASS] testEip7702DesignatorDoesNotDisableTheSignersEcdsaKey() (gas: 2232972)\n[PASS] testErc1271RevocationRevertAndShortReturnFailClosedAndDoNotConsume() (gas: 3010834)\n[PASS] testFutureAttestationIsRefusedWithoutConsumingIt() (gas: 2157486)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 9.26ms (7.56ms CPU time)\n\nRan 7 tests for test/FeaturedAdversarial.t.sol:FeaturedAdversarialTest\n[PASS] testFalseRevertingMalformedAndNoMovementTokensCannotCreateCredit() (gas: 1201538)\n[PASS] testMissingTokenCodeAfterConfigurationCannotFakeTransfer() (gas: 68113)\n[PASS] testNoReturnTokenWorksForDepositsAndWithdrawals() (gas: 264270)\n[PASS] testProceedsWithdrawalAlsoGuardsReentrancy() (gas: 1621022)\n[PASS] testRecipientCannotBlockCancellationOrSettlementAndFailedClaimRollsBack() (gas: 2093568)\n[PASS] testTaxedOrFailedWithdrawalRollsBackAndRemainsRetryable() (gas: 1194337)\n[PASS] testTokenCallbacksCannotReenterAnyCustodyMutation() (gas: 3108803)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 22.25ms (4.53ms CPU time)\n\nRan 29 tests for test/HookJobRequester.t.sol:HookJobRequesterTest\n[PASS] testAnswerSignedForAnotherConsumerRefused() (gas: 2161320)\n[PASS] testBodyIsExactTemplateWithStepsSpecAndQuotedBrief() (gas: 933414)\n[PASS] testBriefValidation() (gas: 1852946)\n[PASS] testCallbackWithUnexpectedAbiFailsSafeAndJobCanExpire() (gas: 1131195)\n[PASS] testCallbacksFitTheIntakeStipend() (gas: 1820763)\n[PASS] testConstructorRefusesZeroAddresses() (gas: 10483)\n[PASS] testForgedExpiredWeakOrMistypedAnswersRefused() (gas: 2769819)\n[PASS] testFuzzPrintableAsciiBriefAcceptedUnlessReserved(bytes32,uint8) (runs: 256, μ: 533155, ~: 854390)\nLogs:\n  Bound result 20\n\n[PASS] testJobFailureClosesJobOnceAndIsNotAVerdict() (gas: 1129734)\n[PASS] testJobIdCollidingWithPendingReviewAskRefused() (gas: 2420084)\n[PASS] testOpenJobPaysOncePullsExactPriceAndTracksRequestId() (gas: 1139259)\n[PASS] testOwnerSettersAreOwnerOnlyAndValidated() (gas: 573682)\n[PASS] testPriceCeilingProtectsStandingAllowance() (gas: 3022259)\n[PASS] testResultAcceptedOnceFromIntakeOnly() (gas: 1098276)\n[PASS] testReusedRequestIdRefused() (gas: 1214272)\n[PASS] testReviewExpiryRequestedByRequesterAndConfirmedByOwner() (gas: 2347243)\n[PASS] testReviewFailureLeavesNoVerdictAndAllowsRetry() (gas: 3442888)\n[PASS] testReviewNotPassedIsStoredNotReverted() (gas: 2245162)\n[PASS] testReviewOnlyForDeliveredOrExpiredJobsByRequester() (gas: 2374595)\n[PASS] testReviewPassedOnlyFromSignedOracleAnswer() (gas: 2463776)\n[PASS] testSameAttestationCannotSettleASecondAsk() (gas: 4226373)\n[PASS] testSignerRotationTakesEffect() (gas: 2323725)\n[PASS] testStaticSiteReadContract() (gas: 1002895)\n[PASS] testSweepRecoversStrayTokens() (gas: 125876)\n[PASS] testUnconfiguredRequesterRefusesUntilOwnerSetsTemplates() (gas: 1545179)\n[PASS] testUnknownRequestIdRefused() (gas: 141510)\n[PASS] testUnpricedActionAndVersion1IntakeRefusedWithoutPayment() (gas: 464316)\n[PASS] testVersion1IntakeWorksWithTheFailureHookOff() (gas: 3196353)\n[PASS] testWalletMustApproveAndPay() (gas: 360695)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 90.45ms (108.87ms CPU time)\n\nRan 21 tests for test/FeaturedPlacements.t.sol:FeaturedPlacementsTest\n[PASS] testAdminRotationIsTwoStepAndDoesNotControlCustody() (gas: 805868)\n[PASS] testBadTokenConfigurationAndConstructorArguments() (gas: 1022284)\n[PASS] testCancelledPlacementCannotSettleOrCancelTwice() (gas: 1586722)\n[PASS] testDepositWithdrawBelongsToDepositorAndCannotBeSwept() (gas: 693423)\n[PASS] testDirectTransfersAreNotCreditsAndCannotBeSwept() (gas: 496850)\n[PASS] testEditingInvalidatesStalePurchaseAndFeeDisclosuresAreSnapshotted() (gas: 1995083)\n[PASS] testExpirySettlementIsPermissionlessAndCannotBeRepeatedOrRefunded() (gas: 1830989)\n[PASS] testFeaturedOrderingPaginationAndLabelsSkipCancelledAndExpired() (gas: 3095145)\n[PASS] testFuzzCancellationConservesFundsAndRoundsInPayersFavor(uint256) (runs: 256, μ: 1590173, ~: 1591843)\nLogs:\n  Bound result 14099\n\n[PASS] testHalfDurationCancellationSplitsFeeAndProceedsArePullBased() (gas: 1742376)\n[PASS] testImmediateCancellationFullyRefundsThenOwnerCanWithdraw() (gas: 1648242)\n[PASS] testOnlyListingOwnerCanBuyAndUnrelatedAccountsCannotCancelIncludingAdmin() (gas: 1766171)\n[PASS] testPurchaseCostsExactlyPointOneImdAndHasSevenDayAdLabel() (gas: 1481632)\n[PASS] testRecipientRotationInvalidatesStalePurchaseBeforeFundsAreLocked() (gas: 1453614)\n[PASS] testRecipientsAreSnapshottedAndChangingThemCannotTakeOldFunds() (gas: 2414968)\n[PASS] testSingleLivePlacementButCanRenewUnsettledExpiredOrCancelledPlacement() (gas: 2497512)\n[PASS] testSnapshotSurvivesEditingArchivingTransferAndRefundStaysWithPayer() (gas: 2399315)\n[PASS] testStaleTermsInactiveListingInsufficientBalanceAndDeadlineFailBeforeDebit() (gas: 1405175)\n[PASS] testUnknownIdsAndInvalidPagesFail() (gas: 228111)\n[PASS] testUnsetConfigurationAndTokenCanOnlyBeChosenOnce() (gas: 703556)\n[PASS] testZeroAmountsInvalidRecipientsAndExcessWithdrawalsFail() (gas: 629582)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 119.87ms (118.60ms CPU time)\n\nRan 5 tests for test/FeaturedTransfer.t.sol:FeaturedTransferTest\n[PASS] testBuyerCanClearSellersAdAndBuyItsOwnWhileOnlySellerGetsRefund() (gas: 3188812)\n[PASS] testFuzzNewOwnerCancellationConservesAllCredits(uint256) (runs: 256, μ: 1712140, ~: 1713805)\nLogs:\n  Bound result 15161\n\n[PASS] testIntermediateOwnerLosesCancellationPowerButOriginalPayerKeepsIt() (gas: 1869005)\n[PASS] testNewOwnerCannotCancelAtExpiryAndCanRenewBeforeOldSettlement() (gas: 2169353)\n[PASS] testProposedOwnerCannotCancelUntilAcceptingAndAdminCannotCancel() (gas: 1838309)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 229.57ms (231.71ms CPU time)\n\nRan 11 tests for test/ReviewRecovery.t.sol:ReviewRecoveryTest\n[PASS] testBoundOrTerminalAsksCannotBeDiscarded() (gas: 2337021)\n[PASS] testDiscardingDuplicateReceiptDoesNotClearGenuineConsumedUuid() (gas: 4312416)\n[PASS] testExpiredJobFalseVerdictRemainsTerminalEvenIfReviewLaterCompletes() (gas: 2353366)\n[PASS] testFuzzOwnerCannotDiscardReceiptWithMatchingContext(bool) (runs: 256, μ: 2340392, ~: 2340392)\n[PASS] testFuzzReleaseUnusedReservationAfterExpiryOrFailureThenFinalizeRetry(bool,bool) (runs: 256, μ: 5570800, ~: 5573626)\n[PASS] testFuzzSameUuidFieldMismatchCannotDiscardReceipt(uint8) (runs: 256, μ: 2204935, ~: 2205128)\nLogs:\n  Bound result 4\n\n[PASS] testLateNotPassedReceiptCannotBeFrontRunByRequesterExpiry() (gas: 2377366)\n[PASS] testRecoveryRequiresCurrentOwnerExactBodyValidContextAndReceipt() (gas: 2538674)\n[PASS] testReservationReleaseRejectsUnknownUnboundAndPendingHolderEvenPastDeadline() (gas: 3976623)\n[PASS] testSignerRotationPreservesRetainedVerificationButRejectsUndeliveredOldSignature() (gas: 4408010)\n[PASS] testSwappedReceiptOwnerClosesWrongAskWithoutStrandingGenuineUuid() (gas: 6060187)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 253.53ms (692.95ms CPU time)\n\nRan 13 tests for test/ReviewBinding.t.sol:ReviewBindingTest\n[PASS] testAnswerAtDeadlineAcceptedAndExcessiveBackwardSkewRefused() (gas: 2351370)\n[PASS] testBindingRequiresOwnerAndExactRecordedBodyAndCannotBeOverwritten() (gas: 2180746)\n[PASS] testExpiredAskAnswerCannotSettleRetryOfIdenticalQuestion() (gas: 3583799)\n[PASS] testFuzzIntakeIdCannotBeReusedAfterReviewCloses(uint8) (runs: 256, μ: 2761087, ~: 2772824)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzOracleIdReservationSurvivesFailureExpiryAndSettlement(uint8) (runs: 256, μ: 4205181, ~: 4233682)\nLogs:\n  Bound result 0\n\n[PASS] testInvalidOrUnknownBindingsRefused() (gas: 2037277)\n[PASS] testLateValidAnswerAndLateBindingAllowedUntilExplicitExpiry() (gas: 4405052)\n[PASS] testOwnerRotationPowersApplyToAlreadyPendingRequestsAsDocumented() (gas: 3231576)\n[PASS] testSignedPanelQuorumAndCountsMustBeConsistent() (gas: 2212611)\n[PASS] testSignedWrongQuestionIdChainOrWindowCannotSettle() (gas: 2815611)\n[PASS] testSwappedHonestAnswersLeaveBothPendingThenSettleTheirOwnAsks() (gas: 4614697)\n[PASS] testTemplateAndTimeoutChangesDoNotChangePendingAskContext() (gas: 2537544)\n[PASS] testUnboundReceiptDoesNotTrustMatchingIntakeIdAndRawBodyHash() (gas: 2393126)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 253.64ms (323.93ms CPU time)\n\nRan 3 tests for test/ReviewReceiptPacking.t.sol:ReviewReceiptPackingTest\n[PASS] testAllocatedMetadataIsNotAnAnswerAndReadAbiRemainsTenWords() (gas: 1841172)\n[PASS] testFuzzReceiptPreservesFullContextAndPackedFields(uint64,uint64,uint64,uint16,uint16,bool,uint256) (runs: 256, μ: 2349503, ~: 2349506)\nLogs:\n  Bound result 0\n  Bound result 5\n  Bound result 5\n\n[PASS] testReceiptPackingMaximumValuesDoNotLeakIntoAdjacentFields() (gas: 2339489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 287.37ms (286.34ms CPU time)\n\nRan 15 tests for test/HookIntegration.t.sol:HookIntegrationTest\n[PASS] testAllDirectionsAndExactModesAcceptLimit() (gas: 650218)\n[PASS] testDuplicatePoolInitializationFails() (gas: 41653)\n[PASS] testDynamicFeePoolRejectedAtomically() (gas: 97839)\n[PASS] testFuzzHookDataHasNoAuthority(bytes) (runs: 256, μ: 210230, ~: 210022)\n[PASS] testFuzzRealSwapsSettleAndConserve(uint128,bool,bool,bool) (runs: 256, μ: 281002, ~: 278533)\nLogs:\n  Bound result 4373\n\n[PASS] testFuzzSignedBoundaryAndNeutralReturn(int256,bytes) (runs: 256, μ: 30794, ~: 29816)\n[PASS] testFuzzUnauthorizedCallbacks(address) (runs: 256, μ: 94960, ~: 95102)\n[PASS] testIntMinIntMaxAndZeroFailClearly() (gas: 88270)\n[PASS] testLimitCapsOnlySpecifiedSideNotUnspecifiedSide() (gas: 427039)\n[PASS] testLiquidityWithdrawalRemainsAvailableAfterRejectedSwap() (gas: 184825)\n[PASS] testOverLimitRevertsThroughManagerInAllModes() (gas: 253819)\n[PASS] testSettlementFailureRollsBackCounterAndPoolState() (gas: 388376)\n[PASS] testTwoNewPoolsReuseOneDeployedHook() (gas: 624953)\n[PASS] testUnusedCallbacksAlwaysRevert() (gas: 209241)\n[PASS] testWrongHookAndUnknownPoolRejected() (gas: 124522)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 287.38ms (143.31ms CPU time)\n\nRan 7 tests for test/ReviewReceiptGas.t.sol:ReviewReceiptGasTest\n[PASS] testAudit22ColdReadsNowRetainsOneShotReceiptAndBoundVerdict() (gas: 3758424)\nLogs:\n  Cold audit registry +22 reads receipt minimum forwarded gas: 185260\n  Cold audit registry +22 reads bound minimum forwarded gas: 150053\n\n[PASS] testColdEoaReceiptGasAndExactStipend() (gas: 1753428)\nLogs:\n  Cold EOA receipt minimum forwarded gas: 123013\n\n[PASS] testColdFiveOfSevenReceiptAfterExpiryRequestFitsStipend() (gas: 2305390)\nLogs:\n  Cold 5-of-7 receipt after expiry request minimum forwarded gas: 168106\n\n[PASS] testColdFiveOfSevenReceiptAndBoundCallbacksFitStipend() (gas: 4410243)\nLogs:\n  Cold 5-of-7 receipt minimum forwarded gas: 168106\n  Cold 5-of-7 bound minimum forwarded gas: 132880\n\n[PASS] testColdFiveOfSevenRetryReceiptBeforeReservationReleaseFitsStipend() (gas: 2407390)\nLogs:\n  Cold 5-of-7 reserved retry receipt minimum forwarded gas: 168106\n\n[PASS] testFuzzMultisignerRefusesWrongKeyDuplicateRevokedExpiredOrInsufficientSignatures(uint8) (runs: 256, μ: 376000, ~: 378599)\nLogs:\n  Bound result 0\n\n[PASS] testOverBudgetSignerStillFailsClosedAndLosesSingleAttemptWithoutPartialReceipt() (gas: 704098)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 287.45ms (288.97ms CPU time)\n\nRan 25 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] testAllNamedMainnetsAndUnknownChainsRejected() (gas: 4440)\n[PASS] testAnyoneMayDeployIdenticalPlanWithoutTakingOwnership() (gas: 3340102)\n[PASS] testChangedConstructorSettingsInvalidateCachedPlan() (gas: 2452880)\n[PASS] testChangingManagerChangesCommitments() (gas: 4456007)\n[PASS] testDuplicateDeploymentRejectedAndMinerSkipsOccupiedAddress() (gas: 3409894)\n[PASS] testFuzzOnlyExactPermissionMaskAccepted(uint160) (runs: 256, μ: 30093, ~: 30225)\n[PASS] testFuzzPredictionMatchesIndependentCreate2Formula(address,bytes32,bytes32) (runs: 256, μ: 3933, ~: 3933)\n[PASS] testFuzzSpecLimitCommitsToExactConstructor(uint128,bytes32) (runs: 256, μ: 44323, ~: 44323)\n[PASS] testInvalidSearchRanges() (gas: 100769)\n[PASS] testInvalidSpecFieldsRejected() (gas: 161488)\n[PASS] testManagerCodeChangeFailsClosed() (gas: 2410875)\n[PASS] testManagerMustHaveExpectedCode() (gas: 68520)\n[PASS] testPredictionDeploymentPermissionsSettingsAndBytecodeAgree() (gas: 3496937)\n[PASS] testPrefundedPredictedAddressStillDeploys() (gas: 3331370)\n[PASS] testScriptUsesSamePlanAndDeploymentAsStore() (gas: 7192658)\n[PASS] testScriptsRejectMissingBroadcaster() (gas: 7147621)\n[PASS] testSearchExhaustionAndResume() (gas: 6291072)\n[PASS] testStaleOrForgedScriptPlansRejected() (gas: 6271704)\n[PASS] testTestnetPolicyIdsOnlyLocalSimulation() (gas: 7542)\n[PASS] testVerificationDetectsCorruptedConstructorStorage() (gas: 3314813)\n[PASS] testVerificationDetectsCorruptedRuntime() (gas: 3308499)\n[PASS] testVerifyUndeployedOrWrongAddressRejected() (gas: 2430633)\n[PASS] testWrongChainRejected() (gas: 29640)\n[PASS] testWrongExpectedAddressAndHashRejected() (gas: 2458895)\n[PASS] testWrongSaltRejectedByFactoryAndConstructor() (gas: 98469)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 287.52ms (224.15ms CPU time)\n\nRan 24 tests for test/ReviewDelivery.t.sol:ReviewDeliveryTest\n[PASS] testAnswerAtExactSignatureExpiryCanBeRetainedAndConfirmedLater() (gas: 2317847)\n[PASS] testConfirmedReceiptCannotBeReplayedOrRebound() (gas: 2368800)\n[PASS] testEarlyEip7702KeyReceiptFitsColdStipend() (gas: 2318370)\n[PASS] testEarlyErc1271ReceiptFitsColdStipendAndSurvivesLaterRevocation() (gas: 2842035)\n[PASS] testFreshLateAnswerAcceptedIfRequesterRequestsExpiryFirst() (gas: 2339114)\n[PASS] testFuzzBindingMustMatchEveryRetainedFieldAndFailedBindingCanBeCorrected(uint8) (runs: 256, μ: 2561750, ~: 2561947)\nLogs:\n  Bound result 4\n\n[PASS] testFuzzClockSkewToleranceIsSymmetricAtAskTime(int16,bool) (runs: 256, μ: 2279876, ~: 2292628)\nLogs:\n  Bound result -126\n\n[PASS] testFuzzEarlyOneAttemptCallbackRetainedThenConfirmedWithoutAnotherFee(bool) (runs: 256, μ: 2764645, ~: 2764645)\n[PASS] testFuzzFreshLateAnswerAcceptedUntilExplicitExpiry(bool,uint32) (runs: 256, μ: 2387994, ~: 2370051)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzInvalidEarlyAnswerNeverCreatesReceiptOrVerdict(uint8) (runs: 256, μ: 1993737, ~: 1996251)\nLogs:\n  Bound result 10\n\n[PASS] testFuzzRequesterCannotDiscardRetainedAnswerOrBuyAnotherReview(bool) (runs: 256, μ: 2551130, ~: 2551130)\n[PASS] testIntakeFailureBeforeReceiptIsTerminalAndBindingCannotInventAnAnswer() (gas: 2023627)\n[PASS] testInvalidOneAttemptCallbackLosesFeeAndCannotRetryOrCreateReceipt() (gas: 3537030)\n[PASS] testMalformedOneShotCallbackCannotCreateReceipt() (gas: 1859083)\n[PASS] testOneSecondBackwardSkewAndExactFiveMinuteBoundaryAccepted() (gas: 4549911)\n[PASS] testOnlyCurrentIntakeMayRetainAndOnlyOwnerMayConfirm() (gas: 2517195)\n[PASS] testReceiptBindingStillRequiresExactBodyFingerprint() (gas: 2322857)\n[PASS] testReceiptCanBeConfirmedAfterSignatureExpiryTimeoutAndAuthorityRotation() (gas: 2583208)\n[PASS] testReceiptCannotBeOverwrittenOrClearedBySecondIntakeCallback() (gas: 2556952)\n[PASS] testReservedUuidRetainedWithoutVerdictButConsumedUuidRefused() (gas: 6038210)\n[PASS] testSignatureExpiryStillControlsArrivalEvenAfterAskDeadline() (gas: 1992309)\n[PASS] testSwappedEarlyYesAndNoAnswersCannotBecomeVerdicts() (gas: 4291519)\n[PASS] testTimestampExtremesDoNotOverflowSkewCheck() (gas: 2377144)\n[PASS] testUnconfirmedDuplicateCannotReserveOrConsumeTheActualAsksUuid() (gas: 4306661)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 310.80ms (1.50s CPU time)\n\nRan 7 tests for test/ReviewAuditRegression.t.sol:ReviewAuditRegressionTest\n[PASS] testExpiryNeedsRequesterDeadlineAndCurrentOwnerApprovalForExactAsk() (gas: 3686041)\n[PASS] testExpiryRequestAllowsBindingBeforeLateDelivery() (gas: 2416252)\n[PASS] testFuzzExactConflictRecoveryPreservesOtherAskAndReplayProtection(bool,bool,bool) (runs: 256, μ: 5874550, ~: 5874542)\n[PASS] testFuzzExpiryAndDeliveryBothOrdersPreserveVerdictAndBlockRetries(bool,bool,bool) (runs: 256, μ: 2657285, ~: 2747753)\n[PASS] testFuzzSameUuidTypoCannotDiscardGenuineNegativeEvenWithConflict(uint8,bool) (runs: 256, μ: 3421198, ~: 2545035)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzUnavailableDifferentTrueUuidCannotDiscardGenuineNegative(uint8) (runs: 256, μ: 4529860, ~: 4527543)\nLogs:\n  Bound result 1\n\n[PASS] testIntakeFailureAfterExpiryRequestAllowsRetryAndInvalidatesOldApproval() (gas: 3215008)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 310.76ms (887.16ms CPU time)\n\nRan 11 tests for test/HookListingRegistry.t.sol:HookListingRegistryTest\n[PASS] testAuditUrlAndAuditLabelNeverConferVerification() (gas: 1866291)\n[PASS] testFreeCreateAndEditPersistAllFieldsAndHistory() (gas: 1618302)\n[PASS] testFuzzUnauthorizedCallerCannotModifyListing(address) (runs: 256, μ: 842654, ~: 842726)\n[PASS] testFuzzValidLabelsRemainSearchable(uint128) (runs: 256, μ: 747352, ~: 746840)\n[PASS] testInvalidIdentityUnknownRecordsAndPagesRevert() (gas: 931804)\n[PASS] testInvalidMetadataIsAtomicAndReferencesMayBeAbsent() (gas: 1106108)\n[PASS] testLabelValidationBoundsAndDuplicates() (gas: 965451)\n[PASS] testSameHookCanHaveIndependentOwnersButNoOwnerDuplicates() (gas: 2284749)\n[PASS] testSearchByLabelChainOwnerAndVisibilityUsesBoundedAscendingCursor() (gas: 2329424)\n[PASS] testTransferCanBeCancelledOrReplaced() (gas: 1022369)\n[PASS] testTwoStepListingTransferAndDuplicateProtection() (gas: 1824321)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 457.74ms (121.00ms CPU time)\n\nRan 11 tests for test/AuditFixes.t.sol:AuditFixesTest\n[PASS] testAllowedTestnetsDeployAndVerifyEndToEnd() (gas: 7765983)\n[PASS] testBaseMainnetRejectedOnEveryReleasePath() (gas: 9450397)\n[PASS] testEthereumMainnetRejectedOnEveryReleasePath() (gas: 9450443)\n[PASS] testFullPageCompletesOrResumesUnderTypicalCallGasCap() (gas: 4696895)\n[PASS] testFuzzUnknownChainsRejectedOnEveryReleasePath(uint64) (runs: 256, μ: 9453605, ~: 9453605)\n[PASS] testHookConstructorStillBindsSpecToActualChain() (gas: 19895)\n[PASS] testHookTemplateStaysChainAgnosticForFutureMainnetRelease() (gas: 1388790)\n[PASS] testMaxPageGasWithinBudgetWhenUncapped() (gas: 2338692)\n[PASS] testRobinhoodMainnetRejectedOnEveryReleasePath() (gas: 9450442)\n[PASS] testTooLittleGasForOneCandidateRevertsClearly() (gas: 17619788)\n[PASS] testTruncatedPageReportsFirstUncheckedNonce() (gas: 1946363)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 500.52ms (767.91ms CPU time)\n\nRan 1 test for test/FeaturedTransferInvariant.t.sol:FeaturedTransferInvariantTest\n[PASS] invariantEveryTokenIsAccountedForAndEveryCreditHasBacking() (runs: 256, calls: 128000, reverts: 0)\n\n╭-------------------------+------------------------+-------+---------+----------╮\n| Contract                | Selector               | Calls | Reverts | Discards |\n+===============================================================================+\n| FeaturedTransferHandler | advanceTime            | 11546 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancel                 | 11611 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancelAsCurrentOwner   | 11850 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | claim                  | 11725 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | deposit                | 11528 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | purchaseAsCurrentOwner | 11566 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | rotateRecipient        | 11577 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | settle                 | 11707 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | toggleCurrentListing   | 11731 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | transferListing        | 11629 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | withdraw               | 11530 | 0       | 0        |\n╰-------------------------+------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 225820091276669328\n  Bound result 1473\n  Bound result 286186293615491085\n  Bound result 127\n  Bound result 1132\n  Bound result 97\n  Bound result 300\n  Bound result 10663\n  Bound result 15\n  Bound result 3600\n  Bound result 11406\n  Bound result 3948\n  Bound result 3191\n  Bound result 87\n  Bound result 546603\n  Bound result 2678400\n  Bound result 20000\n  Bound result 7962\n  Bound result 96\n  Bound result 2184\n  Bound result 290740339967630715\n  Bound result 60\n  Bound result 1791\n  Bound result 60793639339416\n  Bound result 12\n  Bound result 65\n  Bound result 25984\n  Bound result 211940743357785746\n  Bound result 2\n  Bound result 80\n  Bound result 224\n  Bound result 30000\n  Bound result 41945699601283890\n  Bound result 290740339967630715\n  Bound result 60\n  Bound result 208234098322051109\n  Bound result 13879347918909531\n  Bound result 7672\n  Bound result 1827452915462\n  Bound result 1668535018\n  Bound result 16711935\n  Bound result 74450\n  Bound result 540\n  Bound result 20\n  Bound result 4663\n  Bound result 30\n  Bound result 50\n  Bound result 49631062555799662\n  Bound result 462\n  Bound result 3844\n  Bound result 88113578545806931\n  Bound result 6347\n  Bound result 14080\n  Bound result 6073\n  Bound result 168526\n  Bound result 6046\n  Bound result 449098\n  Bound result 596365\n  Bound result 626814\n  Bound result 1000\n  Bound result 459248\n  Bound result 292539217066958302\n  Bound result 62\n  Bound result 500\n  Bound result 6613\n  Bound result 1500\n  Bound result 6584\n  Bound result 1894251848249\n  Bound result 106455603288\n  Bound result 11542340483949236\n  Bound result 76171195136475135\n  Bound result 112006384892161545\n  Bound result 6537\n  Bound result 1716179208683632\n  Bound result 344\n  Bound result 1403\n  Bound result 72641265501060508\n  Bound result 66\n  Bound result 97\n  Bound result 438315\n  Bound result 11123212955075313\n  Bound result 193197\n  Bound result 745509\n  Bound result 271996739901653372\n  Bound result 260000\n  Bound result 279823899818833672\n  Bound result 90530430573405077\n  Bound result 23\n  Bound result 115428911151845857\n  Bound result 3129972164314258\n  Bound result 1000\n  Bound result 4473723270549732\n  Bound result 451162\n  Bound result 777598\n  Bound result 463\n  Bound result 167934543576446635\n  Bound result 1\n  Bound result 323\n  Bound result 86400\n  Bound result 131072\n  Bound result 3600\n  Bound result 885\n  Bound result 6737048805\n  Bound result 284634302914454324\n  Bound result 184\n  Bound result 20382872987444599\n  Bound result 11155111\n  Bound result 152\n  Bound result 31\n  Bound result 448120919896\n  Bound result 4634\n  Bound result 4901\n  Bound result 175902403001022569\n  Bound result 6145\n  Bound result 8649\n  Bound result 7662\n  Bound result 676730\n  Bound result 41\n  Bound result 16535911355962496\n  Bound result 4426\n  Bound result 192\n  Bound result 148212997862524763\n  Bound result 31337\n  Bound result 3112\n  Bound result 3540\n  Bound result 654074\n  Bound result 188497147953639216\n  Bound result 1000000000000000\n  Bound result 11943\n  Bound result 5063138186200929\n  Bound result 474607\n  Bound result 210\n  Bound result 232\n  Bound result 16383\n  Bound result 555710\n  Bound result 2011438971851426\n  Bound result 550532\n  Bound result 4568\n  Bound result 382314\n  Bound result 65535\n  Bound result 648768040728743\n  Bound result 1900\n  Bound result 7324881548597\n  Bound result 255\n  Bound result 8453\n  Bound result 303541369046138883\n  Bound result 54960701404759629\n  Bound result 2316\n  Bound result 507\n  Bound result 118886040341831997\n  Bound result 96\n  Bound result 13879347918967839\n  Bound result 10763\n  Bound result 224\n  Bound result 10443\n  Bound result 8020446647508232\n  Bound result 237262502835978240\n  Bound result 653906675248\n  Bound result 2282\n  Bound result 4991\n  Bound result 29340626266482373\n  Bound result 4593\n  Bound result 10732\n  Bound result 2048\n  Bound result 204228664652128427\n  Bound result 800\n  Bound result 80\n  Bound result 213845706268122588\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.62s (26.62s CPU time)\n\nRan 1 test for test/FeaturedInvariant.t.sol:FeaturedInvariantTest\n[PASS] invariantEveryTokenIsAccountedForAndEveryCreditHasBacking() (runs: 256, calls: 128000, reverts: 0)\n\n╭-----------------+-----------------+-------+---------+----------╮\n| Contract        | Selector        | Calls | Reverts | Discards |\n+================================================================+\n| FeaturedHandler | advanceTime     | 14053 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | cancel          | 14187 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | claim           | 14209 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | deposit         | 14094 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | purchase        | 14187 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | rotateRecipient | 14101 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | settle          | 14296 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | toggleListing   | 14538 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | withdraw        | 14335 | 0       | 0        |\n╰-----------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8791\n  Bound result 9318\n  Bound result 1624\n  Bound result 5813\n  Bound result 3792478064\n  Bound result 133180\n  Bound result 3964\n  Bound result 1016\n  Bound result 7600\n  Bound result 100000000000000000\n  Bound result 9517\n  Bound result 20000\n  Bound result 33243457683769912\n  Bound result 718\n  Bound result 2\n  Bound result 146744073709551616\n  Bound result 164548\n  Bound result 60000\n  Bound result 4802\n  Bound result 8162\n  Bound result 3904\n  Bound result 311022\n  Bound result 4096\n  Bound result 6484363604301407\n  Bound result 119720556331765034\n  Bound result 212910\n  Bound result 475\n  Bound result 152\n  Bound result 31\n  Bound result 957\n  Bound result 444890\n  Bound result 13\n  Bound result 5888\n  Bound result 96\n  Bound result 5888\n  Bound result 23577192917924694\n  Bound result 87948485967098101\n  Bound result 277511596451062893\n  Bound result 38510916124676368\n  Bound result 95166475547086390\n  Bound result 160335268394948241\n  Bound result 219614629174706175\n  Bound result 17179869184\n  Bound result 223\n  Bound result 22595111\n  Bound result 336\n  Bound result 243174133695390996\n  Bound result 34732338147644898\n  Bound result 2\n  Bound result 5065\n  Bound result 1729\n  Bound result 20583\n  Bound result 27\n  Bound result 10000000\n  Bound result 965485330588998\n  Bound result 1195\n  Bound result 3373\n  Bound result 1024\n  Bound result 8778\n  Bound result 4401\n  Bound result 4294967295\n  Bound result 241745\n  Bound result 4054\n  Bound result 8983\n  Bound result 216\n  Bound result 4815\n  Bound result 16384\n  Bound result 62419468783100421\n  Bound result 23630488334988\n  Bound result 216\n  Bound result 9\n  Bound result 3\n  Bound result 48\n  Bound result 585077\n  Bound result 58271901682834\n  Bound result 75644250940394395\n  Bound result 322\n  Bound result 349319461812804994\n  Bound result 6019\n  Bound result 1963\n  Bound result 28142141643098\n  Bound result 221267\n  Bound result 229035837012967424\n  Bound result 28\n  Bound result 18\n  Bound result 408\n  Bound result 55\n  Bound result 4188\n  Bound result 133827864650969328\n  Bound result 106144403980288033\n  Bound result 10000000\n  Bound result 3809229176\n  Bound result 194\n  Bound result 16383\n  Bound result 140000\n  Bound result 66482869645213695\n  Bound result 3\n  Bound result 58\n  Bound result 813839919212249\n  Bound result 605911576453551\n  Bound result 71777214294589695\n  Bound result 1309\n  Bound result 3\n  Bound result 325\n  Bound result 604800\n  Bound result 6866\n  Bound result 1000000000000\n  Bound result 140000\n  Bound result 225684821632784055\n  Bound result 1911536808014693\n  Bound result 62504082648857257\n  Bound result 146744073706959615\n  Bound result 4652\n  Bound result 20000\n  Bound result 1300\n  Bound result 127035603870986413\n  Bound result 425326\n  Bound result 3804139505493885\n  Bound result 195000\n  Bound result 292195\n  Bound result 151163730988739165\n  Bound result 4663\n  Bound result 10508175762418758\n  Bound result 6640\n  Bound result 7\n  Bound result 5512\n  Bound result 230304381176537400\n  Bound result 2594\n  Bound result 6440\n  Bound result 4574\n  Bound result 144\n  Bound result 7947\n  Bound result 272\n  Bound result 31337\n  Bound result 2016\n  Bound result 7926\n  Bound result 5513\n  Bound result 19940267733667934\n  Bound result 1\n  Bound result 31337\n  Bound result 4853\n  Bound result 316964\n  Bound result 111001475602721953\n  Bound result 371636862\n  Bound result 8191391941195503\n  Bound result 653865\n  Bound result 8053\n  Bound result 1584814885\n  Bound result 281470681808895\n  Bound result 1056290820\n  Bound result 122927405053133109\n  Bound result 2569\n  Bound result 84532\n  Bound result 9\n  Bound result 292003956564819968\n  Bound result 60000\n  Bound result 242434016991986481\n  Bound result 561440\n  Bound result 21328056436091580\n  Bound result 208\n  Bound result 7614\n  Bound result 40000\n  Bound result 614939\n  Bound result 543452\n  Bound result 293782792835301375\n  Bound result 3951\n  Bound result 7500\n  Bound result 2208\n  Bound result 24240711628614040\n  Bound result 5003010953594182\n  Bound result 1038926779561137093\n  Bound result 118875795413458357\n  Bound result 152452247624881249\n  Bound result 6953\n  Bound result 550\n  Bound result 5165\n  Bound result 8605\n  Bound result 2032\n  Bound result 53298\n  Bound result 292003956564819967\n  Bound result 176\n  Bound result 44726048144650058\n  Bound result 7200\n  Bound result 2417\n  Bound result 192\n  Bound result 2390\n  Bound result 195000\n  Bound result 645788\n  Bound result 3567421521122299\n  Bound result 125169935154903511\n  Bound result 16777215\n  Bound result 1237\n  Bound result 519224\n  Bound result 767656372010570\n  Bound result 33989411973445176\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 28.31s (28.31s CPU time)\n\nRan 22 test suites in 28.32s (58.66s CPU time): 208 tests passed, 0 failed, 0 skipped (208 total tests)\n","passed":true},{"durationMs":76,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BoundedSwapHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"BoundedSwapHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"FeaturedPlacements.acceptOwnership()\",\"FeaturedPlacements.cancel(uint256)\",\"FeaturedPlacements.cancelOwnershipTransfer()\",\"FeaturedPlacements.configureToken(address)\",\"FeaturedPlacements.deposit(uint256)\",\"FeaturedPlacements.purchase(uint256,uint256,address,uint256)\",\"FeaturedPlacements.setProceedsRecipient(address)\",\"FeaturedPlacements.settle(uint256)\",\"FeaturedPlacements.transferOwnership(address)\",\"FeaturedPlacements.withdraw(uint256,address)\",\"FeaturedPlacements.withdrawProceeds(uint256,address)\",\"HookJobRequester.acceptOwnership()\",\"HookJobRequester.bindReview(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.cancelOwnershipTransfer()\",\"HookJobRequester.confirmReviewExpiry(bytes32)\",\"HookJobRequester.discardReviewReceipt(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.expireJob(bytes32)\",\"HookJobRequester.expireReview(bytes32)\",\"HookJobRequester.onJobFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onJobResult(bytes32,bytes)\",\"HookJobRequester.onReviewFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onReviewResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"HookJobRequester.openJob(bytes32,bytes)\",\"HookJobRequester.releaseReservation(bytes32)\",\"HookJobRequester.requestReview(bytes32)\",\"HookJobRequester.setFailureHook(bool)\",\"HookJobRequester.setIntake(address)\",\"HookJobRequester.setJobTemplate(bytes32,bytes,bytes,bytes)\",\"HookJobRequester.setOracleSigner(address)\",\"HookJobRequester.setPayment(address,uint256)\",\"HookJobRequester.setReviewTemplate(bytes32,bytes,bytes,uint16,uint16)\",\"HookJobRequester.setTimeouts(uint64,uint64)\",\"HookJobRequester.sweep(address,address,uint256)\",\"HookJobRequester.transferOwnership(address)\",\"HookListingRegistry.acceptListingOwnership(uint256)\",\"HookListingRegistry.cancelListingTransfer(uint256)\",\"HookListingRegistry.createListing(uint256,address,(string,string,string,string,string,uint160,string,string,string,string[]))\",\"HookListingRegistry.proposeListingOwner(uint256,address)\",\"HookListingRegistry.setListingActive(uint256,bool)\",\"HookListingRegistry.updateListing(uint256,(string,string,string,string,string,uint160,string,string,string,string[]))\",\"HooksStoreFactory.deploy((uint32,bytes32,uint256,address,bytes32,uint160,uint128),bytes32,address,bytes32)\"],\"files\":{\".gitignore\":6,\"LICENSE\":24,\"README.md\":110,\"dependencies.lock.json\":20,\"docs/AUDIT_1053AF02.md\":106,\"docs/AUDIT_5F43F94D.md\":93,\"docs/AUDIT_D9970905.md\":79,\"docs/AUDIT_EF1F6915.md\":126,\"docs/CHAINS.md\":18,\"docs/DEPENDENCIES.md\":22,\"docs/DEPLOYMENT.md\":69,\"docs/HOOK_SPEC.md\":63,\"docs/IMD_INTEGRATION.md\":327,\"docs/LISTINGS_AND_ADS.md\":214,\"docs/STORE_API.md\":69,\"docs/THREAT_MODEL.md\":69,\"docs/VERIFICATION.md\":317,\"docs/build-fingerprints.json\":28,\"docs/checksums/FORMAT_ONLY.txt\":24,\"docs/checksums/UPSTREAM.sha256\":96,\"docs/checksums/VENDORED.sha256\":96,\"foundry.toml\":22,\"remappings.txt\":3,\"schemas/hook-spec.v1.schema.json\":17,\"script/DeployHook.s.sol\":38,\"script/DeployHookJobRequester.s.sol\":86,\"script/DeployStore.s.sol\":19,\"script/verify-vendored.sh\":15,\"sdk/hooks_store.py\":306,\"site/index.html\":172,\"site/listings.html\":56,\"site/listings.js\":212,\"src/BoundedSwapHook.sol\":97,\"src/DisabledCallbacks.sol\":63,\"src/HookSpec.sol\":61,\"src/HooksStoreFactory.sol\":114,\"src/deployment/DeploymentPolicy.sol\":21,\"src/deployment/HookDeployment.sol\":44,\"src/deployment/HookMiner.sol\":63,\"src/imd/HookJobRequester.sol\":881,\"src/imd/IIntake.sol\":27,\"src/imd/OracleAttestation.sol\":230,\"src/interfaces/IHooksStore.sol\":36,\"src/store/ExactStoreToken.sol\":48,\"src/store/FeaturedPlacements.sol\":270,\"src/store/HookListingRegistry.sol\":217,\"src/store/StoreAdmin.sol\":46,\"src/vendor/openzeppelin/LICENSE\":22,\"src/vendor/openzeppelin/interfaces/IERC1271.sol\":17,\"src/vendor/openzeppelin/interfaces/IERC5267.sol\":28,\"src/vendor/openzeppelin/interfaces/IERC7913.sol\":18,\"src/vendor/openzeppelin/utils/Bytes.sol\":247,\"src/vendor/openzeppelin/utils/Panic.sol\":57,\"src/vendor/openzeppelin/utils/ShortStrings.sol\":122,\"src/vendor/openzeppelin/utils/StorageSlot.sol\":143,\"src/vendor/openzeppelin/utils/Strings.sol\":515,\"src/vendor/openzeppelin/utils/cryptography/ECDSA.sol\":285,\"src/vendor/openzeppelin/utils/cryptography/EIP712.sol\":160,\"src/vendor/openzeppelin/utils/cryptography/MessageHashUtils.sol\":100,\"src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol\":162,\"src/vendor/openzeppelin/utils/math/Math.sol\":758,\"src/vendor/openzeppelin/utils/math/SafeCast.sol\":1162,\"src/vendor/openzeppelin/utils/math/SignedMath.sol\":68,\"test/AuditExpiryProof.t.sol\":168,\"test/AuditFixes.t.sol\":192,\"test/AuditReceiptConflictProof.t.sol\":197,\"test/DeployHookJobRequester.t.sol\":104,\"test/Deployment.t.sol\":329,\"test/FeaturedAdversarial.t.sol\":151,\"test/FeaturedInvariant.t.sol\":186,\"test/FeaturedPlacements.t.sol\":443,\"test/FeaturedTransfer.t.sol\":120,\"test/FeaturedTransferInvariant.t.sol\":80,\"test/HookIntegration.t.sol\":294,\"test/HookJobRequester.t.sol\":769,\"test/HookListingRegistry.t.sol\":265,\"test/OracleConformance.t.sol\":135,\"test/OracleSigner.t.sol\":125,\"test/ReviewAuditRegression.t.sol\":293,\"test/ReviewBinding.t.sol\":352,\"test/ReviewDelivery.t.sol\":496,\"test/ReviewReceiptGas.t.sol\":250,\"test/ReviewReceiptPacking.t.sol\":97,\"test/ReviewRecovery.t.sol\":341,\"test/helpers/Fixture.sol\":46,\"test/helpers/ImdTemplates.sol\":19,\"test/helpers/MockIntake.sol\":111,\"test/helpers/PoolRouter.sol\":76,\"test/helpers/ReceiptSigners.sol\":75,\"test/helpers/StoreFixture.sol\":81,\"test/helpers/StoreTokenMock.sol\":82,\"test/helpers/TestToken.sol\":13,\"test/listings-reader.test.cjs\":97,\"test/test_store_sdk.py\":193},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":3865,"exitCode":0,"name":"slither","output":"[high/medium] incorrect-exp at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) has bitwise-xor operator ^ instead of the exponentiation operator **: \n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:315: Math.invMod(uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#315-363) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/store/FeaturedPlacements.sol:219: FeaturedPlacements.getPlacement(uint256) (src/store/FeaturedPlacements.sol#219-222) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/imd/HookJobRequester.sol:347: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#347-371):\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:832: HookJobRequester._validateBrief(bytes).cp (src/imd/HookJobRequester.sol#832) is a local variable never initialized\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:831: HookJobRequester._validateBrief(bytes).len (src/imd/HookJobRequester.sol#831) is a local variable never initialized\n[medium/medium] unused-return at src/store/FeaturedPlacements.sol:104: FeaturedPlacements.configureToken(address) (src/store/FeaturedPlacements.sol#104-113) ignores return value by ExactStoreToken.balance(token,address(this)) (src/store/FeaturedPlacements.sol#110)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:44: SignatureChecker.isValidSignatureNowCalldata(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#44-55) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#50)\n[medium/medium] unused-return at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(digest,signature) (src/imd/OracleAttestation.sol#169)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:32: SignatureChecker.isValidSignatureNow(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#32-39) ignores return value by (recovered,err,None) = ECDSA.tryRecover(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#34)\n[low/medium] reentrancy-benign at src/store/FeaturedPlacements.sol:123: Reentrancy in FeaturedPlacements.deposit(uint256) (src/store/FeaturedPlacements.sol#123-131):\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:276: Reentrancy in HookJobRequester.openJob(bytes32,bytes) (src/imd/HookJobRequester.sol#276-294):\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:347: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#347-371):\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:197: FeaturedPlacements.settle(uint256) (src/store/FeaturedPlacements.sol#197-206) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:145: FeaturedPlacements.purchase(uint256,uint256,address,uint256) (src/store/FeaturedPlacements.sol#145-173) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:622: HookJobRequester.expireReview(bytes32) (src/imd/HookJobRequester.sol#622-635) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:224: FeaturedPlacements.isActive(uint256) (src/store/FeaturedPlacements.sol#224-227) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:330: HookJobRequester.expireJob(bytes32) (src/imd/HookJobRequester.sol#330-338) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:177: FeaturedPlacements.cancel(uint256) (src/store/FeaturedPlacements.sol#177-194) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:219: FeaturedPlacements.getPlacement(uint256) (src/store/FeaturedPlacements.sol#219-222) uses timestamp for comparisons","passed":true},{"durationMs":657,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/vendor/openzeppelin/utils/cryptography/MessageHashUtils.sol:63: `abi.encodePacked()` Hash Collision (2 places)\n[high] incorrect-caret-operator at src/vendor/openzeppelin/utils/math/Math.sol:257: Incorrect use of caret operator\n[high] incorrect-shift-order at src/deployment/HookMiner.sol:27: Incorrect Assembly Shift Parameter Order\n[high] reentrancy-state-change at src/imd/HookJobRequester.sol:282: Reentrancy: State change after external call (4 places)\n[high] reused-contract-name at src/vendor/openzeppelin/utils/math/SafeCast.sol:19: Contract Name Reused in Different Files\n[high] unsafe-casting at src/vendor/openzeppelin/utils/Strings.sol:432: Unsafe Casting of integers\n[low] centralization-risk at src/imd/HookJobRequester.sol:389: Centralization Risk (16 places)\n[low] costly-loop at src/store/HookListingRegistry.sol:175: Costly operations inside loop (2 places)\n[low] ecrecover at src/vendor/openzeppelin/utils/cryptography/ECDSA.sol:191: `ecrecover` Signature Malleability\n[low] internal-function-used-once at src/HookSpec.sol:35: Internal Function Used Only Once (33 places)\n[low] large-numeric-literal at src/deployment/HookMiner.sol:9: Large Numeric Literal (2 places)\n[low] literal-instead-of-constant at src/imd/HookJobRequester.sol:577: Literal Instead of Constant (221 places)\n[low] local-variable-shadowing at src/imd/HookJobRequester.sol:67: Local Variable Shadows State Variable (2 places)\n[low] non-reentrant-not-first at src/store/FeaturedPlacements.sol:104: `nonReentrant` is Not the First Modifier\n[low] push-zero-opcode at src/vendor/openzeppelin/interfaces/IERC1271.sol:4: PUSH0 Opcode (15 places)\n[low] require-revert-in-loop at src/deployment/HookMiner.sol:51: Loop Contains `require`/`revert` (6 places)\n[low] state-no-address-check at src/BoundedSwapHook.sol:43: Address State Variable Set Without Checks\n[low] state-variable-could-be-immutable at src/BoundedSwapHook.sol:21: State Variable Could Be Immutable (5 places)\n[low] unchecked-return at src/store/FeaturedPlacements.sol:110: Unchecked Return (4 places)\n[low] uninitialized-local-variable at src/imd/HookJobRequester.sol:861: Uninitialized Local Variable (6 places)\n[low] unsafe-erc20-operation at src/store/ExactStoreToken.sol:43: Unsafe ERC20 Operation\n[low] unspecific-solidity-pragma at src/vendor/openzeppelin/interfaces/IERC1271.sol:4: Unspecific Solidity Pragma (4 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f527d06f81a4541711c90364bcbc2754efebae97b2b49e2a0c0d1c9daa0a3550","verifiedTreeHash":"841ae78bc290dc19a4173d5a855fba7248ffe33b","verifierVersion":"0.1.0+d952fceb"}]}