{"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":"a4dcf4d1-b883-4fcf-8bf0-0538935e6dea","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"5833aff3da40af0c463e3a3e4c6633074811a1dade88bf53e2e99967392c48ed","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 all findings in re-audit 5f43f94d-4f44-4255-a8c2-e0a2605c4897, especially the high-severity one-shot callback failure. Design a secure way to accept or retain an answer that arrives before owner binding without reintroducing cross-request verdict misbinding or replay. Address the clock-skew and late-valid-answer findings, and make the review template consistent with the chosen design. Add adversarial Foundry tests that model IMD’s one-attempt callback and fee-loss scenario. Document any remaining live-Intake assumptions. Do not deploy or spend funds.","parentJobId":"43867c7f-d4dc-483f-a9e5-3b97bb7d9c81","planHash":"02098777a2c25ca3bfb8981232276a2714b9a3378b88ec47e272910baf99dc56","previousHash":"a57ab016f14d9faf28214a9d1253b786318e026421de39593d123c04b2d757d9","projectId":"28e81139-f2a5-4a5a-a239-b6c315b58e01","publication":{"commit":"64e40684e68c84c21e770bca63206ec9d292f063","deliveredAt":"2026-10-16T04:35:44.389Z","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":"d3d219fcba2975b0ef74bba8e875bbff3300c769537856ce0aa9b85d92ad755a","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"bcca12fad1d5538ea87caf582b0571b05af94d77b1f5db8c789be72e7dd90937","device":"f6591e7f19d7b066","findings":[],"hash":"5833aff3da40af0c463e3a3e4c6633074811a1dade88bf53e2e99967392c48ed","nodeId":"3876dc55-5137-4a2b-8f52-a879d5ee4ab2","outcome":"completed","summary":"Implemented all four re-audit fixes:\n\n- Early answers are verified and retained, then finalized by exact owner binding without another callback or fee.\n- Replay protections remain; clock skew and late valid answers are handled.\n- Added 24 adversarial tests and updated template, status-page and operating documentation.\n\n`forge build`, `forge fmt --check`, and all **178 tests** pass with Solidity 0.8.26, using both pinned and supplied fuzz seeds.\n\nRemaining live Intake assumptions are documented in [remediation notes](/home/seat/.identitymd/work/a4dcf4d1-b883-4fcf-8bf0-0538935e6dea/3876dc55-5137-4a2b-8f52-a879d5ee4ab2/docs/AUDIT_5F43F94D.md). No deployment or funds spent.","treeHash":"1d1f0733990247df80cbc813acd27745af44e90b","usage":{"cachedInputTokens":2974976,"inputTokens":145239,"model":"gpt-6-astra","outputTokens":35792,"runtime":"codex","turns":7,"wallClockMs":1026305}}],"verification":[{"checks":[{"durationMs":7944,"exitCode":0,"name":"build","output":"Compiling 121 files with Solc 0.8.26\nSolc 0.8.26 finished in 7.83s\nCompiler run successful!\n","passed":true},{"durationMs":29848,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ReviewBinding.t.sol:RequesterOwnershipTest\n[PASS] testMistypedHandoverCanBeCancelledOrReplacedAndOnlyNomineeAccepts() (gas: 430316)\n[PASS] testZeroAndSelfHandoversRefusedWithoutLosingControl() (gas: 103636)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.66ms (881.31µs CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] testProtocolSignatureVerifiesBeforeItsNonBoolAnswerIsRefused() (gas: 1999015)\n[PASS] test_acceptsAFreshSignatureFromTheVectorKeyAsDelivered() (gas: 2076986)\n[PASS] test_callbackSelectorsAreCanonical() (gas: 3965)\n[PASS] test_digestMatchesTheProtocol() (gas: 13912)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.91ms (1.76ms CPU time)\n\nRan 6 tests for test/OracleSigner.t.sol:OracleSignerTest\n[PASS] testContractSignerUsesErc1271FallbackUnderTheStipend() (gas: 2560433)\n[PASS] testDelegatedSignerStillRejectsWrongKeyTamperingAndMalformedEcdsa() (gas: 2451504)\n[PASS] testEcdsaKeyRemainsValidEvenIfItsCodeRejectsErc1271() (gas: 2189849)\n[PASS] testEip7702DesignatorDoesNotDisableTheSignersEcdsaKey() (gas: 2203988)\n[PASS] testErc1271RevocationRevertAndShortReturnFailClosedAndDoNotConsume() (gas: 2981853)\n[PASS] testFutureAttestationIsRefusedWithoutConsumingIt() (gas: 2126287)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 6.54ms (6.04ms CPU time)\n\nRan 3 tests for test/DeployHookJobRequester.t.sol:DeployHookJobRequesterTest\n[PASS] testCheckRefusesAddressesWithoutCodeAndUnsoldActions() (gas: 136080)\n[PASS] testDeployThenConfigureGivesAWorkingRequesterOwnedByTheNamedOwner() (gas: 6236034)\n[PASS] testRunRefusesZeroBroadcaster() (gas: 86380)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.72ms (3.25ms 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 37.31ms (4.09ms CPU time)\n\nRan 29 tests for test/HookJobRequester.t.sol:HookJobRequesterTest\n[PASS] testAnswerSignedForAnotherConsumerRefused() (gas: 2130212)\n[PASS] testBodyIsExactTemplateWithStepsSpecAndQuotedBrief() (gas: 933392)\n[PASS] testBriefValidation() (gas: 1852638)\n[PASS] testCallbackWithUnexpectedAbiFailsSafeAndJobCanExpire() (gas: 1131150)\n[PASS] testCallbacksFitTheIntakeStipend() (gas: 1820719)\n[PASS] testConstructorRefusesZeroAddresses() (gas: 10461)\n[PASS] testForgedExpiredWeakOrMistypedAnswersRefused() (gas: 2738682)\n[PASS] testFuzzPrintableAsciiBriefAcceptedUnlessReserved(bytes32,uint8) (runs: 256, μ: 529849, ~: 854206)\nLogs:\n  Bound result 20\n\n[PASS] testJobFailureClosesJobOnceAndIsNotAVerdict() (gas: 1129712)\n[PASS] testJobIdCollidingWithPendingReviewAskRefused() (gas: 2388845)\n[PASS] testOpenJobPaysOncePullsExactPriceAndTracksRequestId() (gas: 1139259)\n[PASS] testOwnerSettersAreOwnerOnlyAndValidated() (gas: 573549)\n[PASS] testPriceCeilingProtectsStandingAllowance() (gas: 3022171)\n[PASS] testResultAcceptedOnceFromIntakeOnly() (gas: 1098232)\n[PASS] testReusedRequestIdRefused() (gas: 1214206)\n[PASS] testReviewExpiryByRequesterOnly() (gas: 2227734)\n[PASS] testReviewFailureLeavesNoVerdictAndAllowsRetry() (gas: 3382703)\n[PASS] testReviewNotPassedIsStoredNotReverted() (gas: 2216156)\n[PASS] testReviewOnlyForDeliveredOrExpiredJobsByRequester() (gas: 2345589)\n[PASS] testReviewPassedOnlyFromSignedOracleAnswer() (gas: 2434901)\n[PASS] testSameAttestationCannotSettleASecondAsk() (gas: 4166172)\n[PASS] testSignerRotationTakesEffect() (gas: 2294717)\n[PASS] testStaticSiteReadContract() (gas: 1002043)\n[PASS] testSweepRecoversStrayTokens() (gas: 125809)\n[PASS] testUnconfiguredRequesterRefusesUntilOwnerSetsTemplates() (gas: 1545113)\n[PASS] testUnknownRequestIdRefused() (gas: 141488)\n[PASS] testUnpricedActionAndVersion1IntakeRefusedWithoutPayment() (gas: 464272)\n[PASS] testVersion1IntakeWorksWithTheFailureHookOff() (gas: 3174127)\n[PASS] testWalletMustApproveAndPay() (gas: 360629)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 50.10ms (60.17ms CPU time)\n\nRan 5 tests for test/FeaturedTransfer.t.sol:FeaturedTransferTest\n[PASS] testBuyerCanClearSellersAdAndBuyItsOwnWhileOnlySellerGetsRefund() (gas: 3188812)\n[PASS] testFuzzNewOwnerCancellationConservesAllCredits(uint256) (runs: 256, μ: 1712293, ~: 1713805)\nLogs:\n  Bound result 339868\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 92.77ms (93.04ms 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, μ: 1590326, ~: 1591843)\nLogs:\n  Bound result 339868\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 128.87ms (133.09ms 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, μ: 210226, ~: 210004)\n[PASS] testFuzzRealSwapsSettleAndConserve(uint128,bool,bool,bool) (runs: 256, μ: 280995, ~: 278533)\nLogs:\n  Bound result 662\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 139.84ms (122.90ms CPU time)\n\nRan 13 tests for test/ReviewBinding.t.sol:ReviewBindingTest\n[PASS] testAnswerAtDeadlineAcceptedAndExcessiveBackwardSkewRefused() (gas: 2322386)\n[PASS] testBindingRequiresOwnerAndExactRecordedBodyAndCannotBeOverwritten() (gas: 2149493)\n[PASS] testExpiredAskAnswerCannotSettleRetryOfIdenticalQuestion() (gas: 3463980)\n[PASS] testFuzzIntakeIdCannotBeReusedAfterReviewCloses(uint8) (runs: 256, μ: 2709459, ~: 2741601)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzOracleIdReservationSurvivesFailureExpiryAndSettlement(uint8) (runs: 256, μ: 4126751, ~: 4111549)\nLogs:\n  Bound result 0\n\n[PASS] testInvalidOrUnknownBindingsRefused() (gas: 2014951)\n[PASS] testLateValidAnswerAndLateBindingAllowedUntilExplicitExpiry() (gas: 4347084)\n[PASS] testOwnerRotationPowersApplyToAlreadyPendingRequestsAsDocumented() (gas: 3202570)\n[PASS] testSignedPanelQuorumAndCountsMustBeConsistent() (gas: 2181416)\n[PASS] testSignedWrongQuestionIdChainOrWindowCannotSettle() (gas: 2786627)\n[PASS] testSwappedHonestAnswersLeaveBothPendingThenSettleTheirOwnAsks() (gas: 4556729)\n[PASS] testTemplateAndTimeoutChangesDoNotChangePendingAskContext() (gas: 2508542)\n[PASS] testUnboundReceiptDoesNotTrustMatchingIntakeIdAndRawBodyHash() (gas: 2304480)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 160.57ms (317.36ms CPU time)\n\nRan 24 tests for test/ReviewDelivery.t.sol:ReviewDeliveryTest\n[PASS] testAnswerAtExactSignatureExpiryCanBeRetainedAndConfirmedLater() (gas: 2318000)\n[PASS] testConfirmedReceiptCannotBeReplayedOrRebound() (gas: 2368997)\n[PASS] testEarlyEip7702KeyReceiptFitsColdStipend() (gas: 2318501)\n[PASS] testEarlyErc1271ReceiptFitsColdStipendAndSurvivesLaterRevocation() (gas: 2842119)\n[PASS] testExplicitExpiryDiscardsReceiptAuthorityAndOldAnswerCannotSettleRetry() (gas: 3404854)\n[PASS] testFreshLateAnswerRejectedIfRequesterExpiresFirst() (gas: 2209497)\n[PASS] testFuzzBindingMustMatchEveryRetainedFieldAndFailedBindingCanBeCorrected(uint8) (runs: 256, μ: 2556158, ~: 2556451)\nLogs:\n  Bound result 3\n\n[PASS] testFuzzClockSkewToleranceIsSymmetricAtAskTime(int16,bool) (runs: 256, μ: 2258654, ~: 2263666)\nLogs:\n  Bound result -126\n\n[PASS] testFuzzEarlyOneAttemptCallbackRetainedThenConfirmedWithoutAnotherFee(bool) (runs: 256, μ: 2764678, ~: 2764678)\n[PASS] testFuzzFreshLateAnswerAcceptedUntilExplicitExpiry(bool,uint32) (runs: 256, μ: 2373299, ~: 2341023)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzInvalidEarlyAnswerNeverCreatesReceiptOrVerdict(uint8) (runs: 256, μ: 1972081, ~: 1975282)\nLogs:\n  Bound result 10\n\n[PASS] testIntakeFailureBeforeReceiptIsTerminalAndBindingCannotInventAnAnswer() (gas: 2001506)\n[PASS] testInvalidOneAttemptCallbackLosesFeeAndCannotRetryOrCreateReceipt() (gas: 3414945)\n[PASS] testMalformedOneShotCallbackCannotCreateReceipt() (gas: 1836829)\n[PASS] testOneSecondBackwardSkewAndExactFiveMinuteBoundaryAccepted() (gas: 4550195)\n[PASS] testOnlyCurrentIntakeMayRetainAndOnlyOwnerMayConfirm() (gas: 2517248)\n[PASS] testReceiptBindingStillRequiresExactBodyFingerprint() (gas: 2322974)\n[PASS] testReceiptCanBeConfirmedAfterSignatureExpiryTimeoutAndAuthorityRotation() (gas: 2583133)\n[PASS] testReceiptCannotBeOverwrittenOrClearedBySecondIntakeCallback() (gas: 2556935)\n[PASS] testReservedOrConsumedUuidCannotBeDeliveredToAnotherUnboundAsk() (gas: 5800366)\n[PASS] testSignatureExpiryStillControlsArrivalEvenAfterAskDeadline() (gas: 1970051)\n[PASS] testSwappedEarlyYesAndNoAnswersCannotBecomeVerdicts() (gas: 4274166)\n[PASS] testTimestampExtremesDoNotOverflowSkewCheck() (gas: 2377271)\n[PASS] testUnconfirmedDuplicateCannotReserveOrConsumeTheActualAsksUuid() (gas: 4307318)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 170.52ms (618.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, μ: 747323, ~: 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 170.92ms (298.95ms 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 442.07ms (164.26ms 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 465.86ms (634.35ms 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 3600\n  Bound result 1132\n  Bound result 658321\n  Bound result 300\n  Bound result 763600050\n  Bound result 4\n  Bound result 55\n  Bound result 11318\n  Bound result 9922\n  Bound result 3948\n  Bound result 3191\n  Bound result 42012413239284358\n  Bound result 546603\n  Bound result 500\n  Bound result 101\n  Bound result 234095\n  Bound result 299\n  Bound result 290740339967630715\n  Bound result 2592000\n  Bound result 1735\n  Bound result 10367242598100231\n  Bound result 50\n  Bound result 1143\n  Bound result 112006384892161546\n  Bound result 2\n  Bound result 96\n  Bound result 224\n  Bound result 11\n  Bound result 100000000\n  Bound result 48\n  Bound result 258\n  Bound result 151599550299502239\n  Bound result 149\n  Bound result 7500\n  Bound result 19712710500679202\n  Bound result 33\n  Bound result 31\n  Bound result 11743975667814472\n  Bound result 1\n  Bound result 49\n  Bound result 54\n  Bound result 106164187590710140\n  Bound result 3572\n  Bound result 407661028292688175\n  Bound result 495399120\n  Bound result 15\n  Bound result 4175\n  Bound result 5164\n  Bound result 11812\n  Bound result 96\n  Bound result 626814\n  Bound result 12345\n  Bound result 459248\n  Bound result 292539217066958302\n  Bound result 604800\n  Bound result 30\n  Bound result 152200783665942759\n  Bound result 3379\n  Bound result 6387323436088153\n  Bound result 3916265089384653\n  Bound result 2530146532084035\n  Bound result 299825954937634815\n  Bound result 31337\n  Bound result 5639\n  Bound result 1240\n  Bound result 3546798951604604\n  Bound result 239\n  Bound result 131073\n  Bound result 2442\n  Bound result 8228\n  Bound result 187613\n  Bound result 11893\n  Bound result 335485661060529068\n  Bound result 1800003600\n  Bound result 115428911151845857\n  Bound result 285403649600187\n  Bound result 158364584212996\n  Bound result 400000\n  Bound result 777598\n  Bound result 2359\n  Bound result 167934543576446635\n  Bound result 1\n  Bound result 10442\n  Bound result 27\n  Bound result 131072\n  Bound result 55\n  Bound result 61699\n  Bound result 284634302914454324\n  Bound result 192\n  Bound result 2316\n  Bound result 11155111\n  Bound result 160\n  Bound result 241746\n  Bound result 448120919896\n  Bound result 11339\n  Bound result 149562379838933216\n  Bound result 4775\n  Bound result 7183\n  Bound result 6669\n  Bound result 676730\n  Bound result 4096\n  Bound result 225745754533971264\n  Bound result 2848\n  Bound result 1525\n  Bound result 7064615525000503\n  Bound result 31337\n  Bound result 8132\n  Bound result 3000\n  Bound result 258984\n  Bound result 587608982618858474\n  Bound result 12991681730006303\n  Bound result 648084\n  Bound result 210\n  Bound result 244\n  Bound result 555710\n  Bound result 3870128997286009\n  Bound result 281157\n  Bound result 2953\n  Bound result 121612\n  Bound result 276972\n  Bound result 11523\n  Bound result 1900\n  Bound result 593537\n  Bound result 296223165133599299\n  Bound result 54960701404759629\n  Bound result 9051\n  Bound result 7578\n  Bound result 2465\n  Bound result 5760\n  Bound result 61121729900734701\n  Bound result 4970\n  Bound result 2038742806535493\n  Bound result 89821042463539455\n  Bound result 653906675248\n  Bound result 8646\n  Bound result 12865\n  Bound result 21054284149593082\n  Bound result 5492\n  Bound result 60\n  Bound result 6385\n  Bound result 259899\n  Bound result 213845706268122588\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 27.90s (27.89s 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 1128\n  Bound result 7967\n  Bound result 1114111\n  Bound result 85539\n  Bound result 101\n  Bound result 274927\n  Bound result 720\n  Bound result 2\n  Bound result 292003956564819967\n  Bound result 48875\n  Bound result 31338\n  Bound result 248\n  Bound result 8216\n  Bound result 3938\n  Bound result 311022\n  Bound result 5888\n  Bound result 251601694270782900\n  Bound result 7200\n  Bound result 212910\n  Bound result 475\n  Bound result 160\n  Bound result 241746\n  Bound result 874\n  Bound result 444890\n  Bound result 768\n  Bound result 672259\n  Bound result 234095\n  Bound result 4278255360\n  Bound result 3000\n  Bound result 57343\n  Bound result 277511596451062893\n  Bound result 6\n  Bound result 283768\n  Bound result 163367028392832273\n  Bound result 96\n  Bound result 512\n  Bound result 86400\n  Bound result 22595111\n  Bound result 709600\n  Bound result 7200\n  Bound result 412046\n  Bound result 16\n  Bound result 3297\n  Bound result 3069028484\n  Bound result 658321\n  Bound result 292003956564819968\n  Bound result 919\n  Bound result 160\n  Bound result 17179883264\n  Bound result 7947\n  Bound result 4132\n  Bound result 281474976710655\n  Bound result 65535\n  Bound result 8690\n  Bound result 249111254310977535\n  Bound result 3800\n  Bound result 71\n  Bound result 114968742912535773\n  Bound result 42251872229689437\n  Bound result 17179883264\n  Bound result 16\n  Bound result 10694333455917355\n  Bound result 6383\n  Bound result 75644250940394395\n  Bound result 322\n  Bound result 251601694271099915\n  Bound result 8636\n  Bound result 1743\n  Bound result 1163014\n  Bound result 654469\n  Bound result 258089233741591132\n  Bound result 76446951544363427\n  Bound result 17\n  Bound result 381\n  Bound result 41\n  Bound result 53882937502304079\n  Bound result 49940621976928256\n  Bound result 16383\n  Bound result 1040\n  Bound result 86400\n  Bound result 239\n  Bound result 14\n  Bound result 121345068724781055\n  Bound result 3\n  Bound result 13\n  Bound result 7607\n  Bound result 175666561971033410\n  Bound result 39265664387770983\n  Bound result 7847\n  Bound result 255\n  Bound result 595\n  Bound result 27\n  Bound result 774453\n  Bound result 777600\n  Bound result 225684821632784055\n  Bound result 10912246961994238\n  Bound result 128969933702342362\n  Bound result 5184000\n  Bound result 4988\n  Bound result 101\n  Bound result 12345\n  Bound result 127035603870986413\n  Bound result 136\n  Bound result 112\n  Bound result 299\n  Bound result 6972\n  Bound result 428056938641162658\n  Bound result 1000000\n  Bound result 402285198376\n  Bound result 6539\n  Bound result 12866848806275122\n  Bound result 6738\n  Bound result 146744073709551616\n  Bound result 11817\n  Bound result 230304381176537400\n  Bound result 2158\n  Bound result 6264\n  Bound result 4535\n  Bound result 152\n  Bound result 7858\n  Bound result 463\n  Bound result 607\n  Bound result 348537703589330802\n  Bound result 7941\n  Bound result 5086\n  Bound result 693591496906437\n  Bound result 1\n  Bound result 300000000000000000\n  Bound result 4801\n  Bound result 316964\n  Bound result 82836282654878703\n  Bound result 239859994276528226\n  Bound result 8183965182763831\n  Bound result 104\n  Bound result 483056\n  Bound result 8052\n  Bound result 1584814885\n  Bound result 237344928932233215\n  Bound result 1056290820\n  Bound result 4763734494063385\n  Bound result 2568\n  Bound result 84532\n  Bound result 395078626049837\n  Bound result 17179883264\n  Bound result 6378707640426962\n  Bound result 12\n  Bound result 31338\n  Bound result 77637473277402405\n  Bound result 561440\n  Bound result 87870995332582998\n  Bound result 216\n  Bound result 4425\n  Bound result 574\n  Bound result 668788\n  Bound result 654\n  Bound result 543452\n  Bound result 208\n  Bound result 4212\n  Bound result 7574\n  Bound result 2320\n  Bound result 1668535018\n  Bound result 25927981863421276\n  Bound result 5535575478394350\n  Bound result 212948023540069379\n  Bound result 15120887671537775\n  Bound result 294163994824255829\n  Bound result 1212\n  Bound result 746\n  Bound result 3822\n  Bound result 5607\n  Bound result 9437\n  Bound result 2222\n  Bound result 128\n  Bound result 65535\n  Bound result 184\n  Bound result 53413447823488831\n  Bound result 8339953788948973\n  Bound result 30000\n  Bound result 2543\n  Bound result 200\n  Bound result 8156\n  Bound result 299\n  Bound result 645788\n  Bound result 1237114001528763\n  Bound result 125169935154903511\n  Bound result 1099511627775\n  Bound result 2315\n  Bound result 519224\n  Bound result 2831552917361\n  Bound result 23\n  Bound result 3249237440\n  Bound result 7187198299426129\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 29.73s (29.72s CPU time)\n\nRan 16 test suites in 29.73s (59.50s CPU time): 178 tests passed, 0 failed, 0 skipped (178 total tests)\n","passed":true},{"durationMs":77,"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.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.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\":106,\"dependencies.lock.json\":20,\"docs/AUDIT_5F43F94D.md\":85,\"docs/AUDIT_D9970905.md\":76,\"docs/CHAINS.md\":18,\"docs/DEPENDENCIES.md\":22,\"docs/DEPLOYMENT.md\":69,\"docs/HOOK_SPEC.md\":63,\"docs/IMD_INTEGRATION.md\":203,\"docs/LISTINGS_AND_ADS.md\":214,\"docs/STORE_API.md\":69,\"docs/THREAT_MODEL.md\":65,\"docs/VERIFICATION.md\":211,\"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\":170,\"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\":719,\"src/imd/IIntake.sol\":27,\"src/imd/OracleAttestation.sol\":225,\"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/AuditFixes.t.sol\":192,\"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\":754,\"test/HookListingRegistry.t.sol\":265,\"test/OracleConformance.t.sol\":135,\"test/OracleSigner.t.sol\":125,\"test/ReviewBinding.t.sol\":344,\"test/ReviewDelivery.t.sol\":495,\"test/helpers/Fixture.sol\":46,\"test/helpers/ImdTemplates.sol\":19,\"test/helpers/MockIntake.sol\":111,\"test/helpers/PoolRouter.sol\":76,\"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":4107,"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:309: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#309-332):\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:670: HookJobRequester._validateBrief(bytes).cp (src/imd/HookJobRequester.sol#670) is a local variable never initialized\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:669: HookJobRequester._validateBrief(bytes).len (src/imd/HookJobRequester.sol#669) 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/imd/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#158-169) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(digest,signature) (src/imd/OracleAttestation.sol#164)\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/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:238: Reentrancy in HookJobRequester.openJob(bytes32,bytes) (src/imd/HookJobRequester.sol#238-256):\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:309: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#309-332):\n[low/medium] timestamp at src/imd/HookJobRequester.sol:292: HookJobRequester.expireJob(bytes32) (src/imd/HookJobRequester.sol#292-300) uses timestamp for comparisons\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/HookJobRequester.sol:494: HookJobRequester.expireReview(bytes32) (src/imd/HookJobRequester.sol#494-504) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#158-169) 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/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":740,"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:244: 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:349: Centralization Risk (13 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:653: Literal Instead of Constant (211 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:699: 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":"5833aff3da40af0c463e3a3e4c6633074811a1dade88bf53e2e99967392c48ed","verifiedTreeHash":"1d1f0733990247df80cbc813acd27745af44e90b","verifierVersion":"0.1.0+63e0a393"}]}