{"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":"84c69a03-1953-4d85-ae17-50654741260e","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"8efaf726523068dffd962c0c54c8fce2c9ad8f34f8a53e59d93e519b2023a6fe","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":"a4aecc0cfb7af8075b8f6acf973881a974a92f1017f13989bc8ecf544b26ce4b","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":"4adf8efb7c89eaaefc9bd610fff9e79c213a8de27a8a8adbc39bb233e49fcd71","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":"88dba95827dffc2841ecaf5f01bb726cd96f3457cea15aaeaddb3a9f559cdf10","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":"ead40bdf406b279d000d596107286b995a3aeb7e5532e80ca7749f3f0fdc90ce","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":"8b0ebce27c503068a1bf4d1ba9a361041e8241ff69531a2eadd23283455137b7","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":"8f58a076e360016f3665444c5510362f4a7b0ca6f03ff19e9713327922ee57d1","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"cd8a0fa06b55c2b1aa463cacc14ba9bff1bdeceb53a29a449011b41163338e63","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: Goat Pro (GPRO).\nToken name: Goat Pro\nToken symbol: GPRO\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"46b47f4404f1c3720695445fc3ff0fef27e4a3b418dc63e8970bace4af5a99c7","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"84c69a03-1953-4d85-ae17-50654741260e","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2296-goat-pro"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51744","feedbackHash":"e15e47f11ff3207b944511c59572ffb42a24df8e804a9c01409e2810a4f36342","nodeKey":"audit_economics","submissionHash":"8efaf726523068dffd962c0c54c8fce2c9ad8f34f8a53e59d93e519b2023a6fe","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51040","feedbackHash":"511e240738a168cce53cd9dd65901e12d2e91965fefde7408743068fd0390be9","nodeKey":"audit_flow","submissionHash":"a4aecc0cfb7af8075b8f6acf973881a974a92f1017f13989bc8ecf544b26ce4b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52162","feedbackHash":"4c0dae8c955020e574351b76f369d5e1556e3d1a0ce8a8e5e969aa28e66f8dac","nodeKey":"audit_judge","submissionHash":"4adf8efb7c89eaaefc9bd610fff9e79c213a8de27a8a8adbc39bb233e49fcd71","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52169","feedbackHash":"5fa89346b4307e97cdc9b7a2def6c3bfb49fd4e2e88ca121657cae1921c18f39","nodeKey":"audit_math","submissionHash":"88dba95827dffc2841ecaf5f01bb726cd96f3457cea15aaeaddb3a9f559cdf10","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52607","feedbackHash":"408c393d968f37e87820d0f6f416d41444bdcff7686fab198a8b73273aeca9ee","nodeKey":"audit_permissions","submissionHash":"ead40bdf406b279d000d596107286b995a3aeb7e5532e80ca7749f3f0fdc90ce","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51247","feedbackHash":"d3192688572df97049b7a1f4899f8ecc402822c68f26fcfc637dff0edc7ea26a","nodeKey":"build_contract_project","submissionHash":"8b0ebce27c503068a1bf4d1ba9a361041e8241ff69531a2eadd23283455137b7","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51339","feedbackHash":"e5288f7b52025b0d40f2c09fd2bd26240cf754022cc8cf0a7aa7383e0b884682","nodeKey":"manifest","submissionHash":"8f58a076e360016f3665444c5510362f4a7b0ca6f03ff19e9713327922ee57d1","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52113","feedbackHash":"37a4f86598349200bd8cf510528cd6fb7b681ff21add927fd8630cbd9072b19a","nodeKey":"write_foundry_tests","submissionHash":"cd8a0fa06b55c2b1aa463cacc14ba9bff1bdeceb53a29a449011b41163338e63","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"f79e271f01509fee6f0efe356e1775de803f6c4d9e424131a0da19ee278084d4","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f9cb4fd544aa3c68","findings":[{"citation":"resolved","description":"DEPENDENCIES.json claims to record the SHA-256 of every vendored file. All six OpenZeppelin files match their recorded hashes and are byte-identical to upstream commit dbb6104 (v5.0.2), so the deployed token's only dependency is verified. Seven forge-std files do not match: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IERC7540.sol and src/interfaces/IMulticall3.sol. The recorded hashes are the correct upstream v1.9.7 (commit 77041d2) hashes; the vendored files differ from upstream only by formatter line-wrapping (multi-line function signatures), so they were run through forge fmt after the hashes were taken. forge-std is test-only tooling and none of it is compiled into GoatPro, so there is no effect on the deployed artifact, the launch, or any holder. The provenance record is nonetheless false for those seven files, which defeats its stated purpose of letting a reviewer confirm the vendored tree. Fix: either restore the seven files byte-for-byte from upstream commit 77041d2 or recompute and record the hashes of the files actually vendored.","line":41,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c 'import json,hashlib; [print(f, hashlib.sha256(open(d[\"directory\"]+\"/\"+f,\"rb\").read()).hexdigest()==h) for d in json.load(open(\"DEPENDENCIES.json\")) for f,h in d[\"files_sha256\"].items()]'. Expected: True for every file. Actual: False for the seven forge-std files listed above (for example lib/forge-std/src/Vm.sol hashes to a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15, not the recorded 9068805b...2cb1). diff against the upstream file at commit 77041d2 shows only line-wrapping changes.","severity":"info","snippet":"      \"src/Vm.sol\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\",","title":"DEPENDENCIES.json records upstream hashes for seven forge-std files whose vendored copies were reformatted"}],"hash":"4adf8efb7c89eaaefc9bd610fff9e79c213a8de27a8a8adbc39bb233e49fcd71","nodeId":"2d19006b-5d22-43eb-aa87-3077f5dcc557","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json`. The working tree is otherwise untouched, since `.imd-findings.json` is ignored by git and only build artifacts were generated.\n\n**Verdict:** the GoatPro token has no contract defects. All four specialists reported nothing, and I confirmed that independently rather than taking their word for it.\n\n**What I verified**\n\n- The token is 17 lines: a zero-argument constructor that mints exactly 1,000,000,000 GPRO with 18 decimals to msg.sender on top of OpenZeppelin ERC20. The ABI exposes only approve, transfer and transferFrom as state-changing entry points. No mint, burn, owner, pause, blacklist, proxy, or dangerous opcodes exist.\n- The five vendored OpenZeppelin files are byte-identical to upstream commit dbb6104 (v5.0.2), fetched and compared directly, so the three entry points are the stock implementations and all three hold.\n- The project builds and its 51 tests pass, including fuzz and invariant suites, with the README's fixed seed.\n- The manifest in launch.json is schema-clean: valid contract name, empty constructor args matching the ABI, supply equal to the minted amount, lowercase addresses, correct value types, and notes under the length cap.\n- Creation and runtime bytecode are far under the CREATE2 size limits, so nothing blocks deployment.\n\n**One info-level finding**\n\nSeven vendored forge-std files do not match the hashes DEPENDENCIES.json records for them. The recorded hashes are the correct upstream v1.9.7 values, but the vendored copies were run through a formatter afterward, so the differences are line wrapping only. forge-std is test tooling and none of it is compiled into the token, so there is no deployment or holder impact. The provenance record is still false for those files, and the fix is either to restore them byte-for-byte or to re-record the hashes.\n\n**Not run:** the protected launch tests, which import Uniswap v4 and the floor harness that this tree does not contain. The project's own LaunchFlow test covers CREATE2 deployment and exact distribution amounts locally, and the token's plain transfers give the harness nothing to trip on.","treeHash":null,"usage":{"cachedInputTokens":566366,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10513,"runtime":"claude","turns":19,"wallClockMs":180924}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e8816d4386532a66","findings":[],"hash":"88dba95827dffc2841ecaf5f01bb726cd96f3457cea15aaeaddb3a9f559cdf10","nodeId":"331b568a-064c-4e50-bb9d-fd6122a9f48a","outcome":"completed","summary":"The review is complete. The findings file is in place and no source files were changed.\n\n**Result: no defects found** in the Math Precision, Boundary or Numerical Gap areas. `.imd-findings.json` holds an empty findings list and seven coverage rows, all `holds`.\n\n**What was checked**\n\n- **Source scope.** `src/GoatPro.sol` is a 17-line wrapper over OpenZeppelin ERC20. The five vendored OpenZeppelin files diff byte-identical against the upstream v5.0.2 tag, so the arithmetic under review is the audited upstream code.\n- **Math precision.** The supply constant folds exactly to 10^27 and divides by 10^18 with no remainder, which closes the aderyn large-literal lead. The only arithmetic is the guarded subtraction and unchecked addition in `_update` and the allowance decrement in `_spendAllowance`. The unchecked add cannot wrap because the sum of balances equals the fixed supply.\n- **Boundary.** The token has no external calls, no payable function, no receive or fallback, no sentinel branches and no bytes decoding. Native value and unknown calldata revert. Max-uint transfer, supply plus one, allowance of max minus one, max allowance moving the whole supply, and allowance above balance all behave as intended.\n- **Numerical gap.** Full-balance self-transfer through both `transfer` and `transferFrom` preserves the balance, zero-value calls skip no invariant, and an eight-hop chain conserves supply exactly. The launch percentages divide 10^27 without dust, and twice the supply fits Uniswap v4's uint128 amounts.\n\n**Evidence.** The existing suite of 36 tests passes under the pinned fuzz seed. I added 15 scratch tests, including one 512-run fuzz, that all passed, then deleted the scratch directory as instructed.\n\n**Not covered.** Launch-system contracts such as the factory, distributor and pool are not in this tree, so their division of the 2% and 8% shares was not traced. The approve race is standard ERC-20 behavior, documented in the README, and was not reported as a defect.","treeHash":null,"usage":{"cachedInputTokens":710264,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13653,"runtime":"claude","turns":26,"wallClockMs":182764}},{"artifacts":[],"attempt":1,"bundleHash":"6fce35ab6f212e6abc6cc2aab63e8b1405e11d7dde0b53b9892caa7d671d8e6a","device":"93652ca7a1cbb0e8","findings":[],"hash":"8b0ebce27c503068a1bf4d1ba9a361041e8241ff69531a2eadd23283455137b7","nodeId":"47b54e74-7025-484e-984a-ffefeb4c523e","outcome":"completed","summary":"Implemented Goat Pro (GPRO) with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer.\n\nIncluded vendored dependencies, deployment documentation, and success, failure, fuzz, and invariant tests.\n\nValidation passed with Solidity 0.8.26:\n\n- `forge build`\n- `forge test` — 36 passed using the required fuzz seed\n- `forge fmt --check`","treeHash":"7257cd767ee91e5c87a9f103091649c7e67d4d9d","usage":{"cachedInputTokens":430976,"inputTokens":56013,"model":"gpt-6-astra","outputTokens":12452,"runtime":"codex","turns":4,"wallClockMs":368728}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"81314195390981c7","findings":[],"hash":"8efaf726523068dffd962c0c54c8fce2c9ad8f34f8a53e59d93e519b2023a6fe","nodeId":"9617a79e-9be5-47cb-920e-2f324513971c","outcome":"completed","summary":"I found no defects in Goat Pro (GPRO), so `.imd-findings.json` has an empty findings list plus coverage rows.\n\n**What the token is:** `src/GoatPro.sol` is OpenZeppelin's standard ERC20 (v5.0.2) with nothing added. The vendored `ERC20.sol` and `Context.sol` match the hashes in `DEPENDENCIES.json`, so the library code hasn't been changed. The constructor mints exactly 1,000,000,000 × 10^18 to `msg.sender`, which is the factory. There is no owner, no roles, and no fee, burn, pause, blacklist or mint function.\n\n**Economic security, invariants and flow gaps:**\n- **Supply can't grow.** The only mint is in the constructor and nothing callable can change the supply, which protects the opening market cap the price is derived from.\n- **Launch flows move exact amounts.** Transfers have no fee or burn, so the factory → distributor, distributor → claimant and PoolManager seed and swap flows all deliver exactly what they say.\n- **No privileged control.** Nobody can move or freeze a holder's balance.\n- **Balances add up.** The sum of all balances always equals the total supply.\n- **Economics live outside the token.** The pool share, opening cap and remainder recipient are set by the manifest and factory, and the token can't distort them.\n- **Tests pass.** `forge test` ran 36 tests and all passed, including the project's invariant test and the launch-flow tests.\n\n**Static-analysis leads:**\n- slither reported nothing.\n- aderyn's large-numeric-literal warning at `src/GoatPro.sol:10` is not a defect: `1_000_000_000 * 10 ** 18` is the intended supply.\n- I didn't report the standard ERC20 approve race either, because it is ordinary behaviour of every ERC20, not a defect in this code.\n\n**Coverage:** `approve`, `transfer` and `transferFrom` are each marked `holds`, plus three invariant rows: fixed supply, balances summing to supply, and no privileged powers.\n\nI changed no files except writing `.imd-findings.json`, which the assignment requires.","treeHash":null,"usage":{"cachedInputTokens":190737,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2194,"runtime":"claude","turns":5,"wallClockMs":34654}},{"artifacts":[],"attempt":1,"bundleHash":"40e8960db55f4d6911a240868eac54ae65856c02a43b4594f48ffdf4f77201c3","device":"75052237a39b6e12","findings":[],"hash":"8f58a076e360016f3665444c5510362f4a7b0ca6f03ff19e9713327922ee57d1","nodeId":"13ed9c48-8e3f-46e4-8367-7f7be0e96bf6","outcome":"completed","summary":"Done. The manifest is written and verified, and nothing else in the tree changed.\n\n**What I wrote** in `launch.json`:\n\n- Kind \"custom_token\" with token contract GoatPro, name Goat Pro, symbol GPRO, 18 decimals, an empty constructorArgs list, and totalSupply of one billion tokens in minor units, matching the INITIAL_SUPPLY constant the constructor mints once to msg.sender.\n- An empty contracts list, since the accepted tree contains only the token and no application contracts.\n- The pool object exactly as the launch reference gives it: IMD as paired currency, fee 12500, tick spacing 60, and the one-to-one sqrtPriceX96 as provenance.\n- The economics object copied verbatim from the job.\n- Notes describing the token's fixed supply, absence of any privileged powers or transfer fees, and that the deployer derives the opening price from the market cap.\n\n**Checks run:**\n\n| Check | Result |\n| --- | --- |\n| Manifest keys, supply, economics, pool, notes length | Passed via a local JSON script |\n| Compiled ABI constructor inputs | Empty, matching constructorArgs |\n| forge build | Successful |\n| forge test with the verifier's fuzz seed | 36 passed, 0 failed |\n| git status | Only launch.json is new |","treeHash":"c40199a6de6b2b2863a2717b55768d1f99a4c0d1","usage":{"cachedInputTokens":183716,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":2975,"runtime":"claude","turns":8,"wallClockMs":53798}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"df74f6c887684f20","findings":[],"hash":"a4aecc0cfb7af8075b8f6acf973881a974a92f1017f13989bc8ecf544b26ce4b","nodeId":"67410f86-dac3-4075-be2e-f2f9cf2088d1","outcome":"completed","summary":"The review is complete. No defects were found, and the findings file at the repository root holds an empty findings list with a coverage row for every entry point.\n\n**What I reviewed**, against the Execution Trace, Periphery and First Principles guides plus the Senior Auditor's Mindset:\n\n- **GoatPro.sol** is a 17-line contract that inherits OpenZeppelin ERC-20 and mints the whole supply to the immediate deployer in the constructor. There is no custom transfer logic, owner, mint, burn, pause or upgrade path.\n- **Execution trace.** I traced approve, transfer and transferFrom through the vendored implementation. The zero-address sentinels revert instead of bypassing checks, finite allowance is decremented exactly, max allowance is preserved by documented design, and insufficient balance or allowance reverts with no partial state. No value leaks or stale reads exist because nothing is cached or called externally.\n- **Periphery.** All six vendored OpenZeppelin files match the SHA-256 values recorded in DEPENDENCIES.json and read as unmodified v5.0.2. Context returns msg.sender, not tx.origin.\n- **First principles.** The constructor mints exactly 1e27 units once to msg.sender. A scratch test confirmed a nested deployer receives everything and the origin and outer caller receive nothing, which is what the factory launch flow needs.\n- **Tool leads.** Slither reported nothing. The aderyn large-literal note is a compile-time constant that evaluates to the correct supply, so it is style only.\n\n**Checks that ran:** the project's 36 tests including the invariant suite all passed with the README's fuzz seed. My scratch test of constants, deployer semantics, sentinel reverts and allowance edges passed and was removed afterwards. The compiled ABI exposes only the three standard state-changing functions, and an opcode scan of the runtime found no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n\n**Not covered:** the protected launch test could not run here because it depends on the external Uniswap v4 harness and environment variables. Since the token has no fees, hooks or exemptions, the factory, distributor and pool flows move exactly the amounts requested, as the local LaunchFlow test shows. The working tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":452320,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":9207,"runtime":"claude","turns":23,"wallClockMs":198151}},{"artifacts":[],"attempt":1,"bundleHash":"f7811ab7e51f544bbf56da2d7bb357ebed33519a392cce3f71f68d078b2b14fb","device":"92352b60f8e93ddd","findings":[],"hash":"cd8a0fa06b55c2b1aa463cacc14ba9bff1bdeceb53a29a449011b41163338e63","nodeId":"f907dfa2-5d49-45bb-8112-bb5788438699","outcome":"completed","summary":"Completed changes only under `test/`.\n\n- Added failure-path, boundary, and recovery tests.\n- Expanded four invariants across 32,768 randomized actions.\n- Offline `forge build` and `forge test` with the required seed pass: **51 tests, 0 failures**.\n- Formatting and diff checks pass. No implementation defects found.","treeHash":"758c6e7c89d0ffb919756a511603a365972697b2","usage":{"cachedInputTokens":1118720,"inputTokens":77891,"model":"gpt-6-astra","outputTokens":12872,"runtime":"codex","turns":5,"wallClockMs":427319}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dc176559ff153c37","findings":[],"hash":"ead40bdf406b279d000d596107286b995a3aeb7e5532e80ca7749f3f0fdc90ce","nodeId":"5553cdbe-f09c-4152-a386-2da5a0961367","outcome":"completed","summary":"The review found no defects. The findings file holds an empty list and a full coverage record, and no repository file was changed.\n\n**What I reviewed.** The token at `src/GoatPro.sol` is a bare OpenZeppelin v5.0.2 ERC-20 whose constructor mints the whole supply once to the deployer. I traced the three state-changing entry points from the compiled ABI, the constructor, and every internal helper they reach in the vendored library, against the Access Control, Trust Gap and Asymmetry guides and the Senior Auditor's Mindset.\n\n**Why it holds.**\n- **No privileged surface exists.** The ABI exposes only approve, transfer and transferFrom as state-changing functions. There is no owner, minter, pauser, blacklist, burn, upgrade, fallback or receive. The internal mint and burn helpers are unreachable after construction.\n- **Guards are symmetric.** Every transferFrom pull goes through the allowance check, including the deployer pulling from a holder. A stranger cannot set another holder's allowance. No caller class gets a fee, exemption or different path.\n- **The library is genuine.** I read the vendored ERC20 and Context sources line by line and confirmed no hidden branch or sender override. Their SHA-256 hashes match the recorded upstream manifest.\n- **Launch fit checks out.** Name, symbol, 18 decimals, supply of exactly 10^27 minor units, empty constructor arguments, a 7-character contract identifier, and a runtime with no forbidden opcodes. No transfer exemptions are needed because nothing is taxed.\n- **Tests pass.** All 36 existing tests, including the stateful conservation invariants, pass with the documented fuzz seed. The one static-analysis lead, a large numeric literal, is a compile-time constant and not a defect.\n\n**Noted but not reported.** The approve replacement race and the need for allowance on self transferFrom are standard ERC-20 semantics the README documents. With no privileged actor to amplify them they are not defects in this code.\n\n**Coverage.** All three listed entry points are recorded as `holds`, plus seven invariant rows covering the constructor mint, supply fixity, role absence, dependency integrity, launch fit, the static-analysis lead and the trust-gap seams. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":545687,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":7745,"runtime":"claude","turns":22,"wallClockMs":126176}}],"verification":[{"checks":[{"durationMs":1184,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.11s\nCompiler run successful!\n","passed":true},{"durationMs":877,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_Create2DeploymentAndExactLaunchTransfers() (gas: 741493)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 847.93µs (681.22µs CPU time)\n\nRan 34 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApproveOverwritesOnlyCallersAllowance(uint256,uint256) (runs: 512, μ: 190815, ~: 191179)\n[PASS] testFuzz_RevertInsufficientAllowanceIsAtomic(uint256,uint256) (runs: 512, μ: 123639, ~: 123968)\nLogs:\n  Bound result 620949795590436707145208506\n  Bound result 843495117595225107844607484\n\n[PASS] testFuzz_RevertInsufficientBalanceIsAtomic(uint256,uint256) (runs: 512, μ: 127612, ~: 128299)\nLogs:\n  Bound result 1565\n  Bound result 16347\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 512, μ: 187755, ~: 188285)\nLogs:\n  Bound result 966528339\n\n[PASS] testFuzz_TransferFromSpendsOnlyApprovedAmount(uint256,uint256) (runs: 512, μ: 162834, ~: 165101)\nLogs:\n  Bound result 261621250634226097665523887\n  Bound result 63314332164431437245026626\n\n[PASS] testFuzz_TransferToAnyNonzeroRecipient(address,uint256) (runs: 512, μ: 93187, ~: 93327)\nLogs:\n  Bound result 6\n\n[PASS] test_ApproveDoesNotRequireBalance() (gas: 78685)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 167834)\n[PASS] test_ApproveReturnsTrueAndEmitsEvent() (gas: 88874)\n[PASS] test_ConstructorEmitsMint() (gas: 5502)\n[PASS] test_ConstructorUsesImmediateDeployerInsteadOfTransactionOrigin() (gas: 40903)\n[PASS] test_DeployerAndStrangerCannotMintBurnFreezeOrUpgrade() (gas: 1126023)\n[PASS] test_MetadataAndInitialSupply() (gas: 108397)\n[PASS] test_RevertApproveZeroSpender() (gas: 37811)\n[PASS] test_RevertTransferExceedingBalance() (gas: 68124)\n[PASS] test_RevertTransferFromByUnapprovedCaller() (gas: 94992)\n[PASS] test_RevertTransferFromInsufficientBalancePreservesAllowance() (gas: 189160)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35995)\n[PASS] test_RevertTransferFromToZeroPreservesAllowance() (gas: 114392)\n[PASS] test_RevertTransferFromWithoutAllowance() (gas: 58153)\n[PASS] test_RevertTransferMaximumUint() (gas: 42734)\n[PASS] test_RevertTransferToZeroAddress() (gas: 47835)\n[PASS] test_RevertZeroTransferToZeroAddress() (gas: 30620)\n[PASS] test_RuntimeContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 1126383)\n[PASS] test_TransferEntireSupply() (gas: 86135)\n[PASS] test_TransferFromCanExhaustAllowance() (gas: 162129)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 214778)\n[PASS] test_TransferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 172681)\n[PASS] test_TransferFromToSelfSpendsAllowanceWithoutChangingBalance() (gas: 109745)\n[PASS] test_TransferFromZeroAmountRequiresNoAllowance() (gas: 81470)\n[PASS] test_TransferReturnsTrueAndEmitsEvent() (gas: 91514)\n[PASS] test_TransferToContractRequiresNoReceiverCallback() (gas: 170451)\n[PASS] test_TransferToSelfPreservesBalance() (gas: 51527)\n[PASS] test_TransferZeroFromEmptyAccountEmitsEvent() (gas: 73481)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 24.71ms (150.02ms CPU time)\n\nRan 1 test for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS]\nGoatProInvariantTest invariants:\n[PASS] invariant_AllTokensRemainAccountedFor\n[PASS] invariant_TotalSupplyNeverChanges\n GoatProInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| GoatProHandler | approve      | 2647  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transfer     | 2764  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transferFrom | 2781  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 343\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 0\n  Bound result 14\n  Bound result 2\n  Bound result 64\n  Bound result 0\n  Bound result 3753\n  Bound result 0\n  Bound result 8\n  Bound result 6144\n  Bound result 25000000000000000000\n  Bound result 197\n  Bound result 0\n  Bound result 6\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 95\n  Bound result 4059\n  Bound result 0\n  Bound result 4000000000000000000\n  Bound result 0\n  Bound result 708\n  Bound result 20000000000000000000\n  Bound result 97\n  Bound result 4764\n  Bound result 11\n  Bound result 5640\n  Bound result 13\n  Bound result 13\n  Bound result 0\n  Bound result 0\n  Bound result 738\n  Bound result 1118\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 782.43ms (781.13ms CPU time)\n\nRan 3 test suites in 783.91ms (807.99ms CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":38,"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.json\":56,\"README.md\":116,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.invariant.t.sol\":93,\"test/GoatPro.t.sol\":403,\"test/LaunchFlow.t.sol\":70},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":442,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":245,"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":"8b0ebce27c503068a1bf4d1ba9a361041e8241ff69531a2eadd23283455137b7","verifiedTreeHash":"7257cd767ee91e5c87a9f103091649c7e67d4d9d","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":2014,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.90s\nCompiler run successful!\n","passed":true},{"durationMs":1201,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_Create2DeploymentAndExactLaunchTransfers() (gas: 741493)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.44ms (6.21ms CPU time)\n\nRan 34 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApproveOverwritesOnlyCallersAllowance(uint256,uint256) (runs: 512, μ: 190815, ~: 191179)\n[PASS] testFuzz_RevertInsufficientAllowanceIsAtomic(uint256,uint256) (runs: 512, μ: 123639, ~: 123968)\nLogs:\n  Bound result 22\n  Bound result 24\n\n[PASS] testFuzz_RevertInsufficientBalanceIsAtomic(uint256,uint256) (runs: 512, μ: 127612, ~: 128299)\nLogs:\n  Bound result 1000000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665639564039464584007913129639935\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 512, μ: 187755, ~: 188285)\nLogs:\n  Bound result 1383335481\n\n[PASS] testFuzz_TransferFromSpendsOnlyApprovedAmount(uint256,uint256) (runs: 512, μ: 162834, ~: 165101)\nLogs:\n  Bound result 22\n  Bound result 1\n\n[PASS] testFuzz_TransferToAnyNonzeroRecipient(address,uint256) (runs: 512, μ: 93187, ~: 93327)\nLogs:\n  Bound result 20000000000000000000\n\n[PASS] test_ApproveDoesNotRequireBalance() (gas: 78685)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 167834)\n[PASS] test_ApproveReturnsTrueAndEmitsEvent() (gas: 88874)\n[PASS] test_ConstructorEmitsMint() (gas: 5502)\n[PASS] test_ConstructorUsesImmediateDeployerInsteadOfTransactionOrigin() (gas: 40903)\n[PASS] test_DeployerAndStrangerCannotMintBurnFreezeOrUpgrade() (gas: 1126023)\n[PASS] test_MetadataAndInitialSupply() (gas: 108397)\n[PASS] test_RevertApproveZeroSpender() (gas: 37811)\n[PASS] test_RevertTransferExceedingBalance() (gas: 68124)\n[PASS] test_RevertTransferFromByUnapprovedCaller() (gas: 94992)\n[PASS] test_RevertTransferFromInsufficientBalancePreservesAllowance() (gas: 189160)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35995)\n[PASS] test_RevertTransferFromToZeroPreservesAllowance() (gas: 114392)\n[PASS] test_RevertTransferFromWithoutAllowance() (gas: 58153)\n[PASS] test_RevertTransferMaximumUint() (gas: 42734)\n[PASS] test_RevertTransferToZeroAddress() (gas: 47835)\n[PASS] test_RevertZeroTransferToZeroAddress() (gas: 30620)\n[PASS] test_RuntimeContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 1126383)\n[PASS] test_TransferEntireSupply() (gas: 86135)\n[PASS] test_TransferFromCanExhaustAllowance() (gas: 162129)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 214778)\n[PASS] test_TransferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 172681)\n[PASS] test_TransferFromToSelfSpendsAllowanceWithoutChangingBalance() (gas: 109745)\n[PASS] test_TransferFromZeroAmountRequiresNoAllowance() (gas: 81470)\n[PASS] test_TransferReturnsTrueAndEmitsEvent() (gas: 91514)\n[PASS] test_TransferToContractRequiresNoReceiverCallback() (gas: 170451)\n[PASS] test_TransferToSelfPreservesBalance() (gas: 51527)\n[PASS] test_TransferZeroFromEmptyAccountEmitsEvent() (gas: 73481)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 58.98ms (338.43ms CPU time)\n\nRan 1 test for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS]\nGoatProInvariantTest invariants:\n[PASS] invariant_AllTokensRemainAccountedFor\n[PASS] invariant_TotalSupplyNeverChanges\n GoatProInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| GoatProHandler | approve      | 2647  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transfer     | 2764  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| GoatProHandler | transferFrom | 2781  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 343\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 0\n  Bound result 14\n  Bound result 2\n  Bound result 64\n  Bound result 0\n  Bound result 3753\n  Bound result 0\n  Bound result 8\n  Bound result 6144\n  Bound result 25000000000000000000\n  Bound result 197\n  Bound result 0\n  Bound result 6\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 95\n  Bound result 4059\n  Bound result 0\n  Bound result 4000000000000000000\n  Bound result 0\n  Bound result 708\n  Bound result 20000000000000000000\n  Bound result 97\n  Bound result 4764\n  Bound result 11\n  Bound result 5640\n  Bound result 13\n  Bound result 0\n  Bound result 0\n  Bound result 11000000000000000000\n  Bound result 738\n  Bound result 1118\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.06s (1.05s CPU time)\n\nRan 3 test suites in 1.06s (1.12s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":79,"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.json\":56,\"README.md\":116,\"foundry.toml\":18,\"launch.json\":24,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.invariant.t.sol\":93,\"test/GoatPro.t.sol\":403,\"test/LaunchFlow.t.sol\":70},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8f58a076e360016f3665444c5510362f4a7b0ca6f03ff19e9713327922ee57d1","verifiedTreeHash":"c40199a6de6b2b2863a2717b55768d1f99a4c0d1","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1465,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.39s\nCompiler run successful!\n","passed":true},{"durationMs":9491,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_Create2DeploymentAndExactLaunchTransfers() (gas: 741493)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 815.82µs (647.97µs CPU time)\n\nRan 14 tests for test/GoatProEdges.t.sol:GoatProEdgesTest\n[PASS] testFuzz_DelegatedRoundTripRestoresBalances(uint256) (runs: 1000, μ: 307789, ~: 308051)\nLogs:\n  Bound result 242\n\n[PASS] testFuzz_InsufficientBalanceRollsBackFiniteAllowanceThenAllowsRetry(uint256,uint256,uint256) (runs: 1000, μ: 307823, ~: 308699)\nLogs:\n  Bound result 926064165147569613671847467\n  Bound result 115792089237316195423570985008687907853269984665639637975292967208144762595717\n  Bound result 115792089237316195423570985008687907853269984665639910155939961049220680293372\n\n[PASS] testFuzz_InvalidReceiverRollsBackAllowanceThenAllowsRetry(uint256,uint256,bool) (runs: 1000, μ: 224628, ~: 220642)\nLogs:\n  Bound result 436279769346725243649275774\n  Bound result 115792089237316195423570985008687907853269984665640127759688237282669480364910\n\n[PASS] testFuzz_ZeroTransferFromEmptyHolderPreservesApproval(uint256) (runs: 1000, μ: 150096, ~: 150293)\n[PASS] test_AllowanceBelongsToCallerNotRecipientOrTransactionOrigin() (gas: 281840)\n[PASS] test_ApprovalSurvivesEmptyBalanceAndAppliesToFutureReceipts() (gas: 380984)\n[PASS] test_InfiniteAllowanceDoesNotBypassBalanceChecks() (gas: 208332)\n[PASS] test_InfiniteApprovalCanBeRevokedAndReplacedWithFiniteApproval() (gas: 327651)\n[PASS] test_MaximumFiniteAllowanceIsConsumed() (gas: 223393)\n[PASS] test_OneWeiDelegatedRoundTrip() (gas: 304285)\n[PASS] test_SelfApprovalIsConsumedEvenWhenAllRolesAreTheSameAccount() (gas: 138626)\n[PASS] test_SelfTransfersCannotBypassBalanceChecks() (gas: 141848)\n[PASS] test_WholeSupplyDelegatedRoundTrip() (gas: 315498)\n[PASS] test_ZeroAddressCannotBeUsedAsATransferFromSource() (gas: 268163)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 66.01ms (256.82ms CPU time)\n\nRan 34 tests for test/GoatPro.t.sol:GoatProTest\n[PASS] testFuzz_ApproveOverwritesOnlyCallersAllowance(uint256,uint256) (runs: 1000, μ: 190875, ~: 191209)\n[PASS] testFuzz_RevertInsufficientAllowanceIsAtomic(uint256,uint256) (runs: 1000, μ: 123567, ~: 123980)\nLogs:\n  Bound result 303\n  Bound result 29986694448262114\n\n[PASS] testFuzz_RevertInsufficientBalanceIsAtomic(uint256,uint256) (runs: 1000, μ: 127619, ~: 128305)\nLogs:\n  Bound result 741551157525940885796873053\n  Bound result 2398887357777505783237486504344\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 1000, μ: 187983, ~: 188309)\nLogs:\n  Bound result 8464\n\n[PASS] testFuzz_TransferFromSpendsOnlyApprovedAmount(uint256,uint256) (runs: 1000, μ: 163111, ~: 165101)\nLogs:\n  Bound result 303\n  Bound result 34\n\n[PASS] testFuzz_TransferToAnyNonzeroRecipient(address,uint256) (runs: 1000, μ: 93693, ~: 93861)\nLogs:\n  Bound result 1\n  Bound result 25496\n\n[PASS] test_ApproveDoesNotRequireBalance() (gas: 78685)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 167834)\n[PASS] test_ApproveReturnsTrueAndEmitsEvent() (gas: 88874)\n[PASS] test_ConstructorEmitsMint() (gas: 5502)\n[PASS] test_ConstructorUsesImmediateDeployerInsteadOfTransactionOrigin() (gas: 40903)\n[PASS] test_DeployerAndStrangerCannotMintBurnFreezeOrUpgrade() (gas: 1126023)\n[PASS] test_MetadataAndInitialSupply() (gas: 108397)\n[PASS] test_RevertApproveZeroSpender() (gas: 37811)\n[PASS] test_RevertTransferExceedingBalance() (gas: 68124)\n[PASS] test_RevertTransferFromByUnapprovedCaller() (gas: 94992)\n[PASS] test_RevertTransferFromInsufficientBalancePreservesAllowance() (gas: 189160)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35995)\n[PASS] test_RevertTransferFromToZeroPreservesAllowance() (gas: 114392)\n[PASS] test_RevertTransferFromWithoutAllowance() (gas: 58153)\n[PASS] test_RevertTransferMaximumUint() (gas: 42734)\n[PASS] test_RevertTransferToZeroAddress() (gas: 47835)\n[PASS] test_RevertZeroTransferToZeroAddress() (gas: 30620)\n[PASS] test_RuntimeContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 1126383)\n[PASS] test_TransferEntireSupply() (gas: 86135)\n[PASS] test_TransferFromCanExhaustAllowance() (gas: 162129)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 214778)\n[PASS] test_TransferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 172681)\n[PASS] test_TransferFromToSelfSpendsAllowanceWithoutChangingBalance() (gas: 109745)\n[PASS] test_TransferFromZeroAmountRequiresNoAllowance() (gas: 81470)\n[PASS] test_TransferReturnsTrueAndEmitsEvent() (gas: 91514)\n[PASS] test_TransferToContractRequiresNoReceiverCallback() (gas: 170451)\n[PASS] test_TransferToSelfPreservesBalance() (gas: 51527)\n[PASS] test_TransferZeroFromEmptyAccountEmitsEvent() (gas: 73481)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 66.00ms (385.40ms CPU time)\n\nRan 2 tests for test/GoatPro.invariant.t.sol:GoatProInvariantTest\n[PASS]\nGoatProInvariantTest invariants:\n[PASS] invariant_AllTokensRemainAccountedFor\n[PASS] invariant_AllowancesMatchApprovalAndSpendingHistory\n[PASS] invariant_EachHolderMatchesItsTransferHistory\n[PASS] invariant_TotalSupplyNeverChanges\n GoatProInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭----------------+----------------------------------+-------+---------+----------╮\n| Contract       | Selector                         | Calls | Reverts | Discards |\n+================================================================================+\n| GoatProHandler | approve                          | 3332  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | approveBoundary                  | 3321  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | rejectTransferAboveBalance       | 3301  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | rejectTransferFromAboveAllowance | 3282  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | rejectTransferFromAboveBalance   | 3250  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | rejectZeroReceiver               | 3265  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | rejectZeroSpender                | 3277  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | transfer                         | 3205  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | transferFrom                     | 3266  | 0       | 0        |\n|----------------+----------------------------------+-------+---------+----------|\n| GoatProHandler | transferFullBalance              | 3269  | 0       | 0        |\n╰----------------+----------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039463584007913129639935\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 250000000000000000000000000\n  Bound result 11\n  Bound result 232065148968606419812694013776\n  Bound result 250000000000000000000000000\n  Bound result 385\n  Bound result 500000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 458513102314582394605707207\n  Bound result 0\n  Bound result 500000000000000000000000000\n  Bound result 0\n  Bound result 7700697252317380824924189281\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 10\n  Bound result 0\n  Bound result 2939\n  Bound result 7795\n  Bound result 435\n  Bound result 7\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129640284\n  Bound result 0\n  Bound result 25000000000000000000\n  Bound result 323\n  Bound result 0\n  Bound result 1614\n  Bound result 0\n  Bound result 490977424842248844848007041\n  Bound result 5\n  Bound result 38064218982593096266\n  Bound result 0\n  Bound result 0\n  Bound result 25000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129640030\n  Bound result 0\n  Bound result 0\n  Bound result 2917\n  Bound result 0\n  Bound result 19554492879787243332722877790040674683823990240310222040094668\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129648683\n  Bound result 0\n  Bound result 125813996375599159817140963330240011258305308995328\n  Bound result 3\n  Bound result 2572\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129640067\n  Bound result 11000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 4000000000000000000\n  Bound result 0\n  Bound result 9439\n  Bound result 0\n  Bound result 0\n  Bound result 483\n  Bound result 5881\n  Bound result 0\n  Bound result 7\n  Bound result 3785\n  Bound result 4717\n  Bound result 11\n  Bound result 499999999999999999999996949\n  Bound result 499999999999999999999996945\n  Bound result 483\n  Bound result 127\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129627946\n  Bound result 499999999999999999999990341\n  Bound result 500000000000000000000002572\n  Bound result 358\n  Bound result 110\n  Bound result 785\n  Bound result 143649399\n\n[PASS] test_HandlerExercisesFailureAndRecoverySequence() (gas: 1712146)\nLogs:\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 1\n  Bound result 0\n  Bound result 7\n  Bound result 250000000000000000000000008\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 9.42s (9.41s CPU time)\n\nRan 4 test suites in 9.42s (9.55s CPU time): 51 tests passed, 0 failed, 0 skipped (51 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.json\":56,\"README.md\":116,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GoatPro.sol\":17,\"test/GoatPro.invariant.t.sol\":247,\"test/GoatPro.t.sol\":404,\"test/GoatProEdges.t.sol\":266,\"test/LaunchFlow.t.sol\":70,\"test/README.md\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cd8a0fa06b55c2b1aa463cacc14ba9bff1bdeceb53a29a449011b41163338e63","verifiedTreeHash":"758c6e7c89d0ffb919756a511603a365972697b2","verifierVersion":"0.1.0+6a374fcd"}]}