public BreezeConfiguration(string configPath, string datadir = null) { try { if (!File.Exists(configPath)) { StringBuilder builder = new StringBuilder(); builder.AppendLine("# Breeze TumbleBit daemon settings"); builder.AppendLine("#network=testnet"); builder.AppendLine("#tor.enabled="); builder.AppendLine("#rpc.user="******"#rpc.password="******"#rpc.url=http://127.0.0.1:16174"); builder.AppendLine("#breeze.ipv4="); builder.AppendLine("#breeze.ipv6="); builder.AppendLine("#breeze.onion="); builder.AppendLine("#breeze.port="); builder.AppendLine("# Value of each registration transaction output (in satoshi)"); builder.AppendLine("#breeze.regtxoutputvalue="); builder.AppendLine("# Value of registration transaction fee (in satoshi)"); builder.AppendLine("#breeze.regtxfeevalue="); builder.AppendLine("#tumbler.url="); builder.AppendLine("#tumbler.rsakeyfile="); builder.AppendLine("#tumbler.ecdsakeyaddress="); File.WriteAllText(configPath, builder.ToString()); Console.WriteLine("*** Default blank configuration file created, please set configuration values and restart ***"); Environment.Exit(0); } var configFile = TextFileConfiguration.Parse(File.ReadAllText(configPath)); if (configFile.GetOrDefault <string>("network", "testnet").Equals("testnet")) { TumblerNetwork = Network.TestNet; } if (configFile.GetOrDefault <string>("tor.enabled", "true").Equals("true")) { UseTor = true; } if (configFile.GetOrDefault <string>("network", "testnet").Equals("regtest")) { TumblerNetwork = Network.RegTest; } if (configFile.GetOrDefault <string>("network", "testnet").Equals("main")) { TumblerNetwork = Network.Main; } RpcUser = configFile.GetOrDefault <string>("rpc.user", null); RpcPassword = configFile.GetOrDefault <string>("rpc.password", null); RpcUrl = configFile.GetOrDefault <string>("rpc.url", null); if (RpcUser == null || RpcPassword == null || RpcUrl == null) { throw new Exception("ERROR: RPC information in config file is invalid"); } try { // Assume that if it parses it's valid string defaultAddress = this.UseTor ? null : NTumbleBit.Utils.GetInternetConnectedAddress().ToString(); Ipv4Address = IPAddress.Parse(configFile.GetOrDefault <string>("breeze.ipv4", defaultAddress)); } catch (Exception) { Ipv4Address = null; } try { // Assume that if it parses it's valid Ipv6Address = IPAddress.Parse(configFile.GetOrDefault <string>("breeze.ipv6", null)); } catch (Exception) { Ipv6Address = null; } try { OnionAddress = configFile.GetOrDefault <string>("breeze.onion", null); if (OnionAddress.Length > 16) { // Regard as invalid, do not try to truncate etc. OnionAddress = null; } } catch (Exception) { OnionAddress = null; } //if (Ipv4Address == null && Ipv6Address == null && OnionAddress == null) //{ // throw new Exception("ERROR: No valid IP/onion addresses in configuration"); //} Port = configFile.GetOrDefault <int>("breeze.port", 37123); TumblerApiBaseUrl = configFile.GetOrDefault <string>("tumbler.url", null); // Use user keyfile; default new key if invalid string bitcoinNetwork; if (TumblerNetwork == Network.Main) { bitcoinNetwork = "MainNet"; } else if (TumblerNetwork == Network.RegTest) { bitcoinNetwork = "RegTest"; } else // TumblerNetwork == Network.TestNet { bitcoinNetwork = "TestNet"; } if (datadir == null) { // Create default directory for key files if it does not already exist Directory.CreateDirectory(Path.Combine(GetDefaultDataDir("NTumbleBitServer"), bitcoinNetwork)); TumblerRsaKeyFile = configFile.GetOrDefault <string>("tumbler.rsakeyfile", Path.Combine(GetDefaultDataDir("NTumbleBitServer"), bitcoinNetwork, "Tumbler.pem")); } else { Directory.CreateDirectory(Path.Combine(datadir, bitcoinNetwork)); TumblerRsaKeyFile = configFile.GetOrDefault <string>("tumbler.rsakeyfile", Path.Combine(datadir, bitcoinNetwork, "Tumbler.pem")); } TumblerRsaKeyFile = BreezeConfigurationValidator.ValidateTumblerRsaKeyFile( TumblerRsaKeyFile, TumblerRsaKeyFile ); TumblerEcdsaKeyAddress = configFile.GetOrDefault <string>("tumbler.ecdsakeyaddress", null); TxOutputValueSetting = new Money(configFile.GetOrDefault <int>("breeze.regtxoutputvalue", 1000), MoneyUnit.Satoshi); TxFeeValueSetting = new Money(configFile.GetOrDefault <int>("breeze.regtxfeevalue", 10000), MoneyUnit.Satoshi); } catch (Exception e) { throw new Exception("ERROR: Unable to read configuration. " + e); } }
public BreezeConfiguration(string configPath) { try { if (!File.Exists(configPath)) { StringBuilder builder = new StringBuilder(); builder.AppendLine("# Stratis TumbleBit daemon settings"); builder.AppendLine("#rpc.user="******"#rpc.password="******"#rpc.url=http://127.0.0.1:16174"); builder.AppendLine("#breeze.ipv4="); builder.AppendLine("#breeze.ipv6="); builder.AppendLine("#breeze.onion="); builder.AppendLine("#breeze.port="); builder.AppendLine("# Value of each registration transaction output (in satoshi)"); builder.AppendLine("#breeze.regtxoutputvalue="); builder.AppendLine("# Value of registration transaction fee (in satoshi)"); builder.AppendLine("#breeze.regtxfeevalue="); builder.AppendLine("#tumbler.url="); builder.AppendLine("#tumbler.rsakeypath="); builder.AppendLine("#tumbler.ecdsakeyaddress="); File.WriteAllText(configPath, builder.ToString()); Console.WriteLine("*** Default blank configuration file created, please set configuration values and restart ***"); Environment.Exit(0); } var configFile = TextFileConfiguration.Parse(File.ReadAllText(configPath)); IsTestNet = configFile.GetOrDefault <bool>("testnet", false); RpcUser = configFile.GetOrDefault <string>("rpc.user", null); RpcPassword = configFile.GetOrDefault <string>("rpc.password", null); RpcUrl = configFile.GetOrDefault <string>("rpc.url", null); if (RpcUser == null || RpcPassword == null || RpcUrl == null) { throw new Exception("ERROR: RPC information in config file is invalid"); } try { // Assume that if it parses it's valid Ipv4Address = IPAddress.Parse(configFile.GetOrDefault <string>("breeze.ipv4", null)); } catch (Exception) { Ipv4Address = null; } try { // Assume that if it parses it's valid Ipv6Address = IPAddress.Parse(configFile.GetOrDefault <string>("breeze.ipv6", null)); } catch (Exception) { Ipv6Address = null; } try { OnionAddress = configFile.GetOrDefault <string>("breeze.onion", null); if (OnionAddress.Length > 16) { // Regard as invalid, do not try to truncate etc. OnionAddress = null; } } catch (Exception) { OnionAddress = null; } if (Ipv4Address == null && Ipv6Address == null && OnionAddress == null) { throw new Exception("ERROR: No valid IP/onion addresses in configuration"); } Port = configFile.GetOrDefault <int>("breeze.port", 37123); TumblerApiBaseUrl = configFile.GetOrDefault <string>("tumbler.url", null); TumblerRsaKeyPath = configFile.GetOrDefault <string>("tumbler.rsakeypath", null); TumblerEcdsaKeyAddress = configFile.GetOrDefault <string>("tumbler.ecdsakeyaddress", null); TxOutputValueSetting = new Money(configFile.GetOrDefault <int>("breeze.regtxoutputvalue", 1000), MoneyUnit.Satoshi); TxFeeValueSetting = new Money(configFile.GetOrDefault <int>("breeze.regtxfeevalue", 10000), MoneyUnit.Satoshi); } catch (Exception e) { Console.WriteLine(e); throw new Exception("ERROR: Unable to read configuration"); } }