#orderbook #blockchain #built #solana #asset-agnoistic

已删除 agnostic-orderbook

基于 Solana 区块链的资产无关订单簿

0.1.0 2021年11月15日

#22 in #orderbook

Apache-2.0

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