public TransactionStoreMock([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null)
        {
            // Make sure starts with clear state.
            var filePath = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName, "Transactions.dat");

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
        }
Пример #2
0
 public static async Task <CoreNode> CreateAsync([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null, string additionalFolder = null)
 => await CoreNode.CreateAsync(new CoreNodeParams(
                                   Network.RegTest,
                                   Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName, additionalFolder ?? ""),
                                   tryRestart : true,
                                   tryDeleteDataDir : true,
                                   EndPointStrategy.Random,
                                   EndPointStrategy.Random,
                                   txIndex : 1,
                                   prune : 0));
Пример #3
0
        private string PrepareWorkDir([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null)
        {
            string dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName);

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            return(dir);
        }
Пример #4
0
        private void PrepareTestEnv(out string dir, out Network network, out string mempoolFile, out string txFile, out SmartTransaction uTx1, out SmartTransaction uTx2, out SmartTransaction uTx3, out SmartTransaction cTx1, out SmartTransaction cTx2, out SmartTransaction cTx3, [CallerFilePath] string callerFilePath = "", [CallerMemberName] string callerMemberName = "")
        {
            dir         = PrepareWorkDir(EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName);
            network     = Network.TestNet;
            mempoolFile = Path.Combine(dir, "Mempool", "Transactions.dat");
            txFile      = Path.Combine(dir, "ConfirmedTransactions", Constants.ConfirmedTransactionsVersion, "Transactions.dat");
            IoHelpers.EnsureContainingDirectoryExists(mempoolFile);
            IoHelpers.EnsureContainingDirectoryExists(txFile);

            uTx1 = SmartTransaction.FromLine("34fc45781f2ac8e541b6045c2858c755dd2ab85e0ea7b5778b4d0cc191468571:01000000000102d5ae6e2612cdf8932d0e4f684d8ad9afdbca0afffba5c3dc0bf85f2b661bfb670000000000ffffffffbfd117908d5ba536624630519aaea7419605efa33bf1cb50c5ff7441f7b27a5b0100000000ffffffff01c6473d0000000000160014f9d25fe27812c3d35ad3819fcab8b95098effe15024730440220165730f8275434a5484b6aba3c71338a109b7cfd7380fdc18c6791a6afba9dee0220633b3b65313e57bdbd491d17232e6702912869d81461b4c939600d1cc99c06ec012102667c9fb272660cd6c06f853314b53c41da851f86024f9475ff15ea0636f564130247304402205e81562139231274cd7f705772c2810e34b7a291bd9882e6c567553babca9c7402206554ebd60d62a605a27bd4bf6482a533dd8dd35b12dc9d6abfa21738fdf7b57a012102b25dec5439a1aad8d901953a90d16252514a55f547fe2b85bc12e3f72cff1c4b00000000:Mempool::0::1570464578:False", network);
            uTx2 = SmartTransaction.FromLine("b5cd5b4431891d913a6fbc0e946798b6f730c8b97f95a5c730c24189bed24ce7:01000000010113145dd6264da43406a0819b6e2d791ec9281322f33944ef034c3307f38c330000000000ffffffff0220a10700000000001600149af662cf9564700b93bd46fac8b51f64f2adad2343a5070000000000160014f1938902267eac1ae527128fe7773657d2b757b900000000:Mempool::0::1555590391:False", network);
            uTx3 = SmartTransaction.FromLine("89e6788e63c5966fae0ccf6e85665ec62754f982b9593d7e3c4b78ac0e93208d:01000000000101f3e7c1bce1e0566800d8e6cae8f0d771a2ace8939cc6be7c8c21b05e590969530000000000ffffffff01cc2b0f0000000000160014e0ff6f42032bbfda63fabe0832b4ccb7be7350ae024730440220791e34413957c0f8348718d5d767f660657faf241801e74b5b81ac69e8912f60022041f3e9aeca137044565e1a81b6bcca74a88166436e5fa5f0e390448ac18fa5900121034dc07f3c26734591eb97f7e112888c3198d62bc3718106cba5a5688c62485b4500000000:Mempool::0::1555590448:False", network);
            cTx1 = SmartTransaction.FromLine("95374c1037eb5268c8ae6681eb26756459d19754d41b660c251e6f62df586d29:0100000001357852bdf4e75a4ee2afe213463ff8afbed977ea5459a310777322504254ffdf0100000000ffffffff0240420f0000000000160014dc992214c430bf306fe446e9bac1dfc4ad4d3ee368cc100300000000160014005340d370675c47f7a04eb186200dd98c3d463c00000000:1580176:0000000034522ee38f074e1f4330b9c2f20c6a2b9a96de6f474a5f5f8fa76e2b:307::1569940579:False", network);
            cTx2 = SmartTransaction.FromLine("af73b4c173da1bd24063e35a755babfa40728a282d6f56eeef4ce5a81ab26ee7:01000000013c81d2dcb25ad36781d1a6f9faa68f4a8b927f40e0b4e4b6184bb4761ebfc0dd0000000000ffffffff016f052e0000000000160014ae6e31ee9dae103f50979f761c2f9b44661da24f00000000:1580176:0000000034522ee38f074e1f4330b9c2f20c6a2b9a96de6f474a5f5f8fa76e2b:346::1569940633:False", network);
            cTx3 = SmartTransaction.FromLine("ebcef423f6b03ef89dce076b53e624c966381f76e5d8b2b5034d3615ae950b2f:01000000000101296d58df626f1e250c661bd45497d159647526eb8166aec86852eb37104c37950100000000ffffffff01facb100300000000160014d5461e0e7077d62c4cf9c18a4e9ba10efd4930340247304402206d2c5b2b182474531ed07587e44ea22b136a37d5ddbd35aa2d984da7be5f7e5202202abd8435d9856e3d0892dbd54e9c05f2a20d9d5f333247314b925947a480a2eb01210321dd0574c773a35d4a7ebf17bf8f974b5665c0183598f1db53153e74c876768500000000:1580673:0000000017b09a77b815f3df513ff698d1f3b0e8c5e16ac0d6558e2d831f3bf9:130::1570462988:False", network);
        }
