Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ public interface IApiWithBlockchain : IApiWithStores, IBlockchainBridgeFactory
[SkipServiceCollection]
IHeaderValidator? HeaderValidator { get; }
IManualBlockProductionTrigger ManualBlockProductionTrigger { get; }
IRewardCalculatorSource? RewardCalculatorSource { get; set; }
ISealer? Sealer { get; set; }
ISealValidator? SealValidator { get; set; }
ISealEngine SealEngine { get; set; }
IRewardCalculatorSource RewardCalculatorSource { get; }
ISealer Sealer { get; }
ISealValidator SealValidator { get; }
ISealEngine SealEngine { get; }
IStateReader? StateReader { get; }

IWorldStateManager? WorldStateManager { get; }
Expand Down Expand Up @@ -81,7 +81,7 @@ public interface IApiWithBlockchain : IApiWithStores, IBlockchainBridgeFactory
IBlockImprovementContextFactory? BlockImprovementContextFactory { get; set; }
IReadOnlyTxProcessingEnvFactory ReadOnlyTxProcessingEnvFactory { get; }

IGasPriceOracle? GasPriceOracle { get; set; }
IGasPriceOracle GasPriceOracle { get; }

[SkipServiceCollection]
IEthSyncingInfo? EthSyncingInfo { get; }
Expand Down
25 changes: 6 additions & 19 deletions src/Nethermind/Nethermind.Api/NethermindApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public IBlockchainBridge CreateBlockchainBridge()
);
}

public IAbiEncoder AbiEncoder { get; } = Nethermind.Abi.AbiEncoder.Instance;
public IAbiEncoder AbiEncoder => Context.Resolve<IAbiEncoder>();
public IBlobTxStorage? BlobTxStorage { get; set; }
public CompositeBlockPreprocessorStep BlockPreprocessor { get; } = new();
public IBlockProcessingQueue? BlockProcessingQueue { get; set; }
Expand Down Expand Up @@ -159,28 +159,15 @@ public IBlockchainBridge CreateBlockchainBridge()
public IReceiptStorage? ReceiptStorage { get; set; }
public IReceiptFinder? ReceiptFinder { get; set; }
public IReceiptMonitor? ReceiptMonitor { get; set; }
public IRewardCalculatorSource? RewardCalculatorSource { get; set; } = NoBlockRewards.Instance;
public IRewardCalculatorSource RewardCalculatorSource => Context.Resolve<IRewardCalculatorSource>();
public IRlpxHost RlpxPeer => Context.Resolve<IRlpxHost>();
public IRpcModuleProvider? RpcModuleProvider => Context.Resolve<IRpcModuleProvider>();
public IRpcAuthentication? RpcAuthentication { get; set; }
public IJsonRpcLocalStats? JsonRpcLocalStats { get; set; }
public ISealer? Sealer { get; set; } = NullSealEngine.Instance;
public ISealer Sealer => Context.Resolve<ISealer>();
public string SealEngineType => ChainSpec.SealEngineType;
public ISealValidator? SealValidator { get; set; } = NullSealEngine.Instance;
private ISealEngine? _sealEngine;

public ISealEngine SealEngine
{
get
{
return _sealEngine ??= new SealEngine(Sealer, SealValidator);
}

set
{
_sealEngine = value;
}
}
public ISealValidator SealValidator => Context.Resolve<ISealValidator>();
public ISealEngine SealEngine => Context.Resolve<ISealEngine>();

public ISessionMonitor SessionMonitor => Context.Resolve<ISessionMonitor>();
public ISpecProvider SpecProvider => _dependencies.SpecProvider;
Expand All @@ -207,7 +194,7 @@ public ISealEngine SealEngine

public IBlockProducerEnvFactory? BlockProducerEnvFactory { get; set; }
public IBlockImprovementContextFactory? BlockImprovementContextFactory { get; set; }
public IGasPriceOracle? GasPriceOracle { get; set; }
public IGasPriceOracle GasPriceOracle => Context.Resolve<IGasPriceOracle>();

