tempo_commonware_node/consensus/application/
mod.rs1use std::{sync::Arc, time::Duration};
7
8use commonware_consensus::types::FixedEpocher;
9use commonware_cryptography::ed25519::PublicKey;
10use commonware_runtime::{Metrics, Pacer, Spawner, Storage};
11
12use eyre::WrapErr as _;
13use rand_08::{CryptoRng, Rng};
14use tempo_node::TempoFullNode;
15
16mod actor;
17mod ingress;
18
19pub(super) use actor::Actor;
20pub(crate) use ingress::Mailbox;
21
22use crate::{epoch::SchemeProvider, subblocks};
23
24pub(super) async fn init<TContext>(
25 config: Config<TContext>,
26) -> eyre::Result<(Actor<TContext>, Mailbox)>
27where
28 TContext: Pacer + governor::clock::Clock + Rng + CryptoRng + Spawner + Storage + Metrics,
29{
30 let actor = Actor::init(config)
31 .await
32 .wrap_err("failed initializing actor")?;
33 let mailbox = actor.mailbox().clone();
34 Ok((actor, mailbox))
35}
36
37pub(super) struct Config<TContext> {
38 pub(super) context: TContext,
40
41 pub(super) public_key: PublicKey,
44
45 pub(super) mailbox_size: usize,
48
49 pub(super) marshal: crate::alias::marshal::Mailbox,
51
52 pub(super) executor: crate::executor::Mailbox,
53
54 pub(super) execution_node: Arc<TempoFullNode>,
56
57 pub(crate) subblocks: Option<subblocks::Mailbox>,
59
60 pub(super) payload_resolve_time: Duration,
62
63 pub(super) payload_return_time: Duration,
65
66 pub(super) epoch_strategy: FixedEpocher,
68
69 pub(crate) scheme_provider: SchemeProvider,
71}