Пример #5
0
        public static async Task <CoreNode> CreateAsync([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null, string additionalFolder = null, MempoolService mempoolService = null)
        {
            var network = Network.RegTest;

            return(await CoreNode.CreateAsync(
                       new CoreNodeParams(
                           network,
                           mempoolService ?? new MempoolService(),
                           Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName, additionalFolder ?? ""),
                           tryRestart : true,
                           tryDeleteDataDir : true,
                           EndPointStrategy.Random,
                           EndPointStrategy.Random,
                           txIndex : 1,
                           prune : 0,
                           userAgent : $"/WasabiClient:{Constants.ClientVersion.ToString()}/"),
                       CancellationToken.None));
        }
Пример #6
0
        public static async Task <CoreNode> CreateAsync(HostedServices hostedServices, [CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null, string additionalFolder = null, MempoolService mempoolService = null)
        {
            var network = Network.RegTest;

            return(await CoreNode.CreateAsync(
                       new CoreNodeParams(
                           network,
                           mempoolService ?? new MempoolService(),
                           hostedServices,
                           Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName, additionalFolder ?? ""),
                           tryRestart : true,
                           tryDeleteDataDir : true,
                           EndPointStrategy.Random,
                           EndPointStrategy.Random,
                           txIndex : 1,
                           prune : 0,
                           mempoolReplacement : "fee,optin",
                           userAgent : $"/WasabiClient:{Constants.ClientVersion}/",
                           fallbackFee : Money.Coins(0.0002m),             // https://github.com/bitcoin/bitcoin/pull/16524
                           new MemoryCache(new MemoryCacheOptions())),
                       CancellationToken.None));
        }
Пример #7
0
 public static string GetWorkDir([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null)
 {
     return(Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName));
 }
