sol_did/instructions/
initialize.rs

1use 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}