pragma solidity ^0.8.13; contract CodeManifestRegistry { mapping(bytes32 => bytes32) private _manifests; event Registered(bytes32 indexed codeHash, bytes32 manifestRoot); function register(bytes32 manifestRoot) external { bytes32 codeHash = msg.sender.codehash; require(codeHash != bytes32(0), "EOA"); bytes32 existing = _manifests[codeHash]; require(existing == bytes32(0) || existing == manifestRoot, "exists"); _manifests[codeHash] = manifestRoot; emit Registered(codeHash, manifestRoot); } function lookup(bytes32 codeHash) external view returns (bytes32) { return _manifests[codeHash]; } }