Example #1
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);
        }
    }
Example #2
0
    private FeeRate GetMedian(TimeSpan timeFrame)
    {
        var from     = DateTimeOffset.UtcNow - timeFrame;
        var feeRates = CoinJoinFeeRateStats
                       .Where(x => x.DateTimeOffset >= from)
                       .OrderByDescending(x => x.FeeRate.SatoshiPerByte)
                       .ToArray();

        // If the median is even, then it's the average of the middle two numbers.
        FeeRate med = feeRates.Length % 2 == 0
                        ? new FeeRate((feeRates[feeRates.Length / 2].FeeRate.SatoshiPerByte + feeRates[(feeRates.Length / 2) - 1].FeeRate.SatoshiPerByte) / 2)
                        : feeRates[feeRates.Length / 2].FeeRate;

        return(med);
    }
Example #3
0
    private FeeRate GetAverage(TimeSpan timeFrame)
    {
        var from = DateTimeOffset.UtcNow - timeFrame;

        return(new FeeRate(CoinJoinFeeRateStats.Where(x => x.DateTimeOffset >= from).Average(x => x.FeeRate.SatoshiPerByte)));
    }