manifest/program/processor/
global_add_trader.rs1use std::cell::RefMut;
2
3use hypertree::trace;
4use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey};
5
6use crate::{
7 logs::{emit_stack, GlobalAddTraderLog},
8 program::{expand_global, get_mut_dynamic_account},
9 state::GlobalRefMut,
10 validation::loaders::GlobalAddTraderContext,
11};
12
13pub(crate) fn process_global_add_trader(
14 _program_id: &Pubkey,
15 accounts: &[AccountInfo],
16 _data: &[u8],
17) -> ProgramResult {
18 trace!("process_global_add_trader accs={accounts:?}");
19 let global_add_trader_context: GlobalAddTraderContext = GlobalAddTraderContext::load(accounts)?;
20
21 let GlobalAddTraderContext { payer, global, .. } = global_add_trader_context;
22
23 expand_global(&payer, &global)?;
25
26 let global_data: &mut RefMut<&mut [u8]> = &mut global.try_borrow_mut_data()?;
27 let mut global_dynamic_account: GlobalRefMut = get_mut_dynamic_account(global_data);
28
29 global_dynamic_account.add_trader(payer.key)?;
30
31 emit_stack(GlobalAddTraderLog {
32 global: *global.key,
33 trader: *payer.key,
34 })?;
35
36 Ok(())
37}