智能合约概述¶
Sera 的结算层由部署在以太坊上的开源智能合约组成。所有合约均已验证,已独立审计。
合约地址¶
以太坊主网¶
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()— 双签名即时提款
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, 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 个区块内执行,并遵守金额与请求规则。
- 重入保护 — 所有敏感函数使用瞬态重入保护
- 可暂停 — 管理员紧急暂停机制
- 基于角色的访问控制 — 执行者、管理员和暂停者角色分离
下一步¶
-
核心结算合约参考
-
智能订单路由器参考
-
批量执行参考
-
资产托管参考