返回 Expert 笔记
Expert Day 50

桥接系统设计 #1 — 托管层 (Custody Layer)

机构托管演化(Hot/Warm/Cold/MPC/Multisig)、Fireblocks Connect架构、子账户隔离原理

2026-06-20
Phase 1 - 机构DeFi与桥接系统设计 (Day 43-56)
托管层FireblocksPolicyEngine子账户设计文档

日期: 2026-06-20 方向: 机构DeFi / RWA 阶段: Phase 1 - 机构DeFi与桥接系统设计 (Day 43-56) 标签: #托管层 #Fireblocks #PolicyEngine #子账户 #设计文档


今日目标

类型内容
学习机构托管演化(Hot/Warm/Cold/MPC/Multisig)、Fireblocks Connect架构、子账户隔离原理
实操设计一个机构托管子账户方案,含Policy Engine、Workflow、应急机制
产出设计#1:托管层完整架构文档 — 含模块图、接口、序列图、TradFi对照、风险面

一、托管层在桥接架构中的位置

1.1 5层桥接架构回顾

┌─────────────────────────────────────────────────┐
│  Layer 5: 风控层 (Risk Layer)                    │
├─────────────────────────────────────────────────┤
│  Layer 4: 报表层 (Reporting Layer)               │
├─────────────────────────────────────────────────┤
│  Layer 3: 清算层 (Settlement Layer)              │
├─────────────────────────────────────────────────┤
│  Layer 2: 合规层 (Compliance Layer)              │
├─────────────────────────────────────────────────┤
│  Layer 1: 托管层 (Custody Layer) ★ Today         │
│  - Fireblocks Connect / Anchorage / BitGo        │
│  - Sub-account isolation                         │
│  - Policy Engine                                 │
│  - Key Management                                │
└─────────────────────────────────────────────────┘

1.2 托管层为什么是基础

托管层是其他4层的依赖

  • 合规层需要知道"哪个地址属于哪个机构客户" → 来自托管层
  • 清算层需要"客户授权某笔交易" → 经过托管层签名
  • 报表层需要"持仓余额" → 来自托管层账户
  • 风控层需要"客户限额" → 由托管层Policy Engine执行

托管层的核心输出

  1. 给合规层:身份信号(whose key, which jurisdiction)
  2. 给清算层:交易签名(who can sign what)
  3. 给报表层:余额快照(balance per sub-account)
  4. 给风控层:策略执行(reject if exceeds limit)

二、机构托管演化史

2.1 三代演化

Gen 1: Cold Storage (2013-2017)

  • BitGo, Coinbase Custody, Gemini Custody
  • 物理隔离的离线签名(Hardware Wallet/Air-gapped Computer)
  • 适合长期持仓,不适合频繁交易
  • 风险:物理盗窃、火灾、地震

Gen 2: Multi-Signature (2014-2020)

  • M-of-N多签(典型2-of-3, 3-of-5)
  • 私钥分布在多个地理位置
  • 仍然有"多次签名"的操作摩擦
  • 风险:内部串通、单点钥匙丢失

Gen 3: MPC (Multi-Party Computation) (2018-Present)

  • 私钥永远不存在完整形态,每个参与方持有"share"
  • 签名通过MPC协议协作完成
  • Fireblocks (2018)、Copper、BitGo MPC、Anchorage
  • 优势:无单点失败、签名快、审计友好
  • 现状:占据机构托管80%+市场份额

2.2 MPC vs Multi-sig:为什么MPC赢了

维度Multi-SigMPC
链上可见是(多签合约)否(看起来像EOA)
Gas成本高(多签verification)与EOA相同
隐私暴露策略结构完全隐藏
兼容性需要合约支持任何链都行
私钥状态多个完整私钥永不完整
性能串行签名,慢并行MPC,快
可扩展性增加签名人需要变合约协议层调整

关键洞察:MPC从链上看就是普通EOA,这对跨链兼容性至关重要——不需要每条链都部署多签合约。


三、Fireblocks Connect架构详解

3.1 Fireblocks在机构托管的地位

  • 客户数:1800+ institutional clients (2024)
  • AUM:$5T+ (2024)
  • 支持的链:80+ blockchains
  • 支持的Token:1500+
  • DeFi protocols integrated:250+

3.2 核心架构

