{"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":"97ffed4a-5595-4cee-8158-ae2f04931bb4","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"cdbb2a3909a44965e17a8f0684efc917e1c0693c5a9ad378e6f27b02c8dabd68","dependsOn":["build_contract_project"],"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":"accepted"},{"acceptedSubmissionHash":"af10c94583daddb34435ec9390a455cd739c8dfed068cbb8be4d337f6eeb7c9f","dependsOn":["build_contract_project"],"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":"accepted"},{"acceptedSubmissionHash":"e4d03210e01c043f8d2bca5087ac6706c08994d0286578c1f8ea28a4301caf74","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"6cbfe12eac3ab84b2e04be7b73b7eae9f9d974debb1a119f132da6a739714089","dependsOn":["build_contract_project"],"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":"accepted"},{"acceptedSubmissionHash":"42ca721c019b83cef8f3aac14851485bb35016a2c6069e8aa604e10303530533","dependsOn":["build_contract_project"],"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":"accepted"},{"acceptedSubmissionHash":"74e84f8e70c53bcb228e9931454cb41e698be08473a273664dfec6339bb359a7","dependsOn":[],"execution":{"mustProduce":["src/LaunchToken.sol"],"network":false,"profile":"foundry","requires":[],"skillHash":"47381b166d1f406a34f0ebdc740ee21bc0383e56e7ad9084b26abf1bf7570904","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"47381b166d1f406a34f0ebdc740ee21bc0383e56e7ad9084b26abf1bf7570904","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"ec7cc59806b3ed9d4736519f80be7a057742d59c8b8021579dfc6dec8dba7fb8","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"8c24b15136b3abb090da1d2d7d7c7458b436ac45a8ec6523546b2d7ec1d5cc55","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Frogs of the Swarm turns every IMD agent into a frog that levels up as it does real work, and lets token holders vote for Frog of the Week.\n\nToken: name Frogs of the Swarm, symbol FROGS.\n\nContract: one contract called FrogOfTheWeek. Weeks run 7 days from deployment. During a week, anyone can vote for an IMD agent by its number (0 to 1999) by locking FROGS in the contract; more FROGS locked means more votes. After the week ends, anyone can call finalize() to record the agent with the most votes as that week's Frog of the Week, and voters can withdraw all their locked FROGS. The contract stores every week's winner and vote totals, and emits events for votes, winners and withdrawals. No owner or admin; all numbers are fixed.\n\nArt: four original images of the same cartoon frog character at four levels: Tadpole, Froglet, Frog and King Frog (with a small crown). Original design only, not based on Pepe or any existing character, brand or real person. Plain background so the site can tint each agent's frog a different color.\n\nWebsite: a public one-page website that reads live agent data from the IMD public API at https://api.imd.fun/swarm. It shows every agent as a frog card: the frog image for its level (Tadpole under 100 accepted jobs, Froglet 100 to 999, Frog 1,000 to 1,999, King Frog 2,000 or more), tinted a unique color based on its agent number, with the agent number, accepted jobs, acceptance rate, whether it is online, and when it last worked. Cards are sorted by accepted jobs, with a search box to find an agent by number. At the top: the current Frog of the Week with a crown, this week's vote leaderboard, and a countdown to the end of the week. A connected wallet on Sepolia can see its FROGS balance, vote for an agent by entering an amount of FROGS and pressing \"Vote\", withdraw its FROGS after the week ends, and press \"Crown the winner\" to call finalize().","parentJobId":null,"planHash":"c5cc7f720c99e181435f7359c7b27f8aaf3ea58467822e1e09aceca74a69fc5d","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"97ffed4a-5595-4cee-8158-ae2f04931bb4","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-618-frogs-swarm-turns-every"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51018","feedbackHash":"567e543d4c553835c9754a4b36e3ba5bb9570f53c219ee5803a7dc042b624baf","nodeKey":"audit_economics","submissionHash":"cdbb2a3909a44965e17a8f0684efc917e1c0693c5a9ad378e6f27b02c8dabd68","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51331","feedbackHash":"ed7a0705f57545b587bb7ee441a17208dc1c882f584bc8e3400f55b304d7999e","nodeKey":"audit_flow","submissionHash":"af10c94583daddb34435ec9390a455cd739c8dfed068cbb8be4d337f6eeb7c9f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50974","feedbackHash":"1e717c843627ca3f30479bfc2f27566c259f0d2150e5c1eab76cf6d1e007454e","nodeKey":"audit_judge","submissionHash":"e4d03210e01c043f8d2bca5087ac6706c08994d0286578c1f8ea28a4301caf74","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50904","feedbackHash":"62b513bcbc6f9ee78dbc9bd69d75ca1a4ab5172c9f4ffbbbcb48e649248daf3f","nodeKey":"audit_math","submissionHash":"6cbfe12eac3ab84b2e04be7b73b7eae9f9d974debb1a119f132da6a739714089","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50955","feedbackHash":"2fdaccf3f653f033937987270463872a31d2894ad18a208f558391f090347e6a","nodeKey":"audit_permissions","submissionHash":"42ca721c019b83cef8f3aac14851485bb35016a2c6069e8aa604e10303530533","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50957","feedbackHash":"7de4c543a688fe4b01a97a7fd5066e623a7d89d036fd6919fbd3734b9b1761b8","nodeKey":"build_contract_project","submissionHash":"74e84f8e70c53bcb228e9931454cb41e698be08473a273664dfec6339bb359a7","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51300","feedbackHash":"e473d1a1ba863ad73c4cd3e0af6fea8405f33404d720924d0406779217bfc991","nodeKey":"manifest","submissionHash":"ec7cc59806b3ed9d4736519f80be7a057742d59c8b8021579dfc6dec8dba7fb8","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50957","feedbackHash":"b2f89640b6772b08c9e0f502ad72c62c627af65e0228f9da33fdacb2187d8c47","nodeKey":"write_foundry_tests","submissionHash":"8c24b15136b3abb090da1d2d7d7c7458b436ac45a8ec6523546b2d7ec1d5cc55","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"1889e2aa2386d6a2700031eeb9d27babee9bde190e0c6606f942abe001ea027b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3c7630b22a73c1fb","findings":[],"hash":"42ca721c019b83cef8f3aac14851485bb35016a2c6069e8aa604e10303530533","nodeId":"a1e31619-7db2-422c-ad9e-338aa17b5e3f","outcome":"completed","summary":"The review is complete. The findings file is written and no source files were changed.\n\n**Result: no defects in the assigned area.** `.imd-findings.json` holds an empty findings list and ten coverage rows, one for each of the six listed entry points plus four invariant and lead rows.\n\n**What I checked (Access Control, Trust Gap, Asymmetry):**\n- **Permission map.** There is no owner, role, initializer, proxy, receive or fallback. The constructor stores only the token address and start time, and moves no supply. The runtime has no delegatecall or selfdestruct.\n- **Confused deputy.** `vote` always pulls from `msg.sender`, so a relay contract or another holder cannot spend someone else's approval. Probed with a relay: it reverts with TokenTransferFailed.\n- **Withdrawal ownership.** `withdraw` pays only the caller's own `locked[week][msg.sender]` to the caller. Another address or a relay gets NothingToWithdraw.\n- **Asymmetry.** Vote and withdraw are mirror writes on `locked` and `totalLocked`. Both check balances before and after the token call. Historic vote totals and winners stay untouched by withdrawals, as the brief requires. The cached leader matched a full-scan model with dense ties and lowest-id tie-break across 256 fuzz runs.\n- **Boundaries.** `finalize` and `withdraw` reject at exactly one second before week end and succeed at week end. A second `finalize` for an unended week reverts.\n- **Slither leads.** The reentrancy-balance reports are not findings. One guard covers all three entry points, state settles before the token call, and only the event follows it. The timestamp leads are the intended week clock.\n\n**Trust assumption recorded, not a defect.** A vote cast one second before the week ends can be withdrawn one second later and re-voted in the next week, so late voters pay almost no capital cost. Same-transaction vote-then-withdraw is impossible. This follows from the requested refundable, token-weighted design and is documented in the README.\n\n**Outside the area.** I read the website code for severe issues and found none worth reporting. The finalize backlog is handled with explicit \"finalize oldest weeks first\" copy, and the champion panel reads the last finalized week.\n\nThe scratch probes under `test/scratch/` were removed after running, and the working tree is back to clean apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":630117,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":13664,"runtime":"claude","turns":31,"wallClockMs":211811}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c4f696e22e7a36f7","findings":[],"hash":"6cbfe12eac3ab84b2e04be7b73b7eae9f9d974debb1a119f132da6a739714089","nodeId":"978363f4-14b7-4d72-a199-7a3bcaf4b053","outcome":"completed","summary":"Wrote [.imd-findings.json](/root/.identitymd/work/97ffed4a-5595-4cee-8158-ae2f04931bb4/978363f4-14b7-4d72-a199-7a3bcaf4b053/.imd-findings.json): no substantiated defects, with all six entry points and eight invariants covered.\n\nPassed 46 Foundry tests, 22 JavaScript tests, and additional arithmetic/boundary checks. Protected deployment checks were inspected but not executed.","treeHash":null,"usage":{"cachedInputTokens":841984,"inputTokens":100189,"model":"gpt-6-astra","outputTokens":7878,"runtime":"codex","turns":6,"wallClockMs":375814}},{"artifacts":[],"attempt":1,"bundleHash":"e02af713ae6fdb0f760d22547d450aeaab6106d7e25dc0b81f91e4980058349f","device":"0256823ae36e7900","findings":[],"hash":"74e84f8e70c53bcb228e9931454cb41e698be08473a273664dfec6339bb359a7","nodeId":"74717f06-610e-489f-8b6b-801353525253","outcome":"completed","summary":"Implemented the FROGS token, voting contract, four original frog illustrations, live-data website, wallet flows, tests, and documentation.\n\nVerified:\n\n- `forge build`, `forge test` — 45 passing — and `forge fmt --check`\n- 22 website tests and 2 local chain integration tests\n\nDeployment and hosting remain: configure the Sepolia address in `web/config.js` and publish `web/`. Instructions are in [README.md](/home/imd-worker/.identitymd/work/97ffed4a-5595-4cee-8158-ae2f04931bb4/74717f06-610e-489f-8b6b-801353525253/README.md).\n\nIdle agents show “status unknown” because the API lacks individual online flags.","treeHash":"a9cd49980b68e23069e30fe50d9e6e9c1a365627","usage":{"cachedInputTokens":3411712,"inputTokens":89938,"model":"gpt-6-astra","outputTokens":22765,"runtime":"codex","turns":8,"wallClockMs":1151944}},{"artifacts":[],"attempt":1,"bundleHash":"b1edc26c4889d38f03869d939d7d6291d4c2d2192d1d31196d7e56bb61bc1e8a","device":"0256823ae36e7900","findings":[],"hash":"8c24b15136b3abb090da1d2d7d7c7458b436ac45a8ec6523546b2d7ec1d5cc55","nodeId":"8ee1475c-3eac-4817-930c-a40deee417aa","outcome":"completed","summary":"Added 26 tests covering failure paths, boundaries, rollback, and reentrancy. Strengthened custody invariants across 16,384 randomized calls.\n\nOffline `forge build` and `forge test` passed: **71 tests, zero failures**.\n\nChanges are confined to `test/`. No confirmed contract defects found.","treeHash":"ea22aa18aaa84dd938db4609cfbe1681d2ef4d32","usage":{"cachedInputTokens":1999744,"inputTokens":71203,"model":"gpt-6-astra","outputTokens":10809,"runtime":"codex","turns":7,"wallClockMs":725898}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d2d5a117dd72f6b4","findings":[{"citation":"resolved","description":"The brief says that after a week ends \"voters can withdraw all their locked FROGS\". The contract keys deposits by week (`locked[week][voter]`) and `withdraw(week)` refunds exactly one week. There is no on-chain enumeration of the weeks in which a caller still holds a balance, and the website's withdraw panel (web/app.js, `withdraw-week` input defaulting to the week that just ended) reads `locked(week, account)` for one typed week only. A voter who voted in weeks 1 and 2 (1-based) and then uses the site in week 3 sees only the week-2 balance by default; the week-1 deposit stays in the contract until the voter remembers it or indexes the `Voted` events. Funds are never lost or redirected (anyone can still call `withdraw(0)` later and there is no expiry), so this is a usability/spec-interpretation gap, not a safety defect. The README documents the per-week behaviour. Possible fixes that preserve the design: expose a view (e.g. a small `lockedWeeks(address)` list or `firstUnclaimedWeek`) or have the site scan `locked(w, account)` for w in [0, currentWeek) and offer one withdraw button per non-zero week.","line":110,"path":"src/FrogOfTheWeek.sol","reproduction":"Deploy LaunchToken and FrogOfTheWeek at t0. Voter A approves and calls vote(0, 5, 10e18) at t0, then vote(1, 6, 20e18) at t0+7d. At t0+14d A calls withdraw(1): locked[1][A] -> 0, A receives 20e18. Expected (per brief wording): all of A's locked FROGS are back. Actual: locked[0][A] is still 10e18 and totalLocked is 10e18; a second call withdraw(0) is required. In the site at t0+14d the withdraw box pre-fills week 2 (= contract week 1) and displays only that balance; nothing lists the outstanding week-1 (contract week 0) deposit.","severity":"info","snippet":"    function withdraw(uint256 week) external nonReentrant {\n        if (week >= currentWeek()) revert WeekNotEnded(week);\n        uint256 amount = locked[week][msg.sender];","title":"Refunds are per-week; a voter with deposits in several ended weeks must discover and withdraw each week separately, and the site only inspects one week at a time"}],"hash":"af10c94583daddb34435ec9390a455cd739c8dfed068cbb8be4d337f6eeb7c9f","nodeId":"b86c58f1-b49e-4139-9823-59ecc51b8226","outcome":"completed","summary":"The review is complete. The findings file is written and validated, the scratch tests are removed, and the working tree is otherwise untouched.\n\n**Outcome: no safety defect found in the Solidity control flow.** The only entry in `.imd-findings.json` is one info-level note. All six listed entry points have coverage rows, plus five rows for invariants, deployment, periphery and the website flow.\n\n**What I checked, against the Execution Trace, Periphery and First Principles guides:**\n\n- **vote**: all three inputs traced. Week must match, agent bounded below the sentinel, zero amount rejected. Every storage effect precedes the token call and reverts with it. The incremental leader cache was fuzzed against a full 2000-slot tally with forced ties and matched every run.\n- **finalize**: no inputs, no external calls, cannot get stuck. Votes for an ended week are frozen because only the current week accepts votes, so a late or backlogged finalize records the same winner.\n- **withdraw**: caller-only ledger, liability cleared before transfer, both-side balance checks, failed transfers stay claimable, no expiry.\n- **Periphery**: the raw-call helper rejects false, short and malformed returns and accepts empty returns. The reentrancy flag is restored on every path. The token has no hooks, fees, mint or selfdestruct, so the Slither reentrancy and Aderyn unsafe-ERC20 leads do not reach a defect.\n- **Deployment**: the constructor grants no roles and moves no supply, matching the protected floor test.\n- **Website**: the live `/swarm` response matches the adapter's expected shape. Unit tests and the Anvil integration test pass locally.\n\n**The one info finding** is a usability gap, not a loss. Refunds are keyed per week, so a voter with deposits in two ended weeks needs two withdraw calls, and the site only shows the balance for one typed week. Funds are never at risk and the README documents the behaviour. I included it because the brief says voters \"withdraw all their locked FROGS\", and the reproduction gives the exact state where that reading diverges.\n\n**Not reached**: nothing in scope was left unexamined. I did not run Slither or Mythril, since neither is provided here.","treeHash":null,"usage":{"cachedInputTokens":1105475,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":23298,"runtime":"claude","turns":41,"wallClockMs":383711}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"30a6c1a419ef4f9c","findings":[],"hash":"cdbb2a3909a44965e17a8f0684efc917e1c0693c5a9ad378e6f27b02c8dabd68","nodeId":"c94e938d-4385-483d-a488-afbee5f9e1a8","outcome":"completed","summary":"The review is complete. The findings file is written and valid, and no tracked file was changed.\n\n**Outcome: no reproducible defects in the Economic Security, Invariant or Flow Gap areas.** The findings list in `.imd-findings.json` is empty, with 11 coverage rows: one for each of the six listed entry points, plus the invariants and economic seams I checked.\n\n**What I verified, beyond reading the code against the three guides:**\n- A scratch differential model (256 fuzz runs, six weeks, all 2000 agent ids, 1-wei and whole-token votes, forced ties, interleaved refunds from earlier weeks, a finalization backlog, and direct token donations) confirmed conservation and that the cached leader always equals the lowest id holding the maximum. The shipped suite only models three agent ids and one week for the leader check, so this closes that gap.\n- Withdraw-then-finalize and finalize-then-withdraw produce identical records, and the leader cache survives overtake and re-tie sequences.\n- Every inflow and outflow is exact-delta checked, so the contract balance never falls below outstanding liabilities with the LaunchToken, and no voter's refund can be starved by another.\n- The website flow re-reads the week before approving and before voting, approves the exact amount, and maps 1-based display weeks to 0-based contract weeks correctly for withdrawals and champion labels.\n\n**Static-analysis leads rejected:** the slither reentrancy lines are guarded by a lock covering all three state-changing functions with effects before the token call; the LaunchToken has no callbacks; the aderyn unsafe-ERC20 line is handled by the custom return-value check.\n\n**Accepted design points I did not report as defects,** since the brief and README state them: tokens voted in the last second of a week are refundable one second later and can vote again immediately, so the lock imposes near-zero cost on last-block voters; direct donations are stranded; one withdraw call is needed per deposited week and one finalize call per backlog week.","treeHash":null,"usage":{"cachedInputTokens":1451854,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":26562,"runtime":"claude","turns":37,"wallClockMs":383561}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"98b4506bef931d13","findings":[{"citation":"resolved","description":"Merged from audit_flow (reproduced). The brief says that after a week ends 'voters can withdraw all their locked FROGS'. Deposits are keyed as locked[week][voter] and withdraw(week) refunds exactly one week's balance. Nothing on-chain enumerates the weeks in which a caller still holds a balance, and the website withdraw panel (web/app.js, the 'withdraw-week' input, pre-filled once with the week that just ended) reads locked(week, account) for a single typed week. A voter who voted in two consecutive weeks and withdraws from the default week leaves the earlier deposit in the contract until they remember it or index the Voted events. No funds are lost or redirectable and there is no expiry, so this is a usability and spec-wording gap, documented in README.md ('Multiple ended weeks require one withdrawal per week'). Suggested fix that keeps the design: have the site scan locked(w, account) for w in [0, currentWeek) and offer one withdraw button per non-zero week, or add a small view listing the caller's unclaimed weeks.","line":112,"path":"src/FrogOfTheWeek.sol","reproduction":"Scratch Foundry test run on this tree (passes, demonstrating the behaviour): deploy LaunchToken and FrogOfTheWeek at t0 = 1_000_000; give voter 100e18 FROGS and an unlimited approval. voter calls vote(0, 5, 10e18) at t0, then vote(1, 6, 20e18) at t0 + 7 days. At t0 + 14 days voter calls withdraw(1). Expected per brief wording: all of voter's locked FROGS are back (balance 100e18). Actual: voter balance is 90e18, locked(0, voter) == 10e18 and totalLocked() == 10e18; a second call withdraw(0) is required to reach 100e18. In the site, at t0 + 14 days the withdraw box pre-fills display week 2 (contract week 1) and shows only that balance.","severity":"info","snippet":"        uint256 amount = locked[week][msg.sender];","title":"Withdrawals are per week: a voter with deposits in several ended weeks must call withdraw(week) once per week, and the site shows only one typed week"},{"citation":"resolved","description":"The brief says 'After the week ends, anyone can call finalize() to record the agent with the most votes as that week's Frog of the Week'. finalize() takes no week argument and always settles nextWeekToFinalize, advancing the cursor by one. If k earlier weeks were never finalized (for example empty weeks nobody paid gas for), the first call after a contested week ends records an empty older week as NO_WINNER, and k+1 calls are needed before the contested week's winner is stored. The website reflects this ('Week N is ready. Finalize oldest weeks first.') but its success message after one press says 'Week finalized. The recorded winner and vote totals are permanent.' regardless of which week was settled, and the champion panel keeps showing the last finalized week. Votes, withdrawals and future weeks are never blocked, and the sequential design is documented in README.md and launch.json notes, so this is a design-versus-wording note rather than a safety defect. If the author wants the brief's literal behaviour, a finalize(week) that settles any ended, unfinalized week (the cached leader makes this constant cost) would do it without changing any other rule.","line":98,"path":"src/FrogOfTheWeek.sol","reproduction":"Scratch Foundry test run on this tree (passes, demonstrating the behaviour): deploy at t0 = 1_000_000. Warp to t0 + 3*7 days (weeks 0,1,2 passed with no votes). voter calls vote(3, 7, 10e18). Warp to t0 + 4*7 days so week 3 has ended. Call finalize(). Expected per brief wording: weekInfo(3) reports finalized == true, winner == 7. Actual: weekInfo(3) reports finalized == false, winner == 2000 (NO_WINNER sentinel) and nextWeekToFinalize() == 1; three more finalize() calls are required before weekInfo(3) returns (finalized == true, winner == 7), after which a fifth call reverts WeekNotEnded(4).","severity":"info","snippet":"        uint256 week = nextWeekToFinalize;","title":"finalize() records the oldest pending week, not the week that just ended: after idle weeks, 'Crown the winner' must be pressed once per skipped week before the real winner is recorded"}],"hash":"e4d03210e01c043f8d2bca5087ac6706c08994d0286578c1f8ea28a4301caf74","nodeId":"52400b53-0680-4bf6-a4aa-2eec89a66d6f","outcome":"completed","summary":"The review is complete. The findings file is in place at the repository root and no other tracked or untracked path was changed.\n\n**Outcome: no safety defect found.** The contract and token hold on every entry point, and the two items I kept are informational wording gaps against the brief, not loss-of-funds or breakage.\n\n**What I verified**\n\n- Full Foundry suite from a clean offline build: 71 tests green, including the 256-run stateful invariant campaign that checks custody equals liabilities plus donations.\n- Each of the six listed entry points traced for guards, effects ordering, failure paths and reentrancy. Effects precede the token call on both deposit and refund paths, both are behind a guard, and exact balance deltas are checked. The leader cache is a correct argmax with lowest-id tie-break.\n- Slither's reentrancy leads do not reproduce: the token is the plain immutable LaunchToken, state is settled before the call, and the guard covers all three functions. Aderyn's unsafe-ERC20 lead is handled by the low-level call wrapper that accepts empty or true returns only.\n- Manifest and constructor: `$token` fills the only address argument, the constructor grants no role and moves no supply, pool fields are the required defaults.\n- Website: all 17 ABI selectors match `cast sig`, the live swarm API shape matches the normaliser, and the 22 node tests pass.\n\n**Findings kept (both info)**\n\n1. **Per-week withdrawals.** The audit_flow finding reproduced exactly as stated: a voter with deposits in two ended weeks gets only one week back per call, and the site inspects one typed week. Funds are never lost.\n2. **Sequential finalization.** After idle weeks, one press of \"Crown the winner\" records an empty older week, and the contested week needs further calls. This is documented, but it diverges from the brief's literal wording and the site's success message does not say which week settled.\n\nBoth were reproduced with a scratch Foundry test whose exact inputs and expected-versus-actual values are in the reproduction fields. The coverage record answers all six entry points plus three invariant rows.","treeHash":null,"usage":{"cachedInputTokens":769249,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":13512,"runtime":"claude","turns":21,"wallClockMs":280443}},{"artifacts":[],"attempt":1,"bundleHash":"fcf0b5a8733d485e22ac5c13500cb39564419509c28835a32e9affd33ef6a644","device":"05778e691c371384","findings":[],"hash":"ec7cc59806b3ed9d4736519f80be7a057742d59c8b8021579dfc6dec8dba7fb8","nodeId":"a6328fa0-8999-417d-a7ff-02ee29e3aaea","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/97ffed4a-5595-4cee-8158-ae2f04931bb4/a6328fa0-8999-417d-a7ff-02ee29e3aaea/launch.json) matching the accepted token and `FrogOfTheWeek($token)` constructor.\n\nSchema, manifest constraints, metadata and compiled ABI checks passed. `forge build` succeeded with existing lint warnings; `forge test` passed all 45 tests.\n\nOnly `launch.json` is changed for submission.","treeHash":"1c2f04f218971129fae6b461c21c32279904388b","usage":{"cachedInputTokens":165504,"inputTokens":22102,"model":"gpt-6-astra","outputTokens":2438,"runtime":"codex","turns":3,"wallClockMs":119594}}],"verification":[{"checks":[{"durationMs":1860,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.74s\nCompiler run successful!\nwarning[reentrancy-no-eth]: external call can be reentered before `entered` is updated\n    ╭▸ src/FrogOfTheWeek.sol:150:47\n    │\n150 │         (bool success, bytes memory result) = address(token).call(data);\n    │                                               ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/FrogOfTheWeek.sol:91:9\n   │\n91 │         emit Voted(week, msg.sender, agentId, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n   ╭▸ src/FrogOfTheWeek.sol:90:13\n   │\n90 │         if (token.balanceOf(address(this)) != beforeBalance + amount) revert UnexpectedTokenBalance();\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/FrogOfTheWeek.sol:124:9\n    │\n124 │         emit Withdrawn(week, msg.sender, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:121:13\n    │\n121 │             token.balanceOf(address(this)) + amount != beforeBalance\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:122:20\n    │\n122 │                 || token.balanceOf(msg.sender) != beforeRecipient + amount\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\n","passed":true},{"durationMs":1764,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/AdversarialToken.t.sol:AdversarialTokenTest\n[PASS] testDepositCallbackCannotReenterVote() (gas: 5188121)\n[PASS] testFalseReturningDepositRollsBackTokenAndVotingState() (gas: 5053060)\n[PASS] testFeeOnDepositRejectsUnderfundedVotes() (gas: 5054064)\n[PASS] testFeeOnWithdrawalRollsBackAndDepositRemainsClaimable() (gas: 451323)\n[PASS] testNoReturnTokenCanDepositAndWithdraw() (gas: 345623)\n[PASS] testPropagatedReentrancyFailureRestoresLockAndTransfer() (gas: 547069)\n[PASS] testRevertingDepositRollsBackAndGuardResets() (gas: 5269039)\n[PASS] testShortMalformedReturnRollsBack() (gas: 5052606)\n[PASS] testWithdrawalCallbackCannotFinalizeOutOfOrderEvents() (gas: 498618)\n[PASS] testWithdrawalCallbackCannotReenterWithdrawal() (gas: 439166)\n[PASS] test_FailedWithdrawalDoesNotBlockFinalizationOrAnotherVoter() (gas: 729192)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 19.80ms (13.48ms CPU time)\n\nRan 18 tests for test/FrogOfTheWeek.t.sol:FrogOfTheWeekTest\n[PASS] testAnyoneCanFinalizeWinnerAndEvent() (gas: 376273)\n[PASS] testConstructorRejectsZeroAndEOA() (gas: 3861)\n[PASS] testDeploymentConstantsAndEmptySummary() (gas: 90683)\n[PASS] testDirectDonationsAreNotVotesAndCannotStealDeposits() (gas: 384498)\n[PASS] testEmptyWeekUsesSentinelAndCannotInventAgentZero() (gas: 122556)\n[PASS] testExactBoundaryRejectsStaleVoteAndAllowsNewWeek() (gas: 10145847)\n[PASS] testFuzzVoteConservationAndWinner(uint256,uint256,uint256,uint256) (runs: 256, μ: 626517, ~: 628192)\nLogs:\n  Bound result 107477463\n  Bound result 833\n  Bound result 1377\n  Bound result 0\n\n[PASS] testInvalidAgentsZeroAmountAndWrongWeek() (gas: 126437)\n[PASS] testLeaderChangesWhenPreviousLeaderIsOvertaken() (gas: 554965)\n[PASS] testMissingApprovalAndInsufficientFundsRollbackVotes() (gas: 5167719)\n[PASS] testNoAdminOrSweepAndNonpayableCalls() (gas: 80706)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 1475426)\n[PASS] testSkippedWeeksFinalizeInOrderWithoutDelayingNewVotes() (gas: 5462041)\n[PASS] testTiesChooseLowestAgentRegardlessOfArrivalOrder() (gas: 774113)\n[PASS] testVoteEmitsAndAccumulatesAcrossAgentsAndVoters() (gas: 5296681)\n[PASS] testWithdrawBeforeFinalizationReturnsAllAndKeepsHistoricTotals() (gas: 10273520)\n[PASS] testWithdrawOldWeekDoesNotReleaseCurrentDeposit() (gas: 541426)\n[PASS] testWithdrawRejectsCurrentFutureEmptyAndDuplicate() (gas: 359224)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 358.55ms (48.44ms CPU time)\n\nRan 2 tests for test/LeaderReference.t.sol:LeaderReferenceTest\n[PASS] testFuzz_IndependentLeaderModel(uint256) (runs: 256, μ: 12083557, ~: 12083567)\n[PASS] test_AllAgentNumbersAtEqualWeightCrownZeroRegardlessOfDescendingOrder() (gas: 186643510)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 369.94ms (466.24ms CPU time)\n\nRan 13 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFactoryDeploymentKeepsWholeSupplyAtFactory() (gas: 24958)\n[PASS] testFiniteAllowanceDecrementsAndCanBeReplaced() (gas: 207390)\n[PASS] testFuzzTransfersConserveSupply(uint256,uint256) (runs: 256, μ: 130747, ~: 131385)\nLogs:\n  Bound result 458680883186431004881051836\n  Bound result 457684586503760590113834821\n\n[PASS] testInfiniteAllowanceIsUnchanged() (gas: 115474)\n[PASS] testInsufficientAllowanceReverts() (gas: 97660)\n[PASS] testInsufficientBalanceReverts() (gas: 50421)\n[PASS] testInvalidTransferAndApprovalRejectZero() (gas: 81668)\n[PASS] testMetadataAndExactSupply() (gas: 45265)\n[PASS] testNoAdminMintUpgradeOrInitializer() (gas: 717920)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 644892)\n[PASS] testTransferEmitsAndMovesExactAmount() (gas: 86620)\n[PASS] testZeroAndSelfTransfersPreserveSupply() (gas: 79012)\n[PASS] test_FailedTransferFromRollsBackAllowance() (gas: 92819)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 370.04ms (11.90ms CPU time)\n\nRan 1 test for test/FrogInvariant.t.sol:FrogInvariantTest\n[PASS]\nFrogInvariantTest invariants:\n[PASS] invariantCustodyEqualsAllOutstandingDepositsPlusDonations\n[PASS] invariantHistoricalTotalsAndWinnersMatchIndependentModel\n FrogInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| FrogHandler | advance  | 1642  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | donate   | 1634  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | finalize | 1650  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | vote     | 1649  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | withdraw | 1617  | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 1513\n  Bound result 42\n  Bound result 231820\n  Bound result 680\n  Bound result 167170333892790935551\n  Bound result 1269987572\n  Bound result 208000\n  Bound result 258\n  Bound result 127\n  Bound result 18000000000000000000\n  Bound result 42\n  Bound result 244\n  Bound result 7\n  Bound result 4395\n  Bound result 167170333892790937787\n  Bound result 557\n  Bound result 981999999998730011741\n  Bound result 521376627209140294297\n  Bound result 24576\n  Bound result 3447\n  Bound result 6083\n  Bound result 7177\n  Bound result 4\n  Bound result 265904289793219864939\n  Bound result 3\n  Bound result 828417\n  Bound result 3\n  Bound result 604799\n  Bound result 7279\n  Bound result 7352\n  Bound result 20909\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.67s (1.67s CPU time)\n\nRan 5 test suites in 1.67s (2.79s CPU time): 45 tests passed, 0 failed, 0 skipped (45 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"FrogOfTheWeek.finalize()\",\"FrogOfTheWeek.vote(uint256,uint256,uint256)\",\"FrogOfTheWeek.withdraw(uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"LICENSE\":24,\"README.md\":73,\"docs/SECURITY.md\":33,\"docs/VERIFICATION.md\":23,\"foundry.toml\":19,\"src/FrogOfTheWeek.sol\":155,\"src/LaunchToken.sol\":59,\"test/AdversarialToken.t.sol\":254,\"test/FrogInvariant.t.sol\":143,\"test/FrogOfTheWeek.t.sol\":343,\"test/LaunchToken.t.sol\":160,\"test/LeaderReference.t.sol\":96,\"test/website.integration.mjs\":114,\"web/app.js\":218,\"web/art/README.md\":14,\"web/art/frog.svg\":33,\"web/art/froglet.svg\":31,\"web/art/king-frog.svg\":41,\"web/art/tadpole.svg\":31,\"web/chain.mjs\":95,\"web/config.js\":8,\"web/core.mjs\":59,\"web/index.html\":24,\"web/styles.css\":1,\"web/test/chain.test.mjs\":94,\"web/test/core.test.mjs\":63},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":564,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/FrogOfTheWeek.sol:110: Reentrancy in FrogOfTheWeek.withdraw(uint256) (src/FrogOfTheWeek.sol#110-125):\n[high/medium] reentrancy-balance at src/FrogOfTheWeek.sol:71: Reentrancy in FrogOfTheWeek.vote(uint256,uint256,uint256) (src/FrogOfTheWeek.sol#71-92):\n[high/medium] reentrancy-balance at src/FrogOfTheWeek.sol:110: Reentrancy in FrogOfTheWeek.withdraw(uint256) (src/FrogOfTheWeek.sol#110-125):\n[low/medium] timestamp at src/FrogOfTheWeek.sol:110: FrogOfTheWeek.withdraw(uint256) (src/FrogOfTheWeek.sol#110-125) uses timestamp for comparisons\n[low/medium] timestamp at src/FrogOfTheWeek.sol:71: FrogOfTheWeek.vote(uint256,uint256,uint256) (src/FrogOfTheWeek.sol#71-92) uses timestamp for comparisons\n[low/medium] timestamp at src/FrogOfTheWeek.sol:97: FrogOfTheWeek.finalize() (src/FrogOfTheWeek.sol#97-106) uses timestamp for comparisons","passed":true},{"durationMs":313,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/LaunchToken.sol:9: Large Numeric Literal\n[low] missing-inheritance at src/LaunchToken.sol:5: Missing Inheritance\n[low] unsafe-erc20-operation at src/FrogOfTheWeek.sol:119: Unsafe ERC20 Operation","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"74e84f8e70c53bcb228e9931454cb41e698be08473a273664dfec6339bb359a7","verifiedTreeHash":"a9cd49980b68e23069e30fe50d9e6e9c1a365627","verifierVersion":"0.1.0+68ddf5e4"},{"checks":[{"durationMs":2788,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.65s\nCompiler run successful!\nwarning[reentrancy-no-eth]: external call can be reentered before `entered` is updated\n    ╭▸ src/FrogOfTheWeek.sol:150:47\n    │\n150 │         (bool success, bytes memory result) = address(token).call(data);\n    │                                               ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/FrogOfTheWeek.sol:91:9\n   │\n91 │         emit Voted(week, msg.sender, agentId, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n   ╭▸ src/FrogOfTheWeek.sol:90:13\n   │\n90 │         if (token.balanceOf(address(this)) != beforeBalance + amount) revert UnexpectedTokenBalance();\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/FrogOfTheWeek.sol:124:9\n    │\n124 │         emit Withdrawn(week, msg.sender, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:121:13\n    │\n121 │             token.balanceOf(address(this)) + amount != beforeBalance\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:122:20\n    │\n122 │                 || token.balanceOf(msg.sender) != beforeRecipient + amount\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\n","passed":true},{"durationMs":38736,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/TokenBoundary.t.sol:CrossEntryReentrancyTest\n[PASS] testDepositCallbackCannotFinalizeAnEndedPendingWeek() (gas: 5384575)\n[PASS] testDepositCallbackCannotWithdrawAnExistingPriorWeekLock() (gas: 678092)\n[PASS] testPropagatedDepositCallbackFailureRestoresAnExistingLeader() (gas: 15213150)\n[PASS] testWithdrawalCallbackCannotCreateCurrentWeekVotes() (gas: 10317033)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 6.84ms (12.37ms CPU time)\n\nRan 18 tests for test/FrogOfTheWeek.t.sol:FrogOfTheWeekTest\n[PASS] testAnyoneCanFinalizeWinnerAndEvent() (gas: 376273)\n[PASS] testConstructorRejectsZeroAndEOA() (gas: 3861)\n[PASS] testDeploymentConstantsAndEmptySummary() (gas: 90683)\n[PASS] testDirectDonationsAreNotVotesAndCannotStealDeposits() (gas: 384498)\n[PASS] testEmptyWeekUsesSentinelAndCannotInventAgentZero() (gas: 122556)\n[PASS] testExactBoundaryRejectsStaleVoteAndAllowsNewWeek() (gas: 10145847)\n[PASS] testFuzzVoteConservationAndWinner(uint256,uint256,uint256,uint256) (runs: 256, μ: 626058, ~: 628244)\nLogs:\n  Bound result 898532430877245143763\n  Bound result 286425830839825843412\n  Bound result 1464\n  Bound result 1116\n\n[PASS] testInvalidAgentsZeroAmountAndWrongWeek() (gas: 126437)\n[PASS] testLeaderChangesWhenPreviousLeaderIsOvertaken() (gas: 554965)\n[PASS] testMissingApprovalAndInsufficientFundsRollbackVotes() (gas: 5167719)\n[PASS] testNoAdminOrSweepAndNonpayableCalls() (gas: 80706)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 1475426)\n[PASS] testSkippedWeeksFinalizeInOrderWithoutDelayingNewVotes() (gas: 5462041)\n[PASS] testTiesChooseLowestAgentRegardlessOfArrivalOrder() (gas: 774113)\n[PASS] testVoteEmitsAndAccumulatesAcrossAgentsAndVoters() (gas: 5296681)\n[PASS] testWithdrawBeforeFinalizationReturnsAllAndKeepsHistoricTotals() (gas: 10273520)\n[PASS] testWithdrawOldWeekDoesNotReleaseCurrentDeposit() (gas: 541426)\n[PASS] testWithdrawRejectsCurrentFutureEmptyAndDuplicate() (gas: 359224)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 107.02ms (119.72ms CPU time)\n\nRan 2 tests for test/LeaderReference.t.sol:LeaderReferenceTest\n[PASS] testFuzz_IndependentLeaderModel(uint256) (runs: 256, μ: 12083744, ~: 12082615)\n[PASS] test_AllAgentNumbersAtEqualWeightCrownZeroRegardlessOfDescendingOrder() (gas: 186643510)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 831.87ms (944.03ms CPU time)\n\nRan 11 tests for test/AdversarialToken.t.sol:AdversarialTokenTest\n[PASS] testDepositCallbackCannotReenterVote() (gas: 5188121)\n[PASS] testFalseReturningDepositRollsBackTokenAndVotingState() (gas: 5053060)\n[PASS] testFeeOnDepositRejectsUnderfundedVotes() (gas: 5054064)\n[PASS] testFeeOnWithdrawalRollsBackAndDepositRemainsClaimable() (gas: 451323)\n[PASS] testNoReturnTokenCanDepositAndWithdraw() (gas: 345623)\n[PASS] testPropagatedReentrancyFailureRestoresLockAndTransfer() (gas: 547069)\n[PASS] testRevertingDepositRollsBackAndGuardResets() (gas: 5269039)\n[PASS] testShortMalformedReturnRollsBack() (gas: 5052606)\n[PASS] testWithdrawalCallbackCannotFinalizeOutOfOrderEvents() (gas: 498618)\n[PASS] testWithdrawalCallbackCannotReenterWithdrawal() (gas: 439166)\n[PASS] test_FailedWithdrawalDoesNotBlockFinalizationOrAnotherVoter() (gas: 729192)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 831.92ms (18.52ms CPU time)\n\nRan 5 tests for test/TokenBoundary.t.sol:TokenBoundaryAccountingTest\n[PASS] testExcessDepositCreditRollsBackTokenAndLeaderChanges() (gas: 9902078)\n[PASS] testFuzzNonBooleanWordRollsBackVoteAndWithdrawal(uint256) (runs: 1000, μ: 14917612, ~: 14917562)\nLogs:\n  Bound result 6211\n\n[PASS] testOversizedSuccessfulReturnDataRollsBackVoteAndWithdrawal() (gas: 14922688)\n[PASS] testWithdrawalRejectsExcessRecipientCredit() (gas: 9885785)\n[PASS] testWithdrawalRequiresCustodyToBeDebited() (gas: 9881614)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 856.78ms (860.85ms CPU time)\n\nRan 10 tests for test/LaunchTokenProperties.t.sol:LaunchTokenPropertiesTest\n[PASS] testFullSupplyDelegatedTransferExhaustsApproval() (gas: 178507)\n[PASS] testFuzzApprovalDoesNotAuthorizeAnotherCaller(uint256) (runs: 1000, μ: 187129, ~: 186888)\nLogs:\n  Bound result 524864693021381574588297473\n\n[PASS] testFuzzApprovalDoesNotAuthorizeAnotherOwner(uint256) (runs: 1000, μ: 185909, ~: 185640)\nLogs:\n  Bound result 179426330424151913871353574\n\n[PASS] testFuzzDelegatedSelfTransferPreservesBalanceAndConsumesFiniteApproval(uint256,uint256) (runs: 1000, μ: 133300, ~: 133635)\nLogs:\n  Bound result 262371263710557368207414875\n  Bound result 40204021601852468134723833865155120420869113047347561051593601453200091074731\n\n[PASS] testFuzzInvalidRecipientRollsBackAllowance(uint256,uint256) (runs: 1000, μ: 127230, ~: 127531)\nLogs:\n  Bound result 262371263710557368207414875\n  Bound result 40204021601852468134723833865155120420869113047347561051593601453200091074731\n\n[PASS] testFuzzOverspendingPartialBalanceRollsBackAllowance(uint256,uint256) (runs: 1000, μ: 192847, ~: 193049)\nLogs:\n  Bound result 447165144441831683370702\n  Bound result 213862351546\n\n[PASS] testFuzzSplitDelegatedSpendingMatchesSingleTransfer(uint256,uint256) (runs: 1000, μ: 377256, ~: 379413)\nLogs:\n  Bound result 262371263710557368207414875\n  Bound result 29528272377927097546670151\n\n[PASS] testInfiniteApprovalCanBeRevokedAfterSpending() (gas: 188630)\n[PASS] testMaximumTransferCannotOverflowBalances() (gas: 146984)\n[PASS] testZeroDelegatedTransferWithoutApprovalEmitsAndDoesNotMoveFunds() (gas: 78026)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 856.84ms (2.60s CPU time)\n\nRan 13 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFactoryDeploymentKeepsWholeSupplyAtFactory() (gas: 24958)\n[PASS] testFiniteAllowanceDecrementsAndCanBeReplaced() (gas: 207390)\n[PASS] testFuzzTransfersConserveSupply(uint256,uint256) (runs: 256, μ: 130061, ~: 131385)\nLogs:\n  Bound result 244\n  Bound result 100\n\n[PASS] testInfiniteAllowanceIsUnchanged() (gas: 115474)\n[PASS] testInsufficientAllowanceReverts() (gas: 97660)\n[PASS] testInsufficientBalanceReverts() (gas: 50421)\n[PASS] testInvalidTransferAndApprovalRejectZero() (gas: 81668)\n[PASS] testMetadataAndExactSupply() (gas: 45265)\n[PASS] testNoAdminMintUpgradeOrInitializer() (gas: 717920)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 644892)\n[PASS] testTransferEmitsAndMovesExactAmount() (gas: 86620)\n[PASS] testZeroAndSelfTransfersPreserveSupply() (gas: 79012)\n[PASS] test_FailedTransferFromRollsBackAllowance() (gas: 92819)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 856.68ms (278.49ms CPU time)\n\nRan 7 tests for test/FrogProperties.t.sol:FrogPropertiesTest\n[PASS] testEntireSupplyCanVoteBeRefundedAndVoteAgain() (gas: 21323098)\n[PASS] testFuzzInvalidAgentPreservesAllExistingAccounting(uint256) (runs: 1000, μ: 10706610, ~: 10706519)\nLogs:\n  Bound result 35588524864693021381574588297473\n\n[PASS] testFuzzShortAllowanceRollsBackExistingLeaderAndAllowsRetry(uint256,uint256) (runs: 1000, μ: 10975751, ~: 10968388)\nLogs:\n  Bound result 999999867999999999999999997\n  Bound result 114\n\n[PASS] testFuzzSplittingVotesAndRefundOrderPreserveOutcome(uint256,uint256,uint256,uint16) (runs: 1000, μ: 21875351, ~: 21877239)\nLogs:\n  Bound result 249999999999999999999999998\n  Bound result 47479815816954249041820648\n  Bound result 159297711625774892905214770\n  Bound result 0\n\n[PASS] testFuzzWeekBoundaryIsRelativeToDeployment(uint64,uint32,uint16) (runs: 1000, μ: 10150662, ~: 10153871)\nLogs:\n  Bound result 19139\n  Bound result 96\n  Bound result 564\n\n[PASS] testInsufficientBalanceRestoresSpentAllowanceAndExistingVotes() (gas: 10914394)\n[PASS] testMaximumAmountIsRejectedWithoutCreatingUnbackedVotes() (gas: 10651114)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 977.39ms (3.40s CPU time)\n\nRan 1 test for test/FrogInvariant.t.sol:FrogInvariantTest\n[PASS]\nFrogInvariantTest invariants:\n[PASS] invariantCustodyEqualsAllOutstandingDepositsPlusDonations\n[PASS] invariantHistoricalTotalsAndWinnersMatchIndependentModel\n FrogInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+------------+-------+---------+----------╮\n| Contract    | Selector   | Calls | Reverts | Discards |\n+=======================================================+\n| FrogHandler | advance    | 2661  | 0       | 0        |\n|-------------+------------+-------+---------+----------|\n| FrogHandler | donate     | 2757  | 0       | 0        |\n|-------------+------------+-------+---------+----------|\n| FrogHandler | finalize   | 2782  | 0       | 0        |\n|-------------+------------+-------+---------+----------|\n| FrogHandler | rejectVote | 2657  | 0       | 0        |\n|-------------+------------+-------+---------+----------|\n| FrogHandler | vote       | 2731  | 0       | 0        |\n|-------------+------------+-------+---------+----------|\n| FrogHandler | withdraw   | 2796  | 0       | 0        |\n╰-------------+------------+-------+---------+----------╯\n\nLogs:\n  Bound result 10000000000000000002\n  Bound result 290288\n  Bound result 380929\n  Bound result 290196\n  Bound result 24576\n  Bound result 72984518589826227531578991903372844090998219903258077796093728159832249404064\n  Bound result 93728159832249402907\n  Bound result 312086\n  Bound result 250000000000000000000\n  Bound result 59494929163340689631\n  Bound result 247499999999999999999\n  Bound result 64\n  Bound result 309913\n  Bound result 8785\n  Bound result 454703\n  Bound result 408209\n  Bound result 9\n  Bound result 290395\n  Bound result 12058\n  Bound result 9\n  Bound result 76536868830490302575\n  Bound result 5646945706933477914\n  Bound result 256\n  Bound result 13609914403036472317\n  Bound result 158684\n  Bound result 16285072003448130548\n  Bound result 65973227083761614384\n  Bound result 28096\n  Bound result 2827\n  Bound result 604801\n  Bound result 60\n  Bound result 401\n  Bound result 239384\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 38.64s (38.63s CPU time)\n\nRan 9 test suites in 38.64s (43.96s CPU time): 71 tests passed, 0 failed, 0 skipped (71 total tests)\n","passed":true},{"durationMs":37,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"FrogOfTheWeek.finalize()\",\"FrogOfTheWeek.vote(uint256,uint256,uint256)\",\"FrogOfTheWeek.withdraw(uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"LICENSE\":24,\"README.md\":73,\"docs/SECURITY.md\":33,\"docs/VERIFICATION.md\":23,\"foundry.toml\":19,\"src/FrogOfTheWeek.sol\":155,\"src/LaunchToken.sol\":59,\"test/AdversarialToken.t.sol\":254,\"test/FrogInvariant.t.sol\":324,\"test/FrogOfTheWeek.t.sol\":343,\"test/FrogProperties.t.sol\":257,\"test/LaunchToken.t.sol\":160,\"test/LaunchTokenProperties.t.sol\":211,\"test/LeaderReference.t.sol\":96,\"test/README.md\":37,\"test/TokenBoundary.t.sol\":273,\"test/website.integration.mjs\":114,\"web/app.js\":218,\"web/art/README.md\":14,\"web/art/frog.svg\":33,\"web/art/froglet.svg\":31,\"web/art/king-frog.svg\":41,\"web/art/tadpole.svg\":31,\"web/chain.mjs\":95,\"web/config.js\":8,\"web/core.mjs\":59,\"web/index.html\":24,\"web/styles.css\":1,\"web/test/chain.test.mjs\":94,\"web/test/core.test.mjs\":63},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8c24b15136b3abb090da1d2d7d7c7458b436ac45a8ec6523546b2d7ec1d5cc55","verifiedTreeHash":"ea22aa18aaa84dd938db4609cfbe1681d2ef4d32","verifierVersion":"0.1.0+68ddf5e4"},{"checks":[{"durationMs":1784,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.68s\nCompiler run successful!\nwarning[reentrancy-no-eth]: external call can be reentered before `entered` is updated\n    ╭▸ src/FrogOfTheWeek.sol:150:47\n    │\n150 │         (bool success, bytes memory result) = address(token).call(data);\n    │                                               ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/FrogOfTheWeek.sol:91:9\n   │\n91 │         emit Voted(week, msg.sender, agentId, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n   ╭▸ src/FrogOfTheWeek.sol:90:13\n   │\n90 │         if (token.balanceOf(address(this)) != beforeBalance + amount) revert UnexpectedTokenBalance();\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/FrogOfTheWeek.sol:124:9\n    │\n124 │         emit Withdrawn(week, msg.sender, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:121:13\n    │\n121 │             token.balanceOf(address(this)) + amount != beforeBalance\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\nwarning[incorrect-strict-equality]: dangerous strict equality check on an externally-influenced value\n    ╭▸ src/FrogOfTheWeek.sol:122:20\n    │\n122 │                 || token.balanceOf(msg.sender) != beforeRecipient + amount\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/incorrect-strict-equality\n\n","passed":true},{"durationMs":1483,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/AdversarialToken.t.sol:AdversarialTokenTest\n[PASS] testDepositCallbackCannotReenterVote() (gas: 5188121)\n[PASS] testFalseReturningDepositRollsBackTokenAndVotingState() (gas: 5053060)\n[PASS] testFeeOnDepositRejectsUnderfundedVotes() (gas: 5054064)\n[PASS] testFeeOnWithdrawalRollsBackAndDepositRemainsClaimable() (gas: 451323)\n[PASS] testNoReturnTokenCanDepositAndWithdraw() (gas: 345623)\n[PASS] testPropagatedReentrancyFailureRestoresLockAndTransfer() (gas: 547069)\n[PASS] testRevertingDepositRollsBackAndGuardResets() (gas: 5269039)\n[PASS] testShortMalformedReturnRollsBack() (gas: 5052606)\n[PASS] testWithdrawalCallbackCannotFinalizeOutOfOrderEvents() (gas: 498618)\n[PASS] testWithdrawalCallbackCannotReenterWithdrawal() (gas: 439166)\n[PASS] test_FailedWithdrawalDoesNotBlockFinalizationOrAnotherVoter() (gas: 729192)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 3.68ms (17.20ms CPU time)\n\nRan 13 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFactoryDeploymentKeepsWholeSupplyAtFactory() (gas: 24958)\n[PASS] testFiniteAllowanceDecrementsAndCanBeReplaced() (gas: 207390)\n[PASS] testFuzzTransfersConserveSupply(uint256,uint256) (runs: 256, μ: 130540, ~: 131435)\nLogs:\n  Bound result 32965787268781399594\n  Bound result 2259\n\n[PASS] testInfiniteAllowanceIsUnchanged() (gas: 115474)\n[PASS] testInsufficientAllowanceReverts() (gas: 97660)\n[PASS] testInsufficientBalanceReverts() (gas: 50421)\n[PASS] testInvalidTransferAndApprovalRejectZero() (gas: 81668)\n[PASS] testMetadataAndExactSupply() (gas: 45265)\n[PASS] testNoAdminMintUpgradeOrInitializer() (gas: 717920)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 644892)\n[PASS] testTransferEmitsAndMovesExactAmount() (gas: 86620)\n[PASS] testZeroAndSelfTransfersPreserveSupply() (gas: 79012)\n[PASS] test_FailedTransferFromRollsBackAllowance() (gas: 92819)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 332.92ms (11.77ms CPU time)\n\nRan 18 tests for test/FrogOfTheWeek.t.sol:FrogOfTheWeekTest\n[PASS] testAnyoneCanFinalizeWinnerAndEvent() (gas: 376273)\n[PASS] testConstructorRejectsZeroAndEOA() (gas: 3861)\n[PASS] testDeploymentConstantsAndEmptySummary() (gas: 90683)\n[PASS] testDirectDonationsAreNotVotesAndCannotStealDeposits() (gas: 384498)\n[PASS] testEmptyWeekUsesSentinelAndCannotInventAgentZero() (gas: 122556)\n[PASS] testExactBoundaryRejectsStaleVoteAndAllowsNewWeek() (gas: 10145847)\n[PASS] testFuzzVoteConservationAndWinner(uint256,uint256,uint256,uint256) (runs: 256, μ: 627165, ~: 628244)\nLogs:\n  Bound result 386474907971449581845\n  Bound result 13\n  Bound result 26\n  Bound result 1597\n\n[PASS] testInvalidAgentsZeroAmountAndWrongWeek() (gas: 126437)\n[PASS] testLeaderChangesWhenPreviousLeaderIsOvertaken() (gas: 554965)\n[PASS] testMissingApprovalAndInsufficientFundsRollbackVotes() (gas: 5167719)\n[PASS] testNoAdminOrSweepAndNonpayableCalls() (gas: 80706)\n[PASS] testRuntimeBoundAndNoEscapeOpcodes() (gas: 1475426)\n[PASS] testSkippedWeeksFinalizeInOrderWithoutDelayingNewVotes() (gas: 5462041)\n[PASS] testTiesChooseLowestAgentRegardlessOfArrivalOrder() (gas: 774113)\n[PASS] testVoteEmitsAndAccumulatesAcrossAgentsAndVoters() (gas: 5296681)\n[PASS] testWithdrawBeforeFinalizationReturnsAllAndKeepsHistoricTotals() (gas: 10273520)\n[PASS] testWithdrawOldWeekDoesNotReleaseCurrentDeposit() (gas: 541426)\n[PASS] testWithdrawRejectsCurrentFutureEmptyAndDuplicate() (gas: 359224)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 333.01ms (42.87ms CPU time)\n\nRan 2 tests for test/LeaderReference.t.sol:LeaderReferenceTest\n[PASS] testFuzz_IndependentLeaderModel(uint256) (runs: 256, μ: 12081265, ~: 12082607)\n[PASS] test_AllAgentNumbersAtEqualWeightCrownZeroRegardlessOfDescendingOrder() (gas: 186643510)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 333.02ms (422.49ms CPU time)\n\nRan 1 test for test/FrogInvariant.t.sol:FrogInvariantTest\n[PASS]\nFrogInvariantTest invariants:\n[PASS] invariantCustodyEqualsAllOutstandingDepositsPlusDonations\n[PASS] invariantHistoricalTotalsAndWinnersMatchIndependentModel\n FrogInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| FrogHandler | advance  | 1598  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | donate   | 1652  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | finalize | 1663  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | vote     | 1620  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| FrogHandler | withdraw | 1659  | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3792478065\n  Bound result 818754772252447771565\n  Bound result 1000000000000000000\n  Bound result 118506478546109013447\n  Bound result 1513\n  Bound result 4753\n  Bound result 265600\n  Bound result 6721\n  Bound result 6694\n  Bound result 3841\n  Bound result 42\n  Bound result 2\n  Bound result 7295\n  Bound result 1\n  Bound result 494\n  Bound result 5430\n  Bound result 285\n  Bound result 6733434515266198530\n  Bound result 1429\n  Bound result 1715\n  Bound result 2684\n  Bound result 998999999999999986049\n  Bound result 99000000000000000000\n  Bound result 323200\n  Bound result 2835717308\n  Bound result 72\n  Bound result 258\n  Bound result 371200\n  Bound result 42\n  Bound result 556800\n  Bound result 3583\n  Bound result 325\n  Bound result 797683074861591381718\n  Bound result 1324\n  Bound result 2\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.39s (1.38s CPU time)\n\nRan 5 test suites in 1.39s (2.39s CPU time): 45 tests passed, 0 failed, 0 skipped (45 total tests)\n","passed":true},{"durationMs":40,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"FrogOfTheWeek.finalize()\",\"FrogOfTheWeek.vote(uint256,uint256,uint256)\",\"FrogOfTheWeek.withdraw(uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"LICENSE\":24,\"README.md\":73,\"docs/SECURITY.md\":33,\"docs/VERIFICATION.md\":23,\"foundry.toml\":19,\"launch.json\":22,\"src/FrogOfTheWeek.sol\":155,\"src/LaunchToken.sol\":59,\"test/AdversarialToken.t.sol\":254,\"test/FrogInvariant.t.sol\":143,\"test/FrogOfTheWeek.t.sol\":343,\"test/LaunchToken.t.sol\":160,\"test/LeaderReference.t.sol\":96,\"test/website.integration.mjs\":114,\"web/app.js\":218,\"web/art/README.md\":14,\"web/art/frog.svg\":33,\"web/art/froglet.svg\":31,\"web/art/king-frog.svg\":41,\"web/art/tadpole.svg\":31,\"web/chain.mjs\":95,\"web/config.js\":8,\"web/core.mjs\":59,\"web/index.html\":24,\"web/styles.css\":1,\"web/test/chain.test.mjs\":94,\"web/test/core.test.mjs\":63},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ec7cc59806b3ed9d4736519f80be7a057742d59c8b8021579dfc6dec8dba7fb8","verifiedTreeHash":"1c2f04f218971129fae6b461c21c32279904388b","verifierVersion":"0.1.0+68ddf5e4"}]}