Skip to content

Commit

Permalink
added mining_enabled flag
Browse files Browse the repository at this point in the history
  • Loading branch information
ksrichard committed Jun 28, 2024
1 parent 6f355fb commit 9f1268b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 24 deletions.
9 changes: 9 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,14 @@ struct Cli {
default_value = "."
)]
private_key_folder: PathBuf,

/// Mining enabled
///
/// In case it is set to false, the node will only handle p2p operations,
/// will be syncing with share chain, but not starting gRPC services and no Tari base node needed.
/// By setting this to, false it can be used as a stable node for routing only.
#[arg(long, value_name = "mining-enabled", default_value_t = true)]
mining_enabled: bool,
}

#[tokio::main]
Expand All @@ -84,6 +92,7 @@ async fn main() -> anyhow::Result<()> {
}
config_builder.with_stable_peer(cli.stable_peer);
config_builder.with_private_key_folder(cli.private_key_folder);
config_builder.with_mining_enabled(cli.mining_enabled);

// server start
let config = config_builder.build();
Expand Down
7 changes: 7 additions & 0 deletions src/server/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pub struct Config {
pub idle_connection_timeout: Duration,
pub peer_store: PeerStoreConfig,
pub p2p_service: p2p::Config,
pub mining_enabled: bool,
}

impl Default for Config {
Expand All @@ -24,6 +25,7 @@ impl Default for Config {
idle_connection_timeout: Duration::from_secs(30),
peer_store: PeerStoreConfig::default(),
p2p_service: p2p::Config::default(),
mining_enabled: true,
}
}
}
Expand Down Expand Up @@ -82,6 +84,11 @@ impl ConfigBuilder {
self
}

pub fn with_mining_enabled(&mut self, config: bool) -> &mut Self {
self.config.mining_enabled = config;
self
}

pub fn build(&self) -> Config {
self.config.clone()
}
Expand Down
55 changes: 31 additions & 24 deletions src/server/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ where
{
config: config::Config,
p2p_service: p2p::Service<S>,
base_node_grpc_service: BaseNodeServer<TariBaseNodeGrpc>,
p2pool_grpc_service: ShaP2PoolServer<ShaP2PoolGrpc<S>>,
base_node_grpc_service: Option<BaseNodeServer<TariBaseNodeGrpc>>,
p2pool_grpc_service: Option<ShaP2PoolServer<ShaP2PoolGrpc<S>>>,
}

// TODO: add graceful shutdown
Expand All @@ -51,19 +51,23 @@ where
.await
.map_err(Error::P2PService)?;

let base_node_grpc_service = TariBaseNodeGrpc::new(config.base_node_address.clone())
let mut base_node_grpc_server = None;
let mut p2pool_server = None;
if config.mining_enabled {
let base_node_grpc_service = TariBaseNodeGrpc::new(config.base_node_address.clone())
.await
.map_err(Error::Grpc)?;
base_node_grpc_server = Some(BaseNodeServer::new(base_node_grpc_service));

let p2pool_grpc_service = ShaP2PoolGrpc::new(
config.base_node_address.clone(),
p2p_service.client(),
share_chain.clone(),
)
.await
.map_err(Error::Grpc)?;
let base_node_grpc_server = BaseNodeServer::new(base_node_grpc_service);

let p2pool_grpc_service = ShaP2PoolGrpc::new(
config.base_node_address.clone(),
p2p_service.client(),
share_chain.clone(),
)
.await
.map_err(Error::Grpc)?;
let p2pool_server = ShaP2PoolServer::new(p2pool_grpc_service);
p2pool_server = Some(ShaP2PoolServer::new(p2pool_grpc_service));
}

Ok(Self {
config,
Expand Down Expand Up @@ -101,18 +105,21 @@ where
pub async fn start(&mut self) -> Result<(), Error> {
info!(target: LOG_TARGET, "⛏ Starting Tari SHA-3 mining P2Pool...");

// local base node and p2pool node grpc services
let base_node_grpc_service = self.base_node_grpc_service.clone();
let p2pool_grpc_service = self.p2pool_grpc_service.clone();
let grpc_port = self.config.grpc_port;
tokio::spawn(async move {
match Self::start_grpc(base_node_grpc_service, p2pool_grpc_service, grpc_port).await {
Ok(_) => {}
Err(error) => {
error!(target: LOG_TARGET, "GRPC Server encountered an error: {:?}", error);
if self.config.mining_enabled {
// local base node and p2pool node grpc services
let base_node_grpc_service = self.base_node_grpc_service.clone().unwrap();
let p2pool_grpc_service = self.p2pool_grpc_service.clone().unwrap();
let grpc_port = self.config.grpc_port;
tokio::spawn(async move {
match Self::start_grpc(base_node_grpc_service, p2pool_grpc_service, grpc_port).await
{
Ok(_) => {}
Err(error) => {
error!(target: LOG_TARGET, "GRPC Server encountered an error: {:?}", error);
}
}
}
});
});
}

self.p2p_service.start().await.map_err(Error::P2PService)
}
Expand Down

0 comments on commit 9f1268b

Please sign in to comment.