1use crate::state::markets::MarketEvent;
2use borsh::{BorshDeserialize, BorshSerialize};
3use solana_program::pubkey::Pubkey;
4
5#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
6pub struct AuditLogHeader {
7 pub instruction: u8,
8 pub sequence_number: u64,
9 pub timestamp: i64,
10 pub slot: u64,
11 pub market: Pubkey,
12 pub signer: Pubkey,
13 pub total_events: u16,
14}
15
16#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
17pub struct FillEvent {
18 pub index: u16,
19 pub maker_id: Pubkey,
20 pub order_sequence_number: u64,
21 pub price_in_ticks: u64,
22 pub base_lots_filled: u64,
23 pub base_lots_remaining: u64,
24}
25
26#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
27pub struct ReduceEvent {
28 pub index: u16,
29 pub order_sequence_number: u64,
30 pub price_in_ticks: u64,
31 pub base_lots_removed: u64,
32 pub base_lots_remaining: u64,
33}
34
35#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
36pub struct PlaceEvent {
37 pub index: u16,
38 pub order_sequence_number: u64,
39 pub client_order_id: u128,
40 pub price_in_ticks: u64,
41 pub base_lots_placed: u64,
42}
43
44#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
45pub struct EvictEvent {
46 pub index: u16,
47 pub maker_id: Pubkey,
48 pub order_sequence_number: u64,
49 pub price_in_ticks: u64,
50 pub base_lots_evicted: u64,
51}
52
53#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
54pub struct FillSummaryEvent {
55 pub index: u16,
56 pub client_order_id: u128,
57 pub total_base_lots_filled: u64,
58 pub total_quote_lots_filled: u64,
59 pub total_fee_in_quote_lots: u64,
60}
61
62#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
63pub struct FeeEvent {
64 pub index: u16,
65 pub fees_collected_in_quote_lots: u64,
66}
67
68#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
69pub struct TimeInForceEvent {
70 pub index: u16,
71 pub order_sequence_number: u64,
72 pub last_valid_slot: u64,
73 pub last_valid_unix_timestamp_in_seconds: u64,
74}
75
76#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
77pub struct ExpiredOrderEvent {
78 pub index: u16,
79 pub maker_id: Pubkey,
80 pub order_sequence_number: u64,
81 pub price_in_ticks: u64,
82 pub base_lots_removed: u64,
83}
84
85#[derive(Debug, Copy, Clone, BorshDeserialize, BorshSerialize)]
86pub enum PhoenixMarketEvent {
87 Uninitialized,
88 Header(AuditLogHeader),
89 Fill(FillEvent),
90 Place(PlaceEvent),
91 Reduce(ReduceEvent),
92 Evict(EvictEvent),
93 FillSummary(FillSummaryEvent),
94 Fee(FeeEvent),
95 TimeInForce(TimeInForceEvent),
96 ExpiredOrder(ExpiredOrderEvent),
97}
98
99impl Default for PhoenixMarketEvent {
100 fn default() -> Self {
101 Self::Uninitialized
102 }
103}
104
105impl PhoenixMarketEvent {
106 pub fn set_index(&mut self, i: u16) {
107 match self {
108 Self::Fill(FillEvent { index, .. }) => *index = i,
109 Self::Place(PlaceEvent { index, .. }) => *index = i,
110 Self::Reduce(ReduceEvent { index, .. }) => *index = i,
111 Self::FillSummary(FillSummaryEvent { index, .. }) => *index = i,
112 Self::Evict(EvictEvent { index, .. }) => *index = i,
113 Self::Fee(FeeEvent { index, .. }) => *index = i,
114 Self::TimeInForce(TimeInForceEvent { index, .. }) => *index = i,
115 Self::ExpiredOrder(ExpiredOrderEvent { index, .. }) => *index = i,
116 _ => panic!("Cannot set index on uninitialized or header event"),
117 }
118 }
119}
120
121impl From<MarketEvent<Pubkey>> for PhoenixMarketEvent {
122 fn from(e: MarketEvent<Pubkey>) -> Self {
123 match e {
124 MarketEvent::<Pubkey>::Fill {
125 maker_id,
126 order_sequence_number,
127 price_in_ticks,
128 base_lots_filled,
129 base_lots_remaining,
130 } => Self::Fill(FillEvent {
131 maker_id,
132 order_sequence_number,
133 price_in_ticks: price_in_ticks.into(),
134 base_lots_filled: base_lots_filled.into(),
135 base_lots_remaining: base_lots_remaining.into(),
136 index: 0,
137 }),
138 MarketEvent::<Pubkey>::Place {
139 order_sequence_number,
140 client_order_id,
141 price_in_ticks,
142 base_lots_placed,
143 } => Self::Place(PlaceEvent {
144 order_sequence_number,
145 client_order_id,
146 price_in_ticks: price_in_ticks.into(),
147 base_lots_placed: base_lots_placed.into(),
148 index: 0,
149 }),
150 MarketEvent::<Pubkey>::Reduce {
151 order_sequence_number,
152 price_in_ticks,
153 base_lots_removed,
154 base_lots_remaining,
155 } => Self::Reduce(ReduceEvent {
156 order_sequence_number,
157 price_in_ticks: price_in_ticks.into(),
158 base_lots_removed: base_lots_removed.into(),
159 base_lots_remaining: base_lots_remaining.into(),
160 index: 0,
161 }),
162 MarketEvent::<Pubkey>::Evict {
163 maker_id,
164 order_sequence_number,
165 price_in_ticks,
166 base_lots_evicted,
167 } => Self::Evict(EvictEvent {
168 maker_id,
169 order_sequence_number,
170 price_in_ticks: price_in_ticks.into(),
171 base_lots_evicted: base_lots_evicted.into(),
172 index: 0,
173 }),
174 MarketEvent::<Pubkey>::FillSummary {
175 client_order_id,
176 total_base_lots_filled,
177 total_quote_lots_filled,
178 total_fee_in_quote_lots,
179 } => Self::FillSummary(FillSummaryEvent {
180 client_order_id,
181 total_base_lots_filled: total_base_lots_filled.into(),
182 total_quote_lots_filled: total_quote_lots_filled.into(),
183 total_fee_in_quote_lots: total_fee_in_quote_lots.into(),
184 index: 0,
185 }),
186 MarketEvent::<Pubkey>::Fee {
187 fees_collected_in_quote_lots,
188 } => Self::Fee(FeeEvent {
189 fees_collected_in_quote_lots: fees_collected_in_quote_lots.into(),
190 index: 0,
191 }),
192 MarketEvent::<Pubkey>::TimeInForce {
193 order_sequence_number,
194 last_valid_slot,
195 last_valid_unix_timestamp_in_seconds,
196 } => Self::TimeInForce(TimeInForceEvent {
197 order_sequence_number,
198 last_valid_slot,
199 last_valid_unix_timestamp_in_seconds,
200 index: 0,
201 }),
202 MarketEvent::<Pubkey>::ExpiredOrder {
203 maker_id,
204 order_sequence_number,
205 price_in_ticks,
206 base_lots_removed,
207 } => Self::ExpiredOrder(ExpiredOrderEvent {
208 maker_id,
209 order_sequence_number,
210 price_in_ticks: price_in_ticks.into(),
211 base_lots_removed: base_lots_removed.into(),
212 index: 0,
213 }),
214 }
215 }
216}