From 8169e527e9ec819e4bfb0f7ad3c60fc6cb0defb2 Mon Sep 17 00:00:00 2001 From: Pranjal Paliwal Date: Sat, 23 Jul 2022 00:25:17 +0400 Subject: [PATCH] [stake-pool] instruction to add metadata for pool token (#3335) * instruction to add metadata for pool token * add documentation for instruction accounts * address pull request comments * added more tests for update pool token instruction * add check for payer signature --- Cargo.lock | 67 +++++ stake-pool/program/Cargo.toml | 1 + stake-pool/program/src/error.rs | 3 + stake-pool/program/src/instruction.rs | 113 +++++++ stake-pool/program/src/processor.rs | 224 ++++++++++++++ .../tests/create_pool_token_metadata.rs | 276 ++++++++++++++++++ .../tests/fixtures/mpl_token_metadata.so | Bin 0 -> 383568 bytes stake-pool/program/tests/helpers/mod.rs | 18 ++ .../tests/update_pool_token_metadata.rs | 198 +++++++++++++ 9 files changed, 900 insertions(+) create mode 100644 stake-pool/program/tests/create_pool_token_metadata.rs create mode 100755 stake-pool/program/tests/fixtures/mpl_token_metadata.so create mode 100644 stake-pool/program/tests/update_pool_token_metadata.rs diff --git a/Cargo.lock b/Cargo.lock index 32a94e7f25b..22b9c0ef7bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2558,6 +2558,38 @@ dependencies = [ "syn 1.0.91", ] +[[package]] +name = "mpl-token-metadata" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b06b6275bd3f6444e22b03de7bdf6145ee6d6fa3e14415ddd317473b9ef807" +dependencies = [ + "arrayref", + "borsh", + "mpl-token-vault", + "num-derive", + "num-traits", + "shank", + "solana-program", + "spl-associated-token-account 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-token 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror", +] + +[[package]] +name = "mpl-token-vault" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade4ef15bc06a6033076c4ff28cba9b42521df5ec61211d6f419415ace2746a" +dependencies = [ + "borsh", + "num-derive", + "num-traits", + "solana-program", + "spl-token 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror", +] + [[package]] name = "multimap" version = "0.8.3" @@ -4208,6 +4240,40 @@ dependencies = [ "keccak", ] +[[package]] +name = "shank" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62c7f8aac4c67081e718ff2a7754a6264774a0eaa6ed64a6e94b1ec1c17af200" +dependencies = [ + "shank_macro", +] + +[[package]] +name = "shank_macro" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7538be7f2a6530a37d4e03de34569a1f27a2287b3efe06732d7e5648a9105" +dependencies = [ + "proc-macro2 1.0.36", + "quote 1.0.14", + "shank_macro_impl", + "syn 1.0.91", +] + +[[package]] +name = "shank_macro_impl" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4679c7294e45b98031bade3d50f5b01a562962176d76058af69e21e195919190" +dependencies = [ + "anyhow", + "proc-macro2 1.0.36", + "quote 1.0.14", + "serde", + "syn 1.0.91", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -5948,6 +6014,7 @@ dependencies = [ "arrayref", "bincode", "borsh", + "mpl-token-metadata", "num-derive", "num-traits", "num_enum", diff --git a/stake-pool/program/Cargo.toml b/stake-pool/program/Cargo.toml index 9ba05079779..46a69c939c0 100644 --- a/stake-pool/program/Cargo.toml +++ b/stake-pool/program/Cargo.toml @@ -14,6 +14,7 @@ test-bpf = [] [dependencies] arrayref = "0.3.6" borsh = "0.9" +mpl-token-metadata = { version = "1.3.1", features = [ "no-entrypoint" ] } num-derive = "0.3" num-traits = "0.2" num_enum = "0.5.4" diff --git a/stake-pool/program/src/error.rs b/stake-pool/program/src/error.rs index 8ffa32e1f8d..908b947d0a3 100644 --- a/stake-pool/program/src/error.rs +++ b/stake-pool/program/src/error.rs @@ -132,6 +132,9 @@ pub enum StakePoolError { /// Too much SOL withdrawn from the stake pool's reserve account #[error("SolWithdrawalTooLarge")] SolWithdrawalTooLarge, + /// Provided metadata account does not match metadata account derived for pool mint + #[error("InvalidMetadataAccount")] + InvalidMetadataAccount, } impl From for ProgramError { fn from(e: StakePoolError) -> Self { diff --git a/stake-pool/program/src/instruction.rs b/stake-pool/program/src/instruction.rs index 85c81a4755d..04353fbbff9 100644 --- a/stake-pool/program/src/instruction.rs +++ b/stake-pool/program/src/instruction.rs @@ -1,6 +1,7 @@ //! Instruction types #![allow(clippy::too_many_arguments)] + use { crate::{ find_deposit_authority_program_address, find_stake_program_address, @@ -9,6 +10,7 @@ use { MAX_VALIDATORS_TO_UPDATE, }, borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, + mpl_token_metadata::pda::find_metadata_account, solana_program::{ instruction::{AccountMeta, Instruction}, pubkey::Pubkey, @@ -374,6 +376,48 @@ pub enum StakePoolInstruction { /// 11. `[]` Token program id /// 12. `[s]` (Optional) Stake pool sol withdraw authority WithdrawSol(u64), + + /// Create token metadata for the stake-pool token in the + /// metaplex-token program + /// 0. `[]` Stake pool + /// 1. `[s]` Manager + /// 2. `[]` Stake pool withdraw authority + /// 3. `[]` Pool token mint account + /// 4. `[s, w]` Payer for creation of token metadata account + /// 5. `[w]` Token metadata account + /// 6. `[]` Metadata program id + /// 7. `[]` System program id + /// 8. `[]` Rent sysvar + CreateTokenMetadata { + #[allow(dead_code)] + /// Token name + name: String, + #[allow(dead_code)] + /// Token symbol e.g. stkSOL + symbol: String, + /// URI of the uploaded metadata of the spl-token + #[allow(dead_code)] + uri: String, + }, + /// Update token metadata for the stake-pool token in the + /// metaplex-token program + /// + /// 0. `[]` Stake pool + /// 1. `[s]` Manager + /// 2. `[]` Stake pool withdraw authority + /// 3. `[w]` Token metadata account + /// 4. `[]` Metadata program id + UpdateTokenMetadata { + #[allow(dead_code)] + /// Token name + name: String, + #[allow(dead_code)] + /// Token symbol e.g. stkSOL + symbol: String, + /// URI of the uploaded metadata of the spl-token + #[allow(dead_code)] + uri: String, + }, } /// Creates an 'initialize' instruction. @@ -1276,3 +1320,72 @@ pub fn set_funding_authority( .unwrap(), } } + +/// Creates an instruction to update metadata in the mpl token metadata program account for +/// the pool token +pub fn update_token_metadata( + program_id: &Pubkey, + stake_pool: &Pubkey, + manager: &Pubkey, + pool_mint: &Pubkey, + name: String, + symbol: String, + uri: String, +) -> Instruction { + let (stake_pool_withdraw_authority, _) = + find_withdraw_authority_program_address(program_id, stake_pool); + let (token_metadata, _) = find_metadata_account(pool_mint); + + let accounts = vec![ + AccountMeta::new_readonly(*stake_pool, false), + AccountMeta::new_readonly(*manager, true), + AccountMeta::new_readonly(stake_pool_withdraw_authority, false), + AccountMeta::new(token_metadata, false), + AccountMeta::new_readonly(mpl_token_metadata::id(), false), + ]; + + Instruction { + program_id: *program_id, + accounts, + data: StakePoolInstruction::UpdateTokenMetadata { name, symbol, uri } + .try_to_vec() + .unwrap(), + } +} + +/// Creates an instruction to create metadata using the mpl token metadata program for +/// the pool token +pub fn create_token_metadata( + program_id: &Pubkey, + stake_pool: &Pubkey, + manager: &Pubkey, + pool_mint: &Pubkey, + payer: &Pubkey, + name: String, + symbol: String, + uri: String, +) -> Instruction { + let (stake_pool_withdraw_authority, _) = + find_withdraw_authority_program_address(program_id, stake_pool); + let (token_metadata, _) = find_metadata_account(pool_mint); + + let accounts = vec![ + AccountMeta::new_readonly(*stake_pool, false), + AccountMeta::new_readonly(*manager, true), + AccountMeta::new_readonly(stake_pool_withdraw_authority, false), + AccountMeta::new_readonly(*pool_mint, false), + AccountMeta::new(*payer, true), + AccountMeta::new(token_metadata, false), + AccountMeta::new_readonly(mpl_token_metadata::id(), false), + AccountMeta::new_readonly(system_program::id(), false), + AccountMeta::new_readonly(sysvar::rent::id(), false), + ]; + + Instruction { + program_id: *program_id, + accounts, + data: StakePoolInstruction::CreateTokenMetadata { name, symbol, uri } + .try_to_vec() + .unwrap(), + } +} diff --git a/stake-pool/program/src/processor.rs b/stake-pool/program/src/processor.rs index 2b194e2b16f..d26c4efbae5 100644 --- a/stake-pool/program/src/processor.rs +++ b/stake-pool/program/src/processor.rs @@ -13,6 +13,11 @@ use { AUTHORITY_DEPOSIT, AUTHORITY_WITHDRAW, MINIMUM_ACTIVE_STAKE, TRANSIENT_STAKE_SEED_PREFIX, }, borsh::{BorshDeserialize, BorshSerialize}, + mpl_token_metadata::{ + instruction::{create_metadata_accounts_v3, update_metadata_accounts_v2}, + pda::find_metadata_account, + state::DataV2, + }, num_traits::FromPrimitive, solana_program::{ account_info::{next_account_info, AccountInfo}, @@ -89,6 +94,19 @@ fn check_transient_stake_address( } } +/// Check mpl metadata account address for the pool mint +fn check_mpl_metadata_account_address( + metadata_address: &Pubkey, + pool_mint: &Pubkey, +) -> Result<(), ProgramError> { + let (metadata_account_pubkey, _) = find_metadata_account(pool_mint); + if metadata_account_pubkey != *metadata_address { + Err(StakePoolError::InvalidMetadataAccount.into()) + } else { + Ok(()) + } +} + /// Check system program address fn check_system_program(program_id: &Pubkey) -> Result<(), ProgramError> { if *program_id != system_program::id() { @@ -117,6 +135,34 @@ fn check_stake_program(program_id: &Pubkey) -> Result<(), ProgramError> { } } +/// Check mpl metadata program +fn check_mpl_metadata_program(program_id: &Pubkey) -> Result<(), ProgramError> { + if *program_id != mpl_token_metadata::id() { + msg!( + "Expected mpl metadata program {}, received {}", + mpl_token_metadata::id(), + program_id + ); + Err(ProgramError::IncorrectProgramId) + } else { + Ok(()) + } +} + +/// Check rent sysvar correctness +fn check_rent_sysvar(sysvar_key: &Pubkey) -> Result<(), ProgramError> { + if *sysvar_key != solana_program::sysvar::rent::id() { + msg!( + "Expected rent sysvar {}, received {}", + solana_program::sysvar::rent::id(), + sysvar_key + ); + Err(ProgramError::InvalidArgument) + } else { + Ok(()) + } +} + /// Check account owner is the given program fn check_account_owner( account_info: &AccountInfo, @@ -2676,6 +2722,175 @@ impl Processor { Ok(()) } + #[inline(never)] + fn process_create_pool_token_metadata( + program_id: &Pubkey, + accounts: &[AccountInfo], + name: String, + symbol: String, + uri: String, + ) -> ProgramResult { + let account_info_iter = &mut accounts.iter(); + let stake_pool_info = next_account_info(account_info_iter)?; + let manager_info = next_account_info(account_info_iter)?; + let withdraw_authority_info = next_account_info(account_info_iter)?; + let pool_mint_info = next_account_info(account_info_iter)?; + let payer_info = next_account_info(account_info_iter)?; + let metadata_info = next_account_info(account_info_iter)?; + let mpl_token_metadata_program_info = next_account_info(account_info_iter)?; + let system_program_info = next_account_info(account_info_iter)?; + let rent_sysvar_info = next_account_info(account_info_iter)?; + + if !payer_info.is_signer { + msg!("Payer did not sign metadata creation"); + return Err(StakePoolError::SignatureMissing.into()); + } + + check_system_program(system_program_info.key)?; + check_rent_sysvar(rent_sysvar_info.key)?; + check_account_owner(payer_info, &system_program::id())?; + check_account_owner(stake_pool_info, program_id)?; + check_mpl_metadata_program(mpl_token_metadata_program_info.key)?; + + let stake_pool = try_from_slice_unchecked::(&stake_pool_info.data.borrow())?; + if !stake_pool.is_valid() { + return Err(StakePoolError::InvalidState.into()); + } + + stake_pool.check_manager(manager_info)?; + stake_pool.check_authority_withdraw( + withdraw_authority_info.key, + program_id, + stake_pool_info.key, + )?; + stake_pool.check_mint(pool_mint_info)?; + check_mpl_metadata_account_address(metadata_info.key, &stake_pool.pool_mint)?; + + // Token mint authority for stake-pool token is stake-pool withdraw authority + let token_mint_authority = withdraw_authority_info; + + let new_metadata_instruction = create_metadata_accounts_v3( + *mpl_token_metadata_program_info.key, + *metadata_info.key, + *pool_mint_info.key, + *token_mint_authority.key, + *payer_info.key, + *token_mint_authority.key, + name, + symbol, + uri, + None, + 0, + true, + true, + None, + None, + None, + ); + + let (_, stake_withdraw_bump_seed) = + crate::find_withdraw_authority_program_address(program_id, stake_pool_info.key); + + let token_mint_authority_signer_seeds: &[&[_]] = &[ + &stake_pool_info.key.to_bytes()[..32], + AUTHORITY_WITHDRAW, + &[stake_withdraw_bump_seed], + ]; + + invoke_signed( + &new_metadata_instruction, + &[ + metadata_info.clone(), + pool_mint_info.clone(), + withdraw_authority_info.clone(), + payer_info.clone(), + withdraw_authority_info.clone(), + system_program_info.clone(), + rent_sysvar_info.clone(), + mpl_token_metadata_program_info.clone(), + ], + &[token_mint_authority_signer_seeds], + )?; + + Ok(()) + } + + #[inline(never)] + fn process_update_pool_token_metadata( + program_id: &Pubkey, + accounts: &[AccountInfo], + name: String, + symbol: String, + uri: String, + ) -> ProgramResult { + let account_info_iter = &mut accounts.iter(); + + let stake_pool_info = next_account_info(account_info_iter)?; + let manager_info = next_account_info(account_info_iter)?; + let withdraw_authority_info = next_account_info(account_info_iter)?; + let metadata_info = next_account_info(account_info_iter)?; + let mpl_token_metadata_program_info = next_account_info(account_info_iter)?; + + check_account_owner(stake_pool_info, program_id)?; + + check_mpl_metadata_program(mpl_token_metadata_program_info.key)?; + + let stake_pool = try_from_slice_unchecked::(&stake_pool_info.data.borrow())?; + if !stake_pool.is_valid() { + return Err(StakePoolError::InvalidState.into()); + } + + stake_pool.check_manager(manager_info)?; + stake_pool.check_authority_withdraw( + withdraw_authority_info.key, + program_id, + stake_pool_info.key, + )?; + check_mpl_metadata_account_address(metadata_info.key, &stake_pool.pool_mint)?; + + // Token mint authority for stake-pool token is withdraw authority only + let token_mint_authority = withdraw_authority_info; + + let update_metadata_accounts_instruction = update_metadata_accounts_v2( + *mpl_token_metadata_program_info.key, + *metadata_info.key, + *token_mint_authority.key, + None, + Some(DataV2 { + name, + symbol, + uri, + seller_fee_basis_points: 0, + creators: None, + collection: None, + uses: None, + }), + None, + Some(true), + ); + + let (_, stake_withdraw_bump_seed) = + crate::find_withdraw_authority_program_address(program_id, stake_pool_info.key); + + let token_mint_authority_signer_seeds: &[&[_]] = &[ + &stake_pool_info.key.to_bytes()[..32], + AUTHORITY_WITHDRAW, + &[stake_withdraw_bump_seed], + ]; + + invoke_signed( + &update_metadata_accounts_instruction, + &[ + metadata_info.clone(), + withdraw_authority_info.clone(), + mpl_token_metadata_program_info.clone(), + ], + &[token_mint_authority_signer_seeds], + )?; + + Ok(()) + } + /// Processes [SetManager](enum.Instruction.html). #[inline(never)] // needed to avoid stack size violation fn process_set_manager(program_id: &Pubkey, accounts: &[AccountInfo]) -> ProgramResult { @@ -2916,6 +3131,14 @@ impl Processor { msg!("Instruction: WithdrawSol"); Self::process_withdraw_sol(program_id, accounts, pool_tokens) } + StakePoolInstruction::CreateTokenMetadata { name, symbol, uri } => { + msg!("Instruction: CreateTokenMetadata"); + Self::process_create_pool_token_metadata(program_id, accounts, name, symbol, uri) + } + StakePoolInstruction::UpdateTokenMetadata { name, symbol, uri } => { + msg!("Instruction: UpdateTokenMetadata"); + Self::process_update_pool_token_metadata(program_id, accounts, name, symbol, uri) + } } } } @@ -2964,6 +3187,7 @@ impl PrintProgramError for StakePoolError { StakePoolError::TransientAccountInUse => msg!("Error: Provided validator stake account already has a transient stake account in use"), StakePoolError::InvalidSolWithdrawAuthority => msg!("Error: Provided sol withdraw authority does not match the program's"), StakePoolError::SolWithdrawalTooLarge => msg!("Error: Too much SOL withdrawn from the stake pool's reserve account"), + StakePoolError::InvalidMetadataAccount => msg!("Error: Metadata account derived from pool mint account does not match the one passed to program") } } } diff --git a/stake-pool/program/tests/create_pool_token_metadata.rs b/stake-pool/program/tests/create_pool_token_metadata.rs new file mode 100644 index 00000000000..3068df62524 --- /dev/null +++ b/stake-pool/program/tests/create_pool_token_metadata.rs @@ -0,0 +1,276 @@ +#![cfg(feature = "test-bpf")] +mod helpers; + +use { + helpers::*, + mpl_token_metadata::{ + state::{MAX_NAME_LENGTH, MAX_SYMBOL_LENGTH, MAX_URI_LENGTH}, + utils::puffed_out_string, + }, + solana_program::{instruction::InstructionError, pubkey::Pubkey}, + solana_program_test::*, + solana_sdk::{ + signature::{Keypair, Signer}, + transaction::{Transaction, TransactionError}, + }, + spl_stake_pool::{ + error::StakePoolError::{AlreadyInUse, SignatureMissing, WrongManager}, + instruction, MINIMUM_RESERVE_LAMPORTS, + }, +}; + +async fn setup() -> (ProgramTestContext, StakePoolAccounts) { + let mut context = program_test_with_metadata_program() + .start_with_context() + .await; + let stake_pool_accounts = StakePoolAccounts::new(); + stake_pool_accounts + .initialize_stake_pool( + &mut context.banks_client, + &context.payer, + &context.last_blockhash, + MINIMUM_RESERVE_LAMPORTS, + ) + .await + .unwrap(); + + (context, stake_pool_accounts) +} + +#[tokio::test] +async fn success_create_pool_token_metadata() { + let (mut context, stake_pool_accounts) = setup().await; + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let puffed_name = puffed_out_string(&name, MAX_NAME_LENGTH); + let puffed_symbol = puffed_out_string(&symbol, MAX_SYMBOL_LENGTH); + let puffed_uri = puffed_out_string(&uri, MAX_URI_LENGTH); + + let ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &stake_pool_accounts.manager], + context.last_blockhash, + ); + + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); + + let metadata = get_metadata_account( + &mut context.banks_client, + &stake_pool_accounts.pool_mint.pubkey(), + ) + .await; + + assert_eq!(metadata.data.name.to_string(), puffed_name); + assert_eq!(metadata.data.symbol.to_string(), puffed_symbol); + assert_eq!(metadata.data.uri.to_string(), puffed_uri); +} + +#[tokio::test] +async fn fail_manager_did_not_sign() { + let (mut context, stake_pool_accounts) = setup().await; + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let mut ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + ix.accounts[1].is_signer = false; + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + + let error = context + .banks_client + .process_transaction(transaction) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => { + let program_error = SignatureMissing as u32; + assert_eq!(error_index, program_error); + } + _ => panic!("Wrong error occurs while manager signature missing"), + } +} + +#[tokio::test] +async fn fail_wrong_manager_signed() { + let (mut context, stake_pool_accounts) = setup().await; + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let random_keypair = Keypair::new(); + let ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &random_keypair.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &random_keypair], + context.last_blockhash, + ); + + let error = context + .banks_client + .process_transaction(transaction) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => { + let program_error = WrongManager as u32; + assert_eq!(error_index, program_error); + } + _ => panic!("Wrong error occurs while signing with the wrong manager"), + } +} + +#[tokio::test] +async fn fail_wrong_mpl_metadata_program() { + let (mut context, stake_pool_accounts) = setup().await; + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let random_keypair = Keypair::new(); + let mut ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &random_keypair.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + ix.accounts[7].pubkey = Pubkey::new_unique(); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &random_keypair], + context.last_blockhash, + ); + + let error = context + .banks_client + .process_transaction(transaction) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, error) => { + assert_eq!(error, InstructionError::IncorrectProgramId); + } + _ => panic!( + "Wrong error occurs while try to create metadata with wrong mpl token metadata program ID" + ), + } +} + +#[tokio::test] +async fn fail_create_metadata_twice() { + let (mut context, stake_pool_accounts) = setup().await; + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix.clone()], + Some(&context.payer.pubkey()), + &[&context.payer, &stake_pool_accounts.manager], + context.last_blockhash, + ); + + let latest_blockhash = context.banks_client.get_latest_blockhash().await.unwrap(); + let transaction_2 = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &stake_pool_accounts.manager], + latest_blockhash, + ); + + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); + + let error = context + .banks_client + .process_transaction(transaction_2) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => { + let program_error = AlreadyInUse as u32; + assert_eq!(error_index, program_error); + } + _ => panic!("Wrong error occurs while trying to create pool token metadata twice"), + } +} diff --git a/stake-pool/program/tests/fixtures/mpl_token_metadata.so b/stake-pool/program/tests/fixtures/mpl_token_metadata.so new file mode 100755 index 0000000000000000000000000000000000000000..f7b3c9f1793e7d33ae892d4036d669974ac774c2 GIT binary patch literal 383568 zcmd?S37l1DeK&pv=E@KoAtaZO8Oi7m+(?X-^47||GlaqBt!Sgcx7NXGEBdxOYD{%e(5`#QB&QKP)y?{7Khxf={i zmij**nCJeU_4oX?=l3kv5-d>)47+L5&B4lP$7cHOS!JoIwx z4cps)yOygDcWAN5!w!Q-rs$7&x`rjA)q5>HK3j9<$Nlyoqh_O_vk~UU{YKzN$45e= zH>2MZk|@eW2PEFhk4)8y;$98w>o50e{iU|w9z<19yj%$wmo+|i{K{JXoe0?1xZlz* zaQs*r@s=-szScv$e!dp*y$U~y!qbqCc(WwaN0FY3{$22Pe9KQEzTZ0xzK=D*xA!T; zclTlN{Y-#wJjMA%DF z$$h|0+WU~?pQq_*{;rn!w=;k5B1@PhLMcrQnB{>qQb z>T&tq6x8GL8>e)#`cgV+eTTy9T|$RqO+Vs8&}~D|ey{0keq3AhEY#rqi>H90c-)S} zCmA2x8tup%QJ>q9c*=Y$=X5dtv>m=5uMhAVOFiUtGy2|9Q;(n%EgLsk`j;PGSbO3-URt7jlfs0jBXqj= zPT3^&lJ2C~1Sprw&3g|XJeZ4qEq3p4@|WS+D1QqA`lRw_cHQmw1QbJa2NNQPr!;PY zgx+qJu5wXAKlspI7a0cjx*P4eJwG1x ~bxl+H%+3~2q9{;nY{`qJX{V;vW`Y+K( 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�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 z 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 literal 0 HcmV?d00001 diff --git a/stake-pool/program/tests/helpers/mod.rs b/stake-pool/program/tests/helpers/mod.rs index d211afd9b47..346483130d0 100644 --- a/stake-pool/program/tests/helpers/mod.rs +++ b/stake-pool/program/tests/helpers/mod.rs @@ -2,6 +2,7 @@ use { borsh::BorshSerialize, + mpl_token_metadata::{pda::find_metadata_account, state::Metadata}, solana_program::{ borsh::{get_instance_packed_len, get_packed_len, try_from_slice_unchecked}, hash::Hash, @@ -42,6 +43,13 @@ pub fn program_test() -> ProgramTest { ProgramTest::new("spl_stake_pool", id(), processor!(Processor::process)) } +pub fn program_test_with_metadata_program() -> ProgramTest { + let mut program_test = ProgramTest::default(); + program_test.add_program("spl_stake_pool", id(), processor!(Processor::process)); + program_test.add_program("mpl_token_metadata", mpl_token_metadata::id(), None); + program_test +} + pub async fn get_account(banks_client: &mut BanksClient, pubkey: &Pubkey) -> Account { banks_client .get_account(*pubkey) @@ -293,6 +301,16 @@ pub async fn get_token_balance(banks_client: &mut BanksClient, token: &Pubkey) - account_info.amount } +pub async fn get_metadata_account(banks_client: &mut BanksClient, token_mint: &Pubkey) -> Metadata { + let (token_metadata, _) = find_metadata_account(token_mint); + let token_metadata_account = banks_client + .get_account(token_metadata) + .await + .unwrap() + .unwrap(); + try_from_slice_unchecked(token_metadata_account.data.as_slice()).unwrap() +} + pub async fn get_token_supply(banks_client: &mut BanksClient, mint: &Pubkey) -> u64 { let mint_account = banks_client.get_account(*mint).await.unwrap().unwrap(); let account_info = diff --git a/stake-pool/program/tests/update_pool_token_metadata.rs b/stake-pool/program/tests/update_pool_token_metadata.rs new file mode 100644 index 00000000000..fd27f806296 --- /dev/null +++ b/stake-pool/program/tests/update_pool_token_metadata.rs @@ -0,0 +1,198 @@ +#![cfg(feature = "test-bpf")] +mod helpers; + +use { + helpers::*, + mpl_token_metadata::{ + state::{MAX_NAME_LENGTH, MAX_SYMBOL_LENGTH, MAX_URI_LENGTH}, + utils::puffed_out_string, + }, + solana_program::instruction::InstructionError, + solana_program_test::*, + solana_sdk::{ + signature::{Keypair, Signer}, + transaction::{Transaction, TransactionError}, + }, + spl_stake_pool::{ + error::StakePoolError::{SignatureMissing, WrongManager}, + instruction, MINIMUM_RESERVE_LAMPORTS, + }, +}; + +async fn setup() -> (ProgramTestContext, StakePoolAccounts) { + let mut context = program_test_with_metadata_program() + .start_with_context() + .await; + let stake_pool_accounts = StakePoolAccounts::new(); + stake_pool_accounts + .initialize_stake_pool( + &mut context.banks_client, + &context.payer, + &context.last_blockhash, + MINIMUM_RESERVE_LAMPORTS, + ) + .await + .unwrap(); + + let name = "test_name"; + let symbol = "SYM"; + let uri = "test_uri"; + + let ix = instruction::create_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + &context.payer.pubkey(), + name.to_string(), + symbol.to_string(), + uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &stake_pool_accounts.manager], + context.last_blockhash, + ); + + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); + + (context, stake_pool_accounts) +} + +#[tokio::test] +async fn success_update_pool_token_metadata() { + let (mut context, stake_pool_accounts) = setup().await; + + let updated_name = "updated_name"; + let updated_symbol = "USYM"; + let updated_uri = "updated_uri"; + + let puffed_name = puffed_out_string(&updated_name, MAX_NAME_LENGTH); + let puffed_symbol = puffed_out_string(&updated_symbol, MAX_SYMBOL_LENGTH); + let puffed_uri = puffed_out_string(&updated_uri, MAX_URI_LENGTH); + + let ix = instruction::update_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + updated_name.to_string(), + updated_symbol.to_string(), + updated_uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &stake_pool_accounts.manager], + context.last_blockhash, + ); + + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); + + let metadata = get_metadata_account( + &mut context.banks_client, + &stake_pool_accounts.pool_mint.pubkey(), + ) + .await; + + assert_eq!(metadata.data.name.to_string(), puffed_name); + assert_eq!(metadata.data.symbol.to_string(), puffed_symbol); + assert_eq!(metadata.data.uri.to_string(), puffed_uri); +} + +#[tokio::test] +async fn fail_manager_did_not_sign() { + let (mut context, stake_pool_accounts) = setup().await; + + let updated_name = "updated_name"; + let updated_symbol = "USYM"; + let updated_uri = "updated_uri"; + + let mut ix = instruction::update_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &stake_pool_accounts.manager.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + updated_name.to_string(), + updated_symbol.to_string(), + updated_uri.to_string(), + ); + ix.accounts[1].is_signer = false; + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + + let error = context + .banks_client + .process_transaction(transaction) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => { + let program_error = SignatureMissing as u32; + assert_eq!(error_index, program_error); + } + _ => panic!("Wrong error occurs while manager signature missing"), + } +} + +#[tokio::test] +async fn fail_wrong_manager_signed() { + let (mut context, stake_pool_accounts) = setup().await; + + let updated_name = "updated_name"; + let updated_symbol = "USYM"; + let updated_uri = "updated_uri"; + + let random_keypair = Keypair::new(); + let ix = instruction::update_token_metadata( + &spl_stake_pool::id(), + &stake_pool_accounts.stake_pool.pubkey(), + &random_keypair.pubkey(), + &stake_pool_accounts.pool_mint.pubkey(), + updated_name.to_string(), + updated_symbol.to_string(), + updated_uri.to_string(), + ); + + let transaction = Transaction::new_signed_with_payer( + &[ix], + Some(&context.payer.pubkey()), + &[&context.payer, &random_keypair], + context.last_blockhash, + ); + + let error = context + .banks_client + .process_transaction(transaction) + .await + .err() + .unwrap() + .unwrap(); + + match error { + TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => { + let program_error = WrongManager as u32; + assert_eq!(error_index, program_error); + } + _ => panic!("Wrong error occurs while signing with the wrong manager"), + } +}