-
Notifications
You must be signed in to change notification settings - Fork 512
/
Copy pathOneTimeProcessor.cs
60 lines (49 loc) · 1.95 KB
/
OneTimeProcessor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only
using System;
using System.Threading;
using System.Threading.Tasks;
using Nethermind.Core;
using Nethermind.Evm.Tracing;
using Nethermind.State;
namespace Nethermind.Consensus.Processing
{
public sealed class OneTimeChainProcessor : IBlockchainProcessor
{
public ITracerBag Tracers => _processor.Tracers;
private readonly IBlockchainProcessor _processor;
private readonly IWorldState _worldState;
private readonly Lock _lock = new();
public OneTimeChainProcessor(IWorldState worldState, IBlockchainProcessor processor)
{
_worldState = worldState ?? throw new ArgumentNullException(nameof(worldState));
_processor = processor ?? throw new ArgumentNullException(nameof(processor));
}
public void Start()
{
_processor.Start();
}
public Task StopAsync(bool processRemainingBlocks = false)
{
return _processor.StopAsync(processRemainingBlocks);
}
public Block? Process(Block block, ProcessingOptions options, IBlockTracer tracer, CancellationToken token)
{
lock (_lock)
{
return _processor.Process(block, options, tracer, token);
}
}
public bool IsProcessingBlocks(ulong? maxProcessingInterval)
{
return _processor.IsProcessingBlocks(maxProcessingInterval);
}
#pragma warning disable 67
public event EventHandler<BlockProcessedEventArgs> BlockProcessed;
public event EventHandler<BlockProcessedEventArgs> BlockInvalid;
public event EventHandler<IBlockchainProcessor.InvalidBlockEventArgs>? InvalidBlock;
public event EventHandler<BlockStatistics> NewProcessingStatistics;
#pragma warning restore 67
public ValueTask DisposeAsync() => _processor?.DisposeAsync() ?? default;
}
}