2024-08-21 13:03:20 +00:00
|
|
|
|
using CodexContractsPlugin;
|
|
|
|
|
using CodexContractsPlugin.ChainMonitor;
|
|
|
|
|
using Nethereum.Model;
|
|
|
|
|
using TestNetRewarder;
|
2024-08-21 11:59:54 +00:00
|
|
|
|
using Utils;
|
|
|
|
|
|
|
|
|
|
namespace MarketInsights
|
|
|
|
|
{
|
2024-08-21 13:03:20 +00:00
|
|
|
|
public class AverageHistory : ITimeSegmentHandler
|
2024-08-21 11:59:54 +00:00
|
|
|
|
{
|
2024-08-21 13:03:20 +00:00
|
|
|
|
private readonly List<MarketTimeSegment> contributions = new List<MarketTimeSegment>();
|
|
|
|
|
private readonly ChainStateChangeHandlerMux mux = new ChainStateChangeHandlerMux();
|
|
|
|
|
private readonly AppState appState;
|
|
|
|
|
private readonly int maxContributions;
|
|
|
|
|
private readonly ChainState chainState;
|
2024-08-21 11:59:54 +00:00
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
public AverageHistory(AppState appState, ICodexContracts contracts, int maxContributions)
|
2024-08-21 11:59:54 +00:00
|
|
|
|
{
|
2024-08-21 13:03:20 +00:00
|
|
|
|
this.appState = appState;
|
|
|
|
|
this.maxContributions = maxContributions;
|
|
|
|
|
chainState = new ChainState(appState.Log, contracts, mux, appState.Config.HistoryStartUtc);
|
2024-08-21 11:59:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
public MarketTimeSegment[] Segments { get; private set; } = Array.Empty<MarketTimeSegment>();
|
2024-08-21 11:59:54 +00:00
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
public Task OnNewSegment(TimeRange timeRange)
|
2024-08-21 11:59:54 +00:00
|
|
|
|
{
|
2024-08-21 13:03:20 +00:00
|
|
|
|
var contribution = BuildContribution(timeRange);
|
|
|
|
|
contributions.Add(contribution);
|
2024-08-21 11:59:54 +00:00
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
while (contributions.Count > maxContributions)
|
|
|
|
|
{
|
|
|
|
|
contributions.RemoveAt(0);
|
|
|
|
|
}
|
2024-08-21 11:59:54 +00:00
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
Segments = contributions.ToArray();
|
2024-08-21 11:59:54 +00:00
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
return Task.CompletedTask;
|
2024-08-21 11:59:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-08-21 13:03:20 +00:00
|
|
|
|
private MarketTimeSegment BuildContribution(TimeRange timeRange)
|
2024-08-21 11:59:54 +00:00
|
|
|
|
{
|
2024-08-21 13:03:20 +00:00
|
|
|
|
var builder = new ContributionBuilder(timeRange);
|
|
|
|
|
mux.Handlers.Add(builder);
|
|
|
|
|
chainState.Update(timeRange.To);
|
|
|
|
|
mux.Handlers.Remove(builder);
|
|
|
|
|
return builder.GetSegment();
|
2024-08-21 11:59:54 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|