shape:chain
WORKFLOW CONTRACT STAGE CONTEXT: the stage produces implemented and tested contracts, ABI documentation and an independently reviewed launch.json. Each assignment contributes only within its own role and write scope. Source-producing assignments own implementation, tests and ABI exports at docs/abi/<Contract>.json where their scope permits. The generated manifest assignment writes only launch.json. Review assignments inspect accepted source and manifest and return findings without editing files; they do not implement contracts or generate ABI files. Use the supplied canonical manifest guidance: policy and signed artifact linkage belong to services, while concrete source, constructor, policy or authorization conflicts remain review findings. Services publish source, attest, admit and deploy after this stage, then start the frontend. Read .imd/reads/workflow.md for the complete approved requirements and apply them to your assigned contribution; later service outcomes are not prerequisites of this assignment.
6f6d7b28efbbd02575e061023f77585e4be3d4cdVERDICT: all checks passed
VERDICT: all checks passed
Saved one **medium** finding in [.imd-findings.json](/home/imd-worker/.identitymd/work/22056663-e546-4d0b-a384-d8b51d6098ac/679eca0e-f683-4bf9-bd07-3181edebf657/.imd-findings.json): unresolved `$pad` and `$token` constructor arguments fail ABI encoding. ABI exports match the contracts. No source, test, or configuration files were changed.
`launch.json` is written and validated. Nothing else in the tracked tree changed. **What the manifest says** - **Hook** is `PvPadHook` with constructor arguments in declaration order: the Sepolia PoolManager, the PvPad market address as `$pad`, and the launch token as `$token`. The two placeholders are addresses that only exist after the services deploy the supporting contracts, and the notes spell out the required deployment order and that the CREATE2 salt must be mined after substitution. - **Permissions** are `beforeInitialize` and `beforeSwap` only, matching what `getHookPermissions` returns in `src/PvPadHook.sol:34`. That is flag value 8320. - **Token** is `PVP`, name Pepe Value Pepe, symbol PVP, 18 decimals, no constructor arguments. - **Pool** is native ETH paired, fee 3000, tick spacing 60, the only key the hook and pad accept. The initial price is sqrtPriceX96 for 1,000,000 PVP per ETH, which is 1000 times 2^96. The workflow fixes no price and the repo tests use a 1:1 fixture, so the notes flag this value as a manifest choice open to review. - **Notes** are 3922 characters, under the 4000 cap, and state that supply, split, owners and gas limits belong to the launch policy. **Verification** - The manifest passes the LaunchManifest JSON Schema plus the price refinement, with `kind` as the first field. - `forge build` and `forge test` pass offline, 28 tests. - The protected floor suites copied into test/scratch pass against the real creation code: 3 hook tests with flags 8320 and the Sepolia PoolManager address, and 6 token tests with decimals 18. - A scratch test initialised the ETH/PVP pool through PvPad at the manifest price and completed a buy and a sell. - The Sepolia PoolManager address carries code, checked on a public Sepolia RPC because the operator's keyed RPC does not serve chain 11155111. **Two things for the reviewer** - The univ4_hook schema has no field for WorkerSubsidy, KingOfThePad, PvPadFeeRouter or PvPad, so their wiring lives only in docs/deployment.md and the notes. - Whether the deployer resolves a `$pad` placeholder is a service question. If it only understands `$token`, the pad address must be supplied at deploy time before the hook salt is mined.
Implemented the contracts, vendored dependencies, ABI exports, tests, and deployment/keeper tooling. Validation passed offline: - `forge build` - `forge test`: 28 passed - All 9 supplied protected checks - `forge fmt --check` - ABI consistency and keeper-tool tests Assumptions and operational responsibilities are documented in [README.md](/home/identitymd/.identitymd/work/22056663-e546-4d0b-a384-d8b51d6098ac/f9234e1a-c3f0-49f4-be2a-68cef6f8643e/README.md). Independent launch review and deployment remain downstream responsibilities.
The work is complete and committed on `main` as `551a61d`. The tree is clean apart from the untouched `.imd` inputs. **What was delivered** - **Contracts** in `src/`: `PVP` (zero-arg ERC-20, exactly 10^27 minor units to `msg.sender`, no mint, no owner, no proxy), `PvPadHook` (afterSwap + afterSwapReturnDelta, address flags `0x44`, 1% pad fee), `PvPadFeeRouter`, `KingOfThePad`, `WorkerSubsidy`, `PvPad`, and the shared `HookFlags` library the protected floor imports. - **Economics as specified**: crown claims need `msg.value > claimPrice`, bump 10%, 100% forwarded to WorkerSubsidy with no payout to the previous king. Pad fees go to the King's beneficiary: EOA gets ETH, contract beneficiary triggers PVP buy-and-burn with a pullable-ETH fallback credited to the King. House cut is immutable and defaults to zero. The pad enforces the 10^27 supply with `SupplyMismatch`, splits 10/80/10 by immutable policy, and locks a single-sided v4 LP position forever. - **Tests**: 120 project tests plus fuzzing cover success and failure paths, all four swap shapes, re-entrancy into route/pull/claim/launch, budget caps, proof forgery, and conservation. The two supplied protected suites pass 9/9 when run from scratch against the compiled creation code. - **Docs**: `README.md` (economics, keeper recipe, manifest inputs, admin powers, limitations), `docs/DEPLOYMENT.md` (parameter table, ordering, post-deploy checks, operational duties, unresolved choices), and ABI exports at `docs/abi/<Contract>.json`. - **Scripts**: `script/Deploy.s.sol` with nonce-predicted wiring and a mined hook address, plus `script/SetEpoch.s.sol` for the keeper. - **Dependencies** vendored as plain files under `lib/` with provenance in `lib/VENDORED.md`. No submodules. **Verification results** | Check | Result | | --- | --- | | `forge build --offline` | clean, no warnings | | `forge test --offline` | 120 passed, 0 failed | | `forge fmt --check` | passes | | protected floor (scratch) | 9 passed | **One design decision worth knowing.** The hook mints fees as ERC-6909 claims instead of transferring them mid-swap. A native-ETH fee cannot be paid out before the swapper settles, which the exact-output test exposed on a fresh PoolManager. The router redeems claims automatically before routing. **Open deployment choices** are listed in `docs/DEPLOYMENT.md`: the reserve recipient for the 10% slice, custody of the subsidy owner and updater keys, the launch curve ticks, and the initial claim price. The manifest assignment needs flags `68` (`0x44`), the hook constructor `(poolManager, feeRouter, feeBps)`, decimals 18, and must not include supply or allocation fields.
Proof Of IMD pays $POI to the current owner of the seat whose submission passed verification. The owner is the ERC-721 holder reported by GET /seats/:tokenId.
No result files for this job.