{"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":"43867c7f-d4dc-483f-a9e5-3b97bb7d9c81","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"c1085c08c0ef1b109d7b8cd76de01db877e8da82b95c27d9b8a13de1bf9c4ebe","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":"Address the findings in audit d9970905-4ad2-4107-a50e-bccd5a1cff0d on commit 50a73539a8619881cb1e0644e1d9d12df7f6c5e4.\n\nFix the medium finding: bind each signed oracle attestation to the exact pending review ask, including its request ID and question. Do not assume the live Intake ID format matches the oracle ID; fail closed and document any compatibility that still needs a live pilot. Add regression tests for swapped answers, replay and expired/repeated asks.\n\nFix HookJobRequester’s unsafe one-step ownership transfer and test zero-address/mistyped handovers. Address the EIP-7702 signer failure with tests, and correct the docs about owner powers over already-pending requests. Resolve or explicitly document the old seller’s ad blocking a new listing owner; any cancellation refund must remain with the original payer.\n\nPreserve and rerun the escrow invariants and existing tests. Report unresolved live-Intake assumptions. Do not deploy, submit paid requests or move funds.","parentJobId":"cb9cb2ea-e553-4b60-81c1-2ef8935d54f9","planHash":"c9f5bd02065ceb32f26cbc5177f964490c855b31cda8c8a973c52cc87626b293","previousHash":"a6eb075d65e5c56f3cb15a5ee19e825cb90282628e4282938b4b06e71913e53b","projectId":"28e81139-f2a5-4a5a-a239-b6c315b58e01","publication":{"commit":"684c3da344f8f9f3a34ed810e55c243eec485090","deliveredAt":"2026-10-16T03:26:17.709Z","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":"3db4e31cb0d145eff6bedf1dbaf2ade2b4be96c82c9abfd27ba873c9f2bd4844","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"ea9eab9f6c40650e0099b99bab44d3d0b4572cf7bd5437ed84fd10c69778bf90","device":"c5a27b25fa718879","findings":[],"hash":"c1085c08c0ef1b109d7b8cd76de01db877e8da82b95c27d9b8a13de1bf9c4ebe","nodeId":"137aac27-623c-422c-b15f-4948a5d04fa5","outcome":"completed","summary":"Implemented the source fixes:\n\n- Exact per-ask oracle ID/question binding, replay protection and deadline checks.\n- Two-step ownership and EIP-7702 signer support.\n- Buyer cancellation of seller ads, with refunds retained by the original payer.\n- Corrected owner-power documentation.\n\n`forge build`, all **154 tests** with both seeds, and `forge fmt --check` pass on Solidity 0.8.26. Both escrow invariants passed 128,000 calls each.\n\nLive compatibility remains unverified: each review requires an owner-verified binding before callback delivery. Mapping availability and canonical question hashing still need a pilot. See [audit-resolution notes](/home/seat/.identitymd/work/43867c7f-d4dc-483f-a9e5-3b97bb7d9c81/137aac27-623c-422c-b15f-4948a5d04fa5/docs/AUDIT_D9970905.md).\n\nNothing deployed, no paid requests submitted, and no real funds moved.","treeHash":"d5f6eca1fd426bcb3ee511b6d2dd121f6388774f","usage":{"cachedInputTokens":4156288,"inputTokens":176533,"model":"gpt-6-astra","outputTokens":33561,"runtime":"codex","turns":9,"wallClockMs":1103898}}],"verification":[{"checks":[{"durationMs":7260,"exitCode":0,"name":"build","output":"Compiling 120 files with Solc 0.8.26\nSolc 0.8.26 finished in 7.15s\nCompiler run successful!\n","passed":true},{"durationMs":27544,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ReviewBinding.t.sol:RequesterOwnershipTest\n[PASS] testMistypedHandoverCanBeCancelledOrReplacedAndOnlyNomineeAccepts() (gas: 430513)\n[PASS] testZeroAndSelfHandoversRefusedWithoutLosingControl() (gas: 103658)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.07ms (681.65µs 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 31.33ms (4.21ms CPU time)\n\nRan 3 tests for test/DeployHookJobRequester.t.sol:DeployHookJobRequesterTest\n[PASS] testCheckRefusesAddressesWithoutCodeAndUnsoldActions() (gas: 136080)\n[PASS] testDeployThenConfigureGivesAWorkingRequesterOwnedByTheNamedOwner() (gas: 5971086)\n[PASS] testRunRefusesZeroBroadcaster() (gas: 86380)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 52.69ms (2.48ms 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, μ: 210256, ~: 210034)\n[PASS] testFuzzRealSwapsSettleAndConserve(uint128,bool,bool,bool) (runs: 256, μ: 281023, ~: 278533)\nLogs:\n  Bound result 662\n\n[PASS] testFuzzSignedBoundaryAndNeutralReturn(int256,bytes) (runs: 256, μ: 30892, ~: 29822)\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 58.89ms (136.59ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] testProtocolSignatureVerifiesBeforeItsNonBoolAnswerIsRefused() (gas: 2016565)\n[PASS] test_acceptsAFreshSignatureFromTheVectorKeyAsDelivered() (gas: 2070217)\n[PASS] test_callbackSelectorsAreCanonical() (gas: 3965)\n[PASS] test_digestMatchesTheProtocol() (gas: 13956)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 93.53ms (1.62ms CPU time)\n\nRan 5 tests for test/FeaturedTransfer.t.sol:FeaturedTransferTest\n[PASS] testBuyerCanClearSellersAdAndBuyItsOwnWhileOnlySellerGetsRefund() (gas: 3188812)\n[PASS] testFuzzNewOwnerCancellationConservesAllCredits(uint256) (runs: 256, μ: 1712143, ~: 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 95.51ms (94.52ms CPU time)\n\nRan 29 tests for test/HookJobRequester.t.sol:HookJobRequesterTest\n[PASS] testAnswerSignedForAnotherConsumerRefused() (gas: 2125374)\n[PASS] testBodyIsExactTemplateWithStepsSpecAndQuotedBrief() (gas: 933392)\n[PASS] testBriefValidation() (gas: 1852572)\n[PASS] testCallbackWithUnexpectedAbiFailsSafeAndJobCanExpire() (gas: 1131148)\n[PASS] testCallbacksFitTheIntakeStipend() (gas: 1820696)\n[PASS] testConstructorRefusesZeroAddresses() (gas: 10461)\n[PASS] testForgedExpiredWeakOrMistypedAnswersRefused() (gas: 2743539)\n[PASS] testFuzzPrintableAsciiBriefAcceptedUnlessReserved(bytes32,uint8) (runs: 256, μ: 508496, ~: 854066)\nLogs:\n  Bound result 54\n\n[PASS] testJobFailureClosesJobOnceAndIsNotAVerdict() (gas: 1129688)\n[PASS] testJobIdCollidingWithPendingReviewAskRefused() (gas: 2386550)\n[PASS] testOpenJobPaysOncePullsExactPriceAndTracksRequestId() (gas: 1139237)\n[PASS] testOwnerSettersAreOwnerOnlyAndValidated() (gas: 573291)\n[PASS] testPriceCeilingProtectsStandingAllowance() (gas: 3022017)\n[PASS] testResultAcceptedOnceFromIntakeOnly() (gas: 1098119)\n[PASS] testReusedRequestIdRefused() (gas: 1214206)\n[PASS] testReviewExpiryByRequesterOnly() (gas: 2225505)\n[PASS] testReviewFailureLeavesNoVerdictAndAllowsRetry() (gas: 3371510)\n[PASS] testReviewNotPassedIsStoredNotReverted() (gas: 2209365)\n[PASS] testReviewOnlyForDeliveredOrExpiredJobsByRequester() (gas: 2338730)\n[PASS] testReviewPassedOnlyFromSignedOracleAnswer() (gas: 2428153)\n[PASS] testSameAttestationCannotSettleASecondAsk() (gas: 4157091)\n[PASS] testSignerRotationTakesEffect() (gas: 2285405)\n[PASS] testStaticSiteReadContract() (gas: 1001594)\n[PASS] testSweepRecoversStrayTokens() (gas: 125831)\n[PASS] testUnconfiguredRequesterRefusesUntilOwnerSetsTemplates() (gas: 1545002)\n[PASS] testUnknownRequestIdRefused() (gas: 141487)\n[PASS] testUnpricedActionAndVersion1IntakeRefusedWithoutPayment() (gas: 464272)\n[PASS] testVersion1IntakeWorksWithTheFailureHookOff() (gas: 3174002)\n[PASS] testWalletMustApproveAndPay() (gas: 360563)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 104.94ms (51.53ms CPU time)\n\nRan 13 tests for test/ReviewBinding.t.sol:ReviewBindingTest\n[PASS] testAnswerAtDeadlineAcceptedAndEarlierThanAskRefused() (gas: 2307428)\n[PASS] testBindingRequiresOwnerAndExactRecordedBodyAndCannotBeOverwritten() (gas: 2151348)\n[PASS] testExpiredAskAnswerCannotSettleRetryOfIdenticalQuestion() (gas: 3455032)\n[PASS] testExpiredAskRejectsFreshAttestationBeforeExplicitExpiryAndCannotBeBoundLate() (gas: 3889509)\n[PASS] testFuzzIntakeIdCannotBeReusedAfterReviewCloses(uint8) (runs: 256, μ: 2703985, ~: 2737077)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzOracleIdReservationSurvivesFailureExpiryAndSettlement(uint8) (runs: 256, μ: 4122874, ~: 4109673)\nLogs:\n  Bound result 1\n\n[PASS] testInvalidOrUnknownBindingsRefused() (gas: 2023352)\n[PASS] testOwnerRotationPowersApplyToAlreadyPendingRequestsAsDocumented() (gas: 3195844)\n[PASS] testSignedPanelQuorumAndCountsMustBeConsistent() (gas: 2174035)\n[PASS] testSignedWrongQuestionIdChainOrWindowCannotSettle() (gas: 2776169)\n[PASS] testSwappedHonestAnswersLeaveBothPendingThenSettleTheirOwnAsks() (gas: 4543289)\n[PASS] testTemplateAndTimeoutChangesDoNotChangePendingAskContext() (gas: 2499201)\n[PASS] testUnboundAskFailsClosedEvenWithCorrectlySignedMatchingIntakeIdAndRawBodyHash() (gas: 2023016)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 105.00ms (201.90ms 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, μ: 747309, ~: 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 384.34ms (151.40ms 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 425.96ms (180.42ms CPU time)\n\nRan 6 tests for test/OracleSigner.t.sol:OracleSignerTest\n[PASS] testContractSignerUsesErc1271FallbackUnderTheStipend() (gas: 2553686)\n[PASS] testDelegatedSignerStillRejectsWrongKeyTamperingAndMalformedEcdsa() (gas: 2436428)\n[PASS] testEcdsaKeyRemainsValidEvenIfItsCodeRejectsErc1271() (gas: 2183058)\n[PASS] testEip7702DesignatorDoesNotDisableTheSignersEcdsaKey() (gas: 2197219)\n[PASS] testErc1271RevocationRevertAndShortReturnFailClosedAndDoNotConsume() (gas: 2964846)\n[PASS] testFutureAttestationIsRefusedWithoutConsumingIt() (gas: 2121493)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 425.97ms (8.55ms 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 426.15ms (624.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, μ: 1590176, ~: 1591843)\nLogs:\n  Bound result 2585\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 426.11ms (74.04ms 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 27\n  Bound result 1132\n  Bound result 95\n  Bound result 595\n  Bound result 10539\n  Bound result 19572\n  Bound result 292003956564819968\n  Bound result 11102\n  Bound result 3084\n  Bound result 11905\n  Bound result 546603\n  Bound result 200000000000000000\n  Bound result 53298\n  Bound result 461140657587131305\n  Bound result 290740339967630715\n  Bound result 181570759080747168\n  Bound result 1411\n  Bound result 146208523776951\n  Bound result 50\n  Bound result 63\n  Bound result 210349969928706462\n  Bound result 2\n  Bound result 104\n  Bound result 224\n  Bound result 1467\n  Bound result 371\n  Bound result 958323916934404136\n  Bound result 188792317401429763\n  Bound result 33\n  Bound result 7183\n  Bound result 8078\n  Bound result 215\n  Bound result 171\n  Bound result 4663\n  Bound result 49\n  Bound result 258394335912552129\n  Bound result 187647486242305988\n  Bound result 100\n  Bound result 3871614075\n  Bound result 101009750004847455\n  Bound result 5496\n  Bound result 11958\n  Bound result 5060\n  Bound result 10732\n  Bound result 104\n  Bound result 626814\n  Bound result 8328947548879144\n  Bound result 459248\n  Bound result 292539217066958302\n  Bound result 121122190524355213\n  Bound result 3160\n  Bound result 5419\n  Bound result 525262824\n  Bound result 5374\n  Bound result 255647147286085\n  Bound result 61455823434998\n  Bound result 192\n  Bound result 3573918928\n  Bound result 5340\n  Bound result 1193\n  Bound result 9513881087259\n  Bound result 243\n  Bound result 260000\n  Bound result 4000\n  Bound result 145\n  Bound result 8046\n  Bound result 428230\n  Bound result 11568\n  Bound result 17154610969388374\n  Bound result 22510392693238116\n  Bound result 31384890301782487\n  Bound result 190699907277886776\n  Bound result 115428911151845857\n  Bound result 2723\n  Bound result 1025\n  Bound result 5939536157748\n  Bound result 16383\n  Bound result 777598\n  Bound result 8904\n  Bound result 167934543576446635\n  Bound result 1\n  Bound result 763600050\n  Bound result 103\n  Bound result 0\n  Bound result 47\n  Bound result 723849\n  Bound result 6737048805\n  Bound result 284634302914454324\n  Bound result 49375029152513727\n  Bound result 1682\n  Bound result 11155111\n  Bound result 168\n  Bound result 13\n  Bound result 448120919896\n  Bound result 3856056065\n  Bound result 1487080236\n  Bound result 6205575065833443\n  Bound result 5340\n  Bound result 7646\n  Bound result 6914\n  Bound result 676730\n  Bound result 1792\n  Bound result 165266976697871334\n  Bound result 4318\n  Bound result 370198247854744942\n  Bound result 143726554745283476\n  Bound result 31337\n  Bound result 2545\n  Bound result 131073\n  Bound result 204074\n  Bound result 9790651496232744\n  Bound result 42\n  Bound result 1328043874211919\n  Bound result 15990112004991699\n  Bound result 473762\n  Bound result 210\n  Bound result 240\n  Bound result 127\n  Bound result 555710\n  Bound result 517556611459159\n  Bound result 650557\n  Bound result 3746\n  Bound result 30333\n  Bound result 48\n  Bound result 562\n  Bound result 1900\n  Bound result 39870065681248179\n  Bound result 40\n  Bound result 63\n  Bound result 112916133624442327\n  Bound result 54960701404759629\n  Bound result 10665\n  Bound result 526\n  Bound result 8756\n  Bound result 44482807787246883\n  Bound result 17075657632579277\n  Bound result 8556\n  Bound result 232\n  Bound result 7657\n  Bound result 27005787037037037\n  Bound result 10000000000000000\n  Bound result 653906675248\n  Bound result 10581\n  Bound result 534390\n  Bound result 14096804351738572\n  Bound result 11589\n  Bound result 8556\n  Bound result 604800\n  Bound result 2009313491\n  Bound result 2445\n  Bound result 438314\n  Bound result 213845706268122588\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.94s (26.93s 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 152\n  Bound result 7967\n  Bound result 239\n  Bound result 9518\n  Bound result 634882\n  Bound result 95\n  Bound result 718\n  Bound result 2\n  Bound result 16\n  Bound result 202261\n  Bound result 23\n  Bound result 4773\n  Bound result 8106\n  Bound result 3800\n  Bound result 311022\n  Bound result 382314\n  Bound result 3022\n  Bound result 30000\n  Bound result 212910\n  Bound result 475\n  Bound result 168\n  Bound result 13\n  Bound result 855\n  Bound result 444890\n  Bound result 30310\n  Bound result 149614\n  Bound result 53298\n  Bound result 74966859414961920\n  Bound result 131073\n  Bound result 194\n  Bound result 277511596451062893\n  Bound result 65536\n  Bound result 5599312750191268\n  Bound result 4473863977340984\n  Bound result 104\n  Bound result 14080\n  Bound result 2000\n  Bound result 22595111\n  Bound result 709600\n  Bound result 20000\n  Bound result 59901166375871625\n  Bound result 447594\n  Bound result 3390\n  Bound result 3356411171\n  Bound result 95\n  Bound result 13\n  Bound result 851\n  Bound result 9254497767966755\n  Bound result 4278255360\n  Bound result 161929371932017168\n  Bound result 253938271\n  Bound result 72057594037927935\n  Bound result 32\n  Bound result 8332\n  Bound result 224\n  Bound result 2810\n  Bound result 17295871505851\n  Bound result 241162150748123962\n  Bound result 224\n  Bound result 281470681808895\n  Bound result 24\n  Bound result 1650\n  Bound result 75644250940394395\n  Bound result 322\n  Bound result 11978\n  Bound result 7377\n  Bound result 1089\n  Bound result 3026\n  Bound result 516276\n  Bound result 230419444921158494\n  Bound result 17\n  Bound result 325\n  Bound result 8192\n  Bound result 6515\n  Bound result 208\n  Bound result 8712\n  Bound result 63\n  Bound result 1039\n  Bound result 2000\n  Bound result 122857\n  Bound result 229035837012967424\n  Bound result 164337593543950335\n  Bound result 3\n  Bound result 9\n  Bound result 517440285\n  Bound result 49587247051989416\n  Bound result 69202243401761055\n  Bound result 1238\n  Bound result 24\n  Bound result 262961\n  Bound result 103\n  Bound result 6629\n  Bound result 200000\n  Bound result 225684821632784055\n  Bound result 65979675403081969\n  Bound result 74754976894063967\n  Bound result 119433172939662730\n  Bound result 4772\n  Bound result 200000000000000000\n  Bound result 100000000000000000\n  Bound result 127035603870986413\n  Bound result 344825\n  Bound result 128145131154677420\n  Bound result 28\n  Bound result 920\n  Bound result 400448410033759949\n  Bound result 2048\n  Bound result 6344\n  Bound result 90056171298860622\n  Bound result 2\n  Bound result 372\n  Bound result 230304381176537400\n  Bound result 5621\n  Bound result 2086852256\n  Bound result 160\n  Bound result 8563\n  Bound result 9657\n  Bound result 7147\n  Bound result 440\n  Bound result 1\n  Bound result 300000000000000000\n  Bound result 4405\n  Bound result 316964\n  Bound result 3282482187615815\n  Bound result 61355445114474496\n  Bound result 81916\n  Bound result 107477464\n  Bound result 3878\n  Bound result 227581105975853055\n  Bound result 1056290820\n  Bound result 183165951014007481\n  Bound result 88\n  Bound result 281470681808895\n  Bound result 768\n  Bound result 371636862\n  Bound result 218815716498328455\n  Bound result 561440\n  Bound result 249111254310977535\n  Bound result 546\n  Bound result 57343\n  Bound result 301\n  Bound result 543452\n  Bound result 216\n  Bound result 1183\n  Bound result 6266\n  Bound result 1089\n  Bound result 138453679336640498\n  Bound result 200\n  Bound result 238512822880051535\n  Bound result 288558550556409962\n  Bound result 3225\n  Bound result 1014417655\n  Bound result 200152988\n  Bound result 438071174\n  Bound result 19571\n  Bound result 32\n  Bound result 192\n  Bound result 224770439527529\n  Bound result 27735678312342672\n  Bound result 101\n  Bound result 2241\n  Bound result 293782792835301375\n  Bound result 2304\n  Bound result 631414\n  Bound result 645788\n  Bound result 8466\n  Bound result 125169935154903511\n  Bound result 281474976710655\n  Bound result 1262\n  Bound result 519224\n  Bound result 60328097011684106\n  Bound result 1800003600\n  Bound result 4451\n  Bound result 4331685385143289\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 27.40s (27.40s CPU time)\n\nRan 15 test suites in 27.41s (56.97s CPU time): 154 tests passed, 0 failed, 0 skipped (154 total tests)\n","passed":true},{"durationMs":74,"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\":104,\"dependencies.lock.json\":20,\"docs/AUDIT_D9970905.md\":70,\"docs/CHAINS.md\":18,\"docs/DEPENDENCIES.md\":22,\"docs/DEPLOYMENT.md\":69,\"docs/HOOK_SPEC.md\":63,\"docs/IMD_INTEGRATION.md\":165,\"docs/LISTINGS_AND_ADS.md\":214,\"docs/STORE_API.md\":69,\"docs/THREAT_MODEL.md\":62,\"docs/VERIFICATION.md\":169,\"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\":169,\"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\":622,\"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\":751,\"test/HookListingRegistry.t.sol\":265,\"test/OracleConformance.t.sol\":135,\"test/OracleSigner.t.sol\":125,\"test/ReviewBinding.t.sol\":342,\"test/helpers/Fixture.sol\":46,\"test/helpers/ImdTemplates.sol\":15,\"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":3786,"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:286: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#286-309):\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:573: HookJobRequester._validateBrief(bytes).cp (src/imd/HookJobRequester.sol#573) is a local variable never initialized\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:572: HookJobRequester._validateBrief(bytes).len (src/imd/HookJobRequester.sol#572) 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:215: Reentrancy in HookJobRequester.openJob(bytes32,bytes) (src/imd/HookJobRequester.sol#215-233):\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:286: Reentrancy in HookJobRequester.requestReview(bytes32) (src/imd/HookJobRequester.sol#286-309):\n[low/medium] timestamp at src/imd/HookJobRequester.sol:403: HookJobRequester.expireReview(bytes32) (src/imd/HookJobRequester.sol#403-413) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:269: HookJobRequester.expireJob(bytes32) (src/imd/HookJobRequester.sol#269-277) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:316: HookJobRequester.bindReview(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64) (src/imd/HookJobRequester.sol#316-354) 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/imd/HookJobRequester.sol:358: HookJobRequester.onReviewResult(bytes32,OracleAttestation.Attestation,bytes) (src/imd/HookJobRequester.sol#358-388) 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: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":828,"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:221: 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:324: 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:556: 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:602: 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":"c1085c08c0ef1b109d7b8cd76de01db877e8da82b95c27d9b8a13de1bf9c4ebe","verifiedTreeHash":"d5f6eca1fd426bcb3ee511b6d2dd121f6388774f","verifierVersion":"0.1.0+63e0a393"}]}