┌──────────────────────────────────────────────────┐
│           Customer Application                    │
│  (Trading App, OMS, Custom Workflow)              │
└────────────────────┬─────────────────────────────┘
                     │ API / SDK
┌────────────────────┴─────────────────────────────┐
│           Fireblocks Web Console                  │
│  - User Management                                │
│  - Vault Management (账户层级)                     │
│  - Policy Editor                                  │
│  - Audit Trail                                    │
└────────────────────┬─────────────────────────────┘
                     │
┌────────────────────┴─────────────────────────────┐
│           Fireblocks Cloud Backend                │
│  - Transaction Authorization Engine               │
│  - Policy Engine                                  │
│  - Workflow Engine                                │
│  - Compliance Checks (Travel Rule etc.)           │
└────────────────────┬─────────────────────────────┘
                     │
┌────────────────────┴─────────────────────────────┐
│       MPC Co-signer Network                       │
│  - Customer's MPC nodes (2-3 nodes)               │
│  - Fireblocks MPC node (1 node, infrastructure)   │
│  - Signature requires N-of-N (typically 3-of-3)   │
└────────────────────┬─────────────────────────────┘
                     │
┌────────────────────┴─────────────────────────────┐
│       Network Layer (DeFi Connect)                │
│  - Curated DeFi protocol adapters                 │
│  - dApps via WalletConnect                        │
│  - Direct Smart Contract interactions             │
└──────────────────────────────────────────────────┘

3.3 关键概念:Vault Account vs Sub-Account

Vault Account:客户的Top-level账户单元

  • 一个机构客户通常有10-100个Vault Accounts
  • 每个Vault Account有独立的MPC密钥
  • 隔离性强(一个被攻击不影响其他)

Sub-Account (Vault Sub-Account):Vault Account下的逻辑分组

  • 每个Sub-Account有独立地址
  • 共享Vault Account的MPC密钥
  • 用于策略隔离(Trading vs Treasury vs Settlement)

实际机构架构示例(一家中等对冲基金)

Hedge Fund X
├── Vault: Operations
│   ├── Sub: Hot Wallet (USDC)
│   ├── Sub: Settlement
│   └── Sub: Gas
├── Vault: Trading
│   ├── Sub: BTC Strategy
│   ├── Sub: ETH Strategy
│   └── Sub: Stablecoin Strategy
├── Vault: Long-term Treasury
│   ├── Sub: BTC Holdings
│   └── Sub: Stablecoin Reserves
└── Vault: DeFi Strategies
    ├── Sub: Aave Lending
    ├── Sub: EigenLayer Restaking
    └── Sub: Uniswap LP

四、托管层架构详细设计

4.1 模块边界图

┌─────────────────────────────────────────────────────────┐
│                  Custody Layer (Day 50)                  │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  1. Account Management Module                     │   │
│  │  - Vault创建/Sub-account创建                       │   │
│  │  - 地址生成 (HD Wallet derivation)                 │   │
│  │  - 账户层级管理                                     │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  2. Key Management Module (MPC)                   │   │
│  │  - Key generation (DKG)                           │   │
│  │  - Key storage (HSM-backed)                       │   │
│  │  - Threshold signature (TSS)                      │   │
│  │  - Key rotation                                   │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  3. Policy Engine                                 │   │
│  │  - Authorization rules                            │   │
│  │  - Approval workflows                             │   │
│  │  - Limit checks (per asset, per period)           │   │
│  │  - Address whitelist                              │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  4. Transaction Authorization Engine              │   │
│  │  - Policy lookup                                  │   │
│  │  - Approver routing                               │   │
│  │  - Multi-step approval                            │   │
│  │  - Auto-rejection                                 │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  5. Audit & Logging                               │   │
│  │  - Immutable audit log                            │   │
│  │  - Real-time event streaming                      │   │
│  │  - Forensics support                              │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │  6. Integration Module                            │   │
│  │  - DeFi adapters (Uniswap, Aave, etc.)            │   │
│  │  - Exchange connectivity                          │   │
│  │  - WalletConnect bridge                           │   │
│  └──────────────────────────────────────────────────┘   │
│                                                          │
│         ↓ Output to other layers ↓                       │
│  - 给合规层: User Identity Signal                         │
│  - 给清算层: Authorized Signature                         │
│  - 给报表层: Account Balance Snapshot                     │
│  - 给风控层: Real-time Position                           │
└─────────────────────────────────────────────────────────┘

