hypercall_runtime_api/boundary/
engine.rs1use hypercall_db::{JournalCommandSummary, JournalFullRecord};
2use hypercall_types::EngineMessage;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Serialize, Deserialize, utoipa::ToSchema)]
7pub struct EngineStateDigest {
8 pub l2_seq: i64,
9 pub next_order_id: u64,
10 pub next_trade_id: u64,
11 pub overall_digest: String,
12 pub orders_digest: String,
13 pub orders_count: usize,
14 pub positions_digest: String,
15 pub positions_count: usize,
16 pub cash_digest: String,
17 pub cash_wallet_count: usize,
18 pub markets_digest: String,
19 pub expired_instruments_count: usize,
20 pub trading_modes_count: usize,
21 pub prices_digest: String,
22 pub spot_price_count: usize,
23 pub iv_surface_count: usize,
24 pub iv_source_timestamps_digest: String,
25 pub iv_source_timestamp_count: usize,
26 pub perp_positions_digest: String,
27 pub perp_positions_count: usize,
28 pub hypercore_equity_digest: String,
29 pub hypercore_equity_count: usize,
30 pub mmp_digest: String,
31 pub mmp_state_count: usize,
32 pub mmp_enabled_digest: String,
33 pub mmp_enabled_count: usize,
34 pub liquidation_states_digest: String,
35 pub liquidation_state_count: usize,
36 pub wallet_margin_modes_digest: String,
37 pub wallet_margin_mode_count: usize,
38 pub wallet_trading_limits_digest: String,
39 pub wallet_trading_limits_count: usize,
40 pub wallet_tiers_digest: String,
41 pub wallet_tier_count: usize,
42 pub deposit_watermarks_digest: String,
43 pub deposit_watermark_count: usize,
44 pub agent_auth_digest: String,
45 pub agent_auth_count: usize,
46 pub nonce_sets_digest: String,
47 pub nonce_signer_count: usize,
48}
49
50pub trait EngineStateDigestProvider: Send + Sync {
51 fn engine_state_digest(&self) -> EngineStateDigest;
52}
53
54#[async_trait::async_trait]
55pub trait TransactionRequestJournal: Send + Sync {
56 async fn persist_transaction_request(
57 &self,
58 timestamp: u64,
59 command_data: Vec<u8>,
60 message: EngineMessage,
61 request_uuid: uuid::Uuid,
62 ) -> anyhow::Result<()>;
63}
64
65pub trait EngineJournalReader: Send + Sync {
66 fn get_recent(&self, limit: usize) -> anyhow::Result<Vec<JournalCommandSummary>>;
67 fn get_by_request_id(
68 &self,
69 request_id: &uuid::Uuid,
70 ) -> anyhow::Result<Option<JournalFullRecord>>;
71}