跳轉至

智慧合約概覽

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

合約地址

Ethereum 主網

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

Sepolia 測試網

合約 地址
Vault 0x3c7945840bAE0d7e7f3824Ebccef1962629250F0
Sera 0x83475A1bD98a8DC2DCd507A747e4DC85da241D6e
SeraSOR 0x83c1368110B640A729f3810De5FBe94b99aa5668
SeraBatcher 0x29F99C5dc36D555933700BE3dffEa6e721a27f0a

地址在不同部署間可能變更;請透過 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: 11155111,  // Sepolia
    verifyingContract: '0x83475A1bD98a8DC2DCd507A747e4DC85da241D6e'  // Sera.sol
};

安全特性

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

下一步