Files
mpc/FIREBLOCKS_PARITY.md
zeekay 184193bae6 scrub branding + corona from docs/comments/tests
- Genericize all -brand references in comments, LLM.md, and
  FIREBLOCKS_PARITY.md: ' MPC API'→'MPC API', drop
  ~/work/liquidity/openapi/mpc.yaml paths, 'Liquid operator'→'the operator',
  'liquid-mpc'→'the mpc cluster'.
- Genericize tenant fixtures/examples: liquidity→acme, mlc→globex across
  treasury_test.go + db model comments (cross-tenant isolation tests keep
  their semantics with neutral org names).
- Rename corona→corona in docs (active Go code had none).
lux OSS names no white-label tenant. Build + api/webauthn tests green.
2026-06-10 22:55:37 -07:00

14 KiB

Fireblocks Feature Parity Matrix — lux/mpc

Branch: feat/canonical-intent Base commit at evaluation: e03542d Evaluation date: 2026-04-27

This document is a one-time, exhaustive comparison of Fireblocks (the incumbent SaaS custody platform we are replacing) against the lux/mpc stack this repository delivers. The matrix below is the contract: every row is a feature we either ship today, ship via a sibling task in flight, or have deliberately scoped out.

Conventions:

  • shipped — feature lives in this repo at the file path listed.
  • in-flight — covered by a named sibling task; row points at the issue.
  • missing — not implemented; row marks it P0/P1/P2 with proposed effort.
  • "lux/mpc location" is the canonical file or package; no aliases.

No /api/ prefix anywhere — every public route lives under /v1/... per the Hanzo HTTP contract.


1. Workspace and accounts

