sol_did/instructions/
initialize.rs1use crate::constants::DID_ACCOUNT_SEED;
2use crate::errors::DidSolError;
3use crate::state::{DidAccount, VerificationMethodFlags};
4use anchor_lang::prelude::*;
5
6pub fn initialize(ctx: Context<Initialize>, size: u32) -> Result<()> {
7 require!(
8 usize::try_from(size).unwrap() >= DidAccount::initial_size() + 8,
9 DidSolError::InsufficientInitialSize
10 );
11
12 let data = &mut ctx.accounts.did_data;
13 let bump = *ctx.bumps.get("did_data").unwrap();
14 data.init(
15 bump,
16 &ctx.accounts.authority.key(),
17 VerificationMethodFlags::CAPABILITY_INVOCATION | VerificationMethodFlags::OWNERSHIP_PROOF,
18 );
19
20 Ok(())
21}
22
23#[derive(Accounts)]
24#[instruction(size: u32)]
25pub struct Initialize<'info> {
26 #[account(
27 init,
28 payer = payer,
29 space = usize::try_from(size).unwrap(),
30 seeds = [DID_ACCOUNT_SEED.as_bytes(), authority.key().as_ref()],
31 bump )]
32 pub did_data: Account<'info, DidAccount>,
33 #[account(mut)]
34 pub authority: Signer<'info>,
35 #[account(mut)]
36 pub payer: Signer<'info>,
37 pub system_program: Program<'info, System>,
38}