Applies blockInterval

This commit is contained in:
Ben 2024-03-27 15:39:42 +01:00
parent 330552563c
commit 01d6b8f227
No known key found for this signature in database
GPG Key ID: 541B9D8C9F1426A1
7 changed files with 51 additions and 49 deletions

View File

@ -89,26 +89,9 @@ namespace NethereumWorkflow
}
}
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, TimeRange timeRange) where TEvent : IEventDTO, new()
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, BlockInterval blockRange) where TEvent : IEventDTO, new()
{
var wrapper = new Web3Wrapper(web3, log);
var blockTimeFinder = new BlockTimeFinder(blockCache, wrapper, log);
var fromBlock = blockTimeFinder.GetLowestBlockNumberAfter(timeRange.From);
var toBlock = blockTimeFinder.GetHighestBlockNumberBefore(timeRange.To);
if (!fromBlock.HasValue)
{
log.Error("Failed to find lowest block for time range: " + timeRange);
throw new Exception("Failed");
}
if (!toBlock.HasValue)
{
log.Error("Failed to find highest block for time range: " + timeRange);
throw new Exception("Failed");
}
return GetEvents<TEvent>(address, fromBlock.Value, toBlock.Value);
return GetEvents<TEvent>(address, blockRange.From, blockRange.To);
}
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, ulong fromBlockNumber, ulong toBlockNumber) where TEvent : IEventDTO, new()
@ -119,5 +102,24 @@ namespace NethereumWorkflow
var blockFilter = Time.Wait(eventHandler.CreateFilterBlockRangeAsync(from, to));
return Time.Wait(eventHandler.GetAllChangesAsync(blockFilter));
}
public BlockInterval ConvertTimeRangeToBlockRange(TimeRange timeRange)
{
var wrapper = new Web3Wrapper(web3, log);
var blockTimeFinder = new BlockTimeFinder(blockCache, wrapper, log);
var fromBlock = blockTimeFinder.GetLowestBlockNumberAfter(timeRange.From);
var toBlock = blockTimeFinder.GetHighestBlockNumberBefore(timeRange.To);
if (fromBlock == null || toBlock == null)
{
throw new Exception("Failed to convert time range to block range.");
}
return new BlockInterval(
from: fromBlock.Value,
to: toBlock.Value
);
}
}
}

View File

@ -1,8 +1,8 @@
namespace Utils
{
public class BlockRange
public class BlockInterval
{
public BlockRange(ulong from, ulong to)
public BlockInterval(ulong from, ulong to)
{
if (from < to)
{

View File

@ -19,13 +19,13 @@ namespace CodexContractsPlugin
TestToken GetTestTokenBalance(IHasEthAddress owner);
TestToken GetTestTokenBalance(EthAddress ethAddress);
Request[] GetStorageRequests(BlockRange blockRange);
Request[] GetStorageRequests(BlockInterval blockRange);
EthAddress? GetSlotHost(Request storageRequest, decimal slotIndex);
RequestState GetRequestState(Request request);
RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockRange blockRange);
RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockRange blockRange);
SlotFilledEventDTO[] GetSlotFilledEvents(BlockRange blockRange);
SlotFreedEventDTO[] GetSlotFreedEvents(BlockRange blockRange);
RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockInterval blockRange);
RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockInterval blockRange);
SlotFilledEventDTO[] GetSlotFilledEvents(BlockInterval blockRange);
SlotFreedEventDTO[] GetSlotFreedEvents(BlockInterval blockRange);
}
public enum RequestState
@ -77,7 +77,7 @@ namespace CodexContractsPlugin
return balance.TestTokens();
}
public Request[] GetStorageRequests(BlockRange blockRange)
public Request[] GetStorageRequests(BlockInterval blockRange)
{
var events = gethNode.GetEvents<StorageRequestedEventDTO>(Deployment.MarketplaceAddress, blockRange);
var i = StartInteraction();
@ -93,7 +93,7 @@ namespace CodexContractsPlugin
.ToArray();
}
public RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockRange blockRange)
public RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockInterval blockRange)
{
var events = gethNode.GetEvents<RequestFulfilledEventDTO>(Deployment.MarketplaceAddress, blockRange);
return events.Select(e =>
@ -104,7 +104,7 @@ namespace CodexContractsPlugin
}).ToArray();
}
public RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockRange blockRange)
public RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockInterval blockRange)
{
var events = gethNode.GetEvents<RequestCancelledEventDTO>(Deployment.MarketplaceAddress, blockRange);
return events.Select(e =>
@ -115,7 +115,7 @@ namespace CodexContractsPlugin
}).ToArray();
}
public SlotFilledEventDTO[] GetSlotFilledEvents(BlockRange blockRange)
public SlotFilledEventDTO[] GetSlotFilledEvents(BlockInterval blockRange)
{
var events = gethNode.GetEvents<SlotFilledEventDTO>(Deployment.MarketplaceAddress, blockRange);
return events.Select(e =>
@ -127,7 +127,7 @@ namespace CodexContractsPlugin
}).ToArray();
}
public SlotFreedEventDTO[] GetSlotFreedEvents(BlockRange blockRange)
public SlotFreedEventDTO[] GetSlotFreedEvents(BlockInterval blockRange)
{
var events = gethNode.GetEvents<SlotFreedEventDTO>(Deployment.MarketplaceAddress, blockRange);
return events.Select(e =>

View File

@ -6,7 +6,6 @@ using Nethereum.Contracts;
using Nethereum.RPC.Eth.DTOs;
using NethereumWorkflow;
using Utils;
using BlockRange = Utils.BlockRange;
namespace GethPlugin
{
@ -25,9 +24,9 @@ namespace GethPlugin
decimal? GetSyncedBlockNumber();
bool IsContractAvailable(string abi, string contractAddress);
GethBootstrapNode GetBootstrapRecord();
List<EventLog<TEvent>> GetEvents<TEvent>(string address, BlockRange blockRange) where TEvent : IEventDTO, new();
List<EventLog<TEvent>> GetEvents<TEvent>(string address, BlockInterval blockRange) where TEvent : IEventDTO, new();
List<EventLog<TEvent>> GetEvents<TEvent>(string address, TimeRange timeRange) where TEvent : IEventDTO, new();
BlockRange ConvertTimeRangeToBlockRange(TimeRange timeRange);
BlockInterval ConvertTimeRangeToBlockRange(TimeRange timeRange);
}
public class DeploymentGethNode : BaseGethNode, IGethNode
@ -146,17 +145,17 @@ namespace GethPlugin
return StartInteraction().IsContractAvailable(abi, contractAddress);
}
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, BlockRange blockRange) where TEvent : IEventDTO, new()
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, BlockInterval blockRange) where TEvent : IEventDTO, new()
{
return StartInteraction().GetEvents<TEvent>(address, blockRange);
}
public List<EventLog<TEvent>> GetEvents<TEvent>(string address, TimeRange timeRange) where TEvent : IEventDTO, new()
{
return StartInteraction().GetEvents<TEvent>(address, timeRange);
return StartInteraction().GetEvents<TEvent>(address, ConvertTimeRangeToBlockRange(timeRange));
}
public BlockRange ConvertTimeRangeToBlockRange(TimeRange timeRange)
public BlockInterval ConvertTimeRangeToBlockRange(TimeRange timeRange)
{
return StartInteraction().ConvertTimeRangeToBlockRange(timeRange);
}

