Liquid MPC — Custody
Threshold signing custody — CGGMP21 ECDSA + FROST EdDSA, 3-of-5 Byzantine-resilient, 20+ chains
Liquid MPC is the custody layer for the Liquidity.io exchange. All user assets are held in threshold-signature wallets — the full private key never exists on any single machine.
How It Works
Every user account gets a set of threshold key shares distributed across a Byzantine-resilient MPC cluster. To sign a transaction (deposit, withdrawal, settlement), a quorum of nodes must cooperate — no single node can sign alone.
User places trade → ATS matches order → Settlement intent created
↓
Liquid MPC (3-of-5 cluster)
├─ Node 1: partial signature ✓
├─ Node 2: partial signature ✓
├─ Node 3: partial signature ✓
├─ Node 4: (not needed)
└─ Node 5: (not needed)
↓
Combined threshold signature
↓
On-chain settlement (atomic)Signing Protocols
| Protocol | Algorithm | Chains | Use Case |
|---|---|---|---|
| CGGMP21 | Threshold ECDSA (secp256k1) | Bitcoin, Ethereum, EVM chains, XRPL | Most chains |
| FROST | Threshold EdDSA (Ed25519) | Solana, TON, Polkadot, Cardano | Ed25519 chains |
| LSS | Dynamic resharing | All | Key rotation without downtime |
| Doerner | 2-of-2 ECDSA | All ECDSA | Optimized two-party |
| Ringtail | Lattice threshold | LQDTY | Post-quantum consensus |
Performance
| Operation | 3-of-5 | 5-of-9 | 10-of-15 |
|---|---|---|---|
| Key Generation | 12ms | 28ms | 82ms |
| Signing | 8ms | 15ms | 40ms |
| Resharing | 20ms | 35ms | 75ms |
| Verification | 2ms | 2ms | 2ms |
Supported Chains (20+)
| Chain | Protocol | Address Type |
|---|---|---|
| Bitcoin | ECDSA (CGGMP21) | Legacy, SegWit, Taproot |
| Ethereum + EVM | ECDSA (CGGMP21) | EOA |
| Solana | EdDSA (FROST) | Ed25519 |
| Polkadot | SR25519 | Ristretto255 |
| Cosmos | ECDSA (CGGMP21) | secp256k1 |
| TON | EdDSA (FROST) | Ed25519 |
| Cardano | EdDSA/ECDSA | Multi-era |
| XRPL | ECDSA (CGGMP21) | Classic/X-address |
| BSC, Arbitrum, Optimism, Base, Polygon | ECDSA | EVM |
| NEAR, Aptos, Sui, Tezos, Algorand, Stellar, Hedera, Flow, Kadena, Mina | Mixed | Chain-native |
External Custody Providers
Liquid MPC supports pluggable custody backends for institutions that require third-party custody:
| Provider | Status | Integration |
|---|---|---|
| Native MPC | Production | Default — 3-of-5 threshold cluster |
| Fireblocks | Supported | API key + service account auth |
| Utila | Supported | gRPC client with lazy-loaded connection |
| Custom | Supported | Any endpoint implementing the signing API |
Configure per-tenant via the mpcMode field:
// Native MPC (default)
{ mpcMode: 'liquid-mpc' }
// Fireblocks
{ mpcMode: 'custom', mpcEndpoint: 'https://api.fireblocks.io/v1' }
// Utila
{ mpcMode: 'custom', mpcEndpoint: 'https://api.utila.io/v1' }Security Model
No Single Point of Compromise
- Key shares are generated via distributed key generation (DKG) — no dealer
- Signing requires
tofnnodes to cooperate (default: 3-of-5) - Storage: ZapDB with ChaCha20-Poly1305 encryption per node
- Backups: S3 with pre-encrypted state (encrypted before upload)
- Inter-node auth: Ed25519 message signatures
- Transport: Consensus-embedded via ZAP wire protocol (no external NATS dependency)
HSM Integration
Hardware Security Module co-signing for institutional-grade security:
| HSM | Support |
|---|---|
| AWS CloudHSM | Supported |
| GCP Cloud HSM | Supported |
| Zymbit HSM | Supported (edge deployments) |
HSM co-signs settlement intents as an additional approval layer — the MPC signature alone is not sufficient for large withdrawals.
Per-Org Isolation
- Each organization gets isolated key shares
- Root encryption keys are per-org (managed by Liquid KMS)
- Key rotation via LSS protocol (no downtime, no key reconstruction)
Settlement Lifecycle
1. INTENT — ATS creates settlement intent (order matched)
2. APPROVE — Risk engine validates (position limits, AML checks)
3. SIGN — MPC cluster produces threshold signature (3-of-5)
4. CO-SIGN — HSM co-signs (for withdrawals above threshold)
5. BROADCAST — Signed transaction submitted to chain
6. CONFIRM — On-chain confirmation recorded
7. FINALIZE — Settlement marked complete in ATSAPI
POST /api/v1/generate_mpc_sig — Request threshold signature
POST /api/v1/complete — Mark signing complete
GET /api/v1/status/:txId — Check signing status
GET /api/v1/health — Cluster healthInfrastructure
| Parameter | Value |
|---|---|
| Cluster | 3-of-5 Byzantine-resilient nodes |
| Storage | Encrypted at rest (ChaCha20-Poly1305) |
| Backups | Encrypted before upload, geo-distributed |
| Uptime SLA | 99.99% |
| Endpoint | https://mpc.liquidity.io |