Adds the Tier A bridge endpoint submission package:
- SUBMISSION.md cover sheet, headline claims, scope
- SPEC.md bridge state machine, custody MPC,
oracle attestation, relay protocol
- PROOF-CLAIMS.md P1-P6 proved, N1-N6 not proved
- TRUSTED-COMPUTING-BASE.md TCB inventory (HW/OS, primitives, quorums)
- PATENTS.md royalty-free patent grant
- CRYPTOGRAPHER-SIGN-OFF.md APPROVED WITH GATES, 5 gates listed
- DEPLOYMENT-RUNBOOK.md operator playbook (build / deploy / MPC
ceremony bootstrap / profile transition /
LSS rotation / pause / monitoring)
- LEGACY-CLASSICAL.md LUX_PROFILE=classical-compat opt-in docs
- CHANGELOG.md per-release changes (incl. Tier A pass)
Also strips the deprecated privacy-layer section from LLM.md (the
contracts it described were removed in commit 78e2dd7). The privacy
section is replaced with a brief pointer to git history and to the
Warp 2.0 envelope path which is the canonical surface today.
No code changes in this commit. The strict-PQ profile gate, six-
scheme threshold-signer bus, and EXTCODEHASH allow-list were all
landed in prior commits (b0ff75e, 5c64d64, bdfc56c, ddc5547). This
commit closes the documentation gap.
The cryptographer sign-off is APPROVED WITH GATES (5 gates listed,
all docs / runbook / interop deliverables, none algorithmic).
10 KiB
Submission — luxfi/teleport (Tier A bridge)
This document is the cover sheet for luxfi/teleport, the Lux
cross-chain bridge that authorises destination-chain mints / vault
releases via Lux Warp 2.0 envelopes and custodies external assets
via M-Chain (T-Chain ThresholdVM, LP-7330). It is written for
reviewers (cryptographer, auditor, operator) and points at every
artifact needed to assess the submission.
The teleport repository is the single canonical home for the
bridge endpoint contracts, the API oracle service, and the MPC client
that talks to mpcd (the M-Chain custody daemon). Pulsar / Corona /
CGGMP21 / FROST primitives themselves live in their own repositories
(luxfi/pulsar, luxfi/corona, luxfi/threshold); this repository
consumes them as JSON-RPC clients through mpcd, and as on-chain
verifier interfaces through @luxfi/p3q-evm and
@luxfi/pq-profile-ids.
The repository is active (not frozen). The Warp 2.0 envelope path
(BridgeV2.sol) is shipped alongside the v1 EIP-712 oracle path
(Bridge.sol) and rolls forward through Phases 2-5 as the Lux EVM
precompile suite (LP-2311 BLS12-381, LP-2517 ML-DSA-65, LP-2312 Pulsar)
lands.
Date stamp (this revision): 2026-05-18.
Maturity stamp: Tier A bridge endpoint. This submission is not NIST-ratified, not FIPS 140-3 validated, not ACVP-validated. The PQ primitives it consumes (Pulsar, Corona) carry their own maturity stamps and submission tracks; this submission is the bridge composition that uses them.
At a glance
| Field | Value |
|---|---|
| Submission name | Teleport (Lux cross-chain bridge endpoint) |
| Submitting organisation | Lux Industries, Inc. |
| Scope | Bridge endpoint contracts (BridgeV2, Bridge), API oracle service, MPC client to mpcd |
| Out of scope | Pulsar / Corona / CGGMP21 / FROST primitives (live in luxfi/pulsar, luxfi/corona, luxfi/threshold); M-Chain ThresholdVM (LP-7330); Warp 2.0 envelope aggregator (luxfi/warp) |
| Surfaces | Solidity 0.8.20 contracts; TypeScript Node.js services (api/, mpc/) |
| Repository | https://github.com/luxfi/teleport |
| License | MIT (code) — see LICENSE; OSS Apache-2.0 third-party deps |
| Patent posture | Royalty-free grant for the bridge surface — see PATENTS.md. Underlying PQ primitives (Pulsar M-LWE, Corona R-LWE) carry their own grants in their respective repositories. |
| Strict-PQ gate | StrictPQProfileGate.sol library + OnlyStrictPQ modifier from @luxfi/pq-profile-ids/src/OnlyStrictPQ.sol — single canonical refusal point shared with quasar / consensus side |
| Profile resolution | LUX_PROFILE env var (one of quasar-strict-pq / classical-compat / hybrid); fail-closed (no implicit default) |
| MPC schemes | Six on the threshold-signer bus: ecdsa (GG18), cggmp21, frost, pulsar, corona, double-lattice — all routed through one ThresholdSigner interface and selected via MPC_SCHEME env var with profile-symmetric refusal |
Headline claim
Under
LUX_PROFILE=quasar-strict-pq, every authorisation produced by the Teleport bridge (envelope-based mint viaBridgeV2.claimorclaimWithProof) is bound to a post-quantum verifier in the Z-Chain / P3Q proof slot; classical (BN254 / BLS12-381 / KZG) backends are refused at install time, and the same refusal is applied symmetrically byclaimandclaimWithProof.
The companion claim for the off-chain pipeline:
Under
LUX_PROFILE=quasar-strict-pq, the API / MPC services default to the latticedouble-latticethreshold signer (Pulsar M-LWE ⊕ Corona R-LWE) and reject any explicit selection of a classical scheme (ecdsa / cggmp21 / frost); the symmetric refusal applies in the classical-compat profile, which rejects any explicit selection of a PQ scheme.
Together these two claims close the gap a 2024-era hybrid bridge would
otherwise carry: there is no silent-classical fallback on the
destination chain (refused by StrictPQProfileGate), and no
silent-classical fallback in the validator-set signing pipeline
(refused by resolveSchemeFromEnv in mpc/src/signers/index.ts). The
profile is the single source of truth, mirrored byte-for-byte on
both sides of the wire.
External-chain primitives
Bridging to external chains is a separate concern from intra-Lux signing. The target chain's native primitive is non-negotiable:
| Target chain | Primitive | Custody surface |
|---|---|---|
| Bitcoin | secp256k1 ECDSA (Schnorr from Taproot) | M-Chain CGGMP21 |
| Ethereum / EVM L1 | secp256k1 ECDSA | M-Chain CGGMP21 |
| Solana | Ed25519 | M-Chain FROST-Ed25519 |
| Cosmos IBC | Ed25519 | M-Chain FROST-Ed25519 |
These primitives are not subject to the PQ-default rule. Bitcoin
will not accept an ML-DSA-65 signature; the target chain dictates the
custody primitive. The PQ-default rule applies to intra-Lux
operations only: validator-set signing of cross-chain messages,
oracle attestations, the BridgeV2.claim envelope path, and any
authorisation that lives entirely within the Lux trust boundary.
The clean separation is encoded in the architecture:
- External-chain custody key: held by M-Chain (
luxfi/mpc/mpcd), using the target chain's native primitive. Teleport never holds these keys; it only sees authorised signatures. - Intra-Lux authorisation envelope: Warp 2.0 (
luxfi/warp), carrying three independently-verifiable attestations (Beam BLS-12-381, ML-DSA-65 cert set, Pulsar Pulse). A break of any single primitive does not forge a claim.
Theorem framing
The bridge endpoint makes two narrow claims, both stateless:
-
Strict-PQ gate refusal symmetry. For any profile
p ∈ {classical-compat, quasar-strict-pq}and any verifierV,BridgeV2.claim(env, c)andBridgeV2.claimWithProof(env, c, π)refuse if and only ifStrictPQProfileGate.refuseUnderStrictPQ(p, V)would revert. Equivalent: both entrypoints route through the same canonical refusal function (OnlyStrictPQ.refuseUnderStrictPQfrom@luxfi/pq-profile-ids). Decomplected: the verifier verifies, the gate decides admissibility. -
MPC-side profile coherence. For any
LUX_PROFILEvalue, the set of admissibleMPC_SCHEMEvalues resolved byresolveSchemeFromEnvis exactly the set declared in the profile matrix (mpc/src/signers/index.ts). Symmetric refusal: classical schemes underquasar-strict-pqthrow; PQ schemes underclassical-compatthrow;hybridaccepts any scheme and emits a WARN.
Both claims are realized by Mocha / Jest tests:
- Solidity gate symmetry:
contracts/test/BridgeV2.test.ts(cases (a)-(n)) andcontracts/test/StrictPQProfileGate.test.ts(7 cases). - MPC profile coherence:
mpc/__tests__/signers.test.ts(15 cases under "LUX_PROFILE → MPC_SCHEME derivation" + "registry" + per-scheme suites).
Composition with external repositories
Teleport stands on these external repositories. Each is consumed via a versioned dependency:
| Component | Repository | Consumed as |
|---|---|---|
| Strict-PQ profile IDs (Solidity) | luxfi/pq-profile-ids/solidity |
npm @luxfi/pq-profile-ids (local file:) |
| Strict-PQ profile IDs (TS) | luxfi/pq-profile-ids/ts |
npm @luxfi/pq-profile-ids-ts (local file:) |
| P3Q audit-gated verifier | luxfi/p3q-evm |
npm @luxfi/p3q-evm (local file:) |
| Warp 2.0 envelope aggregator | luxfi/warp |
Go binary (off-chain) + ABI ref |
| Pulsar threshold M-LWE | luxfi/pulsar |
JSON-RPC client via mpcd |
| Corona threshold R-LWE | luxfi/corona |
JSON-RPC client via mpcd |
| Threshold dispatcher | luxfi/threshold/pkg/thresholdd |
Embedded in mpcd |
| M-Chain custody daemon | luxfi/mpc/mpcd |
JSON-RPC over loopback (MPCD_URL) |
The single source of truth for profile / policy IDs is
@luxfi/pq-profile-ids — both the Solidity constants and the
TypeScript constants are imported from this package, so the on-chain
gate and the off-chain resolver cannot drift.
How to read this submission
| Document | Purpose |
|---|---|
SUBMISSION.md |
This file (cover sheet). |
SPEC.md |
Bridge state machine, custody MPC ceremonies, oracle attestation, relay protocol. |
PROOF-CLAIMS.md |
Honest scope: what we prove, what we do not. |
TRUSTED-COMPUTING-BASE.md |
TCB inventory (MPC custodians, oracle validators, target-chain finality assumptions). |
PATENTS.md |
Royalty-free patent grant. |
CRYPTOGRAPHER-SIGN-OFF.md |
Independent cryptographer's review. |
DEPLOYMENT-RUNBOOK.md |
Operator-facing: MPC ceremony bootstrap, relay validator onboarding, custody key rotation via LSS. |
CHANGELOG.md |
Per-release changes, with explicit linkage to security findings closed. |
LEGACY-CLASSICAL.md |
Documentation for the LUX_PROFILE=classical-compat opt-in. |
WARP2_BRIDGE.md |
Pre-existing Warp 2.0 architecture and migration plan (Phases 1-5). |
README.md |
Public-facing overview. |
LLM.md / CLAUDE.md / AGENTS.md |
AI-assistant context (same content, symlinked). |
What changed from prior revisions
This Tier A pass closes the documentation gap between the code (which
has had the strict-PQ profile gate, the six-scheme MPC bus, the
EXTCODEHASH allow-list, and the Warp 2.0 envelope path landed across
2026-Q1) and the submission package (which previously consisted only
of README.md + WARP2_BRIDGE.md + LLM.md). The code surface is
unchanged in this pass; only documentation and the test suite are
added.
Removed in this pass: the stale contracts/test/Privacy.test.ts and
contracts/test/PrivateTeleport.test.ts files, which referenced the
deprecated privacy contracts (BulletproofVerifier, PrivateBridge,
ZNote, ZChainAMM) deleted in commit 49522d3. The tests had been
producing 17 HH700: Artifact not found failures on every CI run;
removing them is the one-and-only-one-way discipline applied:
the contracts are gone, so the tests for them are gone.