4.2 核心接口签名

A. Account Management API

interface IAccountManagement {
  // Vault管理
  createVault(params: VaultParams): Promise<VaultId>;
  getVault(vaultId: VaultId): Promise<Vault>;
  listVaults(filter?: VaultFilter): Promise<Vault[]>;
  
  // Sub-account管理
  createSubAccount(vaultId: VaultId, params: SubAccountParams): Promise<SubAccountId>;
  generateAddress(subAccountId: SubAccountId, chain: ChainId): Promise<Address>;
  
  // 资产持仓
  getBalance(subAccountId: SubAccountId, asset: AssetId): Promise<Balance>;
  getAllBalances(vaultId: VaultId): Promise<BalanceSnapshot>;
  
  // 转账(内部和外部)
  internalTransfer(from: SubAccountId, to: SubAccountId, asset: AssetId, amount: bigint): Promise<TxId>;
  externalTransfer(from: SubAccountId, toAddress: Address, asset: AssetId, amount: bigint): Promise<TxRequest>;
}

type VaultParams = {
  name: string;
  ownerOrgId: OrgId;
  threshold: number;        // M-of-N MPC threshold
  signers: SignerId[];      // N signers
  defaultPolicy: PolicyId;
};

type SubAccountParams = {
  name: string;
  vaultId: VaultId;
  purpose: 'trading' | 'treasury' | 'settlement' | 'gas' | 'custom';
  policyOverride?: PolicyId;
};

B. Policy Engine API

interface IPolicyEngine {
  // Policy CRUD
  createPolicy(policy: PolicyDef): Promise<PolicyId>;
  updatePolicy(policyId: PolicyId, policy: PolicyDef): Promise<void>;
  deletePolicy(policyId: PolicyId): Promise<void>;
  
  // Policy evaluation
  evaluate(request: TxRequest): Promise<PolicyDecision>;
  
  // Approver management
  routeApprovers(request: TxRequest): Promise<ApproverList>;
  registerApproval(approverId: ApproverId, requestId: RequestId, decision: 'approve' | 'reject'): Promise<void>;
}

type PolicyDef = {
  name: string;
  rules: PolicyRule[];
  defaultAction: 'allow' | 'deny' | 'require_approval';
};

type PolicyRule = {
  // Conditions
  conditions: {
    fromSubAccount?: SubAccountId | SubAccountId[];
    toAddress?: Address | AddressList;
    asset?: AssetId | AssetId[];
    amountUSD?: { gte?: number; lte?: number };
    timeWindow?: { startTime: number; endTime: number };
    velocityCheck?: { maxAmountPerPeriod: number; periodHours: number };
  };
  
  // Action
  action: 'allow' | 'deny' | {
    requireApproval: {
      approverGroups: GroupId[];      // 谁可以批准
      threshold: number;               // 需要几个批准
      timeoutHours: number;            // 超时自动拒绝
    };
  };
};

type PolicyDecision = {
  decision: 'allow' | 'deny' | 'require_approval';
  matchedRule?: string;
  requiredApprovals?: ApprovalRequirement[];
  reason: string;
};

C. MPC Signing API

interface IMPCSigner {
  // Key Generation (DKG)
  generateKey(params: KeyGenParams): Promise<PublicKey>;
  
  // Threshold Signing (TSS)
  initiateSign(message: Bytes32, signers: SignerId[]): Promise<SignSessionId>;
  contributeSignShare(sessionId: SignSessionId, share: SignShare): Promise<void>;
  finalizeSign(sessionId: SignSessionId): Promise<Signature>;
  
  // Key Rotation
  rotateKey(vaultId: VaultId, newSigners: SignerId[]): Promise<RotationId>;
  
  // Recovery
  initiateRecovery(vaultId: VaultId, evidence: RecoveryEvidence): Promise<RecoveryId>;
}

D. 智能合约层(On-chain Component)

// 链上Sub-account Registry(可选,给合规层用)
interface ICustodyRegistry {
    struct AccountIdentity {
        bytes32 ownerOrgHash;        // 机构身份哈希
        bytes32 subAccountId;        // Sub-account ID
        uint8 purpose;               // 0=trading, 1=treasury, etc.
        uint8 jurisdiction;
        bool active;
    }
    
