miden_note_transport_node/node/
mod.rs1use std::sync::Arc;
2
3use tracing::{error, info};
4
5use self::grpc::{GrpcServer, GrpcServerConfig};
6use crate::Result;
7use crate::database::{Database, DatabaseConfig, DatabaseMaintenance};
8use crate::metrics::Metrics;
9
10pub mod grpc;
12
13pub struct Node {
15 grpc: GrpcServer,
17 maintenance: DatabaseMaintenance,
19 _metrics: Metrics,
21
22 _database: Arc<Database>,
24}
25
26#[derive(Debug, Default, Clone)]
28pub struct NodeConfig {
29 pub grpc: GrpcServerConfig,
31 pub database: DatabaseConfig,
33}
34
35impl Node {
36 pub async fn init(config: NodeConfig) -> Result<Self> {
38 let metrics = Metrics::default();
39 let database =
40 Arc::new(Database::connect(config.database.clone(), metrics.db.clone()).await?);
41
42 let grpc = GrpcServer::new(database.clone(), config.grpc, metrics.grpc.clone());
43 let maintenance =
44 DatabaseMaintenance::new(database.clone(), config.database, metrics.db.clone());
45
46 Ok(Self {
47 grpc,
48 maintenance,
49 _metrics: metrics,
50 _database: database,
51 })
52 }
53
54 pub async fn entrypoint(self) {
56 info!("Starting Miden Transport Node");
57 tokio::spawn(self.maintenance.entrypoint());
58
59 if let Err(e) = self.grpc.serve().await {
60 error!("Server error: {e}");
61 }
62 }
63}