spl: add create metadata v3 and set collection size ix (#2119)
* add create metadata v3 and set collection size ix * update changelog
This commit is contained in:
parent
ebe88187e3
commit
000e74ed48
|
@ -13,6 +13,7 @@ The minor version will be incremented upon a breaking change and the patch versi
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* client: Add `transaction` functions to RequestBuilder ([#1958](https://github.com/coral-xyz/anchor/pull/1958)).
|
* client: Add `transaction` functions to RequestBuilder ([#1958](https://github.com/coral-xyz/anchor/pull/1958)).
|
||||||
|
* spl: Add `create_metadata_accounts_v3` and `set_collection_size` wrappers ([#2119](https://github.com/coral-xyz/anchor/pull/2119))
|
||||||
|
|
||||||
## [0.25.0] - 2022-07-05
|
## [0.25.0] - 2022-07-05
|
||||||
|
|
||||||
|
|
|
@ -1966,9 +1966,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mpl-token-metadata"
|
name = "mpl-token-metadata"
|
||||||
version = "1.3.1"
|
version = "1.3.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f8b06b6275bd3f6444e22b03de7bdf6145ee6d6fa3e14415ddd317473b9ef807"
|
checksum = "029a329d7a89f7a3caf0b91bec307531f4b6c9cca34aa775454845fbbd05ac57"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayref",
|
"arrayref",
|
||||||
"borsh",
|
"borsh",
|
||||||
|
@ -3117,18 +3117,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shank"
|
name = "shank"
|
||||||
version = "0.0.2"
|
version = "0.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a9cfd616747d1ce69f15e62ea30589e393115e4b884d7c1cbceb751b8753e95d"
|
checksum = "85a6c6cad96abd1fd950d1df186ec02e786566161f03adadbb7cf157ae9a82d8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"shank_macro",
|
"shank_macro",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shank_macro"
|
name = "shank_macro"
|
||||||
version = "0.0.2"
|
version = "0.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0a27d3b536acc60a3ff359181d3a912d10b91539f85909447ca7d33ea0a91d56"
|
checksum = "c0b3bf722b43cea02627c7fd89925f5861f7aa27604c1852720f8eee1a73523d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.40",
|
"proc-macro2 1.0.40",
|
||||||
"quote 1.0.15",
|
"quote 1.0.15",
|
||||||
|
@ -3138,9 +3138,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shank_macro_impl"
|
name = "shank_macro_impl"
|
||||||
version = "0.0.2"
|
version = "0.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c7466a15559fd11aeb5fe12a700923f75bb4eaa7bc90962f2bd822708698ab5d"
|
checksum = "90a37f762b0529d64a9e3401ac3829e132f58fa9bc50b1fd6ad7b5a1a414a228"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"proc-macro2 1.0.40",
|
"proc-macro2 1.0.40",
|
||||||
|
|
|
@ -24,4 +24,4 @@ serum_dex = { git = "https://github.com/project-serum/serum-dex", rev = "1be91f2
|
||||||
solana-program = "~1.10.29"
|
solana-program = "~1.10.29"
|
||||||
spl-token = { version = "~3.3.0", features = ["no-entrypoint"], optional = true }
|
spl-token = { version = "~3.3.0", features = ["no-entrypoint"], optional = true }
|
||||||
spl-associated-token-account = { version = "~1.0.5", features = ["no-entrypoint"], optional = true }
|
spl-associated-token-account = { version = "~1.0.5", features = ["no-entrypoint"], optional = true }
|
||||||
mpl-token-metadata = { version = "1.2.7", optional = true, features = ["no-entrypoint"] }
|
mpl-token-metadata = { version = "1.3.4", optional = true, features = ["no-entrypoint"] }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use anchor_lang::context::CpiContext;
|
use anchor_lang::context::CpiContext;
|
||||||
use anchor_lang::{Accounts, Result, ToAccountInfos};
|
use anchor_lang::{Accounts, Result, ToAccountInfos};
|
||||||
use mpl_token_metadata::state::DataV2;
|
use mpl_token_metadata::state::{CollectionDetails, DataV2};
|
||||||
use mpl_token_metadata::ID;
|
use mpl_token_metadata::ID;
|
||||||
use solana_program::account_info::AccountInfo;
|
use solana_program::account_info::AccountInfo;
|
||||||
use solana_program::pubkey::Pubkey;
|
use solana_program::pubkey::Pubkey;
|
||||||
|
@ -54,6 +54,48 @@ pub fn create_metadata_accounts_v2<'info>(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn create_metadata_accounts_v3<'info>(
|
||||||
|
ctx: CpiContext<'_, '_, '_, 'info, CreateMetadataAccountsV3<'info>>,
|
||||||
|
data: DataV2,
|
||||||
|
is_mutable: bool,
|
||||||
|
update_authority_is_signer: bool,
|
||||||
|
details: Option<CollectionDetails>,
|
||||||
|
) -> Result<()> {
|
||||||
|
let DataV2 {
|
||||||
|
name,
|
||||||
|
symbol,
|
||||||
|
uri,
|
||||||
|
creators,
|
||||||
|
seller_fee_basis_points,
|
||||||
|
collection,
|
||||||
|
uses,
|
||||||
|
} = data;
|
||||||
|
let ix = mpl_token_metadata::instruction::create_metadata_accounts_v3(
|
||||||
|
ID,
|
||||||
|
*ctx.accounts.metadata.key,
|
||||||
|
*ctx.accounts.mint.key,
|
||||||
|
*ctx.accounts.mint_authority.key,
|
||||||
|
*ctx.accounts.payer.key,
|
||||||
|
*ctx.accounts.update_authority.key,
|
||||||
|
name,
|
||||||
|
symbol,
|
||||||
|
uri,
|
||||||
|
creators,
|
||||||
|
seller_fee_basis_points,
|
||||||
|
update_authority_is_signer,
|
||||||
|
is_mutable,
|
||||||
|
collection,
|
||||||
|
uses,
|
||||||
|
details,
|
||||||
|
);
|
||||||
|
solana_program::program::invoke_signed(
|
||||||
|
&ix,
|
||||||
|
&ToAccountInfos::to_account_infos(&ctx),
|
||||||
|
ctx.signer_seeds,
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update_metadata_accounts_v2<'info>(
|
pub fn update_metadata_accounts_v2<'info>(
|
||||||
ctx: CpiContext<'_, '_, '_, 'info, UpdateMetadataAccountsV2<'info>>,
|
ctx: CpiContext<'_, '_, '_, 'info, UpdateMetadataAccountsV2<'info>>,
|
||||||
new_update_authority: Option<Pubkey>,
|
new_update_authority: Option<Pubkey>,
|
||||||
|
@ -128,6 +170,28 @@ pub fn mint_new_edition_from_master_edition_via_token<'info>(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_collection_size<'info>(
|
||||||
|
ctx: CpiContext<'_, '_, '_, 'info, SetCollectionSize<'info>>,
|
||||||
|
collection_authority_record: Option<Pubkey>,
|
||||||
|
size: u64,
|
||||||
|
) -> Result<()> {
|
||||||
|
let ix = mpl_token_metadata::instruction::set_collection_size(
|
||||||
|
ID,
|
||||||
|
*ctx.accounts.metadata.key,
|
||||||
|
*ctx.accounts.update_authority.key,
|
||||||
|
*ctx.accounts.mint.key,
|
||||||
|
collection_authority_record,
|
||||||
|
size,
|
||||||
|
);
|
||||||
|
|
||||||
|
solana_program::program::invoke_signed(
|
||||||
|
&ix,
|
||||||
|
&ToAccountInfos::to_account_infos(&ctx),
|
||||||
|
ctx.signer_seeds,
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Accounts)]
|
#[derive(Accounts)]
|
||||||
pub struct CreateMetadataAccountsV2<'info> {
|
pub struct CreateMetadataAccountsV2<'info> {
|
||||||
pub metadata: AccountInfo<'info>,
|
pub metadata: AccountInfo<'info>,
|
||||||
|
@ -139,6 +203,17 @@ pub struct CreateMetadataAccountsV2<'info> {
|
||||||
pub rent: AccountInfo<'info>,
|
pub rent: AccountInfo<'info>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Accounts)]
|
||||||
|
pub struct CreateMetadataAccountsV3<'info> {
|
||||||
|
pub metadata: AccountInfo<'info>,
|
||||||
|
pub mint: AccountInfo<'info>,
|
||||||
|
pub mint_authority: AccountInfo<'info>,
|
||||||
|
pub payer: AccountInfo<'info>,
|
||||||
|
pub update_authority: AccountInfo<'info>,
|
||||||
|
pub system_program: AccountInfo<'info>,
|
||||||
|
pub rent: AccountInfo<'info>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Accounts)]
|
#[derive(Accounts)]
|
||||||
pub struct UpdateMetadataAccountsV2<'info> {
|
pub struct UpdateMetadataAccountsV2<'info> {
|
||||||
pub metadata: AccountInfo<'info>,
|
pub metadata: AccountInfo<'info>,
|
||||||
|
@ -183,3 +258,11 @@ pub struct MintNewEditionFromMasterEditionViaToken<'info> {
|
||||||
//
|
//
|
||||||
pub metadata_mint: AccountInfo<'info>,
|
pub metadata_mint: AccountInfo<'info>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Accounts)]
|
||||||
|
pub struct SetCollectionSize<'info> {
|
||||||
|
pub metadata: AccountInfo<'info>,
|
||||||
|
pub mint: AccountInfo<'info>,
|
||||||
|
pub update_authority: AccountInfo<'info>,
|
||||||
|
pub system_program: AccountInfo<'info>,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue