Final. This LP is normative. Any future schema ID, TypeKind byte,
ShapeKind byte, or precompile slot allocation MUST be added here first;
the consuming LP MUST reference (not duplicate) the assignment.
Activated at the genesis of the new final Lux network:
2025-12-25 16:20 Pacific (unix 1766708400). LP-300 itself is a
meta-registry — it ships no wire change, only authoritative
documentation. Final from genesis.
The LP corpus allocates schema IDs, TypeKind bytes, ShapeKind bytes,
and EVM precompile slots in fragments. LP-186 claims 0xC0..0xCB for
the 12 chains-VMs. LP-201 claims 0xD0..0xDF for the 16 P2P stream
types. LP-208 originally claimed 0xF0..0xFF for DAG mempool, then
honestly reclaimed 0xE0..0xE1 after the LP-218 rollup range
appeared. LP-211 claims 0xE2..0xE7 for cross-shard 2PC. LP-218
shipped Draft claiming 0xE0..0xEF for rollup envelopes — which
overlaps LP-208 *and* LP-211. LP-214 light client claims 0xF0..0xF2.
LP-219 reuses LP-211's 0xE2..0xE7 at the rollup tier. LP-0120 owns
the PQ precompile range 0x012201..0x012208 and LP-218/LP-220 attach
P3Q wrappers at three of those slots. LP-078 owns the broad EVM
precompile suite (0x0100, 0x0200..xxx, 0x0300..xx, 0x0500..xx,
0x0700, 0x0800..xx, 0x0900..xx, 0x9010..0x9080 DEX, 0x9200..04
privacy, 0xB002 KZG). LP-0011 owns federation registry slots
0x011001 and 0x011002.
This LP collapses every allocation into one master table. The
allocation namespaces are orthogonal: a TypeKind byte does not collide
with a precompile slot because they live in different address spaces;
the master table is partitioned by namespace. Conflicts inside a
namespace are resolved here — LP-300 wins over any consuming LP that
disagrees. The single most consequential conflict (LP-208 vs LP-211
vs LP-218 all claiming bytes inside 0xE0..0xEF) is resolved per the
LP-214 canonical handoff: LP-208 takes 0xE0..0xE1, LP-211 takes
0xE2..0xE7, LP-218 takes 0xE8..0xEF (shifted), LP-214 takes
0xF0..0xF2.
Four orthogonal allocation namespaces. Each row of the master table
lives in exactly one namespace; cross-namespace collisions are
impossible by construction.
LP-300 is normative for namespaces 1, 2, and 3. Namespace 4 is owned
by the genesis / numbering LPs and is referenced here only to disclaim
overlap.
The terms "schema ID" and "TypeKind byte" are used interchangeably
throughout the LP corpus; they name the same byte. "Kind" alone is
ambiguous and avoided in LP-300.
One row per allocation. The "Status" column reflects the consuming
LP's status; LP-300 itself is Final and pins the assignment.
QuasarCert (consensus wire) | Final | 2026-06-03 |QBlock (consensus wire) | Final | 2026-06-03 |WitnessProof (consensus wire) | Final | 2026-06-03 |MagnetarAggregateCert (consensus wire) | Final | 2026-06-03 |PolarisLegs (consensus wire) | Final | 2026-06-03 |QuasarSig (consensus wire) | Final | 2026-06-03 |EpochBundle (consensus wire) | Final | 2026-06-03 |PrismCut (consensus wire) | Final | 2026-06-03 |StakeWeightedCut (consensus wire) | Final | 2026-06-03 |TxAuthEnvelope (consensus wire) | Final | 2026-06-03 |PQPermit (consensus wire) | Final | 2026-06-03 |DAGVertex (consensus wire) | Final | 2026-06-03 |PolicyCert (consensus wire) | Final | 2026-06-03 |aivm chains-VM wire | Draft | 2026-06-03 |bridgevm chains-VM wire | Draft | 2026-06-03 |dexvm chains-VM wire | Draft | 2026-06-03 |evm chains-VM wire (chains-side glue) | Draft | 2026-06-03 |graphvm chains-VM wire | Draft | 2026-06-03 |identityvm chains-VM wire | Draft | 2026-06-03 |keyvm chains-VM wire | Draft | 2026-06-03 |oraclevm chains-VM wire | Draft | 2026-06-03 |quantumvm chains-VM wire | Draft | 2026-06-03 |relayvm chains-VM wire | Draft | 2026-06-03 |thresholdvm chains-VM wire | Draft | 2026-06-03 |zkvm chains-VM wire | Draft | 2026-06-03 |ConsensusVote (P2P stream type) | Draft | 2026-06-03 |ConsensusProposal (P2P stream type) | Draft | 2026-06-03 |ConsensusCert (P2P stream type — mirrors 0x01 QuasarCert) | Draft | 2026-06-03 |BlockRequest (P2P stream type) | Draft | 2026-06-03 |BlockResponse (P2P stream type) | Draft | 2026-06-03 |TxGossip (P2P stream type) | Draft | 2026-06-03 |TxRequest (P2P stream type) | Draft | 2026-06-03 |TxResponse (P2P stream type) | Draft | 2026-06-03 |FilterAdvertise (P2P bloom-filter gossip) | Draft | 2026-06-03 |SnapshotAdvertise (P2P state-sync gossip) | Draft | 2026-06-03 |ChunkRequest (P2P content-addressed fetch) | Draft | 2026-06-03 |ChunkResponse (P2P content-addressed fetch) | Draft | 2026-06-03 |PeerInfo (P2P signed peer record) | Draft | 2026-06-03 |DHTFindNode (Kademlia) | Draft | 2026-06-03 |DHTFindValue (Kademlia) | Draft | 2026-06-03 |DHTStore (Kademlia) | Draft | 2026-06-03 |DAGHeader (DAG mempool) — reclaimed from prior 0xF0 claim | Draft | 2026-06-03 |DAGBody (DAG mempool) — reclaimed from prior 0xF1 claim | Draft | 2026-06-03 |CrossShardTxGroup — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |CrossShardDispatch — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |CrossShardPrepareAck — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |CrossShardRefuseAck — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |CrossShardCommitNotify — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |CrossShardAbortNotify — also reused by LP-219 at rollup tier | Draft | 2026-06-03 |RollupBatchTx (Z-Chain rollup substrate) — shifted from prior 0xE0 claim | Draft | 2026-06-03 |RollupChallengeTx — shifted from prior 0xE1 claim | Draft | 2026-06-03 |RollupExitTx — shifted from prior 0xE2 claim | Draft | 2026-06-03 |RollupGenesisTx — shifted from prior 0xE3 claim | Draft | 2026-06-03 |RollupAggregateBatch — LP-219 TxKind 0x44 lives in this envelope | Draft | 2026-06-03 |LightClientBlockHeaderRequest | Draft | 2026-06-03 |LightClientStateProofRequest | Draft | 2026-06-03 |LightClientCertProof | Draft | 2026-06-03 |The ShapeKind byte is the discriminator at byte 1 of the envelope,
namespaced under each TypeKind. LP-300 records only the cross-LP
ShapeKinds that are visible at the consensus/wire boundary. Per-VM
TxKind tables (e.g., dexvm OrderTx / CancelTx / SwapTx) are
internal to the owning chains-VM and are documented in LP-186 plus
the per-VM wire files; they are NOT re-listed here.
RollupBatchTx body kind | Draft |RollupChallengeTx body kind | Draft |RollupExitTx body kind | Draft |RollupGenesisTx body kind | Draft |RollupAggregateBatch body kind (cross-rollup atomic) | Draft |LightClientBlockHeaderRequest body kind | Draft |LightClientStateProofRequest body kind | Draft |LightClientCertProof body kind | Draft |ShapeKind values under TypeKinds 0xC0..0xCB (chains-VM) are
delegated to LP-186 and the owning chains-VM. ShapeKind values under
TypeKinds 0xD0..0xDF (P2P) are degenerate — each P2P TypeKind has
exactly one shape — so no separate ShapeKind table is needed there.
EVM precompiles live in three disjoint address bands:
0x000B..0x0FFF — Ethereum-compatible / Lux core (LP-078 owns this band)0x011xxx — Federation / governance slots (LP-0011 owns this band)0x012xxx — Post-quantum cryptography slots (LP-0120 owns this band)0x02xxxxxx... — Lux EVM-style stateful precompile range (LP-3520 / LP-078)0x6010..0x9FFF — Application-layer precompiles (DEX, AI, etc.)0xB000..0xBFFF — Blob / KZG precompiles0x020000+ — Reserved for future precompile blocksLP-300 catalogs every currently-allocated slot below.
FederationRegistry resolver | Brand sovereignty discovery (LP-0010 family) | Draft |BrandConfigStore | Append-only commit log for federation records | Draft |This is the canonical PQ precompile registry. LP-218 / LP-220 attach
the unified P3Q verifier family at the single slot 0x012205
(kind-byte dispatch: 0x01 Pulsar, 0x02 Corona, 0x03 Magnetar).
The raw primitive slots 0x012204, 0x012206, 0x012207 remain LP-0120
property for non-rollup-batch use. LP-221 owns the STARK-FRI verifier
at 0x012220.
0x01 Pulsar / 0x02 Corona / 0x03 Magnetar) — one slot, one ABI, one audit surface | Draft |LP-300 is the single source of truth. The following policy governs all
future allocations and resolves all existing conflicts.
1. The proposer opens a PR against LP-300 listing the requested
slot(s), the consuming LP number, and a one-line purpose.
2. The PR is merged BEFORE the consuming LP can be promoted past
"Draft" status. A consuming LP at "Final" without a matching
LP-300 row is itself in violation.
3. The consuming LP's "Wire schemas" or "Precompile slot" section
references LP-300 by row; it does not re-state the allocation.
If two LPs claim overlapping ranges:
1. The LP-300 maintainer arbitrates. The default rule: the
chronologically earlier "Final" claim wins; the later claim
relocates to the next free range.
2. The losing LP is amended to point at its new range, and an
"Activation marker" note is added to LP-300 stating "Was
<old range>; moved to <new range> per LP-300 §<section>".
3. Pre-activation (before unix 1766708400), reshuffles are free
because no production wire bytes have shipped. Post-activation,
reshuffles require a network upgrade.
LP-300 resolves three pre-existing conflicts in the 0xE0..0xFF
band. All three resolutions land via the canonical handoff
recorded in LP-214 §"Wire schemas".
0xF0..0xFF (DAGHeader at 0xF0, DAGBody at 0xF1); LP-214 also claimed 0xF0..0xF2 | LP-208 → 0xE0..0xE1; LP-214 keeps 0xF0..0xF2 | Yes — LP-208 §"Schema ID allocation" |0xE0..0xEF (rollup envelopes at 0xE0/0xE1/0xE2/0xE3); LP-211 also claimed 0xE2..0xE7 | LP-218 → 0xE8..0xEF; LP-211 keeps 0xE2..0xE7; LP-219 keeps its reuse of 0xE2..0xE7 at rollup tier | Yes — LP-218 §"Wire schemas" |0xE2..0xE7 | LP-211 is the canonical owner of 0xE2..0xE7; LP-219's reuse is namespaced by ShapeKind (TxKind 0x44) and treated as a ShapeKind-level extension, not a TypeKind-level reclamation | Yes — LP-219 §"Schema-ID allocation (no collision)" |When an allocation is marked Deprecated, the slot is NOT immediately
reusable. A one-year cooldown applies before re-allocation, to give
node operators and indexers time to drop the old code paths.
The currently-deprecated rows (LP-078 ECIES 0x9201, AES 0x9210,
ChaCha20-Poly1305 0x9211; LP-3520 stateful ML-DSA 0x0200..0006
and SLH-DSA 0x0200..0007 and Corona 0x0200..000B) entered
deprecation on 2026-05-18 per AUDIT-2026-05-18.md and become
re-allocatable on 2027-05-18.
Every consuming LP's "Wire schemas" / "Schema IDs" / "Precompile
slot" section is now informative-only. The canonical form is:
This LP allocates the following schema IDs (registered in LP-300):
- 0xD0 ConsensusVote
- 0xD1 ConsensusProposal
- ...
For the master allocation map see LP-300 §Master Table.
LPs MUST NOT duplicate the master table; they reference it. A
consuming LP that adds a new ID MUST amend LP-300 in the same PR.
These ranges are deliberately held aside. Allocate only via an
LP-300 amendment.
0x00 — null/illegal envelope; never allocate0x0E..0x0F — consensus-wire extensions (LP-182's reserve)0x10..0xBF — broad protocol-level future use; the largest openblock in the TypeKind space. Likely landing zones: future
chain-internal schemas analogous to LP-182, future P2P transport
primitives analogous to LP-201, future signed-tx envelope
variants.
0xCC..0xCF — chains-VM growth (LP-186's reserve)0xED..0xEF — rollup-VM growth (LP-218's reserve)0xF3..0xFF — framing future0x0010..0x00FF — Ethereum precompile expansion (held by Ethereum, do not allocate)0x012209..0x0122FF — PQ growth0x013000..0x01FFFF — future PQ extensions0x020000..0x02FFFF — future stateful precompile blocks (per-VM clusters)Each consuming LP gets a one-line summary. The full allocation lives
in §Master Table.
Handshake 0x01 through StateSync 0x50) — the underlying wire protocol; the TypeKind discriminator builds on this | TypeKind / framing |0x012204 (raw primitive; LP-218 wraps as P3Q-Pulsar at 0x012205) | Precompile |0x0300..01 | Precompile |0x3213 | Precompile |0x012207 (raw primitive; LP-220 wraps as P3Q-Magnetar at same slot) | Precompile |0x01..0x0D (QuasarCert through PolicyCert) | TypeKind |0xC0..0xCB (12 VMs) plus their per-VM ShapeKind tables (delegated) | TypeKind + ShapeKind |0xD0..0xDF (16 message types) | TypeKind |0xE0..0xE1 (DAGHeader, DAGBody) — reclaimed from prior 0xF0/0xF1 claim | TypeKind |0xE2..0xE7 (6 messages) | TypeKind |0xF0..0xF2 (3 messages) plus ShapeKinds 0x50..0x52 | TypeKind + ShapeKind |0xE8..0xEF (shifted from 0xE0..0xE3); P3Q precompile wrapper at 0x012205 | TypeKind + ShapeKind + Precompile |0xE2..0xE7 at the rollup tier (ShapeKind-level extension, TxKind 0x44 inside the LP-218 rollup envelope) | ShapeKind |0x02, 0x03) on the unified P3Q slot 0x012205 (no separate wrapper slots — earlier draft's 0x012206/0x012207 claim was vacated) | Precompile |0x011001 (resolver) and 0x011002 (store) | Precompile |0x012201..0x012208 (canonical PQ slot owner) | Precompile |0x0200..0001..000D | Precompile |0x012220 (Plonky3 PQ-only fork); relocated from 0x012205 on 2026-06-03 per LP-218 §"Slot history: STARK-FRI rename". Crypto-migration tracker numbers (LP-4800 / LP-4820) refer to the same surface for legacy paperwork only. | Precompile |0x012204) + Corona (0x012206) | (consumes only) |0x012204) + Corona (0x012206) + Magnetar (0x012207) | (consumes only) |0x2222 | Precompile |LP-300 does NOT normalize:
1 mainnet, 2 testnet, 3 local, 1337 dev) — owned by LP-019 / LP-09996369, Hanzo EVM 36963, Zoo EVM 200200, Pars EVM 494949, SPC EVM 36911, etc.) — owned by LP-134 plus per-brand chain.yamlThese live in their own LPs because they are content-addressed
(derived from genesis blobs), not statically allocated. A future
LP-301 could collapse them into a sibling registry if a single
source of truth becomes useful; today the per-LP ownership is
correct.
LP-300 itself is Final from genesis (unix 1766708400,
2025-12-25T16:20:00-08:00) because it is a meta-registry, not a wire
change. The first time the consuming LPs (LP-208, LP-211, LP-214,
LP-218, LP-219, LP-220) cross activation in production, LP-300 is
the binding map. Any disagreement between this LP and a consuming LP
is resolved in favour of LP-300; the consuming LP must be amended in
a follow-up PR.
~/work/lux/standard/schemaregistry/ — Go package; registry.Validate() is the runtime conflict check.bytes live in the layering)
EVM-internal, chains-VM)
Cross-LP TypeKind allocations
precompile sweep