tempo_commonware_node/consensus/application/
mod.rs1use std::time::Duration;
4
5use commonware_runtime::{Metrics, Pacer, Spawner, Storage};
6
7use eyre::WrapErr as _;
8use rand::{CryptoRng, Rng};
9use tempo_node::TempoFullNode;
10
11mod executor;
12
13mod actor;
14mod ingress;
15
16pub(super) use actor::Actor;
17pub(crate) use ingress::Mailbox;
18
19use crate::{epoch::SchemeProvider, subblocks};
20
21pub(super) async fn init<TContext>(
22 config: Config<TContext>,
23) -> eyre::Result<(Actor<TContext>, Mailbox)>
24where
25 TContext: Pacer + governor::clock::Clock + Rng + CryptoRng + Spawner + Storage + Metrics,
26{
27 let actor = Actor::init(config)
28 .await
29 .wrap_err("failed initializing actor")?;
30 let mailbox = actor.mailbox().clone();
31 Ok((actor, mailbox))
32}
33
34pub(super) struct Config<TContext> {
35 pub(super) context: TContext,
37
38 pub(super) fee_recipient: alloy_primitives::Address,
40
41 pub(super) mailbox_size: usize,
44
45 pub(super) marshal: crate::alias::marshal::Mailbox,
47
48 pub(super) execution_node: TempoFullNode,
50
51 pub(crate) subblocks: subblocks::Mailbox,
53
54 pub(super) new_payload_wait_time: Duration,
56
57 pub(super) epoch_length: u64,
61
62 pub(crate) scheme_provider: SchemeProvider,
64}