From a85b6ba0c84d093fe1136143788992626ee79034 Mon Sep 17 00:00:00 2001 From: Lawrence Nahum Date: Sun, 15 Jul 2018 22:49:17 +0200 Subject: [PATCH 1/4] add support for regtest --- src/config.rs | 26 ++++++++++++++++++-------- src/daemon.rs | 2 ++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/config.rs b/src/config.rs index 56547b8..9514a90 100644 --- a/src/config.rs +++ b/src/config.rs @@ -64,20 +64,20 @@ impl Config { .takes_value(true), ) .arg( - Arg::with_name("testnet") - .long("testnet") - .help("Connect to a testnet bitcoind instance"), + Arg::with_name("network") + .help("Select Bitcoin network type ('mainnet', 'testnet' or 'regtest')") + .takes_value(true), ) .arg( Arg::with_name("electrum_rpc_addr") .long("electrum-rpc-addr") - .help("Electrum server JSONRPC 'addr:port' to listen on (default: '127.0.0.1:50001' for mainnet and '127.0.0.1:60001' for testnet)") + .help("Electrum server JSONRPC 'addr:port' to listen on (default: '127.0.0.1:50001' for mainnet, '127.0.0.1:60001' for testnet and '127.0.0.1:60401' for regtest)") .takes_value(true), ) .arg( Arg::with_name("daemon_rpc_addr") .long("daemon-rpc-addr") - .help("Bitcoin daemon JSONRPC 'addr:port' to connect (default: 127.0.0.1:8332 for mainnet and 127.0.0.1:18332 for testnet)") + .help("Bitcoin daemon JSONRPC 'addr:port' to connect (default: 127.0.0.1:8332 for mainnet, 127.0.0.1:18332 for testnet and 127.0.0.1:18443 for regtest)") .takes_value(true), ) .arg( @@ -89,21 +89,29 @@ impl Config { .get_matches(); let db_dir = Path::new(m.value_of("db_dir").unwrap_or("./db")); - let network_type = match m.is_present("testnet") { - false => Network::Mainnet, - true => Network::Testnet, + let network_name = m.value_of("network").unwrap_or("mainnet"); + + let network_type = match network_name { + "mainnet" => Network::Mainnet, + "testnet" => Network::Testnet, + "regtest" => Network::Regtest, + _ => Network::Testnet, }; + let db_path = match network_type { Network::Mainnet => db_dir.join("mainnet"), Network::Testnet => db_dir.join("testnet"), + Network::Regtest => db_dir.join("regtest"), }; let default_daemon_port = match network_type { Network::Mainnet => 8332, Network::Testnet => 18332, + Network::Regtest => 18443, }; let default_electrum_port = match network_type { Network::Mainnet => 50001, Network::Testnet => 60001, + Network::Regtest => 60401, }; let daemon_rpc_addr: SocketAddr = m.value_of("daemon_rpc_addr") @@ -128,6 +136,8 @@ impl Config { }); if let Network::Testnet = network_type { daemon_dir.push("testnet3"); + } else if let Network::Regtest = network_type { + daemon_dir.push("regtest"); } let cookie = m.value_of("cookie") .map(|s| s.to_owned()) diff --git a/src/daemon.rs b/src/daemon.rs index 5b2a71c..46e3277 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -22,6 +22,7 @@ use errors::*; pub enum Network { Mainnet, Testnet, + Regtest, } fn parse_hash(value: &Value) -> Result { @@ -239,6 +240,7 @@ impl Daemon { match self.network { Network::Mainnet => 0xD9B4BEF9, Network::Testnet => 0x0709110B, + Network::Regtest => 0xDAB5BFFA, } } From 774d75bd9715be2ae3989781e298681d6d64dd18 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Mon, 16 Jul 2018 08:56:11 +0300 Subject: [PATCH 2/4] Use `match` statement for daemon_dir construction --- src/config.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 9514a90..5d3797f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -134,10 +134,10 @@ impl Config { default_dir.push(".bitcoin"); default_dir }); - if let Network::Testnet = network_type { - daemon_dir.push("testnet3"); - } else if let Network::Regtest = network_type { - daemon_dir.push("regtest"); + match network_type { + Network::Mainnet => (), + Network::Testnet => daemon_dir.push("testnet3"), + Network::Regtest => daemon_dir.push("regtest"), } let cookie = m.value_of("cookie") .map(|s| s.to_owned()) From d743e09a4c024aaf69e134661d5fb12bc243ce7e Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Mon, 16 Jul 2018 09:28:33 +0300 Subject: [PATCH 3/4] Simplify DB path construction --- src/config.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/config.rs b/src/config.rs index 5d3797f..74f0fa7 100644 --- a/src/config.rs +++ b/src/config.rs @@ -88,21 +88,16 @@ impl Config { ) .get_matches(); - let db_dir = Path::new(m.value_of("db_dir").unwrap_or("./db")); let network_name = m.value_of("network").unwrap_or("mainnet"); - let network_type = match network_name { "mainnet" => Network::Mainnet, "testnet" => Network::Testnet, "regtest" => Network::Regtest, - _ => Network::Testnet, + _ => panic!("unsupported Bitcoin network: {:?}", network_name), }; + let db_dir = Path::new(m.value_of("db_dir").unwrap_or("./db")); + let db_path = db_dir.join(network_name); - let db_path = match network_type { - Network::Mainnet => db_dir.join("mainnet"), - Network::Testnet => db_dir.join("testnet"), - Network::Regtest => db_dir.join("regtest"), - }; let default_daemon_port = match network_type { Network::Mainnet => 8332, Network::Testnet => 18332, From f40357e8cc61ac113c73e3471d1a54e5c8a46823 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Mon, 16 Jul 2018 09:30:51 +0300 Subject: [PATCH 4/4] Use `--network` flag to customize network type (instead of a non-flag commandline argument) --- src/config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.rs b/src/config.rs index 74f0fa7..1c6e820 100644 --- a/src/config.rs +++ b/src/config.rs @@ -65,6 +65,7 @@ impl Config { ) .arg( Arg::with_name("network") + .long("network") .help("Select Bitcoin network type ('mainnet', 'testnet' or 'regtest')") .takes_value(true), )