0.1.0 |
|
---|
#22 in #orderbook
120KB
2.5K SLoC
可用于通用资产的订单簿程序。
概述
此程序旨在由实现特定链上订单簿的其他程序调用。这些“调用”程序可以使用无知的订单簿作为底层基础设施。
与资产无关订单簿交互有两种方式
- 创建新订单
- 取消现有订单
AAOB程序通过事件队列账户以两种方式输出信息
- 通过事件队列的寄存器(通过
read_register
基本操作)提供瞬时的订单信息。 - 队列本身
创建订单
new_order
基本操作会将新订单推送到订单簿,如果其限价跨越价差,则可以选择与现有订单匹配。这将导致一系列匹配事件推送到事件队列,并将新订单写入订单簿,该订单将立即可用以与其他订单匹配。还会在事件队列的寄存器中写入一个 OrderSummary
对象,生成一个唯一的订单标识符,该标识符将在整个订单生命周期内有效:直到它完全匹配或取消(如果已发布)。
有关此基本操作的不同参数的更多信息,请参阅此处。
取消订单
cancel_order
基本操作将作用于已发布到订单簿的订单。它将完全从订单簿中删除已发布的订单。该指令只需要 order_id
。
处理队列
在调用者程序的端,队列可以被解析为EventQueue
对象。它的peek_at
方法可以用来检索特定的事件。或者,可以使用对象的iter
方法遍历事件。
Event
对象描述了匹配操作以及从订单簿中清除订单。匹配方的信息通过callback_info
字段提供。此类信息的示例包括用户账户或用户钱包,使调用者程序能够在这些账户之间执行资产转移。此信息的前缀长度为callback_id_len
,程序也使用它来检测会导致自交易的匹配。
一旦事件处理完成,就 essential 要从队列中弹出已处理的事件。这可以通过[consume_events
][fn@instruction::consume_events
]原始操作来完成。一般来说,事件处理逻辑应由调用者程序端的专用cranker处理。
依赖关系
~17-25MB
~426K SLoC