manifest/program/processor/
claim_seat.rs1use std::cell::RefMut;
2
3use crate::{
4 logs::{emit_stack, ClaimSeatLog},
5 state::{MarketFixed, MarketRefMut},
6 validation::{loaders::ClaimSeatContext, ManifestAccountInfo, Signer},
7};
8use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey};
9
10use super::shared::{expand_market_if_needed, get_mut_dynamic_account};
11
12#[cfg(feature = "certora")]
13use early_panic::early_panic;
14
15#[cfg_attr(all(feature = "certora", not(feature = "certora-test")), early_panic)]
16pub(crate) fn process_claim_seat(
17 _program_id: &Pubkey,
18 accounts: &[AccountInfo],
19 _data: &[u8],
20) -> ProgramResult {
21 let claim_seat_context: ClaimSeatContext = ClaimSeatContext::load(accounts)?;
22 let ClaimSeatContext { market, payer, .. } = claim_seat_context;
23
24 process_claim_seat_internal(&market, &payer)?;
25
26 expand_market_if_needed(&payer, &market)?;
28
29 Ok(())
30}
31
32#[cfg_attr(all(feature = "certora", not(feature = "certora-test")), early_panic)]
33pub(crate) fn process_claim_seat_internal<'a, 'info>(
34 market: &ManifestAccountInfo<'a, 'info, MarketFixed>,
35 payer: &Signer<'a, 'info>,
36) -> ProgramResult {
37 let market_data: &mut RefMut<&mut [u8]> = &mut market.try_borrow_mut_data()?;
38 let mut dynamic_account: MarketRefMut = get_mut_dynamic_account(market_data);
39 dynamic_account.claim_seat(payer.key)?;
40
41 emit_stack(ClaimSeatLog {
42 market: *market.key,
43 trader: *payer.key,
44 })?;
45
46 Ok(())
47}