Get error (8 byte discriminator did not match what was expected
)when executing test code. I have checked the Remaining account
and the Deserializes account, and both of them pubkey is equal.
Code:
for warrior_card_usage_ai in &ctx.remaining_accounts[0..warrior_cards_usage_len] { if warrior_card_usage_ai.data_is_empty() { msg!("creating warrior card usage account"); let rent_lamports = rent.minimum_balance(warrior_card_usage_data_len); let cpi_accounts = CreateAccount { from: ctx.accounts.payer.to_account_info(), to: (*warrior_card_usage_ai).clone(), }; let cpi_context = CpiContext::new( ctx.accounts.system_program.to_account_info(), cpi_accounts ); // 定义 PDA 的种子数组 let collect_mint = attacker_cards[0].collection_mint; msg!("collect_mint: {}", collect_mint); // 使用 find_program_address 计算 PDA 和 bump let seeds = &[b"warrior_cards_usage", attacker.as_ref(), collect_mint.as_ref()]; let (pda, bump) = Pubkey::find_program_address(seeds, ctx.program_id); msg!("pda: {}, bump: {}", pda, bump); let signer_seeds: &[&[u8]] = &[ b"warrior_cards_usage", attacker.as_ref(), collect_mint.as_ref(),&[bump], ]; // cpi_context.with_signer(&[signer_seeds]); msg!("Expected data length: {}", warrior_card_usage_data_len); msg!("Minimum rent: {}", rent_lamports); create_account( cpi_context.with_signer(&[signer_seeds]), rent_lamports, u64::try_from(warrior_card_usage_data_len).unwrap(), ctx.program_id )?; } let mut warrior_cards_usage: Account<WarriorCardsUsage> = Account::try_from_unchecked(warrior_card_usage_ai)?; msg!("Warrior cards usage: {:?}", warrior_cards_usage.to_account_info().key()); msg!("Remaining account key: {}", warrior_card_usage_ai.key()); warrior_cards_usage.attacker = attacker; warrior_cards_usage.battle_count = 99; warrior_cards_usage.collection_mint = attacker_cards[0].collection_mint; msg!("Warrior cards usage: {:?}", warrior_cards_usage); warrior_cards_usages.push(warrior_cards_usage);}