{"workflow":null,"planning":null,"id":"541703af-3dab-49c2-8429-a3446ec748b5","state":"blocked","template":"shape:chain","objective":"Token name: Work\nToken symbol: WORK\n\nRobinhood Chain 4663, Uniswap v4 hook launch paired with IMD (0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127). B = 0xc9EAFE33A510a3a3d95A94c4f85AdaF6a3EA12a0 (EOA). Bounded owner changes emit events; every parameter has a view. Not upgradeable.\n\nDEPLOY SHAPE (launch.json deploys only a no-arg token and the hook): src/Work.sol = plain ERC-20 Work/WORK, 18 decimals, constructor() mints 1,000,000,000 to msg.sender, nothing else. src/WorkHook.sol constructor(IPoolManager manager, address token, address owner, int24 tickSpacing) creates WorkersNFT with new (passing token, owner, address(this) as hook), exposed as workers(). launch.json hook constructorArgs [\"$poolManager\",\"$token\",\"0xc9eafe33a510a3a3d95a94c4f85adaf6a3ea12a0\",\"60\"], pool fee 12500, tickSpacing 60. Hook initcode < 49,152 bytes, every runtime < 24,576. foundry.toml (REQUIRED, the launch attestation compiles with it; without it the hook creation code exceeds EIP-3860): optimizer true, runs 200, via_ir true, bytecode_hash \"none\", solc 0.8.26, cancun. No linked libraries (all library functions internal). Tests use vm.getBlockTimestamp()/vm.getBlockNumber().\n\n1) WorkHook: fee 0.75% on buys and sells (on top of the 1.25% pool fee), owner may set 0-8.75%. During the NFT mint 100% to B; after it ends stakerShareBps (default 10000, owner 9000-10000) goes to WorkersNFT stakers, rest to B; all to B if nothing staked. Keeps a 30-min TWAP for buybacks.\n\n2) WorkersNFT (ERC-721 \"Workers\", max 3,333). setCap lowers to >= minted, never up; endMint() ends minting forever; pause() stops minting and WORK accrual for at most 24 h, next pause needs 24 h unpaused; claims, activation, unstake, transfers and burns always work.\n- Mint by PoW: keccak256(abi.encode(DOMAIN, chainid, this, keccak256(abi.encode(anchorHash, prevWork)), msg.sender, nonce)) < target; anchor = ArbSys block hash <= 250 blocks old; 1 mint per block; retarget every 8 mints toward 10 s; target doubles after 300 s idle; starting difficulty and epoch-0 floor 12 bits, 9 epochs of 370 (+3), floor +1 bit per epoch, owner floor +-2.\n- Paid in IMD (transferFrom, no ETH): [0.25,0.5,0.75,1.25,1.75,2.5,3.25,4,5] IMD per epoch, never above 5; owner scales 0.5x-1x only.\n- id = pool[hash % remaining] (swap-and-pop, no reserves, no allowlist, no free or team mint). Overclocked if hash beats target by >= 4 bits: tokenURI baseURI+\"oc/\"+id+\".json\" else baseURI+id+\".json\"; baseURI ipfs://bafybeibmkvtnptsqztdvsm5sh3avormdnfyarbxpgdlcj6bmg37qchhqve/ (owner may update). ERC-4906 events. Standard OpenZeppelin-compatible ERC-721 approvals (approving the owner or self as operator must not revert). ERC-2981 5% to B, max 10%.\n\n3) Money in IMD, each mint: 65% stakers, 25% buyback balance, 10% B (no stakers: that 65% to buyback).\n- Staking: NFT escrowed in the contract 7/14/30 days = 1x/2x/4x, no early exit; claim IMD (mint share + hook fees) by weight, payouts capped at the reserve; unstake returns by plain transfer. Unstaked workers transfer normally (never blocked).\n- buyback(amount): anyone, amount <= 100 IMD and <= balance, once per 60 s, IMD->WORK in the pool with TWAP minimum output, WORK sent to 0x...dEaD; the protocol buyback pays no hook fee and allows 3% slippage below the TWAP quote.\n- Supply: 10% swarm, 70% pool, 20% to B; B deposits 100M WORK mining pool + 50M burn pool via fundPools().\n\n4) After the mint:\n- activate(id): one time, only while mining is open (reverts after releaseMiningRemainder), fee to B (default 0.15 IMD, owner 0-0.5), stays with the token.\n- Passive WORK, no hashing: 8 eras from mint end, era k lasts 7*2^k days and emits 12.5M, split among activated unburned workers (accumulator); claimWork(ids) by holder or staker; unclaimed moves with the token. WORK scheduled while paused or with no activated worker is carried and released at the next unpaused update. After all eras releaseMiningRemainder() (owner, not paused) sends the rest to B.\n- burn(id): unstaked worker for burnPool / minted (fixed at mint end); burned workers stop earning.\n\nSafety: sweep(token) to B for strays but never staker IMD, buyback balance, mining or burn pool. No minting outside PoW, no owner path to user funds.\n\nHook deploy (including the WorkersNFT it creates) must use < 12M gas. Hook tests must run against the real Uniswap v4-core PoolManager (vendored in lib/), not a mock that computes deltas itself.\n\nTests: Foundry incl. fuzz on work checks, retarget, id picking, splits, escrow, hook split, activation, accrual and carry, burn, buyback amount, pause scope, sweep limits; then an adversarial review.","blockedReason":"node build_contract_project: analysis_failed","createdAt":"2026-10-07T19:26:25.755Z","updatedAt":"2026-10-07T20:50:23.735Z","paidBy":"0xc9eafe33a510a3a3d95a94c4f85adaf6a3ea12a0","parentJobId":null,"project":{"id":"541703af-3dab-49c2-8429-a3446ec748b5","head":"541703af-3dab-49c2-8429-a3446ec748b5","running":null,"versions":[{"jobId":"541703af-3dab-49c2-8429-a3446ec748b5","workflowId":null,"objective":"Token name: Work\nToken symbol: WORK\n\nRobinhood Chain 4663, Uniswap v4 hook launch paired with IMD (0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127). B = 0xc9EAFE33A510a3a3d95A94c4f85AdaF6a3EA12a0 (EOA). Bounded owner changes emit events; every parameter has a view. Not upgradeable.\n\nDEPLOY SHAPE (launch.json deploys only a no-arg token and the hook): src/Work.sol = plain ERC-20 Work/WORK, 18 decimals, constructor() mints 1,000,000,000 to msg.sender, nothing else. src/WorkHook.sol constructor(IPoolManager manager, address token, address owner, int24 tickSpacing) creates WorkersNFT with new (passing token, owner, address(this) as hook), exposed as workers(). launch.json hook constructorArgs [\"$poolManager\",\"$token\",\"0xc9eafe33a510a3a3d95a94c4f85adaf6a3ea12a0\",\"60\"], pool fee 12500, tickSpacing 60. Hook initcode < 49,152 bytes, every runtime < 24,576. foundry.toml (REQUIRED, the launch attestation compiles with it; without it the hook creation code exceeds EIP-3860): optimizer true, runs 200, via_ir true, bytecode_hash \"none\", solc 0.8.26, cancun. No linked libraries (all library functions internal). Tests use vm.getBlockTimestamp()/vm.getBlockNumber().\n\n1) WorkHook: fee 0.75% on buys and sells (on top of the 1.25% pool fee), owner may set 0-8.75%. During the NFT mint 100% to B; after it ends stakerShareBps (default 10000, owner 9000-10000) goes to WorkersNFT stakers, rest to B; all to B if nothing staked. Keeps a 30-min TWAP for buybacks.\n\n2) WorkersNFT (ERC-721 \"Workers\", max 3,333). setCap lowers to >= minted, never up; endMint() ends minting forever; pause() stops minting and WORK accrual for at most 24 h, next pause needs 24 h unpaused; claims, activation, unstake, transfers and burns always work.\n- Mint by PoW: keccak256(abi.encode(DOMAIN, chainid, this, keccak256(abi.encode(anchorHash, prevWork)), msg.sender, nonce)) < target; anchor = ArbSys block hash <= 250 blocks old; 1 mint per block; retarget every 8 mints toward 10 s; target doubles after 300 s idle; starting difficulty and epoch-0 floor 12 bits, 9 epochs of 370 (+3), floor +1 bit per epoch, owner floor +-2.\n- Paid in IMD (transferFrom, no ETH): [0.25,0.5,0.75,1.25,1.75,2.5,3.25,4,5] IMD per epoch, never above 5; owner scales 0.5x-1x only.\n- id = pool[hash % remaining] (swap-and-pop, no reserves, no allowlist, no free or team mint). Overclocked if hash beats target by >= 4 bits: tokenURI baseURI+\"oc/\"+id+\".json\" else baseURI+id+\".json\"; baseURI ipfs://bafybeibmkvtnptsqztdvsm5sh3avormdnfyarbxpgdlcj6bmg37qchhqve/ (owner may update). ERC-4906 events. Standard OpenZeppelin-compatible ERC-721 approvals (approving the owner or self as operator must not revert). ERC-2981 5% to B, max 10%.\n\n3) Money in IMD, each mint: 65% stakers, 25% buyback balance, 10% B (no stakers: that 65% to buyback).\n- Staking: NFT escrowed in the contract 7/14/30 days = 1x/2x/4x, no early exit; claim IMD (mint share + hook fees) by weight, payouts capped at the reserve; unstake returns by plain transfer. Unstaked workers transfer normally (never blocked).\n- buyback(amount): anyone, amount <= 100 IMD and <= balance, once per 60 s, IMD->WORK in the pool with TWAP minimum output, WORK sent to 0x...dEaD; the protocol buyback pays no hook fee and allows 3% slippage below the TWAP quote.\n- Supply: 10% swarm, 70% pool, 20% to B; B deposits 100M WORK mining pool + 50M burn pool via fundPools().\n\n4) After the mint:\n- activate(id): one time, only while mining is open (reverts after releaseMiningRemainder), fee to B (default 0.15 IMD, owner 0-0.5), stays with the token.\n- Passive WORK, no hashing: 8 eras from mint end, era k lasts 7*2^k days and emits 12.5M, split among activated unburned workers (accumulator); claimWork(ids) by holder or staker; unclaimed moves with the token. WORK scheduled while paused or with no activated worker is carried and released at the next unpaused update. After all eras releaseMiningRemainder() (owner, not paused) sends the rest to B.\n- burn(id): unstaked worker for burnPool / minted (fixed at mint end); burned workers stop earning.\n\nSafety: sweep(token) to B for strays but never staker IMD, buyback balance, mining or burn pool. No minting outside PoW, no owner path to user funds.\n\nHook deploy (including the WorkersNFT it creates) must use < 12M gas. Hook tests must run against the real Uniswap v4-core PoolManager (vendored in lib/), not a mock that computes deltas itself.\n\nTests: Foundry incl. fuzz on work checks, retarget, id picking, splits, escrow, hook split, activation, accrual and carry, burn, buyback amount, pause scope, sweep limits; then an adversarial review.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"blocked","createdAt":"2026-10-07T19:26:25.755Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"univ4_hook","id":null,"status":null,"chainId":4663},"oracleRequestId":null,"delivery":null,"media":null,"nodes":[{"key":"build_contract_project","role":"implement","state":"failed","attempt":3,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":"analysis_failed","dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T20:50:23.735Z","verdict":{"status":"rejected","profile":"foundry","evaluation":"checks","rejectionCode":"analysis_failed","detail":"launch.json is not a valid launch manifest: hook.contract: expected a contract name; hook.permissions: Invalid input: expected array, received undefined; token.contract: expected a contract name; pool.pairedCurrency: Invalid input: expected string, received undefined; pool.initialPrice: Invalid input: expected string, received undefined; notes: Invalid input: expected string, received undefined","verifierVersion":"0.1.0+a2d9a899","verifiedTreeHash":"1c82ec9bc6219bdb5608a1ab9d2d732ef5a41cce","at":"2026-10-07T20:50:23.736Z","failedChecks":[]},"seat":null,"live":null},{"key":"manifest","role":"integrate","state":"waiting","attempt":0,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T19:26:25.755Z","verdict":null,"seat":null,"live":null},{"key":"write_foundry_tests","role":"tests","state":"waiting","attempt":0,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T19:26:25.755Z","verdict":null,"seat":null,"live":null}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"build_contract_project","agentId":"51221","value":0,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51197","value":0,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51180","value":0,"role":"verification:checks"}]}]}