diff --git a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs index 25a028dc..1bb47912 100644 --- a/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs +++ b/ProjectPlugins/CodexContractsPlugin/ChainMonitor/ChainState.cs @@ -199,21 +199,23 @@ namespace CodexContractsPlugin.ChainMonitor private ChainStateRequest? FindRequest(IHasRequestId request) { var r = requests.SingleOrDefault(r => Equal(r.Request.RequestId, request.RequestId)); - if (r == null) + if (r != null) return r; + + try { - var blockNumber = "unknown"; - if (request is IHasBlock blk) - { - blockNumber = blk.Block.BlockNumber.ToString(); - } - - var msg = $"Received event of type '{request.GetType()}' in block '{blockNumber}' for request by Id: '{request.RequestId}'. " + - $"Failed to find request. Request creation event not seen! (Tracker start time: {TotalSpan.From})"; - + var req = contracts.GetRequest(request.RequestId); + var state = contracts.GetRequestState(req); + var newRequest = new ChainStateRequest(log, req, state); + requests.Add(newRequest); + return newRequest; + } + catch (Exception ex) + { + var msg = "Failed to get request from chain: " + ex; log.Error(msg); handler.OnError(msg); + return null; } - return r; } private bool Equal(byte[] a, byte[] b) diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs index 120574b4..40ee264e 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs @@ -3,11 +3,8 @@ using CodexContractsPlugin.Marketplace; using GethPlugin; using Logging; using Nethereum.ABI; -using Nethereum.ABI.FunctionEncoding.Attributes; using Nethereum.Contracts; -using Nethereum.Hex.HexConvertors.Extensions; using Nethereum.Util; -using NethereumWorkflow; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Utils; @@ -28,6 +25,7 @@ namespace CodexContractsPlugin ICodexContractsEvents GetEvents(BlockInterval blockInterval); EthAddress? GetSlotHost(Request storageRequest, decimal slotIndex); RequestState GetRequestState(Request request); + Request GetRequest(byte[] requestId); ulong GetPeriodNumber(DateTime utc); void WaitUntilNextPeriod(); ProofState GetProofState(Request storageRequest, decimal slotIndex, ulong blockNumber, ulong period); @@ -126,6 +124,17 @@ namespace CodexContractsPlugin return gethNode.Call(Deployment.MarketplaceAddress, func); } + public Request GetRequest(byte[] requestId) + { + var func = new GetRequestFunction + { + RequestId = requestId + }; + + var request = gethNode.Call(Deployment.MarketplaceAddress, func); + return request.ReturnValue1; + } + public ulong GetPeriodNumber(DateTime utc) { DateTimeOffset utco = DateTime.SpecifyKind(utc, DateTimeKind.Utc);