{"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":"83f90aa0-bf87-44b3-a393-f4ca4eed7614","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":null,"dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","adapt_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","adapt_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","adapt_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","adapt_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"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":"failed"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","audit_imported_code","adapt_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"waiting"}],"objective":"Token name: QUORUM.\nToken symbol: QRM.\nToken supply: 1,000,000,000, 18 decimals, mint once.\nLaunch QUORUM (QRM), one billion supply, on Ethereum mainnet paired with IMD using the requester-supplied immutable source archive, not a newly designed project. This request intentionally starts from an empty workspace, with no GitHub input or GitHub delivery. Recover the source from ipfs://bafybeigmis3clqzl2hdmtspk3ymr5dietr6oghnwaq7wedgoaugpikp5gq (verified public download: https://gateway.pinata.cloud/ipfs/bafybeigmis3clqzl2hdmtspk3ymr5dietr6oghnwaq7wedgoaugpikp5gq; other HTTPS gateways may be used), SHA-256 f3b066021bd193ea258c39fe978c0aa8f9e404c124cd222f1dbd75aaf1fee2f6, exactly 420004 bytes. Preserve the supplied deployed dependencies, constitution, business rules, fixed stake 62500 QRM, 3% IMD buy/sell tax, quota accounting, 50/50 treasury, exact 0x28c0 hook permissions and all mandatory tests. Use official 90% pool/10% swarm distribution. No redesign or proxy. Audit restored source before integration; do not hide its external origin. Perform normal checks and platform-required review, not contract bypass scenarios. Do not require early workers to supply later platform-generated contributor allocation and final metadata. Final broadcasting must use successful simulation of the actual complete transaction within current gas and size limits. No frontend, ENS or recurring services. Explicit fee rule: charge 3% on buys and 3% on sells in IMD, in addition to the official pool fee. Fee destination: the immutable QuorumTreasury, split 50% weekly allowances and 50% operations by the existing contracts. Keep collected IMD as IMD; NEVER auto-swap hook tax to ETH, and do not add an owner price-limit mechanism. Admin: nobody; there is no owner, proxy or administrator. External dependencies are already deployed on Ethereum chainId 1: immutable constitution 0x48a78afb5397abeab5be23473973c5c62497cf55 and fixed core code package 0x5f8c721d44d5815ae9e6d54ff20e717d56ec0d91, verified by PREREQUISITES.json. QuorumToken constructor binds these; Hook atomically creates the actual core. Read actual core/children from deployed getters, not nonce predictions. The payer must hand the official requester fee right to the verified Hook after issuance; preserve this post-deployment handover requirement. Do not silently replace any supplied implementation with a default hook. Formatting and build compatibility: the archive is preformatted with the verifier Foundry 1.8.3, including vendored Solidity, and contains five explicitly tracked external test fixtures in FIXTURE-PINS.json. Plain forge build and forge test must work in a fresh checkout without an undocumented bootstrap dependency. Use the canonical foundry.toml (Solidity 0.8.28, optimizer 200, via_ir=true, bytecode_hash=none). If the worker first tries FOUNDRY_VIA_IR=false, its documented configured fallback is required for this fixed creation-code package; do not change rules or weaken tests to fit the quick override. The archive length/SHA-256 authenticate downloaded bytes, not a ban on harmless formatting after extraction. Preserve compiled production creation/runtime bytes, constitution bytes and all mandatory test cases and assertion semantics. If a different worker formatter changes only presentation, document that diff and refresh only affected test-source SHA pins; no substantive test changes or silent dependency changes. Include all five pinned fixture JSON files in the accepted Git bundle; root out/cache and private machine files are not deliverables.","parentJobId":null,"planHash":"166799d8e5c75673b1268310996cf8869363e23247645e07c6d9d42e36c5bec1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"83f90aa0-bf87-44b3-a393-f4ca4eed7614","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2370-quorum"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52211","feedbackHash":"58a7961b84de50901d4a8bc66fbb5dc8a3e183c9bccc6562a367d959146cb4ae","nodeKey":"build_contract_project","submissionHash":"2972dbac5a1218c6f57be5d941d7eefce4d3c5a892e0b8999d537a74de393aa4","tag1":"verification:checks","tag2":"acceptance-v2","value":0},{"agentId":"51568","feedbackHash":"3b2a49ad2705028e1d51150f44c7898014eb01747f68d962fe682cfec59e1c07","nodeKey":"build_contract_project","submissionHash":"e34649765534d9ee4d6f35ea701028230672d252353582280487d1f70599dc95","tag1":"verification:checks","tag2":"acceptance-v2","value":0},{"agentId":"53944","feedbackHash":"35da450103e7f612b5d8a32b08880aac0dea581ebaeb039f5562bde2652162ae","nodeKey":"build_contract_project","submissionHash":"ac93c55975cf497dffdf1675cc0f55ac0798b05ffc3665bc3b618ea60cf7a137","tag1":"verification:checks","tag2":"acceptance-v2","value":0}],"site":null,"snapshotHash":"4643285d74026d962f38fc34ce0fabcf32d7f23f5360ac3a2d025ae65f570e47","state":"blocked","submissions":[{"artifacts":[],"attempt":2,"bundleHash":"33faed66362caf0b584086a9e6474e0434cc51199d459a7f4e88c9e1883c1104","device":"26d42bb29b53b9d8","findings":[],"hash":"2972dbac5a1218c6f57be5d941d7eefce4d3c5a892e0b8999d537a74de393aa4","nodeId":"76e89071-25bb-4174-9c20-0e3231f68497","outcome":"completed","summary":"Restored the authenticated archive and all five pinned fixtures. Constitution and production bytecode remain unchanged.\n\nPassed formatting, canonical build, 73 tests—including all 63 mandatory cases—candidate verification, and a clean offline rebuild using the supplied fuzz seed.\n\nReported findings were reviewed and narrowly annotated; no fresh Slither run is claimed. See [REVIEW.md](REVIEW.md) and [RESTORATION.md](RESTORATION.md).\n\nNo broadcast occurred. Final platform review, complete-transaction simulation, and payer fee-right handover remain release gates.","treeHash":"78e625445289e43531b11065368fc5afd2858e58","usage":{"cachedInputTokens":4854528,"inputTokens":152622,"model":"gpt-6-astra","outputTokens":33539,"runtime":"codex","turns":9,"wallClockMs":1186886}},{"artifacts":[],"attempt":3,"bundleHash":"f52eabeb69a4f499ad7ee4973708441a668c14d7cd386a0af241f3873d00ba31","device":"3d294003c7683307","findings":[],"hash":"ac93c55975cf497dffdf1675cc0f55ac0798b05ffc3665bc3b618ea60cf7a137","nodeId":"76e89071-25bb-4174-9c20-0e3231f68497","outcome":"completed","summary":"Restored the authenticated archive and all five pinned fixtures.\n\n- Formatting, build, and all **72 tests** pass, including all 63 mandatory cases.\n- Candidate verifier passes in both modes.\n- Production bytecode, constitution, and mandatory-test pins remain unchanged.\n- Documented the authorization false positive with a narrow annotation and nine regression tests.\n\n[Verification evidence](/home/seat/.identitymd/work/83f90aa0-bf87-44b3-a393-f4ca4eed7614/76e89071-25bb-4174-9c20-0e3231f68497/evidence/restoration-verification.json)\n\nPlatform independent review, complete-transaction simulation, and payer fee-right handover remain deployment requirements.","treeHash":"703af2e8dda4acf64acf2c49095ca343877a04fc","usage":{"cachedInputTokens":4539776,"inputTokens":288513,"model":"gpt-6-astra","outputTokens":30792,"runtime":"codex","turns":8,"wallClockMs":1143566}},{"artifacts":[],"attempt":1,"bundleHash":"3f5c0698940248deaaba1caf0069dbcf6eb44bc3bf902a729d2f83f005e9821e","device":"3111534b6da56538","findings":[],"hash":"e34649765534d9ee4d6f35ea701028230672d252353582280487d1f70599dc95","nodeId":"76e89071-25bb-4174-9c20-0e3231f68497","outcome":"completed","summary":"Restored the authenticated archive and all five pinned fixtures. Contracts, constitution, dependencies, and mandatory tests remain unchanged.\n\nValidation passed: formatting, canonical build, all 63 tests, and both candidate-verifier modes—including a fresh offline build. The fixed core creation hash matches.\n\n[Restoration report](RESTORATION.md) documents provenance, review, and the local compiler workaround. Final platform review, transaction simulation, and post-issuance fee handover remain release steps; no broadcast occurred.","treeHash":"016e33054ddab63be8d1002d7b9d7d2282db5ecb","usage":{"cachedInputTokens":3191680,"inputTokens":138049,"model":"gpt-6-astra","outputTokens":22258,"runtime":"codex","turns":8,"wallClockMs":763636}}],"verification":[{"checks":[{"durationMs":34258,"exitCode":0,"name":"build","output":"Compiling 65 files with Solc 0.8.28\nSolc 0.8.28 finished in 34.19s\nCompiler run successful!\n","passed":true},{"durationMs":908,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/positive/OrganizationQuotaPositive.t.sol:OrganizationQuotaPositiveTest\n[PASS] testNormalBuyAndProcurementKeepsOnlyReturnedCredit() (gas: 157905)\n[PASS] testNormalDonationRefundDoesNotCreateCredit() (gas: 118156)\n[PASS] testNormalRewardPayoutRetiresExistingCreditDownToZero() (gas: 140238)\n[PASS] testNormalSaleConsumesCreditOnlyOnce() (gas: 152861)\n[PASS] testNormalUnusedBudgetPreservesCredit() (gas: 132251)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 499.46µs (598.23µs CPU time)\n\nRan 4 tests for test/positive/AgendaResponsePositive.t.sol:AgendaResponsePositiveTest\n[PASS] testNormalInFlightResponseSurvivesWorkerProgressMessage() (gas: 850703)\n[PASS] testNormalResponseAtExistingAnchorAgeLimit() (gas: 821834)\n[PASS] testNormalResponseWithNoAgendaYet() (gas: 140378)\n[PASS] testNormalSameBlockMessagesUseFinalConfirmedRevision() (gas: 953874)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.81ms (871.64µs CPU time)\n\nRan 3 tests for test/compatibility/FixedTokenBindingPositive.t.sol:FixedTokenBindingPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584479)\nLogs:\n  factory_launch_execution_gas: 14337123\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1129731)\n[PASS] testNormalZeroArgumentCandidateBinding() (gas: 39671)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 60.68ms (2.08ms CPU time)\n\nRan 3 tests for test/positive/RecusalPositive.t.sol:RecusalPositiveTest\n[PASS] testNormalManyInterestedMembersLeaveThresholdFixedAndProposalExpires() (gas: 1004960931)\n[PASS] testNormalSeparateWorkerAndRecipientRemainInBudgetAndAcceptanceDenominator() (gas: 948998697)\n[PASS] testNormalTenQualifiedSeatsRequireSevenWithDeclaredRecipients() (gas: 780180547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 520.34ms (1.39s CPU time)\n\nRan 12 tests for test/positive/RevenueAndScalePositive.t.sol:RevenueAndScalePositiveTest\n[PASS] testNormalAnyoneMayRecognizeOperatingDonationsWithoutProposal() (gas: 394368)\n[PASS] testNormalDirectSupportedDonationsRecognizedExactlyOnce() (gas: 461914)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalHistoricalRegistrationsDoNotIncreaseEmptyWeekScan() (gas: 1225815714)\nLogs:\n  settlement gas with 1000 historical rotations and no responses: 197514\n\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87334)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438615512)\n[PASS] testNormalLateDonationRecognitionDoesNotRewriteClosedBudget() (gas: 283838736)\n[PASS] testNormalOperatingDonationsAreIncomeBeforeBudgetAndRefund() (gas: 551594057)\n[PASS] testNormalRegistrationIndexMatchesRotationExpiryAndExit() (gas: 53712963)\n[PASS] testNormalResponderBatchesPreserveAllRegisteredDenominator() (gas: 135665285)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437389237)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1082339402)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 547.99ms (2.13s CPU time)\n\nRan 12 tests for test/compatibility/GovernancePoolPositive.t.sol:GovernancePoolPositiveTest\n[PASS] testNormalAcceptedWorkRetiresOrganizationQuotaAndPaysReward() (gas: 495988522)\n[PASS] testNormalApprovedTaskExceedsBudgetThenRetriesWithinBudget() (gas: 315583972)\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584663)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164655)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992151)\n[PASS] testNormalManifestPermissionsMatchConstructor() (gas: 8473)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576421)\n[PASS] testNormalProcurementRetiresOnlySpentOrganizationQuota() (gas: 405920513)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908465)\n[PASS] testNormalUnavailableServiceRollsBackTradeAndCanRetry() (gas: 316240425)\n[PASS] testNormalVotedBuyThenSellTaxAndRefunds() (gas: 406314168)\n[PASS] testNormalVotedFeeCollectionSplitsIncomeOnlyOnce() (gas: 406276652)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 627.36ms (2.69s CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87290)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438263143)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437036802)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073068425)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 694.04ms (1.05s CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584494)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164568)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992026)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576422)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908241)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 694.07ms (920.71ms CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 552627076)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078714)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87408)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438510108)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 624533352)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 747306445)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 671796053)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 695287837)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 1051716884)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 745029114)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 1459304883)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437283761)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073646605)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 552024881)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 822.08ms (5.76s CPU time)\n\nRan 10 tests for test/review/AuthorizationReview.t.sol:AuthorizationReviewTest\n[PASS] testAcceptanceRequiresCurrentNonceAndConstitution() (gas: 338158)\n[PASS] testApprovalAloneDoesNotAuthorizeEnrollment() (gas: 103045)\n[PASS] testDuplicateAcceptanceCannotDepositTwice() (gas: 1047052)\n[PASS] testExpiredAuthorizationCannotDeposit() (gas: 231480)\n[PASS] testFuzzAcceptanceUsesRecordedOwner(uint96) (runs: 1000, μ: 1223026, ~: 1222945)\n[PASS] testFuzzQuotaRoundingMatchesExactFloor(uint128,uint8) (runs: 1000, μ: 959572, ~: 908147)\n[PASS] testOnlyRecordedAgentCanAccept() (gas: 329308)\n[PASS] testRefundAlwaysReturnsToOriginalDepositor() (gas: 1617451)\n[PASS] testRevokedAuthorizationCannotDeposit() (gas: 260905)\n[PASS] testRotationRequiresNewAgentAndNonce() (gas: 1354511)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 822.20ms (1.52s CPU time)\n\nRan 10 test suites in 826.90ms (4.79s CPU time): 73 tests passed, 0 failed, 0 skipped (73 total tests)\n","passed":true},{"durationMs":77,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.closeOperatingQuota(uint256)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.openOperatingQuota(uint256)\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumOperatingAccount.sweepBeforeOperation()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumToken.approve(address,uint256)\",\"QuorumToken.transfer(address,uint256)\",\"QuorumToken.transferFrom(address,address,uint256)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumTreasury.syncAssetRevenue(address)\",\"QuorumTreasury.syncOperatingRevenue()\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.closeOrganizationBudget(address,uint256)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.openOrganizationBudget(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"QuotaPrototype.retireOrganizationBought(address,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gitattributes\":1,\".gitignore\":25,\"ACCEPTANCE.json\":159,\"FIXTURE-PINS.json\":13,\"PREREQUISITES.json\":50,\"README.md\":128,\"RESTORATION.md\":82,\"REVIEW.md\":149,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"constitution.zh.md\":77,\"evidence/acceptance-summary.json\":513,\"evidence/archive-files.sha256.json\":296,\"evidence/forge-all.json\":1,\"evidence/forge-all.stderr.txt\":0,\"evidence/independent-static-review.json\":27,\"evidence/local-preflight.json\":77,\"evidence/mainnet-prerequisite-verification.json\":24,\"evidence/restoration-checks.json\":86,\"evidence/restoration-lock.json\":217,\"evidence/review-comments.patch\":79,\"evidence/submission-preflight.json\":81,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"fixtures/policy/imd-public-launch-parameters.json\":27,\"fixtures/policy/imd-public-policies.json\":1,\"foundry.toml\":16,\"launch.json\":29,\"requirements-local.txt\":3,\"src/ConstitutionPrototype.sol\":31,\"src/ImdLaunchProof.sol\":71,\"src/LocalFixtures.sol\":45,\"src/QuorumBoundCore.sol\":40,\"src/QuorumCodeCatalog.sol\":24,\"src/QuorumCoreCode.sol\":49,\"src/QuorumCreate.sol\":16,\"src/QuorumIssuanceHook.sol\":259,\"src/QuorumLaunchToken.sol\":30,\"src/QuorumLocalSystem.sol\":46,\"src/QuorumMembership.sol\":304,\"src/QuorumOperatingAccount.sol\":99,\"src/QuorumRevenueSink.sol\":26,\"src/QuorumToken.sol\":18,\"src/QuorumTreasury.sol\":365,\"src/QuorumWork.sol\":523,\"src/QuotaPrototype.sol\":144,\"src/RestrictedPoolPrototype.sol\":189,\"src/WorkCyclePrototype.sol\":232,\"test/compatibility/FixedTokenBindingPositive.t.sol\":237,\"test/compatibility/GovernancePoolPositive.t.sol\":408,\"test/positive/AgendaResponsePositive.t.sol\":83,\"test/positive/ExternalInterfaces.sol\":78,\"test/positive/GovernancePositive.t.sol\":286,\"test/positive/ImdFactoryPositive.t.sol\":424,\"test/positive/NormalIntegrated.t.sol\":242,\"test/positive/OrganizationQuotaPositive.t.sol\":53,\"test/positive/RecusalPositive.t.sol\":279,\"test/positive/RevenueAndScalePositive.t.sol\":149,\"test/review/AuthorizationReview.t.sol\":169,\"tools/build_external_fixtures.py\":34,\"tools/constitution_pack.py\":36,\"tools/issuance_lab.py\":247,\"tools/mainnet_fork_positive.py\":139,\"tools/prepare_issuance.py\":111,\"tools/run_acceptance.py\":20,\"tools/seed_parameters.py\":67,\"tools/verify_candidate.py\":52,\"tools/verify_restoration.py\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":12279,"exitCode":0,"name":"slither","output":"[high/high] arbitrary-send-erc20 at src/QuorumMembership.sol:198: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#198-237) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#221)\n[high/medium] reentrancy-balance at src/QuorumOperatingAccount.sol:58: Reentrancy in QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#58-92):\n[high/medium] reentrancy-balance at src/QuorumTreasury.sol:165: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#165-171):\n[high/medium] reentrancy-eth at src/QuorumTreasury.sol:330: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#330-363):\n[medium/medium] divide-before-multiply at src/QuorumTreasury.sol:256: QuorumTreasury._finish(address,uint256,uint256,uint256,uint256,uint256) (src/QuorumTreasury.sol#256-269) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/QuotaPrototype.sol:116: QuotaPrototype.unlocked(address) (src/QuotaPrototype.sol#116-121) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/QuorumTreasury.sol:165: QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#165-171) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/QuorumMembership.sol:240: QuorumMembership.respond(uint256,uint256,bytes32,uint256,string) (src/QuorumMembership.sol#240-259) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:271: Reentrancy in QuorumTreasury.claimAllowance(uint256,uint256) (src/QuorumTreasury.sol#271-279):\n[medium/medium] reentrancy-no-eth at src/QuorumMembership.sol:198: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#198-237):\n[medium/medium] reentrancy-no-eth at src/RestrictedPoolPrototype.sol:131: Reentrancy in AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:330: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#330-363):\n[medium/medium] reentrancy-no-eth at src/QuorumIssuanceHook.sol:204: Reentrancy in QuorumSwapRouter.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/QuorumIssuanceHook.sol#204-221):\n[medium/medium] uninitialized-local at src/QuorumWork.sol:488: QuorumWork.expire(uint256).released (src/QuorumWork.sol#488) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:71: QuorumMembership.registrationCount(uint256).count (src/QuorumMembership.sol#71) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumWork.sol:38: QuorumWork.agendaRevisionAt(uint256).lo (src/QuorumWork.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/RestrictedPoolPrototype.sol:38: RestrictedPoolPrototype.constructor(IPoolManager,address,address,address,address,address).p (src/RestrictedPoolPrototype.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/WorkCyclePrototype.sol:209: WorkCyclePrototype.expire(uint256).released (src/WorkCyclePrototype.sol#209) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:44: ImdLaunchProof.resolve(address,uint64,address,address).foundHook (src/ImdLaunchProof.sol#44) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:43: ImdLaunchProof.resolve(address,uint64,address,address).foundToken (src/ImdLaunchProof.sol#43) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:210: QuorumMembership.accept(address,uint256,bytes32).carried (src/QuorumMembership.sol#210) is a local variable never initialized\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by ImdLaunchProof.resolve(seeder,launchNumber,project,address(this)) (src/QuorumIssuanceHook.sol#102)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:244: QuorumSwapRouter._settle(Currency,int128,bool,uint256) (src/QuorumIssuanceHook.sol#244-257) ignores return value by manager.settle() (src/QuorumIssuanceHook.sol#248)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by (None,None,None,recipient) = IFactoryFeeSource(seeder).positionOf(launchNumber) (src/QuorumIssuanceHook.sol#103)\n[medium/medium] unused-return at src/RestrictedPoolPrototype.sol:170: AuthenticatedRouterPrototype._settle(Currency,int128,bool,uint256) (src/RestrictedPoolPrototype.sol#170-187) ignores return value by manager.settle() (src/RestrictedPoolPrototype.sol#178)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by IFactoryFeeSource(seeder).claimFees(launchNumber) (src/QuorumIssuanceHook.sol#105)\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).p (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).primary_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).h (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).i (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).h (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).project_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).t (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).p (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumTreasury.sol:94: QuorumTreasury.constructor(IERC20Local,QuorumMembership,address,address).reporter (src/QuorumTreasury.sol#94) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).i (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:58: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#58-92) has external calls inside a loop: require(bool,string)(IApproveAsset(a.asset).approve(a.spender,0) && IApproveAsset(a.asset).approve(a.spender,a.amount),approve) (src/QuorumOperatingAccount.sol#64-67)\n[low/medium] calls-loop at src/QuorumWork.sol:320: QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336) has external calls inside a loop: this.appendEntry(id) (src/QuorumWork.sol#327)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:58: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#58-92) has external calls inside a loop: require(bool,string)(IApproveAsset(a_scope_2.asset).approve(a_scope_2.spender,0),clear approval) (src/QuorumOperatingAccount.sol#84)\n[low/medium] calls-loop at src/QuorumTreasury.sol:224: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#224-254) has external calls inside a loop: membership.qualified(id,week) (src/QuorumTreasury.sol#239)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:58: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#58-92) has external calls inside a loop: (ok,result) = c.target.call{value: c.value}(c.data) (src/QuorumOperatingAccount.sol#77)\n[low/medium] calls-loop at src/QuorumTreasury.sol:224: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#224-254) has external calls inside a loop: id = membership.responderAt(week,index) (src/QuorumTreasury.sol#238)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:58: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#58-92) has external calls inside a loop: require(bool,string)(a.amount <= IERC20Local(a.asset).balanceOf(address(this)),approval balance) (src/QuorumOperatingAccount.sol#63)\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:330: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#330-363):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:330: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#330-363):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:165: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#165-171):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-benign at src/QuorumMembership.sol:198: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#198-237):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:330: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#330-363):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-benign at src/WorkCyclePrototype.sol:95: Reentrancy in WorkCyclePrototype.depositRevenue(uint256) (src/WorkCyclePrototype.sol#95-102):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:202: Reentrancy in QuorumTreasury._syncOperating() (src/QuorumTreasury.sol#202-206):\n[low/medium] reentrancy-events at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-events at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-events at src/QuorumTreasury.sol:165: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#165-171):\n[low/medium] reentrancy-events at src/RestrictedPoolPrototype.sol:150: Reentrancy in AuthenticatedRouterPrototype.unlockCallback(bytes) (src/RestrictedPoolPrototype.sol#150-168):\n[low/medium] reentrancy-events at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-events at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-events at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-events at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[low/medium] reentrancy-events at src/QuorumIssuanceHook.sol:223: Reentrancy in QuorumSwapRouter.unlockCallback(bytes) (src/QuorumIssuanceHook.sol#223-242):\n[low/medium] timestamp at src/QuorumMembership.sol:173: QuorumMembership.authorize(address,uint256) (src/QuorumMembership.sol#173-181) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:170: WorkCyclePrototype.submit(uint256,string) (src/WorkCyclePrototype.sol#170-180) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:154: QuorumMembership.requireAgent(uint256,address) (src/QuorumMembership.sol#154-156) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:57: QuorumMembership._delta(uint256,int256) (src/QuorumMembership.sol#57-61) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:182: WorkCyclePrototype.acceptWork(uint256) (src/WorkCyclePrototype.sol#182-192) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:198: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#198-237) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:138: QuorumMembership.live(uint256) (src/QuorumMembership.sol#138-144) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:485: QuorumWork.expire(uint256) (src/QuorumWork.sol#485-522) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:444: QuorumWork.resolveAcceptance(uint256) (src/QuorumWork.sol#444-467) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:216: QuorumWork.proposeSuspension(uint256,address,string) (src/QuorumWork.sol#216-243) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:158: QuorumMembership._end(uint256) (src/QuorumMembership.sol#158-171) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:104: WorkCyclePrototype.propose(address,address,uint256,uint256,string) (src/WorkCyclePrototype.sol#104-126) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:284: QuorumMembership.requestExit(uint256) (src/QuorumMembership.sol#284-292) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:360: QuorumWork.vote(uint256,uint256,bool) (src/QuorumWork.sol#360-374) uses timestamp for comparisons\n[low/medium] timestamp at src/RestrictedPoolPrototype.sol:131: AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:270: QuorumMembership.registeredAtStart(uint256,uint256) (src/QuorumMembership.sol#270-274) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:137: WorkCyclePrototype.vote(uint256,bool,bool) (src/WorkCyclePrototype.sol#137-155) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:433: QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:376: QuorumWork.threshold(uint256) (src/QuorumWork.sol#376-381) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:306: QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:383: QuorumWork._approved(uint256) (src/QuorumWork.sol#383-390) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:255: QuorumWork.executeSuspension(ui","passed":false}],"detail":"static analysis found arbitrary-send-erc20 at src/QuorumMembership.sol:198: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#198-237) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#221)","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"2972dbac5a1218c6f57be5d941d7eefce4d3c5a892e0b8999d537a74de393aa4","verifiedTreeHash":"78e625445289e43531b11065368fc5afd2858e58","verifierVersion":"0.1.0+560ab6a2"},{"checks":[{"durationMs":31494,"exitCode":0,"name":"build","output":"Compiling 65 files with Solc 0.8.28\nSolc 0.8.28 finished in 31.43s\nCompiler run successful!\n","passed":true},{"durationMs":833,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/review/MembershipAuthorization.t.sol:MembershipAuthorizationReviewTest\n[PASS] testAcceptanceRequiresCurrentNonceAndExactConstitution() (gas: 1289697)\n[PASS] testAcceptedNonceCannotPullASecondStake() (gas: 1195116)\n[PASS] testApprovalAloneDoesNotAuthorizeAcceptance() (gas: 147111)\n[PASS] testAuthorizationWithoutTokenApprovalFailsThenRetries() (gas: 1170729)\n[PASS] testExpiredAuthorizationDoesNotPullApprovedStake() (gas: 258820)\n[PASS] testOnlyNamedAgentAcceptsOwnerAuthorization() (gas: 1124718)\n[PASS] testOwnerAuthorizedAgentEscrowsExactlyFixedStake() (gas: 1116587)\n[PASS] testRevokedAuthorizationDoesNotPullApprovedStake() (gas: 288139)\n[PASS] testRotationCarriesStakeAndRefundKeepsOriginalDepositor() (gas: 3208454)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 1.26ms (2.78ms CPU time)\n\nRan 5 tests for test/positive/OrganizationQuotaPositive.t.sol:OrganizationQuotaPositiveTest\n[PASS] testNormalBuyAndProcurementKeepsOnlyReturnedCredit() (gas: 157905)\n[PASS] testNormalDonationRefundDoesNotCreateCredit() (gas: 118156)\n[PASS] testNormalRewardPayoutRetiresExistingCreditDownToZero() (gas: 140238)\n[PASS] testNormalSaleConsumesCreditOnlyOnce() (gas: 152861)\n[PASS] testNormalUnusedBudgetPreservesCredit() (gas: 132251)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.21ms (333.70µs CPU time)\n\nRan 4 tests for test/positive/AgendaResponsePositive.t.sol:AgendaResponsePositiveTest\n[PASS] testNormalInFlightResponseSurvivesWorkerProgressMessage() (gas: 850703)\n[PASS] testNormalResponseAtExistingAnchorAgeLimit() (gas: 821834)\n[PASS] testNormalResponseWithNoAgendaYet() (gas: 140378)\n[PASS] testNormalSameBlockMessagesUseFinalConfirmedRevision() (gas: 953874)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.69ms (758.79µs CPU time)\n\nRan 3 tests for test/compatibility/FixedTokenBindingPositive.t.sol:FixedTokenBindingPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584479)\nLogs:\n  factory_launch_execution_gas: 14337123\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1129731)\n[PASS] testNormalZeroArgumentCandidateBinding() (gas: 39671)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 28.69ms (940.60µs CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87290)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438263143)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437036802)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073068425)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 489.92ms (967.58ms CPU time)\n\nRan 3 tests for test/positive/RecusalPositive.t.sol:RecusalPositiveTest\n[PASS] testNormalManyInterestedMembersLeaveThresholdFixedAndProposalExpires() (gas: 1004960931)\n[PASS] testNormalSeparateWorkerAndRecipientRemainInBudgetAndAcceptanceDenominator() (gas: 948998697)\n[PASS] testNormalTenQualifiedSeatsRequireSevenWithDeclaredRecipients() (gas: 780180547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 522.02ms (1.42s CPU time)\n\nRan 12 tests for test/positive/RevenueAndScalePositive.t.sol:RevenueAndScalePositiveTest\n[PASS] testNormalAnyoneMayRecognizeOperatingDonationsWithoutProposal() (gas: 394368)\n[PASS] testNormalDirectSupportedDonationsRecognizedExactlyOnce() (gas: 461914)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalHistoricalRegistrationsDoNotIncreaseEmptyWeekScan() (gas: 1225815714)\nLogs:\n  settlement gas with 1000 historical rotations and no responses: 197514\n\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87334)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438615512)\n[PASS] testNormalLateDonationRecognitionDoesNotRewriteClosedBudget() (gas: 283838736)\n[PASS] testNormalOperatingDonationsAreIncomeBeforeBudgetAndRefund() (gas: 551594057)\n[PASS] testNormalRegistrationIndexMatchesRotationExpiryAndExit() (gas: 53712963)\n[PASS] testNormalResponderBatchesPreserveAllRegisteredDenominator() (gas: 135665285)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437389237)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1082339402)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 524.09ms (1.96s CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584494)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164568)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992026)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576422)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908241)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 565.76ms (891.39ms CPU time)\n\nRan 12 tests for test/compatibility/GovernancePoolPositive.t.sol:GovernancePoolPositiveTest\n[PASS] testNormalAcceptedWorkRetiresOrganizationQuotaAndPaysReward() (gas: 495988522)\n[PASS] testNormalApprovedTaskExceedsBudgetThenRetriesWithinBudget() (gas: 315583972)\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584663)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164655)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992151)\n[PASS] testNormalManifestPermissionsMatchConstructor() (gas: 8473)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576421)\n[PASS] testNormalProcurementRetiresOnlySpentOrganizationQuota() (gas: 405920513)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908465)\n[PASS] testNormalUnavailableServiceRollsBackTradeAndCanRetry() (gas: 316240425)\n[PASS] testNormalVotedBuyThenSellTaxAndRefunds() (gas: 406314168)\n[PASS] testNormalVotedFeeCollectionSplitsIncomeOnlyOnce() (gas: 406276652)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 673.82ms (2.57s CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 552627076)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078714)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87408)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438510108)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 624533352)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 747306445)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 671796053)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 695287837)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 1051716884)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 745029114)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 1459304883)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437283761)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073646605)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 552024881)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 744.00ms (5.76s CPU time)\n\nRan 10 test suites in 748.78ms (3.55s CPU time): 72 tests passed, 0 failed, 0 skipped (72 total tests)\n","passed":true},{"durationMs":48,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.closeOperatingQuota(uint256)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.openOperatingQuota(uint256)\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumOperatingAccount.sweepBeforeOperation()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumToken.approve(address,uint256)\",\"QuorumToken.transfer(address,uint256)\",\"QuorumToken.transferFrom(address,address,uint256)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumTreasury.syncAssetRevenue(address)\",\"QuorumTreasury.syncOperatingRevenue()\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.closeOrganizationBudget(address,uint256)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.openOrganizationBudget(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"QuotaPrototype.retireOrganizationBought(address,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gitattributes\":1,\".gitignore\":25,\"ACCEPTANCE.json\":159,\"FIXTURE-PINS.json\":13,\"PREREQUISITES.json\":50,\"README.md\":15,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"constitution.zh.md\":77,\"docs/OPERATIONS.md\":92,\"docs/RESTORATION.md\":84,\"docs/SECURITY-REVIEW.md\":97,\"evidence/acceptance-summary.json\":453,\"evidence/archive-files.sha256\":294,\"evidence/independent-static-review.json\":27,\"evidence/mainnet-prerequisite-verification.json\":24,\"evidence/restoration-verification.json\":377,\"evidence/restored-acceptance-summary.json\":507,\"evidence/restored-candidate-local.json\":77,\"evidence/restored-candidate-submission.json\":81,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"fixtures/policy/imd-public-launch-parameters.json\":27,\"fixtures/policy/imd-public-policies.json\":1,\"foundry.toml\":16,\"launch.json\":29,\"requirements-local.txt\":3,\"src/ConstitutionPrototype.sol\":31,\"src/ImdLaunchProof.sol\":71,\"src/LocalFixtures.sol\":45,\"src/QuorumBoundCore.sol\":40,\"src/QuorumCodeCatalog.sol\":24,\"src/QuorumCoreCode.sol\":49,\"src/QuorumCreate.sol\":16,\"src/QuorumIssuanceHook.sol\":259,\"src/QuorumLaunchToken.sol\":30,\"src/QuorumLocalSystem.sol\":46,\"src/QuorumMembership.sol\":302,\"src/QuorumOperatingAccount.sol\":95,\"src/QuorumRevenueSink.sol\":26,\"src/QuorumToken.sol\":18,\"src/QuorumTreasury.sol\":355,\"src/QuorumWork.sol\":523,\"src/QuotaPrototype.sol\":144,\"src/RestrictedPoolPrototype.sol\":189,\"src/WorkCyclePrototype.sol\":232,\"test/compatibility/FixedTokenBindingPositive.t.sol\":237,\"test/compatibility/GovernancePoolPositive.t.sol\":408,\"test/positive/AgendaResponsePositive.t.sol\":83,\"test/positive/ExternalInterfaces.sol\":78,\"test/positive/GovernancePositive.t.sol\":286,\"test/positive/ImdFactoryPositive.t.sol\":424,\"test/positive/NormalIntegrated.t.sol\":242,\"test/positive/OrganizationQuotaPositive.t.sol\":53,\"test/positive/RecusalPositive.t.sol\":279,\"test/positive/RevenueAndScalePositive.t.sol\":149,\"test/review/MembershipAuthorization.t.sol\":197,\"tools/build_external_fixtures.py\":34,\"tools/constitution_pack.py\":36,\"tools/issuance_lab.py\":247,\"tools/mainnet_fork_positive.py\":139,\"tools/prepare_issuance.py\":111,\"tools/run_acceptance.py\":20,\"tools/seed_parameters.py\":67,\"tools/verify_candidate.py\":44},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":11178,"exitCode":0,"name":"slither","output":"[high/high] arbitrary-send-erc20 at src/QuorumMembership.sol:194: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-236) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#220)\n[high/medium] reentrancy-balance at src/QuorumOperatingAccount.sol:55: Reentrancy in QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89):\n[high/medium] reentrancy-balance at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[high/medium] reentrancy-eth at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[medium/medium] divide-before-multiply at src/QuotaPrototype.sol:116: QuotaPrototype.unlocked(address) (src/QuotaPrototype.sol#116-121) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/QuorumTreasury.sol:251: QuorumTreasury._finish(address,uint256,uint256,uint256,uint256,uint256) (src/QuorumTreasury.sol#251-264) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/QuorumMembership.sol:238: QuorumMembership.respond(uint256,uint256,bytes32,uint256,string) (src/QuorumMembership.sol#238-257) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/QuorumTreasury.sol:161: QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[medium/medium] reentrancy-no-eth at src/QuorumMembership.sol:194: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-236):\n[medium/medium] reentrancy-no-eth at src/RestrictedPoolPrototype.sol:131: Reentrancy in AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:266: Reentrancy in QuorumTreasury.claimAllowance(uint256,uint256) (src/QuorumTreasury.sol#266-274):\n[medium/medium] reentrancy-no-eth at src/QuorumIssuanceHook.sol:204: Reentrancy in QuorumSwapRouter.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/QuorumIssuanceHook.sol#204-221):\n[medium/medium] uninitialized-local at src/QuorumWork.sol:488: QuorumWork.expire(uint256).released (src/QuorumWork.sol#488) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:71: QuorumMembership.registrationCount(uint256).count (src/QuorumMembership.sol#71) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumWork.sol:38: QuorumWork.agendaRevisionAt(uint256).lo (src/QuorumWork.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/RestrictedPoolPrototype.sol:38: RestrictedPoolPrototype.constructor(IPoolManager,address,address,address,address,address).p (src/RestrictedPoolPrototype.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/WorkCyclePrototype.sol:209: WorkCyclePrototype.expire(uint256).released (src/WorkCyclePrototype.sol#209) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:44: ImdLaunchProof.resolve(address,uint64,address,address).foundHook (src/ImdLaunchProof.sol#44) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:43: ImdLaunchProof.resolve(address,uint64,address,address).foundToken (src/ImdLaunchProof.sol#43) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:206: QuorumMembership.accept(address,uint256,bytes32).carried (src/QuorumMembership.sol#206) is a local variable never initialized\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by ImdLaunchProof.resolve(seeder,launchNumber,project,address(this)) (src/QuorumIssuanceHook.sol#102)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:244: QuorumSwapRouter._settle(Currency,int128,bool,uint256) (src/QuorumIssuanceHook.sol#244-257) ignores return value by manager.settle() (src/QuorumIssuanceHook.sol#248)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by (None,None,None,recipient) = IFactoryFeeSource(seeder).positionOf(launchNumber) (src/QuorumIssuanceHook.sol#103)\n[medium/medium] unused-return at src/RestrictedPoolPrototype.sol:170: AuthenticatedRouterPrototype._settle(Currency,int128,bool,uint256) (src/RestrictedPoolPrototype.sol#170-187) ignores return value by manager.settle() (src/RestrictedPoolPrototype.sol#178)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by IFactoryFeeSource(seeder).claimFees(launchNumber) (src/QuorumIssuanceHook.sol#105)\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).p (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).primary_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).h (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).i (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).h (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).project_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).t (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).p (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumTreasury.sol:94: QuorumTreasury.constructor(IERC20Local,QuorumMembership,address,address).reporter (src/QuorumTreasury.sol#94) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).i (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: (ok,result) = c.target.call{value: c.value}(c.data) (src/QuorumOperatingAccount.sol#74)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(IApproveAsset(a_scope_2.asset).approve(a_scope_2.spender,0),clear approval) (src/QuorumOperatingAccount.sol#81)\n[low/medium] calls-loop at src/QuorumWork.sol:320: QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336) has external calls inside a loop: this.appendEntry(id) (src/QuorumWork.sol#327)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(a.amount <= IERC20Local(a.asset).balanceOf(address(this)),approval balance) (src/QuorumOperatingAccount.sol#60)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(IApproveAsset(a.asset).approve(a.spender,0) && IApproveAsset(a.asset).approve(a.spender,a.amount),approve) (src/QuorumOperatingAccount.sol#61-64)\n[low/medium] calls-loop at src/QuorumTreasury.sol:219: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#219-249) has external calls inside a loop: membership.qualified(id,week) (src/QuorumTreasury.sol#234)\n[low/medium] calls-loop at src/QuorumTreasury.sol:219: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#219-249) has external calls inside a loop: id = membership.responderAt(week,index) (src/QuorumTreasury.sol#233)\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:197: Reentrancy in QuorumTreasury._syncOperating() (src/QuorumTreasury.sol#197-201):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-benign at src/WorkCyclePrototype.sol:95: Reentrancy in WorkCyclePrototype.depositRevenue(uint256) (src/WorkCyclePrototype.sol#95-102):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-benign at src/QuorumMembership.sol:194: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-236):\n[low/medium] reentrancy-events at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-events at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-events at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[low/medium] reentrancy-events at src/RestrictedPoolPrototype.sol:150: Reentrancy in AuthenticatedRouterPrototype.unlockCallback(bytes) (src/RestrictedPoolPrototype.sol#150-168):\n[low/medium] reentrancy-events at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-events at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-events at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-events at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[low/medium] reentrancy-events at src/QuorumIssuanceHook.sol:223: Reentrancy in QuorumSwapRouter.unlockCallback(bytes) (src/QuorumIssuanceHook.sol#223-242):\n[low/medium] timestamp at src/QuorumMembership.sol:173: QuorumMembership.authorize(address,uint256) (src/QuorumMembership.sol#173-181) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:170: WorkCyclePrototype.submit(uint256,string) (src/WorkCyclePrototype.sol#170-180) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:154: QuorumMembership.requireAgent(uint256,address) (src/QuorumMembership.sol#154-156) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:274: QuorumMembership.qualified(uint256,uint256) (src/QuorumMembership.sol#274-280) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:57: QuorumMembership._delta(uint256,int256) (src/QuorumMembership.sol#57-61) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:182: WorkCyclePrototype.acceptWork(uint256) (src/WorkCyclePrototype.sol#182-192) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:259: QuorumMembership.report(uint256,string) (src/QuorumMembership.sol#259-266) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:138: QuorumMembership.live(uint256) (src/QuorumMembership.sol#138-144) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:485: QuorumWork.expire(uint256) (src/QuorumWork.sol#485-522) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:444: QuorumWork.resolveAcceptance(uint256) (src/QuorumWork.sol#444-467) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:216: QuorumWork.proposeSuspension(uint256,address,string) (src/QuorumWork.sol#216-243) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:158: QuorumMembership._end(uint256) (src/QuorumMembership.sol#158-171) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:104: WorkCyclePrototype.propose(address,address,uint256,uint256,string) (src/WorkCyclePrototype.sol#104-126) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:360: QuorumWork.vote(uint256,uint256,bool) (src/QuorumWork.sol#360-374) uses timestamp for comparisons\n[low/medium] timestamp at src/RestrictedPoolPrototype.sol:131: AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:268: QuorumMembership.registeredAtStart(uint256,uint256) (src/QuorumMembership.sol#268-272) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:137: WorkCyclePrototype.vote(uint256,bool,bool) (src/WorkCyclePrototype.sol#137-155) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:433: QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:376: QuorumWork.threshold(uint256) (src/QuorumWork.sol#376-381) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:292: QuorumMembership.withdraw(uint256) (src/QuorumMembership.sol#292-301) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:306: QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:194: QuorumMembe","passed":false}],"detail":"static analysis found arbitrary-send-erc20 at src/QuorumMembership.sol:194: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-236) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#220)","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"ac93c55975cf497dffdf1675cc0f55ac0798b05ffc3665bc3b618ea60cf7a137","verifiedTreeHash":"703af2e8dda4acf64acf2c49095ca343877a04fc","verifierVersion":"0.1.0+560ab6a2"},{"checks":[{"durationMs":31713,"exitCode":0,"name":"build","output":"Compiling 64 files with Solc 0.8.28\nSolc 0.8.28 finished in 31.65s\nCompiler run successful!\n","passed":true},{"durationMs":814,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/positive/OrganizationQuotaPositive.t.sol:OrganizationQuotaPositiveTest\n[PASS] testNormalBuyAndProcurementKeepsOnlyReturnedCredit() (gas: 157905)\n[PASS] testNormalDonationRefundDoesNotCreateCredit() (gas: 118156)\n[PASS] testNormalRewardPayoutRetiresExistingCreditDownToZero() (gas: 140238)\n[PASS] testNormalSaleConsumesCreditOnlyOnce() (gas: 152861)\n[PASS] testNormalUnusedBudgetPreservesCredit() (gas: 132251)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 481.68µs (624.61µs CPU time)\n\nRan 4 tests for test/positive/AgendaResponsePositive.t.sol:AgendaResponsePositiveTest\n[PASS] testNormalInFlightResponseSurvivesWorkerProgressMessage() (gas: 850703)\n[PASS] testNormalResponseAtExistingAnchorAgeLimit() (gas: 821834)\n[PASS] testNormalResponseWithNoAgendaYet() (gas: 140378)\n[PASS] testNormalSameBlockMessagesUseFinalConfirmedRevision() (gas: 953874)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 12.28ms (1.11ms CPU time)\n\nRan 3 tests for test/compatibility/FixedTokenBindingPositive.t.sol:FixedTokenBindingPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584479)\nLogs:\n  factory_launch_execution_gas: 14337123\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1129731)\n[PASS] testNormalZeroArgumentCandidateBinding() (gas: 39671)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 35.37ms (1.16ms CPU time)\n\nRan 3 tests for test/positive/RecusalPositive.t.sol:RecusalPositiveTest\n[PASS] testNormalManyInterestedMembersLeaveThresholdFixedAndProposalExpires() (gas: 1004960931)\n[PASS] testNormalSeparateWorkerAndRecipientRemainInBudgetAndAcceptanceDenominator() (gas: 948998697)\n[PASS] testNormalTenQualifiedSeatsRequireSevenWithDeclaredRecipients() (gas: 780180547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 499.47ms (1.41s CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584494)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164568)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992026)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576422)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908241)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 653.49ms (896.79ms CPU time)\n\nRan 12 tests for test/compatibility/GovernancePoolPositive.t.sol:GovernancePoolPositiveTest\n[PASS] testNormalAcceptedWorkRetiresOrganizationQuotaAndPaysReward() (gas: 495988522)\n[PASS] testNormalApprovedTaskExceedsBudgetThenRetriesWithinBudget() (gas: 315583972)\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 584663)\nLogs:\n  factory_launch_execution_gas: 14381648\n  hook_initcode_with_arguments_bytes: 20011\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1164655)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 520992151)\n[PASS] testNormalManifestPermissionsMatchConstructor() (gas: 8473)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1576421)\n[PASS] testNormalProcurementRetiresOnlySpentOrganizationQuota() (gas: 405920513)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 905908465)\n[PASS] testNormalUnavailableServiceRollsBackTradeAndCanRetry() (gas: 316240425)\n[PASS] testNormalVotedBuyThenSellTaxAndRefunds() (gas: 406314168)\n[PASS] testNormalVotedFeeCollectionSplitsIncomeOnlyOnce() (gas: 406276652)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 653.51ms (2.55s CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87290)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438263143)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437036802)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073068425)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 653.53ms (962.22ms CPU time)\n\nRan 12 tests for test/positive/RevenueAndScalePositive.t.sol:RevenueAndScalePositiveTest\n[PASS] testNormalAnyoneMayRecognizeOperatingDonationsWithoutProposal() (gas: 394368)\n[PASS] testNormalDirectSupportedDonationsRecognizedExactlyOnce() (gas: 461914)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078138)\n[PASS] testNormalHistoricalRegistrationsDoNotIncreaseEmptyWeekScan() (gas: 1225815714)\nLogs:\n  settlement gas with 1000 historical rotations and no responses: 197514\n\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87334)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438615512)\n[PASS] testNormalLateDonationRecognitionDoesNotRewriteClosedBudget() (gas: 283838736)\n[PASS] testNormalOperatingDonationsAreIncomeBeforeBudgetAndRefund() (gas: 551594057)\n[PASS] testNormalRegistrationIndexMatchesRotationExpiryAndExit() (gas: 53712963)\n[PASS] testNormalResponderBatchesPreserveAllRegisteredDenominator() (gas: 135665285)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437389237)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1082339402)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 653.57ms (2.04s CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 552627076)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 3078714)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87408)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 438510108)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 624533352)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 747306445)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 671796053)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 695287837)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 1051716884)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 745029114)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 1459304883)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 437283761)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 1073646605)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 552024881)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 734.49ms (5.72s CPU time)\n\nRan 9 test suites in 740.03ms (3.90s CPU time): 63 tests passed, 0 failed, 0 skipped (63 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.closeOperatingQuota(uint256)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.openOperatingQuota(uint256)\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumOperatingAccount.sweepBeforeOperation()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumToken.approve(address,uint256)\",\"QuorumToken.transfer(address,uint256)\",\"QuorumToken.transferFrom(address,address,uint256)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumTreasury.syncAssetRevenue(address)\",\"QuorumTreasury.syncOperatingRevenue()\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.closeOrganizationBudget(address,uint256)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.openOrganizationBudget(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"QuotaPrototype.retireOrganizationBought(address,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gitattributes\":1,\".gitignore\":25,\"ACCEPTANCE.json\":159,\"FIXTURE-PINS.json\":13,\"PREREQUISITES.json\":50,\"README.md\":38,\"RESTORATION.md\":147,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"constitution.zh.md\":77,\"evidence/acceptance-summary.json\":453,\"evidence/independent-static-review.json\":27,\"evidence/mainnet-prerequisite-verification.json\":24,\"evidence/restoration-checks.json\":716,\"evidence/restoration-source-integrity.json\":1201,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"fixtures/policy/imd-public-launch-parameters.json\":27,\"fixtures/policy/imd-public-policies.json\":1,\"foundry.toml\":16,\"launch.json\":29,\"requirements-local.txt\":3,\"src/ConstitutionPrototype.sol\":31,\"src/ImdLaunchProof.sol\":71,\"src/LocalFixtures.sol\":45,\"src/QuorumBoundCore.sol\":40,\"src/QuorumCodeCatalog.sol\":24,\"src/QuorumCoreCode.sol\":49,\"src/QuorumCreate.sol\":16,\"src/QuorumIssuanceHook.sol\":259,\"src/QuorumLaunchToken.sol\":30,\"src/QuorumLocalSystem.sol\":46,\"src/QuorumMembership.sol\":299,\"src/QuorumOperatingAccount.sol\":95,\"src/QuorumRevenueSink.sol\":26,\"src/QuorumToken.sol\":18,\"src/QuorumTreasury.sol\":355,\"src/QuorumWork.sol\":523,\"src/QuotaPrototype.sol\":144,\"src/RestrictedPoolPrototype.sol\":189,\"src/WorkCyclePrototype.sol\":232,\"test/compatibility/FixedTokenBindingPositive.t.sol\":237,\"test/compatibility/GovernancePoolPositive.t.sol\":408,\"test/positive/AgendaResponsePositive.t.sol\":83,\"test/positive/ExternalInterfaces.sol\":78,\"test/positive/GovernancePositive.t.sol\":286,\"test/positive/ImdFactoryPositive.t.sol\":424,\"test/positive/NormalIntegrated.t.sol\":242,\"test/positive/OrganizationQuotaPositive.t.sol\":53,\"test/positive/RecusalPositive.t.sol\":279,\"test/positive/RevenueAndScalePositive.t.sol\":149,\"tools/build_external_fixtures.py\":34,\"tools/constitution_pack.py\":36,\"tools/issuance_lab.py\":247,\"tools/mainnet_fork_positive.py\":139,\"tools/prepare_issuance.py\":111,\"tools/run_acceptance.py\":20,\"tools/seed_parameters.py\":67,\"tools/verify_candidate.py\":52},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":11720,"exitCode":0,"name":"slither","output":"[high/high] arbitrary-send-erc20 at src/QuorumMembership.sol:194: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-233) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#217)\n[high/medium] reentrancy-balance at src/QuorumOperatingAccount.sol:55: Reentrancy in QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89):\n[high/medium] reentrancy-balance at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[high/medium] reentrancy-eth at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[medium/medium] divide-before-multiply at src/QuotaPrototype.sol:116: QuotaPrototype.unlocked(address) (src/QuotaPrototype.sol#116-121) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/QuorumTreasury.sol:251: QuorumTreasury._finish(address,uint256,uint256,uint256,uint256,uint256) (src/QuorumTreasury.sol#251-264) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/QuorumTreasury.sol:161: QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/QuorumMembership.sol:235: QuorumMembership.respond(uint256,uint256,bytes32,uint256,string) (src/QuorumMembership.sol#235-254) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/QuorumMembership.sol:194: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-233):\n[medium/medium] reentrancy-no-eth at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[medium/medium] reentrancy-no-eth at src/RestrictedPoolPrototype.sol:131: Reentrancy in AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[medium/medium] reentrancy-no-eth at src/QuorumTreasury.sol:266: Reentrancy in QuorumTreasury.claimAllowance(uint256,uint256) (src/QuorumTreasury.sol#266-274):\n[medium/medium] reentrancy-no-eth at src/QuorumIssuanceHook.sol:204: Reentrancy in QuorumSwapRouter.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/QuorumIssuanceHook.sol#204-221):\n[medium/medium] uninitialized-local at src/QuorumWork.sol:488: QuorumWork.expire(uint256).released (src/QuorumWork.sol#488) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:71: QuorumMembership.registrationCount(uint256).count (src/QuorumMembership.sol#71) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumWork.sol:38: QuorumWork.agendaRevisionAt(uint256).lo (src/QuorumWork.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/RestrictedPoolPrototype.sol:38: RestrictedPoolPrototype.constructor(IPoolManager,address,address,address,address,address).p (src/RestrictedPoolPrototype.sol#38) is a local variable never initialized\n[medium/medium] uninitialized-local at src/WorkCyclePrototype.sol:209: WorkCyclePrototype.expire(uint256).released (src/WorkCyclePrototype.sol#209) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:44: ImdLaunchProof.resolve(address,uint64,address,address).foundHook (src/ImdLaunchProof.sol#44) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ImdLaunchProof.sol:43: ImdLaunchProof.resolve(address,uint64,address,address).foundToken (src/ImdLaunchProof.sol#43) is a local variable never initialized\n[medium/medium] uninitialized-local at src/QuorumMembership.sol:206: QuorumMembership.accept(address,uint256,bytes32).carried (src/QuorumMembership.sol#206) is a local variable never initialized\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by ImdLaunchProof.resolve(seeder,launchNumber,project,address(this)) (src/QuorumIssuanceHook.sol#102)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:244: QuorumSwapRouter._settle(Currency,int128,bool,uint256) (src/QuorumIssuanceHook.sol#244-257) ignores return value by manager.settle() (src/QuorumIssuanceHook.sol#248)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by (None,None,None,recipient) = IFactoryFeeSource(seeder).positionOf(launchNumber) (src/QuorumIssuanceHook.sol#103)\n[medium/medium] unused-return at src/RestrictedPoolPrototype.sol:170: AuthenticatedRouterPrototype._settle(Currency,int128,bool,uint256) (src/RestrictedPoolPrototype.sol#170-187) ignores return value by manager.settle() (src/RestrictedPoolPrototype.sol#178)\n[medium/medium] unused-return at src/QuorumIssuanceHook.sol:101: QuorumIssuanceHook.collectPlatformFees(uint64) (src/QuorumIssuanceHook.sol#101-107) ignores return value by IFactoryFeeSource(seeder).claimFees(launchNumber) (src/QuorumIssuanceHook.sol#105)\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).p (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).primary_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).h (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).i (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).h (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumOperatingAccount.sol:37: QuorumOperatingAccount.constructor(address,address).project_ (src/QuorumOperatingAccount.sol#37) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).t (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumIssuanceHook.sol:192: QuorumSwapRouter.constructor(IPoolManager,address,address,address,QuorumTreasury).p (src/QuorumIssuanceHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/QuorumTreasury.sol:94: QuorumTreasury.constructor(IERC20Local,QuorumMembership,address,address).reporter (src/QuorumTreasury.sol#94) lacks a zero-check on :\n[low/medium] missing-zero-check at src/RestrictedPoolPrototype.sol:121: AuthenticatedRouterPrototype.constructor(IPoolManager,address,address,address,address).i (src/RestrictedPoolPrototype.sol#121) lacks a zero-check on :\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: (ok,result) = c.target.call{value: c.value}(c.data) (src/QuorumOperatingAccount.sol#74)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(IApproveAsset(a_scope_2.asset).approve(a_scope_2.spender,0),clear approval) (src/QuorumOperatingAccount.sol#81)\n[low/medium] calls-loop at src/QuorumWork.sol:320: QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336) has external calls inside a loop: this.appendEntry(id) (src/QuorumWork.sol#327)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(a.amount <= IERC20Local(a.asset).balanceOf(address(this)),approval balance) (src/QuorumOperatingAccount.sol#60)\n[low/medium] calls-loop at src/QuorumOperatingAccount.sol:55: QuorumOperatingAccount.execute(OperatingPlan) (src/QuorumOperatingAccount.sol#55-89) has external calls inside a loop: require(bool,string)(IApproveAsset(a.asset).approve(a.spender,0) && IApproveAsset(a.asset).approve(a.spender,a.amount),approve) (src/QuorumOperatingAccount.sol#61-64)\n[low/medium] calls-loop at src/QuorumTreasury.sol:219: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#219-249) has external calls inside a loop: membership.qualified(id,week) (src/QuorumTreasury.sol#234)\n[low/medium] calls-loop at src/QuorumTreasury.sol:219: QuorumTreasury.settleWeek(uint256,uint256) (src/QuorumTreasury.sol#219-249) has external calls inside a loop: id = membership.responderAt(week,index) (src/QuorumTreasury.sol#233)\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-benign at src/QuorumMembership.sol:194: Reentrancy in QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-233):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:197: Reentrancy in QuorumTreasury._syncOperating() (src/QuorumTreasury.sol#197-201):\n[low/medium] reentrancy-benign at src/QuorumTreasury.sol:321: Reentrancy in QuorumTreasury.executeOperating(OperatingPlan) (src/QuorumTreasury.sol#321-354):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-benign at src/WorkCyclePrototype.sol:95: Reentrancy in WorkCyclePrototype.depositRevenue(uint256) (src/WorkCyclePrototype.sol#95-102):\n[low/medium] reentrancy-benign at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-events at src/QuorumWork.sol:422: Reentrancy in QuorumWork.accept(uint256) (src/QuorumWork.sol#422-431):\n[low/medium] reentrancy-events at src/QuorumWork.sol:476: Reentrancy in QuorumWork._expire(uint256,uint256) (src/QuorumWork.sol#476-483):\n[low/medium] reentrancy-events at src/QuorumTreasury.sol:161: Reentrancy in QuorumTreasury._deposit(address,uint256) (src/QuorumTreasury.sol#161-167):\n[low/medium] reentrancy-events at src/RestrictedPoolPrototype.sol:150: Reentrancy in AuthenticatedRouterPrototype.unlockCallback(bytes) (src/RestrictedPoolPrototype.sol#150-168):\n[low/medium] reentrancy-events at src/QuorumWork.sol:392: Reentrancy in QuorumWork.fund(uint256) (src/QuorumWork.sol#392-403):\n[low/medium] reentrancy-events at src/QuorumWork.sol:433: Reentrancy in QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441):\n[low/medium] reentrancy-events at src/QuorumWork.sol:306: Reentrancy in QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317):\n[low/medium] reentrancy-events at src/QuorumWork.sol:320: Reentrancy in QuorumWork.prepareBallot(uint256,uint256) (src/QuorumWork.sol#320-336):\n[low/medium] reentrancy-events at src/QuorumIssuanceHook.sol:223: Reentrancy in QuorumSwapRouter.unlockCallback(bytes) (src/QuorumIssuanceHook.sol#223-242):\n[low/medium] timestamp at src/QuorumMembership.sol:173: QuorumMembership.authorize(address,uint256) (src/QuorumMembership.sol#173-181) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:170: WorkCyclePrototype.submit(uint256,string) (src/WorkCyclePrototype.sol#170-180) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:154: QuorumMembership.requireAgent(uint256,address) (src/QuorumMembership.sol#154-156) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:57: QuorumMembership._delta(uint256,int256) (src/QuorumMembership.sol#57-61) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:182: WorkCyclePrototype.acceptWork(uint256) (src/WorkCyclePrototype.sol#182-192) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:138: QuorumMembership.live(uint256) (src/QuorumMembership.sol#138-144) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:485: QuorumWork.expire(uint256) (src/QuorumWork.sol#485-522) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:444: QuorumWork.resolveAcceptance(uint256) (src/QuorumWork.sol#444-467) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:216: QuorumWork.proposeSuspension(uint256,address,string) (src/QuorumWork.sol#216-243) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:158: QuorumMembership._end(uint256) (src/QuorumMembership.sol#158-171) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:104: WorkCyclePrototype.propose(address,address,uint256,uint256,string) (src/WorkCyclePrototype.sol#104-126) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:235: QuorumMembership.respond(uint256,uint256,bytes32,uint256,string) (src/QuorumMembership.sol#235-254) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:360: QuorumWork.vote(uint256,uint256,bool) (src/QuorumWork.sol#360-374) uses timestamp for comparisons\n[low/medium] timestamp at src/RestrictedPoolPrototype.sol:131: AuthenticatedRouterPrototype.swap(PoolKey,bool,uint128,uint256,uint256,uint160,uint256) (src/RestrictedPoolPrototype.sol#131-148) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:279: QuorumMembership.requestExit(uint256) (src/QuorumMembership.sol#279-287) uses timestamp for comparisons\n[low/medium] timestamp at src/WorkCyclePrototype.sol:137: WorkCyclePrototype.vote(uint256,bool,bool) (src/WorkCyclePrototype.sol#137-155) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumMembership.sol:265: QuorumMembership.registeredAtStart(uint256,uint256) (src/QuorumMembership.sol#265-269) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:433: QuorumWork.claim(uint256) (src/QuorumWork.sol#433-441) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:376: QuorumWork.threshold(uint256) (src/QuorumWork.sol#376-381) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:306: QuorumWork.executeOperation(uint256,OperatingPlan) (src/QuorumWork.sol#306-317) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:383: QuorumWork._approved(uint256) (src/QuorumWork.sol#383-390) uses timestamp for comparisons\n[low/medium] timestamp at src/QuorumWork.sol:255: QuorumWork.exec","passed":false}],"detail":"static analysis found arbitrary-send-erc20 at src/QuorumMembership.sol:194: QuorumMembership.accept(address,uint256,bytes32) (src/QuorumMembership.sol#194-233) uses arbitrary from in transferFrom: require(bool,string)(token.transferFrom(a.owner,address(this),stakeAmount),deposit) (src/QuorumMembership.sol#217)","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"e34649765534d9ee4d6f35ea701028230672d252353582280487d1f70599dc95","verifiedTreeHash":"016e33054ddab63be8d1002d7b9d7d2282db5ecb","verifierVersion":"0.1.0+560ab6a2"}]}