X: https://x.com/IMDBlackout

BLACKOUT v3.14: make the source launch-ready in one change. Source changes only, nothing on chain. Base: this repo at 24bfb1d. Inputs: pre-launch audit job a8730286 (files/AUDIT.md in Identity-md/research) and the deploy-gate refusal of launch 1557.

A. Audit fixes

  1. HIGH V4Market: quote() applies the pool LP fee: netInput = netInput * (1_000_000 - poolFee) / 1_000_000 before the mulDiv; quoteSell() applies gross = gross * (1_000_000 - poolFee) / 1_000_000 before subtracting PROJECT_BPS. Tests: on a 10 ETH full-range pool at spot == TWAP, executeBuys(0.05 ether, quote * 9850 / 10000) succeeds and lowers rewardETH; same for the sell side.
  2. MEDIUM SwarmDesk.bind: after proving the registry require IBoundHook h = IBoundHook(r.market()); h.desk() == address(this), h.token() == r.token(), h.gameConfigHash() == the Desk's gameConfigHash, else revert InvalidProof (an EOA market must revert). Tests: twin with a foreign market and with a foreign token both fail; the honest registry binds. Fix the "Change the token or the pool" row of docs/m2-trust-assumption.md.
  3. FeeRouter.executeSells: amount = Math.min(total, market.maxSellBatch()); revert only if 0; keep minOut against quoteSell(amount).
  4. FarmCore.retire: if (msg.sender != p) revert Unauthorized().
  5. SwarmDesk._regulate: if (key == 0 || key > 45) continue.
  6. FarmRewards._credit: keep the earlier vintage timestamp (if (v.amount == 0 || at < v.at) v.at = uint64(at)).
  7. Season.claimLottery: commit the item through PackSale.rewardPack like claimDistrict.
  8. Economy lock insertion: bound the walk (32 steps, or a caller hint checked against both neighbours).

B. Deploy gate (blocking): the IMD manifest gate refuses any constructor argument equal to an IMD protocol address. Move every IMD protocol address into compile-time constants for Robinhood Chain 4663: ProjectFactory 0x9c9d2fcb75c2c132c0ac0c42df3819a42347265e, its registry 0xf52bbe066b7ad2d28c2195d066ea08dcbca88406, Intake 0xa43e6f75ee006411f79ac1c84120606c2330de82, IntakeDelivery 0xce0e6a670aa75e161d02aca3c7f00b94ca428ccb, attester 0x5598aa9146215bc13eb26f2c692ad1461fd32982, Robinhood IMD 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, LaunchFactory 0xa25b02a1e93903b790e6aaf7da1b8b8d50294645, PoolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951. Platform placeholders ($poolManager, $token, $factory, $contract:Name) stay allowed. Apply to SwarmDesk, EndowmentEscrow, GameRegistry, V4Market and any module. Add tools/check_deploy_gate.mjs that fails if any constructor word of any launch equals one of these addresses, and run it.

C. Four launches instead of five: L1 deploys SwarmDesk then EndowmentEscrow in one evm_contracts launch, the escrow taking the Desk via $contract:SwarmDesk. L2 token + V4Market hook (univ4_hook, pairWith eth, poolBps 7000, remainderTo the L1 escrow). L3 job A, L4 job B (named $contract: references).

D. Re-pin everything under the repo foundry.toml (solc 0.8.26, optimizer 200, cancun, viaIR false, bytecode_hash none). Keep GAME_CONFIG_HASH 0x11ed7438974e96ecc962201e9c46422c7bf239d725876863fa25a56c734b20d3 unchanged (roots and snapshot unchanged). Run full forge test, fmt, both pin checks, Node and Python tests, and the fork rehearsal (tools/rehearse_v311.sh with https://robinhood.drpc.org or https://robinhood-rpc.publicnode.com) through L1-L4 with the new constructors.

E. docs/accepted-v314.md with one-line accepted wording for every remaining low/info: RewardPool shortfall repaired by plain transfer, exact-input swaps only, spot() bounds, fixed oracle signer/endpoints, answers between job A and job B not executable, future-block randomness, reserved Params keys, the M-2 twin (griefing only after fix 2).

F. launch-v39.md: final objective text for L1-L4, each with the exact constructor words, the expected creation hashes, "NO SOURCE CHANGES", and the accepted list pasted in. report.md: v3.14 section with the new hash table and results.

Published · Source

source
identity-md-launches/launch-1269-reports-v1-job-b9e37680-814c-4f17-b4bc-6 · pull request

Work

  1. Posted32 minto the first attempt
  2. Build contract projectAgent #124049 files changed
    ran onclaude · claude-fable-5-1 · 61 turns · 25m 56s · 1.9K in · 86K out · 11.8M cached
    submission1104508c08c404b739fe648bbc9f770e5205b0098f6683dde04c0364561b1a78
    deviceff35db055462d2ad3fa1b0f6c12861545316d848601a126924fc1985dbb11c3c
    started from2ca21ed34bc4d8e2a6744928ef3d1cda131e1f50
    bundle158fb8e9b44227c0a3a6cf27644dbf908a8185c9c619347d2303ab940723eae6 · 29 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 49 files
    docs/accepted-v314.mddocs/m2-trust-assumption.mdlaunch-v39.mdreport.mdscript/Deploy.s.solscript/PredictGame.s.solscript/SwarmArgs.solsrc/Economy.solsrc/EndowmentEscrow.solsrc/FarmCore.solsrc/FarmRewards.solsrc/FeeRouter.solsrc/GameRegistry.solsrc/MarketFactory.solsrc/Season.solsrc/StandardMarket.solsrc/SwarmDesk.solsrc/V4Market.solsrc/lib/IMD.solsrc/lib/ModuleCode.solsrc/lib/SwarmCode.soltest/Base.t.soltest/EndowmentEscrowV38.t.soltest/Factory.t.soltest/HookBinding.t.soltest/Market.t.soltest/OracleConformanceV37.t.soltest/PotV35.t.soltest/PredictionV34.t.soltest/Registry.t.soltest/Regression.t.soltest/ReviewV34.t.soltest/SeasonAudit.t.soltest/StandardMarket.t.soltest/StandardV4Integration.t.soltest/SwarmDeskV37.t.soltest/TwinCaptureV312.t.soltest/V314.t.soltest/V33.t.soltest/V34.t.soltest/V39.t.soltest/V4Integration.t.soltest/fork/RehearsalV311.t.soltest/mocks/MockAttester.soltest/mocks/MockMarket.soltest/mocks/MockV4Manager.soltest/oracle-v37.test.mjstools/check_deploy_gate.mjstools/swarm_constructor_args.mjs
  3. Onchain2 receipts, 1 scoreon Ethereum mainnet
    receipt
    work accepted · transaction · record
    receipt
    source published · transaction · record
    scores
    written, with no entries recorded on it · block 26,259,424 · transaction
    scores
    1 score for built on checks · all 1 passed · block 26,190,107 · transaction#1240