{"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":"c26e59fd-a913-4c07-8645-8b57c5baad03","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"6996121966df831e993626ec41bbcaf7cab056d771ff22f478a4e07907ad124d","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":"115df72a072942c1cf2069e948287504b944ba794655153439afff66369bdb36","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":"4ed110f7d9491992da998196ccf7cf8f2f5e5a5b714496fab70511fcc69db828","dependsOn":["build_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":"accepted"},{"acceptedSubmissionHash":"d743d6cfa19322de3e2c6e9b3dded8da01656c72527f59fd770ef1cd152079dc","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":"0400cf9bb51e2e08fe9b9f8ea6ed94062cc5956869ff46904c575da859274c50","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":"1ec570f2256736c02b92ba864e158748a078bf1136891b952b549c9abdbcdfe8","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"70187e8164f7968b5c81bc1d1d86102b0f489803f89a157064f1ddda57594177","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"20b90853434f36b9c01748d14d60dd7aff676ace454fd43bb5cb715c85f6066e","dependsOn":["build_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":"accepted"}],"objective":"A custom token: UNLOCK (UNLK).\nToken name: UNLOCK\nToken symbol: UNLK\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"b6dbe7ba79d0eccb761e38f6723cb466ae57ea752c9979e89f506f318b3dc29e","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"c26e59fd-a913-4c07-8645-8b57c5baad03","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2116-unlock"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52232","feedbackHash":"db79ad9a69bd363dbd1f15a2e5f4280a152e22138ba1ec44f7c11f6754173315","nodeKey":"audit_economics","submissionHash":"6996121966df831e993626ec41bbcaf7cab056d771ff22f478a4e07907ad124d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51169","feedbackHash":"24216d55c2b6832ae699407b696aa6e3c1493efa9d20d937cf12a0061f739186","nodeKey":"audit_flow","submissionHash":"115df72a072942c1cf2069e948287504b944ba794655153439afff66369bdb36","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51515","feedbackHash":"38a290cb07508d9e48c10f2d656b3134ee5ccf54332aaa44792e68f37d53cc0e","nodeKey":"audit_judge","submissionHash":"4ed110f7d9491992da998196ccf7cf8f2f5e5a5b714496fab70511fcc69db828","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52397","feedbackHash":"2d2de037d0fe768a8876dc23b3b66d98c48a0a53a65103aa1edabb213d11fbe5","nodeKey":"audit_math","submissionHash":"d743d6cfa19322de3e2c6e9b3dded8da01656c72527f59fd770ef1cd152079dc","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51304","feedbackHash":"6c03f04b54730747b8b12b2602b296538c7edd16ef69b7608c0e80d3678d70e4","nodeKey":"audit_permissions","submissionHash":"0400cf9bb51e2e08fe9b9f8ea6ed94062cc5956869ff46904c575da859274c50","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51434","feedbackHash":"0e6b3f6525bd1a1ff336268d06f63a8d1c505c80888b719b9e633e8b72de4572","nodeKey":"build_contract_project","submissionHash":"1ec570f2256736c02b92ba864e158748a078bf1136891b952b549c9abdbcdfe8","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52192","feedbackHash":"1e7085a18840b89095e15ee041b3065e4dd72af69f32b2386f2ee9942738bc54","nodeKey":"manifest","submissionHash":"70187e8164f7968b5c81bc1d1d86102b0f489803f89a157064f1ddda57594177","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52370","feedbackHash":"8b8147e8d58cbd5bb51ae3f02e93f7068e0d20aab926370bcebea3eef78fa028","nodeKey":"write_foundry_tests","submissionHash":"20b90853434f36b9c01748d14d60dd7aff676ace454fd43bb5cb715c85f6066e","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"5e3cd4277a7df0940bdeaa406f2c6bf8328578d4494a8fcee4199a4402120ea2","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4be5e039e1c77ce3","findings":[],"hash":"0400cf9bb51e2e08fe9b9f8ea6ed94062cc5956869ff46904c575da859274c50","nodeId":"756939b5-68cc-45d6-8e9d-da7aa24d7716","outcome":"completed","summary":"The review is complete. The findings file holds no defects and a full coverage record.\n\n**Result:** no defects found in the UNLOCK token's permission model. `.imd-findings.json` is written with an empty findings list and seven coverage rows, one per listed entry point plus the constructor role map, dependency integrity, the supply invariant and the Aderyn lead.\n\n**What was checked, against the Access Control, Trust Gap and Asymmetry guides:**\n- The contract is a 16-line subclass of OpenZeppelin ERC-20 whose only privileged act is the constructor mint of exactly 10^27 units to the deployer, the factory on launch. It inherits no Ownable, AccessControl, initializer, proxy, mint, burn, pause or blocklist path, and the compiled ABI exposes only approve, transfer and transferFrom as state-changing.\n- The vendored OpenZeppelin files are byte-identical by SHA-256 to upstream commit dbb6104 (v5.0.2), as DEPENDENCIES.json declares, so the inherited guards are the audited upstream ones.\n- Every allowance and balance slot has one writer path with one validation shape. transferFrom spends the allowance before moving tokens, so even the factory cannot move a holder's balance without that holder's approval. The one asymmetry between transfer and transferFrom is OpenZeppelin v5 not emitting Approval when allowance is spent. That changes no state and the README documents it.\n- Offline build and the existing 29 tests, including the invariant suite with 128 runs at depth 64 and zero reverts, all passed. The Slither lead list was empty and the Aderyn large-literal lead resolves to the exact brief supply.\n\n**Not covered:** no launch.json exists yet, so the manifest was not reviewed. No files other than `.imd-findings.json` were written.","treeHash":null,"usage":{"cachedInputTokens":740474,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":6475,"runtime":"claude","turns":14,"wallClockMs":112809}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"87804e27e9c9f85a","findings":[],"hash":"115df72a072942c1cf2069e948287504b944ba794655153439afff66369bdb36","nodeId":"0a5daae0-2be9-4fd9-871e-ba72a44f7ed1","outcome":"completed","summary":"The review found no defects in the UNLOCK token. The findings file is written with an empty findings list and nine coverage rows, and the working tree is unchanged apart from that file.\n\n**What I reviewed**\n\n- `src/UnlockToken.sol` is a 16-line contract inheriting unmodified OpenZeppelin v5.0.2 ERC-20, with one constructor mint of 10^27 units to the immediate deployer and no other functions.\n- I traced the three listed entry points, approve, transfer and transferFrom, through the vendored base contract for every failure mode in the Execution Trace, Periphery and First Principles guides: sentinel values, approval residuals, partial state updates, stale reads, unvalidated inputs, hidden side effects, and boundary cases.\n- A scratch Foundry suite exercised the factory launch flow with exact 10/80/10 amounts, zero and max-uint sentinels, atomic rollback when allowance suffices but balance does not, ETH rejection, and the standard approve race. All six probes passed. The repo's own 29 unit, fuzz and invariant tests also pass with the verifier seed.\n\n**Periphery checks**\n\n- SHA-256 of all five vendored OpenZeppelin files matches `DEPENDENCIES.json`, and their contents read as genuine upstream sources.\n- An opcode scan of the compiled runtime found no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE opcodes, so there is no external-call or callback surface.\n- The ABI exposes only ERC-20 functions, the supply constant, two events and six ERC-6093 errors. There is no mint, burn, owner, pause, blacklist or upgrade path.\n\n**Not reached**\n\n- Pool seeding and swaps were reasoned from the transfer path, not executed, since Uniswap v4 core is not vendored and the protected harness needs the network's environment.\n- No `launch.json` exists yet, so the manifest row is marked unreached with the values it must carry.\n\nThe standard ERC-20 approve ordering race exists and is documented in the README. It is a property of the standard, not a defect in this code, so it is not reported as a finding.","treeHash":null,"usage":{"cachedInputTokens":494895,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10478,"runtime":"claude","turns":25,"wallClockMs":214055}},{"artifacts":[],"attempt":1,"bundleHash":"7c139a37ae4b7cd86a4df15eee58847add9f2efcd8a563c4609a0ffcecf986ba","device":"87f02002d6a2b915","findings":[],"hash":"1ec570f2256736c02b92ba864e158748a078bf1136891b952b549c9abdbcdfe8","nodeId":"3758c730-064f-4bf7-9b68-28db3df452f6","outcome":"completed","summary":"Implemented UNLOCK (UNLK): 1,000,000,000 tokens with 18 decimals, minted once to the deployer. Dependencies are vendored; deployment assumptions and responsibilities are documented in README.md.\n\nValidation passed: `forge build`, `forge test` with the specified seed, and `forge fmt --check`. All 29 tests passed, including fuzz and invariant checks.","treeHash":"e2d27d0721db430f1d2fc0170b7271dc4d928d44","usage":{"cachedInputTokens":377984,"inputTokens":43778,"model":"gpt-6-astra","outputTokens":12748,"runtime":"codex","turns":5,"wallClockMs":262567}},{"artifacts":[],"attempt":1,"bundleHash":"6f4d3191a5ad73459809217793d27b31136dd610c144b5c3111a1e9ccc5b618f","device":"df98a348cb33e978","findings":[],"hash":"20b90853434f36b9c01748d14d60dd7aff676ace454fd43bb5cb715c85f6066e","nodeId":"8090b58b-5b9e-4a32-aa99-03a3f31fd3c4","outcome":"completed","summary":"Added boundary, failure-path, and fuzz tests, plus stateful invariants tracking balances and allowances independently.\n\nVerified offline with the required seed:\n- `forge build` passed.\n- `forge test` passed: 48 tests, zero failures.\n- Invariants exercised 32,768 random calls.\n\nAll changes are under `test/`. No confirmed implementation defects found.","treeHash":"82954ca06afbf67b5e80173014b794074e6e2123","usage":{"cachedInputTokens":703616,"inputTokens":72038,"model":"gpt-6-astra","outputTokens":13166,"runtime":"codex","turns":5,"wallClockMs":294222}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ea89e16822824c6f","findings":[],"hash":"4ed110f7d9491992da998196ccf7cf8f2f5e5a5b714496fab70511fcc69db828","nodeId":"fe96b196-b8d5-4ecb-afc1-eba69b8160cc","outcome":"completed","summary":"The review is complete. The findings file is written and the working tree has no changes of mine beyond it.\n\n**Result: no defects found.** All four specialists and the test writer reported nothing, and my own pass confirms the code is clean.\n\nWhat I verified against the code:\n\n- **Source** is a 16-line contract: OpenZeppelin v5.0.2 ERC20, name UNLOCK, symbol UNLK, default 18 decimals, and a no-argument constructor that mints one billion tokens to msg.sender. No owner, mint, burn, pause, blacklist, fee, hook, receive or fallback.\n- **Vendored library** files match the hashes in DEPENDENCIES.json and read as genuine OpenZeppelin logic line by line. The sandbox blocked fetching upstream to compare independently, so the record in the repo was the reference.\n- **Bytecode** is 2,635 creation bytes and 1,752 runtime bytes, far under the limits, with no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or CREATE opcodes.\n- **Floor behaviour** was reproduced in a scratch Foundry test: CREATE2 deployment from a factory stand-in leaves the whole supply at the factory, the ten percent swarm flow arrives and is claimable whole, 22 common admin selectors revert from both a stranger and the factory, and the factory cannot pull a holder's balance without approval. The existing 48 project tests, including 256 invariant runs, also pass. The scratch file was deleted afterwards.\n- **launch.json** uses only schema keys, totalSupply equals what the constructor mints, constructorArgs is empty to match the constructor, addresses are lowercase, and the notes are under the length limit.\n- **Static analysis leads** were cosmetic: the aderyn large-numeric-literal is a compile-time constant with digit separators.\n\nThe coverage record answers all three entry points as `holds`, plus four invariant rows covering supply, privileged powers, dependency integrity and the static-analysis leads.","treeHash":null,"usage":{"cachedInputTokens":434913,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":8647,"runtime":"claude","turns":15,"wallClockMs":178660}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"82692ab5f7f7e54e","findings":[],"hash":"6996121966df831e993626ec41bbcaf7cab056d771ff22f478a4e07907ad124d","nodeId":"1b7bd784-fd95-4e53-b27f-28c8d5d67b5d","outcome":"completed","summary":"Review complete. The findings file is written with an empty findings list and nine coverage rows. No files outside it were changed and the formatter check passes.\n\n## Scope\nFiles read: `src/UnlockToken.sol` (16 lines), the vendored OpenZeppelin ERC20 and its four imports, both existing test files, the README, and the protected floor tests. Guides applied: Senior Auditor's Mindset, Economic Security, Invariant, Flow Gap.\n\n**Severity counts:** 0 Critical · 0 High · 0 Medium · 0 Low\n\n## Result\nThe token is an unmodified OpenZeppelin v5.0.2 ERC-20 with one constructor mint of 10^27 units to the immediate deployer. There is no custom transfer logic, no owner, no external call and no supply path after construction. Every economic failure mode in the three guides needs a lever the code does not have.\n\nWhat I checked and how:\n\n- **Dependency integrity.** The six vendored OpenZeppelin files hash-match both the repo's pins and the upstream files at commit dbb6104c, which I fetched independently. No hidden hook or backdoor.\n- **Supply invariant.** The constant equals exactly 10^27, confirmed with node and forge. Only the constructor calls mint; no burn, mint or update override is reachable, including from the deployer.\n- **Conservation.** The existing invariant suite (128 runs, depth 64, reverts fatal) and my scratch probe both hold balances summing to supply across transfer, approve and transferFrom.\n- **Launch flow gaps.** A scratch test modelled the factory deployment, the swarm share, the pool seed, the remainder and a trader round trip. Every leg arrived exactly, since there is no tax, burn, exemption or callback.\n- **Sentinel and boundary cases.** Zero recipient and zero spender revert, zero-address sender reverts in allowance spending, self-transfer of the full balance is neutral, max allowance stays unlimited, finite allowance decrements and reverts atomically on shortfall.\n- **Static-analysis leads.** Slither reported nothing; the aderyn \"large numeric literal\" line is cosmetic and the value is correct.\n\n## Observations (non-blocking)\n- Standard ERC-20 allowance replacement ordering risk, already documented in the README.\n- Tokens sent to the token's own address are unrecoverable by design, since there is no admin power.\n- No launch.json exists in the tree yet. When it is written, the constructor takes no arguments, so its `constructorArgs` must be the empty list and `totalSupply` must be the 28-digit value 1 followed by 27 zeros.\n\n## Coverage\nAll three entry points are marked `holds`, plus six invariant and flow rows, in `.imd-findings.json`. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":509495,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":11788,"runtime":"claude","turns":23,"wallClockMs":185059}},{"artifacts":[],"attempt":1,"bundleHash":"113ad68daec76fa43ac1d71d05b1bad943db60eb636c27efba6ef81c4037a9f8","device":"a7b8747ac077deb9","findings":[],"hash":"70187e8164f7968b5c81bc1d1d86102b0f489803f89a157064f1ddda57594177","nodeId":"f08c4936-63ae-431b-bf1e-64e3114df127","outcome":"completed","summary":"Done. I wrote `launch.json` for the UNLOCK (UNLK) custom token launch and verified the tree.\n\n**What the manifest says**\n- Kind is custom_token. The token contract is `UnlockToken`, name UNLOCK, symbol UNLK, 18 decimals.\n- constructorArgs is empty, matching the accepted constructor, which takes no parameters and mints everything once to msg.sender.\n- totalSupply is the constant the constructor mints, 1,000,000,000 tokens in minor units.\n- contracts is empty. The accepted tree has only the token, so no application contracts are named.\n- pool and economics are copied exactly as the launch gives them: IMD as the paired currency, fee 12500, tick spacing 60, the one-to-one provenance price, and the requester's economics object verbatim.\n- notes describe the token's fixed supply, lack of admin powers and exact transfer behavior, at 952 characters.\n\n**Checks**\n- A schema sanity check confirmed only the allowed top-level keys, the verbatim economics object, and the supply matching 10^27.\n- `forge build` compiled cleanly.\n- `forge test` with the verifier's fuzz seed passed all 29 tests in both suites.\n- `git status` shows launch.json as the only new or changed file.","treeHash":"c86fe84bd988417859b7fb8a0f47efabc4445788","usage":{"cachedInputTokens":183772,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":2550,"runtime":"claude","turns":8,"wallClockMs":45493}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"827152cce766ca0d","findings":[],"hash":"d743d6cfa19322de3e2c6e9b3dded8da01656c72527f59fd770ef1cd152079dc","nodeId":"a0031ec5-2fcf-4dcf-8e2c-3e3f4e55a2b3","outcome":"completed","summary":"I found no math defects in UnlockToken, so `.imd-findings.json` holds an empty findings list plus a coverage row for each entry point.\n\n**What I looked at:** `src/UnlockToken.sol` is a 16-line contract built on OpenZeppelin's standard ERC-20 (version 5). It has no transfer fee, no tax, no burn, no rebasing, and no owner. The only mint is in the constructor, and it mints `1_000_000_000 * 10 ** 18` to `msg.sender`. That value is fixed when the contract is compiled, is exactly 10^27, and is far below the uint256 limit (about 1.2 × 10^77). It matches the brief: 1 billion tokens with 18 decimals.\n\n**Math precision and boundaries:** this code does no division, rounding or scaling, so those checks don't apply. The only arithmetic is in OpenZeppelin's balance and allowance updates:\n- **Balance decrease:** the sender's balance is checked against the amount before it is reduced, so it can't wrap below zero.\n- **Balance increase and supply decrease:** these are capped by the total supply, which can never change after deployment.\n- **Allowance decrease:** the allowance is checked against the amount first, and an allowance set to the maximum uint256 value is treated as unlimited and never reduced.\n- **Edge cases traced:** a transfer to yourself, a transfer of 0, a transfer of exactly your full balance, and a balance-or-allowance plus 1. Each either works as intended or reverts with the right error.\n\n**Coverage:**\n- `approve`, `transfer` and `transferFrom` are all marked `holds`.\n- I also checked two invariants: the supply is always 10^27, and 18 decimals is consistent with the supply. Both hold.\n\n**Leads I ruled out:**\n- Slither reported nothing.\n- Aderyn's \"large numeric literal\" note on line 10 is about style only; the value is correct.\n\n**Tests:** the project's own 29 tests pass, including the invariant fuzzing, which made over 8,000 calls with no reverts.\n\n**Not done:** I didn't run the supplied launch-flow checks (`Token.protected.t.sol`); I only read their assertions. A plain ERC-20 with no transfer fee has no mechanism that could make a launch transfer arrive short.\n\nNo repository files were changed.","treeHash":null,"usage":{"cachedInputTokens":187249,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2336,"runtime":"claude","turns":6,"wallClockMs":46425}}],"verification":[{"checks":[{"durationMs":2142,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.00s\nCompiler run successful!\n","passed":true},{"durationMs":1317,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/UnlockToken.t.sol:UnlockTokenTest\n[PASS] testFuzz_insufficientAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 122794, ~: 123528)\nLogs:\n  Bound result 18\n  Bound result 255\n\n[PASS] testFuzz_overdrawAlwaysReverts(uint256,uint256) (runs: 256, μ: 126795, ~: 127873)\nLogs:\n  Bound result 420828069\n  Bound result 123000000000000000000\n\n[PASS] testFuzz_transferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 164406, ~: 165557)\nLogs:\n  Bound result 251136596\n  Bound result 5905954586494678092590098199019163206\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 256, μ: 192657, ~: 196018)\nLogs:\n  Bound result 420828069\n  Bound result 219719870\n\n[PASS] test_adminMintAndBurnEntryPointsAreUnavailable() (gas: 708541)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163655)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88756)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_create2MintsToFactoryAndNotOrigin() (gas: 401006)\n[PASS] test_factoryDistributionAndClaimArriveWhole() (gas: 581131)\n[PASS] test_metadataAndInitialSupply() (gas: 107628)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferAboveBalanceRevertsWithoutChangingBalances() (gas: 65311)\n[PASS] test_transferEntireBalance() (gas: 75787)\n[PASS] test_transferFromAboveAllowanceRevertsAtomically() (gas: 115746)\n[PASS] test_transferFromAboveBalanceRestoresAllowance() (gas: 121683)\n[PASS] test_transferFromInfiniteAllowanceRemainsInfinite() (gas: 214690)\n[PASS] test_transferFromSelfStillSpendsAllowance() (gas: 105312)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 254639)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114189)\n[PASS] test_transferFromWithoutAllowanceRevertsEvenForDeployer() (gas: 109564)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 66578)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35318)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 91462)\n[PASS] test_transferToContractNeedsNoReceiverHook() (gas: 400269)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73389)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 18.21ms (64.30ms CPU time)\n\nRan 1 test for test/UnlockToken.invariant.t.sol:UnlockTokenInvariantTest\n[PASS]\nUnlockTokenInvariantTest invariants:\n[PASS] invariant_allBalancesConserveTheOriginalSupply\n[PASS] invariant_totalSupplyIsFixed\n UnlockTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2677  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2742  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2773  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 5908\n  Bound result 1\n  Bound result 5\n  Bound result 0\n  Bound result 50000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 6218\n  Bound result 1\n  Bound result 33788374577199570451\n  Bound result 11000000000000000000\n  Bound result 1604\n  Bound result 0\n  Bound result 20000000000000000000\n  Bound result 0\n  Bound result 1311\n  Bound result 3072\n  Bound result 1000000000000000000\n  Bound result 21788374577199568844\n  Bound result 18\n  Bound result 5468\n  Bound result 4\n  Bound result 5715\n  Bound result 999999950999999999999995691\n  Bound result 1772\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 48\n  Bound result 13000000032734687540\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 6425\n  Bound result 9\n  Bound result 0\n  Bound result 5\n  Bound result 8\n  Bound result 6321\n  Bound result 4\n  Bound result 388\n  Bound result 10\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.15s (1.14s CPU time)\n\nRan 2 test suites in 1.15s (1.16s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":62,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"UnlockToken.approve(address,uint256)\",\"UnlockToken.transfer(address,uint256)\",\"UnlockToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":160,\"README.md\":125,\"foundry.toml\":21,\"remappings.txt\":2,\"src/UnlockToken.sol\":16,\"test/UnlockToken.invariant.t.sol\":82,\"test/UnlockToken.t.sol\":368},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":899,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":310,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/UnlockToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1ec570f2256736c02b92ba864e158748a078bf1136891b952b549c9abdbcdfe8","verifiedTreeHash":"e2d27d0721db430f1d2fc0170b7271dc4d928d44","verifierVersion":"0.1.0+c3fba9eb"},{"checks":[{"durationMs":1527,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.45s\nCompiler run successful!\n","passed":true},{"durationMs":10227,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/UnlockToken.t.sol:UnlockTokenTest\n[PASS] testFuzz_insufficientAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 122908, ~: 123540)\nLogs:\n  Bound result 494678092590098199019163206\n  Bound result 505321907409901801231973390\n\n[PASS] testFuzz_overdrawAlwaysReverts(uint256,uint256) (runs: 256, μ: 126931, ~: 127931)\nLogs:\n  Bound result 494678092590098193113208620\n  Bound result 115792089237316195423570985008687907853269984665640069361364993909720267567911\n\n[PASS] testFuzz_transferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 164693, ~: 165557)\nLogs:\n  Bound result 16842655825\n  Bound result 16842655827\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 256, μ: 193576, ~: 196018)\nLogs:\n  Bound result 1\n  Bound result 0\n\n[PASS] test_adminMintAndBurnEntryPointsAreUnavailable() (gas: 708541)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163655)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88756)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_create2MintsToFactoryAndNotOrigin() (gas: 401006)\n[PASS] test_factoryDistributionAndClaimArriveWhole() (gas: 581131)\n[PASS] test_metadataAndInitialSupply() (gas: 107628)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferAboveBalanceRevertsWithoutChangingBalances() (gas: 65311)\n[PASS] test_transferEntireBalance() (gas: 75787)\n[PASS] test_transferFromAboveAllowanceRevertsAtomically() (gas: 115746)\n[PASS] test_transferFromAboveBalanceRestoresAllowance() (gas: 121683)\n[PASS] test_transferFromInfiniteAllowanceRemainsInfinite() (gas: 214690)\n[PASS] test_transferFromSelfStillSpendsAllowance() (gas: 105312)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 254639)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114189)\n[PASS] test_transferFromWithoutAllowanceRevertsEvenForDeployer() (gas: 109564)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 66578)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35318)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 91462)\n[PASS] test_transferToContractNeedsNoReceiverHook() (gas: 400269)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73389)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 106.32ms (257.18ms CPU time)\n\nRan 18 tests for test/UnlockToken.edges.t.sol:UnlockTokenEdgeCasesTest\n[PASS] testFuzz_approvalReplacementIsIdempotentAndIsolated(uint256,uint256,uint256) (runs: 1000, μ: 377855, ~: 378690)\n[PASS] testFuzz_delegatedSelfTransferOnlySpendsAllowance(uint256,uint256,uint256) (runs: 1000, μ: 269243, ~: 269856)\nLogs:\n  Bound result 957062002665530003920456353\n  Bound result 457964835228904447753937788\n  Bound result 115792089237316195423570985008687907853269984665640106074622355192873680910264\n\n[PASS] testFuzz_failedDelegatedOverdrawPreservesApproval(uint256,uint256,bool,bool) (runs: 1000, μ: 340377, ~: 340624)\nLogs:\n  Bound result 382074602135490187547\n  Bound result 63418533004366975386073953850570946840812205\n\n[PASS] testFuzz_failedZeroRecipientSpendCanBeRetriedWithValidRecipient(uint256,bool) (runs: 1000, μ: 360456, ~: 361114)\nLogs:\n  Bound result 283762842125292445499283685\n\n[PASS] testFuzz_roundTripRestoresAllBalances(uint256,uint256) (runs: 1000, μ: 296516, ~: 298801)\nLogs:\n  Bound result 912783944050970557508081408\n  Bound result 349472847514501505885746752\n\n[PASS] testFuzz_splitDelegatedSpendEqualsSingleSpend(uint256,uint256,uint256) (runs: 1000, μ: 440532, ~: 442595)\nLogs:\n  Bound result 15374\n  Bound result 18\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n\n[PASS] test_emptySelfTransferCannotCreateTokens() (gas: 180037)\n[PASS] test_entireSupplyCanBeSpentWithAnExactFiniteAllowanceOnlyOnce() (gas: 324457)\n[PASS] test_infiniteAllowanceCannotOverdrawAndCanBeRevoked() (gas: 278801)\n[PASS] test_infiniteApprovalCanBeReplacedWithAFiniteOne() (gas: 344301)\n[PASS] test_maxUintMinusOneIsAFiniteAllowance() (gas: 223832)\n[PASS] test_maxUintTransferCannotWrapTheDeployerBalance() (gas: 135588)\n[PASS] test_nativeValueIsRejectedWithoutMovingTokens() (gas: 167954)\n[PASS] test_oneBaseUnitCanMakeARoundTrip() (gas: 280877)\n[PASS] test_ownerNeedsSelfApprovalToUseTransferFrom() (gas: 329009)\n[PASS] test_zeroDelegatedTransferEmitsAndPreservesFiniteAllowance() (gas: 209905)\n[PASS] test_zeroDelegatedTransferToZeroRevertsForFiniteAndInfiniteAllowances() (gas: 253698)\n[PASS] test_zeroSpenderIsRejectedForZeroAndMaxApproval() (gas: 205250)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 106.44ms (619.48ms CPU time)\n\nRan 2 tests for test/UnlockToken.invariant.t.sol:UnlockTokenInvariantTest\n[PASS]\nUnlockTokenInvariantTest invariants:\n[PASS] invariant_allBalancesConserveTheOriginalSupply\n[PASS] invariant_allowancesMatchApprovalsAndSuccessfulSpending\n[PASS] invariant_balancesMatchAuthorizedMovements\n[PASS] invariant_totalSupplyIsFixed\n UnlockTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+---------------------+-------+---------+----------╮\n| Contract     | Selector            | Calls | Reverts | Discards |\n+=================================================================+\n| TokenHandler | approve             | 4647  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | attemptTransferFrom | 4715  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | overdraw            | 4743  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectZeroAddress   | 4612  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | revoke              | 4757  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transfer            | 4552  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transferFrom        | 4742  | 0       | 0        |\n╰--------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 409830007568789204205330978254356374246400469871621571706693209\n  Bound result 123000000000000000000\n  Bound result 8699\n  Bound result 0\n  Bound result 2513\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129654562\n  Bound result 1375\n  Bound result 88\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129647592\n  Bound result 11\n  Bound result 30\n  Bound result 7408\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129647840\n  Bound result 1024\n  Bound result 0\n  Bound result 8\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1044\n  Bound result 0\n  Bound result 0\n  Bound result 638212884\n  Bound result 2412\n  Bound result 8\n  Bound result 35\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129635526\n  Bound result 1000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665639564039580584007913767859396\n  Bound result 25271847093802\n  Bound result 18\n  Bound result 10\n  Bound result 60\n  Bound result 0\n  Bound result 9951\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007912491435613\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 40\n  Bound result 3421\n  Bound result 0\n  Bound result 0\n  Bound result 406\n  Bound result 999999999999999999361780976\n  Bound result 999999999999999999361780980\n  Bound result 1021\n  Bound result 0\n  Bound result 0\n\n[PASS] test_handlerExercisesSpendingRevocationAndRollback() (gas: 4219975)\nLogs:\n  Bound result 100\n  Bound result 40\n  Bound result 20\n  Bound result 60\n  Bound result 60\n  Bound result 10\n  Bound result 11\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.13s (10.13s CPU time)\n\nRan 3 test suites in 10.14s (10.35s CPU time): 48 tests passed, 0 failed, 0 skipped (48 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"UnlockToken.approve(address,uint256)\",\"UnlockToken.transfer(address,uint256)\",\"UnlockToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":160,\"README.md\":125,\"foundry.toml\":21,\"remappings.txt\":2,\"src/UnlockToken.sol\":16,\"test/UnlockToken.edges.t.sol\":337,\"test/UnlockToken.invariant.t.sol\":248,\"test/UnlockToken.t.sol\":368},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"20b90853434f36b9c01748d14d60dd7aff676ace454fd43bb5cb715c85f6066e","verifiedTreeHash":"82954ca06afbf67b5e80173014b794074e6e2123","verifierVersion":"0.1.0+c3fba9eb"},{"checks":[{"durationMs":1231,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.15s\nCompiler run successful!\n","passed":true},{"durationMs":917,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/UnlockToken.t.sol:UnlockTokenTest\n[PASS] testFuzz_insufficientAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 122794, ~: 123528)\nLogs:\n  Bound result 18\n  Bound result 255\n\n[PASS] testFuzz_overdrawAlwaysReverts(uint256,uint256) (runs: 256, μ: 126795, ~: 127873)\nLogs:\n  Bound result 18\n  Bound result 255\n\n[PASS] testFuzz_transferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 164406, ~: 165557)\nLogs:\n  Bound result 16842655825\n  Bound result 16842655827\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 256, μ: 192657, ~: 196018)\nLogs:\n  Bound result 18\n  Bound result 8\n\n[PASS] test_adminMintAndBurnEntryPointsAreUnavailable() (gas: 708541)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163655)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88756)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_create2MintsToFactoryAndNotOrigin() (gas: 401006)\n[PASS] test_factoryDistributionAndClaimArriveWhole() (gas: 581131)\n[PASS] test_metadataAndInitialSupply() (gas: 107628)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferAboveBalanceRevertsWithoutChangingBalances() (gas: 65311)\n[PASS] test_transferEntireBalance() (gas: 75787)\n[PASS] test_transferFromAboveAllowanceRevertsAtomically() (gas: 115746)\n[PASS] test_transferFromAboveBalanceRestoresAllowance() (gas: 121683)\n[PASS] test_transferFromInfiniteAllowanceRemainsInfinite() (gas: 214690)\n[PASS] test_transferFromSelfStillSpendsAllowance() (gas: 105312)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 254639)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114189)\n[PASS] test_transferFromWithoutAllowanceRevertsEvenForDeployer() (gas: 109564)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 66578)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35318)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 91462)\n[PASS] test_transferToContractNeedsNoReceiverHook() (gas: 400269)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73389)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 12.95ms (54.75ms CPU time)\n\nRan 1 test for test/UnlockToken.invariant.t.sol:UnlockTokenInvariantTest\n[PASS]\nUnlockTokenInvariantTest invariants:\n[PASS] invariant_allBalancesConserveTheOriginalSupply\n[PASS] invariant_totalSupplyIsFixed\n UnlockTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2677  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2742  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2773  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 5908\n  Bound result 1\n  Bound result 5\n  Bound result 0\n  Bound result 50000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 6218\n  Bound result 1\n  Bound result 33788374577199570451\n  Bound result 11000000000000000000\n  Bound result 1604\n  Bound result 0\n  Bound result 20000000000000000000\n  Bound result 0\n  Bound result 1311\n  Bound result 3072\n  Bound result 1000000000000000000\n  Bound result 21788374577199568844\n  Bound result 18\n  Bound result 5468\n  Bound result 4\n  Bound result 5715\n  Bound result 999999950999999999999995691\n  Bound result 1772\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 48\n  Bound result 21788374577199568847\n  Bound result 0\n  Bound result 5\n  Bound result 3041954474\n  Bound result 6448\n  Bound result 9\n  Bound result 3565\n  Bound result 5\n  Bound result 5\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 817.58ms (815.82ms CPU time)\n\nRan 2 test suites in 819.20ms (830.53ms CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":34,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"UnlockToken.approve(address,uint256)\",\"UnlockToken.transfer(address,uint256)\",\"UnlockToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":160,\"README.md\":125,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/UnlockToken.sol\":16,\"test/UnlockToken.invariant.t.sol\":82,\"test/UnlockToken.t.sol\":368},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"70187e8164f7968b5c81bc1d1d86102b0f489803f89a157064f1ddda57594177","verifiedTreeHash":"c86fe84bd988417859b7fb8a0f47efabc4445788","verifierVersion":"0.1.0+c3fba9eb"}]}