Skip to main content

espresso_api/axum/
routes.rs

1/// Generate a path-builder function from a route constant.
2///
3/// Substitutes each `{placeholder}` segment with the corresponding argument
4/// (formatted via `Display`). Used to keep request URLs in sync with the
5/// route definitions registered with the Axum router.
6macro_rules! path_fn {
7    ($name:ident, $route:expr $(,)?) => {
8        pub fn $name() -> String {
9            ::std::string::String::from($route)
10        }
11    };
12    ($name:ident, $route:expr, $($param:ident),+ $(,)?) => {
13        pub fn $name($($param: impl ::std::fmt::Display),+) -> String {
14            let mut path = ::std::string::String::from($route);
15            $(
16                path = path.replace(
17                    concat!("{", stringify!($param), "}"),
18                    &$param.to_string(),
19                );
20            )+
21            path
22        }
23    };
24}
25
26pub mod v1 {
27    pub const REWARD_CLAIM_INPUT_ROUTE: &str =
28        "/v1/reward-state-v2/reward-claim-input/{height}/{address}";
29    pub const REWARD_BALANCE_ROUTE: &str = "/v1/reward-state-v2/reward-balance/{height}/{address}";
30    pub const LATEST_REWARD_BALANCE_ROUTE: &str =
31        "/v1/reward-state-v2/reward-balance/latest/{address}";
32    pub const REWARD_ACCOUNT_PROOF_ROUTE: &str = "/v1/reward-state-v2/proof/{height}/{address}";
33    pub const LATEST_REWARD_ACCOUNT_PROOF_ROUTE: &str =
34        "/v1/reward-state-v2/proof/latest/{address}";
35    pub const REWARD_AMOUNTS_ROUTE: &str =
36        "/v1/reward-state-v2/reward-amounts/{height}/{offset}/{limit}";
37    pub const REWARD_MERKLE_TREE_V2_ROUTE: &str =
38        "/v1/reward-state-v2/reward-merkle-tree-v2/{height}";
39    pub const REWARD_STATE_HEIGHT_ROUTE: &str = "/v1/reward-state/block-height";
40    pub const REWARD_STATE_V2_HEIGHT_ROUTE: &str = "/v1/reward-state-v2/block-height";
41    pub const REWARD_V1_ACCOUNT_PROOF_ROUTE: &str = "/v1/reward-state/proof/{height}/{address}";
42    pub const REWARD_V1_BALANCE_ROUTE: &str = "/v1/reward-state/reward-balance/{height}/{address}";
43    // Tide registered the same reward.toml handlers on both the reward-state and
44    // reward-state-v2 mounts; these four mirror LATEST_REWARD_BALANCE_ROUTE,
45    // LATEST_REWARD_ACCOUNT_PROOF_ROUTE, REWARD_AMOUNTS_ROUTE, and REWARD_MERKLE_TREE_V2_ROUTE.
46    pub const REWARD_V1_LATEST_BALANCE_ROUTE: &str =
47        "/v1/reward-state/reward-balance/latest/{address}";
48    pub const REWARD_V1_LATEST_ACCOUNT_PROOF_ROUTE: &str =
49        "/v1/reward-state/proof/latest/{address}";
50    pub const REWARD_V1_AMOUNTS_ROUTE: &str =
51        "/v1/reward-state/reward-amounts/{height}/{offset}/{limit}";
52    pub const REWARD_V1_MERKLE_TREE_V2_ROUTE: &str =
53        "/v1/reward-state/reward-merkle-tree-v2/{height}";
54
55    // Merklized-state `get_path` base routes, inherited from the legacy
56    // `hotshot-query-service` merklized-state API for both reward mounts.
57    pub const REWARD_STATE_PATH_BY_HEIGHT_ROUTE: &str = "/v1/reward-state/{height}/{key}";
58    pub const REWARD_STATE_PATH_BY_COMMIT_ROUTE: &str = "/v1/reward-state/commit/{commit}/{key}";
59    pub const REWARD_STATE_V2_PATH_BY_HEIGHT_ROUTE: &str = "/v1/reward-state-v2/{height}/{key}";
60    pub const REWARD_STATE_V2_PATH_BY_COMMIT_ROUTE: &str =
61        "/v1/reward-state-v2/commit/{commit}/{key}";
62
63    pub const NAMESPACE_PROOF_BY_HEIGHT_ROUTE: &str =
64        "/v1/availability/block/{height}/namespace/{namespace}";
65    pub const NAMESPACE_PROOF_BY_HASH_ROUTE: &str =
66        "/v1/availability/block/hash/{hash}/namespace/{namespace}";
67    pub const NAMESPACE_PROOF_BY_PAYLOAD_HASH_ROUTE: &str =
68        "/v1/availability/block/payload-hash/{payload_hash}/namespace/{namespace}";
69    pub const NAMESPACE_PROOF_RANGE_ROUTE: &str =
70        "/v1/availability/block/{from}/{until}/namespace/{namespace}";
71    pub const INCORRECT_ENCODING_PROOF_ROUTE: &str =
72        "/v1/availability/incorrect-encoding-proof/{block_number}/{namespace}";
73
74    pub const STATE_CERT_V1_ROUTE: &str = "/v1/availability/state-cert/{epoch}";
75    pub const STATE_CERT_V2_ROUTE: &str = "/v1/availability/state-cert-v2/{epoch}";
76
77    pub const LEAF_BY_HEIGHT_ROUTE: &str = "/v1/availability/leaf/{height}";
78    pub const LEAF_BY_HASH_ROUTE: &str = "/v1/availability/leaf/hash/{hash}";
79    pub const LEAF_RANGE_ROUTE: &str = "/v1/availability/leaf/{from}/{until}";
80
81    pub const HEADER_BY_HEIGHT_ROUTE: &str = "/v1/availability/header/{height}";
82    pub const HEADER_BY_HASH_ROUTE: &str = "/v1/availability/header/hash/{hash}";
83    pub const HEADER_BY_PAYLOAD_HASH_ROUTE: &str =
84        "/v1/availability/header/payload-hash/{payload_hash}";
85    pub const HEADER_RANGE_ROUTE: &str = "/v1/availability/header/{from}/{until}";
86
87    pub const BLOCK_BY_HEIGHT_ROUTE: &str = "/v1/availability/block/{height}";
88    pub const BLOCK_BY_HASH_ROUTE: &str = "/v1/availability/block/hash/{hash}";
89    pub const BLOCK_BY_PAYLOAD_HASH_ROUTE: &str =
90        "/v1/availability/block/payload-hash/{payload_hash}";
91    pub const BLOCK_RANGE_ROUTE: &str = "/v1/availability/block/{from}/{until}";
92
93    pub const PAYLOAD_BY_HEIGHT_ROUTE: &str = "/v1/availability/payload/{height}";
94    pub const PAYLOAD_BY_HASH_ROUTE: &str = "/v1/availability/payload/hash/{hash}";
95    pub const PAYLOAD_BY_BLOCK_HASH_ROUTE: &str =
96        "/v1/availability/payload/block-hash/{block_hash}";
97    pub const PAYLOAD_RANGE_ROUTE: &str = "/v1/availability/payload/{from}/{until}";
98
99    pub const VID_COMMON_BY_HEIGHT_ROUTE: &str = "/v1/availability/vid/common/{height}";
100    pub const VID_COMMON_BY_HASH_ROUTE: &str = "/v1/availability/vid/common/hash/{hash}";
101    pub const VID_COMMON_BY_PAYLOAD_HASH_ROUTE: &str =
102        "/v1/availability/vid/common/payload-hash/{payload_hash}";
103    pub const VID_COMMON_RANGE_ROUTE: &str = "/v1/availability/vid/common/{from}/{until}";
104
105    pub const LEAF_RANGES_ROUTE: &str = "/v1/availability/leaf/ranges";
106    pub const BLOCK_RANGES_ROUTE: &str = "/v1/availability/block/ranges";
107    pub const VID_COMMON_RANGES_ROUTE: &str = "/v1/availability/vid/common/ranges";
108
109    pub const TRANSACTION_BY_POSITION_NOPROOF_ROUTE: &str =
110        "/v1/availability/transaction/{height}/{index}/noproof";
111    pub const TRANSACTION_BY_HASH_NOPROOF_ROUTE: &str =
112        "/v1/availability/transaction/hash/{hash}/noproof";
113    pub const TRANSACTION_PROOF_BY_POSITION_ROUTE: &str =
114        "/v1/availability/transaction/{height}/{index}/proof";
115    pub const TRANSACTION_PROOF_BY_HASH_ROUTE: &str =
116        "/v1/availability/transaction/hash/{hash}/proof";
117    pub const TRANSACTION_BY_POSITION_ROUTE: &str = "/v1/availability/transaction/{height}/{index}";
118    pub const TRANSACTION_BY_HASH_ROUTE: &str = "/v1/availability/transaction/hash/{hash}";
119
120    pub const BLOCK_SUMMARY_BY_HEIGHT_ROUTE: &str = "/v1/availability/block/summary/{height}";
121    pub const BLOCK_SUMMARY_RANGE_ROUTE: &str = "/v1/availability/block/summaries/{from}/{until}";
122
123    pub const LIMITS_ROUTE: &str = "/v1/availability/limits";
124    pub const CERT2_BY_HEIGHT_ROUTE: &str = "/v1/availability/cert2/{height}";
125
126    pub const STREAM_LEAVES_ROUTE: &str = "/v1/availability/stream/leaves/{height}";
127    pub const STREAM_HEADERS_ROUTE: &str = "/v1/availability/stream/headers/{height}";
128    pub const STREAM_BLOCKS_ROUTE: &str = "/v1/availability/stream/blocks/{height}";
129    pub const STREAM_PAYLOADS_ROUTE: &str = "/v1/availability/stream/payloads/{height}";
130    pub const STREAM_VID_COMMON_ROUTE: &str = "/v1/availability/stream/vid/common/{height}";
131    pub const STREAM_TRANSACTIONS_ROUTE: &str = "/v1/availability/stream/transactions/{height}";
132    pub const STREAM_TRANSACTIONS_NS_ROUTE: &str =
133        "/v1/availability/stream/transactions/{height}/namespace/{namespace}";
134
135    pub const STREAM_NAMESPACE_PROOFS_ROUTE: &str =
136        "/v1/availability/stream/blocks/{height}/namespace/{namespace}";
137
138    pub const BLOCK_STATE_PATH_BY_HEIGHT_ROUTE: &str = "/v1/block-state/{height}/{key}";
139    pub const BLOCK_STATE_PATH_BY_COMMIT_ROUTE: &str = "/v1/block-state/commit/{commit}/{key}";
140    pub const BLOCK_STATE_HEIGHT_ROUTE: &str = "/v1/block-state/block-height";
141
142    pub const FEE_STATE_PATH_BY_HEIGHT_ROUTE: &str = "/v1/fee-state/{height}/{key}";
143    pub const FEE_STATE_PATH_BY_COMMIT_ROUTE: &str = "/v1/fee-state/commit/{commit}/{key}";
144    pub const FEE_STATE_HEIGHT_ROUTE: &str = "/v1/fee-state/block-height";
145    pub const FEE_STATE_BALANCE_LATEST_ROUTE: &str = "/v1/fee-state/fee-balance/latest/{address}";
146
147    pub const STATUS_BLOCK_HEIGHT_ROUTE: &str = "/v1/status/block-height";
148    pub const STATUS_SUCCESS_RATE_ROUTE: &str = "/v1/status/success-rate";
149    pub const STATUS_TIME_SINCE_LAST_DECIDE_ROUTE: &str = "/v1/status/time-since-last-decide";
150    pub const STATUS_METRICS_ROUTE: &str = "/v1/status/metrics";
151    pub const STATUS_KEYS_ROUTE: &str = "/v1/status/keys";
152
153    pub const CONFIG_HOTSHOT_ROUTE: &str = "/v1/config/hotshot";
154    pub const CONFIG_ENV_ROUTE: &str = "/v1/config/env";
155    pub const CONFIG_RUNTIME_ROUTE: &str = "/v1/config/runtime";
156
157    pub const NODE_BLOCK_HEIGHT_ROUTE: &str = "/v1/node/block-height";
158
159    pub const NODE_TRANSACTIONS_COUNT_ROUTE: &str = "/v1/node/transactions/count";
160    pub const NODE_TRANSACTIONS_COUNT_TO_ROUTE: &str = "/v1/node/transactions/count/{to}";
161    pub const NODE_TRANSACTIONS_COUNT_FROM_TO_ROUTE: &str =
162        "/v1/node/transactions/count/{from}/{to}";
163    pub const NODE_TRANSACTIONS_COUNT_NS_ROUTE: &str =
164        "/v1/node/transactions/count/namespace/{namespace}";
165    pub const NODE_TRANSACTIONS_COUNT_NS_TO_ROUTE: &str =
166        "/v1/node/transactions/count/namespace/{namespace}/{to}";
167    pub const NODE_TRANSACTIONS_COUNT_NS_FROM_TO_ROUTE: &str =
168        "/v1/node/transactions/count/namespace/{namespace}/{from}/{to}";
169
170    pub const NODE_PAYLOADS_SIZE_ROUTE: &str = "/v1/node/payloads/size";
171    pub const NODE_PAYLOADS_SIZE_TO_ROUTE: &str = "/v1/node/payloads/size/{to}";
172    pub const NODE_PAYLOADS_SIZE_FROM_TO_ROUTE: &str = "/v1/node/payloads/size/{from}/{to}";
173    pub const NODE_PAYLOADS_TOTAL_SIZE_ROUTE: &str = "/v1/node/payloads/total-size";
174    pub const NODE_PAYLOADS_SIZE_NS_ROUTE: &str = "/v1/node/payloads/size/namespace/{namespace}";
175    pub const NODE_PAYLOADS_SIZE_NS_TO_ROUTE: &str =
176        "/v1/node/payloads/size/namespace/{namespace}/{to}";
177    pub const NODE_PAYLOADS_SIZE_NS_FROM_TO_ROUTE: &str =
178        "/v1/node/payloads/size/namespace/{namespace}/{from}/{to}";
179
180    pub const NODE_VID_SHARE_BY_HEIGHT_ROUTE: &str = "/v1/node/vid/share/{height}";
181    pub const NODE_VID_SHARE_BY_HASH_ROUTE: &str = "/v1/node/vid/share/hash/{hash}";
182    pub const NODE_VID_SHARE_BY_PAYLOAD_HASH_ROUTE: &str =
183        "/v1/node/vid/share/payload-hash/{payload_hash}";
184
185    pub const NODE_SYNC_STATUS_ROUTE: &str = "/v1/node/sync-status";
186
187    pub const NODE_HEADER_WINDOW_TIME_ROUTE: &str = "/v1/node/header/window/{start}/{end}";
188    pub const NODE_HEADER_WINDOW_HEIGHT_ROUTE: &str = "/v1/node/header/window/from/{height}/{end}";
189    pub const NODE_HEADER_WINDOW_HASH_ROUTE: &str = "/v1/node/header/window/from/hash/{hash}/{end}";
190
191    pub const NODE_LIMITS_ROUTE: &str = "/v1/node/limits";
192
193    pub const NODE_STAKE_TABLE_CURRENT_ROUTE: &str = "/v1/node/stake-table/current";
194    pub const NODE_STAKE_TABLE_ROUTE: &str = "/v1/node/stake-table/{epoch_number}";
195    pub const NODE_DA_STAKE_TABLE_CURRENT_ROUTE: &str = "/v1/node/da-stake-table/current";
196    pub const NODE_DA_STAKE_TABLE_ROUTE: &str = "/v1/node/da-stake-table/{epoch_number}";
197
198    pub const NODE_VALIDATORS_ROUTE: &str = "/v1/node/validators/{epoch_number}";
199    pub const NODE_ALL_VALIDATORS_ROUTE: &str =
200        "/v1/node/all-validators/{epoch_number}/{offset}/{limit}";
201
202    pub const NODE_PROPOSAL_PARTICIPATION_CURRENT_ROUTE: &str =
203        "/v1/node/participation/proposal/current";
204    pub const NODE_PROPOSAL_PARTICIPATION_ROUTE: &str = "/v1/node/participation/proposal/{epoch}";
205    pub const NODE_VOTE_PARTICIPATION_CURRENT_ROUTE: &str = "/v1/node/participation/vote/current";
206    pub const NODE_VOTE_PARTICIPATION_ROUTE: &str = "/v1/node/participation/vote/{epoch}";
207
208    pub const NODE_BLOCK_REWARD_ROUTE: &str = "/v1/node/block-reward";
209    pub const NODE_BLOCK_REWARD_EPOCH_ROUTE: &str = "/v1/node/block-reward/epoch/{epoch_number}";
210
211    pub const NODE_OLDEST_BLOCK_ROUTE: &str = "/v1/node/oldest-block";
212    pub const NODE_OLDEST_LEAF_ROUTE: &str = "/v1/node/oldest-leaf";
213
214    // Catchup routes (under /v1/catchup)
215    pub const CATCHUP_ACCOUNT_ROUTE: &str = "/v1/catchup/{height}/{view}/account/{address}";
216    pub const CATCHUP_ACCOUNTS_ROUTE: &str = "/v1/catchup/{height}/{view}/accounts";
217    pub const CATCHUP_BLOCKS_ROUTE: &str = "/v1/catchup/{height}/{view}/blocks";
218    pub const CATCHUP_CHAINCONFIG_ROUTE: &str = "/v1/catchup/chain-config/{commitment}";
219    pub const CATCHUP_LEAFCHAIN_ROUTE: &str = "/v1/catchup/{height}/leafchain";
220    pub const CATCHUP_CERT2_ROUTE: &str = "/v1/catchup/{height}/cert2";
221    pub const CATCHUP_REWARD_ACCOUNT_ROUTE: &str =
222        "/v1/catchup/{height}/{view}/reward-account/{address}";
223    pub const CATCHUP_REWARD_ACCOUNTS_ROUTE: &str = "/v1/catchup/{height}/{view}/reward-accounts";
224    pub const CATCHUP_REWARD_ACCOUNT_V2_ROUTE: &str =
225        "/v1/catchup/{height}/{view}/reward-account-v2/{address}";
226    pub const CATCHUP_REWARD_ACCOUNTS_V2_ROUTE: &str =
227        "/v1/catchup/{height}/{view}/reward-accounts-v2";
228    pub const CATCHUP_REWARD_AMOUNTS_ROUTE: &str =
229        "/v1/catchup/{height}/reward-amounts/{limit}/{offset}";
230    pub const CATCHUP_REWARD_MERKLE_TREE_V2_ROUTE: &str =
231        "/v1/catchup/reward-merkle-tree-v2/{height}/{view}";
232    pub const CATCHUP_STATE_CERT_ROUTE: &str = "/v1/catchup/{epoch}/state-cert";
233
234    // Submit
235    pub const SUBMIT_ROUTE: &str = "/v1/submit/submit";
236
237    // State signature
238    pub const STATE_SIGNATURE_BLOCK_ROUTE: &str = "/v1/state-signature/block/{height}";
239
240    // Light client
241    pub const LC_LEAF_BY_HEIGHT_ROUTE: &str = "/v1/light-client/leaf/{height}";
242    pub const LC_LEAF_BY_HEIGHT_FINALIZED_ROUTE: &str =
243        "/v1/light-client/leaf/{height}/{finalized}";
244    pub const LC_LEAF_BY_HASH_ROUTE: &str = "/v1/light-client/leaf/hash/{hash}";
245    pub const LC_LEAF_BY_HASH_FINALIZED_ROUTE: &str =
246        "/v1/light-client/leaf/hash/{hash}/{finalized}";
247    pub const LC_LEAF_BY_BLOCK_HASH_ROUTE: &str = "/v1/light-client/leaf/block-hash/{block_hash}";
248    pub const LC_LEAF_BY_BLOCK_HASH_FINALIZED_ROUTE: &str =
249        "/v1/light-client/leaf/block-hash/{block_hash}/{finalized}";
250    pub const LC_LEAF_BY_PAYLOAD_HASH_ROUTE: &str =
251        "/v1/light-client/leaf/payload-hash/{payload_hash}";
252    pub const LC_LEAF_BY_PAYLOAD_HASH_FINALIZED_ROUTE: &str =
253        "/v1/light-client/leaf/payload-hash/{payload_hash}/{finalized}";
254
255    pub const LC_HEADER_BY_HEIGHT_ROUTE: &str = "/v1/light-client/header/{root}/{height}";
256    pub const LC_HEADER_BY_HASH_ROUTE: &str = "/v1/light-client/header/{root}/hash/{hash}";
257    pub const LC_HEADER_BY_PAYLOAD_HASH_ROUTE: &str =
258        "/v1/light-client/header/{root}/payload-hash/{payload_hash}";
259
260    pub const LC_STAKE_TABLE_ROUTE: &str = "/v1/light-client/stake-table/{epoch}";
261
262    pub const LC_PAYLOAD_ROUTE: &str = "/v1/light-client/payload/{height}";
263    pub const LC_PAYLOAD_RANGE_ROUTE: &str = "/v1/light-client/payload/{start}/{end}";
264    pub const LC_PAYLOAD_RANGES_ROUTE: &str = "/v1/light-client/payload/ranges";
265
266    pub const LC_NAMESPACE_ROUTE: &str = "/v1/light-client/namespace/{height}/{namespace}";
267    pub const LC_NAMESPACE_RANGE_ROUTE: &str =
268        "/v1/light-client/namespace/{start}/{end}/{namespace}";
269    pub const LC_NAMESPACES_RANGE_ROUTE: &str =
270        "/v1/light-client/namespaces/{start}/{end}/{namespaces}";
271
272    // Explorer
273    pub const EXPLORER_BLOCK_DETAIL_BY_HEIGHT_ROUTE: &str = "/v1/explorer/block/{height}";
274    pub const EXPLORER_BLOCK_DETAIL_BY_HASH_ROUTE: &str = "/v1/explorer/block/hash/{hash}";
275    pub const EXPLORER_BLOCK_SUMMARIES_LATEST_ROUTE: &str = "/v1/explorer/blocks/latest/{limit}";
276    pub const EXPLORER_BLOCK_SUMMARIES_FROM_ROUTE: &str = "/v1/explorer/blocks/{from}/{limit}";
277    pub const EXPLORER_TX_DETAIL_BY_POSITION_ROUTE: &str =
278        "/v1/explorer/transaction/{height}/{offset}";
279    pub const EXPLORER_TX_DETAIL_BY_HASH_ROUTE: &str = "/v1/explorer/transaction/hash/{hash}";
280
281    pub const EXPLORER_TX_SUMMARIES_LATEST_ROUTE: &str = "/v1/explorer/transactions/latest/{limit}";
282    pub const EXPLORER_TX_SUMMARIES_FROM_ROUTE: &str =
283        "/v1/explorer/transactions/from/{height}/{offset}/{limit}";
284    pub const EXPLORER_TX_SUMMARIES_BY_HASH_ROUTE: &str =
285        "/v1/explorer/transactions/hash/{hash}/{limit}";
286
287    pub const EXPLORER_TX_SUMMARIES_LATEST_BLOCK_ROUTE: &str =
288        "/v1/explorer/transactions/latest/{limit}/block/{block}";
289    pub const EXPLORER_TX_SUMMARIES_FROM_BLOCK_ROUTE: &str =
290        "/v1/explorer/transactions/from/{height}/{offset}/{limit}/block/{block}";
291    pub const EXPLORER_TX_SUMMARIES_BY_HASH_BLOCK_ROUTE: &str =
292        "/v1/explorer/transactions/hash/{hash}/{limit}/block/{block}";
293
294    pub const EXPLORER_TX_SUMMARIES_LATEST_NS_ROUTE: &str =
295        "/v1/explorer/transactions/latest/{limit}/namespace/{namespace}";
296    pub const EXPLORER_TX_SUMMARIES_FROM_NS_ROUTE: &str =
297        "/v1/explorer/transactions/from/{height}/{offset}/{limit}/namespace/{namespace}";
298    pub const EXPLORER_TX_SUMMARIES_BY_HASH_NS_ROUTE: &str =
299        "/v1/explorer/transactions/hash/{hash}/{limit}/namespace/{namespace}";
300
301    pub const EXPLORER_SUMMARY_ROUTE: &str = "/v1/explorer/explorer-summary";
302    pub const EXPLORER_SEARCH_ROUTE: &str = "/v1/explorer/search/{query}";
303
304    // Token
305    pub const TOKEN_TOTAL_MINTED_SUPPLY_ROUTE: &str = "/v1/token/total-minted-supply";
306    pub const TOKEN_CIRCULATING_SUPPLY_ROUTE: &str = "/v1/token/circulating-supply";
307    pub const TOKEN_CIRCULATING_SUPPLY_ETHEREUM_ROUTE: &str =
308        "/v1/token/circulating-supply-ethereum";
309    pub const TOKEN_TOTAL_ISSUED_SUPPLY_ROUTE: &str = "/v1/token/total-issued-supply";
310    pub const TOKEN_TOTAL_REWARD_DISTRIBUTED_ROUTE: &str = "/v1/token/total-reward-distributed";
311
312    // Database (diagnostic)
313    pub const DATABASE_TABLE_SIZES_ROUTE: &str = "/v1/database/table-sizes";
314    pub const DATABASE_MIGRATION_STATUS_ROUTE: &str = "/v1/database/migration-status";
315
316    // API docs
317    pub const OPENAPI_SPEC_ROUTE: &str = "/v1/docs/openapi.json";
318    pub const SWAGGER_ROUTE: &str = "/v1";
319    pub const SCALAR_ROUTE: &str = "/v1/scalar";
320
321    // Reward state v2
322    path_fn!(
323        reward_claim_input,
324        REWARD_CLAIM_INPUT_ROUTE,
325        height,
326        address
327    );
328    path_fn!(reward_balance, REWARD_BALANCE_ROUTE, height, address);
329    path_fn!(latest_reward_balance, LATEST_REWARD_BALANCE_ROUTE, address);
330    path_fn!(
331        reward_account_proof,
332        REWARD_ACCOUNT_PROOF_ROUTE,
333        height,
334        address
335    );
336    path_fn!(
337        latest_reward_account_proof,
338        LATEST_REWARD_ACCOUNT_PROOF_ROUTE,
339        address
340    );
341    path_fn!(reward_amounts, REWARD_AMOUNTS_ROUTE, height, offset, limit);
342    path_fn!(reward_merkle_tree_v2, REWARD_MERKLE_TREE_V2_ROUTE, height);
343    path_fn!(reward_state_height, REWARD_STATE_HEIGHT_ROUTE);
344    path_fn!(reward_state_v2_height, REWARD_STATE_V2_HEIGHT_ROUTE);
345    path_fn!(
346        reward_v1_account_proof,
347        REWARD_V1_ACCOUNT_PROOF_ROUTE,
348        height,
349        address
350    );
351    path_fn!(reward_v1_balance, REWARD_V1_BALANCE_ROUTE, height, address);
352    path_fn!(
353        reward_v1_latest_balance,
354        REWARD_V1_LATEST_BALANCE_ROUTE,
355        address
356    );
357    path_fn!(
358        reward_v1_latest_account_proof,
359        REWARD_V1_LATEST_ACCOUNT_PROOF_ROUTE,
360        address
361    );
362    path_fn!(
363        reward_v1_amounts,
364        REWARD_V1_AMOUNTS_ROUTE,
365        height,
366        offset,
367        limit
368    );
369    path_fn!(
370        reward_v1_merkle_tree_v2,
371        REWARD_V1_MERKLE_TREE_V2_ROUTE,
372        height
373    );
374    path_fn!(
375        reward_state_path_by_height,
376        REWARD_STATE_PATH_BY_HEIGHT_ROUTE,
377        height,
378        key
379    );
380    path_fn!(
381        reward_state_path_by_commit,
382        REWARD_STATE_PATH_BY_COMMIT_ROUTE,
383        commit,
384        key
385    );
386    path_fn!(
387        reward_state_v2_path_by_height,
388        REWARD_STATE_V2_PATH_BY_HEIGHT_ROUTE,
389        height,
390        key
391    );
392    path_fn!(
393        reward_state_v2_path_by_commit,
394        REWARD_STATE_V2_PATH_BY_COMMIT_ROUTE,
395        commit,
396        key
397    );
398
399    // Availability — namespace proofs
400    path_fn!(
401        namespace_proof_by_height,
402        NAMESPACE_PROOF_BY_HEIGHT_ROUTE,
403        height,
404        namespace
405    );
406    path_fn!(
407        namespace_proof_by_hash,
408        NAMESPACE_PROOF_BY_HASH_ROUTE,
409        hash,
410        namespace
411    );
412    path_fn!(
413        namespace_proof_by_payload_hash,
414        NAMESPACE_PROOF_BY_PAYLOAD_HASH_ROUTE,
415        payload_hash,
416        namespace
417    );
418    path_fn!(
419        namespace_proof_range,
420        NAMESPACE_PROOF_RANGE_ROUTE,
421        from,
422        until,
423        namespace
424    );
425    path_fn!(
426        incorrect_encoding_proof,
427        INCORRECT_ENCODING_PROOF_ROUTE,
428        block_number,
429        namespace
430    );
431
432    // Availability — state certificates
433    path_fn!(state_cert_v1, STATE_CERT_V1_ROUTE, epoch);
434    path_fn!(state_cert_v2, STATE_CERT_V2_ROUTE, epoch);
435
436    // Availability — leaves
437    path_fn!(leaf_by_height, LEAF_BY_HEIGHT_ROUTE, height);
438    path_fn!(leaf_by_hash, LEAF_BY_HASH_ROUTE, hash);
439    path_fn!(leaf_range, LEAF_RANGE_ROUTE, from, until);
440
441    // Availability — headers
442    path_fn!(header_by_height, HEADER_BY_HEIGHT_ROUTE, height);
443    path_fn!(header_by_hash, HEADER_BY_HASH_ROUTE, hash);
444    path_fn!(
445        header_by_payload_hash,
446        HEADER_BY_PAYLOAD_HASH_ROUTE,
447        payload_hash
448    );
449    path_fn!(header_range, HEADER_RANGE_ROUTE, from, until);
450
451    // Availability — blocks
452    path_fn!(block_by_height, BLOCK_BY_HEIGHT_ROUTE, height);
453    path_fn!(block_by_hash, BLOCK_BY_HASH_ROUTE, hash);
454    path_fn!(
455        block_by_payload_hash,
456        BLOCK_BY_PAYLOAD_HASH_ROUTE,
457        payload_hash
458    );
459    path_fn!(block_range, BLOCK_RANGE_ROUTE, from, until);
460
461    // Availability — payloads
462    path_fn!(payload_by_height, PAYLOAD_BY_HEIGHT_ROUTE, height);
463    path_fn!(payload_by_hash, PAYLOAD_BY_HASH_ROUTE, hash);
464    path_fn!(
465        payload_by_block_hash,
466        PAYLOAD_BY_BLOCK_HASH_ROUTE,
467        block_hash
468    );
469    path_fn!(payload_range, PAYLOAD_RANGE_ROUTE, from, until);
470
471    // Availability — VID common
472    path_fn!(vid_common_by_height, VID_COMMON_BY_HEIGHT_ROUTE, height);
473    path_fn!(vid_common_by_hash, VID_COMMON_BY_HASH_ROUTE, hash);
474    path_fn!(
475        vid_common_by_payload_hash,
476        VID_COMMON_BY_PAYLOAD_HASH_ROUTE,
477        payload_hash
478    );
479    path_fn!(vid_common_range, VID_COMMON_RANGE_ROUTE, from, until);
480
481    // Availability, sets of height ranges
482    path_fn!(leaf_ranges, LEAF_RANGES_ROUTE);
483    path_fn!(block_ranges, BLOCK_RANGES_ROUTE);
484    path_fn!(vid_common_ranges, VID_COMMON_RANGES_ROUTE);
485
486    // Availability — transactions
487    path_fn!(
488        transaction_by_position_noproof,
489        TRANSACTION_BY_POSITION_NOPROOF_ROUTE,
490        height,
491        index
492    );
493    path_fn!(
494        transaction_by_hash_noproof,
495        TRANSACTION_BY_HASH_NOPROOF_ROUTE,
496        hash
497    );
498    path_fn!(
499        transaction_proof_by_position,
500        TRANSACTION_PROOF_BY_POSITION_ROUTE,
501        height,
502        index
503    );
504    path_fn!(
505        transaction_proof_by_hash,
506        TRANSACTION_PROOF_BY_HASH_ROUTE,
507        hash
508    );
509    path_fn!(
510        transaction_by_position,
511        TRANSACTION_BY_POSITION_ROUTE,
512        height,
513        index
514    );
515    path_fn!(transaction_by_hash, TRANSACTION_BY_HASH_ROUTE, hash);
516
517    // Availability — block summaries
518    path_fn!(
519        block_summary_by_height,
520        BLOCK_SUMMARY_BY_HEIGHT_ROUTE,
521        height
522    );
523    path_fn!(block_summary_range, BLOCK_SUMMARY_RANGE_ROUTE, from, until);
524
525    // Availability — misc
526    path_fn!(limits, LIMITS_ROUTE);
527    path_fn!(cert2_by_height, CERT2_BY_HEIGHT_ROUTE, height);
528
529    // Availability — streams
530    path_fn!(stream_leaves, STREAM_LEAVES_ROUTE, height);
531    path_fn!(stream_headers, STREAM_HEADERS_ROUTE, height);
532    path_fn!(stream_blocks, STREAM_BLOCKS_ROUTE, height);
533    path_fn!(stream_payloads, STREAM_PAYLOADS_ROUTE, height);
534    path_fn!(stream_vid_common, STREAM_VID_COMMON_ROUTE, height);
535    path_fn!(stream_transactions, STREAM_TRANSACTIONS_ROUTE, height);
536    path_fn!(
537        stream_transactions_ns,
538        STREAM_TRANSACTIONS_NS_ROUTE,
539        height,
540        namespace
541    );
542    path_fn!(
543        stream_namespace_proofs,
544        STREAM_NAMESPACE_PROOFS_ROUTE,
545        height,
546        namespace
547    );
548
549    // Block state
550    path_fn!(
551        block_state_path_by_height,
552        BLOCK_STATE_PATH_BY_HEIGHT_ROUTE,
553        height,
554        key
555    );
556    path_fn!(
557        block_state_path_by_commit,
558        BLOCK_STATE_PATH_BY_COMMIT_ROUTE,
559        commit,
560        key
561    );
562    path_fn!(block_state_height, BLOCK_STATE_HEIGHT_ROUTE);
563
564    // Fee state
565    path_fn!(
566        fee_state_path_by_height,
567        FEE_STATE_PATH_BY_HEIGHT_ROUTE,
568        height,
569        key
570    );
571    path_fn!(
572        fee_state_path_by_commit,
573        FEE_STATE_PATH_BY_COMMIT_ROUTE,
574        commit,
575        key
576    );
577    path_fn!(fee_state_height, FEE_STATE_HEIGHT_ROUTE);
578    path_fn!(
579        fee_state_balance_latest,
580        FEE_STATE_BALANCE_LATEST_ROUTE,
581        address
582    );
583
584    // Status
585    path_fn!(status_block_height, STATUS_BLOCK_HEIGHT_ROUTE);
586    path_fn!(status_success_rate, STATUS_SUCCESS_RATE_ROUTE);
587    path_fn!(
588        status_time_since_last_decide,
589        STATUS_TIME_SINCE_LAST_DECIDE_ROUTE
590    );
591    path_fn!(status_metrics, STATUS_METRICS_ROUTE);
592    path_fn!(status_keys, STATUS_KEYS_ROUTE);
593
594    // Config
595    path_fn!(config_hotshot, CONFIG_HOTSHOT_ROUTE);
596    path_fn!(config_env, CONFIG_ENV_ROUTE);
597    path_fn!(config_runtime, CONFIG_RUNTIME_ROUTE);
598
599    // Node — block height / counts / sizes
600    path_fn!(node_block_height, NODE_BLOCK_HEIGHT_ROUTE);
601    path_fn!(node_transactions_count, NODE_TRANSACTIONS_COUNT_ROUTE);
602    path_fn!(
603        node_transactions_count_to,
604        NODE_TRANSACTIONS_COUNT_TO_ROUTE,
605        to
606    );
607    path_fn!(
608        node_transactions_count_from_to,
609        NODE_TRANSACTIONS_COUNT_FROM_TO_ROUTE,
610        from,
611        to
612    );
613    path_fn!(
614        node_transactions_count_ns,
615        NODE_TRANSACTIONS_COUNT_NS_ROUTE,
616        namespace
617    );
618    path_fn!(
619        node_transactions_count_ns_to,
620        NODE_TRANSACTIONS_COUNT_NS_TO_ROUTE,
621        namespace,
622        to
623    );
624    path_fn!(
625        node_transactions_count_ns_from_to,
626        NODE_TRANSACTIONS_COUNT_NS_FROM_TO_ROUTE,
627        namespace,
628        from,
629        to
630    );
631
632    path_fn!(node_payloads_size, NODE_PAYLOADS_SIZE_ROUTE);
633    path_fn!(node_payloads_size_to, NODE_PAYLOADS_SIZE_TO_ROUTE, to);
634    path_fn!(
635        node_payloads_size_from_to,
636        NODE_PAYLOADS_SIZE_FROM_TO_ROUTE,
637        from,
638        to
639    );
640    path_fn!(node_payloads_total_size, NODE_PAYLOADS_TOTAL_SIZE_ROUTE);
641    path_fn!(
642        node_payloads_size_ns,
643        NODE_PAYLOADS_SIZE_NS_ROUTE,
644        namespace
645    );
646    path_fn!(
647        node_payloads_size_ns_to,
648        NODE_PAYLOADS_SIZE_NS_TO_ROUTE,
649        namespace,
650        to
651    );
652    path_fn!(
653        node_payloads_size_ns_from_to,
654        NODE_PAYLOADS_SIZE_NS_FROM_TO_ROUTE,
655        namespace,
656        from,
657        to
658    );
659
660    // Node — VID shares
661    path_fn!(
662        node_vid_share_by_height,
663        NODE_VID_SHARE_BY_HEIGHT_ROUTE,
664        height
665    );
666    path_fn!(node_vid_share_by_hash, NODE_VID_SHARE_BY_HASH_ROUTE, hash);
667    path_fn!(
668        node_vid_share_by_payload_hash,
669        NODE_VID_SHARE_BY_PAYLOAD_HASH_ROUTE,
670        payload_hash
671    );
672
673    // Node — sync, header windows
674    path_fn!(node_sync_status, NODE_SYNC_STATUS_ROUTE);
675    path_fn!(
676        node_header_window_time,
677        NODE_HEADER_WINDOW_TIME_ROUTE,
678        start,
679        end
680    );
681    path_fn!(
682        node_header_window_height,
683        NODE_HEADER_WINDOW_HEIGHT_ROUTE,
684        height,
685        end
686    );
687    path_fn!(
688        node_header_window_hash,
689        NODE_HEADER_WINDOW_HASH_ROUTE,
690        hash,
691        end
692    );
693    path_fn!(node_limits, NODE_LIMITS_ROUTE);
694
695    // Node — stake table / validators / participation
696    path_fn!(node_stake_table_current, NODE_STAKE_TABLE_CURRENT_ROUTE);
697    path_fn!(node_stake_table, NODE_STAKE_TABLE_ROUTE, epoch_number);
698    path_fn!(
699        node_da_stake_table_current,
700        NODE_DA_STAKE_TABLE_CURRENT_ROUTE
701    );
702    path_fn!(node_da_stake_table, NODE_DA_STAKE_TABLE_ROUTE, epoch_number);
703    path_fn!(node_validators, NODE_VALIDATORS_ROUTE, epoch_number);
704    path_fn!(
705        node_all_validators,
706        NODE_ALL_VALIDATORS_ROUTE,
707        epoch_number,
708        offset,
709        limit
710    );
711    path_fn!(
712        node_proposal_participation_current,
713        NODE_PROPOSAL_PARTICIPATION_CURRENT_ROUTE
714    );
715    path_fn!(
716        node_proposal_participation,
717        NODE_PROPOSAL_PARTICIPATION_ROUTE,
718        epoch
719    );
720    path_fn!(
721        node_vote_participation_current,
722        NODE_VOTE_PARTICIPATION_CURRENT_ROUTE
723    );
724    path_fn!(
725        node_vote_participation,
726        NODE_VOTE_PARTICIPATION_ROUTE,
727        epoch
728    );
729
730    // Node — block reward / oldest
731    path_fn!(node_block_reward, NODE_BLOCK_REWARD_ROUTE);
732    path_fn!(
733        node_block_reward_epoch,
734        NODE_BLOCK_REWARD_EPOCH_ROUTE,
735        epoch_number
736    );
737    path_fn!(node_oldest_block, NODE_OLDEST_BLOCK_ROUTE);
738    path_fn!(node_oldest_leaf, NODE_OLDEST_LEAF_ROUTE);
739
740    // Catchup
741    path_fn!(
742        catchup_account,
743        CATCHUP_ACCOUNT_ROUTE,
744        height,
745        view,
746        address
747    );
748    path_fn!(catchup_accounts, CATCHUP_ACCOUNTS_ROUTE, height, view);
749    path_fn!(catchup_blocks, CATCHUP_BLOCKS_ROUTE, height, view);
750    path_fn!(catchup_chainconfig, CATCHUP_CHAINCONFIG_ROUTE, commitment);
751    path_fn!(catchup_leafchain, CATCHUP_LEAFCHAIN_ROUTE, height);
752    path_fn!(catchup_cert2, CATCHUP_CERT2_ROUTE, height);
753    path_fn!(
754        catchup_reward_account,
755        CATCHUP_REWARD_ACCOUNT_ROUTE,
756        height,
757        view,
758        address
759    );
760    path_fn!(
761        catchup_reward_accounts,
762        CATCHUP_REWARD_ACCOUNTS_ROUTE,
763        height,
764        view
765    );
766    path_fn!(
767        catchup_reward_account_v2,
768        CATCHUP_REWARD_ACCOUNT_V2_ROUTE,
769        height,
770        view,
771        address
772    );
773    path_fn!(
774        catchup_reward_accounts_v2,
775        CATCHUP_REWARD_ACCOUNTS_V2_ROUTE,
776        height,
777        view
778    );
779    path_fn!(
780        catchup_reward_amounts,
781        CATCHUP_REWARD_AMOUNTS_ROUTE,
782        height,
783        limit,
784        offset
785    );
786    path_fn!(
787        catchup_reward_merkle_tree_v2,
788        CATCHUP_REWARD_MERKLE_TREE_V2_ROUTE,
789        height,
790        view
791    );
792    path_fn!(catchup_state_cert, CATCHUP_STATE_CERT_ROUTE, epoch);
793
794    // Submit
795    path_fn!(submit, SUBMIT_ROUTE);
796
797    // State signature
798    path_fn!(state_signature_block, STATE_SIGNATURE_BLOCK_ROUTE, height);
799
800    // Light client
801    path_fn!(lc_leaf_by_height, LC_LEAF_BY_HEIGHT_ROUTE, height);
802    path_fn!(
803        lc_leaf_by_height_finalized,
804        LC_LEAF_BY_HEIGHT_FINALIZED_ROUTE,
805        height,
806        finalized
807    );
808    path_fn!(lc_leaf_by_hash, LC_LEAF_BY_HASH_ROUTE, hash);
809    path_fn!(
810        lc_leaf_by_hash_finalized,
811        LC_LEAF_BY_HASH_FINALIZED_ROUTE,
812        hash,
813        finalized
814    );
815    path_fn!(
816        lc_leaf_by_block_hash,
817        LC_LEAF_BY_BLOCK_HASH_ROUTE,
818        block_hash
819    );
820    path_fn!(
821        lc_leaf_by_block_hash_finalized,
822        LC_LEAF_BY_BLOCK_HASH_FINALIZED_ROUTE,
823        block_hash,
824        finalized
825    );
826    path_fn!(
827        lc_leaf_by_payload_hash,
828        LC_LEAF_BY_PAYLOAD_HASH_ROUTE,
829        payload_hash
830    );
831    path_fn!(
832        lc_leaf_by_payload_hash_finalized,
833        LC_LEAF_BY_PAYLOAD_HASH_FINALIZED_ROUTE,
834        payload_hash,
835        finalized
836    );
837    path_fn!(lc_header_by_height, LC_HEADER_BY_HEIGHT_ROUTE, root, height);
838    path_fn!(lc_header_by_hash, LC_HEADER_BY_HASH_ROUTE, root, hash);
839    path_fn!(
840        lc_header_by_payload_hash,
841        LC_HEADER_BY_PAYLOAD_HASH_ROUTE,
842        root,
843        payload_hash
844    );
845    path_fn!(lc_stake_table, LC_STAKE_TABLE_ROUTE, epoch);
846    path_fn!(lc_payload, LC_PAYLOAD_ROUTE, height);
847    path_fn!(lc_payload_range, LC_PAYLOAD_RANGE_ROUTE, start, end);
848    path_fn!(lc_payload_ranges, LC_PAYLOAD_RANGES_ROUTE);
849    path_fn!(lc_namespace, LC_NAMESPACE_ROUTE, height, namespace);
850    path_fn!(
851        lc_namespace_range,
852        LC_NAMESPACE_RANGE_ROUTE,
853        start,
854        end,
855        namespace
856    );
857    path_fn!(
858        lc_namespaces_range,
859        LC_NAMESPACES_RANGE_ROUTE,
860        start,
861        end,
862        namespaces
863    );
864
865    // Explorer — blocks
866    path_fn!(
867        explorer_block_detail_by_height,
868        EXPLORER_BLOCK_DETAIL_BY_HEIGHT_ROUTE,
869        height
870    );
871    path_fn!(
872        explorer_block_detail_by_hash,
873        EXPLORER_BLOCK_DETAIL_BY_HASH_ROUTE,
874        hash
875    );
876    path_fn!(
877        explorer_block_summaries_latest,
878        EXPLORER_BLOCK_SUMMARIES_LATEST_ROUTE,
879        limit
880    );
881    path_fn!(
882        explorer_block_summaries_from,
883        EXPLORER_BLOCK_SUMMARIES_FROM_ROUTE,
884        from,
885        limit
886    );
887
888    // Explorer — transactions
889    path_fn!(
890        explorer_tx_detail_by_position,
891        EXPLORER_TX_DETAIL_BY_POSITION_ROUTE,
892        height,
893        offset
894    );
895    path_fn!(
896        explorer_tx_detail_by_hash,
897        EXPLORER_TX_DETAIL_BY_HASH_ROUTE,
898        hash
899    );
900    path_fn!(
901        explorer_tx_summaries_latest,
902        EXPLORER_TX_SUMMARIES_LATEST_ROUTE,
903        limit
904    );
905    path_fn!(
906        explorer_tx_summaries_from,
907        EXPLORER_TX_SUMMARIES_FROM_ROUTE,
908        height,
909        offset,
910        limit
911    );
912    path_fn!(
913        explorer_tx_summaries_by_hash,
914        EXPLORER_TX_SUMMARIES_BY_HASH_ROUTE,
915        hash,
916        limit
917    );
918    path_fn!(
919        explorer_tx_summaries_latest_block,
920        EXPLORER_TX_SUMMARIES_LATEST_BLOCK_ROUTE,
921        limit,
922        block
923    );
924    path_fn!(
925        explorer_tx_summaries_from_block,
926        EXPLORER_TX_SUMMARIES_FROM_BLOCK_ROUTE,
927        height,
928        offset,
929        limit,
930        block
931    );
932    path_fn!(
933        explorer_tx_summaries_by_hash_block,
934        EXPLORER_TX_SUMMARIES_BY_HASH_BLOCK_ROUTE,
935        hash,
936        limit,
937        block
938    );
939    path_fn!(
940        explorer_tx_summaries_latest_ns,
941        EXPLORER_TX_SUMMARIES_LATEST_NS_ROUTE,
942        limit,
943        namespace
944    );
945    path_fn!(
946        explorer_tx_summaries_from_ns,
947        EXPLORER_TX_SUMMARIES_FROM_NS_ROUTE,
948        height,
949        offset,
950        limit,
951        namespace
952    );
953    path_fn!(
954        explorer_tx_summaries_by_hash_ns,
955        EXPLORER_TX_SUMMARIES_BY_HASH_NS_ROUTE,
956        hash,
957        limit,
958        namespace
959    );
960    path_fn!(explorer_summary, EXPLORER_SUMMARY_ROUTE);
961    path_fn!(explorer_search, EXPLORER_SEARCH_ROUTE, query);
962
963    // Token
964    path_fn!(token_total_minted_supply, TOKEN_TOTAL_MINTED_SUPPLY_ROUTE);
965    path_fn!(token_circulating_supply, TOKEN_CIRCULATING_SUPPLY_ROUTE);
966    path_fn!(
967        token_circulating_supply_ethereum,
968        TOKEN_CIRCULATING_SUPPLY_ETHEREUM_ROUTE
969    );
970    path_fn!(token_total_issued_supply, TOKEN_TOTAL_ISSUED_SUPPLY_ROUTE);
971    path_fn!(
972        token_total_reward_distributed,
973        TOKEN_TOTAL_REWARD_DISTRIBUTED_ROUTE
974    );
975
976    // Database (diagnostic)
977    path_fn!(database_table_sizes, DATABASE_TABLE_SIZES_ROUTE);
978    path_fn!(database_migration_status, DATABASE_MIGRATION_STATUS_ROUTE);
979}
980
981/// The v2 endpoint routes are defined by the `google.api.http` annotations in `proto/v2/` and
982/// registered by the generated `rest::*_rest_router` functions, so only the hand-written docs
983/// routes appear here.
984pub mod v2 {
985    pub const OPENAPI_SPEC_ROUTE: &str = "/v2/docs/openapi.json";
986    pub const SWAGGER_ROUTE: &str = "/v2";
987    /// axum 0.8 does not redirect trailing slashes and `rewrite_legacy_uri` leaves `/v2/` alone,
988    /// so the slashed form is its own route.
989    pub const SWAGGER_SLASH_ROUTE: &str = "/v2/";
990    pub const SCALAR_ROUTE: &str = "/v2/scalar";
991    /// What the generated `config_service_rest_router` mounts, pinned to it by a test.
992    pub const CONFIG_ROUTES: &[&str] =
993        &["/v2/config/hotshot", "/v2/config/env", "/v2/config/runtime"];
994    /// What the generated `submit_service_rest_router` mounts, pinned to it by a test.
995    pub const SUBMIT_ROUTES: &[&str] = &["/v2/submit/transaction"];
996    /// What the generated `explorer_service_rest_router` mounts, pinned to it by a test.
997    pub const EXPLORER_ROUTES: &[&str] = &[
998        "/v2/explorer/block",
999        "/v2/explorer/blocks",
1000        "/v2/explorer/transaction",
1001        "/v2/explorer/transactions",
1002        "/v2/explorer/summary",
1003        "/v2/explorer/search",
1004    ];
1005}