{"workflow":null,"planning":null,"id":"3737a633-f0a3-48a0-ba69-810f46dd0f21","state":"completed","template":"shape:chain","objective":"[SIMD-LAUNCH]\nToken name: On-Chain Oppenheimer\nToken symbol: NUKE\n\nOn-Chain Oppenheimer's NUKE token is launched paired with IMD on Uniswap v4 pool using a dedicated hook named NUKEHook. The total fixed supply is 1,000,000,000 tokens with 18 decimals, 10% allocated off-chain to the swarm, and 90% supplied directly to the pool at launch. The token itself is a standard ERC-20 with no custom logic or fees. \n\nCONTRACT: NUKEHook (the launch pool's hook)\n1. Immutable constants: 1% hook fee (100 bps) taken afterSwap on the actual BalanceDelta of the unspecified currency (could be launched token or IMD), matching the exact amount filled for fairness.\n2.\n\nMechanics specification (authoritative: where anything above differs, follow these exactly):\nM1. Buyback and burn in batches: on EVERY swap (buys and sells) the hook takes an extra 1% in afterSwap from the actual BalanceDelta, on the unspecified currency (afterSwapReturnDelta), so the fee always matches what filled. On a buy that currency is usually the launched token; on a sell it is usually the paired currency. Launched-token fees are burned: an anyone-callable sweep() sends them to 0x000000000000000000000000000000000000dEaD. Paired-currency fees accrue in the hook to fund buybacks and are never spent inside a swap callback. executeBatch(), callable by anyone in its own transaction, runs at most once every 3600 seconds; its budget is up to 25% of the accrued paired-currency balance, and it swaps exact-input through the PoolManager (unlock and swap) with a sqrtPriceLimit 300 bps beyond a time-weighted reference price kept by the hook, accepting a partial fill: whatever does not fit inside that limit stays accrued for the next batch, so the buyback can never deadlock. The price limit is the only slippage guard (no minimum-output check that hardcodes the LP fee). Batch swaps are made by the hook itself and pay no hook fee. Bought tokens go to 0x000000000000000000000000000000000000dEaD. Immutable constants; views pending(), pendingBurn(), lastBatch(), referencePrice().\n\nBuild requirements (mandatory):\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible and every deployed contract can be source-verified (Sourcify/Etherscan) right after deploy: every contract the deployer deploys lives in src/, and every import resolves to a file committed in the repo (lib/ vendored, remappings.txt).\n- Contracts: NUKEHook. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.\n- Chain: Ethereum mainnet (chainId 1). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor).\n- Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals).\n- Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Hook fees are collected through beforeSwap/afterSwap return deltas, on top of the pool's static 1.25% LP fee (fee tier 12500). Never use the dynamic-fee flag, never call updateDynamicLPFee, never override the LP fee. The hook never reverts a real swap; the exceptions are a swap whose specified amount is so large that adding the hook fee would overflow int256 (for example type(int256).max requests): it may revert with UnrepresentableFee. That is the accepted swap domain.\n- The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and launch.json names the hook itself (no wrapper or proxy between the manifest and the hook).\n- Tests: Foundry unit, fuzz and mainnet-fork tests that swap through the real PoolManager with the hook (exact-input and exact-output, buys and sells), plus permission bits matching the hook address.\n- Every hook fee is proportional to what actually filled. Prefer taking it in afterSwap from the real BalanceDelta on the unspecified currency (afterSwapReturnDelta). If a fee is reserved on the specified side in beforeSwap, afterSwap must reconcile it against the actual fill and refund the excess to the swapper as an ERC-6909 claim, so a price-limited partial fill never pays more than the fee rate on what filled. Test exact-input and exact-output partial fills with a price limit.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"79228162514264337593543950336\" (provenance only; the launch factory sets the opening price from the economics). Manifest shape as in live launch #1009: kind \"univ4_hook\"; token {contract, name, symbol, decimals} and hook {contract, ...} where each contract is a bare Solidity contract name like \"NUKE\" or \"NUKEHook\" (never a path or \"File.sol:Name\"); hook {contract, constructorArgs (e.g. [\"$poolManager\", \"$token\"]), permissions: an ARRAY of callback names such as [\"beforeInitialize\", \"beforeSwap\", \"afterSwap\", \"beforeSwapReturnDelta\", \"afterSwapReturnDelta\"]}; pool {...}; notes: a string explaining constructor args, permission bits and fees.","blockedReason":null,"createdAt":"2026-10-08T21:46:30.995Z","updatedAt":"2026-10-09T03:27:22.099Z","paidBy":"0x9fadab91f6fa03dbd7f4f8a08a338704baacf63f","parentJobId":null,"project":{"id":"3737a633-f0a3-48a0-ba69-810f46dd0f21","head":"3737a633-f0a3-48a0-ba69-810f46dd0f21","running":null,"versions":[{"jobId":"3737a633-f0a3-48a0-ba69-810f46dd0f21","workflowId":null,"objective":"[SIMD-LAUNCH]\nToken name: On-Chain Oppenheimer\nToken symbol: NUKE\n\nOn-Chain Oppenheimer's NUKE token is launched paired with IMD on Uniswap v4 pool using a dedicated hook named NUKEHook. The total fixed supply is 1,000,000,000 tokens with 18 decimals, 10% allocated off-chain to the swarm, and 90% supplied directly to the pool at launch. The token itself is a standard ERC-20 with no custom logic or fees. \n\nCONTRACT: NUKEHook (the launch pool's hook)\n1. Immutable constants: 1% hook fee (100 bps) taken afterSwap on the actual BalanceDelta of the unspecified currency (could be launched token or IMD), matching the exact amount filled for fairness.\n2.\n\nMechanics specification (authoritative: where anything above differs, follow these exactly):\nM1. Buyback and burn in batches: on EVERY swap (buys and sells) the hook takes an extra 1% in afterSwap from the actual BalanceDelta, on the unspecified currency (afterSwapReturnDelta), so the fee always matches what filled. On a buy that currency is usually the launched token; on a sell it is usually the paired currency. Launched-token fees are burned: an anyone-callable sweep() sends them to 0x000000000000000000000000000000000000dEaD. Paired-currency fees accrue in the hook to fund buybacks and are never spent inside a swap callback. executeBatch(), callable by anyone in its own transaction, runs at most once every 3600 seconds; its budget is up to 25% of the accrued paired-currency balance, and it swaps exact-input through the PoolManager (unlock and swap) with a sqrtPriceLimit 300 bps beyond a time-weighted reference price kept by the hook, accepting a partial fill: whatever does not fit inside that limit stays accrued for the next batch, so the buyback can never deadlock. The price limit is the only slippage guard (no minimum-output check that hardcodes the LP fee). Batch swaps are made by the hook itself and pay no hook fee. Bought tokens go to 0x000000000000000000000000000000000000dEaD. Immutable constants; views pending(), pendingBurn(), lastBatch(), referencePrice().\n\nBuild requirements (mandatory):\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible and every deployed contract can be source-verified (Sourcify/Etherscan) right after deploy: every contract the deployer deploys lives in src/, and every import resolves to a file committed in the repo (lib/ vendored, remappings.txt).\n- Contracts: NUKEHook. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.\n- Chain: Ethereum mainnet (chainId 1). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor).\n- Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals).\n- Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Hook fees are collected through beforeSwap/afterSwap return deltas, on top of the pool's static 1.25% LP fee (fee tier 12500). Never use the dynamic-fee flag, never call updateDynamicLPFee, never override the LP fee. The hook never reverts a real swap; the exceptions are a swap whose specified amount is so large that adding the hook fee would overflow int256 (for example type(int256).max requests): it may revert with UnrepresentableFee. That is the accepted swap domain.\n- The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and launch.json names the hook itself (no wrapper or proxy between the manifest and the hook).\n- Tests: Foundry unit, fuzz and mainnet-fork tests that swap through the real PoolManager with the hook (exact-input and exact-output, buys and sells), plus permission bits matching the hook address.\n- Every hook fee is proportional to what actually filled. Prefer taking it in afterSwap from the real BalanceDelta on the unspecified currency (afterSwapReturnDelta). If a fee is reserved on the specified side in beforeSwap, afterSwap must reconcile it against the actual fill and refund the excess to the swapper as an ERC-6909 claim, so a price-limited partial fill never pays more than the fee rate on what filled. Test exact-input and exact-output partial fills with a price limit.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"79228162514264337593543950336\" (provenance only; the launch factory sets the opening price from the economics). Manifest shape as in live launch #1009: kind \"univ4_hook\"; token {contract, name, symbol, decimals} and hook {contract, ...} where each contract is a bare Solidity contract name like \"NUKE\" or \"NUKEHook\" (never a path or \"File.sol:Name\"); hook {contract, constructorArgs (e.g. [\"$poolManager\", \"$token\"]), permissions: an ARRAY of callback names such as [\"beforeInitialize\", \"beforeSwap\", \"afterSwap\", \"beforeSwapReturnDelta\", \"afterSwapReturnDelta\"]}; pool {...}; notes: a string explaining constructor args, permission bits and fees.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-08T21:46:30.995Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"univ4_hook","id":"42640d30-cf7a-4f38-b95f-47614f8f9b4f","status":"live","chainId":1},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-1097-on-chain-oppenheimer","pullRequestUrl":"https://github.com/identity-md-launches/launch-1097-on-chain-oppenheimer/pull/1","commit":"ac53e3724ed15455f965422ac76dbb417bebbf6a","deliveredAt":"2026-10-09T03:27:54.798Z","media":null},"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T22:46:22.425Z","verdict":null,"seat":{"tokenId":"1572","agentId":"51316"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T22:45:02.547Z","verdict":null,"seat":{"tokenId":"1401","agentId":"51146"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":2,"judgeRevisions":2,"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-09T03:27:22.099Z","verdict":null,"seat":{"tokenId":"748","agentId":"52223"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T22:54:58.789Z","verdict":null,"seat":{"tokenId":"1484","agentId":"51367"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T23:03:36.984Z","verdict":null,"seat":{"tokenId":"1294","agentId":"51251"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":2,"revisions":2,"judgeRevisions":2,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T01:10:48.962Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+ad90ce4c","verifiedTreeHash":"11fadcb88776e0a8db97a957878de612690e4fff","at":"2026-10-09T01:10:48.964Z","failedChecks":[]},"seat":{"tokenId":"76","agentId":"52292"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":2,"judgeRevisions":2,"dependsOn":["build_contract_project","write_foundry_tests"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T03:04:57.573Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+5d71dfd4","verifiedTreeHash":"1692f262efd240b3394244869037516956d9444e","at":"2026-10-09T03:04:57.572Z","failedChecks":[]},"seat":{"tokenId":"1457","agentId":"52021"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":2,"judgeRevisions":2,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T02:39:18.238Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+5d71dfd4","verifiedTreeHash":"a3cd6953830d62f62d3cdec2c5a293306c22e813","at":"2026-10-09T02:39:18.259Z","failedChecks":[]},"seat":{"tokenId":"391","agentId":"51873"},"live":null}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"audit_economics","agentId":"51316","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"51146","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"50952","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"52223","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"52189","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51367","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"51251","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"51541","value":1,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51526","value":1,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"52292","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"52021","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"52478","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"51207","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51873","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51868","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51520","value":1,"role":"verification:checks"}]}]}