Пример #8
0
        public static void Log(LogLevel level, string message, int additionalEntrySeparators = 0, bool additionalEntrySeparatorsLogFileOnlyMode = true, [CallerFilePath] string callerFilePath = "", [CallerLineNumber] int callerLineNumber = -1)
        {
            try
            {
                if (Modes.Count == 0 || !IsOn())
                {
                    return;
                }

                if (level < MinimumLevel)
                {
                    return;
                }

                message = Guard.Correct(message);
                var category = string.IsNullOrWhiteSpace(callerFilePath) ? "" : $"{EnvironmentHelpers.ExtractFileName(callerFilePath)} ({callerLineNumber})";

                var messageBuilder = new StringBuilder();
                messageBuilder.Append($"{DateTime.UtcNow.ToLocalTime():yyyy-MM-dd HH:mm:ss} {level.ToString().ToUpperInvariant()}\t");

                if (message.Length == 0)
                {
                    if (category.Length == 0)                     // If both empty. It probably never happens though.
                    {
                        messageBuilder.Append($"{EntrySeparator}");
                    }
                    else                     // If only the message is empty.
                    {
                        messageBuilder.Append($"{category}{EntrySeparator}");
                    }
                }
                else
                {
                    if (category.Length == 0)                     // If only the category is empty.
                    {
                        messageBuilder.Append($"{message}{EntrySeparator}");
                    }
                    else                     // If none of them empty.
                    {
                        messageBuilder.Append($"{category}\t{message}{EntrySeparator}");
                    }
                }

                var finalMessage = messageBuilder.ToString();

                for (int i = 0; i < additionalEntrySeparators; i++)
                {
                    messageBuilder.Insert(0, EntrySeparator);
                }

                var finalFileMessage = messageBuilder.ToString();
                if (!additionalEntrySeparatorsLogFileOnlyMode)
                {
                    finalMessage = finalFileMessage;
                }

                lock (Lock)
                {
                    if (Modes.Contains(LogMode.Console))
                    {
                        lock (Console.Out)
                        {
                            var color = Console.ForegroundColor;
                            switch (level)
                            {
                            case LogLevel.Warning:
                                color = ConsoleColor.Yellow;
                                break;

                            case LogLevel.Error:
                            case LogLevel.Critical:
                                color = ConsoleColor.Red;
                                break;

                            default:
                                break;                                         // Keep original color.
                            }

                            Console.ForegroundColor = color;
                            Console.Write(finalMessage);
                            Console.ResetColor();
                        }
                    }

                    if (Modes.Contains(LogMode.Console))
                    {
                        Debug.Write(finalMessage);
                    }

                    if (!Modes.Contains(LogMode.File))
                    {
                        return;
                    }

                    IoHelpers.EnsureContainingDirectoryExists(FilePath);

                    if (File.Exists(FilePath))
                    {
                        var sizeInBytes = new FileInfo(FilePath).Length;
                        if (sizeInBytes > 1000 * MaximumLogFileSize)
                        {
                            File.Delete(FilePath);
                        }
                    }

                    File.AppendAllText(FilePath, finalFileMessage);
                }
            }
            catch (Exception ex)
            {
                if (Interlocked.Increment(ref LoggingFailedCount) == 1)                 // If it only failed the first time, try log the failure.
                {
                    LogDebug($"Logging failed: {ex}");
                }
                // If logging the failure is successful then clear the failure counter.
                // If it's not the first time the logging failed, then we do not try to log logging failure, so clear the failure counter.
                Interlocked.Exchange(ref LoggingFailedCount, 0);
            }
        }
        public async Task InitializeAsync(Network network, [CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null)
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName);

            await InitializeAsync(dir, network, $"{nameof(TransactionStoreMock)}.{nameof(TransactionStoreMock.InitializeAsync)}");
        }
Пример #10
0
 public static string GetWorkDir([CallerFilePath] string callerFilePath = "", [CallerMemberName] string callerMemberName = "")
 {
     return(Path.Combine(DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName));
 }
Пример #11
0
    public void EndPointParserTests(string path)
    {
        var sourceFileName = EnvironmentHelpers.ExtractFileName(path);

        Assert.Equal("Program", sourceFileName);
    }
Пример #12
0
 public static async Task <CoreNode> CreateAsync([CallerFilePath] string callerFilePath = null, [CallerMemberName] string callerMemberName = null, string additionalFolder = null)
 => await CoreNode.CreateAsync(Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.ExtractFileName(callerFilePath), callerMemberName, additionalFolder ?? ""));