Skip to main content

espresso_api/axum/
routes.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub struct Route {
3    /// HTTP path for Axum handler (e.g., "/v2/rewards/balance/{height}/{address}")
4    pub http: &'static str,
5    /// gRPC path for Tonic service (e.g., "/espresso.api.v2.RewardService/GetRewardBalance")
6    pub grpc: &'static str,
7    /// OpenAPI description for the endpoint
8    pub description: &'static str,
9    /// OpenAPI tag grouping for the endpoint
10    pub tag: &'static str,
11}
12
13pub mod v1 {
14    pub const REWARD_CLAIM_INPUT_ROUTE: &str =
15        "/v1/reward-state-v2/reward-claim-input/{height}/{address}";
16    pub const REWARD_BALANCE_ROUTE: &str = "/v1/reward-state-v2/reward-balance/{height}/{address}";
17    pub const LATEST_REWARD_BALANCE_ROUTE: &str =
18        "/v1/reward-state-v2/reward-balance/latest/{address}";
19    pub const REWARD_ACCOUNT_PROOF_ROUTE: &str = "/v1/reward-state-v2/proof/{height}/{address}";
20    pub const LATEST_REWARD_ACCOUNT_PROOF_ROUTE: &str =
21        "/v1/reward-state-v2/proof/latest/{address}";
22    pub const REWARD_AMOUNTS_ROUTE: &str =
23        "/v1/reward-state-v2/reward-amounts/{height}/{offset}/{limit}";
24    pub const REWARD_MERKLE_TREE_V2_ROUTE: &str =
25        "/v1/reward-state-v2/reward-merkle-tree-v2/{height}";
26
27    pub const NAMESPACE_PROOF_BY_HEIGHT_ROUTE: &str =
28        "/v1/availability/block/{height}/namespace/{namespace}";
29    pub const NAMESPACE_PROOF_BY_HASH_ROUTE: &str =
30        "/v1/availability/block/hash/{hash}/namespace/{namespace}";
31    pub const NAMESPACE_PROOF_BY_PAYLOAD_HASH_ROUTE: &str =
32        "/v1/availability/block/payload-hash/{payload-hash}/namespace/{namespace}";
33    pub const NAMESPACE_PROOF_RANGE_ROUTE: &str =
34        "/v1/availability/block/{from}/{until}/namespace/{namespace}";
35    pub const INCORRECT_ENCODING_PROOF_ROUTE: &str =
36        "/v1/availability/incorrect-encoding-proof/{block_number}/{namespace}";
37
38    pub const STATE_CERT_V1_ROUTE: &str = "/v1/availability/state-cert/{epoch}";
39    pub const STATE_CERT_V2_ROUTE: &str = "/v1/availability/state-cert-v2/{epoch}";
40
41    pub const LEAF_BY_HEIGHT_ROUTE: &str = "/v1/availability/leaf/{height}";
42    pub const LEAF_BY_HASH_ROUTE: &str = "/v1/availability/leaf/hash/{hash}";
43    pub const LEAF_RANGE_ROUTE: &str = "/v1/availability/leaf/{from}/{until}";
44
45    pub const HEADER_BY_HEIGHT_ROUTE: &str = "/v1/availability/header/{height}";
46    pub const HEADER_BY_HASH_ROUTE: &str = "/v1/availability/header/hash/{hash}";
47    pub const HEADER_BY_PAYLOAD_HASH_ROUTE: &str =
48        "/v1/availability/header/payload-hash/{payload_hash}";
49    pub const HEADER_RANGE_ROUTE: &str = "/v1/availability/header/{from}/{until}";
50
51    pub const BLOCK_BY_HEIGHT_ROUTE: &str = "/v1/availability/block/{height}";
52    pub const BLOCK_BY_HASH_ROUTE: &str = "/v1/availability/block/hash/{hash}";
53    pub const BLOCK_BY_PAYLOAD_HASH_ROUTE: &str =
54        "/v1/availability/block/payload-hash/{payload_hash}";
55    pub const BLOCK_RANGE_ROUTE: &str = "/v1/availability/block/{from}/{until}";
56
57    pub const PAYLOAD_BY_HEIGHT_ROUTE: &str = "/v1/availability/payload/{height}";
58    pub const PAYLOAD_BY_HASH_ROUTE: &str = "/v1/availability/payload/hash/{hash}";
59    pub const PAYLOAD_BY_BLOCK_HASH_ROUTE: &str =
60        "/v1/availability/payload/block-hash/{block_hash}";
61    pub const PAYLOAD_RANGE_ROUTE: &str = "/v1/availability/payload/{from}/{until}";
62
63    pub const VID_COMMON_BY_HEIGHT_ROUTE: &str = "/v1/availability/vid/common/{height}";
64    pub const VID_COMMON_BY_HASH_ROUTE: &str = "/v1/availability/vid/common/hash/{hash}";
65    pub const VID_COMMON_BY_PAYLOAD_HASH_ROUTE: &str =
66        "/v1/availability/vid/common/payload-hash/{payload_hash}";
67    pub const VID_COMMON_RANGE_ROUTE: &str = "/v1/availability/vid/common/{from}/{until}";
68
69    pub const TRANSACTION_BY_POSITION_NOPROOF_ROUTE: &str =
70        "/v1/availability/transaction/{height}/{index}/noproof";
71    pub const TRANSACTION_BY_HASH_NOPROOF_ROUTE: &str =
72        "/v1/availability/transaction/hash/{hash}/noproof";
73    pub const TRANSACTION_PROOF_BY_POSITION_ROUTE: &str =
74        "/v1/availability/transaction/{height}/{index}/proof";
75    pub const TRANSACTION_PROOF_BY_HASH_ROUTE: &str =
76        "/v1/availability/transaction/hash/{hash}/proof";
77    pub const TRANSACTION_BY_POSITION_ROUTE: &str = "/v1/availability/transaction/{height}/{index}";
78    pub const TRANSACTION_BY_HASH_ROUTE: &str = "/v1/availability/transaction/hash/{hash}";
79
80    pub const BLOCK_SUMMARY_BY_HEIGHT_ROUTE: &str = "/v1/availability/block/summary/{height}";
81    pub const BLOCK_SUMMARY_RANGE_ROUTE: &str = "/v1/availability/block/summaries/{from}/{until}";
82
83    pub const LIMITS_ROUTE: &str = "/v1/availability/limits";
84    pub const CERT2_BY_HEIGHT_ROUTE: &str = "/v1/availability/cert2/{height}";
85
86    pub const STREAM_LEAVES_ROUTE: &str = "/v1/availability/stream/leaves/{height}";
87    pub const STREAM_HEADERS_ROUTE: &str = "/v1/availability/stream/headers/{height}";
88    pub const STREAM_BLOCKS_ROUTE: &str = "/v1/availability/stream/blocks/{height}";
89    pub const STREAM_PAYLOADS_ROUTE: &str = "/v1/availability/stream/payloads/{height}";
90    pub const STREAM_VID_COMMON_ROUTE: &str = "/v1/availability/stream/vid/common/{height}";
91    pub const STREAM_TRANSACTIONS_ROUTE: &str = "/v1/availability/stream/transactions/{height}";
92    pub const STREAM_TRANSACTIONS_NS_ROUTE: &str =
93        "/v1/availability/stream/transactions/{height}/namespace/{namespace}";
94
95    pub const STREAM_NAMESPACE_PROOFS_ROUTE: &str =
96        "/v1/availability/stream/blocks/{height}/namespace/{namespace}";
97
98    pub const BLOCK_STATE_PATH_BY_HEIGHT_ROUTE: &str = "/v1/block-state/{height}/{key}";
99    pub const BLOCK_STATE_PATH_BY_COMMIT_ROUTE: &str = "/v1/block-state/commit/{commit}/{key}";
100    pub const BLOCK_STATE_HEIGHT_ROUTE: &str = "/v1/block-state/block-height";
101
102    pub const FEE_STATE_PATH_BY_HEIGHT_ROUTE: &str = "/v1/fee-state/{height}/{key}";
103    pub const FEE_STATE_PATH_BY_COMMIT_ROUTE: &str = "/v1/fee-state/commit/{commit}/{key}";
104    pub const FEE_STATE_HEIGHT_ROUTE: &str = "/v1/fee-state/block-height";
105    pub const FEE_STATE_BALANCE_LATEST_ROUTE: &str = "/v1/fee-state/fee-balance/latest/{address}";
106
107    pub const STATUS_BLOCK_HEIGHT_ROUTE: &str = "/v1/status/block-height";
108    pub const STATUS_SUCCESS_RATE_ROUTE: &str = "/v1/status/success-rate";
109    pub const STATUS_TIME_SINCE_LAST_DECIDE_ROUTE: &str = "/v1/status/time-since-last-decide";
110    pub const STATUS_METRICS_ROUTE: &str = "/v1/status/metrics";
111
112    pub const CONFIG_HOTSHOT_ROUTE: &str = "/v1/config/hotshot";
113    pub const CONFIG_ENV_ROUTE: &str = "/v1/config/env";
114    pub const CONFIG_RUNTIME_ROUTE: &str = "/v1/config/runtime";
115
116    pub const NODE_BLOCK_HEIGHT_ROUTE: &str = "/v1/node/block-height";
117
118    pub const NODE_TRANSACTIONS_COUNT_ROUTE: &str = "/v1/node/transactions/count";
119    pub const NODE_TRANSACTIONS_COUNT_TO_ROUTE: &str = "/v1/node/transactions/count/{to}";
120    pub const NODE_TRANSACTIONS_COUNT_FROM_TO_ROUTE: &str =
121        "/v1/node/transactions/count/{from}/{to}";
122    pub const NODE_TRANSACTIONS_COUNT_NS_ROUTE: &str =
123        "/v1/node/transactions/count/namespace/{namespace}";
124    pub const NODE_TRANSACTIONS_COUNT_NS_TO_ROUTE: &str =
125        "/v1/node/transactions/count/namespace/{namespace}/{to}";
126    pub const NODE_TRANSACTIONS_COUNT_NS_FROM_TO_ROUTE: &str =
127        "/v1/node/transactions/count/namespace/{namespace}/{from}/{to}";
128
129    pub const NODE_PAYLOADS_SIZE_ROUTE: &str = "/v1/node/payloads/size";
130    pub const NODE_PAYLOADS_SIZE_TO_ROUTE: &str = "/v1/node/payloads/size/{to}";
131    pub const NODE_PAYLOADS_SIZE_FROM_TO_ROUTE: &str = "/v1/node/payloads/size/{from}/{to}";
132    pub const NODE_PAYLOADS_TOTAL_SIZE_ROUTE: &str = "/v1/node/payloads/total-size";
133    pub const NODE_PAYLOADS_SIZE_NS_ROUTE: &str = "/v1/node/payloads/size/namespace/{namespace}";
134    pub const NODE_PAYLOADS_SIZE_NS_TO_ROUTE: &str =
135        "/v1/node/payloads/size/namespace/{namespace}/{to}";
136    pub const NODE_PAYLOADS_SIZE_NS_FROM_TO_ROUTE: &str =
137        "/v1/node/payloads/size/namespace/{namespace}/{from}/{to}";
138
139    pub const NODE_VID_SHARE_BY_HEIGHT_ROUTE: &str = "/v1/node/vid/share/{height}";
140    pub const NODE_VID_SHARE_BY_HASH_ROUTE: &str = "/v1/node/vid/share/hash/{hash}";
141    pub const NODE_VID_SHARE_BY_PAYLOAD_HASH_ROUTE: &str =
142        "/v1/node/vid/share/payload-hash/{payload_hash}";
143
144    pub const NODE_SYNC_STATUS_ROUTE: &str = "/v1/node/sync-status";
145
146    pub const NODE_HEADER_WINDOW_TIME_ROUTE: &str = "/v1/node/header/window/{start}/{end}";
147    pub const NODE_HEADER_WINDOW_HEIGHT_ROUTE: &str = "/v1/node/header/window/from/{height}/{end}";
148    pub const NODE_HEADER_WINDOW_HASH_ROUTE: &str = "/v1/node/header/window/from/hash/{hash}/{end}";
149
150    pub const NODE_LIMITS_ROUTE: &str = "/v1/node/limits";
151
152    pub const NODE_STAKE_TABLE_CURRENT_ROUTE: &str = "/v1/node/stake-table/current";
153    pub const NODE_STAKE_TABLE_ROUTE: &str = "/v1/node/stake-table/{epoch_number}";
154    pub const NODE_DA_STAKE_TABLE_CURRENT_ROUTE: &str = "/v1/node/da-stake-table/current";
155    pub const NODE_DA_STAKE_TABLE_ROUTE: &str = "/v1/node/da-stake-table/{epoch_number}";
156
157    pub const NODE_VALIDATORS_ROUTE: &str = "/v1/node/validators/{epoch_number}";
158    pub const NODE_ALL_VALIDATORS_ROUTE: &str =
159        "/v1/node/all-validators/{epoch_number}/{offset}/{limit}";
160
161    pub const NODE_PROPOSAL_PARTICIPATION_CURRENT_ROUTE: &str =
162        "/v1/node/participation/proposal/current";
163    pub const NODE_PROPOSAL_PARTICIPATION_ROUTE: &str = "/v1/node/participation/proposal/{epoch}";
164    pub const NODE_VOTE_PARTICIPATION_CURRENT_ROUTE: &str = "/v1/node/participation/vote/current";
165    pub const NODE_VOTE_PARTICIPATION_ROUTE: &str = "/v1/node/participation/vote/{epoch}";
166
167    pub const NODE_BLOCK_REWARD_ROUTE: &str = "/v1/node/block-reward";
168    pub const NODE_BLOCK_REWARD_EPOCH_ROUTE: &str = "/v1/node/block-reward/epoch/{epoch_number}";
169
170    pub const NODE_OLDEST_BLOCK_ROUTE: &str = "/v1/node/oldest-block";
171    pub const NODE_OLDEST_LEAF_ROUTE: &str = "/v1/node/oldest-leaf";
172
173    // Catchup routes (under /v1/catchup)
174    pub const CATCHUP_ACCOUNT_ROUTE: &str = "/v1/catchup/{height}/{view}/account/{address}";
175    pub const CATCHUP_ACCOUNTS_ROUTE: &str = "/v1/catchup/{height}/{view}/accounts";
176    pub const CATCHUP_BLOCKS_ROUTE: &str = "/v1/catchup/{height}/{view}/blocks";
177    pub const CATCHUP_CHAINCONFIG_ROUTE: &str = "/v1/catchup/chain-config/{commitment}";
178    pub const CATCHUP_LEAFCHAIN_ROUTE: &str = "/v1/catchup/{height}/leafchain";
179    pub const CATCHUP_CERT2_ROUTE: &str = "/v1/catchup/{height}/cert2";
180    pub const CATCHUP_REWARD_ACCOUNT_ROUTE: &str =
181        "/v1/catchup/{height}/{view}/reward-account/{address}";
182    pub const CATCHUP_REWARD_ACCOUNTS_ROUTE: &str = "/v1/catchup/{height}/{view}/reward-accounts";
183    pub const CATCHUP_REWARD_ACCOUNT_V2_ROUTE: &str =
184        "/v1/catchup/{height}/{view}/reward-account-v2/{address}";
185    pub const CATCHUP_REWARD_ACCOUNTS_V2_ROUTE: &str =
186        "/v1/catchup/{height}/{view}/reward-accounts-v2";
187    pub const CATCHUP_REWARD_AMOUNTS_ROUTE: &str =
188        "/v1/catchup/{height}/reward-amounts/{limit}/{offset}";
189    pub const CATCHUP_REWARD_MERKLE_TREE_V2_ROUTE: &str =
190        "/v1/catchup/reward-merkle-tree-v2/{height}/{view}";
191    pub const CATCHUP_STATE_CERT_ROUTE: &str = "/v1/catchup/{epoch}/state-cert";
192
193    // Submit
194    pub const SUBMIT_ROUTE: &str = "/v1/submit/submit";
195
196    // State signature
197    pub const STATE_SIGNATURE_BLOCK_ROUTE: &str = "/v1/state-signature/block/{height}";
198
199    // HotShot events
200    pub const HOTSHOT_EVENTS_STREAM_ROUTE: &str = "/v1/hotshot-events/events";
201    pub const HOTSHOT_EVENTS_STARTUP_ROUTE: &str = "/v1/hotshot-events/startup_info";
202
203    // Light client
204    pub const LC_LEAF_BY_HEIGHT_ROUTE: &str = "/v1/light-client/leaf/{height}";
205    pub const LC_LEAF_BY_HEIGHT_FINALIZED_ROUTE: &str =
206        "/v1/light-client/leaf/{height}/{finalized}";
207    pub const LC_LEAF_BY_HASH_ROUTE: &str = "/v1/light-client/leaf/hash/{hash}";
208    pub const LC_LEAF_BY_HASH_FINALIZED_ROUTE: &str =
209        "/v1/light-client/leaf/hash/{hash}/{finalized}";
210    pub const LC_LEAF_BY_BLOCK_HASH_ROUTE: &str = "/v1/light-client/leaf/block-hash/{block_hash}";
211    pub const LC_LEAF_BY_BLOCK_HASH_FINALIZED_ROUTE: &str =
212        "/v1/light-client/leaf/block-hash/{block_hash}/{finalized}";
213    pub const LC_LEAF_BY_PAYLOAD_HASH_ROUTE: &str =
214        "/v1/light-client/leaf/payload-hash/{payload_hash}";
215    pub const LC_LEAF_BY_PAYLOAD_HASH_FINALIZED_ROUTE: &str =
216        "/v1/light-client/leaf/payload-hash/{payload_hash}/{finalized}";
217
218    pub const LC_HEADER_BY_HEIGHT_ROUTE: &str = "/v1/light-client/header/{root}/{height}";
219    pub const LC_HEADER_BY_HASH_ROUTE: &str = "/v1/light-client/header/{root}/hash/{hash}";
220    pub const LC_HEADER_BY_PAYLOAD_HASH_ROUTE: &str =
221        "/v1/light-client/header/{root}/payload-hash/{payload_hash}";
222
223    pub const LC_STAKE_TABLE_ROUTE: &str = "/v1/light-client/stake-table/{epoch}";
224
225    pub const LC_PAYLOAD_ROUTE: &str = "/v1/light-client/payload/{height}";
226    pub const LC_PAYLOAD_RANGE_ROUTE: &str = "/v1/light-client/payload/{start}/{end}";
227
228    pub const LC_NAMESPACE_ROUTE: &str = "/v1/light-client/namespace/{height}/{namespace}";
229    pub const LC_NAMESPACE_RANGE_ROUTE: &str =
230        "/v1/light-client/namespace/{start}/{end}/{namespace}";
231
232    // Explorer
233    pub const EXPLORER_BLOCK_DETAIL_BY_HEIGHT_ROUTE: &str = "/v1/explorer/block/{height}";
234    pub const EXPLORER_BLOCK_DETAIL_BY_HASH_ROUTE: &str = "/v1/explorer/block/hash/{hash}";
235    pub const EXPLORER_BLOCK_SUMMARIES_LATEST_ROUTE: &str = "/v1/explorer/blocks/latest/{limit}";
236    pub const EXPLORER_BLOCK_SUMMARIES_FROM_ROUTE: &str = "/v1/explorer/blocks/{from}/{limit}";
237    pub const EXPLORER_TX_DETAIL_BY_POSITION_ROUTE: &str =
238        "/v1/explorer/transaction/{height}/{offset}";
239    pub const EXPLORER_TX_DETAIL_BY_HASH_ROUTE: &str = "/v1/explorer/transaction/hash/{hash}";
240
241    pub const EXPLORER_TX_SUMMARIES_LATEST_ROUTE: &str = "/v1/explorer/transactions/latest/{limit}";
242    pub const EXPLORER_TX_SUMMARIES_FROM_ROUTE: &str =
243        "/v1/explorer/transactions/from/{height}/{offset}/{limit}";
244    pub const EXPLORER_TX_SUMMARIES_BY_HASH_ROUTE: &str =
245        "/v1/explorer/transactions/hash/{hash}/{limit}";
246
247    pub const EXPLORER_TX_SUMMARIES_LATEST_BLOCK_ROUTE: &str =
248        "/v1/explorer/transactions/latest/{limit}/block/{block}";
249    pub const EXPLORER_TX_SUMMARIES_FROM_BLOCK_ROUTE: &str =
250        "/v1/explorer/transactions/from/{height}/{offset}/{limit}/block/{block}";
251    pub const EXPLORER_TX_SUMMARIES_BY_HASH_BLOCK_ROUTE: &str =
252        "/v1/explorer/transactions/hash/{hash}/{limit}/block/{block}";
253
254    pub const EXPLORER_TX_SUMMARIES_LATEST_NS_ROUTE: &str =
255        "/v1/explorer/transactions/latest/{limit}/namespace/{namespace}";
256    pub const EXPLORER_TX_SUMMARIES_FROM_NS_ROUTE: &str =
257        "/v1/explorer/transactions/from/{height}/{offset}/{limit}/namespace/{namespace}";
258    pub const EXPLORER_TX_SUMMARIES_BY_HASH_NS_ROUTE: &str =
259        "/v1/explorer/transactions/hash/{hash}/{limit}/namespace/{namespace}";
260
261    pub const EXPLORER_SUMMARY_ROUTE: &str = "/v1/explorer/explorer-summary";
262    pub const EXPLORER_SEARCH_ROUTE: &str = "/v1/explorer/search/{query}";
263
264    // Token
265    pub const TOKEN_TOTAL_MINTED_SUPPLY_ROUTE: &str = "/v1/token/total-minted-supply";
266    pub const TOKEN_CIRCULATING_SUPPLY_ROUTE: &str = "/v1/token/circulating-supply";
267    pub const TOKEN_CIRCULATING_SUPPLY_ETHEREUM_ROUTE: &str =
268        "/v1/token/circulating-supply-ethereum";
269    pub const TOKEN_TOTAL_ISSUED_SUPPLY_ROUTE: &str = "/v1/token/total-issued-supply";
270    pub const TOKEN_TOTAL_REWARD_DISTRIBUTED_ROUTE: &str = "/v1/token/total-reward-distributed";
271
272    // Database (diagnostic)
273    pub const DATABASE_TABLE_SIZES_ROUTE: &str = "/v1/database/table-sizes";
274}
275
276pub mod v2 {
277    use super::Route;
278
279    pub const REWARD_CLAIM_INPUT_ROUTE: Route = Route {
280        http: "/v2/rewards/claim-input",
281        grpc: "/espresso.api.v2.RewardService/GetRewardClaimInput",
282        description: "Get reward claim input for L1 contract submission. Returns lifetime rewards \
283                      and Merkle proof needed to call claimRewards() on the L1 contract.",
284        tag: "Rewards",
285    };
286
287    pub const REWARD_BALANCE_ROUTE: Route = Route {
288        http: "/v2/rewards/balance",
289        grpc: "/espresso.api.v2.RewardService/GetRewardBalance",
290        description: "Get reward balance for an address at the latest finalized height",
291        tag: "Rewards",
292    };
293
294    pub const REWARD_ACCOUNT_PROOF_ROUTE: Route = Route {
295        http: "/v2/rewards/proof",
296        grpc: "/espresso.api.v2.RewardService/GetRewardAccountProof",
297        description: "Get Merkle proof for a reward account at the latest finalized height. \
298                      Returns V2 proof with Keccak256 hashing",
299        tag: "Rewards",
300    };
301
302    pub const REWARD_BALANCES_ROUTE: Route = Route {
303        http: "/v2/rewards/balances",
304        grpc: "/espresso.api.v2.RewardService/GetRewardBalances",
305        description: "Get paginated list of all reward balances at a specific height. Limit must \
306                      be ≤ 10000",
307        tag: "Rewards",
308    };
309
310    pub const REWARD_MERKLE_TREE_V2_ROUTE: Route = Route {
311        http: "/v2/rewards/tree",
312        grpc: "/espresso.api.v2.RewardService/GetRewardMerkleTreeV2",
313        description: "Get raw RewardMerkleTreeV2 snapshot at a given height. Returns serialized \
314                      merkle tree data",
315        tag: "Rewards",
316    };
317
318    pub const OPENAPI_SPEC_ROUTE: &str = "/v2/docs/openapi.json";
319    pub const SWAGGER_ROUTE: &str = "/v2";
320    pub const SCALAR_ROUTE: &str = "/v2/scalar";
321    pub const REDOC_ROUTE: &str = "/v2/redoc";
322
323    pub const NAMESPACE_PROOF_ROUTE: Route = Route {
324        http: "/v2/data/finalized/namespace-proof",
325        grpc: "/espresso.api.v2.DataService/GetNamespaceProof",
326        description: "Get namespace proof(s) for the specified namespace. Use '?block={height}' \
327                      for a single block, or '?from={start}&to={end}' for a range. Returns \
328                      transactions for the namespace along with cryptographic proof(s) of \
329                      completeness.",
330        tag: "Data",
331    };
332
333    pub const INCORRECT_ENCODING_PROOF_ROUTE: Route = Route {
334        http: "/v2/data/finalized/incorrect-encoding-proof",
335        grpc: "/espresso.api.v2.DataService/GetIncorrectEncodingProof",
336        description: "Generate a fraud proof showing incorrect namespace encoding for a specific \
337                      block. Query param 'block' specifies the block height. Used to challenge \
338                      invalid block proposals.",
339        tag: "Data",
340    };
341
342    pub const STATE_CERTIFICATE_ROUTE: Route = Route {
343        http: "/v2/consensus/state-certificate",
344        grpc: "/espresso.api.v2.ConsensusService/GetStateCertificate",
345        description: "Get light client state update certificate for an epoch. Used to update L1 \
346                      contracts with new stake table information.",
347        tag: "Consensus",
348    };
349
350    pub const STAKE_TABLE_ROUTE: Route = Route {
351        http: "/v2/consensus/stake-table",
352        grpc: "/espresso.api.v2.ConsensusService/GetStakeTable",
353        description: "Get stake table for an epoch.",
354        tag: "Consensus",
355    };
356}