{"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":"f4000894-f623-4d31-931e-3ec8b75567b4","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"26fd7d5d6c699adb171b43a5e373a7a26b015c37709c06bec1f19d6c459c3ddb","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":"3193dc312d817664e21fb54648af63f892ff2a619e89f493a572926e05683c1f","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":"9b0f0d7f80b6522ffff7d3d9c677b7d24353843c2280d9bb16fd3cca0597d196","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":"37c666ae85bf561be6efddb1381f45c6421b383e53041dc872b57a2c3a0f3878","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":"3c348248331b55718ea2f53e8d1d72e260d1c6ed5485df84cee2d3a1c9346b2c","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":"2231dae448dd6b1e9588b16a4c413baf9ea241882953243c8ca5194d138ac1c5","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":"65aa8261d2c9f7f139810248deeb4a6293e0e6ce4fa0a64dba5a54b413af3ed5","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"32df645bf31848ef135b6bc817e9b5b754932c7ac25101f9d58f53785a67966f","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: GoatPro (GPRO).\nToken name: GoatPro\nToken symbol: GPRO\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"044aad3873e7d4d1759a3bdbf31e5e5789d6afa5548a3b5342083265c0904005","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"f4000894-f623-4d31-931e-3ec8b75567b4","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2289-goatpro"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51742","feedbackHash":"5b7b523fc8c5861a75b74b4fee3fc32327b5b9cc75aa4be4ac04b70551af4f2c","nodeKey":"audit_economics","submissionHash":"26fd7d5d6c699adb171b43a5e373a7a26b015c37709c06bec1f19d6c459c3ddb","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51884","feedbackHash":"d85eea2d9562761a6866a6ca6b0ccf73c05f9a2bc1151b882a519f9ce3f96045","nodeKey":"audit_flow","submissionHash":"3193dc312d817664e21fb54648af63f892ff2a619e89f493a572926e05683c1f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52214","feedbackHash":"f3d6387cc9a059ac7201696cb34ba26feee68d9e41a65589868f410d877c87e0","nodeKey":"audit_judge","submissionHash":"9b0f0d7f80b6522ffff7d3d9c677b7d24353843c2280d9bb16fd3cca0597d196","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53923","feedbackHash":"b645e9845e10539951894312eaec1f359a2943924caa8e35b4a8fc8a1bfbe998","nodeKey":"audit_math","submissionHash":"37c666ae85bf561be6efddb1381f45c6421b383e53041dc872b57a2c3a0f3878","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51474","feedbackHash":"2f004e375ea7dcc88839c4b6bbee476de0506db04007d478f176990add8a9ceb","nodeKey":"audit_permissions","submissionHash":"3c348248331b55718ea2f53e8d1d72e260d1c6ed5485df84cee2d3a1c9346b2c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52087","feedbackHash":"89b84faf9f89fc9963ef76b0587538a58707cdafdb15ea52cbe4b7ac4365df43","nodeKey":"build_contract_project","submissionHash":"2231dae448dd6b1e9588b16a4c413baf9ea241882953243c8ca5194d138ac1c5","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51095","feedbackHash":"6a142990673012094b37fe637312e9fe616c489092ad8d4f4b6030fb6a5fe34b","nodeKey":"manifest","submissionHash":"65aa8261d2c9f7f139810248deeb4a6293e0e6ce4fa0a64dba5a54b413af3ed5","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51090","feedbackHash":"f6d7a50e7b783bf394ca59b7ba7727ffd98cdb3475ac7988a10e6f4b180a585d","nodeKey":"write_foundry_tests","submissionHash":"32df645bf31848ef135b6bc817e9b5b754932c7ac25101f9d58f53785a67966f","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"aa7df89260308b2fa19c61276e13c995e56a1b76639539e24f5739c9c86d7f2d","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"1772ac668ee248bcf6fa36c768a7785cf8612ec9ed18676e00ee52400bec55ad","device":"553a378efc6a19cb","findings":[],"hash":"2231dae448dd6b1e9588b16a4c413baf9ea241882953243c8ca5194d138ac1c5","nodeId":"df631ebf-420b-431e-a50d-c0c278a3631f","outcome":"completed","summary":"Implemented GoatPro (GPRO): 1 billion tokens, 18 decimals, minted once to the deployer, with no administrative powers.\n\nIncluded vendored dependencies, deployment documentation, and success, failure, fuzz, and invariant tests.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed: 29 tests using the required seed.\n- `forge fmt --check` passed.","treeHash":"132e974502c21b6c98d830669f5c239efb4e254a","usage":{"cachedInputTokens":495232,"inputTokens":67182,"model":"gpt-6-astra","outputTokens":13399,"runtime":"codex","turns":4,"wallClockMs":351942}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce319efac2b76da0","findings":[],"hash":"26fd7d5d6c699adb171b43a5e373a7a26b015c37709c06bec1f19d6c459c3ddb","nodeId":"dc89b0b2-58f1-466b-8b42-a095b8980e8a","outcome":"completed","summary":"Review complete. The findings file is written and no repository files were changed.\n\n**Result: no defects found.** GoatPro is a 17-line contract that inherits the vendored OpenZeppelin v5.0.2 ERC20 and does one thing: mint 1,000,000,000 GPRO with 18 decimals to the deployer in its constructor. I checked it against the Economic Security, Invariant and Flow Gap guides and could not substantiate a single failing input.\n\nWhat I verified:\n- **Supply invariant.** The constructor's single mint equals the manifest value exactly. The compiled ABI exposes only the ten standard ERC-20 functions plus the supply constant. Mint, issue, owner, initialize, receive and fallback probes all revert.\n- **Flow exactness.** Transfers from a CREATE2 factory to a distributor, a pool address and a remainder address sum to the whole supply with no shortfall, and the factory cannot overdraw by one wei afterward.\n- **No privileged power.** There is no owner, pause, blacklist or seize path. The factory cannot pull a holder's balance without an approval.\n- **Dependency integrity.** I downloaded the upstream v5.0.2 archive, confirmed its checksum matches the one in DEPENDENCIES.md, and found all five vendored files byte-identical.\n- **Runtime.** An opcode scan found no DELEGATECALL, CALLCODE, SELFDESTRUCT or external call opcodes.\n- **Tests.** The project's 29 tests pass, including the fuzz and invariant suites. My four scratch tests also passed and were removed. One early fuzz failure was my own test double-counting the test contract as a recipient, not a token defect.\n\nThe aderyn large-numeric-literal lead is a style note only. The literal evaluates to the correct supply. The one piece I could not reach is the protected Uniswap v4 seed-and-swap harness, which needs the verifier's launch infrastructure. A plain OpenZeppelin ERC20 has no transfer hook that could interfere with it.\n\nThe coverage record has ten rows: the three entry points plus seven invariants, all marked as holding.","treeHash":null,"usage":{"cachedInputTokens":586320,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":9009,"runtime":"claude","turns":17,"wallClockMs":197776}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4aa8623bfb8d8e5e","findings":[],"hash":"3193dc312d817664e21fb54648af63f892ff2a619e89f493a572926e05683c1f","nodeId":"5c351bb2-7d3a-4ae0-a190-8f09328c88ce","outcome":"completed","summary":"The review is complete. The findings file holds an empty finding list and nine coverage rows.\n\n**Result: no defects found.** GoatPro is a 17-line wrapper over OpenZeppelin ERC-20 v5.0.2 that mints the full supply once to the deployer in the constructor and adds nothing else.\n\nWhat I verified, in my area (Execution Trace, Periphery, First Principles):\n\n- **All three entry points hold.** I traced approve, transfer and transferFrom through the inherited code. Zero-address sender and receiver revert, insufficient balance or allowance reverts atomically with allowance restored, the unlimited allowance is not decremented, and finite residuals are exact under fuzzing. A transferFrom with a zero sender cannot mint.\n- **Constructor and initial state hold.** The supply is exactly 10^27 base units, credited to msg.sender, so a CREATE2 deploy through the factory credits the factory and not the wallet that called it. Decimals, name and symbol match the brief.\n- **No privileged surface exists.** The compiled ABI exposes only the ten standard ERC-20 selectors. All 22 privileged selectors the protected harness probes revert from both the factory and a stranger. There is no receive or fallback, so empty-calldata and ETH calls revert.\n- **Runtime bytecode is clean.** An opcode scan of the deployed code finds no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or STATICCALL, and the size is well under the EIP-170 limit.\n- **Periphery is genuine.** I downloaded the five vendored OpenZeppelin files from the published 5.0.2 package and they are byte-identical to the copies under lib/.\n- **Launch flows move exact amounts.** A scratch test reproduced the distributor share, pool seed and remainder leaving the factory whole, a whole claim, and transfers to and from the pool address in both directions.\n\nThe project's own 29 tests and format check pass. The aderyn large-literal lead is a style note only, since the literal evaluates to the intended supply. The scratch test and temp download directory have been removed, so no tracked file was changed.","treeHash":null,"usage":{"cachedInputTokens":521578,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":12665,"runtime":"claude","turns":29,"wallClockMs":174296}},{"artifacts":[],"attempt":1,"bundleHash":"e87af47e1d69c9a5df9b5ab0a8b997f8e6c4f0884554985391baac12384673bf","device":"e02faafd8034e613","findings":[],"hash":"32df645bf31848ef135b6bc817e9b5b754932c7ac25101f9d58f53785a67966f","nodeId":"24d46280-4bb3-4633-8ddd-0ed4fa000958","outcome":"completed","summary":"Added 18 tests covering failure paths, allowance boundaries, and rollback. Expanded invariants to exercise invalid calls, balance conservation, and holder transfers.\n\nValidation passed: `forge build --offline` and all 47 tests with the required seed, including 32,768 invariant calls.\n\nOnly `test/` files changed. No implementation defects found.","treeHash":"f627bee42a25aa4a6540c580c0958c79b2b5bddc","usage":{"cachedInputTokens":574208,"inputTokens":75332,"model":"gpt-6-astra","outputTokens":9992,"runtime":"codex","turns":5,"wallClockMs":261095}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"733f63ff9321d57a","findings":[],"hash":"37c666ae85bf561be6efddb1381f45c6421b383e53041dc872b57a2c3a0f3878","nodeId":"70ea1337-0197-47c0-b596-5d93d370394f","outcome":"completed","summary":"The review is complete and the findings file is written. No defects were found in the assigned area.\n\n**Result:** `.imd-findings.json` holds an empty findings list and nine coverage rows, one for each of the three listed entry points plus six invariant and boundary rows.\n\n**What I checked, against the Math Precision, Boundary and Numerical Gap guides:**\n- The token is `src/GoatPro.sol`, a plain OpenZeppelin ERC20 with one constructor mint and no other code. The five vendored OpenZeppelin files hash-match upstream v5.0.2 byte for byte, so the unchecked arithmetic in `_update` rests on upstream's proven bounds.\n- The supply literal evaluates to exactly 10^27, matching the README and manifest figure, and decimals is the literal 18. This resolves the aderyn large-literal lead as not a defect.\n- The launch shares of 10%, 80%, 2% and 8% divide 10^27 with zero remainder and sum back exactly. Transfers carry no fee, burn or rounding, so the distributor, pool and remainder flows arrive whole.\n- Boundary cases were exercised in a scratch test under test/scratch: full balance, one wei over balance, max uint, zero value, self-transfer, allowance one wei short, max and max-minus-one allowance, native value with and without calldata, and mint/burn selectors. All behave as intended. A 512-run fuzz confirmed conservation of supply.\n- There are no external calls, no payable functions, no bytes decoding and no division, so no numerical-gap seam can open.\n\n**One behaviour worth knowing, not a defect:** anyone can call `transferFrom` with value 0 on any holder without an allowance. It moves nothing and emits a zero-value Transfer event. This is standard ERC-20 behaviour and the project's own test suite documents it as intended.\n\nNo tracked source, config or library file was changed. The scratch test file is in the directory reserved for it and is not kept.","treeHash":null,"usage":{"cachedInputTokens":496019,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":12669,"runtime":"claude","turns":17,"wallClockMs":173903}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0e3b71e2ffcd200b","findings":[{"citation":"resolved","description":"GoatPro inherits OpenZeppelin v5.0.2 ERC20 unchanged (vendored files diffed byte-identical against the upstream v5.0.2 tag). approve(spender, value) overwrites the allowance rather than adjusting it, and OZ v5 exposes no increaseAllowance/decreaseAllowance. This is the well-known EIP-20 approval race: a spender who sees an owner's pending approve(newValue) can front-run it with transferFrom(oldValue) and then spend newValue as well. It is a property of the ERC-20 standard the requester asked for, is already documented in README.md ('revoke it and wait for confirmation before granting the replacement'), and requires no change to the agreed design. Recorded so the judge sees the permission-model asymmetry (approve ↔ transferFrom) was examined. Access-control, trust-gap and asymmetry review otherwise found no defect: there is no owner, role, initializer, proxy, mint, burn, pause, blocklist, receive or fallback path; the ABI is exactly the ERC-20 surface plus INITIAL_SUPPLY; the runtime bytecode contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE opcodes; the constructor mints 1e27 once to msg.sender (the factory under launchCustom) and the factory keeps no privilege afterwards.","line":8,"path":"src/GoatPro.sol","reproduction":"State: owner O holds >=150 GPRO and has called approve(S, 100). Sequence: (1) O broadcasts approve(S, 50). (2) S front-runs with transferFrom(O, S, 100) -> succeeds, allowance now 0. (3) O's approve(S, 50) mines, allowance = 50. (4) S calls transferFrom(O, S, 50) -> succeeds. Actual: S received 150. What O intended: S limited to at most 100 (and then 50). Verified with a Foundry scratch test (test_approveRace_isPossible) on this tree: assertEq(t.balanceOf(S), 150) passes. Mitigation is the documented approve(0)-then-approve(new) pattern; no contract change recommended.","severity":"info","snippet":"contract GoatPro is ERC20 {","title":"Standard ERC-20 approve-overwrite race (inherent to the standard; trust assumption, not a code defect)"}],"hash":"3c348248331b55718ea2f53e8d1d72e260d1c6ed5485df84cee2d3a1c9346b2c","nodeId":"12eca3ea-ab1c-4b3b-bc50-3e443b236784","outcome":"completed","summary":"The review is complete. The findings file is written and validated, and the working tree holds no changes other than it.\n\n**Result: no defects in the assigned area.** GoatPro is a 17-line wrapper over OpenZeppelin v5.0.2 ERC20 with one constructor mint. The Access Control, Trust Gap and Asymmetry checklists found nothing to fix.\n\nWhat I verified:\n\n- **Permission model is empty by design.** There is no owner, role, initializer, proxy, mint, burn, pause, blocklist, receive or fallback path. The compiled ABI is exactly the ERC-20 surface plus the INITIAL_SUPPLY constant.\n- **Constructor roles.** The whole supply mints once to msg.sender, which is the factory under a CREATE2 launch. A fixture confirmed the factory's caller receives nothing and the deployer keeps no power over holders afterwards.\n- **Asymmetry pairs.** The transfer and transferFrom paths share one debit routine with no branches, fees or exemptions. The approve and allowance-spend pair behaves as upstream documents, including the unlimited-allowance case.\n- **Dependency integrity.** All five vendored OpenZeppelin files diffed byte-identical to the upstream v5.0.2 tag, so no trust gap hides in the library.\n- **Bytecode.** The runtime contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE opcodes, so the protected floor's opcode test will pass.\n- **Existing suite.** All 29 project tests pass, including the stateful invariant run.\n\nThe one entry in the file is informational. It records the standard ERC-20 approve-overwrite race with a concrete front-run sequence. It is inherent to the standard the requester asked for and is already documented in the README, so it needs no code change.\n\nCoverage rows answer all three listed entry points as holding, plus six invariant rows covering the constructor, supply growth, privileged calls, launch flows, forbidden opcodes and dependency integrity. The scratch test directory was removed after use.","treeHash":null,"usage":{"cachedInputTokens":495466,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":11345,"runtime":"claude","turns":24,"wallClockMs":184485}},{"artifacts":[],"attempt":1,"bundleHash":"91d00bfb6987a49e4784522d53e119a010e9953b92ed30b59e496142c26c6262","device":"aeca54a62e4f602e","findings":[],"hash":"65aa8261d2c9f7f139810248deeb4a6293e0e6ce4fa0a64dba5a54b413af3ed5","nodeId":"a5b1c3fc-f565-47d0-8d1f-92de04b698a8","outcome":"completed","summary":"Created [launch.json](/home/imd/.identitymd/work/f4000894-f623-4d31-931e-3ec8b75567b4/a5b1c3fc-f565-47d0-8d1f-92de04b698a8/launch.json) matching GoatPro’s constructor, supply, and required pool and economics values.\n\n`forge build` succeeded; all 29 local tests passed with the supplied fuzz seed. Only `launch.json` is changed for submission.","treeHash":"d99b4ae9f6a3f7d3a37291981402a31a316b2a09","usage":{"cachedInputTokens":221312,"inputTokens":38784,"model":"gpt-6-astra","outputTokens":2390,"runtime":"codex","turns":3,"wallClockMs":71174}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6b47d1bf92391c22","findings":[],"hash":"9b0f0d7f80b6522ffff7d3d9c677b7d24353843c2280d9bb16fd3cca0597d196","nodeId":"71a9fbf6-c1ee-4287-9862-f050a5df2c06","outcome":"completed","summary":"I found no defects in GoatPro, so `.imd-findings.json` has an empty findings list plus coverage rows. No other file in the tree was changed.\n\n**The specialist finding:** only the permissions specialist reported anything: the approve-overwrite race, rated info. I dropped it. It's true that a spender can front-run a change of allowance and spend both the old and new amounts. But every ERC-20 behaves this way by design, so it isn't a defect in this code. The README already tells holders to revoke an allowance and wait for confirmation before granting a new one. There was nothing to merge, since no other specialist reported anything.\n\n**What I checked myself:**\n- **Contract:** `src/GoatPro.sol` inherits OpenZeppelin v5 `ERC20` and overrides nothing. The constructor runs `_mint(msg.sender, INITIAL_SUPPLY)` once, for 1,000,000,000 tokens at 18 decimals.\n- **No privileged powers:** there is no owner, role, further mint, burn, pause, blocklist, `receive` or `fallback`.\n- **Library code:** I read the vendored `_update`, `_approve` and `_spendAllowance` and they are standard. Transfers move exactly the amount asked, with no fee or burn. That means the launch steps arrive in full: the factory paying the distributor, seeding the pool, and the PoolManager's `transferFrom` during settlement.\n- **Static analysis:** aderyn's only line, a \"large numeric literal\" at line 10, is the supply constant written with digit separators. It's not a defect.\n- **Manifest:** `launch.json` matches the code and the schema. It has empty `constructorArgs` for the zero-argument constructor, `totalSupply` of `1000000000000000000000000000`, decimals 18, and only schema keys.\n- **Build and tests:** `forge build` succeeds and `forge test` passes all 47 tests in the 3 suites.\n\n**Coverage:** all three entry points (`approve`, `transfer`, `transferFrom`) are marked `holds`. A fourth row records that the supply is fixed and minted once to the deployer.\n\nI couldn't run the protected floor tests, because the harness files they import aren't in this tree.","treeHash":null,"usage":{"cachedInputTokens":212292,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2207,"runtime":"claude","turns":5,"wallClockMs":40479}}],"verification":[{"checks":[{"durationMs":1107,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\n","passed":true},{"durationMs":1779,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApprovedTransferSpendsOnlyRequestedAmount(uint256,uint256) (runs: 512, μ: 167558, ~: 169621)\nLogs:\n  Bound result 68848763748905517586064635\n  Bound result 11416287440381920978389683\n\n[PASS] testFuzz_OverAllowanceTransferReverts(uint256,uint256) (runs: 512, μ: 127485, ~: 127609)\nLogs:\n  Bound result 12418381220\n  Bound result 11934746382658991692945819881035838027582055972343316\n\n[PASS] testFuzz_OverBalanceTransferReverts(uint256) (runs: 512, μ: 71480, ~: 71412)\nLogs:\n  Bound result 1425947357818619797492556054955633462053556372884582118159\n\n[PASS] testFuzz_TransfersConserveSupply(uint256) (runs: 512, μ: 159321, ~: 159971)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 141852)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 40229)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12243)\n[PASS] test_Create2MintsToFactoryRatherThanItsCaller() (gas: 293714)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 98301)\n[PASS] test_EntireBalanceCanBeTransferred() (gas: 78380)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 658130)\n[PASS] test_MetadataAndInitialSupply() (gas: 122343)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 765288)\n[PASS] test_RevokedAllowanceCannotBeSpent() (gas: 148439)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_SelfTransferStillRequiresSufficientBalance() (gas: 43061)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96230)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 120541)\n[PASS] test_TransferFromRejectsInsufficientBalanceAndRestoresAllowance() (gas: 126136)\n[PASS] test_TransferFromRejectsUnapprovedCaller() (gas: 124629)\n[PASS] test_TransferFromRejectsZeroRecipientAndRestoresAllowance() (gas: 119071)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 251206)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 108166)\n[PASS] test_TransferRejectsInsufficientBalance() (gas: 57404)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 74871)\n[PASS] test_UnlimitedAllowanceIsNotDecreased() (gas: 219671)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73432)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78749)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 15.84ms (65.72ms CPU time)\n\nRan 1 test for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| GoatProHandler | approve      | 1982  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | revoke       | 2137  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transfer     | 2043  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transferFrom | 2030  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000\n  Bound result 27412424478040115\n  Bound result 348\n  Bound result 0\n  Bound result 375481671837564171590818255\n  Bound result 0\n  Bound result 374880132967353846786439951\n  Bound result 425\n  Bound result 0\n  Bound result 0\n  Bound result 100315897529194528891195511\n  Bound result 0\n  Bound result 117300739\n  Bound result 0\n  Bound result 5209\n  Bound result 0\n  Bound result 999999999999999999882694052\n  Bound result 563\n  Bound result 0\n  Bound result 0\n  Bound result 169\n  Bound result 0\n  Bound result 394\n  Bound result 2584\n  Bound result 0\n  Bound result 1393\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 131600731207\n  Bound result 8403337654999230891007588\n  Bound result 763\n  Bound result 6387\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.70s (1.70s CPU time)\n\nRan 2 test suites in 1.71s (1.72s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":29,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GoatPro.approve(address,uint256)\",\"GoatPro.transfer(address,uint256)\",\"GoatPro.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"LICENSE\":21,\"README.md\":101,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.invariant.t.sol\":118,\"test/GoatPro.t.sol\":395},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":469,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":246,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/GoatPro.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2231dae448dd6b1e9588b16a4c413baf9ea241882953243c8ca5194d138ac1c5","verifiedTreeHash":"132e974502c21b6c98d830669f5c239efb4e254a","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1371,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.30s\nCompiler run successful!\n","passed":true},{"durationMs":7849,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/GoatPro.edge.t.sol:GoatProEdgeTest\n[PASS] testFuzz_ApprovalReplacementIsIdempotentAndIsolated(uint256,uint256) (runs: 1000, μ: 331489, ~: 331511)\n[PASS] testFuzz_BalanceFailureRestoresAnyFiniteAllowance(uint256,uint256,uint256) (runs: 1000, μ: 215429, ~: 215800)\nLogs:\n  Bound result 1085\n  Bound result 100000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039357584007913129656618\n\n[PASS] testFuzz_DirectTransferPreservesBothPartiesApprovals(uint256,uint256) (runs: 1000, μ: 233976, ~: 234761)\nLogs:\n  Bound result 30867478847\n\n[PASS] testFuzz_InvalidRecipientRestoresAllowance(uint256,uint256) (runs: 1000, μ: 132780, ~: 133448)\nLogs:\n  Bound result 133\n\n[PASS] testFuzz_SplitDelegatedSpendingMatchesSingleTransfer(uint256,uint256,uint256) (runs: 1000, μ: 380610, ~: 386503)\nLogs:\n  Bound result 255959242102027574\n  Bound result 104548657862439148\n\n[PASS] test_ApprovalBeforeFundingSurvivesFailureAndCanLaterBeSpent() (gas: 295733)\n[PASS] test_DelegatedFullSupplyTransferCannotBeRepeated() (gas: 239542)\n[PASS] test_MaximumFiniteApprovalIsDecreased() (gas: 162673)\n[PASS] test_MaximumTransferRevertsWithoutChangingApproval() (gas: 132926)\n[PASS] test_OneBaseUnitRoundTripRestoresBalances() (gas: 151813)\n[PASS] test_OwnerCallingTransferFromStillNeedsSelfApproval() (gas: 200125)\n[PASS] test_SpenderCanBeTheRecipientWithoutOwningTokens() (gas: 172268)\n[PASS] test_UnlimitedApprovalCanBeReplacedWithFiniteApproval() (gas: 240161)\n[PASS] test_UnlimitedApprovalCannotSpendAnExhaustedBalance() (gas: 201509)\n[PASS] test_ZeroDelegatedTransferEmitsEventAndPreservesFiniteApproval() (gas: 139147)\n[PASS] test_ZeroOwnerCannotBeUsedAsAMintSource() (gas: 108159)\n[PASS] test_ZeroRecipientIsRejectedEvenForZeroDelegatedTransfer() (gas: 126568)\n[PASS] test_ZeroSpenderIsRejectedEvenForZeroApproval() (gas: 52762)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 72.62ms (325.99ms CPU time)\n\nRan 28 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApprovedTransferSpendsOnlyRequestedAmount(uint256,uint256) (runs: 512, μ: 167306, ~: 169621)\nLogs:\n  Bound result 5\n  Bound result 0\n\n[PASS] testFuzz_OverAllowanceTransferReverts(uint256,uint256) (runs: 512, μ: 127380, ~: 127621)\nLogs:\n  Bound result 2482616036\n  Bound result 884891491826767654333552\n\n[PASS] testFuzz_OverBalanceTransferReverts(uint256) (runs: 512, μ: 71492, ~: 71412)\nLogs:\n  Bound result 1425947357818619797492556054955633462053556372884582118159\n\n[PASS] testFuzz_TransfersConserveSupply(uint256) (runs: 512, μ: 159269, ~: 159971)\nLogs:\n  Bound result 20000000000000000000\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 141852)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 40229)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12243)\n[PASS] test_Create2MintsToFactoryRatherThanItsCaller() (gas: 293714)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 98301)\n[PASS] test_EntireBalanceCanBeTransferred() (gas: 78380)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 658130)\n[PASS] test_MetadataAndInitialSupply() (gas: 122343)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 765288)\n[PASS] test_RevokedAllowanceCannotBeSpent() (gas: 148439)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_SelfTransferStillRequiresSufficientBalance() (gas: 43061)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96230)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 120541)\n[PASS] test_TransferFromRejectsInsufficientBalanceAndRestoresAllowance() (gas: 126136)\n[PASS] test_TransferFromRejectsUnapprovedCaller() (gas: 124629)\n[PASS] test_TransferFromRejectsZeroRecipientAndRestoresAllowance() (gas: 119071)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 251206)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 108166)\n[PASS] test_TransferRejectsInsufficientBalance() (gas: 57404)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 74871)\n[PASS] test_UnlimitedAllowanceIsNotDecreased() (gas: 219671)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73432)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78749)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 72.65ms (247.21ms CPU time)\n\nRan 1 test for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 256, calls: 32768, reverts: 0)\n\n╭----------------+---------------------+-------+---------+----------╮\n| Contract       | Selector            | Calls | Reverts | Discards |\n+===================================================================+\n| GoatProHandler | approve             | 4088  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | approveZeroSpender  | 4126  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | revoke              | 4115  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | roundTrip           | 3996  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | transfer            | 4103  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | transferFrom        | 4155  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | transferOverBalance | 4055  | 0       | 0        |\n|----------------+---------------------+-------+---------+----------|\n| GoatProHandler | transferToZero      | 4130  | 0       | 0        |\n╰----------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 54027418617092549801044922719043138457277573597382647656761636531451629404159\n  Bound result 0\n  Bound result 0\n  Bound result 11\n  Bound result 0\n  Bound result 32256128087630407852003792602237619015584470229631427051870792144969627861001\n  Bound result 0\n  Bound result 10190\n  Bound result 17607701624131518432350551658879771237322808\n  Bound result 9614\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639947\n  Bound result 5371\n  Bound result 0\n  Bound result 0\n  Bound result 690\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639933\n  Bound result 133\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 5\n  Bound result 1605\n  Bound result 2\n  Bound result 2\n  Bound result 621883814670232988781878062\n  Bound result 10\n  Bound result 13062446987003\n  Bound result 0\n  Bound result 3\n  Bound result 7221\n  Bound result 0\n  Bound result 2000000000000000000\n  Bound result 60000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640185923272254240901911518008\n  Bound result 0\n  Bound result 6210\n  Bound result 6197\n  Bound result 0\n  Bound result 1048141277098012672199838956817683971936625560727825519\n  Bound result 1514\n  Bound result 5\n  Bound result 1000000000000000000\n  Bound result 364640971008214574339062212\n  Bound result 115792089237316195423570985008687907853269984665640185923372254240901911517997\n  Bound result 35443917263074545370962644878815850540645975916305828202225791103882559373\n  Bound result 4875\n  Bound result 0\n  Bound result 254343370462695\n  Bound result 0\n  Bound result 0\n  Bound result 556\n  Bound result 0\n  Bound result 139934949819556363239323225\n  Bound result 463325984321362739959807265\n  Bound result 373574692423127259\n  Bound result 10\n  Bound result 0\n  Bound result 7092\n  Bound result 17\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 69158307909748384541057\n  Bound result 471\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.77s (7.77s CPU time)\n\nRan 3 test suites in 7.77s (7.91s CPU time): 47 tests passed, 0 failed, 0 skipped (47 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GoatPro.approve(address,uint256)\",\"GoatPro.transfer(address,uint256)\",\"GoatPro.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"LICENSE\":21,\"README.md\":101,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.edge.t.sol\":313,\"test/GoatPro.invariant.t.sol\":213,\"test/GoatPro.t.sol\":395},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"32df645bf31848ef135b6bc817e9b5b754932c7ac25101f9d58f53785a67966f","verifiedTreeHash":"f627bee42a25aa4a6540c580c0958c79b2b5bddc","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1841,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.73s\nCompiler run successful!\n","passed":true},{"durationMs":2716,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApprovedTransferSpendsOnlyRequestedAmount(uint256,uint256) (runs: 512, μ: 167558, ~: 169621)\nLogs:\n  Bound result 21836\n  Bound result 2\n\n[PASS] testFuzz_OverAllowanceTransferReverts(uint256,uint256) (runs: 512, μ: 127485, ~: 127609)\nLogs:\n  Bound result 21836\n  Bound result 2\n\n[PASS] testFuzz_OverBalanceTransferReverts(uint256) (runs: 512, μ: 71480, ~: 71412)\nLogs:\n  Bound result 150682150470227335753197555674890989653544142412936595859976\n\n[PASS] testFuzz_TransfersConserveSupply(uint256) (runs: 512, μ: 159321, ~: 159971)\nLogs:\n  Bound result 5000000000000000000\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 141852)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 40229)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12243)\n[PASS] test_Create2MintsToFactoryRatherThanItsCaller() (gas: 293714)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 98301)\n[PASS] test_EntireBalanceCanBeTransferred() (gas: 78380)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 658130)\n[PASS] test_MetadataAndInitialSupply() (gas: 122343)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 765288)\n[PASS] test_RevokedAllowanceCannotBeSpent() (gas: 148439)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_SelfTransferStillRequiresSufficientBalance() (gas: 43061)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96230)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 120541)\n[PASS] test_TransferFromRejectsInsufficientBalanceAndRestoresAllowance() (gas: 126136)\n[PASS] test_TransferFromRejectsUnapprovedCaller() (gas: 124629)\n[PASS] test_TransferFromRejectsZeroRecipientAndRestoresAllowance() (gas: 119071)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 251206)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 108166)\n[PASS] test_TransferRejectsInsufficientBalance() (gas: 57404)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 74871)\n[PASS] test_UnlimitedAllowanceIsNotDecreased() (gas: 219671)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73432)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78749)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 30.04ms (115.48ms CPU time)\n\nRan 1 test for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| GoatProHandler | approve      | 1982  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | revoke       | 2137  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transfer     | 2043  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transferFrom | 2030  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000\n  Bound result 27412424478040115\n  Bound result 348\n  Bound result 0\n  Bound result 375481671837564171590818255\n  Bound result 0\n  Bound result 374880132967353846786439951\n  Bound result 425\n  Bound result 0\n  Bound result 0\n  Bound result 100315897529194528891195511\n  Bound result 0\n  Bound result 117300739\n  Bound result 0\n  Bound result 5209\n  Bound result 0\n  Bound result 999999999999999999882694052\n  Bound result 563\n  Bound result 0\n  Bound result 0\n  Bound result 169\n  Bound result 0\n  Bound result 394\n  Bound result 2584\n  Bound result 0\n  Bound result 1393\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 131600731207\n  Bound result 8403337654999230891007588\n  Bound result 763\n  Bound result 6387\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.59s (2.59s CPU time)\n\nRan 2 test suites in 2.59s (2.62s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":67,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GoatPro.approve(address,uint256)\",\"GoatPro.transfer(address,uint256)\",\"GoatPro.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"LICENSE\":21,\"README.md\":101,\"foundry.toml\":18,\"launch.json\":24,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.invariant.t.sol\":118,\"test/GoatPro.t.sol\":395},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"65aa8261d2c9f7f139810248deeb4a6293e0e6ce4fa0a64dba5a54b413af3ed5","verifiedTreeHash":"d99b4ae9f6a3f7d3a37291981402a31a316b2a09","verifierVersion":"0.1.0+6a374fcd"}]}