예제 #1
0
    private void FeeRateStatStore_NewStat(object?sender, CoinJoinFeeRateStat feeRateStat)
    {
        var filePath = Parameters.CoinJoinFeeRateStatStoreFilePath;

        try
        {
            File.AppendAllLines(filePath, new[] { feeRateStat.ToLine() });
        }
        catch (Exception ex)
        {
            Logger.LogError($"Could not write file {filePath}.", ex);
        }
    }
예제 #2
0
    public static CoinJoinFeeRateStatStore LoadFromFile(string filePath, WabiSabiConfig config, IRPCClient rpc)
    {
        var from = DateTimeOffset.UtcNow - MaximumTimeToStore;

        var stats = !File.Exists(filePath)
                        ? Enumerable.Empty <CoinJoinFeeRateStat>()
                        : File.ReadAllLines(filePath)
                    .Select(x => CoinJoinFeeRateStat.FromLine(x))
                    .Where(x => x.DateTimeOffset >= from);

        var store = new CoinJoinFeeRateStatStore(config, rpc, stats);

        return(store);
    }
예제 #3
0
    private void Add(CoinJoinFeeRateStat feeRateStat)
    {
        CoinJoinFeeRateStats.Add(feeRateStat);

        DefaultAverages = TimeFrames.Select(t => new CoinJoinFeeRateAverage(t, GetAverage(t))).ToArray();

        // Prune old items.
        DateTimeOffset removeBefore = DateTimeOffset.UtcNow - MaximumTimeToStore;

        while (CoinJoinFeeRateStats.Any() && CoinJoinFeeRateStats[0].DateTimeOffset < removeBefore)
        {
            CoinJoinFeeRateStats.RemoveAt(0);
        }
    }