diff --git a/Framework/Utils/BlockRange.cs b/Framework/Utils/BlockRange.cs index 23424a5..fa0574e 100644 --- a/Framework/Utils/BlockRange.cs +++ b/Framework/Utils/BlockRange.cs @@ -18,5 +18,10 @@ public ulong From { get; } public ulong To { get; } + + public override string ToString() + { + return $"[{From} - {To}]"; + } } } diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs index 97083fe..0113020 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs @@ -19,13 +19,13 @@ namespace CodexContractsPlugin TestToken GetTestTokenBalance(IHasEthAddress owner); TestToken GetTestTokenBalance(EthAddress ethAddress); - Request[] GetStorageRequests(TimeRange timeRange); + Request[] GetStorageRequests(BlockRange blockRange); EthAddress? GetSlotHost(Request storageRequest, decimal slotIndex); RequestState GetRequestState(Request request); - RequestFulfilledEventDTO[] GetRequestFulfilledEvents(TimeRange timeRange); - RequestCancelledEventDTO[] GetRequestCancelledEvents(TimeRange timeRange); - SlotFilledEventDTO[] GetSlotFilledEvents(TimeRange timeRange); - SlotFreedEventDTO[] GetSlotFreedEvents(TimeRange timeRange); + RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockRange blockRange); + RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockRange blockRange); + SlotFilledEventDTO[] GetSlotFilledEvents(BlockRange blockRange); + SlotFreedEventDTO[] GetSlotFreedEvents(BlockRange blockRange); } public enum RequestState @@ -77,9 +77,9 @@ namespace CodexContractsPlugin return balance.TestTokens(); } - public Request[] GetStorageRequests(TimeRange timeRange) + public Request[] GetStorageRequests(BlockRange blockRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, timeRange); + var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); var i = StartInteraction(); return events .Select(e => @@ -93,9 +93,9 @@ namespace CodexContractsPlugin .ToArray(); } - public RequestFulfilledEventDTO[] GetRequestFulfilledEvents(TimeRange timeRange) + public RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockRange blockRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, timeRange); + var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); return events.Select(e => { var result = e.Event; @@ -104,9 +104,9 @@ namespace CodexContractsPlugin }).ToArray(); } - public RequestCancelledEventDTO[] GetRequestCancelledEvents(TimeRange timeRange) + public RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockRange blockRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, timeRange); + var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); return events.Select(e => { var result = e.Event; @@ -115,9 +115,9 @@ namespace CodexContractsPlugin }).ToArray(); } - public SlotFilledEventDTO[] GetSlotFilledEvents(TimeRange timeRange) + public SlotFilledEventDTO[] GetSlotFilledEvents(BlockRange blockRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, timeRange); + var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); return events.Select(e => { var result = e.Event; @@ -127,9 +127,9 @@ namespace CodexContractsPlugin }).ToArray(); } - public SlotFreedEventDTO[] GetSlotFreedEvents(TimeRange timeRange) + public SlotFreedEventDTO[] GetSlotFreedEvents(BlockRange blockRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, timeRange); + var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); return events.Select(e => { var result = e.Event; diff --git a/Tests/CodexTests/BasicTests/ExampleTests.cs b/Tests/CodexTests/BasicTests/ExampleTests.cs index 17c911d..5599104 100644 --- a/Tests/CodexTests/BasicTests/ExampleTests.cs +++ b/Tests/CodexTests/BasicTests/ExampleTests.cs @@ -89,7 +89,9 @@ namespace CodexTests.BasicTests purchaseContract.WaitForStorageContractStarted(fileSize); - var requests = contracts.GetStorageRequests(GetTestRunTimeRange()); + var blockRange = geth.ConvertTimeRangeToBlockRange(GetTestRunTimeRange()); + + var requests = contracts.GetStorageRequests(blockRange); Assert.That(requests.Length, Is.EqualTo(1)); var request = requests.Single(); Assert.That(contracts.GetRequestState(request), Is.EqualTo(RequestState.Started)); @@ -98,10 +100,10 @@ namespace CodexTests.BasicTests AssertBalance(contracts, seller, Is.LessThan(sellerInitialBalance), "Collateral was not placed."); - var requestFulfilledEvents = contracts.GetRequestFulfilledEvents(GetTestRunTimeRange()); + var requestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange); Assert.That(requestFulfilledEvents.Length, Is.EqualTo(1)); CollectionAssert.AreEqual(request.RequestId, requestFulfilledEvents[0].RequestId); - var filledSlotEvents = contracts.GetSlotFilledEvents(GetTestRunTimeRange()); + var filledSlotEvents = contracts.GetSlotFilledEvents(blockRange); Assert.That(filledSlotEvents.Length, Is.EqualTo(1)); var filledSlotEvent = filledSlotEvents.Single(); Assert.That(filledSlotEvent.SlotIndex.IsZero); @@ -124,6 +126,5 @@ namespace CodexTests.BasicTests //CheckLogForErrors(seller, buyer); } - } } diff --git a/Tools/TestNetRewarder/ChainState.cs b/Tools/TestNetRewarder/ChainState.cs index 13356fc..0bb1fdd 100644 --- a/Tools/TestNetRewarder/ChainState.cs +++ b/Tools/TestNetRewarder/ChainState.cs @@ -1,6 +1,6 @@ using CodexContractsPlugin; using CodexContractsPlugin.Marketplace; -using Utils; +using BlockRange = Utils.BlockRange; namespace TestNetRewarder { @@ -8,18 +8,18 @@ namespace TestNetRewarder { private readonly HistoricState historicState; - public ChainState(HistoricState historicState, ICodexContracts contracts, TimeRange timeRange) + public ChainState(HistoricState historicState, ICodexContracts contracts, BlockRange blockRange) { - NewRequests = contracts.GetStorageRequests(timeRange); + NewRequests = contracts.GetStorageRequests(blockRange); historicState.ProcessNewRequests(NewRequests); historicState.UpdateStorageRequests(contracts); StartedRequests = historicState.StorageRequests.Where(r => r.RecentlyStarted).ToArray(); FinishedRequests = historicState.StorageRequests.Where(r => r.RecentlyFininshed).ToArray(); - RequestFulfilledEvents = contracts.GetRequestFulfilledEvents(timeRange); - RequestCancelledEvents = contracts.GetRequestCancelledEvents(timeRange); - SlotFilledEvents = contracts.GetSlotFilledEvents(timeRange); - SlotFreedEvents = contracts.GetSlotFreedEvents(timeRange); + RequestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange); + RequestCancelledEvents = contracts.GetRequestCancelledEvents(blockRange); + SlotFilledEvents = contracts.GetSlotFilledEvents(blockRange); + SlotFreedEvents = contracts.GetSlotFreedEvents(blockRange); this.historicState = historicState; } diff --git a/Tools/TestNetRewarder/Processor.cs b/Tools/TestNetRewarder/Processor.cs index bd1f20e..9c0ddc2 100644 --- a/Tools/TestNetRewarder/Processor.cs +++ b/Tools/TestNetRewarder/Processor.cs @@ -11,20 +11,28 @@ namespace TestNetRewarder private static readonly HistoricState historicState = new HistoricState(); private static readonly RewardRepo rewardRepo = new RewardRepo(); private readonly ILog log; + private BlockRange? lastBlockRange; public Processor(ILog log) { this.log = log; } - public async Task ProcessTimeSegment(TimeRange range) + public async Task ProcessTimeSegment(TimeRange timeRange) { try { var connector = GethConnector.GethConnector.Initialize(log); if (connector == null) return; - var chainState = new ChainState(historicState, connector.CodexContracts, range); + var blockRange = connector.GethNode.ConvertTimeRangeToBlockRange(timeRange); + if (!IsNewBlockRange(blockRange)) + { + log.Log($"Block range {blockRange} was previously processed. Skipping..."); + return; + } + + var chainState = new ChainState(historicState, connector.CodexContracts, blockRange); await ProcessTimeSegment(chainState); } @@ -34,6 +42,19 @@ namespace TestNetRewarder } } + private bool IsNewBlockRange(BlockRange blockRange) + { + if (lastBlockRange == null || + lastBlockRange.From != blockRange.From || + lastBlockRange.To != blockRange.To) + { + lastBlockRange = blockRange; + return true; + } + + return false; + } + private async Task ProcessTimeSegment(ChainState chainState) { var outgoingRewards = new List(); @@ -58,13 +79,17 @@ namespace TestNetRewarder Rewards = outgoingRewards.ToArray() }; - log.Debug("Sending rewards: " + JsonConvert.SerializeObject(cmd)); + log.Log("Sending rewards: " + JsonConvert.SerializeObject(cmd)); return await Program.BotClient.SendRewards(cmd); } private void ProcessReward(List outgoingRewards, RewardConfig reward, ChainState chainState) { var winningAddresses = PerformCheck(reward, chainState); + foreach (var win in winningAddresses) + { + log.Log($"Address '{win.Address}' wins '{reward.Message}'"); + } if (winningAddresses.Any()) { outgoingRewards.Add(new RewardUsersCommand diff --git a/Tools/TestNetRewarder/Program.cs b/Tools/TestNetRewarder/Program.cs index c37c8a3..fbf322c 100644 --- a/Tools/TestNetRewarder/Program.cs +++ b/Tools/TestNetRewarder/Program.cs @@ -47,7 +47,7 @@ namespace TestNetRewarder { await EnsureBotOnline(); await segmenter.WaitForNextSegment(processor.ProcessTimeSegment); - await Task.Delay(1000, CancellationToken); + await Task.Delay(100, CancellationToken); } }