public IEthSyncingInfo? EthSyncingInfo => Context.Resolve<IEthSyncingInfo>();
public IBlockProductionPolicy? BlockProductionPolicy { get; set; }
Expand Down
11 changes: 11 additions & 0 deletions src/Nethermind/Nethermind.Consensus.AuRa/AuRaPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@
using Nethermind.Consensus.AuRa.InitializationSteps;
using Nethermind.Consensus.AuRa.Transactions;
using Nethermind.Consensus.AuRa.Validators;
using Nethermind.Consensus.AuRa.Rewards;
using Nethermind.Consensus.Rewards;
using Nethermind.Consensus.Transactions;
using Nethermind.Consensus.Validators;
using Nethermind.Core;
using Nethermind.Core.Container;
using Nethermind.Logging;
using Nethermind.Specs.ChainSpecStyle;
using Nethermind.Synchronization;

Expand Down Expand Up @@ -109,6 +112,14 @@ protected override void Load(ContainerBuilder builder)
.AddSingleton<IReportingValidator, IMainProcessingContext>((mainProcessingContext) =>
((AuRaBlockProcessor)mainProcessingContext.BlockProcessor).AuRaValidator.GetReportingValidator())
.AddSource(new FallbackToFieldFromApi<AuRaNethermindApi>())

.AddSingleton<IRewardCalculatorSource, AuRaRewardCalculator.AuRaRewardCalculatorSource>()
.AddSingleton<IValidSealerStrategy, ValidSealerStrategy>()
.AddSingleton<IAuRaStepCalculator, AuRaChainSpecEngineParameters, ITimestamper, ILogManager>((param, timestamper, logManager)
=> new AuRaStepCalculator(param.StepDuration, timestamper, logManager))
.AddSingleton<AuRaSealValidator>()
.Bind<ISealValidator, AuRaSealValidator>()
.AddSingleton<ISealer, AuRaSealer>()
;

if (specParam.BlockGasLimitContractTransitions?.Any() == true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,24 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Autofac;
using Nethermind.Api;
using Nethermind.Blockchain;
using Nethermind.Blockchain.BeaconBlockRoot;
using Nethermind.Blockchain.Data;
using Nethermind.Blockchain.Services;
using Nethermind.Config;
using Nethermind.Consensus.AuRa.Config;
using Nethermind.Consensus.AuRa.Contracts;
using Nethermind.Consensus.AuRa.Contracts.DataStore;
using Nethermind.Consensus.AuRa.Rewards;
using Nethermind.Consensus.AuRa.Services;
using Nethermind.Consensus.AuRa.Transactions;
using Nethermind.Consensus.AuRa.Validators;
using Nethermind.Consensus.Comparers;
using Nethermind.Consensus.ExecutionRequests;
using Nethermind.Consensus.Processing;
using Nethermind.Consensus.Transactions;
using Nethermind.Consensus.Validators;
using Nethermind.Consensus.Withdrawals;
using Nethermind.Core;
using Nethermind.Evm;
using Nethermind.Evm.TransactionProcessing;
using Nethermind.Init.Steps;
using Nethermind.Logging;
Expand All @@ -41,8 +38,6 @@ public class InitializeBlockchainAuRa : InitializeBlockchain
private readonly AuRaChainSpecEngineParameters _parameters;
private INethermindApi NethermindApi => _api;

private AuRaSealValidator? _sealValidator;
private IAuRaStepCalculator? _auRaStepCalculator;
private readonly IAuraConfig _auraConfig;

public InitializeBlockchainAuRa(AuRaNethermindApi api) : base(api)
Expand All @@ -56,7 +51,6 @@ public InitializeBlockchainAuRa(AuRaNethermindApi api) : base(api)
protected override async Task InitBlockchain()
{
var chainSpecAuRa = _api.ChainSpec.EngineChainSpecParametersProvider.GetChainSpecParameters<AuRaChainSpecEngineParameters>();
_auRaStepCalculator = new AuRaStepCalculator(chainSpecAuRa.StepDuration, _api.Timestamper, _api.LogManager);
_api.FinalizationManager = new AuRaBlockFinalizationManager(
_api.BlockTree!,
_api.ChainLevelInfoRepository!,
Expand All @@ -71,10 +65,7 @@ protected override async Task InitBlockchain()
_api.FinalizationManager.SetMainBlockProcessor(_api.MainProcessingContext!.BlockProcessor!);

// SealValidator is assigned before AuraValidator is created, so this is needed also
if (_sealValidator is not null)
{
_sealValidator.ReportingValidator = _api.ReportingValidator;
}
((AuRaSealValidator)_api.SealValidator).ReportingValidator = _api.ReportingValidator;
}

protected override BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preWarmer, ITransactionProcessor transactionProcessor, IWorldState worldState)
Expand Down Expand Up @@ -121,7 +112,7 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter, B
}

