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