OrderBook 蓝图

OrderBook 蓝图是在 Basic 蓝图的基础上扩展的标准模板,旨在支持开发者构建具有订单簿功能的自定义 Agent。除了继承 Basic 蓝图的所有功能之外,OrderBook 蓝图增加了几个核心功能,以实现订单的创建、管理和结算操作。

解析 OrderBook 蓝图

新增核心功能

核心功能代码详解

1. 创建订单-MakeOrder

code
Handlers.add('ffp.makeOrder', 'FFP.MakeOrder',
  function(msg)
    assert(msg.From == Owner or msg.From == ao.id, 'Only owner can make order')
    assert(type(msg.AssetID) == 'string', 'AssetID is required')
    assert(type(msg.Amount) == 'string', 'Amount is required')
    assert(bint.__lt(0, bint(msg.Amount)), 'Amount must be greater than 0')
    assert(type(msg.HolderAssetID) == 'string', 'HolderAssetID is required')
    assert(type(msg.HolderAmount) == 'string', 'HolderAmount is required')
    assert(bint.__lt(0, bint(msg.HolderAmount)), 'HolderAmount must be greater than 0')

    local expireDate = msg.ExpireDate
    if expireDate and tonumber(expireDate) < msg.Timestamp then
      msg.reply({Error = 'err_invalid_expire_date', ['X-FFP-MakeOrderID'] = msg.Id})
      return
    end
    if not expireDate then expireDate = '' end

    local res = Send({
      Target = FFP.Settle,
      Action = 'CreateNote',
      AssetID = msg.AssetID,
      Amount = msg.Amount,
      HolderAssetID = msg.HolderAssetID,
      HolderAmount = msg.HolderAmount,
      IssueDate = tostring(msg.Timestamp),
      ExpireDate = expireDate,
      Version = FFP.SettleVersion
    }).receive()
    local noteID = res.NoteID
    local note = json.decode(res.Data)
    FFP.Notes[noteID] = note
    FFP.MakeTxToNoteID[msg.Id] = noteID
    msg.reply({Action = 'OrderMade-Notice', NoteID = note.NoteID, Data = json.encode(note)})
  end

该功能为 Agent 提供了发布交易意图的能力,通过票据(Note)来明确交易的条件(资产类型和数量等),从而支持订单薄中订单的生成。

功能描述:

  • 支持 Agent 所有者通过调用该接口创建新的 Note。

关键代码逻辑:

  • 验证输入参数的合法性(例如资产类型,数量,过期时间等)。

  • 调用 FPP 协议的 CreateNote 接口,生成票据并存储在 Agent 内部数据表中。

2. 执行结算操作-Execute

code

功能描述:

  • 当 Agent 发行的 Note 进入结算阶段时,由 FFP 结算中心触发 Agent 执行资产的转移操作。

  • 支持 Agent 处理自身创建的票据在结算过程中需要的资产交割。

关键代码逻辑:

  • 验证 Note 的合法性(如是否存在、发行者是否为 Agent、状态是否为 Open)。

  • 更新 Note 状态为 Executed。

  • 将对应的资产转移到 FFP 结算中心。

3. 取消订单-CancelOrders

code

功能描述:

  • 允许 Agent 所有者取消未被结算的票据。

  • 仅支持取消状态为 Open 的票据,其他状态(如 Executed 或 Settled)的票据无法取消。

关键代码逻辑:

  • 验证票据是否属于当前 Agent,并确保其状态为 Open。

  • 调用 FFP 协议的 Cancel 接口取消票据。

  • 将本地票据状态更新为取消状态。

完整代码

orderbook.lua
utils.lua

开发之前,把 orderbook.lua 和 utils.lua 复制到开发环境即可。

总结

OrderBook 蓝图是 Basic 蓝图的功能升级版,适合需要实现复杂交易和订单管理逻辑的开发者。它为构建自定义订单簿 Agent 提供了标准化的基础功能,使开发者能够快速上手并专注于业务逻辑的优化与实现。

Last updated

Was this helpful?