diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs index 92169b7c..23ac7dc5 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs @@ -1,6 +1,7 @@ using CodexContractsPlugin.Marketplace; using GethPlugin; using Logging; +using NethereumWorkflow.BlockUtils; using System.Numerics; using Utils; @@ -8,12 +9,24 @@ namespace CodexContractsPlugin.ChainMonitor { public interface IChainStateChangeHandler { - void OnNewRequest(IChainStateRequest request); - void OnRequestFinished(IChainStateRequest request); - void OnRequestFulfilled(IChainStateRequest request); - void OnRequestCancelled(IChainStateRequest request); - void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex); - void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex); + void OnNewRequest(RequestEvent requestEvent); + void OnRequestFinished(RequestEvent requestEvent); + void OnRequestFulfilled(RequestEvent requestEvent); + void OnRequestCancelled(RequestEvent requestEvent); + void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex); + void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex); + } + + public class RequestEvent + { + public RequestEvent(BlockTimeEntry block, IChainStateRequest request) + { + Block = block; + Request = request; + } + + public BlockTimeEntry Block { get; } + public IChainStateRequest Request { get; } } public class ChainState @@ -92,41 +105,41 @@ namespace CodexContractsPlugin.ChainMonitor var newRequest = new ChainStateRequest(log, request, RequestState.New); requests.Add(newRequest); - handler.OnNewRequest(newRequest); + handler.OnNewRequest(new RequestEvent(request.Block, newRequest)); } - private void ApplyEvent(RequestFulfilledEventDTO request) + private void ApplyEvent(RequestFulfilledEventDTO @event) { - var r = FindRequest(request.RequestId); + var r = FindRequest(@event.RequestId); if (r == null) return; - r.UpdateState(request.Block.BlockNumber, RequestState.Started); - handler.OnRequestFulfilled(r); + r.UpdateState(@event.Block.BlockNumber, RequestState.Started); + handler.OnRequestFulfilled(new RequestEvent(@event.Block, r)); } - private void ApplyEvent(RequestCancelledEventDTO request) + private void ApplyEvent(RequestCancelledEventDTO @event) { - var r = FindRequest(request.RequestId); + var r = FindRequest(@event.RequestId); if (r == null) return; - r.UpdateState(request.Block.BlockNumber, RequestState.Cancelled); - handler.OnRequestCancelled(r); + r.UpdateState(@event.Block.BlockNumber, RequestState.Cancelled); + handler.OnRequestCancelled(new RequestEvent(@event.Block, r)); } - private void ApplyEvent(SlotFilledEventDTO request) + private void ApplyEvent(SlotFilledEventDTO @event) { - var r = FindRequest(request.RequestId); + var r = FindRequest(@event.RequestId); if (r == null) return; - r.Hosts.Add(request.Host, (int)request.SlotIndex); - r.Log($"[{request.Block.BlockNumber}] SlotFilled (host:'{request.Host}', slotIndex:{request.SlotIndex})"); - handler.OnSlotFilled(r, request.Host, request.SlotIndex); + r.Hosts.Add(@event.Host, (int)@event.SlotIndex); + r.Log($"[{@event.Block.BlockNumber}] SlotFilled (host:'{@event.Host}', slotIndex:{@event.SlotIndex})"); + handler.OnSlotFilled(new RequestEvent(@event.Block, r), @event.Host, @event.SlotIndex); } - private void ApplyEvent(SlotFreedEventDTO request) + private void ApplyEvent(SlotFreedEventDTO @event) { - var r = FindRequest(request.RequestId); + var r = FindRequest(@event.RequestId); if (r == null) return; - r.Hosts.RemoveHost((int)request.SlotIndex); - r.Log($"[{request.Block.BlockNumber}] SlotFreed (slotIndex:{request.SlotIndex})"); - handler.OnSlotFreed(r, request.SlotIndex); + r.Hosts.RemoveHost((int)@event.SlotIndex); + r.Log($"[{@event.Block.BlockNumber}] SlotFreed (slotIndex:{@event.SlotIndex})"); + handler.OnSlotFreed(new RequestEvent(@event.Block, r), @event.SlotIndex); } private void ApplyTimeImplicitEvents(ulong blockNumber, DateTime eventsUtc) @@ -137,7 +150,7 @@ namespace CodexContractsPlugin.ChainMonitor && r.FinishedUtc < eventsUtc) { r.UpdateState(blockNumber, RequestState.Finished); - handler.OnRequestFinished(r); + handler.OnRequestFinished(new RequestEvent(new BlockTimeEntry(blockNumber, eventsUtc), r)); } } } diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs index 41882c38..c564ec8a 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/DoNothingChainEventHandler.cs @@ -5,27 +5,27 @@ namespace CodexContractsPlugin.ChainMonitor { public class DoNothingChainEventHandler : IChainStateChangeHandler { - public void OnNewRequest(IChainStateRequest request) + public void OnNewRequest(RequestEvent requestEvent) { } - public void OnRequestCancelled(IChainStateRequest request) + public void OnRequestCancelled(RequestEvent requestEvent) { } - public void OnRequestFinished(IChainStateRequest request) + public void OnRequestFinished(RequestEvent requestEvent) { } - public void OnRequestFulfilled(IChainStateRequest request) + public void OnRequestFulfilled(RequestEvent requestEvent) { } - public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex) + public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex) { } - public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex) + public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { } } diff --git a/Tools/TestNetRewarder/ChainChangeMux.cs b/Tools/TestNetRewarder/ChainChangeMux.cs index 740ba318..f906a20f 100644 --- a/Tools/TestNetRewarder/ChainChangeMux.cs +++ b/Tools/TestNetRewarder/ChainChangeMux.cs @@ -13,34 +13,34 @@ namespace TestNetRewarder this.handlers = handlers; } - public void OnNewRequest(IChainStateRequest request) + public void OnNewRequest(RequestEvent requestEvent) { - foreach (var handler in handlers) handler.OnNewRequest(request); + foreach (var handler in handlers) handler.OnNewRequest(requestEvent); } - public void OnRequestCancelled(IChainStateRequest request) + public void OnRequestCancelled(RequestEvent requestEvent) { - foreach (var handler in handlers) handler.OnRequestCancelled(request); + foreach (var handler in handlers) handler.OnRequestCancelled(requestEvent); } - public void OnRequestFinished(IChainStateRequest request) + public void OnRequestFinished(RequestEvent requestEvent) { - foreach (var handler in handlers) handler.OnRequestFinished(request); + foreach (var handler in handlers) handler.OnRequestFinished(requestEvent); } - public void OnRequestFulfilled(IChainStateRequest request) + public void OnRequestFulfilled(RequestEvent requestEvent) { - foreach (var handler in handlers) handler.OnRequestFulfilled(request); + foreach (var handler in handlers) handler.OnRequestFulfilled(requestEvent); } - public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex) + public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex) { - foreach (var handler in handlers) handler.OnSlotFilled(request, host, slotIndex); + foreach (var handler in handlers) handler.OnSlotFilled(requestEvent, host, slotIndex); } - public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex) + public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { - foreach (var handler in handlers) handler.OnSlotFreed(request, slotIndex); + foreach (var handler in handlers) handler.OnSlotFreed(requestEvent, slotIndex); } } } diff --git a/Tools/TestNetRewarder/EventsFormatter.cs b/Tools/TestNetRewarder/EventsFormatter.cs index 0ddf6ee4..048a3a55 100644 --- a/Tools/TestNetRewarder/EventsFormatter.cs +++ b/Tools/TestNetRewarder/EventsFormatter.cs @@ -23,9 +23,10 @@ namespace TestNetRewarder AddBlock("📢 **Error**", error); } - public void OnNewRequest(IChainStateRequest request) + public void OnNewRequest(RequestEvent requestEvent) { - AddRequestBlock(request, "New Request", + var request = requestEvent.Request; + AddRequestBlock(requestEvent, "New Request", $"Client: {request.Client}", $"Content: {request.Request.Content.Cid}", $"Duration: {BigIntToDuration(request.Request.Ask.Duration)}", @@ -38,40 +39,40 @@ namespace TestNetRewarder ); } - public void OnRequestCancelled(IChainStateRequest request) + public void OnRequestCancelled(RequestEvent requestEvent) { - AddRequestBlock(request, "Cancelled"); + AddRequestBlock(requestEvent, "Cancelled"); } - public void OnRequestFinished(IChainStateRequest request) + public void OnRequestFinished(RequestEvent requestEvent) { - AddRequestBlock(request, "Finished"); + AddRequestBlock(requestEvent, "Finished"); } - public void OnRequestFulfilled(IChainStateRequest request) + public void OnRequestFulfilled(RequestEvent requestEvent) { - AddRequestBlock(request, "Started"); + AddRequestBlock(requestEvent, "Started"); } - public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex) + public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex) { - AddRequestBlock(request, "Slot Filled", + AddRequestBlock(requestEvent, "Slot Filled", $"Host: {host}", $"Slot Index: {slotIndex}" ); } - public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex) + public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { - AddRequestBlock(request, "Slot Freed", + AddRequestBlock(requestEvent, "Slot Freed", $"Slot Index: {slotIndex}" ); } - private void AddRequestBlock(IChainStateRequest request, string eventName, params string[] content) + private void AddRequestBlock(RequestEvent requestEvent, string eventName, params string[] content) { - var blockNumber = $"[{request.Request.Block.BlockNumber}]"; - var title = $"{blockNumber} **{eventName}** `{request.Request.Id}`"; + var blockNumber = $"[{requestEvent.Block.BlockNumber}]"; + var title = $"{blockNumber} **{eventName}** `{requestEvent.Request.Request.Id}`"; AddBlock(title, content); } diff --git a/Tools/TestNetRewarder/MarketBuffer.cs b/Tools/TestNetRewarder/MarketBuffer.cs index d8ec91d5..0fadf7e7 100644 --- a/Tools/TestNetRewarder/MarketBuffer.cs +++ b/Tools/TestNetRewarder/MarketBuffer.cs @@ -7,7 +7,7 @@ namespace TestNetRewarder { public class MarketBuffer { - private readonly List requests = new List(); + private readonly List requestEvents = new List(); private readonly TimeSpan bufferSpan; public MarketBuffer(TimeSpan bufferSpan) @@ -15,24 +15,24 @@ namespace TestNetRewarder this.bufferSpan = bufferSpan; } - public void Add(IChainStateRequest request) + public void Add(RequestEvent requestEvent) { - requests.Add(request); + requestEvents.Add(requestEvent); } public void Update() { var now = DateTime.UtcNow; - requests.RemoveAll(r => (now - r.FinishedUtc) > bufferSpan); + requestEvents.RemoveAll(r => (now - r.Request.FinishedUtc) > bufferSpan); } public MarketAverage? GetAverage() { - if (requests.Count == 0) return null; + if (requestEvents.Count == 0) return null; return new MarketAverage { - NumberOfFinished = requests.Count, + NumberOfFinished = requestEvents.Count, TimeRangeSeconds = (int)bufferSpan.TotalSeconds, Price = Average(s => s.Request.Ask.Reward), Duration = Average(s => s.Request.Ask.Duration), @@ -54,10 +54,10 @@ namespace TestNetRewarder private float Average(Func getValue) { var sum = 0.0f; - float count = requests.Count; - foreach (var r in requests) + float count = requestEvents.Count; + foreach (var r in requestEvents) { - sum += getValue(r); + sum += getValue(r.Request); } if (count < 1.0f) return 0.0f; diff --git a/Tools/TestNetRewarder/MarketTracker.cs b/Tools/TestNetRewarder/MarketTracker.cs index a850e322..981c51c5 100644 --- a/Tools/TestNetRewarder/MarketTracker.cs +++ b/Tools/TestNetRewarder/MarketTracker.cs @@ -32,28 +32,28 @@ namespace TestNetRewarder return buffers.Select(b => b.GetAverage()).Where(a => a != null).Cast().ToArray(); } - public void OnNewRequest(IChainStateRequest request) + public void OnNewRequest(RequestEvent requestEvent) { } - public void OnRequestFinished(IChainStateRequest request) + public void OnRequestFinished(RequestEvent requestEvent) { - foreach (var b in buffers) b.Add(request); + foreach (var b in buffers) b.Add(requestEvent); } - public void OnRequestFulfilled(IChainStateRequest request) + public void OnRequestFulfilled(RequestEvent requestEvent) { } - public void OnRequestCancelled(IChainStateRequest request) + public void OnRequestCancelled(RequestEvent requestEvent) { } - public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex) + public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex) { } - public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex) + public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { } diff --git a/Tools/TestNetRewarder/RewardCheck.cs b/Tools/TestNetRewarder/RewardCheck.cs index 0132f040..c01e0835 100644 --- a/Tools/TestNetRewarder/RewardCheck.cs +++ b/Tools/TestNetRewarder/RewardCheck.cs @@ -22,40 +22,40 @@ namespace TestNetRewarder this.giver = giver; } - public void OnNewRequest(IChainStateRequest request) + public void OnNewRequest(RequestEvent requestEvent) { - if (MeetsRequirements(CheckType.ClientPostedContract, request)) + if (MeetsRequirements(CheckType.ClientPostedContract, requestEvent)) { - GiveReward(reward, request.Client); + GiveReward(reward, requestEvent.Request.Client); } } - public void OnRequestCancelled(IChainStateRequest request) + public void OnRequestCancelled(RequestEvent requestEvent) { } - public void OnRequestFinished(IChainStateRequest request) + public void OnRequestFinished(RequestEvent requestEvent) { - if (MeetsRequirements(CheckType.HostFinishedSlot, request)) + if (MeetsRequirements(CheckType.HostFinishedSlot, requestEvent)) { - foreach (var host in request.Hosts.GetHosts()) + foreach (var host in requestEvent.Request.Hosts.GetHosts()) { GiveReward(reward, host); } } } - public void OnRequestFulfilled(IChainStateRequest request) + public void OnRequestFulfilled(RequestEvent requestEvent) { - if (MeetsRequirements(CheckType.ClientStartedContract, request)) + if (MeetsRequirements(CheckType.ClientStartedContract, requestEvent)) { - GiveReward(reward, request.Client); + GiveReward(reward, requestEvent.Request.Client); } } - public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex) + public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex) { - if (MeetsRequirements(CheckType.HostFilledSlot, request)) + if (MeetsRequirements(CheckType.HostFilledSlot, requestEvent)) { if (host != null) { @@ -64,7 +64,7 @@ namespace TestNetRewarder } } - public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex) + public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) { } @@ -73,12 +73,12 @@ namespace TestNetRewarder giver.Give(reward, receiver); } - private bool MeetsRequirements(CheckType type, IChainStateRequest request) + private bool MeetsRequirements(CheckType type, RequestEvent requestEvent) { return reward.CheckConfig.Type == type && - MeetsDurationRequirement(request) && - MeetsSizeRequirement(request); + MeetsDurationRequirement(requestEvent.Request) && + MeetsSizeRequirement(requestEvent.Request); } private bool MeetsSizeRequirement(IChainStateRequest r)