From 5313f8a7ac1b041038355e3a3b7190ba79c42299 Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 10 Oct 2024 11:15:07 +0200 Subject: [PATCH] Adds SlotReservationsFull event to chain state tracker --- .../ChainMonitor/ChainEvents.cs | 37 ++++++------ .../ChainMonitor/ChainState.cs | 9 +++ .../ChainStateChangeHandlerMux.cs | 5 ++ .../DoNothingChainEventHandler.cs | 4 ++ .../CodexContractsEvents.cs | 59 ++++++++----------- .../Marketplace/Customizations.cs | 6 ++ Tools/MarketInsights/ContributionBuilder.cs | 4 ++ Tools/TestNetRewarder/EventsFormatter.cs | 7 +++ Tools/TestNetRewarder/RewardCheck.cs | 4 ++ 9 files changed, 85 insertions(+), 50 deletions(-) diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs index aef3932..84dcd7c 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs @@ -1,4 +1,5 @@ using CodexContractsPlugin.Marketplace; +using System.Collections.Generic; using Utils; namespace CodexContractsPlugin.ChainMonitor @@ -12,7 +13,8 @@ namespace CodexContractsPlugin.ChainMonitor RequestCancelledEventDTO[] cancelled, RequestFailedEventDTO[] failed, SlotFilledEventDTO[] slotFilled, - SlotFreedEventDTO[] slotFreed + SlotFreedEventDTO[] slotFreed, + SlotReservationsFullEventDTO[] slotReservationsFull ) { BlockInterval = blockInterval; @@ -22,6 +24,9 @@ namespace CodexContractsPlugin.ChainMonitor Failed = failed; SlotFilled = slotFilled; SlotFreed = slotFreed; + SlotReservationsFull = slotReservationsFull; + + All = ConcatAll(requests, fulfilled, cancelled, failed, slotFilled, SlotFreed, SlotReservationsFull); } public BlockInterval BlockInterval { get; } @@ -31,21 +36,8 @@ namespace CodexContractsPlugin.ChainMonitor public RequestFailedEventDTO[] Failed { get; } public SlotFilledEventDTO[] SlotFilled { get; } public SlotFreedEventDTO[] SlotFreed { get; } - - public IHasBlock[] All - { - get - { - var all = new List(); - all.AddRange(Requests); - all.AddRange(Fulfilled); - all.AddRange(Cancelled); - all.AddRange(Failed); - all.AddRange(SlotFilled); - all.AddRange(SlotFreed); - return all.ToArray(); - } - } + public SlotReservationsFullEventDTO[] SlotReservationsFull { get; } + public IHasBlock[] All { get; } public static ChainEvents FromBlockInterval(ICodexContracts contracts, BlockInterval blockInterval) { @@ -66,8 +58,19 @@ namespace CodexContractsPlugin.ChainMonitor events.GetRequestCancelledEvents(), events.GetRequestFailedEvents(), events.GetSlotFilledEvents(), - events.GetSlotFreedEvents() + events.GetSlotFreedEvents(), + events.GetSlotReservationsFull() ); } + + private T[] ConcatAll(params T[][] arrays) + { + var result = Array.Empty(); + foreach (var array in arrays) + { + result = result.Concat(array).ToArray(); + } + return result; + } } } diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs index 5244e19..4377b22 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs @@ -16,6 +16,7 @@ namespace CodexContractsPlugin.ChainMonitor void OnRequestFailed(RequestEvent requestEvent); void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex); void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex); + void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex); } public class RequestEvent @@ -149,6 +150,14 @@ namespace CodexContractsPlugin.ChainMonitor handler.OnSlotFreed(new RequestEvent(@event.Block, r), @event.SlotIndex); } + private void ApplyEvent(SlotReservationsFullEventDTO @event) + { + var r = FindRequest(@event.RequestId); + if (r == null) return; + r.Log($"[{@event.Block.BlockNumber}] SlotReservationsFull (slotIndex:{@event.SlotIndex})"); + handler.OnSlotReservationsFull(new RequestEvent(@event.Block, r), @event.SlotIndex); + } + private void ApplyTimeImplicitEvents(ulong blockNumber, DateTime eventsUtc) { foreach (var r in requests) diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainStateChangeHandlerMux.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainStateChangeHandlerMux.cs index 36ae46e..597cb86 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainStateChangeHandlerMux.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainStateChangeHandlerMux.cs @@ -51,5 +51,10 @@ namespace CodexContractsPlugin.ChainMonitor { foreach (var handler in Handlers) handler.OnSlotFreed(requestEvent, slotIndex); } + + public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) + { + foreach (var handler in Handlers) handler.OnSlotReservationsFull(requestEvent, slotIndex); + } } } diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs index 812cfd6..1b478ae 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs @@ -32,5 +32,9 @@ namespace CodexContractsPlugin.ChainMonitor public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { } + + public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) + { + } } } diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs index 57a5371..ef30026 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs @@ -1,6 +1,7 @@ using CodexContractsPlugin.Marketplace; using GethPlugin; using Logging; +using Nethereum.Contracts; using Nethereum.Hex.HexTypes; using NethereumWorkflow.BlockUtils; using Utils; @@ -16,6 +17,7 @@ namespace CodexContractsPlugin RequestFailedEventDTO[] GetRequestFailedEvents(); SlotFilledEventDTO[] GetSlotFilledEvents(); SlotFreedEventDTO[] GetSlotFreedEvents(); + SlotReservationsFullEventDTO[] GetSlotReservationsFull(); } public class CodexContractsEvents : ICodexContractsEvents @@ -38,49 +40,32 @@ namespace CodexContractsPlugin { var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); var i = new ContractInteractions(log, gethNode); - return events - .Select(e => + return events.Select(e => { - var requestEvent = i.GetRequest(deployment.MarketplaceAddress, e.Event.RequestId); - var result = requestEvent.ReturnValue1; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - result.RequestId = e.Event.RequestId; - return result; - }) - .ToArray(); + var requestEvent = i.GetRequest(deployment.MarketplaceAddress, e.Event.RequestId); + var result = requestEvent.ReturnValue1; + result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); + result.RequestId = e.Event.RequestId; + return result; + }).ToArray(); } public RequestFulfilledEventDTO[] GetRequestFulfilledEvents() { var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); + return events.Select(SetBlockOnEvent).ToArray(); } public RequestCancelledEventDTO[] GetRequestCancelledEvents() { var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); + return events.Select(SetBlockOnEvent).ToArray(); } public RequestFailedEventDTO[] GetRequestFailedEvents() { var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); + return events.Select(SetBlockOnEvent).ToArray(); } public SlotFilledEventDTO[] GetSlotFilledEvents() @@ -98,12 +83,20 @@ namespace CodexContractsPlugin public SlotFreedEventDTO[] GetSlotFreedEvents() { var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); + return events.Select(SetBlockOnEvent).ToArray(); + } + + public SlotReservationsFullEventDTO[] GetSlotReservationsFull() + { + var events = gethNode.GetEvents(deployment.MarketplaceAddress, BlockInterval); + return events.Select(SetBlockOnEvent).ToArray(); + } + + private T SetBlockOnEvent(EventLog e) where T : IHasBlock + { + var result = e.Event; + result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); + return result; } private BlockTimeEntry GetBlock(ulong number) diff --git a/ProjectPlugins/CodexContractsPlugin/Marketplace/Customizations.cs b/ProjectPlugins/CodexContractsPlugin/Marketplace/Customizations.cs index d842a9e..ba1e168 100644 --- a/ProjectPlugins/CodexContractsPlugin/Marketplace/Customizations.cs +++ b/ProjectPlugins/CodexContractsPlugin/Marketplace/Customizations.cs @@ -58,5 +58,11 @@ namespace CodexContractsPlugin.Marketplace [JsonIgnore] public BlockTimeEntry Block { get; set; } } + + public partial class SlotReservationsFullEventDTO : IHasBlock + { + [JsonIgnore] + public BlockTimeEntry Block { get; set; } + } } #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. diff --git a/Tools/MarketInsights/ContributionBuilder.cs b/Tools/MarketInsights/ContributionBuilder.cs index e38d273..63ab4da 100644 --- a/Tools/MarketInsights/ContributionBuilder.cs +++ b/Tools/MarketInsights/ContributionBuilder.cs @@ -51,6 +51,10 @@ namespace MarketInsights { } + public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) + { + } + public MarketTimeSegment GetSegment() { return segment; diff --git a/Tools/TestNetRewarder/EventsFormatter.cs b/Tools/TestNetRewarder/EventsFormatter.cs index ac37adf..c0c7379 100644 --- a/Tools/TestNetRewarder/EventsFormatter.cs +++ b/Tools/TestNetRewarder/EventsFormatter.cs @@ -75,6 +75,13 @@ namespace TestNetRewarder ); } + public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) + { + AddRequestBlock(requestEvent, "Slot Reservations Full", + $"Slot Index: {slotIndex}" + ); + } + private void AddRequestBlock(RequestEvent requestEvent, string eventName, params string[] content) { var blockNumber = $"[{requestEvent.Block.BlockNumber} {FormatDateTime(requestEvent.Block.Utc)}]"; diff --git a/Tools/TestNetRewarder/RewardCheck.cs b/Tools/TestNetRewarder/RewardCheck.cs index dc93323..e6662cb 100644 --- a/Tools/TestNetRewarder/RewardCheck.cs +++ b/Tools/TestNetRewarder/RewardCheck.cs @@ -72,6 +72,10 @@ namespace TestNetRewarder { } + public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) + { + } + private void GiveReward(RewardConfig reward, EthAddress receiver) { giver.Give(reward, receiver);