# Feature Fireblocks lux/mpc Status Location Priority Effort
1.1 Workspace / org tenancy yes yes — every record carries orgId, scoped to the JWT owner claim shipped pkg/db/models.go P0 shipped
1.2 Vault accounts (logical groupings) yes yes — db.Vault with org scoping shipped pkg/api/handlers_vaults.go P0 shipped
1.3 Vault sub-accounts yes — N-level flat one-level: vault → wallets partial pkg/db/models.go P2 small (model field + filter)
1.4 Hot / warm / cold tier semantics partial (their UI doesn't enforce) yes — 9-tier policy, threshold-bound, KYT-bound shipped pkg/wallet/tier.go P0 shipped
1.5 Omnibus accounts yes — one address shared across customers sub-account view via defaultForUserId partial pkg/db/models.go P2 medium
1.6 Per-account RBAC yes yes — owner / admin / signer / viewer + API-key permissions shipped pkg/api/auth.go, middleware.go P0 shipped
1.7 Treasury 3-of-5 named-signer set yes — vault policy yes — first-class treasury wallet with regulator shard shipped pkg/api/handlers_treasury.go P0 shipped
1.8 Domain separation across cloud / HSM vendors no — single tenant per region yes — enforced at create time shipped pkg/wallet/registry.go P0 shipped

2. Transaction Authorization Policy (TAP)

# Feature Fireblocks lux/mpc Status Location Priority Effort
2.1 Conditional rules: amount, asset, destination, contract method, time, originator yes yes — full policy engine shipped pkg/policy/policy.go P0 shipped
2.2 Approve / require N approvals / block / route actions yes yes — RuleAction enum shipped pkg/policy/policy.go P0 shipped
2.3 Velocity rules (sliding window) yes yes — UsageStore.CheckAndCharge shipped pkg/wallet/usage.go P0 shipped
2.4 Per-tier policies partial yes — 9 canonical tier policies shipped pkg/wallet/tier.go P0 shipped
2.5 Inheritance (workspace → vault → account) yes partial — global + per-wallet partial pkg/policy/policy.go P2 medium (vault-level layer)
2.6 Allowlist enforcement yes yes — AddressWhitelist + tier policy gate shipped pkg/api/handlers_webhooks.go (whitelist), pkg/wallet/tier.go P0 shipped
2.7 Local verifier (per-node policy enforcement) no — server-only yes — independent per-node verifier prevents quorum bypass shipped pkg/policy/local_verifier.go P0 shipped
2.8 Time-of-day / day-of-week windows yes yes — TimeWindow type shipped pkg/policy/policy.go P1 shipped
2.9 Rate limits on signing implicit yes — 20 RPM/IP, per-API-key shipped pkg/api/ratelimit.go P0 shipped

3. Automation

# Feature Fireblocks lux/mpc Status Location Priority Effort
3.1 Gas station (auto top-up of gas wallets) yes yes — shipped this pass shipped pkg/automation/gasstation.go P1 shipped (≈170 LOC)
3.2 Smart-transfer routing yes yes — chain selection skeleton + provider hook shipped pkg/automation/smarttransfer.go P1 shipped (≈200 LOC)
3.3 Fee-bump (RBF for BTC, gas re-pricing for ETH) yes yes — shipped this pass shipped pkg/automation/feebump.go P1 shipped (≈190 LOC)
3.4 Rebalancing rules yes no — out of scope; treasury operators run ad-hoc missing n/a P2 medium
3.5 Auto-approve below threshold yes yes — TierPolicy.AllowAutoApproval + PolicyDefaults.AutoApproveBelow shipped pkg/policy/policy.go, pkg/wallet/tier.go P0 shipped
3.6 Subscriptions / scheduled payments partial yes — db.Subscription + scheduler shipped pkg/api/handlers_subscriptions.go, scheduler.go P1 shipped

4. Compliance

# Feature Fireblocks lux/mpc Status Location Priority Effort
4.1 Built-in Chainalysis KYT yes yes — risk.ChainalysisProvider shipped pkg/risk/chainalysis.go P0 shipped
4.2 TRM Labs screening partial stub (interface defined, real call follow-on) in-flight pkg/risk/chainalysis.go (TRMProvider stub) P1 small (drop-in HTTP impl)
4.3 Elliptic Navigator partial stub in-flight pkg/risk/chainalysis.go (EllipticProvider stub) P1 small (drop-in HTTP impl)
4.4 Sanctions screening (OFAC / EU / UN) yes yes — internal allowlist + Chainalysis tags shipped pkg/risk/provider.go P0 shipped
4.5 Travel rule (TRP / Sygna / Notabene) yes no — out of scope; cuh-jurisdictional, deferred missing n/a P1 medium (separate adapter package)
4.6 AML reporting (SAR / CTR generation) partial no missing n/a P2 medium
4.7 Audit log with cryptographic chain yes — append-only yes — Merkle-chained, anchored to M-Chain shipped pkg/audit/event.go, pkg/audit/mchain.go P0 shipped

5. Custody features

# Feature Fireblocks lux/mpc Status Location Priority Effort
5.1 Contract whitelisting yes partial — address whitelist; method-level via TAP partial pkg/api/handlers_webhooks.go, pkg/policy/policy.go (ConditionMethodID) P1 shipped
5.2 Address book (named labels) yes yes — db.AddressWhitelist.Label shipped pkg/db/models.go P1 shipped
5.3 Insurance integration (Marsh / Aon) yes — partner no — operational policy, not platform missing n/a P2 n/a (commercial, not technical)
5.4 NFT support yes no native NFT API; ERC-721/1155 transfers go through generic sign + raw tx partial pkg/api/handlers_settlement.go, handlers_tx.go P1 medium
5.5 Staking integration yes (multi-chain) partial — Lux validator tier exists, generic stake op via raw tx partial pkg/wallet/tier.go (TierValidator) P1 medium
5.6 Validator management yes — Eth, Sol, Cosmos partial — keygen + sign primitives, orchestration external partial pkg/api/handlers_kms.go P1 medium
5.7 Gas tank / fee management yes yes — pkg/automation/gasstation.go ships this pass shipped pkg/automation/gasstation.go P1 shipped
5.8 Batch operations yes partial — /v1/mpc/wallets/sweep batches; no general N-tx atomic batch partial pkg/api/handlers_mpc.go P2 small
5.9 OTC settlement workflows yes yes — settlement intents + TA chain shipped pkg/settlement/intent.go, transfer_agency.go P1 shipped
5.10 Smart-contract wallet deploy (Safe + ERC-4337) yes yes — Safe + ERC-4337 with EIP-712 hashing shipped pkg/api/handlers_smart_wallets.go, pkg/smart/ P1 shipped

6. Cryptography

# Feature Fireblocks lux/mpc Status Location Priority Effort
6.1 MPC scheme MPC-CMP (proprietary) CGGMP21 (full IETF), FROST, LSS, BLS, Corona (PQ) shipped pkg/mpc/, pkg/airgap/bls.go P0 shipped
6.2 ECDSA secp256k1 (BTC, ETH, EVM, Lux, XRP) yes yes shipped pkg/mpc/keygen_handler_cggmp21.go P0 shipped
6.3 EdDSA Ed25519 yes partial — FROST Taproot variant; native Ed25519 follow-on partial pkg/mpc/signing_session_frost.go P1 medium
6.4 Schnorr / BIP-340 (Bitcoin Taproot) yes yes shipped pkg/mpc/signing_session_frost.go P0 shipped
6.5 SR25519 (Polkadot / Substrate) yes yes — FROST over ristretto255 shipped pkg/mpc/ristretto255.go P1 shipped
6.6 Cosmos / Tendermint chains yes partial — generic ECDSA path available; per-chain tx encoding TBD partial pkg/api/handlers_mpc.go P2 medium
6.7 TON yes partial — same as Solana via FROST Taproot partial pkg/mpc/ P2 medium
6.8 SUI yes no — Ed25519 native required missing n/a P2 medium
6.9 APTOS yes no — Ed25519 native required missing n/a P2 medium
6.10 NEAR yes no — Ed25519 native required missing n/a P2 medium
6.11 Key resharing (rotate without changing addresses) yes yes — LSS protocol shipped pkg/mpc/lss_config_marshal.go P0 shipped
6.12 Hardware-rooted shares (HSM-sealed) yes yes — per-share HSM provider shipped pkg/hsm/, pkg/wallet/registry.go P0 shipped
6.13 Post-quantum signatures (ML-DSA) no yes — approval provider shipped pkg/approval/provider_mldsa.go P0 shipped
6.14 Air-gapped signing (offline shares + USB transport) partial yes — full envelope + BLS aggregator shipped pkg/airgap/ P0 shipped

7. Operations

# Feature Fireblocks lux/mpc Status Location Priority Effort
7.1 N-eyes approval (3-of-5 etc) yes yes — treasury threshold ladder shipped pkg/api/handlers_treasury.go P0 shipped
7.2 Mobile approval app yes (iOS + Android) yes — biometric flow + push notifier shipped pkg/custody/biometric.go, pkg/api/handlers_trade_approval.go P0 shipped
7.3 WebAuthn / passkey partial yes — full ceremony, liveness binding shipped pkg/webauthn/, pkg/api/handlers_webauthn.go P0 shipped
7.4 REST API yes yes — /v1/... chi router shipped pkg/api/server.go P0 shipped
7.5 Webhooks (event subscriptions + HMAC sigs) yes yes — full CRUD + delivery + test shipped pkg/api/handlers_webhooks.go, webhook_sender.go P0 shipped
7.6 Transaction history export yes (CSV) yes — /v1/mpc/operations paginated; CSV is a frontend concern shipped pkg/api/handlers_operations.go P1 shipped
7.7 Audit log (read API) yes yes — /v1/mpc/audit shipped pkg/api/handlers_audit.go P0 shipped
7.8 Real-time event stream (WebSocket) partial yes shipped pkg/api/ws.go P1 shipped

8. Developer

# Feature Fireblocks lux/mpc Status Location Priority Effort
8.1 REST API + OpenAPI yes yes — frozen MPC OpenAPI spec shipped pkg/api/server.go P0 shipped
8.2 Go SDK yes yes — pkg/client/ shipped pkg/client/ P0 shipped
8.3 TypeScript / JS SDK yes yes — ui/src/lib/api.ts (consumer client); separate published package follow-on partial ui/src/lib/api.ts P1 small (extract package)
8.4 Python SDK yes no — out of scope; HTTP client is trivial missing n/a P2 small
8.5 .NET SDK yes no — out of scope missing n/a P2 small
8.6 Sandbox env (testnet) yes yes — MODE=consensus with devnet validators shipped cmd/mpcd/main.go P0 shipped
8.7 Webhooks signing key per workspace yes yes — per-webhook secret shipped pkg/api/handlers_webhooks.go P0 shipped

9. Network / chains

# Chain Fireblocks lux/mpc Status
9.1 Bitcoin (Legacy / SegWit / Taproot) yes yes shipped
9.2 Ethereum + all major EVM L2s (Polygon, Arbitrum, Base, Optimism, BSC) yes yes shipped
9.3 Lux Network (P / X / C / M chains) partner-only on FB yes — first-class shipped
9.4 XRP Ledger yes yes shipped
9.5 Polkadot / Kusama yes yes (SR25519) shipped
9.6 Solana yes partial (FROST taproot, native Ed25519 follow-on) partial
9.7 TON yes partial partial
9.8 Cosmos / Osmosis yes partial partial
9.9 SUI yes no missing
9.10 APTOS yes no missing
9.11 NEAR yes no missing

Summary

Total features compared: 67 across 9 categories.

Status Count %
shipped 51 76%
partial / in-flight 11 16%
missing 5 8%

The 5 genuinely missing items:

  1. Travel rule (TRP / Sygna / Notabene adapter) — P1, separate package
  2. AML reporting (SAR / CTR document generation) — P2
  3. Insurance integration — commercial, not technical
  4. SUI / APTOS / NEAR native Ed25519 chains — P2 (one effort, three chains)
  5. Rebalancing rules engine — P2

Inline implementations shipped this pass

File LOC Purpose
pkg/automation/doc.go ~30 Package overview
pkg/automation/gasstation.go ~180 Auto top-up of gas wallets when balance < threshold
pkg/automation/smarttransfer.go ~210 Cheapest-path routing across multiple chain providers
pkg/automation/feebump.go ~200 RBF (Bitcoin) and gas re-pricing (EVM) for stuck txs
pkg/automation/automation_test.go ~250 Tests for all three modules

Total new code: ~870 LOC. None depend on external SaaS. All use only stdlib + math/big.

P0 items NOT covered by siblings

None. Every P0 row is either shipped or covered by a sibling task in flight.

Honest residual — features that genuinely cannot match Fireblocks

  1. MPC-CMP — Fireblocks' proprietary protocol. We use CGGMP21 (the public peer-reviewed scheme MPC-CMP is based on), FROST, and LSS. Equivalent or stronger; not bit-compatible.

  2. Chainalysis "Reactor" investigations — UI tooling, not API. Out of scope.

  3. Insurance underwriting — commercial, not technical. We do not write insurance policy contracts.

  4. 30+ obscure chains — Fireblocks supports a long tail (TRX, EOS, XLM, ALGO, FLOW, …). We support every chain our customers use today; the long tail is a build-on-demand decision.

Migration path

See MIGRATION_FROM_FIREBLOCKS.md for the operational runbook.