Skip to content

Commit 1a21122

Browse files
committed
added extra checks for token and nft mint and metadata
1 parent 57252cd commit 1a21122

File tree

2 files changed

+62
-17
lines changed

2 files changed

+62
-17
lines changed

tokens/create-token/steel/api/src/sdk.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,12 @@ pub fn create_token(
99
uri: [u8; 128],
1010
decimals: u8,
1111
) -> Instruction {
12-
// Fetch PDA of the token metadata account.
13-
let metadata_pda = Pubkey::find_program_address(
14-
&[METADATA, mpl_token_metadata::ID.as_ref(), mint.as_ref()],
15-
&mpl_token_metadata::ID,
16-
);
17-
1812
Instruction {
1913
program_id: crate::ID,
2014
accounts: vec![
2115
AccountMeta::new(signer, true),
2216
AccountMeta::new(mint, true),
23-
AccountMeta::new(metadata_pda.0, false),
17+
AccountMeta::new(metadata_pda(mint).0, false),
2418
AccountMeta::new_readonly(system_program::ID, false),
2519
AccountMeta::new_readonly(spl_token::ID, false),
2620
AccountMeta::new_readonly(mpl_token_metadata::ID, false),
@@ -35,3 +29,11 @@ pub fn create_token(
3529
.to_bytes(),
3630
}
3731
}
32+
33+
// Fetch PDA of a metadata account.
34+
pub fn metadata_pda(mint: Pubkey) -> (Pubkey, u8) {
35+
Pubkey::find_program_address(
36+
&[METADATA, mpl_token_metadata::ID.as_ref(), mint.as_ref()],
37+
&mpl_token_metadata::ID,
38+
)
39+
}

tokens/create-token/steel/program/tests/test.rs

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ async fn run_test() {
5050
let res = banks.process_transaction(tx).await;
5151
assert!(res.is_ok());
5252

53+
// Check token mint account data
5354
let mint_account_data = banks
5455
.get_account(token_mint_keypair.pubkey())
5556
.await
@@ -64,20 +65,26 @@ async fn run_test() {
6465
payer.pubkey()
6566
);
6667

67-
let metadata_pda = Pubkey::find_program_address(
68-
&[
69-
METADATA,
70-
mpl_token_metadata::ID.as_ref(),
71-
token_mint_keypair.pubkey().as_ref(),
72-
],
73-
&mpl_token_metadata::ID,
74-
)
75-
.0;
76-
let metadata_account_data = banks.get_account(metadata_pda).await.unwrap().unwrap().data;
68+
// Check token metadata account data
69+
let metadata_account_data = banks
70+
.get_account(metadata_pda(token_mint_keypair.pubkey()).0)
71+
.await
72+
.unwrap()
73+
.unwrap()
74+
.data;
7775
let deserialized_metadata_data =
7876
mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
7977
assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
8078
assert_eq!(deserialized_metadata_data.mint, token_mint_keypair.pubkey());
79+
assert_eq!(
80+
deserialized_metadata_data.name.trim_end_matches('\0'),
81+
"Solana Gold"
82+
);
83+
assert_eq!(
84+
deserialized_metadata_data.symbol.trim_end_matches('\0'),
85+
"GOLDSOL"
86+
);
87+
assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json" );
8188

8289
//NFT
8390
let nft_mint_keypair = Keypair::new();
@@ -106,4 +113,40 @@ async fn run_test() {
106113

107114
let res = banks.process_transaction(tx).await;
108115
assert!(res.is_ok());
116+
117+
//Check nft mint account data
118+
let mint_account_data = banks
119+
.get_account(nft_mint_keypair.pubkey())
120+
.await
121+
.unwrap()
122+
.unwrap()
123+
.data;
124+
let deserialized_mint_data = spl_token::state::Mint::unpack(&mint_account_data).unwrap();
125+
assert!(deserialized_mint_data.is_initialized);
126+
assert_eq!(deserialized_mint_data.decimals, decimals);
127+
assert_eq!(
128+
deserialized_mint_data.mint_authority.unwrap(),
129+
payer.pubkey()
130+
);
131+
132+
//Check nft metadata account data
133+
let metadata_account_data = banks
134+
.get_account(metadata_pda(nft_mint_keypair.pubkey()).0)
135+
.await
136+
.unwrap()
137+
.unwrap()
138+
.data;
139+
let deserialized_metadata_data =
140+
mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
141+
assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
142+
assert_eq!(deserialized_metadata_data.mint, nft_mint_keypair.pubkey());
143+
assert_eq!(
144+
deserialized_metadata_data.name.trim_end_matches('\0'),
145+
"Homer NFT"
146+
);
147+
assert_eq!(
148+
deserialized_metadata_data.symbol.trim_end_matches('\0'),
149+
"HOMR"
150+
);
151+
assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json" );
109152
}

0 commit comments

Comments
 (0)