mirror of
https://github.com/Cuprate/cuprate.git
synced 2025-01-09 12:29:45 +00:00
move chain service to separate file
This commit is contained in:
parent
f50d921459
commit
27a8acdb04
4 changed files with 74 additions and 65 deletions
|
@ -19,6 +19,7 @@ use cuprate_types::{
|
||||||
|
|
||||||
use crate::constants::PANIC_CRITICAL_SERVICE_ERROR;
|
use crate::constants::PANIC_CRITICAL_SERVICE_ERROR;
|
||||||
|
|
||||||
|
mod chain_service;
|
||||||
pub mod interface;
|
pub mod interface;
|
||||||
mod manager;
|
mod manager;
|
||||||
mod syncer;
|
mod syncer;
|
||||||
|
|
72
binaries/cuprated/src/blockchain/chain_service.rs
Normal file
72
binaries/cuprated/src/blockchain/chain_service.rs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
use std::task::{Context, Poll};
|
||||||
|
|
||||||
|
use futures::{future::BoxFuture, FutureExt, TryFutureExt};
|
||||||
|
use tower::Service;
|
||||||
|
|
||||||
|
use cuprate_blockchain::service::BlockchainReadHandle;
|
||||||
|
use cuprate_p2p::block_downloader::{ChainSvcRequest, ChainSvcResponse};
|
||||||
|
use cuprate_types::blockchain::{BlockchainReadRequest, BlockchainResponse};
|
||||||
|
|
||||||
|
/// That service that allows retrieving the chain state to give to the P2P crates, so we can figure out
|
||||||
|
/// what blocks we need.
|
||||||
|
///
|
||||||
|
/// This has a more minimal interface than [`BlockchainReadRequest`] to make using the p2p crates easier.
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct ChainService(pub BlockchainReadHandle);
|
||||||
|
|
||||||
|
impl Service<ChainSvcRequest> for ChainService {
|
||||||
|
type Response = ChainSvcResponse;
|
||||||
|
type Error = tower::BoxError;
|
||||||
|
type Future = BoxFuture<'static, Result<Self::Response, Self::Error>>;
|
||||||
|
|
||||||
|
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||||
|
self.0.poll_ready(cx).map_err(Into::into)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn call(&mut self, req: ChainSvcRequest) -> Self::Future {
|
||||||
|
let map_res = |res: BlockchainResponse| match res {
|
||||||
|
BlockchainResponse::CompactChainHistory {
|
||||||
|
block_ids,
|
||||||
|
cumulative_difficulty,
|
||||||
|
} => ChainSvcResponse::CompactHistory {
|
||||||
|
block_ids,
|
||||||
|
cumulative_difficulty,
|
||||||
|
},
|
||||||
|
BlockchainResponse::FindFirstUnknown(res) => ChainSvcResponse::FindFirstUnknown(res),
|
||||||
|
_ => panic!("Blockchain returned wrong response"),
|
||||||
|
};
|
||||||
|
|
||||||
|
match req {
|
||||||
|
ChainSvcRequest::CompactHistory => self
|
||||||
|
.0
|
||||||
|
.call(BlockchainReadRequest::CompactChainHistory)
|
||||||
|
.map_ok(map_res)
|
||||||
|
.map_err(Into::into)
|
||||||
|
.boxed(),
|
||||||
|
ChainSvcRequest::FindFirstUnknown(req) => self
|
||||||
|
.0
|
||||||
|
.call(BlockchainReadRequest::FindFirstUnknown(req))
|
||||||
|
.map_ok(map_res)
|
||||||
|
.map_err(Into::into)
|
||||||
|
.boxed(),
|
||||||
|
ChainSvcRequest::CumulativeDifficulty => self
|
||||||
|
.0
|
||||||
|
.call(BlockchainReadRequest::CompactChainHistory)
|
||||||
|
.map_ok(|res| {
|
||||||
|
// TODO create a custom request instead of hijacking this one.
|
||||||
|
// TODO: use the context cache.
|
||||||
|
let BlockchainResponse::CompactChainHistory {
|
||||||
|
cumulative_difficulty,
|
||||||
|
..
|
||||||
|
} = res
|
||||||
|
else {
|
||||||
|
panic!("Blockchain returned wrong response");
|
||||||
|
};
|
||||||
|
|
||||||
|
ChainSvcResponse::CumulativeDifficulty(cumulative_difficulty)
|
||||||
|
})
|
||||||
|
.map_err(Into::into)
|
||||||
|
.boxed(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,9 +24,9 @@ use cuprate_types::{
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
blockchain::{
|
blockchain::{
|
||||||
|
chain_service::ChainService,
|
||||||
interface::COMMAND_TX,
|
interface::COMMAND_TX,
|
||||||
syncer,
|
syncer,
|
||||||
types::ChainService,
|
|
||||||
types::{ConcreteBlockVerifierService, ConsensusBlockchainReadHandle},
|
types::{ConcreteBlockVerifierService, ConsensusBlockchainReadHandle},
|
||||||
},
|
},
|
||||||
constants::PANIC_CRITICAL_SERVICE_ERROR,
|
constants::PANIC_CRITICAL_SERVICE_ERROR,
|
||||||
|
|
|
@ -22,67 +22,3 @@ pub type ConcreteTxVerifierService = TxVerifierService<ConsensusBlockchainReadHa
|
||||||
/// The [`BlockchainReadHandle`] with the [`tower::Service::Error`] mapped to conform to what the consensus crate requires.
|
/// The [`BlockchainReadHandle`] with the [`tower::Service::Error`] mapped to conform to what the consensus crate requires.
|
||||||
pub type ConsensusBlockchainReadHandle =
|
pub type ConsensusBlockchainReadHandle =
|
||||||
MapErr<BlockchainReadHandle, fn(RuntimeError) -> tower::BoxError>;
|
MapErr<BlockchainReadHandle, fn(RuntimeError) -> tower::BoxError>;
|
||||||
|
|
||||||
/// That service that allows retrieving the chain state to give to the P2P crates, so we can figure out
|
|
||||||
/// what blocks we need.
|
|
||||||
///
|
|
||||||
/// This has a more minimal interface than [`BlockchainReadRequest`] to make using the p2p crates easier.
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct ChainService(pub BlockchainReadHandle);
|
|
||||||
|
|
||||||
impl Service<ChainSvcRequest> for ChainService {
|
|
||||||
type Response = ChainSvcResponse;
|
|
||||||
type Error = tower::BoxError;
|
|
||||||
type Future = BoxFuture<'static, Result<Self::Response, Self::Error>>;
|
|
||||||
|
|
||||||
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
|
||||||
self.0.poll_ready(cx).map_err(Into::into)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn call(&mut self, req: ChainSvcRequest) -> Self::Future {
|
|
||||||
let map_res = |res: BlockchainResponse| match res {
|
|
||||||
BlockchainResponse::CompactChainHistory {
|
|
||||||
block_ids,
|
|
||||||
cumulative_difficulty,
|
|
||||||
} => ChainSvcResponse::CompactHistory {
|
|
||||||
block_ids,
|
|
||||||
cumulative_difficulty,
|
|
||||||
},
|
|
||||||
BlockchainResponse::FindFirstUnknown(res) => ChainSvcResponse::FindFirstUnknown(res),
|
|
||||||
_ => panic!("Blockchain returned wrong response"),
|
|
||||||
};
|
|
||||||
|
|
||||||
match req {
|
|
||||||
ChainSvcRequest::CompactHistory => self
|
|
||||||
.0
|
|
||||||
.call(BlockchainReadRequest::CompactChainHistory)
|
|
||||||
.map_ok(map_res)
|
|
||||||
.map_err(Into::into)
|
|
||||||
.boxed(),
|
|
||||||
ChainSvcRequest::FindFirstUnknown(req) => self
|
|
||||||
.0
|
|
||||||
.call(BlockchainReadRequest::FindFirstUnknown(req))
|
|
||||||
.map_ok(map_res)
|
|
||||||
.map_err(Into::into)
|
|
||||||
.boxed(),
|
|
||||||
ChainSvcRequest::CumulativeDifficulty => self
|
|
||||||
.0
|
|
||||||
.call(BlockchainReadRequest::CompactChainHistory)
|
|
||||||
.map_ok(|res| {
|
|
||||||
// TODO create a custom request instead of hijacking this one.
|
|
||||||
// TODO: use the context cache.
|
|
||||||
let BlockchainResponse::CompactChainHistory {
|
|
||||||
cumulative_difficulty,
|
|
||||||
..
|
|
||||||
} = res
|
|
||||||
else {
|
|
||||||
panic!("Blockchain returned wrong response");
|
|
||||||
};
|
|
||||||
|
|
||||||
ChainSvcResponse::CumulativeDifficulty(cumulative_difficulty)
|
|
||||||
})
|
|
||||||
.map_err(Into::into)
|
|
||||||
.boxed(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue