Skip to main content

nitro_da_blober/instructions/
initialize.rs

1use anchor_lang::{prelude::*, Discriminator};
2
3use crate::{state::blober::Blober, SEED};
4
5#[derive(Accounts)]
6#[instruction(namespace: String)]
7pub struct Initialize<'info> {
8    #[account(
9        init,
10        payer = payer,
11        space = Blober::DISCRIMINATOR.len() + Blober::INIT_SPACE,
12        seeds = [
13            SEED,
14            payer.key().as_ref(),
15            namespace.as_bytes()
16        ],
17        bump
18    )]
19    pub blober: Account<'info, Blober>,
20
21    #[account(mut)]
22    pub payer: Signer<'info>,
23
24    pub system_program: Program<'info, System>,
25}
26
27pub fn initialize_handler(
28    ctx: Context<Initialize>,
29    _namespace: String,
30    trusted: Pubkey,
31) -> Result<()> {
32    ctx.accounts.blober.caller = trusted;
33    Ok(())
34}
35
36#[cfg(test)]
37mod tests {
38    use anchor_lang::{
39        prelude::{AccountMeta, Pubkey},
40        ToAccountMetas,
41    };
42
43    use crate::accounts::Initialize;
44
45    #[test]
46    fn test_first_account_is_the_blober() {
47        let blober = Pubkey::new_unique();
48        let payer = Pubkey::new_unique();
49        let system_program = Pubkey::new_unique();
50
51        let account = Initialize {
52            blober,
53            payer,
54            system_program,
55        };
56
57        let expected = AccountMeta {
58            pubkey: blober,
59            is_signer: false,
60            is_writable: true,
61        };
62
63        let is_signer = None;
64        let actual = &account.to_account_metas(is_signer)[0];
65        assert_eq!(actual, &expected);
66    }
67}