Explorar el Código

lilith: Support versioning of spawned networks.

parazyd hace 3 años
padre
commit
3546af6c79
Se han modificado 5 ficheros con 32 adiciones y 5 borrados
  1. 1 0
      Cargo.lock
  2. 1 0
      bin/lilith/Cargo.toml
  3. 8 4
      bin/lilith/lilith_config.toml
  4. 11 1
      bin/lilith/src/main.rs
  5. 11 0
      src/error.rs

+ 1 - 0
Cargo.lock

@@ -3599,6 +3599,7 @@ dependencies = [
  "easy-parallel",
  "futures",
  "log",
+ "semver 1.0.17",
  "serde",
  "serde_json",
  "signal-hook",

+ 1 - 0
bin/lilith/Cargo.toml

@@ -22,6 +22,7 @@ smol = "1.3.0"
 
 # Misc
 log = "0.4.19"
+semver = "1.0.17"
 serde_json = "1.0.96"
 simplelog = "0.12.1"
 url = "2.4.0"

+ 8 - 4
bin/lilith/lilith_config.toml

@@ -22,26 +22,30 @@ accept_addrs = [
 #hosts_file="~/.config/darkfi/lilith_hosts.tsv"
 
 ## Per-network settings
-#[network."darkfid_sync"]
+#[network."darkfid_sync_v4"]
 #port = 33032
 #seeds = []
 #peers = []
+#version = "0.4.1"
 #localnet = false
 
-#[network."darkfid_consensus"]
+#[network."darkfid_consensus_v4"]
 #port = 33033
 #seeds = []
 #peers = []
+#version = "0.4.1"
 #localnet = false
 
-#[network."ircd"]
+#[network."darkirc_v4"]
 #port = 25551
 #seeds = []
 #peers = []
+#version = "0.4.1"
 #localnet = false
 
-#[network."taud"]
+#[network."taud_v4"]
 #port = 23331
 #seeds = []
 #peers = []
+#version = "0.4.1"
 #localnet = false

+ 11 - 1
bin/lilith/src/main.rs

@@ -26,6 +26,7 @@ use async_std::{stream::StreamExt, sync::Arc};
 use async_trait::async_trait;
 use futures::future::join_all;
 use log::{debug, error, info, warn};
+use semver::Version;
 use serde_json::json;
 use signal_hook::consts::{SIGHUP, SIGINT, SIGQUIT, SIGTERM};
 use signal_hook_async_std::Signals;
@@ -117,6 +118,8 @@ struct NetInfo {
     pub seeds: Vec<Url>,
     /// Manual peers to connect to
     pub peers: Vec<Url>,
+    /// Supported network version
+    pub version: Version,
     /// Enable localnet hosts
     pub localnet: bool,
 }
@@ -355,7 +358,13 @@ fn parse_configured_networks(data: &str) -> Result<HashMap<String, NetInfo>> {
                     false
                 };
 
-                let net_info = NetInfo { port, seeds, peers, localnet };
+                let version = if table.contains_key("version") {
+                    semver::Version::parse(table["version"].as_str().unwrap())?
+                } else {
+                    semver::Version::parse(option_env!("CARGO_PKG_VERSION").unwrap_or("0.0.0"))?
+                };
+
+                let net_info = NetInfo { port, seeds, peers, version, localnet };
                 ret.insert(name, net_info);
             }
         }
@@ -386,6 +395,7 @@ async fn spawn_net(
         seeds: info.seeds.clone(),
         peers: info.peers.clone(),
         outbound_connections: 0,
+        app_version: info.version.clone(),
         localnet: info.localnet,
         allowed_transports: vec![
             "tcp".to_string(),

+ 11 - 0
src/error.rs

@@ -60,6 +60,10 @@ pub enum Error {
     #[error(transparent)]
     DashuParseError(#[from] dashu::base::error::ParseError),
 
+    #[cfg(feature = "semver")]
+    #[error("semver parse error: {0}")]
+    SemverError(String),
+
     // ===============
     // Encoding errors
     // ===============
@@ -622,6 +626,13 @@ impl From<halo2_proofs::plonk::Error> for Error {
     }
 }
 
+#[cfg(feature = "semver")]
+impl From<semver::Error> for Error {
+    fn from(err: semver::Error) -> Self {
+        Self::SemverError(err.to_string())
+    }
+}
+
 /*
 #[cfg(feature = "tungstenite")]
 impl From<tungstenite::Error> for Error {