跳轉至

智能合約概覽

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 - 領取已成交訂單的收益

查看 Router 參考 →

OrderBook(訂單簿)

每個交易對都有自己的 OrderBook 合約:

  • 存儲所有未成交訂單
  • 撮合新訂單與訂單簿
  • 跟蹤訂單成交情況和可領取金額

主要函數:

  • getDepth - 獲取某價格的訂單深度
  • getOrder - 獲取訂單詳情
  • bestPriceIndex - 獲取最佳買/賣價
  • getClaimable - 查詢可領取收益

查看 OrderBook 參考 →

PriceBook(價格簿)

使用算術定價公式進行價格計算:

價格 = minPrice + (tickSpace × priceIndex)

主要函數:

  • indexToPrice - 將價格索引轉換為實際價格
  • priceToIndex - 將價格轉換為最近的索引
  • maxPriceIndex - 獲取支援的最大索引

查看 PriceBook 參考 →

Order Canceller(訂單取消器)

用於批量取消多個市場訂單的工具合約。

地址(Sepolia): 0x53ad1ffcd7afb1b14c5f18be8f256606efb11b1b

主要函數:

  • cancel(params[]) - 取消訂單並將代幣返還給調用者
  • cancelTo(params[], to) - 取消訂單並將代幣發送到指定地址

訂單通過其 NFT 代幣 ID 標識,可從 Orders GraphQL 查詢nftId 欄位)獲取。

查看 Order Canceler ABI →

代幣流轉

下買單(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。

安全注意事項

  1. 只授權您需要的金額或使用 permit 簽名
  2. 檢查 deadline 參數以防止過時交易
  3. 使用 postOnly 掛單避免意外成交
  4. 設置合理的 limitPriceIndex防止三明治攻擊

下一步