智能合約概覽¶
Sera 協議由多個部署在以太坊上的互聯智能合約組成。
合約地址(Sepolia 測試網)¶
| 合約 | 地址 |
|---|---|
| Market Router | 0x82bfe1b31b6c1c3d201a0256416a18d93331d99e |
| Market Factory | 0xe54648526027e236604f0d91413a6aad3a80c01e |
| Order Canceller | 0x53ad1ffcd7afb1b14c5f18be8f256606efb11b1b |
Warning
以上是 Sepolia 測試網地址。主網地址將會不同。
架構¶
flowchart TD
Router["Market Router<br/><i>所有交易的入口</i>"] --> OB1["OrderBook A<br/>EURC/USDC"]
Router --> OB2["OrderBook B<br/>XSGD/USDC"]
Router --> OB3["OrderBook C<br/>XSGD/USDT"]
OB1 --> PB1["PriceBook A"]
OB2 --> PB2["PriceBook B"]
OB3 --> PB3["PriceBook C"] 核心合約¶
Market Router(市場路由器)¶
所有交易操作的主要入口點。用戶應通過 Router 而非直接與 OrderBook 交互。
主要函數:
limitBid/limitAsk- 下限價單marketBid/marketAsk- 執行市價單claim- 領取已成交訂單的收益
OrderBook(訂單簿)¶
每個交易對都有自己的 OrderBook 合約:
- 存儲所有未成交訂單
- 撮合新訂單與訂單簿
- 跟蹤訂單成交情況和可領取金額
主要函數:
getDepth- 獲取某價格的訂單深度getOrder- 獲取訂單詳情bestPriceIndex- 獲取最佳買/賣價getClaimable- 查詢可領取收益
PriceBook(價格簿)¶
使用算術定價公式進行價格計算:
主要函數:
indexToPrice- 將價格索引轉換為實際價格priceToIndex- 將價格轉換為最近的索引maxPriceIndex- 獲取支援的最大索引
Order Canceller(訂單取消器)¶
用於批量取消多個市場訂單的工具合約。
地址(Sepolia): 0x53ad1ffcd7afb1b14c5f18be8f256606efb11b1b
主要函數:
cancel(params[])- 取消訂單並將代幣返還給調用者cancelTo(params[], to)- 取消訂單並將代幣發送到指定地址
訂單通過其 NFT 代幣 ID 標識,可從 Orders GraphQL 查詢(nftId 欄位)獲取。
代幣流轉¶
下買單(Bid)¶
sequenceDiagram
participant 用戶
participant Router
participant OrderBook
用戶->>Router: approve(router, amount)
用戶->>Router: limitBid(params)
Router->>OrderBook: transferFrom(用戶)
Router->>OrderBook: limitOrder(...)
OrderBook-->>Router: orderId
Router-->>用戶: orderId 領取收益¶
sequenceDiagram
participant 用戶
participant Router
participant OrderBook
用戶->>Router: claim(params)
Router->>OrderBook: claim(orderKeys)
OrderBook-->>Router: transfer(用戶, tokens)
Router-->>用戶: tokens Gas 優化¶
Sera 針對 Gas 效率進行了優化:
| 操作 | 典型 Gas |
|---|---|
| 限價單(僅掛單) | ~150,000 |
| 限價單(吃單+掛單) | ~200,000 |
| 市價單 | ~120,000 |
| 領取單個訂單 | ~80,000 |
| 取消訂單 | ~60,000 |
Tip
在單筆交易中使用 claim 領取多個訂單可節省批量領取的 Gas。
安全注意事項¶
- 只授權您需要的金額或使用 permit 簽名
- 檢查 deadline 參數以防止過時交易
- 使用 postOnly 掛單避免意外成交
- 設置合理的 limitPriceIndex防止三明治攻擊