light_client/indexer/
tree_info.rs

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
26// TODO: keep updated with new trees. We could put it into a separate crate.
27lazy_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        // V2 State Trees (5 tree triples)
264        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}