MCPcopy Create free account
hub / github.com/nifty-oss/asset / process_group

Function process_group

programs/asset/program/src/processor/group.rs:22–117  ·  view source on GitHub ↗

Adds an asset to a group. ### Accounts: 0. `[writable]` asset 1. `[writable]` group 2. `[signer]` authority

(program_id: &Pubkey, ctx: Context<Group>)

Source from the content-addressed store, hash-verified

20/// 1. `[writable]` group
21/// 2. `[signer]` authority
22pub fn process_group(program_id: &Pubkey, ctx: Context<Group>) -> ProgramResult {
23 // account validation
24
25 require!(
26 ctx.accounts.authority.is_signer(),
27 ProgramError::MissingRequiredSignature,
28 "authority"
29 );
30
31 require!(
32 ctx.accounts.asset.owner() == program_id,
33 ProgramError::IllegalOwner,
34 "asset"
35 );
36
37 require!(
38 ctx.accounts.group.owner() == program_id,
39 ProgramError::IllegalOwner,
40 "group"
41 );
42
43 let mut asset_data = ctx.accounts.asset.try_borrow_mut_data()?;
44
45 require!(
46 asset_data.len() >= Asset::LEN && asset_data[0] == Discriminator::Asset.into(),
47 AssetError::Uninitialized,
48 "asset"
49 );
50
51 let mut group_data = ctx.accounts.group.try_borrow_mut_data()?;
52
53 require!(
54 group_data.len() >= Asset::LEN && group_data[0] == Discriminator::Asset.into(),
55 AssetError::Uninitialized,
56 "group"
57 );
58
59 let asset = Asset::load_mut(&mut asset_data);
60
61 require!(
62 asset.group.value().is_none(),
63 AssetError::AlreadyInGroup,
64 "asset"
65 );
66
67 let (group, extensions) = group_data.split_at_mut(Asset::LEN);
68 let group = Asset::load_mut(group);
69
70 // authority of the group must match the asset
71 require!(
72 group.authority == asset.authority,
73 AssetError::InvalidAuthority,
74 "Group and asset authority mismatch"
75 );
76
77 let grouping = if let Some(grouping) = Extension::get_mut::<GroupingMut>(extensions) {
78 grouping
79 } else {

Callers 2

process_instructionFunction · 0.85
process_createFunction · 0.85

Calls 1

keyMethod · 0.80

Tested by

no test coverage detected