{"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":"67d28d4d-842c-4095-a993-2ff9baa96b29","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"46f511e92a6e5348bb74426cd6d8f32bd03ea814f240312161f8398b413aff19","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"}],"objective":"now try to launch the token with the 5% tax going to 0xCAE0B01E56cB164ce866A137d3528658b2FCBd4b\n\nToken name: Democratizing Collectable Acquisions\n\nToken symbol: DCA\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\n\npaired with FWA","parentJobId":"8f5e6ffd-223c-483c-aca6-cc654748380d","planHash":"da8f78ce321a17c7bfb0a6c17847b0cdfffba2c6cb9d37a1f6bc42f888270a06","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"6e8264fd-0574-4350-8fb0-9058496d00f3","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1464-democratizing-collectable-acquisions"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52370","feedbackHash":"ccc49540394c3df316b59ade3c45baf08176e114da69499beda0361254e1f4ab","nodeKey":"build_contract_project","submissionHash":"46f511e92a6e5348bb74426cd6d8f32bd03ea814f240312161f8398b413aff19","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"b588d0ce0972f4d8ea8002ec7ce5f4d70760df57e54ad6378ad5b51a7644797b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"160c053b92a9c1a6e1d8d76c2c3b95ca3f8bd130d6a7db9946cf9b2e0c408888","device":"df98a348cb33e978","findings":[],"hash":"46f511e92a6e5348bb74426cd6d8f32bd03ea814f240312161f8398b413aff19","nodeId":"f84b0515-406b-4d17-bfa2-cf42a93ab068","outcome":"completed","summary":"Implemented atomic launch activation and preflight tooling for DCA/FWA, preserving the fixed 5% FWA fee payable to `0xCAE0B01E56cB164ce866A137d3528658b2FCBd4b`.\n\n`forge build`, all 146 tests, and `forge fmt --check` pass. Deployment parameters and operator responsibilities are documented.\n\nNo on-chain transactions were sent. Owner activation, liquidity funding, and routing to the hooked pool remain required.","treeHash":"037c7c2a0ef34c4b888d854f0d0ebdbff61fe967","usage":{"cachedInputTokens":1643008,"inputTokens":108999,"model":"gpt-6-astra","outputTokens":20829,"runtime":"codex","turns":6,"wallClockMs":526382}}],"verification":[{"checks":[{"durationMs":5720,"exitCode":0,"name":"build","output":"Compiling 96 files with Solc 0.8.26\nSolc 0.8.26 finished in 5.56s\nCompiler run successful!\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:106:30\n    │\n106 │                 ? feeOnGross(uint256(-params.amountSpecified))\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:107:28\n    │\n107 │                 : feeOnNet(uint256(params.amountSpecified));\n    │                            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:132:36\n    │\n132 │             fee = buy ? feeOnGross(uint256(-params.amountSpecified)) : feeOnNet(uint256(params.amountSpecified));\n    │                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:132:81\n    │\n132 │             fee = buy ? feeOnGross(uint256(-params.amountSpecified)) : feeOnNet(uint256(params.amountSpecified));\n    │                                                                                 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:134:54\n    │\n134 │             if (fwaDelta != params.amountSpecified + int256(fee)) revert PartialFill();\n    │                                                      ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:135:27\n    │\n135 │             gross = buy ? uint256(-params.amountSpecified) : uint256(fwaDelta);\n    │                           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:135:62\n    │\n135 │             gross = buy ? uint256(-params.amountSpecified) : uint256(fwaDelta);\n    │                                                              ━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:137:27\n    │\n137 │             uint256 net = uint256(-fwaDelta);\n    │                           ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/DCAHook.sol:141:21\n    │\n141 │             gross = uint256(fwaDelta);\n    │                     ━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-no-eth]: external call can be reentered before `_status` is updated\n    ╭▸ src/DCAHook.sol:182:9\n    │\n182 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/DCAHook.sol:182:9\n    │\n182 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/DCAHookLauncher.sol:114:9\n    │\n114 │         emit PoolLaunched(address(deployed), deployed.poolId(), salt, sqrtPriceX96);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/DCAHookLauncher.sol:113:9\n    │\n113 │         poolManager.initialize(deployed.getPoolKey(), sqrtPriceX96);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\n","passed":true},{"durationMs":7950,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/DCATokenEdges.t.sol:DCATokenEdgesTest\n[PASS] test_ApprovalReplacementRevocationAndReapprovalAreEffectiveImmediately() (gas: 332874)\n[PASS] test_Uint256MaxTransfersFailWithoutChangingBalancesOrInfiniteAllowance() (gas: 209044)\n[PASS] test_WholeSupplyTransferFromSelfConsumesAllowanceWithoutChangingBalance() (gas: 273579)\n[PASS] test_ZeroAddressesCannotBeApprovedOrUsedAsMintBurnPathsEvenForZeroAmount() (gas: 125073)\n[PASS] test_ZeroTransfersFromEmptyWalletEmitEventsWithoutApprovalOrTax() (gas: 135267)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 4.20ms (1.00ms CPU time)\n\nRan 22 tests for test/DCAHookLauncher.t.sol:DCAHookLauncherTest\n[PASS] test_AtomicActivationCannotReplaceLaunchedHook() (gas: 1742503)\n[PASS] test_AtomicActivationCommitsToTokenDespiteEarlierConfiguration() (gas: 1678123)\n[PASS] test_AtomicActivationFailureRestoresPriorSettingAndCanRetry() (gas: 2934572)\n[PASS] test_AtomicActivationStartsUnconfiguredAndMintsNothing() (gas: 1741109)\n[PASS] test_AtomicActivationUnauthorizedOrMissingCodeLeavesTokenUnset() (gas: 112414)\n[PASS] test_ConstructorRejectsMissingOwnerOrManager() (gas: 64799)\n[PASS] test_ConstructorWorksOnEmptyChainWithExplicitOwner() (gas: 60230)\n[PASS] test_DeploymentAndInitializationAreAtomicAndLeaveExistingSupplyUntouched() (gas: 1821527)\n[PASS] test_ExhaustedPreparationDoesNotChangeConfiguration() (gas: 100018)\n[PASS] test_ExplicitTokenHashRejectsInvalidTokenWithoutChangingConfiguration() (gas: 51837)\n[PASS] test_FrontRunnerCannotUsePublishedSaltOrChooseOpeningPrice() (gas: 1741533)\n[PASS] test_InvalidPriceRollsBackChildAndPoolThenSameSaltCanRetry() (gas: 2941398)\n[PASS] test_InvalidSaltRevertsWithoutDisablingRetry() (gas: 1828597)\n[PASS] test_InvalidTokenConfigurationLeavesItUnset() (gas: 117980)\n[PASS] test_LaunchAndTokenConfigurationCannotRepeatAfterSuccess() (gas: 1763003)\n[PASS] test_MissingManagerFailsAtFirstUseWithoutDeployingChild() (gas: 124695)\n[PASS] test_MissingTokenFailsAtFirstUseAndConfigurationCanBeFixed() (gas: 1771137)\n[PASS] test_OnlyRequesterCanConfigureOrLaunchNotEvenDeployingFactory() (gas: 172721)\n[PASS] test_OrdinaryFactoryDeploysLauncherWithoutHookAddressConstraint() (gas: 50556)\n[PASS] test_PreexistingUnhookedPoolIsDistinctAndDoesNotGainAFee() (gas: 1777214)\n[PASS] test_TokenMayBeCorrectedBeforeLaunchAndNewHashIsUsed() (gas: 1765317)\n[PASS] test_UnconfiguredLauncherCannotPrepareOrLaunch() (gas: 84189)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 5.48ms (24.04ms CPU time)\n\nRan 12 tests for test/DCAHookEdges.t.sol:DCAHookEdgesFwa0Test\n[PASS] testFuzz_GrossFeeHasBoundedRemainderOverEntireUint256Domain(uint256) (runs: 1000, μ: 9822, ~: 9822)\n[PASS] testFuzz_NetInversionIsExactAndMinimalThroughSignedBoundary(uint256) (runs: 1000, μ: 29682, ~: 29471)\nLogs:\n  Bound result 9500\n\n[PASS] testFuzz_SenderAndHookDataCannotChangeFixedBuyFee(address,bytes) (runs: 1000, μ: 38981, ~: 38979)\n[PASS] test_AfterSwapRejectsWrongFwaSignsForAllFourModes() (gas: 150159)\n[PASS] test_AllInvalidAmountEdgesRejectedByBothCallbacks() (gas: 850921)\n[PASS] test_BeforeSwapAcceptsSignedEdgesWithoutNarrowingOrPoolFeeOverride() (gas: 50529)\n[PASS] test_FailedSecondSwapRollsBackFirstSwapAndItsFees() (gas: 629964)\n[PASS] test_FeeRoundingPinnedBoundaries() (gas: 144932)\n[PASS] test_FwaClaimIgnoresUnrelatedCurrencyClaims() (gas: 357722)\n[PASS] test_InitializedTickCrossingChargesFwaAndPreservesPoolFees() (gas: 1679914)\n[PASS] test_LargestRepresentableNetAcceptedAndNextWeiRejected() (gas: 33983)\n[PASS] test_RemovingAllLiquidityCannotConsumeAccruedFees() (gas: 773074)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 33.55ms (47.10ms CPU time)\n\nRan 13 tests for test/PrepareLaunch.t.sol:PrepareLaunchTest\n[PASS] test_ExhaustedSearchLeavesLauncherUnconfigured() (gas: 79965)\n[PASS] test_PreparationDoesNotDependOnCallerAndSignedTokenOverridesStaleSetting() (gas: 6388022)\n[PASS] test_PreparationIsReadOnlyAndReturnsExecutableOwnerTransaction() (gas: 3924445)\n[PASS] test_PreparationRejectsActivatedLauncher() (gas: 3834891)\n[PASS] test_PreparationRejectsIncompatibleFwaAndRevokedDistributor() (gas: 219947)\n[PASS] test_PreparationRejectsInvalidPriceBounds() (gas: 80165)\n[PASS] test_PreparationRejectsMissingContracts() (gas: 158425)\n[PASS] test_PreparationRejectsNoncanonicalManager() (gas: 27905)\n[PASS] test_PreparationRejectsOccupiedHookAddress() (gas: 5053126)\n[PASS] test_PreparationRejectsWrongChain() (gas: 20407)\n[PASS] test_PreparationRejectsWrongOwnerIncludingFactory() (gas: 47624)\n[PASS] test_PreparationRejectsWrongTokenMetadataAndSupply() (gas: 185054)\n[PASS] test_PreparedActivationBuySellAndPayoutForBothTokenOrderings() (gas: 26978377)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 53.94ms (67.47ms CPU time)\n\nRan 7 tests for test/DCAToken.t.sol:DCATokenTest\n[PASS] testFuzz_WalletTransfersAreUntaxed(uint256) (runs: 256, μ: 151550, ~: 151664)\nLogs:\n  Bound result 500000000000000000000000\n\n[PASS] test_ApprovalTransferFromAndInfiniteApproval() (gas: 285319)\n[PASS] test_FactoryReceivesSupplyAndLaunchAllocationsArriveWhole() (gas: 504856)\n[PASS] test_InsufficientBalanceAndAllowanceRevert() (gas: 124739)\n[PASS] test_MetadataAndEntireSupplyMintedOnce() (gas: 64311)\n[PASS] test_NoMintPauseBlacklistSeizeOrUpgradePowers() (gas: 619116)\n[PASS] test_ZeroRecipientRevertsAndSelfTransferPreservesBalance() (gas: 72110)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 54.02ms (6.43ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_InvalidConstructorArgumentsRevert() (gas: 5417)\n[PASS] test_NoExternalCallsEvenIfTokenIsNotYetDeployed() (gas: 4010203)\n[PASS] test_PreparationDeploysExactPredictedAddressOnEmptyChain() (gas: 101759257)\n[PASS] test_PreparationRejectsMissingAddressesAndExhaustedSearch() (gas: 1757298)\n[PASS] test_WrongHookAddressBitsAreRejected() (gas: 251808)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 59.56ms (64.03ms CPU time)\n\nRan 12 tests for test/DCAHookEdges.t.sol:DCAHookEdgesFwa1Test\n[PASS] testFuzz_GrossFeeHasBoundedRemainderOverEntireUint256Domain(uint256) (runs: 1000, μ: 9822, ~: 9822)\n[PASS] testFuzz_NetInversionIsExactAndMinimalThroughSignedBoundary(uint256) (runs: 1000, μ: 29680, ~: 29471)\nLogs:\n  Bound result 41757224591333868563679011587273174535\n\n[PASS] testFuzz_SenderAndHookDataCannotChangeFixedBuyFee(address,bytes) (runs: 1000, μ: 38992, ~: 38990)\n[PASS] test_AfterSwapRejectsWrongFwaSignsForAllFourModes() (gas: 150283)\n[PASS] test_AllInvalidAmountEdgesRejectedByBothCallbacks() (gas: 850921)\n[PASS] test_BeforeSwapAcceptsSignedEdgesWithoutNarrowingOrPoolFeeOverride() (gas: 50529)\n[PASS] test_FailedSecondSwapRollsBackFirstSwapAndItsFees() (gas: 617223)\n[PASS] test_FeeRoundingPinnedBoundaries() (gas: 144932)\n[PASS] test_FwaClaimIgnoresUnrelatedCurrencyClaims() (gas: 357722)\n[PASS] test_InitializedTickCrossingChargesFwaAndPreservesPoolFees() (gas: 1677103)\n[PASS] test_LargestRepresentableNetAcceptedAndNextWeiRejected() (gas: 33983)\n[PASS] test_RemovingAllLiquidityCannotConsumeAccruedFees() (gas: 767349)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 60.54ms (35.20ms CPU time)\n\nRan 31 tests for test/DCAHook.t.sol:DCAHookFwaCurrency0Test\n[PASS] testFuzz_FeeConservationAcrossSwapModes(bool,bool,uint256) (runs: 256, μ: 524474, ~: 526259)\nLogs:\n  Bound result 13917\n\n[PASS] testFuzz_RoundingInverseIsMinimalAndExactlyFivePercent(uint256) (runs: 256, μ: 13901, ~: 13675)\nLogs:\n  Bound result 17137418026084557699727149069267733\n\n[PASS] test_BatchedSwapsCollectOncePerSwapAndSettle() (gas: 357149)\n[PASS] test_BuyExactInputChargesFivePercentOfFwaPaidIn() (gas: 525791)\n[PASS] test_BuyExactOutputIncludesFeeInTotalFwaPaid() (gas: 523417)\n[PASS] test_CallbackFromManagerWithoutClaimReverts() (gas: 36787)\n[PASS] test_ClaimBeforeFeesIsNoop() (gas: 37441)\n[PASS] test_ClaimIncludesDonatedFwaClaims() (gas: 350672)\n[PASS] test_ClaimInsideAnExistingUnlockRevertsWithoutLosingFees() (gas: 355760)\n[PASS] test_ClaimsAboveSignedDeltaLimitRemainClaimableInChunks() (gas: 406496)\n[PASS] test_ClaimsCannotBeStolenByAnOperatorOrAllowance() (gas: 257127)\n[PASS] test_DirectCallbacksRequireManager() (gas: 101436)\n[PASS] test_DustBuyRoundsFeeDown() (gas: 346307)\n[PASS] test_FailedPayoutPreservesAllClaimsAndCanRetry() (gas: 460327)\n[PASS] test_FeeAndRecipientCannotBeChanged() (gas: 190882)\n[PASS] test_FwaMockRejectsOrdinaryTransferButClaimSucceeds() (gas: 367254)\n[PASS] test_InitializationCannotBeFrontRun() (gas: 49536)\n[PASS] test_LiquidityHasNoHookFeeAndCanBeRemoved() (gas: 152484)\n[PASS] test_PartialExactInputBuyRevertsAndRollsBack() (gas: 168129)\n[PASS] test_PartialExactInputSellOnlyTaxesActualFwaOutput() (gas: 209754)\n[PASS] test_PartialExactOutputBuyOnlyTaxesActualFwaInput() (gas: 202712)\n[PASS] test_PartialExactOutputSellRevertsAndRollsBack() (gas: 120268)\n[PASS] test_PayoutReentrancyCannotClaimTwice() (gas: 397513)\n[PASS] test_PermissionlessClaimPaysOnlyFixedRecipientAndRepeatIsNoop() (gas: 794501)\n[PASS] test_PermissionsMatchActualMinedAddress() (gas: 34997)\n[PASS] test_RejectsOtherFeeTickSpacingCurrencyAndHook() (gas: 189810)\n[PASS] test_RejectsZeroAndOutOfRangeAmounts() (gas: 115344)\n[PASS] test_SellExactInputChargesFivePercentOfGrossFwaOutput() (gas: 516348)\n[PASS] test_SellExactOutputReceivesRequestedNetFwa() (gas: 518381)\n[PASS] test_SingleSidedLaunchSeedsWithoutFwaAndFirstBuyCanFundItsFee() (gas: 1000482)\n[PASS] test_SwapCallbacksRejectDifferentPoolEvenFromManager() (gas: 57558)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 72.59ms (52.72ms CPU time)\n\nRan 31 tests for test/DCAHook.t.sol:DCAHookFwaCurrency1Test\n[PASS] testFuzz_FeeConservationAcrossSwapModes(bool,bool,uint256) (runs: 256, μ: 524259, ~: 517855)\nLogs:\n  Bound result 665913998983776152246\n\n[PASS] testFuzz_RoundingInverseIsMinimalAndExactlyFivePercent(uint256) (runs: 256, μ: 13885, ~: 13675)\nLogs:\n  Bound result 17137418026084557699727149069267733\n\n[PASS] test_BatchedSwapsCollectOncePerSwapAndSettle() (gas: 351448)\n[PASS] test_BuyExactInputChargesFivePercentOfFwaPaidIn() (gas: 513249)\n[PASS] test_BuyExactOutputIncludesFeeInTotalFwaPaid() (gas: 513485)\n[PASS] test_CallbackFromManagerWithoutClaimReverts() (gas: 36787)\n[PASS] test_ClaimBeforeFeesIsNoop() (gas: 37441)\n[PASS] test_ClaimIncludesDonatedFwaClaims() (gas: 344370)\n[PASS] test_ClaimInsideAnExistingUnlockRevertsWithoutLosingFees() (gas: 349458)\n[PASS] test_ClaimsAboveSignedDeltaLimitRemainClaimableInChunks() (gas: 406496)\n[PASS] test_ClaimsCannotBeStolenByAnOperatorOrAllowance() (gas: 250825)\n[PASS] test_DirectCallbacksRequireManager() (gas: 101627)\n[PASS] test_DustBuyRoundsFeeDown() (gas: 339135)\n[PASS] test_FailedPayoutPreservesAllClaimsAndCanRetry() (gas: 454025)\n[PASS] test_FeeAndRecipientCannotBeChanged() (gas: 190882)\n[PASS] test_FwaMockRejectsOrdinaryTransferButClaimSucceeds() (gas: 360952)\n[PASS] test_InitializationCannotBeFrontRun() (gas: 49536)\n[PASS] test_LiquidityHasNoHookFeeAndCanBeRemoved() (gas: 152484)\n[PASS] test_PartialExactInputBuyRevertsAndRollsBack() (gas: 161993)\n[PASS] test_PartialExactInputSellOnlyTaxesActualFwaOutput() (gas: 215811)\n[PASS] test_PartialExactOutputBuyOnlyTaxesActualFwaInput() (gas: 196865)\n[PASS] test_PartialExactOutputSellRevertsAndRollsBack() (gas: 126282)\n[PASS] test_PayoutReentrancyCannotClaimTwice() (gas: 391211)\n[PASS] test_PermissionlessClaimPaysOnlyFixedRecipientAndRepeatIsNoop() (gas: 788207)\n[PASS] test_PermissionsMatchActualMinedAddress() (gas: 34997)\n[PASS] test_RejectsOtherFeeTickSpacingCurrencyAndHook() (gas: 189810)\n[PASS] test_RejectsZeroAndOutOfRangeAmounts() (gas: 115377)\n[PASS] test_SellExactInputChargesFivePercentOfGrossFwaOutput() (gas: 529078)\n[PASS] test_SellExactOutputReceivesRequestedNetFwa() (gas: 528501)\n[PASS] test_SingleSidedLaunchSeedsWithoutFwaAndFirstBuyCanFundItsFee() (gas: 988089)\n[PASS] test_SwapCallbacksRejectDifferentPoolEvenFromManager() (gas: 57749)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 74.33ms (47.70ms CPU time)\n\nRan 1 test for test/DCAInvariant.t.sol:DCAInvariantFwa1Test\n[PASS]\nDCAInvariantFwa1Test invariants:\n[PASS] invariant_ConservationOfBothTokensAndFixedSupply\n[PASS] invariant_FeeClaimsPlusPayoutsEqualAllAccruedFees\n[PASS] invariant_TransientAccountingAlwaysSettled\n DCAInvariantFwa1Test invariants (runs: 128, calls: 4096, reverts: 0)\n\n╭------------+----------+-------+---------+----------╮\n| Contract   | Selector | Calls | Reverts | Discards |\n+====================================================+\n| FeeHandler | claim    | 2090  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| FeeHandler | swap     | 2006  | 0       | 0        |\n╰------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 5515\n  Bound result 100\n  Bound result 3151\n  Bound result 39444537967083742651\n  Bound result 58283690573123064500\n  Bound result 67504050446251365724\n  Bound result 2872\n  Bound result 59242904454869762829\n  Bound result 20000000000000000000\n  Bound result 719206529\n  Bound result 5700\n  Bound result 100000000000000000000\n  Bound result 22\n  Bound result 8453\n  Bound result 14706\n  Bound result 41\n  Bound result 1599\n  Bound result 23\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.05s (994.50ms CPU time)\n\nRan 1 test for test/DCAInvariant.t.sol:DCAInvariantFwa0Test\n[PASS]\nDCAInvariantFwa0Test invariants:\n[PASS] invariant_ConservationOfBothTokensAndFixedSupply\n[PASS] invariant_FeeClaimsPlusPayoutsEqualAllAccruedFees\n[PASS] invariant_TransientAccountingAlwaysSettled\n DCAInvariantFwa0Test invariants (runs: 128, calls: 4096, reverts: 0)\n\n╭------------+----------+-------+---------+----------╮\n| Contract   | Selector | Calls | Reverts | Discards |\n+====================================================+\n| FeeHandler | claim    | 2090  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| FeeHandler | swap     | 2006  | 0       | 0        |\n╰------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 64014128573373259750\n  Bound result 100\n  Bound result 4260\n  Bound result 54585948937939949200\n  Bound result 17173\n  Bound result 67504050446251365724\n  Bound result 2830\n  Bound result 59242904454869762829\n  Bound result 20000000000000000000\n  Bound result 949\n  Bound result 5700\n  Bound result 100000000000000000000\n  Bound result 22\n  Bound result 8453\n  Bound result 82679654956163107917\n  Bound result 41\n  Bound result 554\n  Bound result 23\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.12s (1.10s CPU time)\n\nRan 2 tests for test/DCATokenStateful.t.sol:DCATokenStatefulTest\n[PASS]\nDCATokenStatefulTest invariants:\n[PASS] invariant_AllowancesMatchApprovalsAndSuccessfulSpendsOnly\n[PASS] invariant_BalancesMatchIndependentLedgerAndEntireSupply\n DCATokenStatefulTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------+----------------------+-------+---------+----------╮\n| Contract         | Selector             | Calls | Reverts | Discards |\n+======================================================================+\n| DCALedgerHandler | approve              | 2338  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | invalidReceiver      | 2355  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | overdraw             | 2312  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | overdrawWithApproval | 2394  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | overspendAllowance   | 2282  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | transfer             | 2347  | 0       | 0        |\n|------------------+----------------------+-------+---------+----------|\n| DCALedgerHandler | transferFrom         | 2356  | 0       | 0        |\n╰------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2514000705\n  Bound result 228162514264337593543950257\n  Bound result 10\n  Bound result 0\n  Bound result 7936\n  Bound result 62\n  Bound result 908493845757971876823882824\n  Bound result 157198260\n  Bound result 9500\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1889567280\n  Bound result 0\n  Bound result 6207\n  Bound result 12500\n  Bound result 15506813649907700097412879\n  Bound result 77430773030694059456274559\n  Bound result 508\n  Bound result 1000000000000000000000000\n  Bound result 3430529687872698205123728\n  Bound result 50000000000000000000\n  Bound result 157198261\n  Bound result 500000000000000000000000\n  Bound result 76198330406905842271736512\n  Bound result 244\n  Bound result 50000000000000000000\n  Bound result 5006\n  Bound result 211801474\n  Bound result 3676\n  Bound result 120\n  Bound result 24420035680699091542058751\n  Bound result 10000000000000000000000000\n  Bound result 77430773030694059456282495\n  Bound result 3430579687872698205120052\n  Bound result 908493795757971876666694456\n\n[PASS] test_LedgerExercisesFullSupplySelfTransfersAndFailureRecovery() (gas: 1385456)\nLogs:\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.49s (3.49s CPU time)\n\nRan 2 tests for test/DCAHookStateful.t.sol:DCAHookStatefulFwa1Test\n[PASS]\nDCAHookStatefulFwa1Test invariants:\n[PASS] invariant_AllAccruedFwaRemainsBackedAndBelongsOnlyToRecipient\n[PASS] invariant_BothTokensConservedAcrossAllActors\n[PASS] invariant_ManagerIsLockedWithoutUnsettledDebts\n[PASS] invariant_PriceLiquidityAndMandatoryPoolFeesMatchControl\n DCAHookStatefulFwa1Test invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------+---------------------+-------+---------+----------╮\n| Contract             | Selector            | Calls | Reverts | Discards |\n+=========================================================================+\n| DCAAccountingHandler | changeLiquidity     | 2019  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | claim               | 2037  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | donate              | 2044  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | dustSwap            | 2048  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | rejectedPartialFill | 2058  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | rejectedPayout      | 2046  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | roundTrip           | 2086  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | swap                | 2046  | 0       | 0        |\n╰----------------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 31\n  Bound result 6881\n  Bound result 1500000000000000000012501\n  Bound result 10\n  Bound result 1843686788068823958613997\n  Bound result 999999999999999999501\n  Bound result 1744951077345383950706706\n  Bound result 1500070000000000000000001\n  Bound result 901356971870550869176\n  Bound result 1231731687190288428465416\n  Bound result 24\n  Bound result 581\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 1500000000000000000003000\n  Bound result 1\n  Bound result 20\n  Bound result 1\n  Bound result 99999999999999999999\n  Bound result 18131\n  Bound result 1500000000000000000003906\n  Bound result 35465020982882537784\n  Bound result 27\n  Bound result 1500100000000000000000001\n  Bound result 1500000000000000000000006\n  Bound result 2203988822374428841602\n  Bound result 999999999999999999089\n  Bound result 3016\n  Bound result 1500008378323240621719515\n  Bound result 999999999999999999998\n  Bound result 546542693468410007103\n  Bound result 1140\n  Bound result 1500005000000000000000001\n  Bound result 517440284\n  Bound result 1228546009199912108161556\n  Bound result 1500000000000003096779450\n  Bound result 1500950000000000000000000\n\n[PASS] test_AllHandlerPathsAndSwapModesReachMeaningfulStates() (gas: 3250845)\nLogs:\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 1\n  Bound result 17000000000000000000\n  Bound result 500000000000000000000000\n  Bound result 100000000000000000000\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.73s (7.69s CPU time)\n\nRan 2 tests for test/DCAHookStateful.t.sol:DCAHookStatefulFwa0Test\n[PASS]\nDCAHookStatefulFwa0Test invariants:\n[PASS] invariant_AllAccruedFwaRemainsBackedAndBelongsOnlyToRecipient\n[PASS] invariant_BothTokensConservedAcrossAllActors\n[PASS] invariant_ManagerIsLockedWithoutUnsettledDebts\n[PASS] invariant_PriceLiquidityAndMandatoryPoolFeesMatchControl\n DCAHookStatefulFwa0Test invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------+---------------------+-------+---------+----------╮\n| Contract             | Selector            | Calls | Reverts | Discards |\n+=========================================================================+\n| DCAAccountingHandler | changeLiquidity     | 2019  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | claim               | 2037  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | donate              | 2044  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | dustSwap            | 2048  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | rejectedPartialFill | 2058  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | rejectedPayout      | 2046  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | roundTrip           | 2086  | 0       | 0        |\n|----------------------+---------------------+-------+---------+----------|\n| DCAAccountingHandler | swap                | 2046  | 0       | 0        |\n╰----------------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 39\n  Bound result 14086\n  Bound result 1500000000000000000012501\n  Bound result 10\n  Bound result 1843686788068823958613997\n  Bound result 999999999999999999501\n  Bound result 1744951077345383950706706\n  Bound result 1500070000000000000000001\n  Bound result 901356971870550869176\n  Bound result 1231731687190288428465416\n  Bound result 25\n  Bound result 1287\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 1500000000000003145160892\n  Bound result 1\n  Bound result 20\n  Bound result 1\n  Bound result 4127043349\n  Bound result 464439465917678392869\n  Bound result 1500000000000000000004385\n  Bound result 35465020982882537784\n  Bound result 29\n  Bound result 1500100000000000000000001\n  Bound result 1500000000000000000000006\n  Bound result 13398\n  Bound result 999999999999999999089\n  Bound result 4135\n  Bound result 1500008378323240621719515\n  Bound result 999999999999999999998\n  Bound result 546542693468410007103\n  Bound result 1138\n  Bound result 1500005000000000000000001\n  Bound result 10136\n  Bound result 1228546009199912108161556\n  Bound result 1500000000000000000005758\n  Bound result 1500950000000000000000000\n\n[PASS] test_AllHandlerPathsAndSwapModesReachMeaningfulStates() (gas: 3257819)\nLogs:\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 10000000000000000000000\n  Bound result 1\n  Bound result 17000000000000000000\n  Bound result 500000000000000000000000\n  Bound result 100000000000000000000\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.82s (7.80s CPU time)\n\nRan 14 test suites in 7.82s (21.63s CPU time): 146 tests passed, 0 failed, 0 skipped (146 total tests)\n","passed":true},{"durationMs":84,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"DCAHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"DCAHook.claimFees()\",\"DCAHook.unlockCallback(bytes)\",\"DCAHookLauncher.launch(bytes32,uint160)\",\"DCAHookLauncher.launchWithToken(address,bytes32,uint160)\",\"DCAHookLauncher.setToken(address)\",\"DCAToken.approve(address,uint256)\",\"DCAToken.transfer(address,uint256)\",\"DCAToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":130,\"README.md\":153,\"SECURITY.md\":51,\"foundry.toml\":19,\"remappings.txt\":4,\"script/PrepareHook.s.sol\":31,\"script/PrepareLaunch.s.sol\":107,\"src/DCAHook.sol\":208,\"src/DCAHookLauncher.sol\":123,\"src/DCAToken.sol\":14,\"src/HookMiner.sol\":21,\"test/ADVERSARIAL_TESTS.md\":44,\"test/DCAHook.t.sol\":391,\"test/DCAHookEdges.t.sol\":225,\"test/DCAHookLauncher.t.sol\":367,\"test/DCAHookStateful.t.sol\":317,\"test/DCAInvariant.t.sol\":113,\"test/DCAToken.t.sol\":126,\"test/DCATokenEdges.t.sol\":110,\"test/DCATokenStateful.t.sol\":172,\"test/Deployment.t.sol\":98,\"test/PrepareLaunch.t.sol\":282,\"test/helpers/HookTestBase.sol\":103,\"test/helpers/PoolRouter.sol\":112,\"test/helpers/RestrictedFWA.sol\":43},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1080,"exitCode":0,"name":"slither","output":"[medium/medium] unused-return at src/DCAHook.sol:176: DCAHook.claimFees() (src/DCAHook.sol#176-183) ignores return value by poolManager.unlock() (src/DCAHook.sol#182)\n[medium/medium] unused-return at src/DCAHookLauncher.sol:103: DCAHookLauncher._launch(bytes32,uint160) (src/DCAHookLauncher.sol#103-115) ignores return value by poolManager.initialize(deployed.getPoolKey(),sqrtPriceX96) (src/DCAHookLauncher.sol#113)\n[low/medium] reentrancy-events at src/DCAHookLauncher.sol:103: Reentrancy in DCAHookLauncher._launch(bytes32,uint160) (src/DCAHookLauncher.sol#103-115):","passed":true},{"durationMs":355,"exitCode":0,"name":"aderyn","output":"[low] centralization-risk at src/DCAHookLauncher.sol:47: Centralization Risk (3 places)\n[low] large-numeric-literal at src/DCAHook.sol:26: Large Numeric Literal (2 places)\n[low] state-change-without-event at src/DCAHook.sol:185: State Change Without Event\n[low] state-no-address-check at src/DCAHookLauncher.sol:54: Address State Variable Set Without Checks\n[low] unchecked-return at src/DCAHook.sol:182: Unchecked Return (2 places)\n[low] uninitialized-local-variable at src/HookMiner.sol:13: Uninitialized Local Variable","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"46f511e92a6e5348bb74426cd6d8f32bd03ea814f240312161f8398b413aff19","verifiedTreeHash":"037c7c2a0ef34c4b888d854f0d0ebdbff61fe967","verifierVersion":"0.1.0+7ff5db2c"}]}