mirror of
https://github.com/NecroticBamboo/QRBee.git
synced 2025-12-21 12:11:53 +00:00
53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace QRBee.Load.Generator;
|
|
|
|
internal class UnconfirmedTransactions
|
|
{
|
|
private readonly ILogger<UnconfirmedTransactions> _logger;
|
|
|
|
private double _unconfirmedProbability;
|
|
private TimeSpan _unconfirmedDuration;
|
|
private DateTime _anomalyEnd = DateTime.MinValue;
|
|
private ThreadSafeRandom _rng = new();
|
|
|
|
public UnconfirmedTransactions(IOptions<GeneratorSettings> settings, ILogger<UnconfirmedTransactions> logger)
|
|
{
|
|
_logger = logger;
|
|
_unconfirmedProbability = settings.Value.UnconfirmedTransaction.Probability;
|
|
_unconfirmedDuration = TimeSpan.Zero;
|
|
|
|
if (_unconfirmedProbability > 0.0)
|
|
{
|
|
if (settings.Value.UnconfirmedTransaction.Parameters.TryGetValue("Duration", out var duration)
|
|
|| TimeSpan.TryParse(duration, out _unconfirmedDuration))
|
|
{
|
|
_logger.LogInformation($"Unconfirmed transactions configured. Probablility={_unconfirmedProbability}");
|
|
}
|
|
else
|
|
{
|
|
_unconfirmedProbability = 0.0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool ShouldConfirm()
|
|
{
|
|
if ( DateTime.UtcNow < _anomalyEnd )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var dice = _rng.NextDouble();
|
|
if (dice < _unconfirmedProbability)
|
|
{
|
|
_anomalyEnd = DateTime.UtcNow + _unconfirmedDuration;
|
|
_logger.LogWarning($"Anomaly: Unconfirmed transaction. Dice={dice} Ends=\"{_anomalyEnd.ToLocalTime():s}\"");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|