debugging rewards

This commit is contained in:
benbierens 2024-02-19 15:41:48 +01:00
parent 1bf693938c
commit 42d3c5cd2c
No known key found for this signature in database
GPG Key ID: 877D2C2E09A22F3A
6 changed files with 61 additions and 30 deletions

View File

@ -18,5 +18,10 @@
public ulong From { get; }
public ulong To { get; }
public override string ToString()
{
return $"[{From} - {To}]";
}
}
}

View File

@ -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<StorageRequestedEventDTO>(Deployment.MarketplaceAddress, timeRange);
var events = gethNode.GetEvents<StorageRequestedEventDTO>(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<RequestFulfilledEventDTO>(Deployment.MarketplaceAddress, timeRange);
var events = gethNode.GetEvents<RequestFulfilledEventDTO>(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<RequestCancelledEventDTO>(Deployment.MarketplaceAddress, timeRange);
var events = gethNode.GetEvents<RequestCancelledEventDTO>(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<SlotFilledEventDTO>(Deployment.MarketplaceAddress, timeRange);
var events = gethNode.GetEvents<SlotFilledEventDTO>(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<SlotFreedEventDTO>(Deployment.MarketplaceAddress, timeRange);
var events = gethNode.GetEvents<SlotFreedEventDTO>(Deployment.MarketplaceAddress, blockRange);
return events.Select(e =>
{
var result = e.Event;

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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<RewardUsersCommand>();
@ -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<RewardUsersCommand> 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

View File

@ -47,7 +47,7 @@ namespace TestNetRewarder
{
await EnsureBotOnline();
await segmenter.WaitForNextSegment(processor.ProcessTimeSegment);
await Task.Delay(1000, CancellationToken);
await Task.Delay(100, CancellationToken);
}
}