static NRustLightningDefaultSettings() { _Settings = new Dictionary <NetworkType, NRustLightningDefaultSettings>(); foreach (var nType in new [] { NetworkType.Mainnet, NetworkType.Testnet, NetworkType.Regtest }) { var settings = new NRustLightningDefaultSettings(); _Settings.Add(nType, settings); settings.DefaultDataDir = StandardConfiguration.DefaultDataDirectory.GetDirectory("NRustLightning", GetFolderName(nType), false); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDir, "nrustlightning.conf"); settings.DefaultCookieFile = Path.Combine(settings.DefaultDataDir, ".cookie"); settings.NBXplorerSettings = NBXplorerDefaultSettings.GetDefaultSettings(nType); settings.DefaultPort = Constants.DefaultP2PPort; settings.RustLightningConfig = UserConfig.GetDefault(); } }
public Config LoadArgs(IConfiguration config, ILogger logger) { var networkType = config.GetNetworkType(); logger.LogInformation($"Network type: {networkType}"); NetworkProvider = new NRustLightningNetworkProvider(networkType); var defaultSettings = NRustLightningDefaultSettings.GetDefaultSettings(NetworkProvider.NetworkType); DataDir = config.GetOrDefault <string>("datadir", null); if (DataDir is null) { DataDir = Path.GetDirectoryName(defaultSettings.DefaultDataDir); if (!Directory.Exists(DataDir)) { Directory.CreateDirectory(DataDir); } if (!Directory.Exists(defaultSettings.DefaultDataDir)) { Directory.CreateDirectory(defaultSettings.DefaultDataDir); } } var nbxConfig = config.GetSection("nbx"); var nbxCookieFile = nbxConfig.GetOrDefault("cookiefile", Constants.DefaultNBXplorerCookieFile(NetworkProvider.NetworkType)); NBXplorerUri = new Uri(nbxConfig.GetOrDefault("rpcurl", Constants.DefaultNBXplorerUri)); if (!File.Exists(nbxCookieFile)) { logger.LogWarning($"cookie file for nbxplorer does not exist in {nbxCookieFile}" + " Make sure you are running nbx with --noauth."); } logger.LogInformation($"nbxplorer url {NBXplorerUri}"); NBXCookieFile = nbxCookieFile; var p2pExternalIp = config.GetOrDefault("externalip", Constants.DefaultP2PExternalIpStr); if (IPEndPoint.TryParse(p2pExternalIp, out var ip)) { P2PExternalIp = ip; } else if (p2pExternalIp.Contains(":")) { var s = p2pExternalIp.Split(":", StringSplitOptions.RemoveEmptyEntries); if (s.Length != 2) { throw new ConfigException($"Invalid external ip {p2pExternalIp}"); } if (Int32.TryParse(s[1], out var port)) { P2PExternalIp = new DnsEndPoint(s[0], port); } else { throw new ConfigException($"Invalid external ip {p2pExternalIp}"); } } else { throw new ConfigException($"Invalid external ip {p2pExternalIp}"); } logger.LogInformation($"Advertising external ip: {P2PExternalIp.ToEndpointString()}"); logger.LogDebug($"Network: {NetworkProvider.NetworkType.ToString()}"); var supportedChains = config.GetOrDefault <string>("chains", "BTC") .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToLowerInvariant()); var validChains = new List <string>(); foreach (var n in NetworkProvider.GetAll()) { if (supportedChains.Contains(n.CryptoCode)) { validChains.Add(n.CryptoCode); var chainConfiguration = new ChainConfiguration(); chainConfiguration.CryptoCode = n.CryptoCode; var args = RPCArgs.Parse(config, n.NBitcoinNetwork, n.CryptoCode); chainConfiguration.Rpc = args.ConfigureRPCClient(n, logger); if (chainConfiguration.Rpc.Address.Port == n.NBitcoinNetwork.DefaultPort) { logger.LogWarning($"{n.CryptoCode}: It seems that the1 RPC port ({chainConfiguration.Rpc.Address.Port}) is equal to the default P2P port ({n.NBitcoinNetwork.DefaultPort}, this is probably a misconfiguration)"); } if ((chainConfiguration.Rpc.CredentialString.CookieFile != null || chainConfiguration.Rpc.CredentialString.UseDefault) && !n.SupportCookieAuthentication) { throw new ConfigException($"Chain {n.CryptoCode} does not support cookie file authentication,\n" + $"Please use {n.CryptoCode.ToLowerInvariant()}rpcuser and {n.CryptoCode.ToLowerInvariant()}rpcpassword settings in NRustLightning" + $"And configure rpcuser and rpcpassword in the configuration file or in commandline or your node"); } ChainConfiguration.Add(chainConfiguration); } } var invalidChains = String.Join(',', supportedChains.Where(s => !validChains.Contains(s))); if (!string.IsNullOrEmpty(invalidChains)) { throw new ConfigException($"Invalid chains {invalidChains}"); } config.GetSection("ln").Bind(RustLightningConfig); string?seed = null; var filePath = Path.Join(DataDir, "node_secret"); if (File.Exists(filePath)) { logger.LogDebug($"reading seed from {filePath}"); seed = File.ReadAllText(filePath); } if (seed is null) { seed = config.GetOrDefault("seed", String.Empty); } if (String.IsNullOrEmpty(seed)) { logger.LogWarning($"seed not found in {filePath}! You can specify it with --seed option."); logger.LogInformation("generating new seed..."); seed = RandomUtils.GetUInt256().ToString(); } InvoiceDBFilePath = Path.Combine(DataDir, "InvoiceDb"); if (!Directory.Exists(InvoiceDBFilePath)) { Directory.CreateDirectory(InvoiceDBFilePath); } var h = new HexEncoder(); if (!(h.IsValid(seed) && seed.Length == 64)) { throw new NRustLightningException($"Seed corrupted {seed}"); } File.WriteAllText(filePath, seed); GetSeed = async() => { var s = await File.ReadAllTextAsync(filePath); return(h.DecodeData(s)); }; PaymentTimeoutSec = config.GetOrDefault("paymenttimeout", Constants.DefaultPaymentTimeoutSec); DBCacheMB = config.GetOrDefault("dbcache", Constants.DefaultDBCacheMB); return(this); }
private static NRustLightningDefaultSettings GetDefaultSettings(this IConfiguration conf) => NRustLightningDefaultSettings.GetDefaultSettings(GetNetworkType(conf));