diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs new file mode 100644 index 0000000..b7a6e24 --- /dev/null +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainEvents.cs @@ -0,0 +1,7 @@ +namespace CodexContractsPlugin.ChainMonitor +{ + public class ChainEvents + { + + } +} diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs new file mode 100644 index 0000000..6dc95f1 --- /dev/null +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs @@ -0,0 +1,7 @@ +namespace CodexContractsPlugin.ChainMonitor +{ + public class ChainState + { + + } +} diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs index 197d4f9..58fbb29 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs @@ -2,10 +2,8 @@ using GethPlugin; using Logging; using Nethereum.ABI; -using Nethereum.Hex.HexTypes; using Nethereum.Util; using NethereumWorkflow; -using NethereumWorkflow.BlockUtils; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Utils; @@ -22,13 +20,10 @@ namespace CodexContractsPlugin TestToken GetTestTokenBalance(IHasEthAddress owner); TestToken GetTestTokenBalance(EthAddress ethAddress); - Request[] GetStorageRequests(BlockInterval blockRange); + ICodexContractsEvents GetEvents(TimeRange timeRange); + ICodexContractsEvents GetEvents(BlockInterval blockInterval); EthAddress? GetSlotHost(Request storageRequest, decimal slotIndex); RequestState GetRequestState(Request request); - RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockInterval blockRange); - RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockInterval blockRange); - SlotFilledEventDTO[] GetSlotFilledEvents(BlockInterval blockRange); - SlotFreedEventDTO[] GetSlotFreedEvents(BlockInterval blockRange); } [JsonConverter(typeof(StringEnumConverter))] @@ -81,65 +76,14 @@ namespace CodexContractsPlugin return balance.TstWei(); } - public Request[] GetStorageRequests(BlockInterval blockRange) + public ICodexContractsEvents GetEvents(TimeRange timeRange) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); - var i = StartInteraction(); - 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(); + return GetEvents(gethNode.ConvertTimeRangeToBlockRange(timeRange)); } - public RequestFulfilledEventDTO[] GetRequestFulfilledEvents(BlockInterval blockRange) + public ICodexContractsEvents GetEvents(BlockInterval blockInterval) { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); - } - - public RequestCancelledEventDTO[] GetRequestCancelledEvents(BlockInterval blockRange) - { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); - } - - public SlotFilledEventDTO[] GetSlotFilledEvents(BlockInterval blockRange) - { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - result.Host = GetEthAddressFromTransaction(e.Log.TransactionHash); - return result; - }).ToArray(); - } - - public SlotFreedEventDTO[] GetSlotFreedEvents(BlockInterval blockRange) - { - var events = gethNode.GetEvents(Deployment.MarketplaceAddress, blockRange); - return events.Select(e => - { - var result = e.Event; - result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); - return result; - }).ToArray(); + return new CodexContractsEvents(log, gethNode, Deployment, blockInterval); } public EthAddress? GetSlotHost(Request storageRequest, decimal slotIndex) @@ -170,17 +114,6 @@ namespace CodexContractsPlugin return gethNode.Call(Deployment.MarketplaceAddress, func); } - private BlockTimeEntry GetBlock(ulong number) - { - return gethNode.GetBlockForNumber(number); - } - - private EthAddress GetEthAddressFromTransaction(string transactionHash) - { - var transaction = gethNode.GetTransaction(transactionHash); - return new EthAddress(transaction.From); - } - private ContractInteractions StartInteraction() { return new ContractInteractions(log, gethNode); diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs new file mode 100644 index 0000000..4b2c2f6 --- /dev/null +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsEvents.cs @@ -0,0 +1,106 @@ +using CodexContractsPlugin.Marketplace; +using GethPlugin; +using Logging; +using Nethereum.Hex.HexTypes; +using NethereumWorkflow.BlockUtils; +using Utils; + +namespace CodexContractsPlugin +{ + public interface ICodexContractsEvents + { + Request[] GetStorageRequests(); + RequestFulfilledEventDTO[] GetRequestFulfilledEvents(); + RequestCancelledEventDTO[] GetRequestCancelledEvents(); + SlotFilledEventDTO[] GetSlotFilledEvents(); + SlotFreedEventDTO[] GetSlotFreedEvents(); + } + + public class CodexContractsEvents : ICodexContractsEvents + { + private readonly ILog log; + private readonly IGethNode gethNode; + private readonly CodexContractsDeployment deployment; + private readonly BlockInterval blockInterval; + + public CodexContractsEvents(ILog log, IGethNode gethNode, CodexContractsDeployment deployment, BlockInterval blockInterval) + { + this.log = log; + this.gethNode = gethNode; + this.deployment = deployment; + this.blockInterval = blockInterval; + } + + public Request[] GetStorageRequests() + { + var events = gethNode.GetEvents(deployment.MarketplaceAddress, blockInterval); + var i = new ContractInteractions(log, gethNode); + 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(); + } + + 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(); + } + + 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(); + } + + public SlotFilledEventDTO[] GetSlotFilledEvents() + { + var events = gethNode.GetEvents(deployment.MarketplaceAddress, blockInterval); + return events.Select(e => + { + var result = e.Event; + result.Block = GetBlock(e.Log.BlockNumber.ToUlong()); + result.Host = GetEthAddressFromTransaction(e.Log.TransactionHash); + return result; + }).ToArray(); + } + + 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(); + } + + private BlockTimeEntry GetBlock(ulong number) + { + return gethNode.GetBlockForNumber(number); + } + + private EthAddress GetEthAddressFromTransaction(string transactionHash) + { + var transaction = gethNode.GetTransaction(transactionHash); + return new EthAddress(transaction.From); + } + } +} diff --git a/Tests/CodexTests/BasicTests/MarketplaceTests.cs b/Tests/CodexTests/BasicTests/MarketplaceTests.cs index 2ecc325..bd3ce41 100644 --- a/Tests/CodexTests/BasicTests/MarketplaceTests.cs +++ b/Tests/CodexTests/BasicTests/MarketplaceTests.cs @@ -89,8 +89,8 @@ namespace CodexTests.BasicTests { Time.Retry(() => { - var blockRange = geth.ConvertTimeRangeToBlockRange(GetTestRunTimeRange()); - var slotFilledEvents = contracts.GetSlotFilledEvents(blockRange); + var events = contracts.GetEvents(GetTestRunTimeRange()); + var slotFilledEvents = events.GetSlotFilledEvents(); Debug($"SlotFilledEvents: {slotFilledEvents.Length} - NumSlots: {purchase.MinRequiredNumberOfNodes}"); @@ -107,7 +107,8 @@ namespace CodexTests.BasicTests private Request GetOnChainStorageRequest(ICodexContracts contracts, IGethNode geth) { - var requests = contracts.GetStorageRequests(geth.ConvertTimeRangeToBlockRange(GetTestRunTimeRange())); + var events = contracts.GetEvents(GetTestRunTimeRange()); + var requests = events.GetStorageRequests(); Assert.That(requests.Length, Is.EqualTo(1)); return requests.Single(); } diff --git a/Tests/CodexTests/UtilityTests/DiscordBotTests.cs b/Tests/CodexTests/UtilityTests/DiscordBotTests.cs index 4a56778..998699f 100644 --- a/Tests/CodexTests/UtilityTests/DiscordBotTests.cs +++ b/Tests/CodexTests/UtilityTests/DiscordBotTests.cs @@ -434,11 +434,12 @@ namespace CodexTests.UtilityTests var range = geth.ConvertTimeRangeToBlockRange(new TimeRange(start, stop)); - LogEvents(nameof(contracts.GetStorageRequests), contracts.GetStorageRequests, range); - LogEvents(nameof(contracts.GetRequestFulfilledEvents), contracts.GetRequestFulfilledEvents, range); - LogEvents(nameof(contracts.GetRequestCancelledEvents), contracts.GetRequestCancelledEvents, range); - LogEvents(nameof(contracts.GetSlotFilledEvents), contracts.GetSlotFilledEvents, range); - LogEvents(nameof(contracts.GetSlotFreedEvents), contracts.GetSlotFreedEvents, range); + throw new Exception(); + //LogEvents(nameof(contracts.GetStorageRequests), contracts.GetStorageRequests, range); + //LogEvents(nameof(contracts.GetRequestFulfilledEvents), contracts.GetRequestFulfilledEvents, range); + //LogEvents(nameof(contracts.GetRequestCancelledEvents), contracts.GetRequestCancelledEvents, range); + //LogEvents(nameof(contracts.GetSlotFilledEvents), contracts.GetSlotFilledEvents, range); + //LogEvents(nameof(contracts.GetSlotFreedEvents), contracts.GetSlotFreedEvents, range); } private void LogEvents(string n, Func f, BlockInterval r) diff --git a/Tools/TestNetRewarder/ChainState.cs b/Tools/TestNetRewarder/ChainState.cs index 50fa87d..cef0808 100644 --- a/Tools/TestNetRewarder/ChainState.cs +++ b/Tools/TestNetRewarder/ChainState.cs @@ -37,17 +37,19 @@ namespace TestNetRewarder { this.historicState = historicState; - NewRequests = contracts.GetStorageRequests(blockRange); - historicState.CleanUpOldRequests(); - historicState.ProcessNewRequests(NewRequests); - historicState.UpdateStorageRequests(contracts); + throw new Exception("This is getting a rewrite"); - StartedRequests = historicState.StorageRequests.Where(r => r.RecentlyStarted).ToArray(); - FinishedRequests = historicState.StorageRequests.Where(r => r.RecentlyFinished).ToArray(); - RequestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange); - RequestCancelledEvents = contracts.GetRequestCancelledEvents(blockRange); - SlotFilledEvents = contracts.GetSlotFilledEvents(blockRange); - SlotFreedEvents = contracts.GetSlotFreedEvents(blockRange); + //NewRequests = contracts.GetStorageRequests(blockRange); + //historicState.CleanUpOldRequests(); + //historicState.ProcessNewRequests(NewRequests); + //historicState.UpdateStorageRequests(contracts); + + //StartedRequests = historicState.StorageRequests.Where(r => r.RecentlyStarted).ToArray(); + //FinishedRequests = historicState.StorageRequests.Where(r => r.RecentlyFinished).ToArray(); + //RequestFulfilledEvents = contracts.GetRequestFulfilledEvents(blockRange); + //RequestCancelledEvents = contracts.GetRequestCancelledEvents(blockRange); + //SlotFilledEvents = contracts.GetSlotFilledEvents(blockRange); + //SlotFreedEvents = contracts.GetSlotFreedEvents(blockRange); } public ChainState(