1#![allow(dead_code)]
2use std::collections::HashMap;
3
4use lazy_static::lazy_static;
5use light_compressed_account::TreeType;
6use solana_pubkey::pubkey;
7
8use crate::indexer::TreeInfo;
9
10impl TreeInfo {
11 pub(crate) fn get(pubkey: &str) -> Option<&TreeInfo> {
12 QUEUE_TREE_MAPPING.get(pubkey)
13 }
14
15 pub fn height(&self) -> u32 {
16 match self.tree_type {
17 TreeType::StateV1 => 26,
18 TreeType::StateV2 => 32,
19 TreeType::AddressV1 => 26,
20 TreeType::AddressV2 => 40,
21 TreeType::Unknown => 0,
22 }
23 }
24}
25
26lazy_static! {
28 pub(crate) static ref QUEUE_TREE_MAPPING: HashMap<String, TreeInfo> = {
29 let legacy_state_trees = [
30 (
31 pubkey!("smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT"),
32 pubkey!("nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148"),
33 Some(pubkey!("cpi1uHzrEhBG733DoEJNgHCyRS3XmmyVNZx5fonubE4")),
34 ),
35 (
36 pubkey!("smt2rJAFdyJJupwMKAqTNAJwvjhmiZ4JYGZmbVRw1Ho"),
37 pubkey!("nfq2hgS7NYemXsFaFUCe3EMXSDSfnZnAe27jC6aPP1X"),
38 Some(pubkey!("cpi2cdhkH5roePvcudTgUL8ppEBfTay1desGh8G8QxK")),
39 ),
40 (
41 pubkey!("smt3AFtReRGVcrP11D6bSLEaKdUmrGfaTNowMVccJeu"),
42 pubkey!("nfq3de4qt9d3wHxXWy1wcge3EXhid25mCr12bNWFdtV"),
43 Some(pubkey!("cpi3Ycq5qZzFEwZSWgwMhMi1M9KG4KVx4T9GUmb58gk")),
44 ),
45 (
46 pubkey!("smt4vjXvdjDFzvRMUxwTWnSy4c7cKkMaHuPrGsdDH7V"),
47 pubkey!("nfq4Ncp1vk3mFnCQ9cvwidp9k2L6fxEyCo2nerYD25A"),
48 Some(pubkey!("cpi4yJqDt4SjPXaxKkvhXRowqiFxv1jKgoq6jDMfc2c")),
49 ),
50 (
51 pubkey!("smt5uPaQT9n6b1qAkgyonmzRxtuazA53Rddwntqistc"),
52 pubkey!("nfq5b5xEguPtdD6uPetZduyrB5EUqad7gcUE46rALau"),
53 Some(pubkey!("cpi5ryT8ULH2aLs8u1V6vG1uA71d52tRqHrDUxiVn8A")),
54 ),
55 (
56 pubkey!("smt6ukQDSPPYHSshQovmiRUjG9jGFq2hW9vgrDFk5Yz"),
57 pubkey!("nfq6uzaNZ5n3EWF4t64M93AWzLGt5dXTikEA9fFRktv"),
58 Some(pubkey!("cpi6maYjfu2TGbRu4dzsjzs4BHDGKdTyy4bhPNCmRmV")),
59 ),
60 (
61 pubkey!("smt7onMFkvi3RbyhQCMajudYQkB1afAFt9CDXBQTLz6"),
62 pubkey!("nfq7yytdKkkLabu1KpvLsa5VPkvCT4jPWus5Yi74HTH"),
63 Some(pubkey!("cpi7qnzKBpzhzVfGXyaabXyhGJVTaNQSKh4x4jffLLa")),
64 ),
65 (
66 pubkey!("smt8TYxNy8SuhAdKJ8CeLtDkr2w6dgDmdz5ruiDw9Y9"),
67 pubkey!("nfq8vExDykci3VUSpj9R1totVst87hJfFWevNK4hiFb"),
68 Some(pubkey!("cpi8GBR819DvLLWmiVgYmjLAhYX6j9bnBXaYXCHEA7i")),
69 ),
70 (
71 pubkey!("smt9ReAYRF5eFjTd5gBJMn5aKwNRcmp3ub2CQr2vW7j"),
72 pubkey!("nfq9KFpNQL45ppP6ZG7zBpUeN18LZrNGkKyvV1kjTX2"),
73 Some(pubkey!("cpi9CEV5DdCA5pyizmqv2Tk2aFBFwD32WSv6qaSN4Vb")),
74 ),
75 (
76 pubkey!("smtAvYA5UbTRyKAkAj5kHs1CmrA42t6WkVLi4c6mA1f"),
77 pubkey!("nfqAroCRkcZBgsAJDNkptKpsSWyM6cgB9XpWNNiCEC4"),
78 Some(pubkey!("cpiAb2eNFf6MQeqMWEyEjSN3VJcD5hghujhmtdcMuZp")),
79 ),
80 (
81 pubkey!("smtBvnJx2B2u85wc3sMkF6G8rVMfN8Ek3nVKZ8gQUFn"),
82 pubkey!("nfqB3FAiiB1p3ksiWHB48LzSycpaJZ5RTp5C8RtNyUH"),
83 None,
84 ),
85 (
86 pubkey!("smtCEeVJsWyeeawgn5cQR5iK7dsJwnxJq7QwdQUepx8"),
87 pubkey!("nfqC5pX1HzaTgUApL2DTp7Xh8j3A5Augk42jngRCoKF"),
88 None,
89 ),
90 (
91 pubkey!("smtF9XTNZeyMgGQxxWfxyS1Ff6CA4W4RgYi8X1wWxa9"),
92 pubkey!("nfqFa5ZzBYELWDnMQZe7SA3gd1x98aqtPf4sfaJZQJm"),
93 None,
94 ),
95 (
96 pubkey!("smtGeMYXeGoyQVcnrDg985h74ak9aRPW4gsfdW25DVy"),
97 pubkey!("nfqGKBHxkUbDvTtkiDXNWskBhM6R9YfCeNu52baqvaf"),
98 None,
99 ),
100 (
101 pubkey!("smtHxHypFJoK6z6CCgx7eP9jqDykUBE7PbrXrTVoejR"),
102 pubkey!("nfqHEE21vgXLnD7wxauCvX6pfeAs1zJbE4YyZ4YQ1rG"),
103 None,
104 ),
105 (
106 pubkey!("smtJsXesAF3vEc7Kz86rvaaHnNndvRWRfTj3XhgbCyb"),
107 pubkey!("nfqJnTp7kgAa2AF2QTRi5qNVinkpAdA15gBYYqeZUgA"),
108 None,
109 ),
110 (
111 pubkey!("smtKAoGiqSb6YwGhCSwsJer5tMMgk7sH1a2K5BNeNQQ"),
112 pubkey!("nfqKejGFuD6xkNLt8zzp2HaypMeRDsptBaeVGB4Utoq"),
113 None,
114 ),
115 (
116 pubkey!("smtLdHZPfJfqK3cKCQ9sqQTCQaoDgZKA11MQZ9P4UFR"),
117 pubkey!("nfqLk1L9ezj8AbDyeQueeQoKUvU6Jzz9eQs28QgTEfx"),
118 None,
119 ),
120 (
121 pubkey!("smtNKu3Dwsyw4YVVA7S9cWYGvLrwUVD3T593ZJnyggv"),
122 pubkey!("nfqNG4bDC6e8SzamFhvDytxwzKdzbwoTsLHZFi11AD1"),
123 None,
124 ),
125 (
126 pubkey!("smta2xk2kZTeFBRzpSrtCpwmxkrQpv7LGgut1aMNsme"),
127 pubkey!("nfqa2szxnkgX4xBTVG81HYK7mzZe8pSF8wv2yMXaTTG"),
128 None,
129 ),
130 (
131 pubkey!("smtb2BcLRWygF3svygXMprcRjXKUDnxvNFnseNgH6VT"),
132 pubkey!("nfqbgaRZGC1BGtFjRMvJmx79fzg8bBuSJBCEbJzoGTG"),
133 None,
134 ),
135 (
136 pubkey!("smtd3wjo4AzEKd9tRE2zTanxEEWRAXAAs9AtF9NcfAs"),
137 pubkey!("nfqd5yiNJJ5mvZxitwXY9bR5dfBs2WNcTKctFBYwSuv"),
138 None,
139 ),
140 (
141 pubkey!("smte57v68vyf21wT5xzxYvZpr6iiFG1WQ5dX7J1Y85E"),
142 pubkey!("nfqecsLrkXwRpdBJZEpR2bJYbXc2jrh78mqg1kRDZKm"),
143 None,
144 ),
145 (
146 pubkey!("smtobNxYYVi8YfJDjzdoW1jR7xyZaVeXwmSHNgL3tA1"),
147 pubkey!("nfqoqboretu8sLtCB4mTe3HKRmzc18HAPUAkEn18axG"),
148 None,
149 ),
150 (
151 pubkey!("smtpQZk7YARxMaz7VeW7zPMLNJAhbP9v1AZzLopaB2M"),
152 pubkey!("nfqp7yDaPgGenuaFFAogXLvy5A5c3Znn5pYe6TmQ9RQ"),
153 None,
154 ),
155 (
156 pubkey!("smtqHbhmXHjVxeDNq5NPTMBw92L2ZsEF4q2WgNqjN7Y"),
157 pubkey!("nfqqqib2xCHLXSVABHoczoY4u495T5eFCcypZ6C22gB"),
158 None,
159 ),
160 (
161 pubkey!("smtrG9ekG1obtqBRoB4mMUEwicfjTRRzZUm3z4LX8UJ"),
162 pubkey!("nfqroTsZ4EX37MuYb26Km8nPmS2WhfG3HTFgCuuwe7U"),
163 None,
164 ),
165 (
166 pubkey!("smtsAZefsicmjKXz9Wtzidwt67pU3kqbhB6f2yD3rQJ"),
167 pubkey!("nfqs5Hdbd7oKtDdRmVQFy4wytRn5gDb1DPwPyQCmHS2"),
168 None,
169 ),
170 (
171 pubkey!("smtt9Ra1v3mu8eSx7nrq5Q8bRqqPRf5mfpUvkpkP29L"),
172 pubkey!("nfqt3kLwwcAm8wLfNCVGPThN7fpHimPoiBegoGeRxUy"),
173 None,
174 ),
175 (
176 pubkey!("smtu3VAWgucXQmMhy4S8nNojpuVJHgVrGQFkai1jXRw"),
177 pubkey!("nfqu1jDCGChJQxQpU5XWjeHUtzYWBEoKZ24VXXdKdkk"),
178 None,
179 ),
180 (
181 pubkey!("smtvbupk8wjpXa48Zg29SVtTL8BpSJVrc6tfMGAA5A3"),
182 pubkey!("nfqvcYyr6TzAugHSaX398fXPBSRygmb7TfmXoXvL8Qu"),
183 None,
184 ),
185 (
186 pubkey!("smtwntNZBnj3w5dw1mYjzgHBBhxAYvHjZhh5whVEaBS"),
187 pubkey!("nfqw14GHxV2LJsNwwXLGCXDyQXqnUn6GDL9DKqBbeep"),
188 None,
189 ),
190 (
191 pubkey!("smtx7SjhPmjChWsUNiyZ4VF2U82zSBDf2yArGKr5BDb"),
192 pubkey!("nfqxAGA7bDoHDxqA4K25fV1wZZ5NHzGrxReiCC5Ztet"),
193 None,
194 ),
195 (
196 pubkey!("smty1QArd6Z73H67TvoqpxitEc2E5A9zBtw42ZKZJkn"),
197 pubkey!("nfqy55aAqL8qG5qBRixUtLnDqNd61ft2jtXyoYGHNGb"),
198 None,
199 ),
200 (
201 pubkey!("smtz1CZdRkGuMpYPZHihP2WruMj9ZHYjK6Ag9gLBzWM"),
202 pubkey!("nfqzF2r8viCVTMpzVAL5jHVKsGF45RsASxun8ZpRKnm"),
203 None,
204 ),
205 ];
206
207 let address_trees_v1 = [(
208 pubkey!("amt1Ayt45jfbdw5YSo7iz6WZxUmnZsQTYXy82hVwyC2"),
209 pubkey!("aq1S9z4reTSQAdgWHGD2zDaS39sjGrAxbR31vxJ2F4F"),
210 None,
211 )];
212
213 let mut m = HashMap::new();
214
215 for (legacy_tree, legacy_queue, cpi_context) in legacy_state_trees.iter() {
216 m.insert(
217 legacy_queue.to_string(),
218 TreeInfo {
219 tree: *legacy_tree,
220 queue: *legacy_queue,
221 cpi_context: *cpi_context,
222 tree_type: TreeType::StateV1,
223 next_tree_info: None,
224 },
225 );
226
227 m.insert(
228 legacy_tree.to_string(),
229 TreeInfo {
230 tree: *legacy_tree,
231 queue: *legacy_queue,
232 cpi_context: *cpi_context,
233 tree_type: TreeType::StateV1,
234 next_tree_info: None,
235 },
236 );
237 }
238
239 for (legacy_tree, legacy_queue, cpi_context) in address_trees_v1.iter() {
240 m.insert(
241 legacy_queue.to_string(),
242 TreeInfo {
243 tree: *legacy_tree,
244 queue: *legacy_queue,
245 cpi_context: *cpi_context,
246 tree_type: TreeType::AddressV1,
247 next_tree_info: None,
248 },
249 );
250
251 m.insert(
252 legacy_tree.to_string(),
253 TreeInfo {
254 tree: *legacy_tree,
255 queue: *legacy_queue,
256 cpi_context: *cpi_context,
257 tree_type: TreeType::AddressV1,
258 next_tree_info: None,
259 },
260 );
261 }
262
263 let state_trees_v2 = [
265 (
266 pubkey!("bmt1LryLZUMmF7ZtqESaw7wifBXLfXHQYoE4GAmrahU"),
267 pubkey!("oq1na8gojfdUhsfCpyjNt6h4JaDWtHf1yQj4koBWfto"),
268 Some(pubkey!("cpi15BoVPKgEPw5o8wc2T816GE7b378nMXnhH3Xbq4y")),
269 ),
270 (
271 pubkey!("bmt2UxoBxB9xWev4BkLvkGdapsz6sZGkzViPNph7VFi"),
272 pubkey!("oq2UkeMsJLfXt2QHzim242SUi3nvjJs8Pn7Eac9H9vg"),
273 Some(pubkey!("cpi2yGapXUR3As5SjnHBAVvmApNiLsbeZpF3euWnW6B")),
274 ),
275 (
276 pubkey!("bmt3ccLd4bqSVZVeCJnH1F6C8jNygAhaDfxDwePyyGb"),
277 pubkey!("oq3AxjekBWgo64gpauB6QtuZNesuv19xrhaC1ZM1THQ"),
278 Some(pubkey!("cpi3mbwMpSX8FAGMZVP85AwxqCaQMfEk9Em1v8QK9Rf")),
279 ),
280 (
281 pubkey!("bmt4d3p1a4YQgk9PeZv5s4DBUmbF5NxqYpk9HGjQsd8"),
282 pubkey!("oq4ypwvVGzCUMoiKKHWh4S1SgZJ9vCvKpcz6RT6A8dq"),
283 Some(pubkey!("cpi4yyPDc4bCgHAnsenunGA8Y77j3XEDyjgfyCKgcoc")),
284 ),
285 (
286 pubkey!("bmt5yU97jC88YXTuSukYHa8Z5Bi2ZDUtmzfkDTA2mG2"),
287 pubkey!("oq5oh5ZR3yGomuQgFduNDzjtGvVWfDRGLuDVjv9a96P"),
288 Some(pubkey!("cpi5ZTjdgYpZ1Xr7B1cMLLUE81oTtJbNNAyKary2nV6")),
289 ),
290 ];
291
292 for (tree, queue, cpi_context) in state_trees_v2.iter() {
293 m.insert(
294 queue.to_string(),
295 TreeInfo {
296 tree: *tree,
297 queue: *queue,
298 cpi_context: *cpi_context,
299 tree_type: TreeType::StateV2,
300 next_tree_info: None,
301 },
302 );
303
304 m.insert(
305 tree.to_string(),
306 TreeInfo {
307 tree: *tree,
308 queue: *queue,
309 cpi_context: *cpi_context,
310 tree_type: TreeType::StateV2,
311 next_tree_info: None,
312 },
313 );
314 }
315
316 m.insert(
317 "amt2kaJA14v3urZbZvnc5v2np8jqvc4Z8zDep5wbtzx".to_string(),
318 TreeInfo {
319 tree: pubkey!("amt2kaJA14v3urZbZvnc5v2np8jqvc4Z8zDep5wbtzx"),
320 queue: pubkey!("amt2kaJA14v3urZbZvnc5v2np8jqvc4Z8zDep5wbtzx"),
321 cpi_context: None,
322 tree_type: TreeType::AddressV2,
323 next_tree_info: None,
324 },
325 );
326
327 m
328 };
329}