1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use crate::{structs::*, utils::*};
use anchor_lang::prelude::*;
#[derive(Accounts)]
pub struct CreateAssetManager<'info> {
pub key: AccountInfo<'info>,
#[account(
init, payer = payer,
space = DESCRIMINATOR_SIZE + AssetManager::LEN + EXTRA_SIZE,
seeds = [
b"asset_manager".as_ref(),
key.key().as_ref(),
],
bump,
)]
pub asset_manager: Account<'info, AssetManager>,
pub treasury: AccountInfo<'info>,
pub authority: AccountInfo<'info>,
#[account(mut)]
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub struct CreateAssetManagerArgs {
pub name: String,
}
pub fn create_asset_manager(
ctx: Context<CreateAssetManager>,
args: CreateAssetManagerArgs,
) -> Result<()> {
let asset_manager = &mut ctx.accounts.asset_manager;
asset_manager.bump = ctx.bumps["asset_manager"];
asset_manager.key = ctx.accounts.key.key();
asset_manager.authority = ctx.accounts.authority.key();
asset_manager.treasury = ctx.accounts.treasury.key();
asset_manager.name = args.name;
Ok(())
}