Skip to main content

mina_node_native/http_server/routes/
snark_pool.rs

1//! Snark pool endpoints.
2//!
3//! - `GET /snark-pool/jobs` - Get all snark pool jobs
4//! - `GET /snark-pool/job/{id}` - Get specific snark pool job
5
6use axum::{
7    extract::{Path, State},
8    Json,
9};
10use utoipa_axum::{router::OpenApiRouter, routes};
11
12use mina_node::{
13    core::snark::SnarkJobId,
14    rpc::{RpcRequest, RpcSnarkPoolGetResponse, RpcSnarkPoolJobGetResponse},
15};
16
17use crate::http_server::{AppResult, AppState};
18
19/// Snark pool routes
20pub fn routes() -> OpenApiRouter<AppState> {
21    OpenApiRouter::new()
22        .routes(routes!(jobs))
23        .routes(routes!(job))
24}
25
26/// All snark pool jobs
27#[utoipa::path(
28    get,
29    path = "/snark-pool/jobs",
30    tag = "snark-pool",
31    responses(
32        (status = 200, description = "Snark pool jobs")
33    )
34)]
35async fn jobs(State(state): State<AppState>) -> AppResult<Json<RpcSnarkPoolGetResponse>> {
36    jsonify_rpc!(state, RpcRequest::SnarkPoolGet)
37}
38
39/// Specific snark pool job
40#[utoipa::path(
41    get,
42    path = "/snark-pool/job/{job_id}",
43    tag = "snark-pool",
44    params(
45        ("job_id" = String, Path, description = "Snark job ID")
46    ),
47    responses(
48        (status = 200, description = "Snark pool job")
49    )
50)]
51async fn job(
52    State(state): State<AppState>,
53    Path(job_id): Path<SnarkJobId>,
54) -> AppResult<Json<RpcSnarkPoolJobGetResponse>> {
55    jsonify_rpc!(state, RpcRequest::SnarkPoolJobGet { job_id })
56}