{"workflow":null,"planning":null,"id":"ca4a248e-80ba-46c1-9238-70a72e6130e3","state":"completed","template":"shape:chain","objective":"A contract for an NFT collection called IMDRocks: 100 rocks, numbered 0 to 99, sold one at a time in order at a rising price, with all art and metadata fully on-chain. Just the contract: no launch token, no pool.\n\nToken name: IMDRocks\nToken symbol: IMDROCK\nTotal supply: 100 (fixed; nothing can ever mint more)\n\nContract: an ERC-721 whose contract is named exactly IMDRocks, with name \"IMDRocks\" and symbol \"IMDROCK\" as source constants. It also exposes totalSupply(), MAX_SUPPLY() = 100, nextRock() (the number now for sale, 100 when sold out) and priceOf(uint256).\n\nReserve: rocks 0 to 9 are minted to 0xE89eB4D7153958F9436E2c3fe30D6F2024404cB0 in the constructor, each with a Transfer event. That address is a constructor argument (an address; do not use msg.sender, the deployer is a factory) and is also the payout address. nextRock() starts at 10.\n\nSale: only the next rock in order can be bought. priceOf(n) = 10000000000000 wei * (1 + n * n), which is 0.00001 ETH + n squared times 0.00001 ETH: rock 10 costs 0.00101 ETH and rock 99 costs 0.09802 ETH. buy() is payable, requires msg.value to equal priceOf(nextRock()) exactly, mints that rock to the caller, moves nextRock() up by one, and forwards the whole payment to the payout address in the same transaction (state is updated before the payment is sent; if the payment fails the purchase reverts). When all 100 exist, buy() reverts. No ETH ever rests in the contract: it has no receive or fallback function and no withdraw function. One rock per call; there is no per-wallet limit.\n\nThere is no owner, no admin, no pause, no upgrade, no price change, no royalties.\n\nArt: every rock is the same hand-drawn rock, an original drawing, as an SVG produced by the contract: a chunky faceted boulder with a few shaded planes and a ground shadow on a flat background, square viewBox. Rocks differ only in tint: the rock's colour is set by its number, 100 different tints spread around the colour wheel with number 0 a plain stone grey. Do not copy the image of any existing collection.\n\nMetadata: tokenURI(n) returns a data:application/json;base64 document with name \"IMDRock #<n>\", a one-line description, image as a data:image/svg+xml;base64 SVG, and attributes: Number, Tint (a colour name or hex), and Price (the rock's priceOf in ETH as a decimal string). tokenURI reverts for a rock that does not exist yet; add imageOf(uint256) that returns the SVG for any number 0 to 99.\n\nUpgrades and pausing: none. Transfer rules: plain ERC-721, no fee, no limit. Owner: none. Constructor arguments are addresses and numbers only.\n\nTests that must exist: rocks 0 to 9 are owned by the reserve at deployment; priceOf for every n from 0 to 99 against the formula; buying rocks 10 to 99 in order with the payout address's balance rising by exactly each price and the contract's balance staying 0; a payment one wei over or under reverts; buy() after rock 99 reverts; a payout address that rejects ETH makes buy() revert and leaves nextRock() unchanged; tokenURI and imageOf well-formed for all 100; all 100 tints differ.\n\nThe review must try: buying out of order or twice, paying less than the price, reentering buy() from the payout address or from onERC721Received, stranding ETH in the contract, and minting a 101st rock.","blockedReason":null,"createdAt":"2026-10-06T00:04:32.120Z","updatedAt":"2026-10-06T00:31:46.271Z","paidBy":"0xe89eb4d7153958f9436e2c3fe30d6f2024404cb0","parentJobId":null,"project":{"id":"ca4a248e-80ba-46c1-9238-70a72e6130e3","head":"ca4a248e-80ba-46c1-9238-70a72e6130e3","running":null,"versions":[{"jobId":"ca4a248e-80ba-46c1-9238-70a72e6130e3","workflowId":null,"objective":"A contract for an NFT collection called IMDRocks: 100 rocks, numbered 0 to 99, sold one at a time in order at a rising price, with all art and metadata fully on-chain. Just the contract: no launch token, no pool.\n\nToken name: IMDRocks\nToken symbol: IMDROCK\nTotal supply: 100 (fixed; nothing can ever mint more)\n\nContract: an ERC-721 whose contract is named exactly IMDRocks, with name \"IMDRocks\" and symbol \"IMDROCK\" as source constants. It also exposes totalSupply(), MAX_SUPPLY() = 100, nextRock() (the number now for sale, 100 when sold out) and priceOf(uint256).\n\nReserve: rocks 0 to 9 are minted to 0xE89eB4D7153958F9436E2c3fe30D6F2024404cB0 in the constructor, each with a Transfer event. That address is a constructor argument (an address; do not use msg.sender, the deployer is a factory) and is also the payout address. nextRock() starts at 10.\n\nSale: only the next rock in order can be bought. priceOf(n) = 10000000000000 wei * (1 + n * n), which is 0.00001 ETH + n squared times 0.00001 ETH: rock 10 costs 0.00101 ETH and rock 99 costs 0.09802 ETH. buy() is payable, requires msg.value to equal priceOf(nextRock()) exactly, mints that rock to the caller, moves nextRock() up by one, and forwards the whole payment to the payout address in the same transaction (state is updated before the payment is sent; if the payment fails the purchase reverts). When all 100 exist, buy() reverts. No ETH ever rests in the contract: it has no receive or fallback function and no withdraw function. One rock per call; there is no per-wallet limit.\n\nThere is no owner, no admin, no pause, no upgrade, no price change, no royalties.\n\nArt: every rock is the same hand-drawn rock, an original drawing, as an SVG produced by the contract: a chunky faceted boulder with a few shaded planes and a ground shadow on a flat background, square viewBox. Rocks differ only in tint: the rock's colour is set by its number, 100 different tints spread around the colour wheel with number 0 a plain stone grey. Do not copy the image of any existing collection.\n\nMetadata: tokenURI(n) returns a data:application/json;base64 document with name \"IMDRock #<n>\", a one-line description, image as a data:image/svg+xml;base64 SVG, and attributes: Number, Tint (a colour name or hex), and Price (the rock's priceOf in ETH as a decimal string). tokenURI reverts for a rock that does not exist yet; add imageOf(uint256) that returns the SVG for any number 0 to 99.\n\nUpgrades and pausing: none. Transfer rules: plain ERC-721, no fee, no limit. Owner: none. Constructor arguments are addresses and numbers only.\n\nTests that must exist: rocks 0 to 9 are owned by the reserve at deployment; priceOf for every n from 0 to 99 against the formula; buying rocks 10 to 99 in order with the payout address's balance rising by exactly each price and the contract's balance staying 0; a payment one wei over or under reverts; buy() after rock 99 reverts; a payout address that rejects ETH makes buy() revert and leaves nextRock() unchanged; tokenURI and imageOf well-formed for all 100; all 100 tints differ.\n\nThe review must try: buying out of order or twice, paying less than the price, reentering buy() from the payout address or from onERC721Received, stranding ETH in the contract, and minting a 101st rock.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-06T00:04:32.120Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"evm_contracts","id":"64142c97-7adb-4e31-bbf1-cfd71f2692f6","status":"live","chainId":11155111},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-753-imdrocks","pullRequestUrl":"https://github.com/identity-md-launches/launch-753-imdrocks/pull/1","commit":"7bcbffbe6dde1602ee24dce0e5b9bc0444e0fd7f","deliveredAt":"2026-10-06T00:31:55.858Z","media":null},"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:20:28.874Z","verdict":null,"seat":{"tokenId":"877","agentId":"51343"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:23:48.827Z","verdict":null,"seat":{"tokenId":"550","agentId":"51338"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:31:46.271Z","verdict":null,"seat":{"tokenId":"1473","agentId":"51481"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:20:10.734Z","verdict":null,"seat":{"tokenId":"440","agentId":"51337"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:19:29.972Z","verdict":null,"seat":{"tokenId":"766","agentId":"51342"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:15:05.772Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+f8d984f2","verifiedTreeHash":"7e2a21878fe1dc65a228889be836fc9bcece4600","at":"2026-10-06T00:15:05.771Z","failedChecks":[]},"seat":{"tokenId":"68","agentId":"51129"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:17:27.443Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+f8d984f2","verifiedTreeHash":"025245965de94c5695d8875255dff4d4d5e946b2","at":"2026-10-06T00:17:27.442Z","failedChecks":[]},"seat":{"tokenId":"1393","agentId":"52122"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T00:24:58.856Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+f8d984f2","verifiedTreeHash":"fb04e3facffb2926be2f35b60f42e1c8ad4c552e","at":"2026-10-06T00:24:58.853Z","failedChecks":[]},"seat":{"tokenId":"579","agentId":"50950"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xf5d86edd8a16c29e65743b856b3189fbda9777c3f67d01a7b10da6cef78fb595","blockNumber":26129772,"sentAt":"2026-10-06T00:32:16.770Z","entries":[{"nodeKey":"audit_economics","agentId":"51343","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"51338","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51481","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51337","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"51342","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"51129","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"52122","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"50950","value":1,"role":"verification:checks"}]}]}