    function registerAccount(address custodyAddress, AccountIdentity calldata identity) external;
    function getIdentity(address custodyAddress) external view returns (AccountIdentity memory);
    function isActiveAccount(address account) external view returns (bool);
    function deactivateAccount(address custodyAddress) external; // 紧急冻结
    
    event AccountRegistered(address indexed account, bytes32 indexed orgHash, uint8 purpose);
    event AccountDeactivated(address indexed account, uint64 timestamp);
}

4.3 序列图1:机构客户Onboarding

sequenceDiagram
  participant Client as 机构客户
  participant FBC as Fireblocks Console
  participant FBE as Fireblocks Engine
  participant MPC as MPC Network
  participant ChainRegistry as On-chain Registry
  
  Note over Client,FBE: Step 1: KYB/KYC验证
  Client->>FBC: 提交注册申请+企业资料
  FBC->>FBE: KYB验证(法律实体、UBO穿透)
  FBE->>FBE: 通过Refinitiv/Onfido
  FBE-->>FBC: KYB通过
  
  Note over Client,FBE: Step 2: 创建Vault & 配置MPC
  Client->>FBC: 请求创建Vault Account
  FBC->>MPC: initiateDKG(threshold=3, signers=[client1, client2, fb_co])
  MPC->>MPC: Distributed Key Generation
  MPC-->>FBC: PublicKey, ChainCode
  FBC->>FBE: createVault(publicKey, threshold, signers)
  
  Note over Client,FBE: Step 3: 创建Sub-accounts
  Client->>FBC: createSubAccount("Trading-BTC")
  FBC->>FBE: 派生Sub-account地址
  FBE->>ChainRegistry: registerAccount(address, identity)
  ChainRegistry-->>FBE: ✓ Registered
  
  Note over Client,FBE: Step 4: 配置Policy
  Client->>FBC: 上传Policy规则
  Note over Client: 例如:<br/>- Trading-BTC sub限额$5M/天<br/>- Treasury需要3-of-5批准<br/>- DeFi仅限白名单合约
  FBC->>FBE: setPolicies(vaultId, policies)
  FBE-->>Client: ✓ Onboarding完成

4.4 序列图2:交易授权流程

sequenceDiagram
  participant Trader as Trader
  participant App as Trading App
  participant FBE as Fireblocks Engine
  participant Policy as Policy Engine
  participant Approvers as Approver Group
  participant MPC as MPC Network
  participant Chain as Blockchain

  Note over Trader,App: T0: Trader发起交易
  Trader->>App: 卖出 100 BTC at market
  App->>FBE: createTx(from=Trading-BTC, to=Coinbase, amt=100 BTC)
  
  Note over FBE,Policy: T+0.1s: Policy检查
  FBE->>Policy: evaluate(txRequest)
  Policy->>Policy: 匹配规则
  alt 金额 < $1M (auto-approve threshold)
    Policy-->>FBE: decision=allow
  else 金额 $1M-$5M (single approver)
    Policy-->>FBE: decision=require_approval, approvers=[CFO]
    FBE->>Approvers: notify CFO
    Approvers->>FBE: CFO approves
  else 金额 > $5M (multi-sig committee)
    Policy-->>FBE: decision=require_approval, approvers=[CFO, CRO, CEO]
    FBE->>Approvers: notify all
    Approvers->>FBE: 3-of-3 approve (within 24h)
  else 金额 > $50M
    Policy-->>FBE: decision=deny, reason="exceeds vault limit"
    FBE-->>App: Tx rejected
  end
  
  Note over FBE,MPC: T+approval_time: MPC签名
  FBE->>MPC: initiateSign(txHash)
  MPC->>MPC: 客户MPC node 1 contributes
  MPC->>MPC: 客户MPC node 2 contributes
  MPC->>MPC: Fireblocks MPC node contributes
  MPC->>MPC: Combine partial signatures
  MPC-->>FBE: Final signature
  
  Note over FBE,Chain: T+签名后: 链上提交
  FBE->>Chain: submit signed tx
  Chain-->>FBE: Tx hash
  FBE-->>App: Tx submitted, hash=0x...

4.5 序列图3:紧急冻结流程

