跳转至

智能合约概述

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

合约地址

以太坊主网

合约 地址
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 在撮合入口检查自身 EXECUTOR_ROLE;SeraSOR 和 SeraBatcher 通过 onlySeraRole 检查调用者在 Sera 中的角色。用户签名不授予执行者权限。
  • 管理员和暂停者控制角色授予、配置和紧急暂停;Sera.trustedRouter 指定受信任路由器。
  • 应在目标部署核验当前角色持有者、路由器配置及 Timelock/多签安排。源码与示例地址本身不能证明这些部署设置。

合约

Sera.sol

核心结算合约。处理订单撮合、存款和提款。

  • matchOrders() — 结算已匹配的订单对
  • depositFund() / depositFundWithPermit() — 将代币存入 Vault
  • 紧急提款 — 先发起请求,经过 7200 个区块后、14400 个区块内执行,并遵守金额与请求规则。
  • 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, userSig, executor, executorSig)
    Sera->>Vault: withdraw(user, token, amount, recipient)
    Vault-->>User: Tokens transferred

EIP-712 域

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

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

安全特性

  • 授权 — 用户签名约束正常结算;Vault 特权函数和管理函数另有角色检查,参见信任边界。
  • 紧急提款 — 先发起请求,经过 7200 个区块后、14400 个区块内执行,并遵守金额与请求规则。
  • 重入保护 — 所有敏感函数使用瞬态重入保护
  • 可暂停 — 管理员紧急暂停机制
  • 基于角色的访问控制 — 执行者、管理员和暂停者角色分离

下一步