LPsLux Proposals
Multi-Party Computation
LP-6000

B-Chain - Core Bridge Specification

Final

Core specification for the B-Chain (Bridge Chain), Lux Network's dedicated cross-chain bridge infrastructure

Category
Core
Created
2025-12-11

Implementation status (code-audited 2026-07-03): PARTIAL bridgevm VMID + fee floor gate confirmed; custody verify is CMP ECDSA (chains/bridgevm/block.go:241) but keygen is a BLS trusted dealer (mpc.go:60,72-73) — no DKG, no PQ dual-signature; fee is a separate field (not deducted from bridged amount); DefaultBridgeFeeRate 100bps (quote.go:92).

Normative topology + fee model: LP-0130. B-Chain fees are deducted from the bridged amount (LP-0130 §8); relayer / attestor splits settle to X via the epoch fee root. B does not hold canonical UTXO asset supply — locked/released assets escrow on X.

Canonical B-Chain spec (per LP-134). B-Chain (bridgevm) is the single canonical chain for cross-chain bridging and teleport / cross-chain messaging — teleport is bridgevm; there is no separate teleportvm and no T-Chain. This LP composes two other chains: threshold custody signing runs on M-Chain (LP-7100), and FHE-private transfers compose F-Chain (LP-8200, see LP-068). Anywhere older text says "T-Chain custody/threshold", read M-Chain. The teleport-protocol LPs (LP-6016, LP-6021, LP-9110, LP-6329, LP-6332) are superseded by this LP; see the map LP-7050.

Abstract

LP-6000 specifies the B-Chain (Bridge Chain), Lux Network's dedicated blockchain for secure cross-chain asset transfers. The B-Chain implements MPC-based custody using CGGMP21 threshold signatures extended with Pulsar for quantum safety.

Motivation

A dedicated bridge chain provides:

  1. Security: Unified MPC custody for all bridges
  2. Quantum Safety: Dual-signature with classical + PQ
  3. Centralized Management: Single bridge infrastructure
  4. Resource Isolation: Bridge operations isolated from other chains

Specification

Chain Parameters

ParameterValue
Chain IDB
VM IDbridgevm
VM Namebridgevm
Block Time2 seconds
ConsensusQuasar

Implementation

Go Package: github.com/luxfi/node/vms/bridgevm

import (
    bvm "github.com/luxfi/node/vms/bridgevm"
    "github.com/luxfi/node/utils/constants"
)

// VM ID constant
var BridgeVMID = constants.BridgeVMID // ids.ID{'b', 'r', 'i', 'd', 'g', 'e', 'v', 'm'}

// Create B-Chain VM
factory := &bvm.Factory{}
vm, err := factory.New(logger)

Directory Structure

node/vms/bridgevm/
├── config/           # Chain configuration
├── custody/          # MPC custody layer
├── protocols/        # Bridge protocols
├── registry/         # Asset registry
├── warp/             # Warp messaging
├── factory.go        # VM factory
├── vm.go             # Main VM implementation
└── *_test.go         # Tests

Architecture

┌─────────────────────────────────────────────────────────┐
│                    B-Chain Architecture                  │
├─────────────────────────┬───────────────────────────────┤
│   External Chains       │        B-Chain Core           │
├─────────────────────────┼───────────────────────────────┤
│ • Ethereum              │ • MPC Custody (CGGMP21)       │
│ • Bitcoin               │ • Pulsar Quantum Extension  │
│ • BSC                   │ • Asset Registry              │
│ • Polygon               │ • Threshold Signing           │
│ • Arbitrum              │ • Bridge State Machine        │
│ • Cosmos                │ • Slashing & Rewards          │
└─────────────────────────┴───────────────────────────────┘
                                   │
                     ┌─────────────┴─────────────┐
                     │     Lux Internal Chains   │
                     │ (P, C, X, Q, Z, A, M, F)  │
                     └───────────────────────────┘

Core Components

1. Bridge Validator

type BridgeValidator struct {
    NodeID       ids.NodeID
    ClassicalKey *ecdsa.PublicKey  // CGGMP21 key share
    QuantumKey   *corona.PublicKey // Pulsar key share
    Stake        uint64
    Reputation   uint32
}

type CustodyGroup struct {
    Validators      []BridgeValidator
    Threshold       uint32  // t-of-n threshold
    ClassicalPubKey *ecdsa.PublicKey
    QuantumPubKey   *corona.PublicKey
}

2. Dual-Signature Operations

interface IBridgeChain {
    struct BridgeRequest {
        uint256 nonce;
        address sourceChain;
        address destChain;
        address asset;
        uint256 amount;
        address recipient;
        bytes metadata;
    }

    struct DualSignature {
        bytes cgg21Sig;      // Classical threshold signature
        bytes coronaSig;   // Quantum-safe threshold signature
    }

    function initiateBridge(BridgeRequest calldata request) external payable;
    function completeBridge(BridgeRequest calldata request, DualSignature calldata sig) external;
    function verifyDualSignature(bytes32 messageHash, DualSignature calldata sig) external view returns (bool);
}

Quantum-Safe Extension