sequenceDiagram
  participant Officer as Compliance Officer
  participant FBC as Fireblocks Console
  participant FBE as Fireblocks Engine
  participant Registry as On-chain Registry
  participant MPC as MPC Network

  Note over Officer,Registry: Trigger: 收到OFAC制裁名单更新
  Officer->>FBC: 紧急冻结 Sub-account "Trader-X"
  FBC->>FBE: emergencyFreeze(subAccountId)
  
  Note over FBE,Registry: 1. 链上层标记
  FBE->>Registry: deactivateAccount(address)
  Registry-->>FBE: ✓ marked inactive
  
  Note over FBE,MPC: 2. MPC层禁用
  FBE->>MPC: disableSigning(vaultId, subAccountId)
  MPC-->>FBE: ✓ signing disabled
  
  Note over FBE: 3. 内部状态更新
  FBE->>FBE: 状态: subAccount.active = false
  FBE->>FBE: 拒绝所有待处理交易
  FBE->>FBE: emit EmergencyFreezeEvent
  
  Note over Officer,FBC: 通知
  FBE->>Officer: Audit log + alert
  FBE->>FBC: 显示Frozen状态
  
  Note over Officer: 后续: 合规调查 / 解冻流程

五、设计决策与权衡

5.1 自建 vs 外包托管

维度自建Custody用Fireblocks/Anchorage
初期成本$5-10M+(HSM, MPC team)$50-200K (license fee)
持续成本$2-5M/year$200-500K/year
时间到上线12-18 months2-4 weeks
控制度完全可控依赖供应商
监管需要自己拿Trust Charter借助供应商许可
适用规模$5B+ AUM<$5B AUM

结论:除了Tier-1银行(如JPM自建Onyx Custody),其他机构都应该外包。

5.2 为什么选MPC而不是Multi-Sig?

MPC优势

  1. 链上不可见:从链上看是普通EOA,提高隐私
  2. 跨链通用:不需要每条链都部署多签合约
  3. 签名成本低:与EOA相同的Gas
  4. 策略灵活:threshold可调整无需链上变更

Multi-Sig优势

  1. 审计简单:策略在链上可见,审计员熟悉
  2. 成熟生态:Safe (Gnosis)有大量工具
  3. 去中心化:不依赖MPC运营方

机构选择:90%选MPC,10%选Safe(特别是DAO Treasury)。

5.3 Sub-account隔离的粒度

太粗(一个Vault走天下)

  • 一个事件影响所有资产
  • 难以做策略分账核算
  • Audit Trail混乱

太细(每笔交易一个Sub-account)

  • 管理负担大
  • Policy配置爆炸
  • Performance下降

最佳实践:按"业务功能"分(Trading vs Treasury vs DeFi),每个Vault下5-15个Sub-account。

5.4 Policy Engine设计原则

1. Whitelist-by-default,不是Blacklist

  • 默认拒绝,明确允许
  • 防止"漏配置"导致的资金损失

2. 多层防御

  • Sub-account层(最基础)
  • Vault层(中等)
  • Org层(最高)
  • 任一层拒绝就拒绝

3. 时间窗口限额

  • 不只是单笔限额($1M/transaction)
  • 还要累计限额($10M/24h)
  • 防止"切片攻击"(多笔小额绕过限额)

4. 速度控制

  • 紧急情况可Pause(admin权限)
  • 大额交易有Cooling Off Period(48h之后才生效)

六、风险与攻击面

6.1 内部威胁:员工恶意操作

威胁场景:机构内某Trader获得签名权限,转移$10M到外部地址。

缓解措施

  • 多人审批:>$1M必须2人审批,>$10M必须3人+CRO审批
  • 时间锁:>$5M有24h冷却期(异常时可cancel)
  • 行为分析:Detect异常模式(如周末转账、新地址转账)
  • 背景调查:所有签名人定期FBI/Interpol查询

6.2 外部威胁:MPC Node被攻击

威胁场景:客户的某个MPC Node被攻击,攻击者获取一个share。

缓解措施

  • Threshold设计:3-of-5 threshold,攻击者需要3个share才能签名
  • Node隔离:3个Node在不同物理位置、不同OS、不同云供应商
  • HSM保护:每个Node的share在HSM中(如AWS CloudHSM)
  • 行为监控:异常签名请求触发alert

6.3 协议层威胁:DeFi合约漏洞

威胁场景:客户托管资产被allowance到一个DeFi协议,协议被攻击导致资产丢失。

缓解措施

  • Approve限额:永远不要infinite approve,每次approve精确金额
  • DeFi白名单:只允许已审计协议(Aave, Compound, Uniswap等)
  • Approve超时:approve有过期时间(如30天)
  • Real-time监控:approve使用情况持续监控,异常立即revoke

