mirror of
https://github.com/luxfi/bridge.git
synced 2026-09-24 00:26:46 +00:00
- opnet-watcher: universal binary with plugin architecture - 3 functional plugins (OP_NET, Solana, TON) - Generic EVMPlugin handles all EVM chains (Ethereum, Base, Arbitrum, etc.) - 17 non-EVM chain stubs (Sui, NEAR, Cosmos, XRPL, ICP, etc.) - Threshold signing via luxfi/crypto (CGGMP21/FROST) - Separate txSigner hot wallet for on-chain submission - Multi-tenant API with hostname-based routing - Confirmation depth, backing sanity checks, EIP-155 local signing - manifests: 32 chain configs + 5 tenant configs (lux, zoo, hanzo, pars, spc) - k8s: fix chain IDs 1330663759→4294967299, ClusterIP services, KMS secrets - CI: conformance tests gate production deployment
260 lines
8.4 KiB
YAML
260 lines
8.4 KiB
YAML
# Teleport Chain Manifest Schema
|
|
# Every chain integration in the Lux Teleport bridge MUST provide a manifest
|
|
# conforming to this schema. The manifest is the single source of truth for:
|
|
# 1. Locale registration in TeleportProposalBridge
|
|
# 2. Source-chain adapter semantics (deposit/release)
|
|
# 3. Watcher/finality plugin configuration
|
|
# 4. MPC signer key type
|
|
# 5. Asset definitions (ticker, decimals, recipient encoding, canonical wrapper)
|
|
# 6. Conformance test pack reference
|
|
#
|
|
# Validate with: yq eval 'true' manifests/chains/<chain>.yaml
|
|
|
|
schema_version: "1.0.0"
|
|
|
|
# ============================================================================
|
|
# REQUIRED FIELDS
|
|
# ============================================================================
|
|
|
|
# chain_id: uint64 — canonical chain identifier.
|
|
# EVM chains use their native chainId.
|
|
# Non-EVM chains use a deterministic encoding (e.g. OP_NET = 0x4F504E45).
|
|
# Lux C-Chain = 96369.
|
|
chain_id:
|
|
type: integer
|
|
required: true
|
|
min: 1
|
|
|
|
# name: human-readable chain name for logs/UIs
|
|
name:
|
|
type: string
|
|
required: true
|
|
|
|
# class: chain family — determines adapter and signer selection
|
|
# lux_native — Lux subnets (C-Chain, D-Chain). Warp messaging, BLS finality.
|
|
# evm — EVM-compatible L1/L2. ECDSA signer, block finality.
|
|
# bitcoin_script — Bitcoin-family UTXO chains. Taproot/P2WSH custody, block finality.
|
|
# account_native — Non-EVM account-model chains (Solana, TON, Sui). Chain-specific signer.
|
|
class:
|
|
type: string
|
|
required: true
|
|
enum: [lux_native, evm, bitcoin_script, account_native]
|
|
|
|
# tier: integration depth — determines which Teleport flows are enabled
|
|
# locale_only — Registered as locale; no active bridge (pending signer/adapter).
|
|
# inbound_only — Deposits accepted, minting on Lux. No withdrawals yet.
|
|
# bidirectional — Full deposit + withdraw. MPC custody live.
|
|
# yield_enabled — Bidirectional + yield strategy routing via LiquidVault.
|
|
tier:
|
|
type: string
|
|
required: true
|
|
enum: [locale_only, inbound_only, bidirectional, yield_enabled]
|
|
|
|
# ============================================================================
|
|
# SIGNER CONFIGURATION
|
|
# ============================================================================
|
|
|
|
signer:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
# protocol: MPC signing protocol used for this chain's key type
|
|
# cggmp21 — ECDSA threshold (secp256k1). EVM and Bitcoin.
|
|
# frost — Schnorr/EdDSA threshold. Solana, TON, Lux validators.
|
|
# bls — BLS aggregation. Lux Warp messaging.
|
|
# corona — Post-quantum lattice threshold. Future upgrade path.
|
|
protocol:
|
|
type: string
|
|
required: true
|
|
enum: [cggmp21, frost, bls, corona]
|
|
|
|
# curve: underlying elliptic curve
|
|
curve:
|
|
type: string
|
|
required: true
|
|
enum: [secp256k1, ed25519, bls12_381, ml_dsa_65]
|
|
|
|
# threshold: t-of-n signing quorum
|
|
threshold:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
t:
|
|
type: integer
|
|
min: 2
|
|
n:
|
|
type: integer
|
|
min: 3
|
|
|
|
# native_signer: optional secondary signer for chain-native operations
|
|
# (e.g. FROST for Taproot on Bitcoin, BLS for Warp on Lux)
|
|
native_signer:
|
|
type: object
|
|
required: false
|
|
properties:
|
|
protocol:
|
|
type: string
|
|
enum: [frost, bls, corona]
|
|
curve:
|
|
type: string
|
|
enum: [secp256k1, ed25519, bls12_381]
|
|
|
|
# ============================================================================
|
|
# FINALITY RULES
|
|
# ============================================================================
|
|
|
|
finality:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
# mode: how finality is determined
|
|
# block_depth — Wait N confirmations.
|
|
# slot_finalized — Wait for slot finalization (Solana, Ethereum post-merge).
|
|
# instant — Single-slot finality (Lux Snowman).
|
|
mode:
|
|
type: string
|
|
required: true
|
|
enum: [block_depth, slot_finalized, instant]
|
|
|
|
# confirmations: number of blocks/slots to wait (block_depth mode)
|
|
confirmations:
|
|
type: integer
|
|
required: false
|
|
min: 1
|
|
|
|
# max_reorg_depth: deepest reorg the watcher should tolerate before halting
|
|
max_reorg_depth:
|
|
type: integer
|
|
required: false
|
|
|
|
# stale_attestation_seconds: max age of a backing attestation before Teleporter
|
|
# rejects minting (maps to Teleporter._checkBackingRatio 24h default)
|
|
stale_attestation_seconds:
|
|
type: integer
|
|
required: true
|
|
default: 86400 # 24 hours
|
|
|
|
# ============================================================================
|
|
# ASSETS
|
|
# ============================================================================
|
|
|
|
assets:
|
|
type: array
|
|
required: true
|
|
min_items: 1
|
|
items:
|
|
type: object
|
|
properties:
|
|
# ticker: canonical asset symbol on the source chain
|
|
ticker:
|
|
type: string
|
|
required: true
|
|
|
|
# decimals: native decimal precision on source chain
|
|
decimals:
|
|
type: integer
|
|
required: true
|
|
|
|
# recipient_encoding: how recipient addresses are serialized
|
|
# evm_address — 20-byte hex (0x...)
|
|
# bech32 — Bitcoin bech32/bech32m (bc1...)
|
|
# base58 — Solana/Bitcoin legacy
|
|
# raw_bytes — 32-byte or 36-byte (TON, Sui)
|
|
recipient_encoding:
|
|
type: string
|
|
required: true
|
|
enum: [evm_address, bech32, base58, raw_bytes]
|
|
|
|
# wrapper: Liquid token minted on Lux C-Chain for this asset
|
|
wrapper:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
symbol:
|
|
type: string
|
|
required: true
|
|
contract:
|
|
type: string
|
|
required: true
|
|
description: "Path relative to @luxfi/standard/contracts/"
|
|
decimals:
|
|
type: integer
|
|
required: true
|
|
|
|
# strategy: yield strategy (only for tier=yield_enabled)
|
|
strategy:
|
|
type: object
|
|
required: false
|
|
properties:
|
|
name:
|
|
type: string
|
|
contract:
|
|
type: string
|
|
description: "Path relative to @luxfi/standard/contracts/"
|
|
|
|
# ============================================================================
|
|
# ADAPTER CONFIGURATION
|
|
# ============================================================================
|
|
|
|
adapter:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
# deposit_method: how deposits are detected on the source chain
|
|
# event_log — EVM event (TeleportVault.Deposit)
|
|
# utxo_watch — Monitor UTXO to MPC-controlled address
|
|
# account_watch — Monitor balance/instruction on account-model chain
|
|
deposit_method:
|
|
type: string
|
|
required: true
|
|
enum: [event_log, utxo_watch, account_watch]
|
|
|
|
# vault_contract: source-chain vault address or MPC custody address
|
|
# For EVM: deployed TeleportVault/LiquidVault contract address
|
|
# For Bitcoin: MPC-controlled Taproot address
|
|
# For account-native: MPC-controlled program/account address
|
|
vault_contract:
|
|
type: string
|
|
required: true
|
|
|
|
# teleporter_contract: Lux C-Chain Teleporter contract that mints L* tokens
|
|
teleporter_contract:
|
|
type: string
|
|
required: true
|
|
|
|
# ============================================================================
|
|
# WATCHER CONFIGURATION
|
|
# ============================================================================
|
|
|
|
watcher:
|
|
type: object
|
|
required: true
|
|
properties:
|
|
# plugin: watcher implementation to use
|
|
# evm_log_watcher — Subscribe to EVM logs via eth_subscribe/getLogs
|
|
# bitcoin_zmq_watcher — Subscribe to Bitcoin ZMQ block notifications
|
|
# solana_ws_watcher — Subscribe to Solana WebSocket account changes
|
|
# ton_liteserver_watcher — Poll TON liteserver for transactions
|
|
# lux_warp_watcher — Subscribe to Lux Warp messages
|
|
plugin:
|
|
type: string
|
|
required: true
|
|
|
|
# rpc_url: RPC endpoint (resolved from KMS at runtime, placeholder here)
|
|
rpc_url:
|
|
type: string
|
|
required: true
|
|
description: "KMS secret path or well-known endpoint"
|
|
|
|
# poll_interval_ms: polling interval for non-streaming watchers
|
|
poll_interval_ms:
|
|
type: integer
|
|
required: false
|
|
default: 12000
|
|
|
|
# start_block: block/slot to start watching from (0 = latest)
|
|
start_block:
|
|
type: integer
|
|
required: false
|
|
default: 0
|