sui_deepbook_indexer/
models.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use diesel::data_types::PgTimestamp;
5use diesel::{Identifiable, Insertable, Queryable, QueryableByName, Selectable};
6
7use serde::Serialize;
8use sui_indexer_builder::{LIVE_TASK_TARGET_CHECKPOINT, Task};
9
10use crate::schema::{
11    balances, balances_summary, flashloans, order_fills, order_updates, pool_prices, pools,
12    progress_store, proposals, rebates, stakes, sui_error_transactions, trade_params_update, votes,
13};
14
15#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
16#[diesel(table_name = order_updates, primary_key(event_digest))]
17pub struct OrderUpdate {
18    pub event_digest: String,
19    pub digest: String,
20    pub sender: String,
21    pub checkpoint: i64,
22    pub checkpoint_timestamp_ms: i64,
23    pub package: String,
24    pub status: String,
25    pub pool_id: String,
26    pub order_id: String, // u128
27    pub client_order_id: i64,
28    pub price: i64,
29    pub is_bid: bool,
30    pub original_quantity: i64,
31    pub quantity: i64,
32    pub filled_quantity: i64,
33    pub onchain_timestamp: i64,
34    pub trader: String,
35    pub balance_manager_id: String,
36}
37
38#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
39#[diesel(table_name = order_fills, primary_key(event_digest))]
40pub struct OrderFill {
41    pub event_digest: String,
42    pub digest: String,
43    pub sender: String,
44    pub checkpoint: i64,
45    pub checkpoint_timestamp_ms: i64,
46    pub package: String,
47    pub pool_id: String,
48    pub maker_order_id: String, // u128
49    pub taker_order_id: String, // u128
50    pub maker_client_order_id: i64,
51    pub taker_client_order_id: i64,
52    pub price: i64,
53    pub taker_fee: i64,
54    pub taker_fee_is_deep: bool,
55    pub maker_fee: i64,
56    pub maker_fee_is_deep: bool,
57    pub taker_is_bid: bool,
58    pub base_quantity: i64,
59    pub quote_quantity: i64,
60    pub maker_balance_manager_id: String,
61    pub taker_balance_manager_id: String,
62    pub onchain_timestamp: i64,
63}
64
65#[derive(Queryable)]
66pub struct OrderFillSummary {
67    pub pool_id: String,
68    pub maker_balance_manager_id: String,
69    pub taker_balance_manager_id: String,
70    pub quantity: i64,
71}
72
73#[derive(QueryableByName, Debug, Serialize)]
74#[diesel(table_name = balances_summary)]
75pub struct BalancesSummary {
76    pub asset: String,
77    pub amount: i64,
78    pub deposit: bool,
79}
80
81#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
82#[diesel(table_name = flashloans, primary_key(event_digest))]
83pub struct Flashloan {
84    pub event_digest: String,
85    pub digest: String,
86    pub sender: String,
87    pub checkpoint: i64,
88    pub checkpoint_timestamp_ms: i64,
89    pub package: String,
90    pub pool_id: String,
91    pub borrow_quantity: i64,
92    pub borrow: bool,
93    pub type_name: String,
94}
95
96#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
97#[diesel(table_name = pool_prices, primary_key(event_digest))]
98pub struct PoolPrice {
99    pub event_digest: String,
100    pub digest: String,
101    pub sender: String,
102    pub checkpoint: i64,
103    pub checkpoint_timestamp_ms: i64,
104    pub package: String,
105    pub target_pool: String,
106    pub reference_pool: String,
107    pub conversion_rate: i64,
108}
109
110#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
111#[diesel(table_name = balances, primary_key(event_digest))]
112pub struct Balances {
113    pub event_digest: String,
114    pub digest: String,
115    pub sender: String,
116    pub checkpoint: i64,
117    pub checkpoint_timestamp_ms: i64,
118    pub package: String,
119    pub balance_manager_id: String,
120    pub asset: String,
121    pub amount: i64,
122    pub deposit: bool,
123}
124
125#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
126#[diesel(table_name = proposals, primary_key(event_digest))]
127pub struct Proposals {
128    pub event_digest: String,
129    pub digest: String,
130    pub sender: String,
131    pub checkpoint: i64,
132    pub checkpoint_timestamp_ms: i64,
133    pub package: String,
134    pub pool_id: String,
135    pub balance_manager_id: String,
136    pub epoch: i64,
137    pub taker_fee: i64,
138    pub maker_fee: i64,
139    pub stake_required: i64,
140}
141
142#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
143#[diesel(table_name = rebates, primary_key(event_digest))]
144pub struct Rebates {
145    pub event_digest: String,
146    pub digest: String,
147    pub sender: String,
148    pub checkpoint: i64,
149    pub checkpoint_timestamp_ms: i64,
150    pub package: String,
151    pub pool_id: String,
152    pub balance_manager_id: String,
153    pub epoch: i64,
154    pub claim_amount: i64,
155}
156
157#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
158#[diesel(table_name = stakes, primary_key(event_digest))]
159pub struct Stakes {
160    pub event_digest: String,
161    pub digest: String,
162    pub sender: String,
163    pub checkpoint: i64,
164    pub checkpoint_timestamp_ms: i64,
165    pub package: String,
166    pub pool_id: String,
167    pub balance_manager_id: String,
168    pub epoch: i64,
169    pub amount: i64,
170    pub stake: bool,
171}
172
173#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
174#[diesel(table_name = trade_params_update, primary_key(event_digest))]
175pub struct TradeParamsUpdate {
176    pub event_digest: String,
177    pub digest: String,
178    pub sender: String,
179    pub checkpoint: i64,
180    pub checkpoint_timestamp_ms: i64,
181    pub package: String,
182    pub pool_id: String,
183    pub taker_fee: i64,
184    pub maker_fee: i64,
185    pub stake_required: i64,
186}
187
188#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
189#[diesel(table_name = votes, primary_key(event_digest))]
190pub struct Votes {
191    pub event_digest: String,
192    pub digest: String,
193    pub sender: String,
194    pub checkpoint: i64,
195    pub checkpoint_timestamp_ms: i64,
196    pub package: String,
197    pub pool_id: String,
198    pub balance_manager_id: String,
199    pub epoch: i64,
200    pub from_proposal_id: Option<String>,
201    pub to_proposal_id: String,
202    pub stake: i64,
203}
204
205#[derive(Queryable, Selectable, Insertable, Identifiable, Debug, Serialize)]
206#[diesel(table_name = pools, primary_key(pool_id))]
207pub struct Pools {
208    pub pool_id: String,
209    pub pool_name: String,
210    pub base_asset_id: String,
211    pub base_asset_decimals: i16,
212    pub base_asset_symbol: String,
213    pub base_asset_name: String,
214    pub quote_asset_id: String,
215    pub quote_asset_decimals: i16,
216    pub quote_asset_symbol: String,
217    pub quote_asset_name: String,
218    pub min_size: i32,
219    pub lot_size: i32,
220    pub tick_size: i32,
221}
222
223#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
224#[diesel(table_name = sui_error_transactions, primary_key(txn_digest))]
225pub struct SuiErrorTransactions {
226    pub txn_digest: String,
227    pub sender_address: String,
228    pub timestamp_ms: i64,
229    pub failure_status: String,
230    pub package: String,
231    pub cmd_idx: Option<i64>,
232}
233
234#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
235#[diesel(table_name = progress_store, primary_key(task_name))]
236pub struct ProgressStore {
237    pub task_name: String,
238    pub checkpoint: i64,
239    pub target_checkpoint: i64,
240    pub timestamp: Option<PgTimestamp>,
241}
242
243impl From<ProgressStore> for Task {
244    fn from(value: ProgressStore) -> Self {
245        Self {
246            task_name: value.task_name,
247            start_checkpoint: value.checkpoint as u64,
248            target_checkpoint: value.target_checkpoint as u64,
249            // Ok to unwrap, timestamp is defaulted to now() in database
250            timestamp: value.timestamp.expect("Timestamp not set").0 as u64,
251            is_live_task: value.target_checkpoint == LIVE_TASK_TARGET_CHECKPOINT,
252        }
253    }
254}