solana_program::declare_id!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
pub(crate) mod instruction {
use {
super::state::DataV2,
borsh::{BorshDeserialize, BorshSerialize},
solana_program::{
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
},
};
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Eq, Debug, Clone)]
struct CreateMetadataAccountArgsV3 {
pub data: DataV2,
pub is_mutable: bool,
pub collection_details: Option<u8>,
}
#[allow(clippy::too_many_arguments)]
pub(crate) fn create_metadata_accounts_v3(
program_id: Pubkey,
metadata_account: Pubkey,
mint: Pubkey,
mint_authority: Pubkey,
payer: Pubkey,
update_authority: Pubkey,
name: String,
symbol: String,
uri: String,
) -> Instruction {
let mut data = vec![33]; data.append(
&mut CreateMetadataAccountArgsV3 {
data: DataV2 {
name,
symbol,
uri,
seller_fee_basis_points: 0,
creators: None,
collection: None,
uses: None,
},
is_mutable: true,
collection_details: None,
}
.try_to_vec()
.unwrap(),
);
Instruction {
program_id,
accounts: vec![
AccountMeta::new(metadata_account, false),
AccountMeta::new_readonly(mint, false),
AccountMeta::new_readonly(mint_authority, true),
AccountMeta::new(payer, true),
AccountMeta::new_readonly(update_authority, true),
AccountMeta::new_readonly(solana_program::system_program::ID, false),
],
data,
}
}
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Eq, Debug, Clone)]
struct UpdateMetadataAccountArgsV2 {
pub data: Option<DataV2>,
pub update_authority: Option<Pubkey>,
pub primary_sale_happened: Option<bool>,
pub is_mutable: Option<bool>,
}
pub(crate) fn update_metadata_accounts_v2(
program_id: Pubkey,
metadata_account: Pubkey,
update_authority: Pubkey,
new_update_authority: Option<Pubkey>,
metadata: Option<DataV2>,
primary_sale_happened: Option<bool>,
is_mutable: Option<bool>,
) -> Instruction {
let mut data = vec![15]; data.append(
&mut UpdateMetadataAccountArgsV2 {
data: metadata,
update_authority: new_update_authority,
primary_sale_happened,
is_mutable,
}
.try_to_vec()
.unwrap(),
);
Instruction {
program_id,
accounts: vec![
AccountMeta::new(metadata_account, false),
AccountMeta::new_readonly(update_authority, true),
],
data,
}
}
}
pub mod pda {
use {super::ID, solana_program::pubkey::Pubkey};
const PREFIX: &str = "metadata";
pub fn find_metadata_account(mint: &Pubkey) -> (Pubkey, u8) {
Pubkey::find_program_address(&[PREFIX.as_bytes(), ID.as_ref(), mint.as_ref()], &ID)
}
}
pub(crate) mod state {
use borsh::{BorshDeserialize, BorshSerialize};
#[repr(C)]
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Eq, Debug, Clone)]
pub(crate) struct DataV2 {
pub name: String,
pub symbol: String,
pub uri: String,
pub seller_fee_basis_points: u16,
pub creators: Option<u8>,
pub collection: Option<u8>,
pub uses: Option<u8>,
}
}