tempo_commonware_node/consensus/application/
mod.rs1use std::time::Duration;
7
8use commonware_consensus::types::FixedEpocher;
9use commonware_runtime::{Metrics, Pacer, Spawner, Storage};
10
11use eyre::WrapErr as _;
12use rand_08::{CryptoRng, Rng};
13use tempo_node::TempoFullNode;
14
15mod actor;
16mod ingress;
17
18pub(super) use actor::Actor;
19pub(crate) use ingress::Mailbox;
20
21use crate::{epoch::SchemeProvider, subblocks};
22
23pub(super) async fn init<TContext>(
24 config: Config<TContext>,
25) -> eyre::Result<(Actor<TContext>, Mailbox)>
26where
27 TContext: Pacer + governor::clock::Clock + Rng + CryptoRng + Spawner + Storage + Metrics,
28{
29 let actor = Actor::init(config)
30 .await
31 .wrap_err("failed initializing actor")?;
32 let mailbox = actor.mailbox().clone();
33 Ok((actor, mailbox))
34}
35
36pub(super) struct Config<TContext> {
37 pub(super) context: TContext,
39
40 pub(super) fee_recipient: alloy_primitives::Address,
42
43 pub(super) mailbox_size: usize,
46
47 pub(super) marshal: crate::alias::marshal::Mailbox,
49
50 pub(super) executor: crate::executor::Mailbox,
51
52 pub(super) execution_node: TempoFullNode,
54
55 pub(crate) subblocks: Option<subblocks::Mailbox>,
57
58 pub(super) payload_resolve_time: Duration,
60
61 pub(super) payload_return_time: Duration,
63
64 pub(super) epoch_strategy: FixedEpocher,
66
67 pub(crate) scheme_provider: SchemeProvider,
69}