跳转至

智能合约概述

Sera 的结算层由部署在以太坊上的开源智能合约组成。所有合约均已验证,已独立审计

合约地址

以太坊主网

合约 地址
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 域

所有合约使用相同的 EIP-712 域进行签名验证:

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

安全特性

  • 非托管 — 所有操作需要用户签名;平台无法在未授权的情况下移动资金
  • 紧急提款 — 即使 API 宕机,用户也可以直接在链上提款(24 小时延迟)
  • 重入保护 — 所有敏感函数使用瞬态重入保护
  • 可暂停 — 管理员紧急暂停机制
  • 基于角色的访问控制 — 执行者、管理员和暂停者角色分离

下一步