6个版本 (1个稳定版)
1.0.1-alpha.3 | 2023年2月28日 |
---|---|
1.0.1-alpha.0 | 2022年11月25日 |
1.0.0 | 2022年11月10日 |
#38 in #链上
用于dex-v4
150KB
3.5K SLoC
支持与通用资产一起使用的Solana订单簿库。
概述
此库旨在允许其他程序实现特定用例的链上订单簿。这些程序可以使用通用订单簿作为底层区块链感知数据结构。
与资产无关的订单簿有两种交互方式
- 创建新订单
- 取消现有订单
AAOB指令应直接从程序中调用。这些可以返回作为 OrderSummary
对象的即时订单信息。
AAOB还通过事件队列账户输出订单匹配信息。
AAOB库在从订单创建到订单匹配传输的回调信息性质上也是通用的。可以使用自定义对象,唯一的要求是该对象实现了bytemuck Pod
、PartialEq
和 CallbackInfo
特性。
创建订单
原始的 [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