mpl_token_metadata/processor/metadata/
puff_metadata.rs1use borsh::BorshSerialize;
2use solana_program::{
3 account_info::{next_account_info, AccountInfo},
4 entrypoint::ProgramResult,
5 pubkey::Pubkey,
6};
7
8use crate::{
9 assertions::assert_owned_by,
10 state::{Metadata, TokenMetadataAccount, EDITION, PREFIX},
11 utils::puff_out_data_fields,
12};
13
14pub fn process_puff_metadata_account(
17 program_id: &Pubkey,
18 accounts: &[AccountInfo],
19) -> ProgramResult {
20 let account_info_iter = &mut accounts.iter();
21
22 let metadata_account_info = next_account_info(account_info_iter)?;
23 let mut metadata = Metadata::from_account_info(metadata_account_info)?;
24
25 assert_owned_by(metadata_account_info, program_id)?;
26
27 puff_out_data_fields(&mut metadata);
28
29 let edition_seeds = &[
30 PREFIX.as_bytes(),
31 program_id.as_ref(),
32 metadata.mint.as_ref(),
33 EDITION.as_bytes(),
34 ];
35 let (_, edition_bump_seed) = Pubkey::find_program_address(edition_seeds, program_id);
36 metadata.edition_nonce = Some(edition_bump_seed);
37
38 metadata.serialize(&mut *metadata_account_info.try_borrow_mut_data()?)?;
39 Ok(())
40}