智慧合約概覽¶
Sera 的結算層由部署在 Ethereum 上的開源智慧合約組成。所有合約均已驗證,已獨立審計。
合約地址¶
Ethereum 主網¶
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 Domain¶
所有合約使用相同的 EIP-712 domain 進行簽名驗證:
const domain = {
name: 'Sera',
version: '1',
chainId: 11155111, // Sepolia
verifyingContract: '0x83475A1bD98a8DC2DCd507A747e4DC85da241D6e' // Sera.sol
};
安全特性¶
- 授權 — 用戶簽名約束正常結算;Vault 特權函數和管理函數另有角色檢查,參見信任邊界。
- 緊急提取 — 即使 API 停機,使用者仍可直接在鏈上提取(24 小時延遲)
- 重入保護 — 所有敏感函式使用瞬態重入防護
- 可暫停 — 管理員的緊急暫停機制
- 基於角色的存取 — 執行者、管理員和暫停者角色分離
下一步¶
-
核心結算合約參考
-
智慧訂單路由器參考
-
批次執行參考
-
資產託管參考