Verification
Read the exact build settings, the explorer verification status of every deployed address, and how to rebuild and compare one yourself.
Every deployed Hookr contract holds verified source on Blockscout, and every one is a full match: the explorer recompiles the source and gets the deployed bytes back, CBOR metadata trailer included. None is a partial match, which is what the explorer reports when the code agrees and the trailer does not. Sourcify holds the same 16 addresses on chain 4663 as exact matches, creation and runtime bytecode both (https://sourcify.dev/server/v2/contract/4663/<address>).
The build is Solidity v0.8.26+commit.8a97fa7a through via-IR, the optimizer at 200 runs, evm_version = cancun, bytecode_hash = ipfs, CBOR metadata appended. The contract repository's foundry.toml is that profile, with its ten remappings written out rather than detected, because a contract's metadata records them and the metadata is hashed into the trailer.
To rebuild and compare a contract against its address:
git submodule update --init --recursive
forge build
cast code <address> --rpc-url https://rpc.mainnet.chain.robinhood.comout/<file>.sol/<Contract>.json holds the runtime object to compare. For a contract that links libraries, write the addresses from the linked-library table into the placeholders that deployedBytecode.linkReferences locates; pinning the addresses in the compiler profile instead changes the metadata and the trailer stops matching. Zero the spans in deployedBytecode.immutableReferences on both sides, because those hold values fixed at construction rather than compiled bytes.
| Contract | Address | Runtime | Immutables | Rebuilt | Blockscout |
|---|---|---|---|---|---|
HookrModuleCatalogV1 | 0x6a3561d5B6305E2229F30EDF66702e8Bc4fA19D1 | 6,448 B | none | identical | verified, full match |
HookrStackRegistryV2 | 0x5b7f1A117A83aaac15B0698Aa4eB9D53fE5f5BA3 | 23,307 B | 9 slots | identical once masked | verified, full match |
HookrTreasuryForwarderV1 | 0x9BB7c01571ef6e59a8834A6a89A6b024822BAf6f | 3,272 B | 2 slots | identical once masked | verified, full match |
HookrNativeMechanicsCoordinatorLibV2 | 0xafC0a7656DF8B1aA5A173d04612a9661C4b9c7E2 | 3,713 B | 1 slot | identical once masked | verified, full match |
HookrMarketCoordinatorInitialBuyLibV4 | 0xE12f58f1662293B8b4fF3f0227384bD9D2a6e382 | 2,209 B | 1 slot | identical once masked | verified, full match |
HookrMarketCoordinatorTokenDeployerV3 | 0x7A2821F7Ea0e4d0C5a409D479cd457d5B34F9399 | 10,541 B | 1 slot | identical once masked | verified, full match |
HookrMarketCoordinatorV5 | 0x53A192A3fCeE94Da77916B461E0cCa2Dd6402442 | 22,865 B | 26 slots | identical once masked | verified, full match |
HookrSwapAccountingKernelV3 | 0x530523DEcC9523dDF8A87842fFBBD24a59C7E060 | 23,965 B | 19 slots | identical once masked | verified, full match |
HookrKernelRouterV3 | 0xf0E528c39f33F565876cbaa7e0DFaCa38Df966E9 | 10,178 B | 10 slots | identical once masked | verified, full match |
HookrKernelQuoterV1 | 0x5Ba8FBbB4aB20Ff6Daf0ecDEBe3784f869BcB1B5 | 5,412 B | 5 slots | identical once masked | verified, full match |
HookrNativeMechanicsBlockV2 | 0xD700492b504ba5A72D7de28dDe11Cd7985a7F1ae | 16,889 B | 12 slots | identical once masked | verified, full match |
HookrModularHookV6 | 0xb3cA29cF721380CEe8b8e4755F3865Ebc68Fe8cC | 8,474 B | 12 slots | identical once masked | verified, full match |
HookrMarketCoordinatorKernelReservationLibV1 | 0x8C2E208eDFf0eF7535B20AE8F13dfBF71133521d | 483 B | 1 slot | identical once masked | verified, full match |
HookrStatefulSettlementLibV1 | 0xde7Ae40c713D5C9EC2C8e2E28810C6C7Eb791706 | 2,715 B | 1 slot | identical once masked | verified, full match |
HookrModularCorrectionLibV2 | 0xd2832D5F64C7116bE2c7B32D8c06d60023b479D8 | 3,063 B | 1 slot | identical once masked | verified, full match |
HookrReleaseCreate2FactoryV1 | 0xBc54e888C1A5B71744B035DfeC5611B4DC69ccDe | 972 B | 2 slots | identical once masked | verified, full match |
The last four rows predate the rest and carry the metadata of a build that embeds the source text instead of its hash, so reproducing their trailers takes use_literal_content = true. Their code is identical either way. The single immutable in each of the three libraries is its own address, which is how a library refuses a direct call.