Add `block_info` api for new HTTP service (#509)
This commit is contained in:
parent
56e8506704
commit
196f395992
|
@ -1,6 +1,10 @@
|
||||||
use std::{fmt::Debug, hash::Hash, net::SocketAddr};
|
use std::{fmt::Debug, hash::Hash, net::SocketAddr};
|
||||||
|
|
||||||
use axum::{extract::State, response::Response, routing, Json, Router, Server};
|
use axum::{
|
||||||
|
extract::{Query, State},
|
||||||
|
response::Response,
|
||||||
|
routing, Json, Router, Server,
|
||||||
|
};
|
||||||
use overwatch_rs::overwatch::handle::OverwatchHandle;
|
use overwatch_rs::overwatch::handle::OverwatchHandle;
|
||||||
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
||||||
use utoipa::OpenApi;
|
use utoipa::OpenApi;
|
||||||
|
@ -85,6 +89,7 @@ where
|
||||||
.route("/cl/metrics", routing::get(cl_metrics::<T>))
|
.route("/cl/metrics", routing::get(cl_metrics::<T>))
|
||||||
.route("/cl/status", routing::post(cl_status::<T>))
|
.route("/cl/status", routing::post(cl_status::<T>))
|
||||||
.route("/carnot/info", routing::get(carnot_info::<T, S, SIZE>))
|
.route("/carnot/info", routing::get(carnot_info::<T, S, SIZE>))
|
||||||
|
.route("/carnot/blocks", routing::get(carnot_blocks::<T, S, SIZE>))
|
||||||
.route("/network/info", routing::get(libp2p_info))
|
.route("/network/info", routing::get(libp2p_info))
|
||||||
.route("/storage/block", routing::post(block::<S, T>))
|
.route("/storage/block", routing::post(block::<S, T>))
|
||||||
.route("/mempool/add/tx", routing::post(add_tx::<T>))
|
.route("/mempool/add/tx", routing::post(add_tx::<T>))
|
||||||
|
@ -215,6 +220,33 @@ where
|
||||||
make_request_and_return_response!(consensus::carnot_info::<Tx, SS, SIZE>(&store))
|
make_request_and_return_response!(consensus::carnot_info::<Tx, SS, SIZE>(&store))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct QueryParams {
|
||||||
|
from: Option<BlockId>,
|
||||||
|
to: Option<BlockId>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[utoipa::path(
|
||||||
|
get,
|
||||||
|
path = "/carnot/blocks",
|
||||||
|
responses(
|
||||||
|
(status = 200, description = "Query the block information", body = Vec<consensus_engine::Block>),
|
||||||
|
(status = 500, description = "Internal server error", body = String),
|
||||||
|
)
|
||||||
|
)]
|
||||||
|
async fn carnot_blocks<Tx, SS, const SIZE: usize>(
|
||||||
|
State(store): State<OverwatchHandle>,
|
||||||
|
Query(query): Query<QueryParams>,
|
||||||
|
) -> Response
|
||||||
|
where
|
||||||
|
Tx: Transaction + Clone + Debug + Hash + Serialize + DeserializeOwned + Send + Sync + 'static,
|
||||||
|
<Tx as Transaction>::Hash: std::cmp::Ord + Debug + Send + Sync + 'static,
|
||||||
|
SS: StorageSerde + Send + Sync + 'static,
|
||||||
|
{
|
||||||
|
let QueryParams { from, to } = query;
|
||||||
|
make_request_and_return_response!(consensus::carnot_blocks::<Tx, SS, SIZE>(&store, from, to))
|
||||||
|
}
|
||||||
|
|
||||||
#[utoipa::path(
|
#[utoipa::path(
|
||||||
get,
|
get,
|
||||||
path = "/network/info",
|
path = "/network/info",
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
use std::{fmt::Debug, hash::Hash};
|
use std::{fmt::Debug, hash::Hash};
|
||||||
|
|
||||||
use consensus_engine::overlay::{RandomBeaconState, RoundRobin, TreeOverlay};
|
use consensus_engine::{
|
||||||
|
overlay::{RandomBeaconState, RoundRobin, TreeOverlay},
|
||||||
|
Block, BlockId,
|
||||||
|
};
|
||||||
use full_replication::Certificate;
|
use full_replication::Certificate;
|
||||||
use nomos_consensus::{
|
use nomos_consensus::{
|
||||||
network::adapters::libp2p::Libp2pAdapter as ConsensusLibp2pAdapter, CarnotConsensus,
|
network::adapters::libp2p::Libp2pAdapter as ConsensusLibp2pAdapter, CarnotConsensus,
|
||||||
|
@ -17,6 +20,7 @@ use nomos_mempool::{
|
||||||
backend::mockpool::MockPool, network::adapters::libp2p::Libp2pAdapter as MempoolLibp2pAdapter,
|
backend::mockpool::MockPool, network::adapters::libp2p::Libp2pAdapter as MempoolLibp2pAdapter,
|
||||||
};
|
};
|
||||||
use nomos_storage::backends::{sled::SledBackend, StorageSerde};
|
use nomos_storage::backends::{sled::SledBackend, StorageSerde};
|
||||||
|
use overwatch_rs::overwatch::handle::OverwatchHandle;
|
||||||
use serde::{de::DeserializeOwned, Serialize};
|
use serde::{de::DeserializeOwned, Serialize};
|
||||||
use tokio::sync::oneshot;
|
use tokio::sync::oneshot;
|
||||||
|
|
||||||
|
@ -36,8 +40,8 @@ pub type Carnot<Tx, SS, const SIZE: usize> = CarnotConsensus<
|
||||||
>;
|
>;
|
||||||
|
|
||||||
pub async fn carnot_info<Tx, SS, const SIZE: usize>(
|
pub async fn carnot_info<Tx, SS, const SIZE: usize>(
|
||||||
handle: &overwatch_rs::overwatch::handle::OverwatchHandle,
|
handle: &OverwatchHandle,
|
||||||
) -> Result<CarnotInfo, overwatch_rs::DynError>
|
) -> Result<CarnotInfo, super::DynError>
|
||||||
where
|
where
|
||||||
Tx: Transaction + Clone + Debug + Hash + Serialize + DeserializeOwned + Send + Sync + 'static,
|
Tx: Transaction + Clone + Debug + Hash + Serialize + DeserializeOwned + Send + Sync + 'static,
|
||||||
<Tx as Transaction>::Hash: std::cmp::Ord + Debug + Send + Sync + 'static,
|
<Tx as Transaction>::Hash: std::cmp::Ord + Debug + Send + Sync + 'static,
|
||||||
|
@ -51,3 +55,26 @@ where
|
||||||
.map_err(|(e, _)| e)?;
|
.map_err(|(e, _)| e)?;
|
||||||
Ok(receiver.await?)
|
Ok(receiver.await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn carnot_blocks<Tx, SS, const SIZE: usize>(
|
||||||
|
handle: &OverwatchHandle,
|
||||||
|
from: Option<BlockId>,
|
||||||
|
to: Option<BlockId>,
|
||||||
|
) -> Result<Vec<Block>, super::DynError>
|
||||||
|
where
|
||||||
|
Tx: Transaction + Clone + Debug + Hash + Serialize + DeserializeOwned + Send + Sync + 'static,
|
||||||
|
<Tx as Transaction>::Hash: std::cmp::Ord + Debug + Send + Sync + 'static,
|
||||||
|
SS: StorageSerde + Send + Sync + 'static,
|
||||||
|
{
|
||||||
|
let relay = handle.relay::<Carnot<Tx, SS, SIZE>>().connect().await?;
|
||||||
|
let (sender, receiver) = oneshot::channel();
|
||||||
|
relay
|
||||||
|
.send(ConsensusMsg::GetBlocks {
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
tx: sender,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.map_err(|(e, _)| e)?;
|
||||||
|
Ok(receiver.await?)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue