1use std::fmt::Display;
2
3use {
4 anyhow::Result,
5 solana_program::pubkey,
6 solana_sdk::pubkey::Pubkey,
7 strum::IntoEnumIterator,
8 strum_macros::{EnumIter, EnumString},
9};
10
11#[derive(Debug, Clone, PartialEq, Eq, EnumIter, EnumString)]
12#[strum(ascii_case_insensitive)]
13pub enum Id {
14 #[strum(serialize = "epoch_rewards", serialize = "epochRewards")]
15 EpochRewards,
16 #[strum(serialize = "last_restart", serialize = "lastRestart")]
17 LastRestart,
18 #[strum(serialize = "slot_hashes", serialize = "slotHashes")]
19 SlotHashes,
20 #[strum(serialize = "slot_history", serialize = "slotHistory")]
21 SlotHistory,
22 #[strum(serialize = "stake_history", serialize = "stakeHistory")]
23 StakeHistory,
24 #[strum(serialize = "clock", serialize = "sysvar_clock")]
25 Clock,
26 #[strum(
27 serialize = "epoch_schedule",
28 serialize = "epochSchedule",
29 serialize = "sysvar_epoch_schedule"
30 )]
31 EpochSchedule,
32 #[strum(serialize = "fees", serialize = "sysvar_fees")]
33 Fees,
34 #[strum(serialize = "instructions", serialize = "sysvar_instructions")]
35 Instructions,
36 #[strum(serialize = "rent", serialize = "sysvar_rent")]
37 Rent,
38 #[strum(
39 serialize = "wsol",
40 serialize = "nativeMint",
41 serialize = "native_mint"
42 )]
43 NativeMint,
44 #[strum(serialize = "token", serialize = "spl_token")]
45 Token,
46 #[strum(
47 serialize = "token_2022",
48 serialize = "token2022",
49 serialize = "spl_token_2022"
50 )]
51 Token2022,
52 #[strum(
53 serialize = "token_metadata",
54 serialize = "tokenMetadata",
55 serialize = "mpl_token_metadata"
56 )]
57 TokenMetadata,
58 #[strum(serialize = "amm", serialize = "tensorAmm", serialize = "tensor_amm")]
59 TensorAmm,
60 #[strum(
61 serialize = "escrow",
62 serialize = "tensorEscrow",
63 serialize = "tensor_escrow"
64 )]
65 TensorEscrow,
66 #[strum(serialize = "tensor_fees", serialize = "tensorFees")]
67 TensorFees,
68 #[strum(
69 serialize = "market",
70 serialize = "tensorMarket",
71 serialize = "tensor_market",
72 serialize = "marketplace"
73 )]
74 TensorMarket,
75 #[strum(
76 serialize = "merkle_tree_config",
77 serialize = "merkleTreeConfig",
78 serialize = "tensor_merkle_tree_config"
79 )]
80 TensorMerkleTreeConfig,
81 #[strum(
82 serialize = "price_lock",
83 serialize = "priceLock",
84 serialize = "tensor_price_lock"
85 )]
86 TensorPriceLock,
87 #[strum(
88 serialize = "whitelist",
89 serialize = "tensorWhitelist",
90 serialize = "tensor_whitelist"
91 )]
92 TensorWhitelist,
93}
94
95impl Display for Id {
96 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
97 write!(f, "{:?}", self)
98 }
99}
100
101impl Id {
102 pub fn get_pubkey(&self) -> Pubkey {
103 match self {
104 Id::EpochRewards => EPOCH_REWARDS,
105 Id::LastRestart => LAST_RESTART,
106 Id::SlotHashes => SLOT_HASHES,
107 Id::SlotHistory => SLOT_HISTORY,
108 Id::StakeHistory => STAKE_HISTORY,
109 Id::Clock => SYSVAR_CLOCK,
110 Id::EpochSchedule => SYVAR_EPOCH_SCHEDULE,
111 Id::Fees => SYSVAR_FEES,
112 Id::Instructions => SYSVAR_INSTRUCTIONS,
113 Id::Rent => SYSVAR_RENT,
114 Id::NativeMint => NATIVE_MINT_ID,
115 Id::Token => TOKEN_ID,
116 Id::Token2022 => TOKEN_2022_ID,
117 Id::TokenMetadata => TOKEN_METADATA_ID,
118 Id::TensorAmm => TENSOR_AMM_ID,
119 Id::TensorEscrow => TENSOR_ESCROW_ID,
120 Id::TensorFees => TENSOR_FEES_ID,
121 Id::TensorMarket => TENSOR_MARKET_ID,
122 Id::TensorMerkleTreeConfig => TENSOR_MERKLE_TREE_CONFIG,
123 Id::TensorPriceLock => TENSOR_PRICE_LOCK_ID,
124 Id::TensorWhitelist => TENSOR_WHITELIST_ID,
125 }
126 }
127}
128
129pub const EPOCH_REWARDS: Pubkey = pubkey!("SysvarEpochRewards1111111111111111111111111");
131pub const LAST_RESTART: Pubkey = pubkey!("SysvarLastRestartS1ot1111111111111111111111");
132pub const SLOT_HASHES: Pubkey = pubkey!("SysvarS1otHashes111111111111111111111111111");
133pub const SLOT_HISTORY: Pubkey = pubkey!("SysvarS1otHistory11111111111111111111111111");
134pub const STAKE_HISTORY: Pubkey = pubkey!("SysvarStakeHistory1111111111111111111111111");
135pub const SYSVAR_CLOCK: Pubkey = pubkey!("SysvarC1ock11111111111111111111111111111111");
136pub const SYVAR_EPOCH_SCHEDULE: Pubkey = pubkey!("SysvarEpochSchedu1e111111111111111111111111");
137pub const SYSVAR_FEES: Pubkey = pubkey!("SysvarFees111111111111111111111111111111111");
138pub const SYSVAR_INSTRUCTIONS: Pubkey = pubkey!("Sysvar1nstructions1111111111111111111111111");
139pub const SYSVAR_RENT: Pubkey = pubkey!("SysvarRent111111111111111111111111111111111");
140
141pub const NATIVE_MINT_ID: Pubkey = pubkey!("So11111111111111111111111111111111111111112");
143pub const TOKEN_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
144pub const TOKEN_2022_ID: Pubkey = pubkey!("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");
145
146pub const TOKEN_METADATA_ID: Pubkey = pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
148
149pub const TENSOR_AMM_ID: Pubkey = pubkey!("TAMM6ub33ij1mbetoMyVBLeKY5iP41i4UPUJQGkhfsg");
151pub const TENSOR_ESCROW_ID: Pubkey = pubkey!("TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN");
152pub const TENSOR_FEES_ID: Pubkey = pubkey!("TFEEgwDP6nn1s8mMX2tTNPPz8j2VomkphLUmyxKm17A");
153pub const TENSOR_MARKET_ID: Pubkey = pubkey!("TCMPhJdwDryooaGtiocG1u3xcYbRpiJzb283XfCZsDp");
154pub const TENSOR_MERKLE_TREE_CONFIG: Pubkey =
155 pubkey!("4NxSi99mo5hj3BZP6kxWVPgL6skwW6264YNn4LP3X8ML");
156pub const TENSOR_PRICE_LOCK_ID: Pubkey = pubkey!("TLoCKic2wGJm7VhZKumih4Lc35fUhYqVMgA4j389Buk");
157pub const TENSOR_WHITELIST_ID: Pubkey = pubkey!("TL1ST2iRBzuGTqLn1KXnGdSnEow62BzPnGiqyRXhWtW");
158
159pub fn handle_ids(id: Option<Id>, list: bool) -> Result<()> {
160 if list {
161 println!("Available IDs:");
162 for id in Id::iter() {
163 println!(" {}", id);
164 }
165 } else {
166 println!("{}", id.unwrap().get_pubkey());
167 }
168 Ok(())
169}