Files
zeekay 65d4e361b6 submission: Tier A documentation package
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).
2026-05-19 08:40:58 -07:00

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 via BridgeV2.claim or claimWithProof) 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 by claim and claimWithProof.

The companion claim for the off-chain pipeline:

Under LUX_PROFILE=quasar-strict-pq, the API / MPC services default to the lattice double-lattice threshold 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:

  1. Strict-PQ gate refusal symmetry. For any profile p ∈ {classical-compat, quasar-strict-pq} and any verifier V, BridgeV2.claim(env, c) and BridgeV2.claimWithProof(env, c, π) refuse if and only if StrictPQProfileGate.refuseUnderStrictPQ(p, V) would revert. Equivalent: both entrypoints route through the same canonical refusal function (OnlyStrictPQ.refuseUnderStrictPQ from @luxfi/pq-profile-ids). Decomplected: the verifier verifies, the gate decides admissibility.

  2. MPC-side profile coherence. For any LUX_PROFILE value, the set of admissible MPC_SCHEME values resolved by resolveSchemeFromEnv is exactly the set declared in the profile matrix (mpc/src/signers/index.ts). Symmetric refusal: classical schemes under quasar-strict-pq throw; PQ schemes under classical-compat throw; hybrid accepts 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)) and contracts/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.