예제 #1
0
#pragma warning disable IDE1006 // Naming Styles

        public static async Task Main(string[] args)
#pragma warning restore IDE1006 // Naming Styles
        {
            try
            {
                Logger.InitializeDefaults(Path.Combine(Global.DataDir, "Logs.txt"));
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
                TaskScheduler.UnobservedTaskException      += TaskScheduler_UnobservedTaskException;
                var configFilePath = Path.Combine(Global.DataDir, "Config.json");
                var config         = new Config(configFilePath);
                await config.LoadOrCreateDefaultFileAsync();

                Logger.LogInfo <Config>("Config is successfully initialized.");

                var roundConfigFilePath = Path.Combine(Global.DataDir, "CcjRoundConfig.json");
                var roundConfig         = new CcjRoundConfig(roundConfigFilePath);
                await roundConfig.LoadOrCreateDefaultFileAsync();

                Logger.LogInfo <CcjRoundConfig>("RoundConfig is successfully initialized.");

                var rpc = new RPCClient(
                    credentials: new RPCCredentialString
                {
                    UserPassword = new NetworkCredential(config.BitcoinRpcUser, config.BitcoinRpcPassword)
                },
                    network: config.Network);

                await Global.InitializeAsync(config, roundConfig, rpc);

                try
                {
                    Directory.CreateDirectory(UnversionedWebBuilder.UnversionedFolder);
                    UnversionedWebBuilder.CreateDownloadTextWithVersionHtml();

                    string[] allLines = File.ReadAllLines(Global.Coordinator.CoinJoinsFilePath);
                    foreach (string line in allLines)
                    {
                        try
                        {
                            var         txHash = new uint256(line);
                            Transaction tx     = Global.RpcClient.GetRawTransaction(txHash);

                            var volume = tx.GetIndistinguishableOutputs(includeSingle: false).Sum(x => x.count * x.value);
                            TotalVolume += volume;
                        }
                        catch (Exception ex)
                        {
                            Logger.LogWarning(ex, nameof(Program));
                        }
                    }

                    UnversionedWebBuilder.UpdateMixedTextHtml(TotalVolume);
                    Last5CoinJoins = allLines.TakeLast(5).Reverse().ToList();
                    UnversionedWebBuilder.UpdateCoinJoinsHtml(Last5CoinJoins);
                    Global.Coordinator.CoinJoinBroadcasted += Coordinator_CoinJoinBroadcasted;
                }
                catch (Exception ex)
                {
                    Logger.LogWarning(ex, nameof(Program));
                }

                var endPoint = "http://localhost:37127/";

                using (var host = WebHost.CreateDefaultBuilder(args)
                                  .UseStartup <Startup>()
                                  .UseUrls(endPoint)
                                  .Build())
                {
                    await host.RunAsync();
                }
            }
            catch (Exception ex)
            {
                Logger.LogCritical <Program>(ex);
            }
        }