{"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":"eb76afdc-5592-44a5-b618-4d41ec2b18ca","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"c9d2719879f9361941d014e93196c5296bd810fccee138a6c68193c125ad1984","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":"Prepare this project for a functional paid Hooks Store MVP. Address all six low findings in audit 6b607200-d29f-4c7a-8476-0dca8091f48f against commit 0d9d440063465654f39ef7f3939b1b4d9c90c5f6 in one coherent change.\n Specifically prevent the job-expiry/failure race; prevent a wrong pre-binding from losing a one-shot review answer; provide safe closure for an abandoned pending ask and an incident response for a retained answer from a compromised signer; prevent quoted-but-unspent IMD from becoming owner-sweepable; and add a caller-specified maximum price to paid requests. Preserve signed-answer binding, replay protection, receipt history, escrow refunds and the 200k callback budget. Update the site-facing ABI and docs for any changed calls.\nAdd adversarial tests for each finding and rerun the full Foundry suite, including listing/ad escrow. Clearly identify what still requires a real IMD Intake test. \nCode only: no deployment, paid request or fund movement.","parentJobId":"734d0f71-689f-46e6-bd98-b74bd4bad8b5","planHash":"fd4b210755449b7577c5db609031d6d77d5d746948bdfd619e7613a79748d928","previousHash":"ca920effe496070e4addb49899a13968de8e12df77e2af23f4362b75ba87549f","projectId":"28e81139-f2a5-4a5a-a239-b6c315b58e01","publication":{"commit":"eb1333775e60fe191acfa5a420e9256feeb4a2b0","deliveredAt":"2026-10-16T07:43:02.357Z","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":"884f798ac5bffc9f96e5d1bb93a77e18b2ffcf97e04dbc7c0fb91727fbb8487e","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"2c974b9ae0c9849cda2ebcdca29591cb9e91e35ddf267efeae971d6e117b616f","device":"34a2521e85e06dc6","findings":[],"hash":"c9d2719879f9361941d014e93196c5296bd810fccee138a6c68193c125ad1984","nodeId":"e14d1472-acc6-4295-83c2-9c1fc80d3c48","outcome":"completed","summary":"Implemented all six findings, with updated ABI, status page, operational docs, and adversarial tests.\n\n- `forge build` and `forge fmt --check` pass.\n- All **228 Foundry tests pass with both seeds**, including listing/ad escrow.\n- All **11 site/ABI tests pass**.\n- Worst tested callback: **192,598 / 200,000 gas**.\n\nReal Intake testing remains required for callback/schema compatibility, exact spending, authenticated answer mapping, retry signing, and production signer gas. Details: [remediation notes](docs/AUDIT_6B607200.md).\n\nNo deployment, paid request, or fund movement occurred.","treeHash":"fa41ca11d3690ae8914239d9576f99bf7560471b","usage":{"cachedInputTokens":4438016,"inputTokens":174956,"model":"gpt-6-astra","outputTokens":40613,"runtime":"codex","turns":8,"wallClockMs":1289972}}],"verification":[{"checks":[{"durationMs":12010,"exitCode":0,"name":"build","output":"Compiling 129 files with Solc 0.8.26\nSolc 0.8.26 finished in 11.84s\nCompiler run successful!\n","passed":true},{"durationMs":30044,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/AuditExpiryProof.t.sol:ExpiryFrontRunShoppingTest\n[PASS] testRequesterFrontRunsLateNotPassedWithExpiryAndReasks() (gas: 1276393)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.25ms (1.19ms CPU time)\n\nRan 2 tests for test/ReviewBinding.t.sol:RequesterOwnershipTest\n[PASS] testMistypedHandoverCanBeCancelledOrReplacedAndOnlyNomineeAccepts() (gas: 430293)\n[PASS] testZeroAndSelfHandoversRefusedWithoutLosingControl() (gas: 103658)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.41ms (513.36µ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 6.45ms (4.49ms CPU time)\n\nRan 1 test for test/AuditReceiptConflictProof.t.sol:StuckReceiptProofTest\n[PASS] testOwnerCanCloseReceiptWhoseUuidWasConsumedElsewhere() (gas: 2592712)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.71ms (5.60ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] testProtocolSignatureVerifiesBeforeItsNonBoolAnswerIsRefused() (gas: 2054064)\n[PASS] test_acceptsAFreshSignatureFromTheVectorKeyAsDelivered() (gas: 2129779)\n[PASS] test_callbackSelectorsAreCanonical() (gas: 3965)\n[PASS] test_digestMatchesTheProtocol() (gas: 13912)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 7.49ms (6.00ms CPU time)\n\nRan 6 tests for test/OracleSigner.t.sol:OracleSignerTest\n[PASS] testContractSignerUsesErc1271FallbackUnderTheStipend() (gas: 2620512)\n[PASS] testDelegatedSignerStillRejectsWrongKeyTamperingAndMalformedEcdsa() (gas: 2506479)\n[PASS] testEcdsaKeyRemainsValidEvenIfItsCodeRejectsErc1271() (gas: 2242574)\n[PASS] testEip7702DesignatorDoesNotDisableTheSignersEcdsaKey() (gas: 2256758)\n[PASS] testErc1271RevocationRevertAndShortReturnFailClosedAndDoNotConsume() (gas: 3041970)\n[PASS] testFutureAttestationIsRefusedWithoutConsumingIt() (gas: 2181250)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 8.13ms (6.88ms CPU time)\n\nRan 3 tests for test/DeployHookJobRequester.t.sol:DeployHookJobRequesterTest\n[PASS] testCheckRefusesAddressesWithoutCodeAndUnsoldActions() (gas: 136048)\n[PASS] testDeployThenConfigureGivesAWorkingRequesterOwnedByTheNamedOwner() (gas: 7134814)\n[PASS] testRunRefusesZeroBroadcaster() (gas: 86380)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 22.74ms (2.09ms 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, μ: 747318, ~: 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 100.64ms (101.82ms CPU time)\n\nRan 5 tests for test/FeaturedTransfer.t.sol:FeaturedTransferTest\n[PASS] testBuyerCanClearSellersAdAndBuyItsOwnWhileOnlySellerGetsRefund() (gas: 3188812)\n[PASS] testFuzzNewOwnerCancellationConservesAllCredits(uint256) (runs: 256, μ: 1712290, ~: 1713805)\nLogs:\n  Bound result 15161\n\n[PASS] testIntermediateOwnerLosesCancellationPowerButOriginalPayerKeepsIt() (gas: 1869005)\n[PASS] testNewOwnerCannotCancelAtExpiryAndCanRenewBeforeOldSettlement() (gas: 2169353)\n[PASS] testProposedOwnerCannotCancelUntilAcceptingAndAdminCannotCancel() (gas: 1838309)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 224.31ms (227.87ms 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, ~: 210022)\n[PASS] testFuzzRealSwapsSettleAndConserve(uint128,bool,bool,bool) (runs: 256, μ: 281005, ~: 278533)\nLogs:\n  Bound result 4373\n\n[PASS] testFuzzSignedBoundaryAndNeutralReturn(int256,bytes) (runs: 256, μ: 30794, ~: 29816)\n[PASS] testFuzzUnauthorizedCallbacks(address) (runs: 256, μ: 94960, ~: 95102)\n[PASS] testIntMinIntMaxAndZeroFailClearly() (gas: 88270)\n[PASS] testLimitCapsOnlySpecifiedSideNotUnspecifiedSide() (gas: 427039)\n[PASS] testLiquidityWithdrawalRemainsAvailableAfterRejectedSwap() (gas: 184825)\n[PASS] testOverLimitRevertsThroughManagerInAllModes() (gas: 253819)\n[PASS] testSettlementFailureRollsBackCounterAndPoolState() (gas: 388376)\n[PASS] testTwoNewPoolsReuseOneDeployedHook() (gas: 624953)\n[PASS] testUnusedCallbacksAlwaysRevert() (gas: 209241)\n[PASS] testWrongHookAndUnknownPoolRejected() (gas: 124522)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 252.34ms (273.61ms CPU time)\n\nRan 8 tests for test/ReviewReceiptGas.t.sol:ReviewReceiptGasTest\n[PASS] testAudit22ColdReadsNowRetainsOneShotReceiptAndBoundVerdict() (gas: 4868654)\nLogs:\n  Cold audit registry +22 reads receipt minimum forwarded gas: 187543\n  Cold audit registry +22 reads bound minimum forwarded gas: 150038\n\n[PASS] testColdEoaReceiptGasAndExactStipend() (gas: 1899457)\nLogs:\n  Cold EOA receipt minimum forwarded gas: 125296\n\n[PASS] testColdFiveOfSevenReceiptAfterExpiryRequestFitsStipend() (gas: 2498654)\nLogs:\n  Cold 5-of-7 receipt after expiry request minimum forwarded gas: 170389\n\n[PASS] testColdFiveOfSevenReceiptAndBoundCallbacksFitStipend() (gas: 4465609)\nLogs:\n  Cold 5-of-7 receipt minimum forwarded gas: 170389\n  Cold 5-of-7 bound minimum forwarded gas: 132865\n\n[PASS] testColdFiveOfSevenRetryReceiptBeforeReservationReleaseFitsStipend() (gas: 2600629)\nLogs:\n  Cold 5-of-7 reserved retry receipt minimum forwarded gas: 170389\n\n[PASS] testColdWrongPrebindingRetainsReceiptWithFiveOfSevenAndAuditSigner() (gas: 4002878)\nLogs:\n  Cold 5-of-7 mismatched pre-binding minimum forwarded gas: 175435\n  Cold audit +22 reads mismatched pre-binding minimum forwarded gas: 192598\n\n[PASS] testFuzzMultisignerRefusesWrongKeyDuplicateRevokedExpiredOrInsufficientSignatures(uint8) (runs: 256, μ: 381939, ~: 386053)\nLogs:\n  Bound result 1\n\n[PASS] testOverBudgetSignerStillFailsClosedAndLosesSingleAttemptWithoutPartialReceipt() (gas: 711494)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 283.61ms (181.60ms CPU time)\n\nRan 3 tests for test/ReviewReceiptPacking.t.sol:ReviewReceiptPackingTest\n[PASS] testAllocatedMetadataIsNotAnAnswerAndReadAbiRemainsTenWords() (gas: 1875368)\n[PASS] testFuzzReceiptPreservesFullContextAndPackedFields(uint64,uint64,uint64,uint16,uint16,bool,uint256) (runs: 256, μ: 2396162, ~: 2396158)\nLogs:\n  Bound result 0\n  Bound result 5\n  Bound result 5\n\n[PASS] testReceiptPackingMaximumValuesDoNotLeakIntoAdjacentFields() (gas: 2386145)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 283.71ms (283.03ms 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 343.81ms (187.77ms CPU time)\n\nRan 13 tests for test/RequesterMvpAudit.t.sol:RequesterMvpLifecycleTest\n[PASS] testAbandonedAskReceiptBlocksClosureWithoutRequesterExpiryRequest() (gas: 2349583)\n[PASS] testBindingResetRequiresOwnerExactBodyAndPendingBoundAsk() (gas: 2738752)\n[PASS] testFuzzCompromisedEpochBlocksRetainedAnswersAndAllowsHonestClosure(bool,bool) (runs: 256, μ: 4027813, ~: 4155756)\n[PASS] testFuzzJobFailureAndExpiryOrderingCannotChangeReviewEligibility(uint8,bool) (runs: 256, μ: 2484768, ~: 2495437)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzWrongPrebindingRetainsOneShotAnswerAndCanBeCorrected(uint8,bool) (runs: 256, μ: 2883621, ~: 2883850)\nLogs:\n  Bound result 1\n\n[PASS] testIncidentRevocationIsExplicitAndCannotUndoFinalizedVerdicts() (gas: 2485260)\n[PASS] testLateFailureCannotClearFinalizedNegativeReview() (gas: 2405045)\n[PASS] testOwnerClosesAbandonedAskOnlyAfterDeadlineAndCannotCloseItsRetry() (gas: 3670164)\n[PASS] testRevocationFreezesEveryOldReceiptButNotANewEpochReceipt() (gas: 6604665)\n[PASS] testRevocationValidatesAuthorityEpochAndEvidence() (gas: 238952)\n[PASS] testRevokedBoundMismatchClosesWithoutResetAndReservationReleasePreservesHistory() (gas: 2644135)\n[PASS] testSwappedPreboundDeliveriesStayPendingAndNeverConsumeEachOthersUuid() (gas: 4983005)\n[PASS] testUnknownOrMissingReceiptCannotBeIncidentClosed() (gas: 1863123)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 350.74ms (861.92ms CPU time)\n\nRan 13 tests for test/ReviewBinding.t.sol:ReviewBindingTest\n[PASS] testAnswerAtDeadlineAcceptedAndExcessiveBackwardSkewRefused() (gas: 2375144)\n[PASS] testBindingRequiresOwnerAndExactRecordedBodyAndCannotBeOverwritten() (gas: 2204602)\n[PASS] testExpiredAskAnswerCannotSettleRetryOfIdenticalQuestion() (gas: 3647632)\n[PASS] testFuzzIntakeIdCannotBeReusedAfterReviewCloses(uint8) (runs: 256, μ: 2797634, ~: 2820538)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzOracleIdReservationSurvivesFailureExpiryAndSettlement(uint8) (runs: 256, μ: 4255729, ~: 4281792)\nLogs:\n  Bound result 1\n\n[PASS] testInvalidOrUnknownBindingsRefused() (gas: 2061198)\n[PASS] testLateValidAnswerAndLateBindingAllowedUntilExplicitExpiry() (gas: 4452820)\n[PASS] testOwnerRotationPowersApplyToAlreadyPendingRequestsAsDocumented() (gas: 3305827)\n[PASS] testSignedPanelQuorumAndCountsMustBeConsistent() (gas: 2236394)\n[PASS] testSignedWrongQuestionIdChainOrWindowCannotSettle() (gas: 3714639)\n[PASS] testSwappedHonestAnswersLeaveBothPendingThenSettleTheirOwnAsks() (gas: 5009115)\n[PASS] testTemplateAndTimeoutChangesDoNotChangePendingAskContext() (gas: 2561468)\n[PASS] testUnboundReceiptDoesNotTrustMatchingIntakeIdAndRawBodyHash() (gas: 2422042)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 372.69ms (540.59ms CPU time)\n\nRan 29 tests for test/HookJobRequester.t.sol:HookJobRequesterTest\n[PASS] testAnswerSignedForAnotherConsumerRefused() (gas: 2185104)\n[PASS] testBodyIsExactTemplateWithStepsSpecAndQuotedBrief() (gas: 945266)\n[PASS] testBriefValidation() (gas: 1867629)\n[PASS] testCallbackWithUnexpectedAbiFailsSafeAndJobCanExpire() (gas: 1198090)\n[PASS] testCallbacksFitTheIntakeStipend() (gas: 1844564)\n[PASS] testConstructorRefusesZeroAddresses() (gas: 10483)\n[PASS] testForgedExpiredWeakOrMistypedAnswersRefused() (gas: 2793594)\n[PASS] testFuzzPrintableAsciiBriefAcceptedUnlessReserved(bytes32,uint8) (runs: 256, μ: 527395, ~: 865961)\nLogs:\n  Bound result 20\n\n[PASS] testJobFailureClosesJobOnceAndIsNotAVerdict() (gas: 1949518)\n[PASS] testJobIdCollidingWithPendingReviewAskRefused() (gas: 2455725)\n[PASS] testOpenJobPaysOncePullsExactPriceAndTracksRequestId() (gas: 1151112)\n[PASS] testOwnerSettersAreOwnerOnlyAndValidated() (gas: 640828)\n[PASS] testPriceCeilingProtectsStandingAllowance() (gas: 3061964)\n[PASS] testResultAcceptedOnceFromIntakeOnly() (gas: 1110619)\n[PASS] testReusedRequestIdRefused() (gas: 1238026)\n[PASS] testReviewExpiryRequestedByRequesterAndConfirmedByOwner() (gas: 2371273)\n[PASS] testReviewFailureLeavesNoVerdictAndAllowsRetry() (gas: 3478780)\n[PASS] testReviewNotPassedIsStoredNotReverted() (gas: 2268946)\n[PASS] testReviewOnlyForDeliveredOrExpiredJobsByRequester() (gas: 2399658)\n[PASS] testReviewPassedOnlyFromSignedOracleAnswer() (gas: 2487973)\n[PASS] testSameAttestationCannotSettleASecondAsk() (gas: 4292878)\n[PASS] testSignerRotationTakesEffect() (gas: 2354792)\n[PASS] testStaticSiteReadContract() (gas: 1014773)\n[PASS] testSweepRecoversStrayTokens() (gas: 137069)\n[PASS] testUnconfiguredRequesterRefusesUntilOwnerSetsTemplates() (gas: 1557560)\n[PASS] testUnknownRequestIdRefused() (gas: 141922)\n[PASS] testUnpricedActionAndVersion1IntakeRefusedWithoutPayment() (gas: 472511)\n[PASS] testVersion1IntakeWorksWithTheFailureHookOff() (gas: 3239989)\n[PASS] testWalletMustApproveAndPay() (gas: 373135)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 372.85ms (99.26ms CPU time)\n\nRan 6 tests for test/RequesterMvpAudit.t.sol:RequesterMvpPaymentTest\n[PASS] testCallerLimitZeroFailsAndLowerQuoteChargesOnlyQuote() (gas: 1075002)\n[PASS] testExistingDonationsCannotHideUnderpaymentOrBecomeCallerFunds() (gas: 1825159)\n[PASS] testFuzzCallerLimitSurvivesOwnerCeilingIncreaseAndIntakePriceMove(bool,uint96) (runs: 256, μ: 1606384, ~: 2068387)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzInexactIncomingTokensCannotSpendPreexistingDonations(uint8) (runs: 256, μ: 1208853, ~: 1210401)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzUnderspendingIntakeRollsBackAllStateAndLeavesNothingSweepable(uint256,bool,bool) (runs: 256, μ: 2404046, ~: 2871767)\nLogs:\n  Bound result 25647596775635\n\n[PASS] testTokenCallbackCannotReenterSweepOrChangePaymentConfiguration() (gas: 4048680)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 372.77ms (949.06ms CPU time)\n\nRan 11 tests for test/ReviewRecovery.t.sol:ReviewRecoveryTest\n[PASS] testBoundOrTerminalAsksCannotBeDiscarded() (gas: 2360894)\n[PASS] testDiscardingDuplicateReceiptDoesNotClearGenuineConsumedUuid() (gas: 4367088)\n[PASS] testExpiredJobFalseVerdictRemainsTerminalEvenIfReviewLaterCompletes() (gas: 2437396)\n[PASS] testFuzzOwnerCannotDiscardReceiptWithMatchingContext(bool) (runs: 256, μ: 2369072, ~: 2369072)\n[PASS] testFuzzReleaseUnusedReservationAfterExpiryOrFailureThenFinalizeRetry(bool,bool) (runs: 256, μ: 5633275, ~: 5638220)\n[PASS] testFuzzSameUuidFieldMismatchCannotDiscardReceipt(uint8) (runs: 256, μ: 2231003, ~: 2231198)\nLogs:\n  Bound result 4\n\n[PASS] testLateNotPassedReceiptCannotBeFrontRunByRequesterExpiry() (gas: 2406349)\n[PASS] testRecoveryRequiresCurrentOwnerExactBodyValidContextAndReceipt() (gas: 2565238)\n[PASS] testReservationReleaseRejectsUnknownUnboundAndPendingHolderEvenPastDeadline() (gas: 4024297)\n[PASS] testSignerRotationPreservesRetainedVerificationButRejectsUndeliveredOldSignature() (gas: 4467752)\n[PASS] testSwappedReceiptOwnerClosesWrongAskWithoutStrandingGenuineUuid() (gas: 6129460)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 372.78ms (774.08ms CPU time)\n\nRan 7 tests for test/ReviewAuditRegression.t.sol:ReviewAuditRegressionTest\n[PASS] testExpiryNeedsDeadlineAndCurrentOwnerApprovalForExactAsk() (gas: 3747216)\n[PASS] testExpiryRequestAllowsBindingBeforeLateDelivery() (gas: 2440339)\n[PASS] testFuzzExactConflictRecoveryPreservesOtherAskAndReplayProtection(bool,bool,bool) (runs: 256, μ: 5936732, ~: 5936724)\n[PASS] testFuzzExpiryAndDeliveryBothOrdersPreserveVerdictAndBlockRetries(bool,bool,bool) (runs: 256, μ: 2683903, ~: 2772422)\n[PASS] testFuzzSameUuidTypoCannotDiscardGenuineNegativeEvenWithConflict(uint8,bool) (runs: 256, μ: 3460616, ~: 2573905)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzUnavailableDifferentTrueUuidCannotDiscardGenuineNegative(uint8) (runs: 256, μ: 4580274, ~: 4579562)\nLogs:\n  Bound result 1\n\n[PASS] testIntakeFailureAfterExpiryRequestAllowsRetryAndInvalidatesOldApproval() (gas: 3250933)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 372.86ms (912.48ms CPU time)\n\nRan 24 tests for test/ReviewDelivery.t.sol:ReviewDeliveryTest\n[PASS] testAnswerAtExactSignatureExpiryCanBeRetainedAndConfirmedLater() (gas: 2346461)\n[PASS] testConfirmedReceiptCannotBeReplayedOrRebound() (gas: 2397470)\n[PASS] testEarlyEip7702KeyReceiptFitsColdStipend() (gas: 2346984)\n[PASS] testEarlyErc1271ReceiptFitsColdStipendAndSurvivesLaterRevocation() (gas: 2878012)\n[PASS] testFreshLateAnswerAcceptedIfRequesterRequestsExpiryFirst() (gas: 2362988)\n[PASS] testFuzzBindingMustMatchEveryRetainedFieldAndFailedBindingCanBeCorrected(uint8) (runs: 256, μ: 2592914, ~: 2593113)\nLogs:\n  Bound result 2\n\n[PASS] testFuzzClockSkewToleranceIsSymmetricAtAskTime(int16,bool) (runs: 256, μ: 2295517, ~: 2316407)\nLogs:\n  Bound result -51\n\n[PASS] testFuzzEarlyOneAttemptCallbackRetainedThenConfirmedWithoutAnotherFee(bool) (runs: 256, μ: 2793561, ~: 2793561)\n[PASS] testFuzzFreshLateAnswerAcceptedUntilExplicitExpiry(bool,uint32) (runs: 256, μ: 2414258, ~: 2393946)\nLogs:\n  Bound result 324327\n\n[PASS] testFuzzInvalidEarlyAnswerNeverCreatesReceiptOrVerdict(uint8) (runs: 256, μ: 2017490, ~: 2021424)\nLogs:\n  Bound result 8\n\n[PASS] testFuzzRequesterCannotDiscardRetainedAnswerOrBuyAnotherReview(bool) (runs: 256, μ: 2580110, ~: 2580110)\n[PASS] testIntakeFailureBeforeReceiptIsTerminalAndBindingCannotInventAnAnswer() (gas: 2047591)\n[PASS] testInvalidOneAttemptCallbackLosesFeeAndCannotRetryOrCreateReceipt() (gas: 3572939)\n[PASS] testMalformedOneShotCallbackCannotCreateReceipt() (gas: 1882759)\n[PASS] testOneSecondBackwardSkewAndExactFiveMinuteBoundaryAccepted() (gas: 4607139)\n[PASS] testOnlyCurrentIntakeMayRetainAndOnlyOwnerMayConfirm() (gas: 2545807)\n[PASS] testReceiptBindingStillRequiresExactBodyFingerprint() (gas: 2351471)\n[PASS] testReceiptCanBeConfirmedAfterSignatureExpiryTimeoutAndAuthorityRotation() (gas: 2631092)\n[PASS] testReceiptCannotBeOverwrittenOrClearedBySecondIntakeCallback() (gas: 2585609)\n[PASS] testReservedUuidRetainedWithoutVerdictButConsumedUuidRefused() (gas: 6111630)\n[PASS] testSignatureExpiryStillControlsArrivalEvenAfterAskDeadline() (gas: 2016141)\n[PASS] testSwappedEarlyYesAndNoAnswersCannotBecomeVerdicts() (gas: 4348721)\n[PASS] testTimestampExtremesDoNotOverflowSkewCheck() (gas: 2405825)\n[PASS] testUnconfirmedDuplicateCannotReserveOrConsumeTheActualAsksUuid() (gas: 4361278)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 373.13ms (1.32s 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 582.77ms (674.42ms 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, μ: 1590323, ~: 1591843)\nLogs:\n  Bound result 14099\n\n[PASS] testHalfDurationCancellationSplitsFeeAndProceedsArePullBased() (gas: 1742376)\n[PASS] testImmediateCancellationFullyRefundsThenOwnerCanWithdraw() (gas: 1648242)\n[PASS] testOnlyListingOwnerCanBuyAndUnrelatedAccountsCannotCancelIncludingAdmin() (gas: 1766171)\n[PASS] testPurchaseCostsExactlyPointOneImdAndHasSevenDayAdLabel() (gas: 1481632)\n[PASS] testRecipientRotationInvalidatesStalePurchaseBeforeFundsAreLocked() (gas: 1453614)\n[PASS] testRecipientsAreSnapshottedAndChangingThemCannotTakeOldFunds() (gas: 2414968)\n[PASS] testSingleLivePlacementButCanRenewUnsettledExpiredOrCancelledPlacement() (gas: 2497512)\n[PASS] testSnapshotSurvivesEditingArchivingTransferAndRefundStaysWithPayer() (gas: 2399315)\n[PASS] testStaleTermsInactiveListingInsufficientBalanceAndDeadlineFailBeforeDebit() (gas: 1405175)\n[PASS] testUnknownIdsAndInvalidPagesFail() (gas: 228111)\n[PASS] testUnsetConfigurationAndTokenCanOnlyBeChosenOnce() (gas: 703556)\n[PASS] testZeroAmountsInvalidRecipientsAndExcessWithdrawalsFail() (gas: 629582)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 582.78ms (587.08ms CPU time)\n\nRan 1 test for test/FeaturedTransferInvariant.t.sol:FeaturedTransferInvariantTest\n[PASS] invariantEveryTokenIsAccountedForAndEveryCreditHasBacking() (runs: 256, calls: 128000, reverts: 0)\n\n╭-------------------------+------------------------+-------+---------+----------╮\n| Contract                | Selector               | Calls | Reverts | Discards |\n+===============================================================================+\n| FeaturedTransferHandler | advanceTime            | 11546 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancel                 | 11611 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancelAsCurrentOwner   | 11850 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | claim                  | 11725 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | deposit                | 11528 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | purchaseAsCurrentOwner | 11566 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | rotateRecipient        | 11577 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | settle                 | 11707 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | toggleCurrentListing   | 11731 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | transferListing        | 11629 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | withdraw               | 11530 | 0       | 0        |\n╰-------------------------+------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 225820091276669328\n  Bound result 1473\n  Bound result 286186293615491085\n  Bound result 127\n  Bound result 1132\n  Bound result 513\n  Bound result 300\n  Bound result 10663\n  Bound result 10\n  Bound result 16384\n  Bound result 5777963\n  Bound result 11525\n  Bound result 29106407970270\n  Bound result 4174\n  Bound result 3603\n  Bound result 546603\n  Bound result 30000\n  Bound result 96\n  Bound result 21928\n  Bound result 290740339967630715\n  Bound result 60\n  Bound result 1734\n  Bound result 50\n  Bound result 4628\n  Bound result 1800000640\n  Bound result 2\n  Bound result 80\n  Bound result 224\n  Bound result 1000000000000000\n  Bound result 86958495256195950\n  Bound result 6067\n  Bound result 60\n  Bound result 197856846657985171\n  Bound result 2253\n  Bound result 7461\n  Bound result 20\n  Bound result 74450\n  Bound result 17179883264\n  Bound result 4663\n  Bound result 777600\n  Bound result 49\n  Bound result 216902278331900524\n  Bound result 3124842406\n  Bound result 155175742021613976\n  Bound result 6121\n  Bound result 1792\n  Bound result 4593\n  Bound result 5675\n  Bound result 11666\n  Bound result 596365\n  Bound result 626814\n  Bound result 1000\n  Bound result 459248\n  Bound result 292539217066958302\n  Bound result 60\n  Bound result 1000000000000\n  Bound result 5816\n  Bound result 5778\n  Bound result 5815\n  Bound result 97401646223869983\n  Bound result 2888439965746893\n  Bound result 160\n  Bound result 76171195136475135\n  Bound result 2298\n  Bound result 5815\n  Bound result 4435177882177099\n  Bound result 589\n  Bound result 1293\n  Bound result 282336338771172\n  Bound result 66\n  Bound result 513\n  Bound result 3000\n  Bound result 1800000950\n  Bound result 8791\n  Bound result 721185\n  Bound result 887\n  Bound result 67667030342320\n  Bound result 181811156528788562\n  Bound result 221365413641812\n  Bound result 28\n  Bound result 115428911151845857\n  Bound result 3111\n  Bound result 552271408445779\n  Bound result 170692264979720\n  Bound result 451162\n  Bound result 777598\n  Bound result 218194765823085490\n  Bound result 167934543576446635\n  Bound result 1\n  Bound result 12209\n  Bound result 604800\n  Bound result 131072\n  Bound result 3600\n  Bound result 11732\n  Bound result 6737048805\n  Bound result 284634302914454324\n  Bound result 27768401830611513\n  Bound result 211956781717557239\n  Bound result 11155111\n  Bound result 73160085728298915\n  Bound result 704507\n  Bound result 448120919896\n  Bound result 11904\n  Bound result 4567\n  Bound result 85824945989354957\n  Bound result 5859\n  Bound result 8150\n  Bound result 7286\n  Bound result 676730\n  Bound result 47\n  Bound result 173067731474971593\n  Bound result 7067\n  Bound result 1931\n  Bound result 97401646223869984\n  Bound result 31337\n  Bound result 2950\n  Bound result 2678400\n  Bound result 160\n  Bound result 32179014592872336\n  Bound result 17805599315575481\n  Bound result 1046363170\n  Bound result 71777214294589695\n  Bound result 80422\n  Bound result 210\n  Bound result 232\n  Bound result 16383\n  Bound result 555710\n  Bound result 12298574002687739\n  Bound result 39690\n  Bound result 4426\n  Bound result 614766\n  Bound result 16\n  Bound result 5822963639046110\n  Bound result 1900\n  Bound result 25426469777782098\n  Bound result 8\n  Bound result 668788\n  Bound result 325980076115820874\n  Bound result 54960701404759629\n  Bound result 204\n  Bound result 1133\n  Bound result 10440\n  Bound result 79086416844147765\n  Bound result 14969617298105570\n  Bound result 10396\n  Bound result 224\n  Bound result 10147\n  Bound result 775530293947618\n  Bound result 237344928932233215\n  Bound result 653906675248\n  Bound result 12014\n  Bound result 10709\n  Bound result 20790441836244229\n  Bound result 3708\n  Bound result 10399\n  Bound result 2048\n  Bound result 2543\n  Bound result 1067\n  Bound result 80\n  Bound result 213845706268122588\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 27.87s (27.87s 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 5806\n  Bound result 3792478064\n  Bound result 133180\n  Bound result 3964\n  Bound result 768\n  Bound result 7602\n  Bound result 100000000000000000\n  Bound result 9516\n  Bound result 30000\n  Bound result 513\n  Bound result 718\n  Bound result 2\n  Bound result 4294967296\n  Bound result 164547\n  Bound result 60000\n  Bound result 4800\n  Bound result 8163\n  Bound result 3903\n  Bound result 311022\n  Bound result 8192\n  Bound result 20313445963564555\n  Bound result 270933325407007564\n  Bound result 212910\n  Bound result 475\n  Bound result 5732421026749205\n  Bound result 704507\n  Bound result 864\n  Bound result 444890\n  Bound result 34182779104782346\n  Bound result 768\n  Bound result 96\n  Bound result 768\n  Bound result 2678400\n  Bound result 87948485967098101\n  Bound result 277511596451062893\n  Bound result 100000000\n  Bound result 59703269592215224\n  Bound result 203680876916964996\n  Bound result 219614629174706175\n  Bound result 92\n  Bound result 194\n  Bound result 22595111\n  Bound result 334\n  Bound result 58926110616494854\n  Bound result 12131030181005122\n  Bound result 3\n  Bound result 1163014\n  Bound result 1017\n  Bound result 97\n  Bound result 300\n  Bound result 1000000\n  Bound result 76192533307274\n  Bound result 6953\n  Bound result 878\n  Bound result 12\n  Bound result 8194\n  Bound result 5062\n  Bound result 4353\n  Bound result 4294967295\n  Bound result 2\n  Bound result 8810\n  Bound result 249111254310977535\n  Bound result 12579738891701\n  Bound result 4248\n  Bound result 16384\n  Bound result 31142208489695643\n  Bound result 8087437039\n  Bound result 216\n  Bound result 4096\n  Bound result 256\n  Bound result 6385\n  Bound result 75644250940394395\n  Bound result 322\n  Bound result 24803788580094971\n  Bound result 5889\n  Bound result 1278139994\n  Bound result 4754\n  Bound result 602942\n  Bound result 23\n  Bound result 17\n  Bound result 376\n  Bound result 27\n  Bound result 200\n  Bound result 208227193805864961\n  Bound result 10000000\n  Bound result 1040\n  Bound result 194\n  Bound result 66\n  Bound result 140000\n  Bound result 66482869645213695\n  Bound result 3\n  Bound result 87\n  Bound result 578\n  Bound result 557097213197225112\n  Bound result 281470681808895\n  Bound result 1293\n  Bound result 256\n  Bound result 298\n  Bound result 604800\n  Bound result 6860\n  Bound result 20000\n  Bound result 225684821632784055\n  Bound result 241502806434351556\n  Bound result 261261919077623822\n  Bound result 146744073706959615\n  Bound result 5036\n  Bound result 1000000000000000\n  Bound result 1000\n  Bound result 127035603870986413\n  Bound result 425326\n  Bound result 677407260246367125\n  Bound result 195000\n  Bound result 1411\n  Bound result 419473722081972676\n  Bound result 4663\n  Bound result 37480633972394692\n  Bound result 133\n  Bound result 1967822688422410\n  Bound result 6848\n  Bound result 5\n  Bound result 7024\n  Bound result 230304381176537400\n  Bound result 2442\n  Bound result 6355\n  Bound result 4573\n  Bound result 144\n  Bound result 7875\n  Bound result 2127478273\n  Bound result 2549\n  Bound result 1897\n  Bound result 7939\n  Bound result 5289\n  Bound result 6528455534648766\n  Bound result 1\n  Bound result 31337\n  Bound result 61\n  Bound result 316964\n  Bound result 47607619846363\n  Bound result 178641230044505105\n  Bound result 220244020267\n  Bound result 26988911824596075\n  Bound result 81990\n  Bound result 9723\n  Bound result 4648\n  Bound result 4278255360\n  Bound result 1056290820\n  Bound result 37480632694259451\n  Bound result 2616\n  Bound result 46630\n  Bound result 64\n  Bound result 4096\n  Bound result 281474976710655\n  Bound result 58\n  Bound result 60000\n  Bound result 154259666207999731\n  Bound result 561440\n  Bound result 59042536387683537\n  Bound result 208394965837152255\n  Bound result 4453\n  Bound result 573\n  Bound result 40000\n  Bound result 586\n  Bound result 543452\n  Bound result 293782792835301375\n  Bound result 4558\n  Bound result 7645\n  Bound result 2352\n  Bound result 12798933743613559\n  Bound result 235483644046268448\n  Bound result 17063904216863518\n  Bound result 40622178291640053\n  Bound result 235483644046268448\n  Bound result 99381694739537618\n  Bound result 6997\n  Bound result 4009\n  Bound result 4840\n  Bound result 8379\n  Bound result 9625\n  Bound result 2352\n  Bound result 53298\n  Bound result 2\n  Bound result 143932\n  Bound result 210351167800083749\n  Bound result 8211398035485594\n  Bound result 2001\n  Bound result 2569\n  Bound result 255444464034512895\n  Bound result 2438\n  Bound result 195000\n  Bound result 645788\n  Bound result 122833728850257\n  Bound result 125169935154903511\n  Bound result 24\n  Bound result 2467\n  Bound result 519224\n  Bound result 50264384819\n  Bound result 31338\n  Bound result 826074472\n  Bound result 239443955085\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 29.90s (29.89s CPU time)\n\nRan 24 test suites in 29.90s (63.06s CPU time): 228 tests passed, 0 failed, 0 skipped (228 total tests)\n","passed":true},{"durationMs":121,"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.closeRevokedReviewReceipt(bytes32)\",\"HookJobRequester.confirmReviewExpiry(bytes32)\",\"HookJobRequester.discardReviewReceipt(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.expireJob(bytes32)\",\"HookJobRequester.expireReview(bytes32)\",\"HookJobRequester.onJobFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onJobResult(bytes32,bytes)\",\"HookJobRequester.onReviewFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onReviewResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"HookJobRequester.openJob(bytes32,bytes,uint256)\",\"HookJobRequester.releaseReservation(bytes32)\",\"HookJobRequester.requestReview(bytes32,uint256)\",\"HookJobRequester.resetReviewBinding(bytes32,bytes32)\",\"HookJobRequester.revokeSignerEpoch(uint32,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\":132,\"dependencies.lock.json\":20,\"docs/AUDIT_1053AF02.md\":106,\"docs/AUDIT_5F43F94D.md\":93,\"docs/AUDIT_6B607200.md\":76,\"docs/AUDIT_D9970905.md\":79,\"docs/AUDIT_EF1F6915.md\":127,\"docs/CHAINS.md\":18,\"docs/DEPENDENCIES.md\":22,\"docs/DEPLOYMENT.md\":69,\"docs/HOOK_SPEC.md\":63,\"docs/IMD_INTEGRATION.md\":356,\"docs/LISTINGS_AND_ADS.md\":214,\"docs/STORE_API.md\":101,\"docs/THREAT_MODEL.md\":71,\"docs/VERIFICATION.md\":364,\"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/HookJobRequester.abi.json\":2732,\"site/index.html\":193,\"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\":981,\"src/imd/IIntake.sol\":27,\"src/imd/OracleAttestation.sol\":230,\"src/interfaces/IHooksStore.sol\":36,\"src/store/ExactStoreToken.sol\":48,\"src/store/FeaturedPlacements.sol\":270,\"src/store/HookListingRegistry.sol\":217,\"src/store/StoreAdmin.sol\":46,\"src/vendor/openzeppelin/LICENSE\":22,\"src/vendor/openzeppelin/interfaces/IERC1271.sol\":17,\"src/vendor/openzeppelin/interfaces/IERC5267.sol\":28,\"src/vendor/openzeppelin/interfaces/IERC7913.sol\":18,\"src/vendor/openzeppelin/utils/Bytes.sol\":247,\"src/vendor/openzeppelin/utils/Panic.sol\":57,\"src/vendor/openzeppelin/utils/ShortStrings.sol\":122,\"src/vendor/openzeppelin/utils/StorageSlot.sol\":143,\"src/vendor/openzeppelin/utils/Strings.sol\":515,\"src/vendor/openzeppelin/utils/cryptography/ECDSA.sol\":285,\"src/vendor/openzeppelin/utils/cryptography/EIP712.sol\":160,\"src/vendor/openzeppelin/utils/cryptography/MessageHashUtils.sol\":100,\"src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol\":162,\"src/vendor/openzeppelin/utils/math/Math.sol\":758,\"src/vendor/openzeppelin/utils/math/SafeCast.sol\":1162,\"src/vendor/openzeppelin/utils/math/SignedMath.sol\":68,\"test/AuditExpiryProof.t.sol\":168,\"test/AuditFixes.t.sol\":192,\"test/AuditReceiptConflictProof.t.sol\":197,\"test/DeployHookJobRequester.t.sol\":104,\"test/Deployment.t.sol\":329,\"test/FeaturedAdversarial.t.sol\":151,\"test/FeaturedInvariant.t.sol\":186,\"test/FeaturedPlacements.t.sol\":443,\"test/FeaturedTransfer.t.sol\":120,\"test/FeaturedTransferInvariant.t.sol\":80,\"test/HookIntegration.t.sol\":294,\"test/HookJobRequester.t.sol\":771,\"test/HookListingRegistry.t.sol\":265,\"test/OracleConformance.t.sol\":135,\"test/OracleSigner.t.sol\":125,\"test/RequesterMvpAudit.t.sol\":508,\"test/ReviewAuditRegression.t.sol\":295,\"test/ReviewBinding.t.sol\":358,\"test/ReviewDelivery.t.sol\":496,\"test/ReviewReceiptGas.t.sol\":284,\"test/ReviewReceiptPacking.t.sol\":99,\"test/ReviewRecovery.t.sol\":341,\"test/helpers/Fixture.sol\":46,\"test/helpers/ImdTemplates.sol\":19,\"test/helpers/MockIntake.sol\":117,\"test/helpers/PoolRouter.sol\":76,\"test/helpers/ReceiptSigners.sol\":75,\"test/helpers/StoreFixture.sol\":81,\"test/helpers/StoreTokenMock.sol\":82,\"test/helpers/TestToken.sol\":13,\"test/listings-reader.test.cjs\":97,\"test/requester-abi.test.cjs\":79,\"test/test_store_sdk.py\":193},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4943,"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:378: Reentrancy in HookJobRequester.requestReview(bytes32,uint256) (src/imd/HookJobRequester.sol#378-406):\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:932: HookJobRequester._validateBrief(bytes).cp (src/imd/HookJobRequester.sol#932) is a local variable never initialized\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:931: HookJobRequester._validateBrief(bytes).len (src/imd/HookJobRequester.sol#931) is a local variable never initialized\n[medium/medium] unused-return at src/store/FeaturedPlacements.sol:104: FeaturedPlacements.configureToken(address) (src/store/FeaturedPlacements.sol#104-113) ignores return value by ExactStoreToken.balance(token,address(this)) (src/store/FeaturedPlacements.sol#110)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:44: SignatureChecker.isValidSignatureNowCalldata(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#44-55) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#50)\n[medium/medium] unused-return at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(digest,signature) (src/imd/OracleAttestation.sol#169)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:32: SignatureChecker.isValidSignatureNow(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#32-39) ignores return value by (recovered,err,None) = ECDSA.tryRecover(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#34)\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:300: Reentrancy in HookJobRequester.openJob(bytes32,bytes,uint256) (src/imd/HookJobRequester.sol#300-322):\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:378: Reentrancy in HookJobRequester.requestReview(bytes32,uint256) (src/imd/HookJobRequester.sol#378-406):\n[low/medium] timestamp at src/imd/HookJobRequester.sol:729: HookJobRequester.confirmReviewExpiry(bytes32) (src/imd/HookJobRequester.sol#729-741) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:360: HookJobRequester.expireJob(bytes32) (src/imd/HookJobRequester.sol#360-368) 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:709: HookJobRequester.expireReview(bytes32) (src/imd/HookJobRequester.sol#709-722) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:145: FeaturedPlacements.purchase(uint256,uint256,address,uint256) (src/store/FeaturedPlacements.sol#145-173) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) uses timestamp for comparisons\n[low/medium] timestamp at src/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":940,"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:310: 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:424: Centralization Risk (19 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:663: Literal Instead of Constant (223 places)\n[low] local-variable-shadowing at src/imd/HookJobRequester.sol:68: Local Variable Shadows State Variable (2 places)\n[low] non-reentrant-not-first at src/imd/HookJobRequester.sol:791: `nonReentrant` is Not the First Modifier (4 places)\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-change-without-event at src/imd/HookJobRequester.sol:870: State Change Without Event\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:961: 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":"c9d2719879f9361941d014e93196c5296bd810fccee138a6c68193c125ad1984","verifiedTreeHash":"fa41ca11d3690ae8914239d9576f99bf7560471b","verifierVersion":"0.1.0+d952fceb"}]}