State
#[account]
pub struct ItemClass {
namespaces: Option<Vec<NamespaceAndIndex>>,
parent: Option<Pubkey>,
mint: Option<Pubkey>,
metadata: Option<Pubkey>,
edition: Option<Pubkey>,
bump: u8,
existing_children: u64,
item_class_data: {
settings: {
// If true and no components present, build is free
// If false/none and no components present, nobody can build
free_build: Option<Boolean>,
// All new item NFTs must be limited editions of the item class NFT master edition
children_must_be_editions: Option<Boolean>,
// Builder of the new item must be holding the NFT for that new item
builder_must_be_holder: Option<Boolean>,
update_permissiveness: Option<Vec<Permissiveness>>,
build_permissiveness: Option<Vec<Permissiveness>>,
staking_warm_up_duration: Option<u64>,
staking_cooldown_duration: Option<u64>,
staking_permissiveness: Option<Vec<Permissiveness>>,
unstaking_permissiveness: Option<Vec<Permissiveness>>,
child_update_propagation_permissiveness: Option<Vec<ChildUpdatePropagationPermissiveness>>,
},
config: {
usage_root: Option<Root>,
usage_state_root: Option<Root>,
component_root: Option<Root>,
usages: Option<Vec<ItemUsage>>,
components: Option<Vec<Component>>,
},
}
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct ItemUsage {
index: u16,
basic_item_effects: Option<Vec<BasicItemEffect>>,
usage_permissiveness: Vec<PermissivenessType>,
inherited: InheritanceState,
item_class_type: ItemClassType,
callback: Option<Callback>,
validation: Option<Callback>,
do_not_pair_with_self: bool,
dnp: Option<Vec<DNPItem>>,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct Component {
mint: Pubkey,
class_index: u64,
amount: u64,
time_to_build: Option<u64>,
component_scope: String,
use_usage_index: u16,
condition: ComponentCondition,
inherited: InheritanceState,
}Last updated