The chain registry and what a short-id is
The registry is the table namedbdn.chains on the Multichain screen. It
is read by chains.list, and each row carries:
A short-id is a one-byte routing prefix. It is the only chain
discriminator that travels with a transaction through fan-out. Relays and
mod_bdn route and de-duplicate on it rather than on the namespace string,
so the prefix stays cheap to parse on the hot path. Solana is 0x01:
dedup_key is per chain as well — for Solana it is the first 64 bytes
of the signature. De-duplication happens within a chain’s namespace, so two
chains can never collide on a key.
Per-chain MoQT namespaces
Each registered chain gets its own namespace, and the transaction track lives under it asbdn/<chain>/tx. Solana occupies the unprefixed
bdn/tx, which is why the existing Solana wire model (sol/feed/mainnet
tracks, /bdn/submit, /tpu) reads the way it does; other chains are
namespaced explicitly, for example bdn/eth/tx.
Namespacing per chain gives you track isolation: a subscriber on one
chain’s transaction track never receives another chain’s traffic, and
relay-token namespace scope is granted per chain. A token scoped to
bdn/tx does not grant publish or subscribe on bdn/eth/tx. See
Authentication for how namespace claims are
carried in a relay token.
The console summarises these two primitives under Per-chain
capabilities, because they are what mod_bdn applies to every fanned-out
transaction regardless of chain:
- Short-id chain registry — the one-byte routing prefix on every fanned-out tx.
- Per-chain MoQT namespaces —
bdn/<chain>/txtrack isolation.
Registering a chain
Registration adds a row tobdn.chains. It binds a short-id to a
namespace:
short_id— the byte that will be stamped into thechainfield of the track header for this chain. It must not already be taken by another row in the registry; the registry is a bijection between short-id and namespace.ns— the MoQT namespace whosetxtrack will carry this chain’s transactions.
chains.list, with its short-id and namespace visible — but
it does not by itself make the chain usable by your organisation. On the
Multichain screen, a registered-but-not-yet-enabled chain renders dimmed
with a Not enabled pill.
Enabling a chain for an organisation
Enablement is a separate, per-organisation step from registration. Thestatus field that chains.list returns is scoped to the calling org:
live— the chain is enabled for this organisation. The row renders at full opacity with a live Live pill, and it counts toward theN livebadge in the page header.- anything else — the chain is registered in
bdn.chainsbut not enabled for this organisation, and the console labels it Not enabled.
Submitting on a non-Solana chain
The submit path does not change shape when you move off Solana. What changes is which namespace you address and which short-id the header carries:- Hold a relay token scoped to that chain’s namespace. A token whose
nsclaim coversbdn/txis a Solana token. Forbdn/eth/txyou need a token minted with that namespace in scope. - Publish to the chain’s
txtrack under its namespace —bdn/<chain>/tx— rather than to Solana’sbdn/tx. - Stamp the registered short-id in the
chainfield of the track header.mod_bdnroutes fan-out on this byte, and de-duplicates the transaction using that chain’sdedup_keyrule within that chain’s namespace.
/tpu
is Solana’s leader-facing submission surface and the sol/feed/mainnet
tracks are Solana’s feed; neither has a counterpart on another namespace
simply because that namespace is registered. Use the chain’s own
bdn/<chain>/tx track as the submit surface.
If a chain shows Not enabled for your organisation, publishes into its
namespace are outside your relay token’s namespace scope — enable the chain
for the org first.
Related
- Authentication — relay tokens and namespace scope
- Telemetry — metrics and traces emitted per namespace