智能合约概述¶
Sera 的结算层由部署在以太坊上的开源智能合约组成。所有合约均已验证,已独立审计。
合约地址¶
以太坊主网¶
地址在不同部署间可能变更;请通过 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_ROLE与DEFAULT_ADMIN_ROLE由协议管理方持有。- 所有管理员角色均由 Timelock 合约持有,而 Timelock 由多签钱包所有。
Sera.trustedRouter设置为当前活跃的 SeraSOR 部署地址。
合约¶
Sera.sol¶
核心结算合约。处理订单撮合、存款和提款。
matchOrders()— 结算已匹配的订单对depositFund()/depositFundWithPermit()— 将代币存入 VaultemergencyWithdraw()— 两步延迟提款(24 小时延迟)executeInstantWithdrawDualSig()— 双签名即时提款
SeraSOR.sol¶
智能订单路由器。执行多段原子兑换。
executeIntent()— 基于已签名的 Intent 执行多段路由
SeraBatcher.sol¶
批量执行包装器。支持在单笔交易中执行多个撮合。
batchMatchOrders()— 尽力批量(单个失败不影响后续)batchMatchOrdersAtomic()— 全有或全无批量batchMatchMixed()— 组合原子批量、单个撮合和 SOR Intent
Vault.sol¶
资产托管合约。保管用户资金,具有按用户的账本余额。
deposit()— 接受代币存款withdraw()— 转出代币transferLedger()— 内部账本转账(无代币移动)balanceOf()— 查询用户余额
结算流程¶
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 小时延迟)
- 重入保护 — 所有敏感函数使用瞬态重入保护
- 可暂停 — 管理员紧急暂停机制
- 基于角色的访问控制 — 执行者、管理员和暂停者角色分离
下一步¶
-
核心结算合约参考
-
智能订单路由器参考
-
批量执行参考
-
资产托管参考