Deployment status oracle

DeploymentStatusOracle is a deployment-progress helper. It does not measure protocol readiness or initialization success. It only reports which configured deployment-step addresses currently contain runtime bytecode.

The canonical mainnet and Sepolia manifests list this contract directly, so operators and user-interface developers need a precise explanation of the returned bitmask and the built-in 256-step ceiling.

What getDeploymentMask() returns

The constructor stores one ordered address[] deploymentAddresses. getDeploymentMask() loops over that array and checks deploymentAddresses[index].code.length. When code exists, the oracle sets bit index in the returned uint256.

This is a code-presence bitmap. A set bit means code exists at the configured address. A clear bit means the address currently has no code. The oracle does not verify constructor arguments, ownership wiring, or post-deployment setup.

Deployment status maskEach configured deployment step uses one bit position in the returned word. The oracle sets that bit only if the step's address currently contains code.

deployedMask = i = 0 codePresent ( i ) 2i

Each configured deployment step contributes one bit position to the returned word.

How bits map to deployment steps

Bit positions are array positions. Bit 0 maps to the first constructor address, bit 1 to the second, and so on. Off-chain decoding must use the same ordered list that seeded the oracle.

The constructor emits DeploymentAddressesSet(address[] deploymentAddresses) with that exact ordered list. It is the on-chain source for recovering a particular oracle instance's bit mapping. The manifest below describes the current planned deployment and must match the constructor event for that instance.

The current user interface (UI) and deployment helpers derive the constructor list from deploymentSteps with one exception: the oracle does not include its own address in its constructor array. The manifest still lists deploymentStatusOracle as a deployment step, but the UI tracks that step out of band and starts consuming mask bits from the remaining addresses.

The tables below render the complete bit mappings directly from the canonical mainnet deployment manifest and Sepolia deployment manifest, excluding deploymentStatusOracle. Each manifest's ordered deploymentSteps array is the canonical mapping for that network.

Bit Mainnet step id Label Status in entered mask
Loading the canonical manifest…
Bit Sepolia step id Label
Loading the canonical manifest…

If the manifest's constructor order changes, the rendered bit meanings change with it; this page does not maintain a second list.

The manifest's derivedContracts list is separate. Those addresses are not part of the deployment-status mask unless they also appear in the constructor array.

Decode a deployment mask
Decoded statusLoading the canonical mapping…

The decoder maps each set bit to the constructor address at the same index.

Why the cap is 256 steps

The constructor requires deploymentAddresses.length <= uint256(type(uint8).max) + 1, which is 256. The limit exists because the result is a single uint256, and each tracked step consumes one bit.

Indices 0 through 255 are supported. A deployment process with more than 256 tracked addresses must split status across multiple masks or use a different representation.

Interpretation and verification boundaries

Evidence What it proves What it does not prove
Bit set Runtime bytecode exists at the configured address. Correct bytecode, constructor values, wiring, permissions, or operational readiness.
Bit clear No runtime bytecode was observed at that address by this call. Whether the address is intentionally empty or the manifest is wrong.
Manifest match The decoder used the intended ordered address list for the network. That deployed code matches the release or that remote procedure call (RPC) responses are honest.
Full deployment verification Code hashes, required wiring, permissions, and manifest provenance can be checked together. Economic safety or future operational liveness.

This page documents the deployment-status bitmask only; it does not provide complete bytecode, wiring, permission, or manifest verification. The getDeploymentMask() return type is uint256; the constructor reverts when more than 256 addresses are supplied.

Static decoder test vectors

Mask Meaning
0x0 No tracked constructor address contains runtime code.
0x1 Only constructor address index 0 is present.
0x5 Constructor address indices 0 and 2 are present.
2^255 Only the highest supported bit, index 255, is present.