protected override IHealthHintService CreateHealthHintService() =>
new AuraHealthHintService(_auRaStepCalculator, _api.ValidatorStore);
new AuraHealthHintService(_api.Context.Resolve<IAuRaStepCalculator>(), _api.ValidatorStore);


protected IAuRaValidator CreateAuRaValidator(IWorldState worldState, ITransactionProcessor transactionProcessor)
Expand Down Expand Up @@ -189,19 +180,6 @@ protected IAuRaValidator CreateAuRaValidator(IWorldState worldState, ITransactio
return null;
}

protected override void InitSealEngine()
{
if (_api.DbProvider is null) throw new StepDependencyException(nameof(_api.DbProvider));
if (_api.ChainSpec is null) throw new StepDependencyException(nameof(_api.ChainSpec));
if (_api.EthereumEcdsa is null) throw new StepDependencyException(nameof(_api.EthereumEcdsa));
if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree));

ValidSealerStrategy validSealerStrategy = new ValidSealerStrategy();
_api.SealValidator = _sealValidator = new AuRaSealValidator(_parameters, _auRaStepCalculator, _api.BlockTree, _api.ValidatorStore, validSealerStrategy, _api.EthereumEcdsa, _api.LogManager);
_api.RewardCalculatorSource = new AuRaRewardCalculator.AuRaRewardCalculatorSource(_parameters, _api.AbiEncoder);
_api.Sealer = new AuRaSealer(_api.BlockTree, _api.ValidatorStore, _auRaStepCalculator, _api.EngineSigner, validSealerStrategy, _api.LogManager);
}

