metadata: verify_collection & refactor results (#2151)

This commit is contained in:
0xWoo 2022-09-14 07:05:24 +09:00 committed by GitHub
parent 5ae52cae13
commit e019ba2199
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 57 additions and 31 deletions

View File

@ -6,15 +6,6 @@ use solana_program::account_info::AccountInfo;
use solana_program::pubkey::Pubkey;
use std::ops::Deref;
#[derive(Clone)]
pub struct Metadata;
impl anchor_lang::Id for Metadata {
fn id() -> Pubkey {
ID
}
}
pub fn create_metadata_accounts_v2<'info>(
ctx: CpiContext<'_, '_, '_, 'info, CreateMetadataAccountsV2<'info>>,
data: DataV2,
@ -51,8 +42,8 @@ pub fn create_metadata_accounts_v2<'info>(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn create_metadata_accounts_v3<'info>(
@ -93,8 +84,8 @@ pub fn create_metadata_accounts_v3<'info>(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn update_metadata_accounts_v2<'info>(
@ -117,8 +108,8 @@ pub fn update_metadata_accounts_v2<'info>(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn create_master_edition_v3<'info>(
@ -139,8 +130,8 @@ pub fn create_master_edition_v3<'info>(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn mint_new_edition_from_master_edition_via_token<'info>(
@ -162,13 +153,12 @@ pub fn mint_new_edition_from_master_edition_via_token<'info>(
*ctx.accounts.metadata_mint.key,
edition,
);
solana_program::program::invoke_signed(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn set_collection_size<'info>(
@ -184,13 +174,34 @@ pub fn set_collection_size<'info>(
collection_authority_record,
size,
);
solana_program::program::invoke_signed(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn verify_collection<'info>(
ctx: CpiContext<'_, '_, '_, 'info, VerifyCollection<'info>>,
collection_authority_record: Option<Pubkey>,
) -> Result<()> {
let ix = mpl_token_metadata::instruction::verify_collection(
ID,
*ctx.accounts.metadata.key,
*ctx.accounts.collection_authority.key,
*ctx.accounts.payer.key,
*ctx.accounts.collection_mint.key,
*ctx.accounts.collection_metadata.key,
*ctx.accounts.collection_master_edition.key,
collection_authority_record,
);
solana_program::program::invoke_signed(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)
.map_err(Into::into)
}
pub fn freeze_delegated_account<'info>(
@ -203,14 +214,12 @@ pub fn freeze_delegated_account<'info>(
*ctx.accounts.edition.key,
*ctx.accounts.mint.key,
);
solana_program::program::invoke_signed(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn thaw_delegated_account<'info>(
@ -223,14 +232,12 @@ pub fn thaw_delegated_account<'info>(
*ctx.accounts.edition.key,
*ctx.accounts.mint.key,
);
solana_program::program::invoke_signed(
&ix,
&ToAccountInfos::to_account_infos(&ctx),
ctx.signer_seeds,
)?;
Ok(())
)
.map_err(Into::into)
}
pub fn update_primary_sale_happened_via_token<'info>(
@ -358,6 +365,16 @@ pub struct SetCollectionSize<'info> {
pub system_program: AccountInfo<'info>,
}
#[derive(Accounts)]
pub struct VerifyCollection<'info> {
pub payer: AccountInfo<'info>,
pub metadata: AccountInfo<'info>,
pub collection_authority: AccountInfo<'info>,
pub collection_mint: AccountInfo<'info>,
pub collection_metadata: AccountInfo<'info>,
pub collection_master_edition: AccountInfo<'info>,
}
#[derive(Accounts)]
pub struct FreezeDelegatedAccount<'info> {
pub metadata: AccountInfo<'info>,
@ -425,3 +442,12 @@ impl Deref for MetadataAccount {
&self.0
}
}
#[derive(Clone)]
pub struct Metadata;
impl anchor_lang::Id for Metadata {
fn id() -> Pubkey {
ID
}
}