2
0
mirror of synced 2025-02-23 05:28:17 +00:00

Removes marketaverages from discordbot and rewarderbot

This commit is contained in:
Ben 2024-08-21 15:08:18 +02:00
parent 3d347a936d
commit daad6468c6
No known key found for this signature in database
GPG Key ID: 0F16E812E736C24B
9 changed files with 4 additions and 260 deletions

View File

@ -3,12 +3,11 @@
public class GiveRewardsCommand
{
public RewardUsersCommand[] Rewards { get; set; } = Array.Empty<RewardUsersCommand>();
public MarketAverage[] Averages { get; set; } = Array.Empty<MarketAverage>();
public string[] EventsOverview { get; set; } = Array.Empty<string>();
public bool HasAny()
{
return Rewards.Any() || Averages.Any() || EventsOverview.Any();
return Rewards.Any() || EventsOverview.Any();
}
}
@ -17,15 +16,4 @@
public ulong RewardId { get; set; }
public string[] UserAddresses { get; set; } = Array.Empty<string>();
}
public class MarketAverage
{
public int NumberOfFinished { get; set; }
public int TimeRangeSeconds { get; set; }
public float Price { get; set; }
public float Size { get; set; }
public float Duration { get; set; }
public float Collateral { get; set; }
public float ProofProbability { get; set; }
}
}

View File

@ -24,7 +24,6 @@ namespace CodexTests.UtilityTests
private readonly List<ulong> rewardsSeen = new List<ulong>();
private readonly TimeSpan rewarderInterval = TimeSpan.FromMinutes(1);
private readonly List<string> receivedEvents = new List<string>();
private readonly List<MarketAverage> receivedAverages = new List<MarketAverage>();
[Test]
[DontDownloadLogs]
@ -56,8 +55,6 @@ namespace CodexTests.UtilityTests
AssertEventOccurance("Transit: New -> Started", 1);
AssertEventOccurance("Transit: Started -> Finished", 1);
AssertMarketAverage();
foreach (var r in repo.Rewards)
{
var seen = rewardsSeen.Any(s => r.RoleId == s);
@ -80,28 +77,9 @@ namespace CodexTests.UtilityTests
$"Event '{msg}' did not occure correct number of times.");
}
private void AssertMarketAverage()
{
Assert.That(receivedAverages.Count, Is.EqualTo(1));
var a = receivedAverages.Single();
Assert.That(a.NumberOfFinished, Is.EqualTo(1));
Assert.That(a.TimeRangeSeconds, Is.EqualTo(5760));
Assert.That(a.Price, Is.EqualTo(2.0f).Within(0.1f));
Assert.That(a.Size, Is.EqualTo(GetMinFileSize().SizeInBytes).Within(1.0f));
Assert.That(a.Duration, Is.EqualTo(GetMinRequiredRequestDuration().TotalSeconds).Within(1.0f));
Assert.That(a.Collateral, Is.EqualTo(10.0f).Within(0.1f));
Assert.That(a.ProofProbability, Is.EqualTo(5.0f).Within(0.1f));
}
private void OnCommand(string timestamp, GiveRewardsCommand call)
{
Log($"<API call {timestamp}>");
receivedAverages.AddRange(call.Averages);
foreach (var a in call.Averages)
{
Log("\tAverage: " + JsonConvert.SerializeObject(a));
}
receivedEvents.AddRange(call.EventsOverview);
foreach (var e in call.EventsOverview)
{

View File

@ -1,58 +0,0 @@
using BiblioTech.Options;
using DiscordRewards;
using System.Globalization;
using Utils;
namespace BiblioTech.Commands
{
public class MarketCommand : BaseCommand
{
public override string Name => "market";
public override string StartingMessage => RandomBusyMessage.Get();
public override string Description => "Fetch some insights about current market conditions.";
protected override async Task Invoke(CommandContext context)
{
await context.Followup(GetInsights());
}
private string[] GetInsights()
{
var result = Program.Averages.SelectMany(GetInsight).ToArray();
if (result.Length > 0)
{
result = new[]
{
"No market insights available."
};
}
return result;
}
private string[] GetInsight(MarketAverage avg)
{
var timeRange = TimeSpan.FromSeconds(avg.TimeRangeSeconds);
var headerLine = $"[Last {Time.FormatDuration(timeRange)}] ({avg.NumberOfFinished} Contracts finished)";
if (avg.NumberOfFinished == 0)
{
return new[] { headerLine };
}
return new[]
{
headerLine,
$"Price: {Format(avg.Price)}",
$"Size: {Format(avg.Size)}",
$"Duration: {Format(avg.Duration)}",
$"Collateral: {Format(avg.Collateral)}",
$"ProofProbability: {Format(avg.ProofProbability)}"
};
}
private string Format(float f)
{
return f.ToString("F3", CultureInfo.InvariantCulture);
}
}
}

View File

@ -18,7 +18,6 @@ namespace BiblioTech
public static AdminChecker AdminChecker { get; private set; } = null!;
public static IDiscordRoleDriver RoleDriver { get; set; } = null!;
public static ILog Log { get; private set; } = null!;
public static MarketAverage[] Averages { get; set; } = Array.Empty<MarketAverage>();
public static Task Main(string[] args)
{
@ -91,8 +90,7 @@ namespace BiblioTech
sprCommand,
associateCommand,
notifyCommand,
new AdminCommand(sprCommand, replacement),
new MarketCommand()
new AdminCommand(sprCommand, replacement)
);
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);

View File

@ -23,10 +23,6 @@ namespace BiblioTech.Rewards
{
try
{
if (cmd.Averages != null && cmd.Averages.Any())
{
Program.Averages = cmd.Averages;
}
await Program.RoleDriver.GiveRewards(cmd);
}
catch (Exception ex)

View File

@ -1,74 +0,0 @@
using CodexContractsPlugin.ChainMonitor;
using CodexContractsPlugin.Marketplace;
using DiscordRewards;
using System.Numerics;
namespace TestNetRewarder
{
public class MarketBuffer
{
private readonly List<RequestEvent> requestEvents = new List<RequestEvent>();
private readonly TimeSpan bufferSpan;
public MarketBuffer(TimeSpan bufferSpan)
{
this.bufferSpan = bufferSpan;
}
public void Add(RequestEvent requestEvent)
{
requestEvents.Add(requestEvent);
}
public void Update()
{
var now = DateTime.UtcNow;
requestEvents.RemoveAll(r => (now - r.Request.FinishedUtc) > bufferSpan);
}
public MarketAverage? GetAverage()
{
if (requestEvents.Count == 0) return null;
return new MarketAverage
{
NumberOfFinished = requestEvents.Count,
TimeRangeSeconds = (int)bufferSpan.TotalSeconds,
Price = Average(s => s.Request.Ask.Reward),
Duration = Average(s => s.Request.Ask.Duration),
Size = Average(s => GetTotalSize(s.Request.Ask)),
Collateral = Average(s => s.Request.Ask.Collateral),
ProofProbability = Average(s => s.Request.Ask.ProofProbability)
};
}
private float Average(Func<IChainStateRequest, BigInteger> getValue)
{
return Average(s =>
{
var value = getValue(s);
return (int)value;
});
}
private float Average(Func<IChainStateRequest, int> getValue)
{
var sum = 0.0f;
float count = requestEvents.Count;
foreach (var r in requestEvents)
{
sum += getValue(r.Request);
}
if (count < 1.0f) return 0.0f;
return sum / count;
}
private int GetTotalSize(Ask ask)
{
var nSlots = Convert.ToInt32(ask.Slots);
var slotSize = (int)ask.SlotSize;
return nSlots * slotSize;
}
}
}

View File

@ -1,79 +0,0 @@
using CodexContractsPlugin.ChainMonitor;
using DiscordRewards;
using GethPlugin;
using Logging;
using System.Numerics;
namespace TestNetRewarder
{
public class MarketTracker : IChainStateChangeHandler
{
private readonly List<MarketBuffer> buffers = new List<MarketBuffer>();
private readonly ILog log;
public MarketTracker(Configuration config, ILog log)
{
var intervals = GetInsightCounts(config);
foreach (var i in intervals)
{
buffers.Add(new MarketBuffer(
config.Interval * i
));
}
this.log = log;
}
public MarketAverage[] GetAverages()
{
foreach (var b in buffers) b.Update();
return buffers.Select(b => b.GetAverage()).Where(a => a != null).Cast<MarketAverage>().ToArray();
}
public void OnNewRequest(RequestEvent requestEvent)
{
}
public void OnRequestFinished(RequestEvent requestEvent)
{
foreach (var b in buffers) b.Add(requestEvent);
}
public void OnRequestFulfilled(RequestEvent requestEvent)
{
}
public void OnRequestCancelled(RequestEvent requestEvent)
{
}
public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex)
{
}
public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex)
{
}
private int[] GetInsightCounts(Configuration config)
{
try
{
var tokens = config.MarketInsights.Split(';').ToArray();
return tokens.Select(t => Convert.ToInt32(t)).ToArray();
}
catch (Exception ex)
{
log.Error($"Exception when parsing MarketInsights config parameters: {ex}");
}
return Array.Empty<int>();
}
public void OnRequestFailed(RequestEvent requestEvent)
{
throw new NotImplementedException("being removed");
}
}
}

