mithril_signer/dependency_injection/
containers.rs

1use mithril_common::crypto_helper::KesSigner;
2use std::sync::Arc;
3use tokio::sync::RwLock;
4
5use mithril_common::api_version::APIVersionProvider;
6use mithril_common::signable_builder::SignableBuilderService;
7
8use mithril_cardano_node_chain::chain_observer::ChainObserver;
9use mithril_cardano_node_internal_database::digesters::ImmutableDigester;
10use mithril_era::{EraChecker, EraReader};
11use mithril_persistence::store::StakeStorer;
12use mithril_signed_entity_lock::SignedEntityTypeLock;
13use mithril_signed_entity_preloader::CardanoTransactionsPreloader;
14use mithril_ticker::TickerService;
15
16use crate::services::{
17    AggregatorClient, CertifierService, EpochService, SingleSigner, UpkeepService,
18};
19use crate::store::ProtocolInitializerStorer;
20use crate::MetricsService;
21
22type StakeStoreService = Arc<dyn StakeStorer>;
23type CertificateHandlerService = Arc<dyn AggregatorClient>;
24type ChainObserverService = Arc<dyn ChainObserver>;
25type DigesterService = Arc<dyn ImmutableDigester>;
26type SingleSignerService = Arc<dyn SingleSigner>;
27type TimePointProviderService = Arc<dyn TickerService>;
28type ProtocolInitializerStoreService = Arc<dyn ProtocolInitializerStorer>;
29
30/// EpochServiceWrapper wraps a [EpochService]
31pub type EpochServiceWrapper = Arc<RwLock<dyn EpochService>>;
32
33/// This structure groups all the dependencies required by the state machine.
34pub struct SignerDependencyContainer {
35    /// Time point provider service
36    pub ticker_service: TimePointProviderService,
37
38    /// Stake store service
39    pub stake_store: StakeStoreService,
40
41    /// Certificate handler service
42    pub certificate_handler: CertificateHandlerService,
43
44    /// Chain Observer service
45    pub chain_observer: ChainObserverService,
46
47    /// Digester service
48    pub digester: DigesterService,
49
50    /// SingleSigner service
51    pub single_signer: SingleSignerService,
52
53    /// ProtocolInitializer store
54    pub protocol_initializer_store: ProtocolInitializerStoreService,
55
56    /// Era checker service
57    pub era_checker: Arc<EraChecker>,
58
59    /// Era reader service
60    pub era_reader: Arc<EraReader>,
61
62    /// API version provider
63    pub api_version_provider: Arc<APIVersionProvider>,
64
65    /// Signable Builder Service
66    pub signable_builder_service: Arc<dyn SignableBuilderService>,
67
68    /// Metrics service
69    pub metrics_service: Arc<MetricsService>,
70
71    /// Signed entity type lock
72    pub signed_entity_type_lock: Arc<SignedEntityTypeLock>,
73
74    /// Cardano transactions preloader
75    pub cardano_transactions_preloader: Arc<CardanoTransactionsPreloader>,
76
77    /// Upkeep service
78    pub upkeep_service: Arc<dyn UpkeepService>,
79
80    /// Epoch service
81    pub epoch_service: EpochServiceWrapper,
82
83    /// Certifier service
84    pub certifier: Arc<dyn CertifierService>,
85
86    /// Kes signer service
87    pub kes_signer: Option<Arc<dyn KesSigner>>,
88}