1use borsh::{BorshDeserialize, BorshSerialize};
9
10pub const INSTANT_UPDATE_LIMIT_ORDER_DISCRIMINATOR: [u8; 8] =
11 [136, 245, 229, 58, 121, 141, 12, 207];
12
13#[derive(Debug)]
15pub struct InstantUpdateLimitOrder {
16 pub keeper: solana_program::pubkey::Pubkey,
17
18 pub api_keeper: solana_program::pubkey::Pubkey,
19
20 pub owner: solana_program::pubkey::Pubkey,
21
22 pub perpetuals: solana_program::pubkey::Pubkey,
23
24 pub pool: solana_program::pubkey::Pubkey,
25
26 pub position: solana_program::pubkey::Pubkey,
27
28 pub position_request: solana_program::pubkey::Pubkey,
29
30 pub custody: solana_program::pubkey::Pubkey,
31
32 pub custody_doves_price_account: solana_program::pubkey::Pubkey,
33
34 pub custody_pythnet_price_account: solana_program::pubkey::Pubkey,
35}
36
37impl InstantUpdateLimitOrder {
38 pub fn instruction(
39 &self,
40 args: InstantUpdateLimitOrderInstructionArgs,
41 ) -> solana_program::instruction::Instruction {
42 self.instruction_with_remaining_accounts(args, &[])
43 }
44 #[allow(clippy::arithmetic_side_effects)]
45 #[allow(clippy::vec_init_then_push)]
46 pub fn instruction_with_remaining_accounts(
47 &self,
48 args: InstantUpdateLimitOrderInstructionArgs,
49 remaining_accounts: &[solana_program::instruction::AccountMeta],
50 ) -> solana_program::instruction::Instruction {
51 let mut accounts = Vec::with_capacity(10 + remaining_accounts.len());
52 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
53 self.keeper,
54 true,
55 ));
56 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
57 self.api_keeper,
58 true,
59 ));
60 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
61 self.owner, true,
62 ));
63 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
64 self.perpetuals,
65 false,
66 ));
67 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
68 self.pool, false,
69 ));
70 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
71 self.position,
72 false,
73 ));
74 accounts.push(solana_program::instruction::AccountMeta::new(
75 self.position_request,
76 false,
77 ));
78 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
79 self.custody,
80 false,
81 ));
82 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
83 self.custody_doves_price_account,
84 false,
85 ));
86 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
87 self.custody_pythnet_price_account,
88 false,
89 ));
90 accounts.extend_from_slice(remaining_accounts);
91 let mut data = borsh::to_vec(&InstantUpdateLimitOrderInstructionData::new()).unwrap();
92 let mut args = borsh::to_vec(&args).unwrap();
93 data.append(&mut args);
94
95 solana_program::instruction::Instruction {
96 program_id: crate::PERPETUALS_ID,
97 accounts,
98 data,
99 }
100 }
101}
102
103#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, PartialEq)]
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
105pub struct InstantUpdateLimitOrderInstructionData {
106 discriminator: [u8; 8],
107}
108
109impl InstantUpdateLimitOrderInstructionData {
110 pub fn new() -> Self {
111 Self {
112 discriminator: [136, 245, 229, 58, 121, 141, 12, 207],
113 }
114 }
115}
116
117impl Default for InstantUpdateLimitOrderInstructionData {
118 fn default() -> Self {
119 Self::new()
120 }
121}
122
123#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, PartialEq)]
124#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
125pub struct InstantUpdateLimitOrderInstructionArgs {
126 pub size_usd_delta: u64,
127 pub trigger_price: u64,
128 pub request_time: i64,
129}
130
131#[derive(Clone, Debug, Default)]
146pub struct InstantUpdateLimitOrderBuilder {
147 keeper: Option<solana_program::pubkey::Pubkey>,
148 api_keeper: Option<solana_program::pubkey::Pubkey>,
149 owner: Option<solana_program::pubkey::Pubkey>,
150 perpetuals: Option<solana_program::pubkey::Pubkey>,
151 pool: Option<solana_program::pubkey::Pubkey>,
152 position: Option<solana_program::pubkey::Pubkey>,
153 position_request: Option<solana_program::pubkey::Pubkey>,
154 custody: Option<solana_program::pubkey::Pubkey>,
155 custody_doves_price_account: Option<solana_program::pubkey::Pubkey>,
156 custody_pythnet_price_account: Option<solana_program::pubkey::Pubkey>,
157 size_usd_delta: Option<u64>,
158 trigger_price: Option<u64>,
159 request_time: Option<i64>,
160 __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
161}
162
163impl InstantUpdateLimitOrderBuilder {
164 pub fn new() -> Self {
165 Self::default()
166 }
167 #[inline(always)]
168 pub fn keeper(&mut self, keeper: solana_program::pubkey::Pubkey) -> &mut Self {
169 self.keeper = Some(keeper);
170 self
171 }
172 #[inline(always)]
173 pub fn api_keeper(&mut self, api_keeper: solana_program::pubkey::Pubkey) -> &mut Self {
174 self.api_keeper = Some(api_keeper);
175 self
176 }
177 #[inline(always)]
178 pub fn owner(&mut self, owner: solana_program::pubkey::Pubkey) -> &mut Self {
179 self.owner = Some(owner);
180 self
181 }
182 #[inline(always)]
183 pub fn perpetuals(&mut self, perpetuals: solana_program::pubkey::Pubkey) -> &mut Self {
184 self.perpetuals = Some(perpetuals);
185 self
186 }
187 #[inline(always)]
188 pub fn pool(&mut self, pool: solana_program::pubkey::Pubkey) -> &mut Self {
189 self.pool = Some(pool);
190 self
191 }
192 #[inline(always)]
193 pub fn position(&mut self, position: solana_program::pubkey::Pubkey) -> &mut Self {
194 self.position = Some(position);
195 self
196 }
197 #[inline(always)]
198 pub fn position_request(
199 &mut self,
200 position_request: solana_program::pubkey::Pubkey,
201 ) -> &mut Self {
202 self.position_request = Some(position_request);
203 self
204 }
205 #[inline(always)]
206 pub fn custody(&mut self, custody: solana_program::pubkey::Pubkey) -> &mut Self {
207 self.custody = Some(custody);
208 self
209 }
210 #[inline(always)]
211 pub fn custody_doves_price_account(
212 &mut self,
213 custody_doves_price_account: solana_program::pubkey::Pubkey,
214 ) -> &mut Self {
215 self.custody_doves_price_account = Some(custody_doves_price_account);
216 self
217 }
218 #[inline(always)]
219 pub fn custody_pythnet_price_account(
220 &mut self,
221 custody_pythnet_price_account: solana_program::pubkey::Pubkey,
222 ) -> &mut Self {
223 self.custody_pythnet_price_account = Some(custody_pythnet_price_account);
224 self
225 }
226 #[inline(always)]
227 pub fn size_usd_delta(&mut self, size_usd_delta: u64) -> &mut Self {
228 self.size_usd_delta = Some(size_usd_delta);
229 self
230 }
231 #[inline(always)]
232 pub fn trigger_price(&mut self, trigger_price: u64) -> &mut Self {
233 self.trigger_price = Some(trigger_price);
234 self
235 }
236 #[inline(always)]
237 pub fn request_time(&mut self, request_time: i64) -> &mut Self {
238 self.request_time = Some(request_time);
239 self
240 }
241 #[inline(always)]
243 pub fn add_remaining_account(
244 &mut self,
245 account: solana_program::instruction::AccountMeta,
246 ) -> &mut Self {
247 self.__remaining_accounts.push(account);
248 self
249 }
250 #[inline(always)]
252 pub fn add_remaining_accounts(
253 &mut self,
254 accounts: &[solana_program::instruction::AccountMeta],
255 ) -> &mut Self {
256 self.__remaining_accounts.extend_from_slice(accounts);
257 self
258 }
259 #[allow(clippy::clone_on_copy)]
260 pub fn instruction(&self) -> solana_program::instruction::Instruction {
261 let accounts = InstantUpdateLimitOrder {
262 keeper: self.keeper.expect("keeper is not set"),
263 api_keeper: self.api_keeper.expect("api_keeper is not set"),
264 owner: self.owner.expect("owner is not set"),
265 perpetuals: self.perpetuals.expect("perpetuals is not set"),
266 pool: self.pool.expect("pool is not set"),
267 position: self.position.expect("position is not set"),
268 position_request: self.position_request.expect("position_request is not set"),
269 custody: self.custody.expect("custody is not set"),
270 custody_doves_price_account: self
271 .custody_doves_price_account
272 .expect("custody_doves_price_account is not set"),
273 custody_pythnet_price_account: self
274 .custody_pythnet_price_account
275 .expect("custody_pythnet_price_account is not set"),
276 };
277 let args = InstantUpdateLimitOrderInstructionArgs {
278 size_usd_delta: self
279 .size_usd_delta
280 .clone()
281 .expect("size_usd_delta is not set"),
282 trigger_price: self
283 .trigger_price
284 .clone()
285 .expect("trigger_price is not set"),
286 request_time: self.request_time.clone().expect("request_time is not set"),
287 };
288
289 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
290 }
291}
292
293pub struct InstantUpdateLimitOrderCpiAccounts<'a, 'b> {
295 pub keeper: &'b solana_program::account_info::AccountInfo<'a>,
296
297 pub api_keeper: &'b solana_program::account_info::AccountInfo<'a>,
298
299 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
300
301 pub perpetuals: &'b solana_program::account_info::AccountInfo<'a>,
302
303 pub pool: &'b solana_program::account_info::AccountInfo<'a>,
304
305 pub position: &'b solana_program::account_info::AccountInfo<'a>,
306
307 pub position_request: &'b solana_program::account_info::AccountInfo<'a>,
308
309 pub custody: &'b solana_program::account_info::AccountInfo<'a>,
310
311 pub custody_doves_price_account: &'b solana_program::account_info::AccountInfo<'a>,
312
313 pub custody_pythnet_price_account: &'b solana_program::account_info::AccountInfo<'a>,
314}
315
316pub struct InstantUpdateLimitOrderCpi<'a, 'b> {
318 pub __program: &'b solana_program::account_info::AccountInfo<'a>,
320
321 pub keeper: &'b solana_program::account_info::AccountInfo<'a>,
322
323 pub api_keeper: &'b solana_program::account_info::AccountInfo<'a>,
324
325 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
326
327 pub perpetuals: &'b solana_program::account_info::AccountInfo<'a>,
328
329 pub pool: &'b solana_program::account_info::AccountInfo<'a>,
330
331 pub position: &'b solana_program::account_info::AccountInfo<'a>,
332
333 pub position_request: &'b solana_program::account_info::AccountInfo<'a>,
334
335 pub custody: &'b solana_program::account_info::AccountInfo<'a>,
336
337 pub custody_doves_price_account: &'b solana_program::account_info::AccountInfo<'a>,
338
339 pub custody_pythnet_price_account: &'b solana_program::account_info::AccountInfo<'a>,
340 pub __args: InstantUpdateLimitOrderInstructionArgs,
342}
343
344impl<'a, 'b> InstantUpdateLimitOrderCpi<'a, 'b> {
345 pub fn new(
346 program: &'b solana_program::account_info::AccountInfo<'a>,
347 accounts: InstantUpdateLimitOrderCpiAccounts<'a, 'b>,
348 args: InstantUpdateLimitOrderInstructionArgs,
349 ) -> Self {
350 Self {
351 __program: program,
352 keeper: accounts.keeper,
353 api_keeper: accounts.api_keeper,
354 owner: accounts.owner,
355 perpetuals: accounts.perpetuals,
356 pool: accounts.pool,
357 position: accounts.position,
358 position_request: accounts.position_request,
359 custody: accounts.custody,
360 custody_doves_price_account: accounts.custody_doves_price_account,
361 custody_pythnet_price_account: accounts.custody_pythnet_price_account,
362 __args: args,
363 }
364 }
365 #[inline(always)]
366 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
367 self.invoke_signed_with_remaining_accounts(&[], &[])
368 }
369 #[inline(always)]
370 pub fn invoke_with_remaining_accounts(
371 &self,
372 remaining_accounts: &[(
373 &'b solana_program::account_info::AccountInfo<'a>,
374 bool,
375 bool,
376 )],
377 ) -> solana_program::entrypoint::ProgramResult {
378 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
379 }
380 #[inline(always)]
381 pub fn invoke_signed(
382 &self,
383 signers_seeds: &[&[&[u8]]],
384 ) -> solana_program::entrypoint::ProgramResult {
385 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
386 }
387 #[allow(clippy::arithmetic_side_effects)]
388 #[allow(clippy::clone_on_copy)]
389 #[allow(clippy::vec_init_then_push)]
390 pub fn invoke_signed_with_remaining_accounts(
391 &self,
392 signers_seeds: &[&[&[u8]]],
393 remaining_accounts: &[(
394 &'b solana_program::account_info::AccountInfo<'a>,
395 bool,
396 bool,
397 )],
398 ) -> solana_program::entrypoint::ProgramResult {
399 let mut accounts = Vec::with_capacity(10 + remaining_accounts.len());
400 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
401 *self.keeper.key,
402 true,
403 ));
404 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
405 *self.api_keeper.key,
406 true,
407 ));
408 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
409 *self.owner.key,
410 true,
411 ));
412 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
413 *self.perpetuals.key,
414 false,
415 ));
416 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
417 *self.pool.key,
418 false,
419 ));
420 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
421 *self.position.key,
422 false,
423 ));
424 accounts.push(solana_program::instruction::AccountMeta::new(
425 *self.position_request.key,
426 false,
427 ));
428 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
429 *self.custody.key,
430 false,
431 ));
432 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
433 *self.custody_doves_price_account.key,
434 false,
435 ));
436 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
437 *self.custody_pythnet_price_account.key,
438 false,
439 ));
440 remaining_accounts.iter().for_each(|remaining_account| {
441 accounts.push(solana_program::instruction::AccountMeta {
442 pubkey: *remaining_account.0.key,
443 is_signer: remaining_account.1,
444 is_writable: remaining_account.2,
445 })
446 });
447 let mut data = borsh::to_vec(&InstantUpdateLimitOrderInstructionData::new()).unwrap();
448 let mut args = borsh::to_vec(&self.__args).unwrap();
449 data.append(&mut args);
450
451 let instruction = solana_program::instruction::Instruction {
452 program_id: crate::PERPETUALS_ID,
453 accounts,
454 data,
455 };
456 let mut account_infos = Vec::with_capacity(11 + remaining_accounts.len());
457 account_infos.push(self.__program.clone());
458 account_infos.push(self.keeper.clone());
459 account_infos.push(self.api_keeper.clone());
460 account_infos.push(self.owner.clone());
461 account_infos.push(self.perpetuals.clone());
462 account_infos.push(self.pool.clone());
463 account_infos.push(self.position.clone());
464 account_infos.push(self.position_request.clone());
465 account_infos.push(self.custody.clone());
466 account_infos.push(self.custody_doves_price_account.clone());
467 account_infos.push(self.custody_pythnet_price_account.clone());
468 remaining_accounts
469 .iter()
470 .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
471
472 if signers_seeds.is_empty() {
473 solana_program::program::invoke(&instruction, &account_infos)
474 } else {
475 solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
476 }
477 }
478}
479
480#[derive(Clone, Debug)]
495pub struct InstantUpdateLimitOrderCpiBuilder<'a, 'b> {
496 instruction: Box<InstantUpdateLimitOrderCpiBuilderInstruction<'a, 'b>>,
497}
498
499impl<'a, 'b> InstantUpdateLimitOrderCpiBuilder<'a, 'b> {
500 pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
501 let instruction = Box::new(InstantUpdateLimitOrderCpiBuilderInstruction {
502 __program: program,
503 keeper: None,
504 api_keeper: None,
505 owner: None,
506 perpetuals: None,
507 pool: None,
508 position: None,
509 position_request: None,
510 custody: None,
511 custody_doves_price_account: None,
512 custody_pythnet_price_account: None,
513 size_usd_delta: None,
514 trigger_price: None,
515 request_time: None,
516 __remaining_accounts: Vec::new(),
517 });
518 Self { instruction }
519 }
520 #[inline(always)]
521 pub fn keeper(
522 &mut self,
523 keeper: &'b solana_program::account_info::AccountInfo<'a>,
524 ) -> &mut Self {
525 self.instruction.keeper = Some(keeper);
526 self
527 }
528 #[inline(always)]
529 pub fn api_keeper(
530 &mut self,
531 api_keeper: &'b solana_program::account_info::AccountInfo<'a>,
532 ) -> &mut Self {
533 self.instruction.api_keeper = Some(api_keeper);
534 self
535 }
536 #[inline(always)]
537 pub fn owner(&mut self, owner: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
538 self.instruction.owner = Some(owner);
539 self
540 }
541 #[inline(always)]
542 pub fn perpetuals(
543 &mut self,
544 perpetuals: &'b solana_program::account_info::AccountInfo<'a>,
545 ) -> &mut Self {
546 self.instruction.perpetuals = Some(perpetuals);
547 self
548 }
549 #[inline(always)]
550 pub fn pool(&mut self, pool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
551 self.instruction.pool = Some(pool);
552 self
553 }
554 #[inline(always)]
555 pub fn position(
556 &mut self,
557 position: &'b solana_program::account_info::AccountInfo<'a>,
558 ) -> &mut Self {
559 self.instruction.position = Some(position);
560 self
561 }
562 #[inline(always)]
563 pub fn position_request(
564 &mut self,
565 position_request: &'b solana_program::account_info::AccountInfo<'a>,
566 ) -> &mut Self {
567 self.instruction.position_request = Some(position_request);
568 self
569 }
570 #[inline(always)]
571 pub fn custody(
572 &mut self,
573 custody: &'b solana_program::account_info::AccountInfo<'a>,
574 ) -> &mut Self {
575 self.instruction.custody = Some(custody);
576 self
577 }
578 #[inline(always)]
579 pub fn custody_doves_price_account(
580 &mut self,
581 custody_doves_price_account: &'b solana_program::account_info::AccountInfo<'a>,
582 ) -> &mut Self {
583 self.instruction.custody_doves_price_account = Some(custody_doves_price_account);
584 self
585 }
586 #[inline(always)]
587 pub fn custody_pythnet_price_account(
588 &mut self,
589 custody_pythnet_price_account: &'b solana_program::account_info::AccountInfo<'a>,
590 ) -> &mut Self {
591 self.instruction.custody_pythnet_price_account = Some(custody_pythnet_price_account);
592 self
593 }
594 #[inline(always)]
595 pub fn size_usd_delta(&mut self, size_usd_delta: u64) -> &mut Self {
596 self.instruction.size_usd_delta = Some(size_usd_delta);
597 self
598 }
599 #[inline(always)]
600 pub fn trigger_price(&mut self, trigger_price: u64) -> &mut Self {
601 self.instruction.trigger_price = Some(trigger_price);
602 self
603 }
604 #[inline(always)]
605 pub fn request_time(&mut self, request_time: i64) -> &mut Self {
606 self.instruction.request_time = Some(request_time);
607 self
608 }
609 #[inline(always)]
611 pub fn add_remaining_account(
612 &mut self,
613 account: &'b solana_program::account_info::AccountInfo<'a>,
614 is_writable: bool,
615 is_signer: bool,
616 ) -> &mut Self {
617 self.instruction
618 .__remaining_accounts
619 .push((account, is_writable, is_signer));
620 self
621 }
622 #[inline(always)]
627 pub fn add_remaining_accounts(
628 &mut self,
629 accounts: &[(
630 &'b solana_program::account_info::AccountInfo<'a>,
631 bool,
632 bool,
633 )],
634 ) -> &mut Self {
635 self.instruction
636 .__remaining_accounts
637 .extend_from_slice(accounts);
638 self
639 }
640 #[inline(always)]
641 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
642 self.invoke_signed(&[])
643 }
644 #[allow(clippy::clone_on_copy)]
645 #[allow(clippy::vec_init_then_push)]
646 pub fn invoke_signed(
647 &self,
648 signers_seeds: &[&[&[u8]]],
649 ) -> solana_program::entrypoint::ProgramResult {
650 let args = InstantUpdateLimitOrderInstructionArgs {
651 size_usd_delta: self
652 .instruction
653 .size_usd_delta
654 .clone()
655 .expect("size_usd_delta is not set"),
656 trigger_price: self
657 .instruction
658 .trigger_price
659 .clone()
660 .expect("trigger_price is not set"),
661 request_time: self
662 .instruction
663 .request_time
664 .clone()
665 .expect("request_time is not set"),
666 };
667 let instruction = InstantUpdateLimitOrderCpi {
668 __program: self.instruction.__program,
669
670 keeper: self.instruction.keeper.expect("keeper is not set"),
671
672 api_keeper: self.instruction.api_keeper.expect("api_keeper is not set"),
673
674 owner: self.instruction.owner.expect("owner is not set"),
675
676 perpetuals: self.instruction.perpetuals.expect("perpetuals is not set"),
677
678 pool: self.instruction.pool.expect("pool is not set"),
679
680 position: self.instruction.position.expect("position is not set"),
681
682 position_request: self
683 .instruction
684 .position_request
685 .expect("position_request is not set"),
686
687 custody: self.instruction.custody.expect("custody is not set"),
688
689 custody_doves_price_account: self
690 .instruction
691 .custody_doves_price_account
692 .expect("custody_doves_price_account is not set"),
693
694 custody_pythnet_price_account: self
695 .instruction
696 .custody_pythnet_price_account
697 .expect("custody_pythnet_price_account is not set"),
698 __args: args,
699 };
700 instruction.invoke_signed_with_remaining_accounts(
701 signers_seeds,
702 &self.instruction.__remaining_accounts,
703 )
704 }
705}
706
707#[derive(Clone, Debug)]
708struct InstantUpdateLimitOrderCpiBuilderInstruction<'a, 'b> {
709 __program: &'b solana_program::account_info::AccountInfo<'a>,
710 keeper: Option<&'b solana_program::account_info::AccountInfo<'a>>,
711 api_keeper: Option<&'b solana_program::account_info::AccountInfo<'a>>,
712 owner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
713 perpetuals: Option<&'b solana_program::account_info::AccountInfo<'a>>,
714 pool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
715 position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
716 position_request: Option<&'b solana_program::account_info::AccountInfo<'a>>,
717 custody: Option<&'b solana_program::account_info::AccountInfo<'a>>,
718 custody_doves_price_account: Option<&'b solana_program::account_info::AccountInfo<'a>>,
719 custody_pythnet_price_account: Option<&'b solana_program::account_info::AccountInfo<'a>>,
720 size_usd_delta: Option<u64>,
721 trigger_price: Option<u64>,
722 request_time: Option<i64>,
723 __remaining_accounts: Vec<(
725 &'b solana_program::account_info::AccountInfo<'a>,
726 bool,
727 bool,
728 )>,
729}