tempo_node/rpc/dex/
books.rs

1use crate::rpc::dex::orders::Tick;
2use alloy_primitives::{Address, B256};
3use serde::{Deserialize, Serialize};
4use tempo_alloy::rpc::pagination::FilterRange;
5
6#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct OrderbooksResponse {
9    /// Cursor for next page, null if no more results
10    pub next_cursor: Option<String>,
11    /// Orderbooks that match the query
12    pub orderbooks: Vec<Orderbook>,
13}
14
15#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct Orderbook {
18    /// Base token address
19    pub base_token: Address,
20    /// Orderbook key (keccak256 of base and quote tokens)
21    pub book_key: B256,
22    /// Best ask tick (lowest ask price)
23    pub best_ask_tick: Tick,
24    /// Best bid tick (highest bid price)
25    pub best_bid_tick: Tick,
26    /// Quote token address
27    pub quote_token: Address,
28    /// Spread in ticks (best_ask_tick - best_bid_tick)
29    pub spread: Tick,
30}
31
32#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct OrderbooksFilter {
35    /// Filter by base token address
36    pub base_token: Option<Address>,
37    /// Best ask tick in range
38    pub best_ask_tick: Option<FilterRange<Tick>>,
39    /// Best bid tick in range
40    pub best_bid_tick: Option<FilterRange<Tick>>,
41    /// Filter by quote token address
42    pub quote_token: Option<Address>,
43    /// Spread in range (in ticks)
44    pub spread: Option<FilterRange<Tick>>,
45}