public static async Task MainAsync(string[] args) { try { var isTestNet = args.Contains("-testnet"); var isStratis = args.Contains("stratis"); var agent = "Breeze"; // This setting is not in NodeSettings yet, so get it directly from the args ConfigurationOptionWrapper <string> registrationStoreDirectory = new ConfigurationOptionWrapper <string>("RegistrationStoreDirectory", args.GetValueOf("-storedir")); ConfigurationOptionWrapper <string>[] configurationOptions = { registrationStoreDirectory }; NodeSettings nodeSettings; if (isStratis) { //if (NodeSettings.PrintHelp(args, Network.StratisMain)) // return; Network network = isTestNet ? Network.StratisTest : Network.StratisMain; if (isTestNet) { args = args.Append("-addnode=51.141.28.47").ToArray(); // TODO: fix this temp hack } nodeSettings = new NodeSettings(network, ProtocolVersion.ALT_PROTOCOL_VERSION, agent, args: args, loadConfiguration: false); } else { nodeSettings = new NodeSettings(agent: agent, args: args, loadConfiguration: false); } IFullNodeBuilder fullNodeBuilder = null; if (args.Contains("light")) { fullNodeBuilder = new FullNodeBuilder() .UseNodeSettings(nodeSettings) .UseLightWallet() .UseWatchOnlyWallet() .UseBlockNotification() .UseTransactionNotification() .UseApi(); } else { fullNodeBuilder = new FullNodeBuilder() .UseNodeSettings(nodeSettings); if (args.Contains("stratis")) { fullNodeBuilder.UsePosConsensus(); } else { fullNodeBuilder.UsePowConsensus(); } fullNodeBuilder.UseBlockStore() .UseMempool() .UseBlockNotification() .UseTransactionNotification() .UseWallet() .UseWatchOnlyWallet(); if (args.Contains("stratis")) { fullNodeBuilder.AddPowPosMining(); } else { fullNodeBuilder.AddMining(); } fullNodeBuilder.AddRPC() .UseApi(); } if (args.Contains("registration")) { //fullNodeBuilder.UseInterNodeCommunication(); fullNodeBuilder.UseRegistration(); } // Need this to happen for both TB and non-TB daemon Logs.Configure(new FuncLoggerFactory(i => new DualLogger(i, (a, b) => true, false))); // Start NTumbleBit logging to the console SetupTumbleBitConsoleLogs(nodeSettings); // Currently TumbleBit is bitcoin only if (args.Contains("-tumblebit")) { // We no longer pass the URI in via the command line, the registration feature selects a random one fullNodeBuilder.UseTumbleBit(configurationOptions); } IFullNode node = fullNodeBuilder.Build(); // Add logging to NLog SetupTumbleBitNLogs(nodeSettings); // Start Full Node - this will also start the API. await node.RunAsync(); } catch (Exception ex) { Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.Message); } }
public static async Task MainAsync(string[] args) { try { var comparer = new CommandlineArgumentComparer(); var isRegTest = args.Contains("regtest", comparer); var isTestNet = args.Contains("testnet", comparer); var isStratis = args.Contains("stratis", comparer); var isLight = args.Contains("light", comparer); var useRegistration = args.Contains("registration", comparer); var useTumblebit = args.Contains("tumblebit", comparer); var useTor = !args.Contains("noTor", comparer); string registrationStoreDirectoryPath = args.GetValueOf("-storedir"); TumblerProtocolType tumblerProtocol; try { string tumblerProtocolString = args.GetValueOf("-tumblerProtocol"); if (!isRegTest && (tumblerProtocolString != null || !useTor)) { Console.WriteLine("Options -TumblerProtocol and -NoTor can only be used in combination with -RegTest switch."); return; } if (tumblerProtocolString != null) { tumblerProtocol = Enum.Parse <TumblerProtocolType>(tumblerProtocolString, true); } else { tumblerProtocol = TumblerProtocolType.Tcp; } if (useTor && tumblerProtocol == TumblerProtocolType.Http) { Console.WriteLine("TumblerProtocol can only be changed to Http when Tor is disabled. Please use -NoTor switch to disable Tor."); return; } } catch { Console.WriteLine($"Incorrect tumbling prococol specified; the valid values are {TumblerProtocolType.Tcp} and {TumblerProtocolType.Http}"); return; } var agent = "Breeze"; NodeSettings nodeSettings; if (isStratis) { //if (NodeSettings.PrintHelp(args, Network.StratisMain)) // return; Network network; if (isRegTest) { network = Network.StratisRegTest; } else if (isTestNet) { args = args.Append("-addnode=51.141.28.47").ToArray(); // TODO: fix this temp hack network = Network.StratisTest; } else { network = Network.StratisMain; } nodeSettings = new NodeSettings(network, ProtocolVersion.ALT_PROTOCOL_VERSION, agent, args: args, loadConfiguration: false); } else { nodeSettings = new NodeSettings(agent: agent, args: args, loadConfiguration: false); } IFullNodeBuilder fullNodeBuilder = null; if (isLight) { fullNodeBuilder = new FullNodeBuilder() .UseNodeSettings(nodeSettings) .UseLightWallet() .UseWatchOnlyWallet() .UseBlockNotification() .UseTransactionNotification() .UseApi(); } else { fullNodeBuilder = new FullNodeBuilder() .UseNodeSettings(nodeSettings); if (isStratis) { fullNodeBuilder.UsePosConsensus(); } else { fullNodeBuilder.UsePowConsensus(); } fullNodeBuilder.UseBlockStore() .UseMempool() .UseBlockNotification() .UseTransactionNotification() .UseWallet() .UseWatchOnlyWallet(); if (isStratis) { fullNodeBuilder.AddPowPosMining(); } else { fullNodeBuilder.AddMining(); } fullNodeBuilder.AddRPC() .UseApi(); } if (useRegistration) { //fullNodeBuilder.UseInterNodeCommunication(); fullNodeBuilder.UseRegistration(); } // Need this to happen for both TB and non-TB daemon string dataDir = nodeSettings.DataDir; if (string.IsNullOrEmpty(dataDir)) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { dataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StratisNode"); } else { dataDir = Path.Combine(Environment.GetEnvironmentVariable("HOME"), ".stratisnode"); } } string logDir = Path.Combine(dataDir, nodeSettings.Network.RootFolderName, nodeSettings.Network.Name, "Logs"); Logs.Configure(new FuncLoggerFactory(i => new DualLogger(i, (a, b) => true, false)), logDir); // Start NTumbleBit logging to the console SetupTumbleBitConsoleLogs(nodeSettings); // Currently TumbleBit is bitcoin only if (useTumblebit) { if (string.IsNullOrEmpty(registrationStoreDirectoryPath)) { string networkName; if (isRegTest) { networkName = "StratisRegTest"; } else if (isTestNet) { networkName = "StratisTest"; } else { networkName = "StratisMain"; } registrationStoreDirectoryPath = Path.Combine(dataDir, "stratis", networkName, "registrationHistory.json"); } // Those settings are not in NodeSettings yet, so get it directly from the args ConfigurationOptionWrapper <object> registrationStoreDirectory = new ConfigurationOptionWrapper <object>("RegistrationStoreDirectory", registrationStoreDirectoryPath); ConfigurationOptionWrapper <object> torOption = new ConfigurationOptionWrapper <object>("Tor", useTor); ConfigurationOptionWrapper <object> tumblerProtocolOption = new ConfigurationOptionWrapper <object>("TumblerProtocol", tumblerProtocol); ConfigurationOptionWrapper <object> useDummyAddressOption = new ConfigurationOptionWrapper <object>("UseDummyAddress", true); ConfigurationOptionWrapper <object>[] tumblebitConfigurationOptions = { registrationStoreDirectory, torOption, tumblerProtocolOption, useDummyAddressOption }; // We no longer pass the URI in via the command line, the registration feature selects a random one fullNodeBuilder.UseTumbleBit(tumblebitConfigurationOptions); } IFullNode node = fullNodeBuilder.Build(); // Add logging to NLog SetupTumbleBitNLogs(nodeSettings); // Start Full Node - this will also start the API. await node.RunAsync(); } catch (Exception ex) { Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.Message); } }