td_program_sdk/instructions/
initialize_player.rs

1use std::slice::from_raw_parts;
2
3use solana_sdk::{
4    instruction::{AccountMeta, Instruction}, pubkey::Pubkey, system_program
5};
6
7use crate::PROGRAM_ID;
8
9use super::{write_bytes, InstructionDiscriminator, UNINIT_BYTE};
10
11#[inline(always)]
12pub fn initialize_player(player: &Pubkey, signer: &Pubkey, bump: u8) -> Instruction {
13    let account_metas: [AccountMeta; 3] = [
14        AccountMeta::new(*player, false),
15        AccountMeta::new(*signer, true),
16        AccountMeta::new_readonly(system_program::ID, false),
17    ];
18
19    // Instruction data layout:
20    // -  [0]: instruction discriminator (1 byte, u8)
21    // -  [1..9]: last_time_played (8 byte, u64)
22    // -  [8]: bump (1 byte, u8)
23    let data_len = 10;
24
25    let mut instruction_data = vec![UNINIT_BYTE; data_len];
26    write_bytes(
27        &mut instruction_data,
28        &[InstructionDiscriminator::InitializePlayer as u8],
29    );
30    write_bytes(&mut instruction_data[1..2], &bump.to_le_bytes());
31
32    Instruction {
33        program_id: PROGRAM_ID,
34        accounts: account_metas.to_vec(),
35        data: unsafe { from_raw_parts(instruction_data.as_ptr() as _, data_len).to_vec() },
36    }
37}