View File

@ -9,7 +9,6 @@ namespace TestNetRewarder
{
private readonly RequestBuilder builder;
private readonly RewardChecker rewardChecker;
private readonly MarketTracker marketTracker;
private readonly EventsFormatter eventsFormatter;
private readonly ChainState chainState;
private readonly BotClient client;
@ -22,12 +21,10 @@ namespace TestNetRewarder
builder = new RequestBuilder();
rewardChecker = new RewardChecker(builder);
marketTracker = new MarketTracker(config, log);
eventsFormatter = new EventsFormatter();
var handler = new ChainStateChangeHandlerMux(
rewardChecker.Handler,
marketTracker,
eventsFormatter
);
@ -40,10 +37,9 @@ namespace TestNetRewarder
{
chainState.Update(timeRange.To);
var averages = marketTracker.GetAverages();
var events = eventsFormatter.GetEvents();
var request = builder.Build(averages, events);
var request = builder.Build(events);
if (request.HasAny())
{
await client.SendRewards(request);

View File

@ -19,7 +19,7 @@ namespace TestNetRewarder
}
}
public GiveRewardsCommand Build(MarketAverage[] marketAverages, string[] lines)
public GiveRewardsCommand Build(string[] lines)
{
var result = new GiveRewardsCommand
{
@ -28,7 +28,6 @@ namespace TestNetRewarder
RewardId = p.Key,
UserAddresses = p.Value.Select(v => v.Address).ToArray()
}).ToArray(),
Averages = marketAverages,
EventsOverview = lines
};