View File

@ -1,7 +1,6 @@
using CodexContractsPlugin;
using CodexDiscordBotPlugin;
using CodexPlugin;
using DistTestCore;
using GethPlugin;
using Nethereum.Hex.HexConvertors.Extensions;
using NUnit.Framework;
@ -110,9 +109,11 @@ namespace CodexTests.BasicTests
AssertBalance(contracts, seller, Is.LessThan(sellerInitialBalance), "Collateral was not placed.");
var request = GetOnChainStorageRequest(contracts);
var blockRange = geth.ConvertTimeRangeToBlockRange(GetTestRunTimeRange());
var request = GetOnChainStorageRequest(contracts, blockRange);
AssertStorageRequest(request, purchase, contracts, buyer);
AssertSlotFilledEvents(contracts, purchase, request, seller);
AssertSlotFilledEvents(contracts, purchase, request, seller, blockRange);
AssertContractSlot(contracts, request, 0, seller);
purchaseContract.WaitForStorageContractFinished();
@ -139,15 +140,15 @@ namespace CodexTests.BasicTests
Assert.That(discN, Is.LessThan(bootN));
}
private void AssertSlotFilledEvents(ICodexContracts contracts, StoragePurchaseRequest purchase, Request request, ICodexNode seller)
private void AssertSlotFilledEvents(ICodexContracts contracts, StoragePurchaseRequest purchase, Request request, ICodexNode seller, BlockInterval blockRange)
{
// Expect 1 fulfilled event for the purchase.
var requestFulfilledEvents = contracts.GetRequestFulfilledEvents(GetTestRunTimeRange());
var requestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange);
Assert.That(requestFulfilledEvents.Length, Is.EqualTo(1));
CollectionAssert.AreEqual(request.RequestId, requestFulfilledEvents[0].RequestId);
// Expect 1 filled-slot event for each slot in the purchase.
var filledSlotEvents = contracts.GetSlotFilledEvents(GetTestRunTimeRange());
var filledSlotEvents = contracts.GetSlotFilledEvents(blockRange);
Assert.That(filledSlotEvents.Length, Is.EqualTo(purchase.MinRequiredNumberOfNodes));
for (var i = 0; i < purchase.MinRequiredNumberOfNodes; i++)
{
@ -164,9 +165,9 @@ namespace CodexTests.BasicTests
Assert.That(request.Ask.Slots, Is.EqualTo(purchase.MinRequiredNumberOfNodes));
}
private Request GetOnChainStorageRequest(ICodexContracts contracts)
private Request GetOnChainStorageRequest(ICodexContracts contracts, BlockInterval blockRange)
{
var requests = contracts.GetStorageRequests(GetTestRunTimeRange());
var requests = contracts.GetStorageRequests(blockRange);
Assert.That(requests.Length, Is.EqualTo(1));
return requests.Single();
}

View File

@ -1,6 +1,6 @@
using CodexContractsPlugin;
using CodexContractsPlugin.Marketplace;
using BlockRange = Utils.BlockRange;
using Utils;
namespace TestNetRewarder
{
@ -8,7 +8,7 @@ namespace TestNetRewarder
{
private readonly HistoricState historicState;
public ChainState(HistoricState historicState, ICodexContracts contracts, BlockRange blockRange)
public ChainState(HistoricState historicState, ICodexContracts contracts, BlockInterval blockRange)
{
NewRequests = contracts.GetStorageRequests(blockRange);
historicState.ProcessNewRequests(NewRequests);

View File

@ -11,7 +11,7 @@ namespace TestNetRewarder
private static readonly HistoricState historicState = new HistoricState();
private static readonly RewardRepo rewardRepo = new RewardRepo();
private readonly ILog log;
private BlockRange? lastBlockRange;
private BlockInterval? lastBlockRange;
public Processor(ILog log)
{
@ -42,7 +42,7 @@ namespace TestNetRewarder
}
}
private bool IsNewBlockRange(BlockRange blockRange)
private bool IsNewBlockRange(BlockInterval blockRange)
{
if (lastBlockRange == null ||
lastBlockRange.From != blockRange.From ||