{"assessments":[],"deployments":[{"attestationHash":"1f6f536a8a6dca567505b2a5be02793bc5dcfebb357d85ff9b45ce02b4032695","chainId":1,"contracts":[{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26166782,"name":"PoolInitializationGuard","role":"hook","txHash":"0x3d3e1273f35c9aa850dd32b4949de98c13671fe0ddda46358c4c80f35fd0d04d"},{"address":"0x86653cc95a2afdd80b2a4ecdab3acae1a6d7bfd2","blockNumber":26166782,"name":"MerkleDistributor","role":"distributor","txHash":"0x3d3e1273f35c9aa850dd32b4949de98c13671fe0ddda46358c4c80f35fd0d04d"},{"address":"0xb676303c5665cfbda04f6ac9f00e27ae0406ac19","blockNumber":26166782,"name":"PebbleToken","role":"token","txHash":"0x3d3e1273f35c9aa850dd32b4949de98c13671fe0ddda46358c4c80f35fd0d04d"}],"id":"50aa7e8b-26b2-437e-8015-9c3c0854d784","manifestHash":"8aeda35ea697c34dfde94722abc3c2d669caf0bd57873162a073adce93b4a37d","status":"live"}],"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":"cf0481b7-bccc-4e15-aee0-a029481e103c","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"5ee782f917d7dc52f081d3a390fa982ebe40a7d5d7e9ae52d447e157b7320783","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":"cc32db401e2981e64d927ec388cebc44deabe6c080d1fa4cbd4489c8d498154a","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":"f2bbaf61d97b0ff495d9a4a1219467279634488229c6868cc3aa8944efd17842","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":"c847822b093976131a4a1e411644f9262dc4a96ab8a4b77d481548e874631b0e","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":"c66e7147f0433128f88f79debaf5ac458e82ace0848ef3d3d521f30833aaac5b","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":"6c98dd2cc9eb93d51e007ec71c49af2aadb47219a001ed8bb654683c1941b02c","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"e26966866e191d514a737645245c85ce57e1f1425c2c219f15f50cff8cfb52a7","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"bd11a886bbd034394154c70eabb071104b31b82a9fd278b77cd53e38f4c47116","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Pebble Agent (PEBBLE).\nToken name: Pebble Agent\nToken symbol: PEBBLE\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"490505c0f9d99e9c20303606d09e3aa1d593d2a7733ca8a2324122503d5989a3","previousHash":"b8d9b9d97c7c5d9d02ac95302d37a5d3dc391a5976a7149cf42f37ee7da25670","projectId":"cf0481b7-bccc-4e15-aee0-a029481e103c","publication":{"commit":"3287263fefda7da6751d0e12f9919525c2472b9c","deliveredAt":"2026-10-11T04:20:45.282Z","repoUrl":"https://github.com/identity-md-launches/launch-1281-pebble-agent"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"b9a221ba878f14827e04f86032127d7540f019dfc02fcef0b4630b72777e2bfd","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c35be49d2f8f8def","findings":[],"hash":"5ee782f917d7dc52f081d3a390fa982ebe40a7d5d7e9ae52d447e157b7320783","nodeId":"ea4a0859-e4bb-43fc-86b6-7dc9b1fb8f3c","outcome":"completed","summary":"The file is on disk and is deliberately excluded by the harness, so the working tree stays clean as required. The review is complete.\n\n**Result: no defects found in the economics of Pebble Agent (PEBBLE).** `.imd-findings.json` holds an empty findings list and seven coverage rows, one per listed entry point plus the invariants I checked.\n\n**What the token is.** `src/PebbleToken.sol` is fourteen lines: it inherits OpenZeppelin ERC-20 and mints a fixed supply to the deployer in the constructor. The compiled ABI has only the three state-changing functions the verifier listed, plus views. There is no owner, mint, burn, fee, exemption list, receive or fallback.\n\n**How I checked it against the three guides.**\n- **Economic Security.** No external dependency, oracle or callback exists, so nothing can be broken or sandwiched. The launch flows the floor requires all move exact amounts: I replayed factory deployment, the ten percent to a distributor and its claim, the eighty percent pool seed, the remainder to the requester, and a trader round trip through transferFrom and transfer. Every balance matched and the sum stayed at the full supply.\n- **Invariant.** Supply is minted once and can never change afterwards, since no mint or burn path is reachable. Balance conservation held in the project's own stateful invariant run and in my scratch flow test, including full-supply transfers, one wei over balance, unlimited versus finite allowance, self-transferFrom, and zero-address rejections.\n- **Flow Gap.** The only periphery is the vendored OpenZeppelin library. I hashed every vendored file against DEPENDENCIES.json and against upstream v5.1.0 on GitHub, and all five match byte for byte, so the library behaves exactly as documented and no seam exists between trace, periphery and intent.\n\n**Static analysis lead.** The aderyn large-numeric-literal note on line 9 is style only. The literal evaluates to exactly ten to the twenty-seventh, which I asserted against the public constant.\n\n**Not a defect, noted for the judge.** The README documents the standard ERC-20 approve race and that Slither and Mythril were not run. Both are properties of the standard and the process, not of this code.\n\n**Coverage.** All three entry points are marked holds. Nothing in my area was left unreached. The scratch test directory was removed, and the only new file is the findings file, which the repository's local exclude list already hides from git.","treeHash":null,"usage":{"cachedInputTokens":809711,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10465,"runtime":"claude","turns":22,"wallClockMs":152874}},{"artifacts":[],"attempt":1,"bundleHash":"2d496eeb4d8d91e4cacc5168301db1ea43fed14dea2cb71a720d41e5fd3e91c0","device":"d13d3bb393e39302","findings":[],"hash":"6c98dd2cc9eb93d51e007ec71c49af2aadb47219a001ed8bb654683c1941b02c","nodeId":"bd35b14b-4877-499e-9d6e-101293c2034a","outcome":"completed","summary":"Implemented [PebbleToken.sol](/home/imd1/.identitymd/work/cf0481b7-bccc-4e15-aee0-a029481e103c/bd35b14b-4877-499e-9d6e-101293c2034a/src/PebbleToken.sol): Pebble Agent (PEBBLE), 18 decimals, one billion tokens minted once to the deployer.\n\nVendored dependencies and documented deployment and operational responsibilities.\n\nValidation passed: `forge build`, all 28 tests, `forge fmt --check`, and a forced offline rebuild.","treeHash":"37009191cda4c3d0095a9ac6aa16c095e6e8de55","usage":{"cachedInputTokens":245149,"inputTokens":48179,"model":"gpt-6.1-sol","outputTokens":8750,"runtime":"codex","turns":4,"wallClockMs":127880}},{"artifacts":[],"attempt":1,"bundleHash":"f588ba440fd8a326b616ff67ed9c605f9771ba49785824816966615aa8adeda6","device":"fb0c125072325b07","findings":[],"hash":"bd11a886bbd034394154c70eabb071104b31b82a9fd278b77cd53e38f4c47116","nodeId":"2cea65bb-cc15-415e-b5d7-04d89f6ea5dd","outcome":"completed","summary":"Added 18 adversarial tests and strengthened four invariants covering balances, allowances, supply, and metadata.\n\n`forge build --offline` and `forge test` pass: 46 tests, including 24,576 random handler calls.\n\nNo defects found. Only `test/` files changed.","treeHash":"f7773795b955042a6489b3b67fc3b881c6dd0ba4","usage":{"cachedInputTokens":313686,"inputTokens":66579,"model":"gpt-6.1-sol","outputTokens":7286,"runtime":"codex","turns":4,"wallClockMs":106027}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b273d407784470b4","findings":[],"hash":"c66e7147f0433128f88f79debaf5ac458e82ace0848ef3d3d521f30833aaac5b","nodeId":"c97d4eb6-8a04-44cc-b060-2538dd243a17","outcome":"completed","summary":"The review is complete. The findings file is written and the working tree is clean apart from it.\n\n**Result: no defects found** in the access control, trust gap or asymmetry areas. The findings list is empty and all three entry points are marked `holds` with reasons in `.imd-findings.json`.\n\n**What the token is.** `src/PebbleToken.sol` is 14 lines: it inherits the vendored OpenZeppelin v5.1.0 ERC-20 unchanged and mints 10^27 base units to the deployer in the constructor. It adds no functions, overrides, modifiers or storage.\n\n**What I verified**\n\n- **Access control.** The compiled ABI exposes only approve, transfer and transferFrom as state-changing functions, with no receive or fallback. There is no owner, initializer, proxy, DELEGATECALL or SELFDESTRUCT. The constructor hands out a balance, not a role. A probe confirmed the deploying factory and the transaction origin cannot pull tokens from a holder without an allowance.\n- **Trust gap.** There is no privileged actor and no economic formula, so none of the four seams exist. The factory holding the whole supply at deployment is the launch design and is recorded as a trust assumption, not a defect.\n- **Asymmetry.** Transfer and transferFrom share one internal path with identical zero-address and balance checks. Approve and allowance spending write the same slot with matching validation. Only the mint side of mint/burn is reachable, and both public paths reject the zero address as receiver, so supply can neither grow nor shrink. A fuzz probe confirmed this.\n- **Vendored library.** The ERC20, Context and interface files match the hashes in DEPENDENCIES.json and contain only upstream code. Context's `_msgSender` returns `msg.sender` unmodified.\n- **Static analysis lead.** The aderyn note on the large numeric literal at line 9 evaluates to exactly 10^27, matching the brief. It is a readability note, not a defect.\n\n**Checks run.** The existing 28 tests pass, including the stateful invariant suite. My five scratch probes passed and were removed. Slither and aderyn output were already supplied and reported nothing above low.\n\nThe coverage record also lists four invariant rows for the judge: no privileged role exists, supply is fixed at 10^27, paired operations are symmetric, and the factory-as-deployer trust assumption.","treeHash":null,"usage":{"cachedInputTokens":570886,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":8981,"runtime":"claude","turns":25,"wallClockMs":148798}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a31e321b410aaa02","findings":[],"hash":"c847822b093976131a4a1e411644f9262dc4a96ab8a4b77d481548e874631b0e","nodeId":"500db9f8-6065-4a05-b664-ddc8322a3d20","outcome":"completed","summary":"I found no defects in PEBBLE's math. `.imd-findings.json` holds `{\"findings\":[]}` and a coverage record with a row for each of the three entry points, all marked `holds`.\n\n**What the code is:** `src/PebbleToken.sol` is a plain OpenZeppelin v5.1.0 ERC-20. It doesn't override any functions and has no fees, burns, exemptions or owner. The constructor mints `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` to `msg.sender` once. I compared the bundled `ERC20.sol` with its declared sha256 hash and read through it; it is the standard implementation.\n\n**Math Precision guide:**\n- **No rounding or scale mixing:** there are no divisions, no fixed-point scaling and no narrowing casts anywhere in the token.\n- **Supply constant:** it evaluates exactly to 1e27, with 18 decimals matching the 10**18 scale. The static analyser's \"large numeric literal\" warning at line 9 is not a defect.\n- **Overflow in transfers:** the subtraction from the sender's balance is only reached after a balance check. The addition to the recipient is unchecked but can't wrap, because no balance can exceed the 1e27 total supply.\n- **Overflow in allowances:** the allowance subtraction is also only reached after a check. A maximum allowance is never reduced, which is OpenZeppelin's documented behaviour.\n\n**Boundary guide:**\n- **Edge amounts:** zero-amount transfers, transfers of the whole supply and maximum allowances all behave as specified.\n- **Zero address:** transfers to or from it revert, and so do approvals for it.\n- **Nothing else to check:** the token makes no external calls, has no payable functions and decodes no bytes input.\n\n**Numerical Gap guide:** there is no rounding that could slowly break an invariant. Supply is fixed because minting is only reachable from the constructor, and the token has no burn function. Every transfer moves exactly the amount requested, so the 10% swarm share, the pool seed and swaps all arrive in full.\n\n**Checks run:** the existing suite of 28 tests passes, including the invariant test (128 runs, 8,192 calls, 0 reverts). I didn't write a proof test because nothing reached high severity. I couldn't run the separate launch test supplied with the task, because it needs Uniswap v4 code and launch settings that aren't in this tree. The code paths it checks are the ones traced above. No tracked files were changed; the build only created the ignored `out/` and `cache/` folders.","treeHash":null,"usage":{"cachedInputTokens":288351,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":3372,"runtime":"claude","turns":7,"wallClockMs":46054}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce6eaff570c608ab","findings":[],"hash":"cc32db401e2981e64d927ec388cebc44deabe6c080d1fa4cbd4489c8d498154a","nodeId":"6651c14a-c47b-463a-a5d7-3aa289b22a71","outcome":"completed","summary":"Review complete. The findings file is written with an empty findings list and nine coverage rows. No source files were changed.\n\n**Result: no defects found in the control-flow area.** PebbleToken is a 14-line contract that inherits OpenZeppelin v5.1.0 ERC20 unchanged and mints the whole supply once to msg.sender in a no-argument constructor.\n\nWhat I checked, per the Execution Trace, Periphery and First Principles guides:\n\n- **Execution trace.** Traced approve, transfer and transferFrom through _spendAllowance, _transfer and _update. Zero-address sentinels revert, max allowance never decrements, finite allowance decrements exactly, and every revert path rolls back both allowance and balance. Non-payable functions reject value. No receive or fallback exists, so ETH and unknown selectors revert.\n- **Periphery.** All five vendored OpenZeppelin files hash-match upstream v5.1.0, which I fetched and compared. Context returns plain msg.sender. The compiled ABI exposes only the standard ERC20 surface plus the INITIAL_SUPPLY constant getter.\n- **First principles.** The supply constant evaluates to exactly 10^27. From a factory, the factory holds all tokens and tx.origin holds none. There is no mint, burn, pause, blacklist, hook, fee or exemption, so every launch flow moves exactly its stated amount and no privileged selector can move or freeze a holder.\n- **Verification.** The project's 28 tests pass, including the stateful invariant suite. I added eight scratch probes covering the edge paths above, all passed, and I removed them afterwards.\n\nThe only unreached item is the launch manifest, which does not exist yet because the manifest step has not run. When written it needs empty constructorArgs and a totalSupply of 1000000000000000000000000000. The aderyn large-numeric-literal lead is a style note on a correct constant and I did not report it.","treeHash":null,"usage":{"cachedInputTokens":408202,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":9254,"runtime":"claude","turns":21,"wallClockMs":148702}},{"artifacts":[],"attempt":1,"bundleHash":"253aaf4ea6564622ad3a313439448d3a10b003370689c88e3ac4131d70dbfb70","device":"2a2028177fd413f2","findings":[],"hash":"e26966866e191d514a737645245c85ce57e1f1425c2c219f15f50cff8cfb52a7","nodeId":"3a05af7d-e2a7-4d5e-94c5-3f09df5d5354","outcome":"completed","summary":"Created [launch.json](/home/imd1/.identitymd/work/cf0481b7-bccc-4e15-aee0-a029481e103c/3a05af7d-e2a7-4d5e-94c5-3f09df5d5354/launch.json) matching `PebbleToken`, its constructor and supply, and the exact pool and economics settings.\n\nValidation passed: manifest checks, `forge build`, and all 28 tests. Only the manifest was changed outside permitted scratch outputs.","treeHash":"0304df963f214b2c0c591b7dcd44cd7f035ec047","usage":{"cachedInputTokens":152704,"inputTokens":41440,"model":"gpt-6-astra","outputTokens":2301,"runtime":"codex","turns":3,"wallClockMs":71885}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"896d1238054266ca","findings":[],"hash":"f2bbaf61d97b0ff495d9a4a1219467279634488229c6868cc3aa8944efd17842","nodeId":"cb5b965c-62e4-48a0-ae40-3d021e286166","outcome":"completed","summary":"The review is complete. The findings file holds an empty list and a full coverage record.\n\n**Result: no defects found.** All four specialists reported nothing, and nothing in my own pass reproduced as a defect. `.imd-findings.json` is written with zero findings and eight coverage rows, one for each of the three entry points plus five invariants I checked.\n\n**What I verified**\n\n- **Vendored code is genuine.** All five OpenZeppelin files under `lib/` hash-match upstream v5.1.0 byte for byte, so the token is plain OZ ERC20 with a one-line constructor.\n- **Entry points hold.** approve, transfer and transferFrom behave exactly as OZ specifies. I traced the zero-address reverts, insufficient balance and allowance reverts, finite allowance decrement, and the unlimited-allowance path, and confirmed each in a scratch Foundry test.\n- **Launch flows arrive whole.** A factory probe deployed the token with CREATE2 and no arguments. The swarm share, an approve-then-transferFrom pull of the pool share, the requester remainder and a distributor claim all moved exact amounts with supply unchanged.\n- **No privileged surface.** The compiled ABI has only the constructor, the supply constant, the ERC20 views, and the three state-changing functions. Fourteen common admin selectors, raw ETH and fallback calls all revert.\n- **Deployable.** Creation code is 2,644 bytes and runtime 1,752 bytes, far under the limits. The runtime contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CREATE or external CALL. The manifest's empty constructorArgs matches the parameterless constructor.\n- **Manifest is schema-valid.** Only schema keys, lowercase addresses, string uint256 values, decimals 18 matching the contract, and totalSupply equal to the minted 10^27.\n\n**Static-analysis lead.** Aderyn's large-numeric-literal note on line 9 is style only. The literal evaluates to exactly 10^27, so I recorded it as holding rather than as a finding.\n\nThe existing suite of 46 tests passes. My scratch test under `test/scratch/` was removed after running, so the tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":435172,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":11208,"runtime":"claude","turns":26,"wallClockMs":179028}}],"verification":[{"checks":[{"durationMs":970,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 876.19ms\nCompiler run successful!\n","passed":true},{"durationMs":627,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 27 tests for test/PebbleToken.t.sol:PebbleTokenTest\n[PASS] testFuzz_TransferAboveSupplyReverts(uint256) (runs: 256, μ: 58791, ~: 59137)\nLogs:\n  Bound result 91167784654797042010940282664849844844101406410409710063004157177898\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 256, μ: 101800, ~: 101898)\nLogs:\n  Bound result 694747343856593721607749538\n\n[PASS] testFuzz_TransferFromConservesSupplyAndConsumesAllowance(uint256,uint256) (runs: 256, μ: 171888, ~: 174561)\nLogs:\n  Bound result 553\n  Bound result 428\n\n[PASS] test_ApproveEmitsEventAndCanBeReplacedAndRevoked() (gas: 183002)\n[PASS] test_ApproveFromZeroOwnerReverts() (gas: 33055)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 30453)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5546)\n[PASS] test_EntireSupplyCanBeTransferred() (gas: 75775)\n[PASS] test_FactoryReceivesEntireSupplyInsteadOfTransactionOrigin() (gas: 214493)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 121088)\n[PASS] test_InsufficientBalanceReverts() (gas: 44907)\n[PASS] test_LaunchDistributionAndPoolTransfersArriveWhole() (gas: 391703)\n[PASS] test_MetadataAndInitialSupply() (gas: 73578)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 609832)\n[PASS] test_RuntimeHasNoDangerousOpcodes() (gas: 796411)\n[PASS] test_SelfTransferPreservesBalance() (gas: 41154)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91517)\n[PASS] test_TransferFromConsumesFiniteAllowance() (gas: 211750)\n[PASS] test_TransferFromEmitsTransferEvent() (gas: 115397)\n[PASS] test_TransferFromExceedingAllowanceRevertsWithoutStateChange() (gas: 115743)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 113525)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 103802)\n[PASS] test_TransferFromWithoutApprovalRevertsEvenForDeployer() (gas: 97138)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 35363)\n[PASS] test_TransferToZeroReverts() (gas: 47554)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 50465)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53627)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 9.22ms (28.26ms CPU time)\n\nRan 1 test for test/PebbleToken.invariant.t.sol:PebbleTokenInvariantTest\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2718  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2771  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2703  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5\n  Bound result 118068996610646546858866479\n  Bound result 0\n  Bound result 2\n  Bound result 6000000000000000000\n  Bound result 100\n  Bound result 9\n  Bound result 0\n  Bound result 4876\n  Bound result 621\n  Bound result 121\n  Bound result 13328703302610369\n  Bound result 181\n  Bound result 188\n  Bound result 0\n  Bound result 6\n  Bound result 1389353452920650157\n  Bound result 0\n  Bound result 310\n  Bound result 6000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 6\n  Bound result 96\n  Bound result 5809\n  Bound result 189795770452729446832923076\n  Bound result 7\n  Bound result 463\n  Bound result 205443828073781475690583407\n  Bound result 4697\n  Bound result 10000000000000000000\n  Bound result 10000000000000000000\n  Bound result 208\n  Bound result 31\n  Bound result 1671574062875531872\n  Bound result 1000000000\n  Bound result 56597161147259870305694325\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 533.85ms (532.44ms CPU time)\n\nRan 2 test suites in 534.85ms (543.07ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true},{"durationMs":47,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PebbleToken.approve(address,uint256)\",\"PebbleToken.transfer(address,uint256)\",\"PebbleToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.json\":50,\"README.md\":73,\"foundry.toml\":18,\"remappings.txt\":2,\"src/PebbleToken.sol\":14,\"test/PebbleToken.invariant.t.sol\":73,\"test/PebbleToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":465,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":274,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/PebbleToken.sol:9: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6c98dd2cc9eb93d51e007ec71c49af2aadb47219a001ed8bb654683c1941b02c","verifiedTreeHash":"37009191cda4c3d0095a9ac6aa16c095e6e8de55","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":1308,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.21s\nCompiler run successful!\n","passed":true},{"durationMs":5766,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 27 tests for test/PebbleToken.t.sol:PebbleTokenTest\n[PASS] testFuzz_TransferAboveSupplyReverts(uint256) (runs: 256, μ: 58831, ~: 59137)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584162686792402813\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 256, μ: 101721, ~: 101898)\nLogs:\n  Bound result 154773662762878\n\n[PASS] testFuzz_TransferFromConservesSupplyAndConsumesAllowance(uint256,uint256) (runs: 256, μ: 171930, ~: 174553)\nLogs:\n  Bound result 95\n  Bound result 21\n\n[PASS] test_ApproveEmitsEventAndCanBeReplacedAndRevoked() (gas: 183002)\n[PASS] test_ApproveFromZeroOwnerReverts() (gas: 33055)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 30453)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5546)\n[PASS] test_EntireSupplyCanBeTransferred() (gas: 75775)\n[PASS] test_FactoryReceivesEntireSupplyInsteadOfTransactionOrigin() (gas: 214493)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 121088)\n[PASS] test_InsufficientBalanceReverts() (gas: 44907)\n[PASS] test_LaunchDistributionAndPoolTransfersArriveWhole() (gas: 391703)\n[PASS] test_MetadataAndInitialSupply() (gas: 73578)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 609832)\n[PASS] test_RuntimeHasNoDangerousOpcodes() (gas: 796411)\n[PASS] test_SelfTransferPreservesBalance() (gas: 41154)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91517)\n[PASS] test_TransferFromConsumesFiniteAllowance() (gas: 211750)\n[PASS] test_TransferFromEmitsTransferEvent() (gas: 115397)\n[PASS] test_TransferFromExceedingAllowanceRevertsWithoutStateChange() (gas: 115743)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 113525)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 103802)\n[PASS] test_TransferFromWithoutApprovalRevertsEvenForDeployer() (gas: 97138)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 35363)\n[PASS] test_TransferToZeroReverts() (gas: 47554)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 50465)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53627)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 46.20ms (112.77ms CPU time)\n\nRan 18 tests for test/PebbleToken.adversarial.t.sol:PebbleTokenAdversarialTest\n[PASS] testFuzz_ApproveIsIdempotentAndNeverMovesTokens(uint256) (runs: 1000, μ: 190913, ~: 191072)\n[PASS] testFuzz_FailedApprovedTransferRestoresAllState(uint256,uint256) (runs: 1000, μ: 206617, ~: 207411)\nLogs:\n  Bound result 12000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039445584007913129656528\n\n[PASS] testFuzz_SelfTransferCannotEvadeBalanceCheck(uint256) (runs: 1000, μ: 54491, ~: 54826)\nLogs:\n  Bound result 10247031051515158955027491147416513\n\n[PASS] testFuzz_SplitSpendingCannotExceedApprovedTotal(uint256,uint256) (runs: 1000, μ: 273366, ~: 275917)\nLogs:\n  Bound result 17514\n  Bound result 13298\n\n[PASS] testFuzz_TransferRoundTripRestoresOriginalOwnership(uint256) (runs: 1000, μ: 188444, ~: 188477)\nLogs:\n  Bound result 24576\n\n[PASS] test_ApprovalForOneOwnerDoesNotAuthorizeAnotherOwnersTokens() (gas: 185556)\n[PASS] test_ApprovalForOneSpenderDoesNotAuthorizeAnother() (gas: 130932)\n[PASS] test_ConsumedApprovalCannotBeUsedTwice() (gas: 171848)\n[PASS] test_HolderCannotBypassApprovalByCallingTransferFromItself() (gas: 55179)\n[PASS] test_InfiniteApprovalCanBeRevokedAfterSpending() (gas: 211778)\n[PASS] test_LargestFiniteAllowanceIsConsumed() (gas: 153159)\n[PASS] test_MaximumTransferFromWithInfiniteApprovalStillNeedsBalance() (gas: 118729)\n[PASS] test_MaximumTransferRevertsWithoutChangingSupply() (gas: 65369)\n[PASS] test_OneWeiCanBeTransferredAndReturned() (gas: 132644)\n[PASS] test_SelfTransferFromPreservesBalanceButConsumesApproval() (gas: 115683)\n[PASS] test_TokenContractCanReceiveItsOwnTokensWithoutChangingSupply() (gas: 81788)\n[PASS] test_ZeroSenderCannotTransferEvenZero() (gas: 50402)\n[PASS] test_ZeroTransfersToZeroReceiverStillRevert() (gas: 90756)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 46.30ms (222.85ms CPU time)\n\nRan 1 test for test/PebbleToken.invariant.t.sol:PebbleTokenInvariantTest\n[PASS]\nPebbleTokenInvariantTest invariants:\n[PASS] invariant_EachHolderOwnsExactlyItsAccountedTokens\n[PASS] invariant_MetadataRemainsUnchanged\n[PASS] invariant_OnlyApprovalsAndAuthorizedSpendingChangeAllowances\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved\n PebbleTokenInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭--------------+---------------------------+-------+---------+----------╮\n| Contract     | Selector                  | Calls | Reverts | Discards |\n+=======================================================================+\n| TokenHandler | approve                   | 3125  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | rejectApprovedOverBalance | 3047  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | rejectOverAllowance       | 3067  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | rejectOverBalance         | 3111  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | rejectZeroReceiver        | 3104  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | rejectZeroSpender         | 3057  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transfer                  | 3002  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferFrom              | 3063  | 0       | 0        |\n╰--------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3767\n  Bound result 3765\n  Bound result 6482\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564046425840379626568961241\n  Bound result 0\n  Bound result 4132228330\n  Bound result 1721\n  Bound result 2210\n  Bound result 7232\n  Bound result 1\n  Bound result 0\n  Bound result 125813996375599159817140963330240011258305308995330\n  Bound result 8355\n  Bound result 38629408726889615395925650864688029691495824159240299388142790747083189311113\n  Bound result 96\n  Bound result 1000000000000000000000000001\n  Bound result 6\n  Bound result 4116\n  Bound result 255\n  Bound result 0\n  Bound result 7821\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640179\n  Bound result 2835717306\n  Bound result 95\n  Bound result 2957397981\n  Bound result 0\n  Bound result 1159226964404625809782186395656722711\n  Bound result 0\n  Bound result 63\n  Bound result 492446559836782100065837059\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129643828\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.69s (5.68s CPU time)\n\nRan 3 test suites in 5.69s (5.78s CPU time): 46 tests passed, 0 failed, 0 skipped (46 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PebbleToken.approve(address,uint256)\",\"PebbleToken.transfer(address,uint256)\",\"PebbleToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.json\":50,\"README.md\":73,\"foundry.toml\":18,\"remappings.txt\":2,\"src/PebbleToken.sol\":14,\"test/PebbleToken.adversarial.t.sol\":230,\"test/PebbleToken.invariant.t.sol\":198,\"test/PebbleToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bd11a886bbd034394154c70eabb071104b31b82a9fd278b77cd53e38f4c47116","verifiedTreeHash":"f7773795b955042a6489b3b67fc3b881c6dd0ba4","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":987,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 895.79ms\nCompiler run successful!\n","passed":true},{"durationMs":605,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 27 tests for test/PebbleToken.t.sol:PebbleTokenTest\n[PASS] testFuzz_TransferAboveSupplyReverts(uint256) (runs: 256, μ: 58805, ~: 59137)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640179\n\n[PASS] testFuzz_TransferConservesSupply(uint256) (runs: 256, μ: 101700, ~: 101874)\nLogs:\n  Bound result 5973\n\n[PASS] testFuzz_TransferFromConservesSupplyAndConsumesAllowance(uint256,uint256) (runs: 256, μ: 172579, ~: 174585)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 21211\n\n[PASS] test_ApproveEmitsEventAndCanBeReplacedAndRevoked() (gas: 183002)\n[PASS] test_ApproveFromZeroOwnerReverts() (gas: 33055)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 30453)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5546)\n[PASS] test_EntireSupplyCanBeTransferred() (gas: 75775)\n[PASS] test_FactoryReceivesEntireSupplyInsteadOfTransactionOrigin() (gas: 214493)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 121088)\n[PASS] test_InsufficientBalanceReverts() (gas: 44907)\n[PASS] test_LaunchDistributionAndPoolTransfersArriveWhole() (gas: 391703)\n[PASS] test_MetadataAndInitialSupply() (gas: 73578)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 609832)\n[PASS] test_RuntimeHasNoDangerousOpcodes() (gas: 796411)\n[PASS] test_SelfTransferPreservesBalance() (gas: 41154)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91517)\n[PASS] test_TransferFromConsumesFiniteAllowance() (gas: 211750)\n[PASS] test_TransferFromEmitsTransferEvent() (gas: 115397)\n[PASS] test_TransferFromExceedingAllowanceRevertsWithoutStateChange() (gas: 115743)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 113525)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 103802)\n[PASS] test_TransferFromWithoutApprovalRevertsEvenForDeployer() (gas: 97138)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 35363)\n[PASS] test_TransferToZeroReverts() (gas: 47554)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 50465)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53627)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 7.22ms (25.26ms CPU time)\n\nRan 1 test for test/PebbleToken.invariant.t.sol:PebbleTokenInvariantTest\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2756  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2701  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2735  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 962924220319241665870383993\n  Bound result 0\n  Bound result 358\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1469\n  Bound result 342\n  Bound result 0\n  Bound result 4000000000000000000\n  Bound result 18\n  Bound result 0\n  Bound result 8483311521463935494090602\n  Bound result 207028858\n  Bound result 512\n  Bound result 0\n  Bound result 0\n  Bound result 189\n  Bound result 0\n  Bound result 4967\n  Bound result 962924216319241665870384330\n  Bound result 969\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 5188787565789415447321416\n  Bound result 0\n  Bound result 18\n  Bound result 2711\n  Bound result 24576\n  Bound result 123000000000000000000\n  Bound result 230\n  Bound result 962924216319241665870360931\n  Bound result 1577\n  Bound result 0\n  Bound result 127\n  Bound result 2\n  Bound result 3512\n  Bound result 332\n  Bound result 0\n  Bound result 227276777634240480724714532\n  Bound result 0\n  Bound result 1758029430620425827857053\n  Bound result 517440283\n  Bound result 637\n  Bound result 2085\n  Bound result 242\n  Bound result 127\n  Bound result 1515340869258078457578288\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 511.00ms (509.99ms CPU time)\n\nRan 2 test suites in 512.07ms (518.22ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PebbleToken.approve(address,uint256)\",\"PebbleToken.transfer(address,uint256)\",\"PebbleToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.json\":50,\"README.md\":73,\"foundry.toml\":18,\"launch.json\":24,\"remappings.txt\":2,\"src/PebbleToken.sol\":14,\"test/PebbleToken.invariant.t.sol\":73,\"test/PebbleToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e26966866e191d514a737645245c85ce57e1f1425c2c219f15f50cff8cfb52a7","verifiedTreeHash":"0304df963f214b2c0c591b7dcd44cd7f035ec047","verifierVersion":"0.1.0+0e08a464"}]}