private IComparer<Transaction> CreateTxPoolTxComparer(TxPriorityContract? txPriorityContract, TxPriorityContract.LocalDataSource? localDataSource)
{
if (txPriorityContract is not null || localDataSource is not null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public class StartBlockProducerAuRa(
IBlockValidator blockValidator,
IRewardCalculatorSource rewardCalculatorSource,
IBlockProducerEnvFactory blockProducerEnvFactory,
IAuRaStepCalculator stepCalculator,
ILogManager logManager)
{
private readonly AuRaChainSpecEngineParameters _parameters = chainSpec.EngineChainSpecParametersProvider
Expand All @@ -81,19 +82,10 @@ public class StartBlockProducerAuRa(
private DictionaryContractDataStore<TxPriorityContract.Destination>? _minGasPricesContractDataStore;
private TxPriorityContract? _txPriorityContract;
private TxPriorityContract.LocalDataSource? _localDataSource;
private IAuRaStepCalculator? _stepCalculator;

private IAuRaStepCalculator StepCalculator
{
get
{
return _stepCalculator ??= new AuRaStepCalculator(_parameters.StepDuration, timestamper, logManager);
}
}

public IBlockProductionTrigger CreateTrigger()
{
BuildBlocksOnAuRaSteps onAuRaSteps = new(StepCalculator, logManager);
BuildBlocksOnAuRaSteps onAuRaSteps = new(stepCalculator, logManager);
BuildBlocksOnlyWhenNotProcessing onlyWhenNotProcessing = new(
onAuRaSteps,
blockProcessingQueue,
Expand Down Expand Up @@ -122,7 +114,7 @@ public IBlockProducer BuildProducer(ITxSource? additionalTxSource = null)
sealer,
blockTree,
timestamper,
StepCalculator,
stepCalculator,
reportingValidator,
auraConfig,
gasLimitCalculator,
Expand Down
65 changes: 34 additions & 31 deletions src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

using System;
using System.Threading.Tasks;
using Autofac;
using Autofac.Core;
using Nethermind.Api;
using Nethermind.Api.Extensions;
using Nethermind.Blockchain;
Expand All @@ -17,6 +19,7 @@
using Nethermind.Consensus.Rewards;
using Nethermind.Consensus.Transactions;
using Nethermind.Consensus.Withdrawals;
using Nethermind.Core;
using Nethermind.Core.Crypto;
using Nethermind.Evm.TransactionProcessing;
using Nethermind.JsonRpc.Modules;
Expand All @@ -40,35 +43,13 @@ public Task Init(INethermindApi nethermindApi)

(IApiWithStores getFromApi, IApiWithBlockchain setInApi) = _nethermindApi.ForInit;


var chainSpec = getFromApi!.ChainSpec.EngineChainSpecParametersProvider
.GetChainSpecParameters<CliqueChainSpecEngineParameters>();
_cliqueConfig = new CliqueConfig
{
BlockPeriod = chainSpec.Period,
Epoch = chainSpec.Epoch,
MinimumOutOfTurnDelay = nethermindApi.Config<ICliqueConfig>().MinimumOutOfTurnDelay
};

_snapshotManager = new SnapshotManager(
_cliqueConfig,
getFromApi.DbProvider!.BlocksDb,
getFromApi.BlockTree!,
getFromApi.EthereumEcdsa!,
getFromApi.LogManager);

_snapshotManager = nethermindApi.Context.Resolve<ISnapshotManager>();
_cliqueConfig = nethermindApi.Context.Resolve<ICliqueConfig>();
setInApi.HealthHintService = new CliqueHealthHintService(_snapshotManager,
getFromApi.ChainSpec.EngineChainSpecParametersProvider
.GetChainSpecParameters<CliqueChainSpecEngineParameters>());

setInApi.SealValidator = new CliqueSealValidator(
_cliqueConfig,
_snapshotManager,
getFromApi.LogManager);

// both Clique and the merge provide no block rewards
setInApi.RewardCalculatorSource = NoBlockRewards.Instance;
setInApi.BlockPreprocessor.AddLast(new AuthorRecoveryStep(_snapshotManager!));
setInApi.BlockPreprocessor.AddLast(new AuthorRecoveryStep(_snapshotManager));

return Task.CompletedTask;
}
Expand All @@ -90,12 +71,6 @@ public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null)
throw new InvalidOperationException("Request to start block producer while mining disabled.");
}

setInApi.Sealer = new CliqueSealer(
getFromApi.EngineSigner!,
_cliqueConfig!,
_snapshotManager!,
getFromApi.LogManager);

ReadOnlyBlockTree readOnlyBlockTree = getFromApi.BlockTree!.AsReadOnly();
ITransactionComparerProvider transactionComparerProvider = getFromApi.TransactionComparerProvider;
IReadOnlyTxProcessingScope scope = getFromApi.ReadOnlyTxProcessingEnvFactory.Create().Build(Keccak.EmptyTreeHash);
Expand Down Expand Up @@ -201,5 +176,33 @@ public Task InitRpcModules()

private IBlocksConfig? _blocksConfig;
private CliqueBlockProducerRunner _blockProducerRunner = null!;

public IModule Module => new CliqueModule();
}

public class CliqueModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);

builder
.Map<CliqueChainSpecEngineParameters, ChainSpec>(chainSpec =>
chainSpec.EngineChainSpecParametersProvider.GetChainSpecParameters<CliqueChainSpecEngineParameters>())

.AddDecorator<ICliqueConfig>((ctx, cfg) =>
{
CliqueChainSpecEngineParameters? param = ctx.Resolve<CliqueChainSpecEngineParameters>();
cfg.BlockPeriod = param.Period;
cfg.Epoch = param.Epoch;

return cfg;
})

.AddSingleton<ISnapshotManager, SnapshotManager>()
.AddSingleton<ISealValidator, CliqueSealValidator>()
.AddSingleton<ISealer, CliqueSealer>()
;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using Autofac.Features.AttributeFilters;
using Nethermind.Blockchain;
using Nethermind.Core;
using Nethermind.Core.Attributes;
Expand All @@ -32,7 +33,13 @@ public class SnapshotManager : ISnapshotManager
private ulong _lastSignersCount = 0;
private readonly LruCache<ValueHash256, Snapshot> _snapshotCache = new(Clique.InMemorySnapshots, "clique snapshots");

public SnapshotManager(ICliqueConfig cliqueConfig, IDb blocksDb, IBlockTree blockTree, IEthereumEcdsa ecdsa, ILogManager logManager)
public SnapshotManager(
ICliqueConfig cliqueConfig,
[KeyFilter(DbNames.Blocks)] IDb blocksDb,
IBlockTree blockTree,
IEthereumEcdsa ecdsa,
ILogManager logManager
)
{
_logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
_cliqueConfig = cliqueConfig ?? throw new ArgumentNullException(nameof(cliqueConfig));
Expand Down
Loading