B-Chain implements a dual-signature scheme during quantum transition:

  1. Phase 1 (Current): CGGMP21 ECDSA only
  2. Phase 2 (Transition): Both CGGMP21 and Pulsar required
  3. Phase 3 (Post-Quantum): Pulsar only
func (b *Bridge) Sign(request BridgeRequest) (*DualSignature, error) {
    phase := b.GetQuantumPhase()
    sig := &DualSignature{}

    if phase >= Phase1 {
        sig.CGG21Sig = b.signCGG21(request)
    }
    if phase >= Phase2 {
        sig.CoronaSig = b.signCorona(request)
    }

    return sig, nil
}

Transaction Types

TypeDescription
InitiateBridgeStart cross-chain transfer
CompleteBridgeComplete transfer with signatures
RegisterAssetRegister bridgeable asset
UpdateValidatorUpdate bridge validator
RotateKeysRotate custody keys
EmergencyPausePause bridge operations

Asset Flow

Inbound (External → Lux)

User → Lock on External Chain
     → Event emission
     → B-Chain MPC validation
     → Dual signature generation
     → Mint wrapped asset on target Lux chain
     → User receives asset

Outbound (Lux → External)

User → Burn wrapped asset on Lux chain
     → B-Chain receives burn proof
     → MPC signature generation
     → Submit release tx to external chain
     → User receives native asset

Supported External Chains

ChainProtocolStatus
EthereumEVM BridgeActive
BitcoinHTLCActive
BSCEVM BridgeActive
PolygonEVM BridgeActive
ArbitrumEVM BridgeActive
CosmosIBCActive
SolanaSPL BridgePlanned

Consensus Parameters

var DefaultBridgeParams = Parameters{
    MinValidators:     21,
    MaxValidators:     100,
    SigningThreshold:  67,   // 67% for signing
    SecurityThreshold: 75,   // 75% for security actions
    ObservationPeriod: 30 * time.Second,
    SigningTimeout:    60 * time.Second,
    MinStake:          100_000 * units.LUX,
    BridgeFeeRate:     30,   // 0.3% in basis points
}

Warp Messaging Integration

type WarpMessage struct {
    SourceChainID ids.ID
    DestChainID   ids.ID
    Payload       []byte
    Signatures    []Signature
}

func (b *Bridge) SendWarpMessage(dest ids.ID, payload []byte) error {
    msg := &WarpMessage{
        SourceChainID: b.ChainID(),
        DestChainID:   dest,
        Payload:       payload,
    }
    return b.signAndBroadcast(msg)
}

API Endpoints

RPC Methods

MethodDescription
bridge.initiateInitiate bridge transfer
bridge.getStatusGet transfer status
bridge.getAssetsList bridgeable assets
bridge.getValidatorsGet bridge validators
bridge.getProofGet transfer proof

REST Endpoints

POST /v1/bc/B/bridge/initiate
GET  /v1/bc/B/bridge/status/{txId}
GET  /v1/bc/B/bridge/assets
GET  /v1/bc/B/bridge/validators
POST /v1/bc/B/bridge/complete

Configuration

{
  "bridgevm": {
    "minValidators": 21,
    "signingThreshold": 67,
    "observationPeriod": "30s",
    "signingTimeout": "60s",
    "bridgeFeeRate": 30,
    "supportedChains": ["ethereum", "bitcoin", "bsc", "polygon"],
    "quantumPhase": 2,
    "warpEnabled": true
  }
}

Performance

OperationTimeNotes
Bridge Initiate2sOne block
MPC Signing5sThreshold coordination
Complete Transfer10sIncluding external chain
Warp Message2sCross-chain Lux

Rationale

Design decisions for B-Chain:

  1. Dedicated Chain: Resource isolation for bridge operations
  2. MPC Custody: Trustless multi-party control
  3. Quantum Extension: Future-proof security
  4. M-Chain Integration: Leverages M-Chain (LP-7100) threshold-custody signing

Backwards Compatibility

LP-6000 supersedes LP-0081. Both old and new numbers resolve to this document.

Test Cases

See github.com/luxfi/node/vms/bridgevm/*_test.go:

func TestBridgeInitiate(t *testing.T)
func TestDualSignature(t *testing.T)
func TestMPCCustody(t *testing.T)
func TestWarpIntegration(t *testing.T)
func TestQuantumPhaseTransition(t *testing.T)

Reference Implementation

Repository: github.com/luxfi/node Package: vms/bridgevm Dependencies:

  • vms/bridgevm/custody
  • vms/bridgevm/protocols
  • vms/mvm (M-Chain threshold-custody signing, LP-7100)

Security Considerations

  1. Threshold Security: Requires t-of-n validators to sign
  2. Observation Period: Prevents flash attacks
  3. Dual Signatures: Classical + quantum during transition
  4. Emergency Pause: Governance can halt operations
LPTitleRelationship
LP-0081B-Chain SpecificationSuperseded by this LP
LP-6100Warp MessagingSub-specification
LP-6200Asset WrappingSub-specification
LP-6300Cross-Chain TransfersSub-specification
LP-6400External Chain SupportSub-specification
LP-7100M-Chain (MVM)Provides threshold-custody signing
LP-9110Teleport ProtocolFolded into this LP (see LP-7050)

Copyright and related rights waived via CC0.