tensor_eigen/commands/
ids.rs

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
129// System Variables
130pub 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
141// SPL
142pub const NATIVE_MINT_ID: Pubkey = pubkey!("So11111111111111111111111111111111111111112");
143pub const TOKEN_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
144pub const TOKEN_2022_ID: Pubkey = pubkey!("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");
145
146// Metaplex
147pub const TOKEN_METADATA_ID: Pubkey = pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
148
149// Tensor Foundation
150pub 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}