#通用 #链上 #solana #订单簿

asset-agnostic-orderbook

Solana库,支持通用链上订单簿

6个版本 (1个稳定版)

1.0.1-alpha.32023年2月28日
1.0.1-alpha.02022年11月25日
1.0.0 2022年11月10日

#38 in #链上


用于dex-v4

Apache-2.0

150KB
3.5K SLoC

支持与通用资产一起使用的Solana订单簿库。

概述

此库旨在允许其他程序实现特定用例的链上订单簿。这些程序可以使用通用订单簿作为底层区块链感知数据结构。

与资产无关的订单簿有两种交互方式

  • 创建新订单
  • 取消现有订单

AAOB指令应直接从程序中调用。这些可以返回作为 OrderSummary 对象的即时订单信息。

AAOB还通过事件队列账户输出订单匹配信息。

AAOB库在从订单创建到订单匹配传输的回调信息性质上也是通用的。可以使用自定义对象,唯一的要求是该对象实现了bytemuck PodPartialEqCallbackInfo 特性。

创建订单

原始的 [new_order][fn@instruction::new_order::process] 将会将新订单推送到订单簿,如果其限价跨越价差,则可以选择与现有订单匹配。结果是向事件队列推送一系列匹配事件,以及将新订单写入订单簿,这将立即可供与其他订单匹配。原始返回一个 OrderSummary 对象,产生一个唯一的订单标识符,该标识符在整个订单生命周期内都有效,也就是说,直到它完全匹配或取消(如果发布)。

有关此原始不同参数的更多信息,请参阅此处

取消订单

原始操作 [cancel_order][fn@instruction::cancel_order::process] 将作用于订单簿中发布的订单。它将完全从订单簿中删除发布的订单。该指令仅需关联的 order_id

处理队列

在调用程序方面,队列可以解析为 EventQueue 对象。可以使用其 peek_at 方法检索特定事件。或者,可以使用对象的 iter 方法遍历事件。

Event 对象描述了匹配操作以及从订单簿中清除订单。匹配方的信息通过 callback_info 字段提供。此类信息的示例可以是用户账户或用户钱包的公钥,使调用程序能够在这些账户之间进行资产转移。此信息的前缀长度 callback_id_len 也可用于程序以检测会导致自交易匹配。

一旦事件处理完成,就必须从队列中移除已处理的事件。这可以通过 [consume_events][fn@instruction::consume_events] 原始操作来完成。通常,事件处理逻辑应由调用程序的专用cranker处理。

依赖项

~18–27MB
~459K SLoC