use crate::{
BlockData, ColdReceipt, ColdStorageError, Confirmed, Filter, HeaderSpecifier, LogStream,
ReceiptSpecifier, RpcLog, SignetEventsSpecifier, TransactionSpecifier, ZenithHeaderSpecifier,
};
use alloy::primitives::BlockNumber;
use signet_storage_types::{DbSignetEvent, DbZenithHeader, RecoveredTx, SealedHeader};
use std::time::Duration;
use tokio::sync::oneshot;
pub type Responder<T, E = ColdStorageError> = oneshot::Sender<Result<T, E>>;
#[derive(Debug)]
pub struct AppendBlockRequest {
pub data: BlockData,
pub resp: Responder<()>,
}
#[derive(Debug)]
pub enum ColdReadRequest {
GetHeader {
spec: HeaderSpecifier,
resp: Responder<Option<SealedHeader>>,
},
GetHeaders {
specs: Vec<HeaderSpecifier>,
resp: Responder<Vec<Option<SealedHeader>>>,
},
GetTransaction {
spec: TransactionSpecifier,
resp: Responder<Option<Confirmed<RecoveredTx>>>,
},
GetTransactionsInBlock {
block: BlockNumber,
resp: Responder<Vec<RecoveredTx>>,
},
GetTransactionCount {
block: BlockNumber,
resp: Responder<u64>,
},
GetReceipt {
spec: ReceiptSpecifier,
resp: Responder<Option<ColdReceipt>>,
},
GetReceiptsInBlock {
block: BlockNumber,
resp: Responder<Vec<ColdReceipt>>,
},
GetSignetEvents {
spec: SignetEventsSpecifier,
resp: Responder<Vec<DbSignetEvent>>,
},
GetZenithHeader {
spec: ZenithHeaderSpecifier,
resp: Responder<Option<DbZenithHeader>>,
},
GetZenithHeaders {
spec: ZenithHeaderSpecifier,
resp: Responder<Vec<DbZenithHeader>>,
},
GetLogs {
filter: Box<Filter>,
max_logs: usize,
resp: Responder<Vec<RpcLog>>,
},
StreamLogs {
filter: Box<Filter>,
max_logs: usize,
deadline: Duration,
resp: Responder<LogStream>,
},
GetLatestBlock {
resp: Responder<Option<BlockNumber>>,
},
}
#[derive(Debug)]
pub enum ColdWriteRequest {
AppendBlock(Box<AppendBlockRequest>),
AppendBlocks {
data: Vec<BlockData>,
resp: Responder<()>,
},
TruncateAbove {
block: BlockNumber,
resp: Responder<()>,
},
DrainAbove {
block: BlockNumber,
resp: Responder<Vec<Vec<ColdReceipt>>>,
},
}