nitro_da_blober/instructions/
initialize.rs1use 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}