6.4 合规层威胁:制裁名单更新延迟

威胁场景:OFAC新增某地址到SDN List,但客户仍在与之交易。

缓解措施

  • 实时更新:从Chainalysis/Elliptic每5分钟同步
  • 预交易检查:每笔交易check发送方和接收方
  • 历史交易扫描:发现新制裁后扫描过去90天交易
  • 紧急冻结:发现违规立即冻结相关Sub-account

6.5 操作威胁:私钥/Recovery Key丢失

威胁场景:客户的MPC Recovery Key保管不当,丢失。

缓解措施

  • 多Recovery Key:3-of-5 Recovery Threshold
  • 地理分散:Recovery Key存放在3个不同司法
  • Custodian备份:Fireblocks有Cold Recovery服务(紧急时辅助恢复)
  • 保险:Lloyd's of London policy覆盖密钥丢失风险

七、TradFi对照表

链上托管层模块TradFi对应关键差异Adaptation
Vault AccountMaster Account at Custodian (e.g., State Street)链上MPC keys vs 物理证书+银行账户链上T+0访问
Sub-accountSub-account at Prime Broker类似但链上更细粒度自动化Policy
MPC Threshold SigningMulti-signature Authorization (Wire Transfers)算法 vs 人工签字加密学保证
Policy EngineAuthorization Matrix (内部规章)代码自动执行 vs 流程文件实时enforce
Approval WorkflowWire Transfer Approval Process (Phone confirm)链上audit log vs 录音Immutable trail
Address WhitelistBeneficiary Whitelist (Wire)链上Smart Contract vs 银行系统列表自动检查
Audit LogSWIFT MT940 + Internal Logs不可篡改 vs 可篡改但有备份法定证据级
Emergency FreezeAccount Hold Order (KYC team)Smart Contract Pause vs Bank IT手动<1 minute响应
DeFi ConnectOrder Routing to BrokersAPI集成 vs FIX协议直接链上交互
Recovery法律recovery process (court order)链上Recovery Mechanism vs 法律加密学+法律双保障

八、关键速查

主要机构托管方对比(2024-2025)

托管方AUC (Assets Under Custody)客户数核心技术监管许可
Fireblocks$5T+1800+MPCNYDFS BitLicense
Anchorage Digital$50B+200+MPC + HSMOCC Charter (Bank)
Coinbase Custody$130B+500+Cold Storage + MPCNY Trust Co
BitGo$100B+1500+Multi-sig + MPCSD Trust Co
Copper$40B+500+MPC (ClearLoop)UK FCA
Komainu$10B+200+MPCJersey FSC

Policy Engine参数模板

维度TradingTreasurySettlement
单笔上限$5M$1M$50M
日累计上限$50M$5M$500M
自动批准阈值$500K$100K$5M
单人批准阈值$1-5M (CFO)-$5-25M (CRO)
多人批准阈值$5M+ (3-of-5)$1M+ (2-of-3)$25M+ (4-of-5)
Cooling Off Period$5M+ → 4h$1M+ → 8h$25M+ → 24h
地址限制仅交易所+DeFi白名单仅Vault间转账仅清算对手白名单

MPC Threshold推荐配置

机构规模Vault ThresholdRecovery Threshold
<$10M AUM2-of-32-of-3
$10-100M AUM3-of-53-of-5
$100M-1B AUM3-of-54-of-7
>$1B AUM4-of-75-of-9

九、面试题(资深级)

Q1: 设计一个对冲基金的托管架构,AUM $500M,每天50笔交易

深度回答Vault结构(10个Vault):

  1. Operations (USDC for ops)
  2. BTC Trading
  3. ETH Trading
  4. Stablecoin Trading
  5. DeFi-Lending
  6. DeFi-Restaking
  7. Long-term Treasury
  8. Cold Storage Backup
  9. Insurance Reserve
  10. Settlement Hub

MPC配置

  • Each Vault: 3-of-5 MPC
  • Signers: 2 Internal (CFO + CRO) + 2 Custodian + 1 Recovery Service
  • Recovery: 4-of-7 (additional 2 external lawyers)

Policy Engine

  • Trading Vault: $5M/tx, $50M/day
  • Treasury: 24h cooling for >$1M
  • DeFi: 仅Aave/Compound/EigenLayer白名单
  • Settlement: 仅T+0 atomic结算

