1use num_enum::TryFromPrimitive;
2use shank::ShankInstruction;
3
4#[repr(u8)]
5#[derive(TryFromPrimitive, Debug, Copy, Clone, ShankInstruction, PartialEq, Eq)]
6#[rustfmt::skip]
7pub enum PhoenixInstruction {
8 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
11 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
12 #[account(2, writable, name = "market", desc = "This account holds the market state")]
13 #[account(3, signer, name = "trader")]
14 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
15 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
16 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
17 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
18 #[account(8, name = "token_program", desc = "Token program")]
19 Swap = 0,
20
21 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
23 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
24 #[account(2, writable, name = "market", desc = "This account holds the market state")]
25 #[account(3, signer, name = "trader")]
26 #[account(4, name = "seat")]
27 SwapWithFreeFunds = 1,
28
29 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
31 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
32 #[account(2, writable, name = "market", desc = "This account holds the market state")]
33 #[account(3, signer, name = "trader")]
34 #[account(4, name = "seat")]
35 #[account(5, writable, name = "base_account", desc = "Trader base token account")]
36 #[account(6, writable, name = "quote_account", desc = "Trader quote token account")]
37 #[account(7, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
38 #[account(8, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
39 #[account(9, name = "token_program", desc = "Token program")]
40 PlaceLimitOrder = 2,
41
42 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
44 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
45 #[account(2, writable, name = "market", desc = "This account holds the market state")]
46 #[account(3, signer, name = "trader")]
47 #[account(4, name = "seat")]
48 PlaceLimitOrderWithFreeFunds = 3,
49
50 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
52 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
53 #[account(2, writable, name = "market", desc = "This account holds the market state")]
54 #[account(3, signer, name = "trader")]
55 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
56 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
57 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
58 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
59 #[account(8, name = "token_program", desc = "Token program")]
60 ReduceOrder = 4,
61
62 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
64 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
65 #[account(2, writable, name = "market", desc = "This account holds the market state")]
66 #[account(3, writable, signer, name = "trader")]
67 ReduceOrderWithFreeFunds = 5,
68
69
70 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
72 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
73 #[account(2, writable, name = "market", desc = "This account holds the market state")]
74 #[account(3, signer, name = "trader")]
75 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
76 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
77 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
78 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
79 #[account(8, name = "token_program", desc = "Token program")]
80 CancelAllOrders = 6,
81
82 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
84 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
85 #[account(2, writable, name = "market", desc = "This account holds the market state")]
86 #[account(3, signer, name = "trader")]
87 CancelAllOrdersWithFreeFunds = 7,
88
89 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
91 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
92 #[account(2, writable, name = "market", desc = "This account holds the market state")]
93 #[account(3, signer, name = "trader")]
94 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
95 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
96 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
97 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
98 #[account(8, name = "token_program", desc = "Token program")]
99 CancelUpTo = 8,
100
101
102 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
104 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
105 #[account(2, writable, name = "market", desc = "This account holds the market state")]
106 #[account(3, signer, name = "trader")]
107 CancelUpToWithFreeFunds = 9,
108
109 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
111 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
112 #[account(2, writable, name = "market", desc = "This account holds the market state")]
113 #[account(3, signer, name = "trader")]
114 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
115 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
116 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
117 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
118 #[account(8, name = "token_program", desc = "Token program")]
119 CancelMultipleOrdersById = 10,
120
121 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
123 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
124 #[account(2, writable, name = "market", desc = "This account holds the market state")]
125 #[account(3, signer, name = "trader")]
126 CancelMultipleOrdersByIdWithFreeFunds = 11,
127
128 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
129 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
130 #[account(2, writable, name = "market", desc = "This account holds the market state")]
131 #[account(3, signer, name = "trader")]
132 #[account(4, writable, name = "base_account", desc = "Trader base token account")]
133 #[account(5, writable, name = "quote_account", desc = "Trader quote token account")]
134 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
135 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
136 #[account(8, name = "token_program", desc = "Token program")]
137 WithdrawFunds = 12,
138
139 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
140 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
141 #[account(2, writable, name = "market", desc = "This account holds the market state")]
142 #[account(3, signer, name = "trader")]
143 #[account(4, name = "seat")]
144 #[account(5, writable, name = "base_account", desc = "Trader base token account")]
145 #[account(6, writable, name = "quote_account", desc = "Trader quote token account")]
146 #[account(7, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
147 #[account(8, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
148 #[account(9, name = "token_program", desc = "Token program")]
149 DepositFunds = 13,
150
151 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
152 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
153 #[account(2, writable, name = "market", desc = "This account holds the market state")]
154 #[account(3, writable, signer, name = "payer")]
155 #[account(4, writable, name = "seat")]
156 #[account(5, name = "system_program", desc = "System program")]
157 RequestSeat = 14,
158
159 #[account(0, signer, name = "log_authority", desc = "Log authority")]
160 Log = 15,
161
162 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
165 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
166 #[account(2, writable, name = "market", desc = "This account holds the market state")]
167 #[account(3, signer, name = "trader")]
168 #[account(4, name = "seat")]
169 #[account(5, writable, name = "base_account", desc = "Trader base token account")]
170 #[account(6, writable, name = "quote_account", desc = "Trader quote token account")]
171 #[account(7, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
172 #[account(8, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
173 #[account(9, name = "token_program", desc = "Token program")]
174 PlaceMultiplePostOnlyOrders = 16,
175
176 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
179 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
180 #[account(2, writable, name = "market", desc = "This account holds the market state")]
181 #[account(3, signer, name = "trader")]
182 #[account(4, name = "seat")]
183 PlaceMultiplePostOnlyOrdersWithFreeFunds = 17,
184
185
186 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
189 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
190 #[account(2, writable, name = "market", desc = "This account holds the market state")]
191 #[account(3, writable, signer, name = "market_creator", desc = "The market_creator account must sign for the creation of new vaults")]
192 #[account(4, name = "base_mint", desc = "Base mint account")]
193 #[account(5, name = "quote_mint", desc = "Quote mint account")]
194 #[account(6, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
195 #[account(7, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
196 #[account(8, name = "system_program", desc = "System program")]
197 #[account(9, name = "token_program", desc = "Token program")]
198 InitializeMarket = 100,
199
200 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
201 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
202 #[account(2, writable, name = "market", desc = "This account holds the market state")]
203 #[account(3, signer, name = "successor", desc = "The successor account must sign to claim authority")]
204 ClaimAuthority = 101,
205
206 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
207 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
208 #[account(2, writable, name = "market", desc = "This account holds the market state")]
209 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to name successor")]
210 NameSuccessor = 102,
211
212 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
213 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
214 #[account(2, writable, name = "market", desc = "This account holds the market state")]
215 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to change market status")]
216 ChangeMarketStatus = 103,
217
218 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
219 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
220 #[account(2, writable, name = "market", desc = "This account holds the market state")]
221 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to change seat status")]
222 #[account(4, writable, name = "seat")]
223 ChangeSeatStatus = 104,
224
225 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
226 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
227 #[account(2, writable, name = "market", desc = "This account holds the market state")]
228 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to request a seat on behalf of a trader")]
229 #[account(4, writable, signer, name = "payer")]
230 #[account(5, name = "trader")]
231 #[account(6, writable, name = "seat")]
232 #[account(7, name = "system_program", desc = "System program")]
233 RequestSeatAuthorized = 105,
234
235 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
236 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
237 #[account(2, writable, name = "market", desc = "This account holds the market state")]
238 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to evict a seat")]
239 #[account(4, name = "trader")]
240 #[account(5, name = "seat", desc = "The trader's PDA seat account, seeds are [b'seat', market_address, trader_address]")]
241 #[account(6, writable, name = "base_account")]
242 #[account(7, writable, name = "quote_account")]
243 #[account(8, writable, name = "base_vault")]
244 #[account(9, writable, name = "quote_vault")]
245 #[account(10, name = "token_program", desc = "Token program")]
246 EvictSeat = 106,
247
248 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
249 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
250 #[account(2, writable, name = "market", desc = "This account holds the market state")]
251 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to claim authority")]
252 #[account(4, name = "trader")]
253 #[account(5, name = "seat", desc = "The trader's PDA seat account, seeds are [b'seat', market_address, trader_address]")]
254 #[account(6, writable, name = "base_account", desc = "Trader base token account")]
255 #[account(7, writable, name = "quote_account", desc = "Trader quote token account")]
256 #[account(8, writable, name = "base_vault", desc = "Base vault PDA, seeds are [b'vault', market_address, base_mint_address]")]
257 #[account(9, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
258 #[account(10, name = "token_program", desc = "Token program")]
259 ForceCancelOrders = 107,
260
261 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
262 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
263 #[account(2, writable, name = "market", desc = "This account holds the market state")]
264 #[account(3, signer, name = "sweeper", desc = "Signer of collect fees instruction")]
265 #[account(4, writable, name = "fee_recipient", desc = "Fee collector quote token account")]
266 #[account(5, writable, name = "quote_vault", desc = "Quote vault PDA, seeds are [b'vault', market_address, quote_mint_address]")]
267 #[account(6, name = "token_program", desc = "Token program")]
268 CollectFees = 108,
269
270 #[account(0, name = "phoenix_program", desc = "Phoenix program")]
271 #[account(1, name = "log_authority", desc = "Phoenix log authority")]
272 #[account(2, writable, name = "market", desc = "This account holds the market state")]
273 #[account(3, signer, name = "market_authority", desc = "The market_authority account must sign to change the free recipient")]
274 #[account(4, name = "new_fee_recipient", desc = "New fee recipient")]
275 ChangeFeeRecipient = 109,
276}
277
278impl PhoenixInstruction {
279 pub fn to_vec(&self) -> Vec<u8> {
280 vec![*self as u8]
281 }
282}
283
284#[test]
285fn test_instruction_serialization() {
286 for i in 0..=108 {
287 let instruction = match PhoenixInstruction::try_from(i) {
288 Ok(j) => j,
289 Err(_) => {
290 assert!(i < 100);
291 assert!(i > 17);
293 continue;
294 }
295 };
296 assert_eq!(instruction as u8, i);
297 }
298}