Merge 934c333f472ff43a0b285901d45d7b4a307b47a4 into 7473c2f7a9ab8da65870442f0b90c96293982446

This commit is contained in:
buray 2026-04-08 22:48:36 +00:00 committed by GitHub
commit 462aecb735
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 4 deletions

View File

@ -8,6 +8,7 @@ license = { workspace = true }
workspace = true
[dependencies]
serde = { version = "1", features = ["derive"] }
sequencer_service_protocol.workspace = true
jsonrpsee = { workspace = true, features = ["macros"] }

View File

@ -5,11 +5,22 @@ use jsonrpsee::proc_macros::rpc;
use jsonrpsee::types::ErrorObjectOwned;
#[cfg(feature = "client")]
pub use jsonrpsee::{core::ClientError, http_client::HttpClientBuilder as SequencerClientBuilder};
use serde::{Deserialize, Serialize};
use sequencer_service_protocol::{
Account, AccountId, Block, BlockId, Commitment, HashType, MembershipProof, NSSATransaction,
Nonce, ProgramId,
};
/// Health status returned by the sequencer healthcheck endpoint.
/// The chain_height field can be polled twice to verify the sequencer is progressing.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthStatus {
/// Current chain height (block count). Should increase over time if sequencer is healthy.
pub chain_height: BlockId,
/// Whether the sequencer considers itself healthy.
pub is_healthy: bool,
}
#[cfg(all(not(feature = "server"), not(feature = "client")))]
compile_error!("At least one of `server` or `client` features must be enabled.");
@ -39,9 +50,10 @@ pub trait Rpc {
#[method(name = "sendTransaction")]
async fn send_transaction(&self, tx: NSSATransaction) -> Result<HashType, ErrorObjectOwned>;
// TODO: expand healthcheck response into some kind of report
/// Returns the current chain height (block count).
/// A sequencer is healthy if this value increases over time.
#[method(name = "checkHealth")]
async fn check_health(&self) -> Result<(), ErrorObjectOwned>;
async fn check_health(&self) -> Result<HealthStatus, ErrorObjectOwned>;
// TODO: These functions should be removed after wallet starts using indexer
// for this type of queries.

View File

@ -15,6 +15,7 @@ use sequencer_core::{
use sequencer_service_protocol::{
Account, AccountId, Block, BlockId, Commitment, HashType, MembershipProof, Nonce, ProgramId,
};
use sequencer_service_rpc::HealthStatus;
use tokio::sync::Mutex;
const NOT_FOUND_ERROR_CODE: i32 = -31999;
@ -82,8 +83,18 @@ impl<BC: BlockSettlementClientTrait + Send + 'static, IC: IndexerClientTrait + S
Ok(tx_hash)
}
async fn check_health(&self) -> Result<(), ErrorObjectOwned> {
Ok(())
async fn check_health(&self) -> Result<HealthStatus, ErrorObjectOwned> {
let sequencer = self.sequencer.lock().await;
let chain_height = sequencer.chain_height();
// Sequencer is considered healthy if it has produced at least the genesis block.
// Clients should poll this endpoint twice with a delay to verify chain_height increases.
let is_healthy = sequencer.block_store().latest_block_meta().is_ok();
Ok(HealthStatus {
chain_height,
is_healthy,
})
}
async fn get_block(&self, block_id: BlockId) -> Result<Option<Block>, ErrorObjectOwned> {