Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 402ca27

Browse files
authored
remove solana-program from token-metadata-interface (#7431)
* remove solana-program from token-metadata-interface * finish removing solana-program
1 parent 5d8e76d commit 402ca27

File tree

6 files changed

+89
-26
lines changed

6 files changed

+89
-26
lines changed

Cargo.lock

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

token-metadata/interface/Cargo.toml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,25 @@ serde-traits = ["dep:serde", "spl-pod/serde-traits"]
1212

1313
[dependencies]
1414
borsh = "1.5.1"
15+
num-derive = "0.4"
16+
num-traits = "0.2"
1517
serde = { version = "1.0.214", optional = true }
16-
solana-program = "2.1.0"
18+
solana-borsh = "2.1.0"
19+
solana-decode-error = "2.1.0"
20+
solana-instruction = "2.1.0"
21+
solana-msg = "2.1.0"
22+
solana-program-error = "2.1.0"
1723
spl-discriminator = { version = "0.3.0", path = "../../libraries/discriminator" }
18-
spl-program-error = { version = "0.5.0", path = "../../libraries/program-error" }
24+
solana-pubkey = "2.1.0"
1925
spl-type-length-value = { version = "0.6.0", path = "../../libraries/type-length-value" }
2026
spl-pod = { version = "0.4.0", path = "../../libraries/pod", features = [
2127
"borsh",
2228
] }
29+
thiserror = "1.0"
2330

2431
[dev-dependencies]
2532
serde_json = "1.0.132"
33+
solana-sha256-hasher = "2.1.0"
2634

2735
[lib]
2836
crate-type = ["cdylib", "lib"]

token-metadata/interface/src/error.rs

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
//! Interface error types
22
3-
use spl_program_error::*;
3+
use {
4+
solana_decode_error::DecodeError,
5+
solana_msg::msg,
6+
solana_program_error::{PrintProgramError, ProgramError},
7+
};
48

59
/// Errors that may be returned by the interface.
6-
#[spl_program_error(hash_error_code_start = 901_952_957)]
10+
#[repr(u32)]
11+
#[derive(Clone, Debug, Eq, thiserror::Error, num_derive::FromPrimitive, PartialEq)]
712
pub enum TokenMetadataError {
813
/// Incorrect account provided
914
#[error("Incorrect account provided")]
10-
IncorrectAccount,
15+
IncorrectAccount = 901_952_957,
1116
/// Mint has no mint authority
1217
#[error("Mint has no mint authority")]
1318
MintHasNoMintAuthority,
@@ -24,3 +29,47 @@ pub enum TokenMetadataError {
2429
#[error("Key not found in metadata account")]
2530
KeyNotFound,
2631
}
32+
33+
impl From<TokenMetadataError> for ProgramError {
34+
fn from(e: TokenMetadataError) -> Self {
35+
ProgramError::Custom(e as u32)
36+
}
37+
}
38+
39+
impl<T> DecodeError<T> for TokenMetadataError {
40+
fn type_of() -> &'static str {
41+
"TokenMetadataError"
42+
}
43+
}
44+
45+
impl PrintProgramError for TokenMetadataError {
46+
fn print<E>(&self)
47+
where
48+
E: 'static
49+
+ std::error::Error
50+
+ DecodeError<E>
51+
+ PrintProgramError
52+
+ num_traits::FromPrimitive,
53+
{
54+
match self {
55+
TokenMetadataError::IncorrectAccount => {
56+
msg!("Incorrect account provided")
57+
}
58+
TokenMetadataError::MintHasNoMintAuthority => {
59+
msg!("Mint has no mint authority")
60+
}
61+
TokenMetadataError::IncorrectMintAuthority => {
62+
msg!("Incorrect mint authority has signed the instruction",)
63+
}
64+
TokenMetadataError::IncorrectUpdateAuthority => {
65+
msg!("Incorrect metadata update authority has signed the instruction",)
66+
}
67+
TokenMetadataError::ImmutableMetadata => {
68+
msg!("Token metadata has no update authority")
69+
}
70+
TokenMetadataError::KeyNotFound => {
71+
msg!("Key not found in metadata account")
72+
}
73+
}
74+
}
75+
}

token-metadata/interface/src/instruction.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ use serde::{Deserialize, Serialize};
55
use {
66
crate::state::Field,
77
borsh::{BorshDeserialize, BorshSerialize},
8-
solana_program::{
9-
instruction::{AccountMeta, Instruction},
10-
program_error::ProgramError,
11-
pubkey::Pubkey,
12-
},
8+
solana_instruction::{AccountMeta, Instruction},
9+
solana_program_error::ProgramError,
10+
solana_pubkey::Pubkey,
1311
spl_discriminator::{discriminator::ArrayDiscriminator, SplDiscriminate},
1412
spl_pod::optional_keys::OptionalNonZeroPubkey,
1513
};
@@ -323,7 +321,7 @@ pub fn emit(
323321
mod test {
324322
#[cfg(feature = "serde-traits")]
325323
use std::str::FromStr;
326-
use {super::*, crate::NAMESPACE, solana_program::hash};
324+
use {super::*, crate::NAMESPACE, solana_sha256_hasher::hashv};
327325

328326
fn check_pack_unpack<T: BorshSerialize>(
329327
instruction: TokenMetadataInstruction,
@@ -350,7 +348,7 @@ mod test {
350348
uri: uri.to_string(),
351349
};
352350
let check = TokenMetadataInstruction::Initialize(data.clone());
353-
let preimage = hash::hashv(&[format!("{NAMESPACE}:initialize_account").as_bytes()]);
351+
let preimage = hashv(&[format!("{NAMESPACE}:initialize_account").as_bytes()]);
354352
let discriminator = &preimage.as_ref()[..ArrayDiscriminator::LENGTH];
355353
check_pack_unpack(check, discriminator, data);
356354
}
@@ -364,7 +362,7 @@ mod test {
364362
value: value.to_string(),
365363
};
366364
let check = TokenMetadataInstruction::UpdateField(data.clone());
367-
let preimage = hash::hashv(&[format!("{NAMESPACE}:updating_field").as_bytes()]);
365+
let preimage = hashv(&[format!("{NAMESPACE}:updating_field").as_bytes()]);
368366
let discriminator = &preimage.as_ref()[..ArrayDiscriminator::LENGTH];
369367
check_pack_unpack(check, discriminator, data);
370368
}
@@ -376,7 +374,7 @@ mod test {
376374
idempotent: true,
377375
};
378376
let check = TokenMetadataInstruction::RemoveKey(data.clone());
379-
let preimage = hash::hashv(&[format!("{NAMESPACE}:remove_key_ix").as_bytes()]);
377+
let preimage = hashv(&[format!("{NAMESPACE}:remove_key_ix").as_bytes()]);
380378
let discriminator = &preimage.as_ref()[..ArrayDiscriminator::LENGTH];
381379
check_pack_unpack(check, discriminator, data);
382380
}
@@ -387,7 +385,7 @@ mod test {
387385
new_authority: OptionalNonZeroPubkey::default(),
388386
};
389387
let check = TokenMetadataInstruction::UpdateAuthority(data.clone());
390-
let preimage = hash::hashv(&[format!("{NAMESPACE}:update_the_authority").as_bytes()]);
388+
let preimage = hashv(&[format!("{NAMESPACE}:update_the_authority").as_bytes()]);
391389
let discriminator = &preimage.as_ref()[..ArrayDiscriminator::LENGTH];
392390
check_pack_unpack(check, discriminator, data);
393391
}
@@ -399,7 +397,7 @@ mod test {
399397
end: Some(10),
400398
};
401399
let check = TokenMetadataInstruction::Emit(data.clone());
402-
let preimage = hash::hashv(&[format!("{NAMESPACE}:emitter").as_bytes()]);
400+
let preimage = hashv(&[format!("{NAMESPACE}:emitter").as_bytes()]);
403401
let discriminator = &preimage.as_ref()[..ArrayDiscriminator::LENGTH];
404402
check_pack_unpack(check, discriminator, data);
405403
}

token-metadata/interface/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ pub mod state;
1010

1111
// Export current sdk types for downstream users building with a different sdk
1212
// version Export borsh for downstream users
13-
pub use {borsh, solana_program};
13+
pub use {
14+
borsh, solana_borsh, solana_decode_error, solana_instruction, solana_msg, solana_program_error,
15+
};
1416

1517
/// Namespace for all programs implementing token-metadata
1618
pub const NAMESPACE: &str = "spl_token_metadata_interface";

token-metadata/interface/src/state.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
use serde::{Deserialize, Serialize};
55
use {
66
borsh::{BorshDeserialize, BorshSchema, BorshSerialize},
7-
solana_program::{
8-
borsh1::{get_instance_packed_len, try_from_slice_unchecked},
9-
program_error::ProgramError,
10-
pubkey::Pubkey,
11-
},
7+
solana_borsh::v1::{get_instance_packed_len, try_from_slice_unchecked},
8+
solana_program_error::ProgramError,
9+
solana_pubkey::Pubkey,
1210
spl_discriminator::{ArrayDiscriminator, SplDiscriminate},
1311
spl_pod::optional_keys::OptionalNonZeroPubkey,
1412
spl_type_length_value::{
@@ -125,11 +123,11 @@ pub enum Field {
125123

126124
#[cfg(test)]
127125
mod tests {
128-
use {super::*, crate::NAMESPACE, solana_program::hash};
126+
use {super::*, crate::NAMESPACE, solana_sha256_hasher::hashv};
129127

130128
#[test]
131129
fn discriminator() {
132-
let preimage = hash::hashv(&[format!("{NAMESPACE}:token_metadata").as_bytes()]);
130+
let preimage = hashv(&[format!("{NAMESPACE}:token_metadata").as_bytes()]);
133131
let discriminator =
134132
ArrayDiscriminator::try_from(&preimage.as_ref()[..ArrayDiscriminator::LENGTH]).unwrap();
135133
assert_eq!(TokenMetadata::SPL_DISCRIMINATOR, discriminator);

0 commit comments

Comments
 (0)