defios 0.1.0

Main github on-chain integrations by DefiOS
Documentation
use crate::event::NameRouterCreated;
use crate::state::NameRouter;
use anchor_lang::prelude::*;

#[derive(Accounts)]
#[instruction(signing_domain: String, signature_version: u8)]
pub struct CreateNameRouter<'info> {
    #[account(mut)]
    pub router_creator: Signer<'info>,
    #[account(
        init,
        payer = router_creator,
        space = 8+NameRouter::INIT_SPACE,
        seeds = [
            signing_domain.as_bytes(),
            signature_version.to_string().as_bytes(),
            router_creator.key().as_ref()
        ],
        bump
    )]
    pub name_router_account: Account<'info, NameRouter>,
    pub system_program: Program<'info, System>,
}

pub fn handler(
    ctx: Context<CreateNameRouter>,
    signing_domain: String,
    signature_version: u8,
) -> Result<()> {
    let name_router_account = &mut ctx.accounts.name_router_account;
    let router_creator = &ctx.accounts.router_creator;

    name_router_account.bump = ctx.bumps.name_router_account;
    name_router_account.router_creator = router_creator.key();
    name_router_account.signing_domain = signing_domain;
    name_router_account.signature_version = signature_version;
    name_router_account.total_verified_users = 0;

    emit!(NameRouterCreated {
        router_creator: router_creator.key(),
        name_router_account: name_router_account.key(),
    });

    Ok(())
}