diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index 171d6e815..6835a03e4 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -18,8 +18,8 @@ pub fn create_metadata_accounts_v2<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateMetadataAccountsV2<'info>>, data: DataV2, is_mutable: bool, + update_authority_is_signer: bool, ) -> Result<()> { - let update_authority_is_signer = true; let DataV2 { name, symbol, @@ -54,6 +54,30 @@ pub fn create_metadata_accounts_v2<'info>( Ok(()) } +pub fn update_metadata_accounts_v2<'info>( + ctx: CpiContext<'_, '_, '_, 'info, UpdateMetadataAccountsV2<'info>>, + new_update_authority: Option, + data: Option, + primary_sale_happened: Option, + is_mutable: Option, +) -> Result<()> { + let ix = mpl_token_metadata::instruction::update_metadata_accounts_v2( + ID, + *ctx.accounts.metadata.key, + *ctx.accounts.update_authority.key, + new_update_authority, + data, + primary_sale_happened, + is_mutable, + ); + solana_program::program::invoke_signed( + &ix, + &ToAccountInfos::to_account_infos(&ctx), + ctx.signer_seeds, + )?; + Ok(()) +} + pub fn create_master_edition_v3<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateMasterEditionV3<'info>>, max_supply: Option, @@ -115,6 +139,12 @@ pub struct CreateMetadataAccountsV2<'info> { pub rent: AccountInfo<'info>, } +#[derive(Accounts)] +pub struct UpdateMetadataAccountsV2<'info> { + pub metadata: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, +} + #[derive(Accounts)] pub struct CreateMasterEditionV3<'info> { pub edition: AccountInfo<'info>,