跳轉至

智慧合約概覽

Sera 的結算層由部署在 Ethereum 上的開源智慧合約組成。所有合約均已驗證,已獨立審計

合約地址

Ethereum 主網

合約 地址
Vault 0xC7d4Fd2638e6630C8C61329878676b88A8A24D43
Sera 0xB5C50C5D5f038404F85970b7f5B7259C4AC0E198
SeraSOR 0xa7A0cf7cd6f043fCA23f29d8ae5aae6b46e11c18
SeraBatcher 0x1f4b366f4145A92978df4bEeb6BdE71bC652F034

地址在不同部署間可能變更;請透過 GET /config 取得實時值,避免硬編碼。

原始碼

所有合約在 GitHub 上開源,已獨立審計。以下連結指向已審計版本。

合約 原始碼
Sera.sol src/Sera.sol
SeraSOR.sol src/SeraSOR.sol
SeraBatcher.sol src/SeraBatcher.sol
Vault.sol src/Vault.sol

架構

flowchart TD
    User["User / API"] --> Sera["Sera.sol<br/><i>Core Settlement</i>"]
    User --> SOR["SeraSOR.sol<br/><i>Multi-Leg Routing</i>"]
    SOR --> Sera
    Batcher["SeraBatcher.sol<br/><i>Batch Execution</i>"] --> Sera
    Batcher --> SOR
    Sera --> Vault["Vault.sol<br/><i>Asset Custody</i>"]

合約角色

  • Vault.TRADER_ROLE 授予 Sera,僅撮合引擎可移動帳本餘額。
  • Sera.EXECUTOR_ROLE 授予鏈下執行者、SeraSOR 與 SeraBatcher。
  • Sera.PAUSER_ROLEDEFAULT_ADMIN_ROLE 由協議管理方持有。
  • 所有管理員角色均由 Timelock 合約持有,而 Timelock 由多簽錢包所有。
  • Sera.trustedRouter 設定為目前活躍的 SeraSOR 部署地址。

合約

Sera.sol

核心結算合約。處理訂單撮合、存款和提取。

  • matchOrders() — 結算已撮合的訂單對
  • depositFund() / depositFundWithPermit() — 將代幣存入 Vault
  • emergencyWithdraw() — 兩步驟延遲提取(24 小時延遲)
  • executeInstantWithdrawDualSig() — 雙重簽名即時提取

查看 Sera.sol 參考 →

SeraSOR.sol

智慧訂單路由器。執行多段原子兌換。

  • executeIntent() — 根據已簽署的 Intent 執行多段路由

查看 SeraSOR.sol 參考 →

SeraBatcher.sol

批次執行包裝器。可在單筆交易中執行多筆撮合。

  • batchMatchOrders() — 盡力批次(單筆失敗不影響後續)
  • batchMatchOrdersAtomic() — 全有或全無批次
  • batchMatchMixed() — 組合原子批次、單筆撮合和 SOR intent

查看 SeraBatcher.sol 參考 →

Vault.sol

資產託管合約。以每位使用者的帳本餘額持有使用者資金。

  • deposit() — 接受代幣存款
  • withdraw() — 轉出代幣
  • transferLedger() — 內部帳本轉帳(無代幣移動)
  • balanceOf() — 查詢使用者餘額

查看 Vault.sol 參考 →

結算流程

sequenceDiagram
    participant User
    participant Sera as Sera.sol
    participant Vault as Vault.sol

    Note over User: Deposit tokens
    User->>Sera: depositFund(token, user, amount)
    Sera->>Vault: deposit(user, token, amount)
    Vault-->>Sera: Balance credited

    Note over Sera: Orders are matched
    Sera->>Vault: transferLedger(from, to, token, amount)
    Note over Vault: Internal ledger swap

    Note over User: Withdraw proceeds
    User->>Sera: executeInstantWithdrawDualSig(intent, sigs)
    Sera->>Vault: withdraw(user, token, amount, recipient)
    Vault-->>User: Tokens transferred

EIP-712 Domain

所有合約使用相同的 EIP-712 domain 進行簽名驗證:

const domain = {
  name: 'Sera',
  version: '1',
  chainId: 1,
    verifyingContract: '0xB5C50C5D5f038404F85970b7f5B7259C4AC0E198'  // Sera.sol
};

安全特性

  • 非託管 — 所有操作都需要使用者簽名;平台無法在未經授權的情況下移動資金
  • 緊急提取 — 即使 API 停機,使用者仍可直接在鏈上提取(24 小時延遲)
  • 重入保護 — 所有敏感函式使用瞬態重入防護
  • 可暫停 — 管理員的緊急暫停機制
  • 基於角色的存取 — 執行者、管理員和暫停者角色分離

下一步