2
0
mirror of synced 2025-02-21 04:28:13 +00:00

152 lines
5.3 KiB
C#
Raw Normal View History

2024-01-26 17:29:57 -05:00
using CodexContractsPlugin;
using CodexContractsPlugin.Marketplace;
2024-04-13 08:57:46 +02:00
using NethereumWorkflow.BlockUtils;
using Newtonsoft.Json;
2024-03-27 15:39:42 +01:00
using Utils;
2024-01-26 17:29:57 -05:00
namespace TestNetRewarder
{
public class ChainState
{
private readonly HistoricState historicState;
2024-04-13 08:57:46 +02:00
private readonly string[] colorIcons = new[]
{
"🔴",
"🟠",
"🟡",
"🟢",
"🔵",
"🟣",
"🟤",
"⚫",
"⚪",
"🟥",
"🟧",
"🟨",
"🟩",
"🟦",
"🟪",
"🟫",
"⬛",
"⬜",
"🔶",
"🔷"
};
2024-01-26 17:29:57 -05:00
2024-03-27 15:39:42 +01:00
public ChainState(HistoricState historicState, ICodexContracts contracts, BlockInterval blockRange)
2024-01-26 17:29:57 -05:00
{
this.historicState = historicState;
2024-02-19 15:41:48 +01:00
NewRequests = contracts.GetStorageRequests(blockRange);
historicState.CleanUpOldRequests();
2024-01-26 17:29:57 -05:00
historicState.ProcessNewRequests(NewRequests);
historicState.UpdateStorageRequests(contracts);
StartedRequests = historicState.StorageRequests.Where(r => r.RecentlyStarted).ToArray();
2024-04-07 14:04:31 +02:00
FinishedRequests = historicState.StorageRequests.Where(r => r.RecentlyFinished).ToArray();
2024-02-19 15:41:48 +01:00
RequestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange);
RequestCancelledEvents = contracts.GetRequestCancelledEvents(blockRange);
SlotFilledEvents = contracts.GetSlotFilledEvents(blockRange);
SlotFreedEvents = contracts.GetSlotFreedEvents(blockRange);
2024-01-26 17:29:57 -05:00
}
public Request[] NewRequests { get; }
public StorageRequest[] AllRequests => historicState.StorageRequests;
public StorageRequest[] StartedRequests { get; private set; }
public StorageRequest[] FinishedRequests { get; private set; }
public RequestFulfilledEventDTO[] RequestFulfilledEvents { get; }
public RequestCancelledEventDTO[] RequestCancelledEvents { get; }
public SlotFilledEventDTO[] SlotFilledEvents { get; }
public SlotFreedEventDTO[] SlotFreedEvents { get; }
public string[] GenerateOverview()
{
var entries = new List<StringBlockNumberPair>();
entries.AddRange(NewRequests.Select(ToPair));
entries.AddRange(RequestFulfilledEvents.Select(ToPair));
entries.AddRange(RequestCancelledEvents.Select(ToPair));
entries.AddRange(SlotFilledEvents.Select(ToPair));
entries.AddRange(SlotFreedEvents.Select(ToPair));
2024-04-13 11:15:39 +02:00
entries.AddRange(FinishedRequests.Select(ToPair));
entries.Sort(new StringUtcComparer());
return entries.Select(ToLine).ToArray();
}
private StringBlockNumberPair ToPair(Request r)
{
2024-04-13 08:57:46 +02:00
return new StringBlockNumberPair("NewRequest", JsonConvert.SerializeObject(r), r.Block, r.RequestId);
}
2024-04-13 11:15:39 +02:00
public StringBlockNumberPair ToPair(StorageRequest r)
{
return new StringBlockNumberPair("FinishedRequest", JsonConvert.SerializeObject(r), r.Request.Block, r.Request.RequestId);
}
private StringBlockNumberPair ToPair(RequestFulfilledEventDTO r)
{
2024-04-13 08:57:46 +02:00
return new StringBlockNumberPair("Fulfilled", JsonConvert.SerializeObject(r), r.Block, r.RequestId);
}
private StringBlockNumberPair ToPair(RequestCancelledEventDTO r)
{
2024-04-13 08:57:46 +02:00
return new StringBlockNumberPair("Cancelled", JsonConvert.SerializeObject(r), r.Block, r.RequestId);
}
private StringBlockNumberPair ToPair(SlotFilledEventDTO r)
{
2024-04-13 08:57:46 +02:00
return new StringBlockNumberPair("SlotFilled", JsonConvert.SerializeObject(r), r.Block, r.RequestId);
}
private StringBlockNumberPair ToPair(SlotFreedEventDTO r)
{
2024-04-13 08:57:46 +02:00
return new StringBlockNumberPair("SlotFreed", JsonConvert.SerializeObject(r), r.Block, r.RequestId);
}
private string ToLine(StringBlockNumberPair pair)
{
2024-04-13 08:57:46 +02:00
var nl = Environment.NewLine;
var colorIcon = GetColorIcon(pair.RequestId);
return $"{colorIcon} {pair.Block} ({pair.Name}){nl}" +
$"```json{nl}" +
$"{pair.Str}{nl}" +
$"```";
}
private string GetColorIcon(byte[] requestId)
{
var index = requestId[0] % colorIcons.Length;
return colorIcons[index];
}
public class StringBlockNumberPair
{
2024-04-13 08:57:46 +02:00
public StringBlockNumberPair(string name, string str, BlockTimeEntry block, byte[] requestId)
{
Name = name;
Str = str;
2024-04-13 08:57:46 +02:00
Block = block;
RequestId = requestId;
}
public string Name { get; }
public string Str { get; }
2024-04-13 08:57:46 +02:00
public BlockTimeEntry Block { get; }
public byte[] RequestId { get; }
}
public class StringUtcComparer : IComparer<StringBlockNumberPair>
{
public int Compare(StringBlockNumberPair? x, StringBlockNumberPair? y)
{
if (x == null && y == null) return 0;
if (x == null) return 1;
if (y == null) return -1;
2024-04-13 08:57:46 +02:00
return x.Block.BlockNumber.CompareTo(y.Block.BlockNumber);
}
}
2024-01-26 17:29:57 -05:00
}
}