跳转至

智能合约概览

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防止三明治攻击

下一步