1pub use crate::{
2 block_producer_effectful::{
3 vrf_evaluator_effectful::BlockProducerVrfEvaluatorService, BlockProducerService,
4 },
5 event_source::EventSourceService,
6 external_snark_worker_effectful::ExternalSnarkWorkerService,
7 ledger::LedgerService,
8 p2p::service::*,
9 recorder::Recorder,
10 rpc_effectful::RpcService,
11 snark::{
12 block_verify_effectful::SnarkBlockVerifyService,
13 work_verify_effectful::SnarkWorkVerifyService,
14 },
15 snark_pool::SnarkPoolService,
16 transition_frontier::{
17 archive::archive_service::ArchiveService,
18 genesis_effectful::TransitionFrontierGenesisService,
19 sync::ledger::snarked::TransitionFrontierSyncLedgerSnarkedService,
20 },
21};
22pub use redux::TimeService;
23pub use snark::user_command_verify_effectful::SnarkUserCommandVerifyService;
24
25use crate::stats::Stats;
26
27pub trait Service:
28 TimeService
29 + EventSourceService
30 + SnarkBlockVerifyService
31 + SnarkWorkVerifyService
32 + P2pService
33 + LedgerService
34 + TransitionFrontierGenesisService
35 + TransitionFrontierSyncLedgerSnarkedService
36 + SnarkPoolService
37 + SnarkUserCommandVerifyService
38 + BlockProducerVrfEvaluatorService
39 + BlockProducerService
40 + ExternalSnarkWorkerService
41 + RpcService
42 + ArchiveService
43{
44 fn queues(&mut self) -> Queues;
45 fn stats(&mut self) -> Option<&mut Stats>;
46 fn recorder(&mut self) -> &mut Recorder;
47 fn is_replay(&self) -> bool;
48}
49
50#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
51pub struct Queues {
52 pub events: usize,
53 pub snark_block_verify: usize,
54 pub ledger: usize,
55 pub vrf_evaluator: Option<usize>,
56 pub block_prover: Option<usize>,
57 pub p2p_webrtc: usize,
58 #[cfg(feature = "p2p-libp2p")]
59 pub p2p_libp2p: usize,
60 pub rpc: usize,
61}