2024-12-17 16:06:06 +01:00
|
|
|
|
using BlockchainUtils;
|
|
|
|
|
|
using CodexContractsPlugin.Marketplace;
|
2024-05-31 10:06:34 +02:00
|
|
|
|
using GethPlugin;
|
|
|
|
|
|
using Logging;
|
2024-10-10 11:15:07 +02:00
|
|
|
|
using Nethereum.Contracts;
|
2024-05-31 10:06:34 +02:00
|
|
|
|
using Nethereum.Hex.HexTypes;
|
|
|
|
|
|
using Utils;
|
|
|
|
|
|
|
|
|
|
|
|
namespace CodexContractsPlugin
|
|
|
|
|
|
{
|
|
|
|
|
|
public interface ICodexContractsEvents
|
|
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
BlockInterval BlockInterval { get; }
|
2025-07-07 15:53:26 +02:00
|
|
|
|
StorageRequestedEventDTO[] GetStorageRequestedEvents();
|
2024-05-31 10:06:34 +02:00
|
|
|
|
RequestFulfilledEventDTO[] GetRequestFulfilledEvents();
|
|
|
|
|
|
RequestCancelledEventDTO[] GetRequestCancelledEvents();
|
2024-08-21 13:59:54 +02:00
|
|
|
|
RequestFailedEventDTO[] GetRequestFailedEvents();
|
2024-05-31 10:06:34 +02:00
|
|
|
|
SlotFilledEventDTO[] GetSlotFilledEvents();
|
|
|
|
|
|
SlotFreedEventDTO[] GetSlotFreedEvents();
|
2025-03-04 15:58:45 +01:00
|
|
|
|
SlotReservationsFullEventDTO[] GetSlotReservationsFullEvents();
|
|
|
|
|
|
ProofSubmittedEventDTO[] GetProofSubmittedEvents();
|
2025-05-22 13:55:03 +02:00
|
|
|
|
void GetReserveSlotCalls(Action<ReserveSlotFunction> onFunction);
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public class CodexContractsEvents : ICodexContractsEvents
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly ILog log;
|
|
|
|
|
|
private readonly IGethNode gethNode;
|
|
|
|
|
|
private readonly CodexContractsDeployment deployment;
|
|
|
|
|
|
|
|
|
|
|
|
public CodexContractsEvents(ILog log, IGethNode gethNode, CodexContractsDeployment deployment, BlockInterval blockInterval)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.log = log;
|
|
|
|
|
|
this.gethNode = gethNode;
|
|
|
|
|
|
this.deployment = deployment;
|
2024-05-31 10:16:57 +02:00
|
|
|
|
BlockInterval = blockInterval;
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
2024-05-31 10:16:57 +02:00
|
|
|
|
|
|
|
|
|
|
public BlockInterval BlockInterval { get; }
|
2024-05-31 10:06:34 +02:00
|
|
|
|
|
2025-07-07 15:53:26 +02:00
|
|
|
|
public StorageRequestedEventDTO[] GetStorageRequestedEvents()
|
2024-05-31 10:06:34 +02:00
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
var events = gethNode.GetEvents<StorageRequestedEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2025-07-07 15:53:26 +02:00
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public RequestFulfilledEventDTO[] GetRequestFulfilledEvents()
|
|
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
var events = gethNode.GetEvents<RequestFulfilledEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2024-10-10 11:15:07 +02:00
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public RequestCancelledEventDTO[] GetRequestCancelledEvents()
|
|
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
var events = gethNode.GetEvents<RequestCancelledEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2024-10-10 11:15:07 +02:00
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-21 13:59:54 +02:00
|
|
|
|
public RequestFailedEventDTO[] GetRequestFailedEvents()
|
|
|
|
|
|
{
|
|
|
|
|
|
var events = gethNode.GetEvents<RequestFailedEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2024-10-10 11:15:07 +02:00
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
2024-08-21 13:59:54 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-31 10:06:34 +02:00
|
|
|
|
public SlotFilledEventDTO[] GetSlotFilledEvents()
|
|
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
var events = gethNode.GetEvents<SlotFilledEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2024-05-31 10:06:34 +02:00
|
|
|
|
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()
|
|
|
|
|
|
{
|
2024-05-31 10:16:57 +02:00
|
|
|
|
var events = gethNode.GetEvents<SlotFreedEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
2024-10-10 11:15:07 +02:00
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-04 15:58:45 +01:00
|
|
|
|
public SlotReservationsFullEventDTO[] GetSlotReservationsFullEvents()
|
2024-10-10 11:15:07 +02:00
|
|
|
|
{
|
|
|
|
|
|
var events = gethNode.GetEvents<SlotReservationsFullEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
|
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-04 15:58:45 +01:00
|
|
|
|
public ProofSubmittedEventDTO[] GetProofSubmittedEvents()
|
|
|
|
|
|
{
|
|
|
|
|
|
var events = gethNode.GetEvents<ProofSubmittedEventDTO>(deployment.MarketplaceAddress, BlockInterval);
|
|
|
|
|
|
return events.Select(SetBlockOnEvent).ToArray();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-22 13:55:03 +02:00
|
|
|
|
public void GetReserveSlotCalls(Action<ReserveSlotFunction> onFunction)
|
2025-05-06 20:33:37 +02:00
|
|
|
|
{
|
2025-05-20 10:19:07 +02:00
|
|
|
|
gethNode.IterateFunctionCalls<ReserveSlotFunction>(BlockInterval, (b, fn) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
fn.Block = b;
|
2025-05-22 13:55:03 +02:00
|
|
|
|
onFunction(fn);
|
2025-05-20 10:19:07 +02:00
|
|
|
|
});
|
2025-05-06 20:33:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-10 11:15:07 +02:00
|
|
|
|
private T SetBlockOnEvent<T>(EventLog<T> e) where T : IHasBlock
|
|
|
|
|
|
{
|
|
|
|
|
|
var result = e.Event;
|
|
|
|
|
|
result.Block = GetBlock(e.Log.BlockNumber.ToUlong());
|
|
|
|
|
|
return result;
|
2024-05-31 10:06:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private BlockTimeEntry GetBlock(ulong number)
|
|
|
|
|
|
{
|
|
|
|
|
|
return gethNode.GetBlockForNumber(number);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private EthAddress GetEthAddressFromTransaction(string transactionHash)
|
|
|
|
|
|
{
|
|
|
|
|
|
var transaction = gethNode.GetTransaction(transactionHash);
|
|
|
|
|
|
return new EthAddress(transaction.From);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|