整合

  • Fireblocks作为主托管
  • DefiLlama API用于Real-time监控
  • Internal OMS via Fireblocks API
  • Audit log → Splunk for SOC

Q2: 如果客户的MPC Recovery Key全部丢失,能恢复资产吗?

深度回答Recovery机制设计

  • Setup时除Operating Threshold (e.g., 3-of-5),另设Recovery Threshold (e.g., 5-of-9)
  • Recovery参与者:Operating signers + 额外Recovery-only signers (lawyer, family, escrow service)
  • Recovery process需要法律文件(如Death Certificate, Court Order)
  • 时间锁:Recovery需要30-90天等待期(防止恶意Recovery攻击)

如果Recovery Threshold也丢失

  • 无法链上恢复
  • 法律层面:可向Custodian索赔(如Fireblocks的Cold Recovery service,但需要SOC1合规审批)
  • 保险层面:Lloyd's policy可能覆盖(视具体条款)

最佳实践

  • 至少3地理位置存储Recovery Key shares
  • 至少2 trusted third parties (lawyer, accountant)
  • 测试Recovery process每年至少一次
  • Backup of Backup(meta-recovery)

Q3: 评价"链上托管 = 自托管"这个常见误解

深度回答误解来源:Crypto Native文化推崇"Not Your Keys, Not Your Coins",认为外包托管=非自托管。

机构视角的真相

  • "自托管"对个人意味着自己拿私钥
  • "自托管"对机构意味着机构内部Treasury team控制密钥,不必非要每个员工都拿私钥
  • Fireblocks等"托管方"实际是Software Provider,密钥在客户机房(at least majority shares)
  • 真正的Custodial(如Coinbase Trust)是Coinbase持有,不同概念

机构架构层级

  1. Custodial:客户根本不持有任何key(Coinbase Trust)
  2. Co-Custody:客户和Custodian各持一半(早期Fireblocks)
  3. Self-Custody with Software Help:客户持有所有key shares,软件辅助签名(现代Fireblocks)
  4. Pure Self-Custody:客户自建所有Infra(JPM Onyx)

机构通常选3,不选4(自建成本太高),不选1(监管要求和信任问题)。

Q4: 如何处理"链上"和"链下"的对账(Reconciliation)?

深度回答对账维度

  1. 链上余额 vs 托管系统余额
  2. 托管系统余额 vs OMS Position
  3. OMS Position vs Fund Admin Books

对账频率

  • T+0 (实时):链上 vs Fireblocks
  • T+0 (end of day):Fireblocks vs OMS
  • T+1 (overnight):OMS vs Fund Admin

链上链下不一致的原因

  • 链上交易未确认(pending)
  • 链下记录延迟同步
  • Forks(Reorg)导致链上回滚
  • Token Migration(如某项目升级合约)
  • Airdrop(链上多了但链下没记录)

应对

  • Tolerance Threshold (±$10K acceptable)
  • 大于threshold人工调查
  • Daily Reconciliation Report自动生成
  • 触发Alert给CFO + Auditor

Q5: Fireblocks 2022 Profanity Vulnerability事件给机构的教训?

深度回答事件背景:2022年9月,Profanity (Vanity Address Generator)被发现有漏洞,可以通过brute force恢复部分私钥。Fireblocks发现客户使用Profanity-generated地址,紧急通知。

关键教训

  1. 依赖第三方工具的风险:客户用了Profanity做"漂亮地址",这成为攻击向量
  2. Fireblocks响应快:发现后24h内通知所有客户、辅助迁移
  3. Custodian的边界:Fireblocks不为"客户外部生成地址"负责,但需要做合理建议
  4. 机构应对
    • 不使用第三方Address Generator
    • 所有地址必须来自Custody System
    • 定期审查地址生成历史
  5. Trust Boundary:机构需要明确Custodian覆盖什么、不覆盖什么

影响:让机构更重视"端到端"托管(不只是签名,而是从地址生成到交易执行的全流程)。


十、明日预告

Day 51: 桥接系统设计 #2 — 合规层 (Compliance Layer)。基于今天的托管层身份信号,设计KYC Oracle、链上Allowlist、Travel Rule集成。这是另一个700+行深度设计文档,将与Day 50的托管层无缝衔接。