Exemplo n.º 1
0
 public PostMergeBlockProducer(
     ITxSource txSource,
     IBlockchainProcessor processor,
     IBlockTree blockTree,
     IBlockProductionTrigger blockProductionTrigger,
     IStateProvider stateProvider,
     IGasLimitCalculator gasLimitCalculator,
     ISealEngine sealEngine,
     ITimestamper timestamper,
     ISpecProvider specProvider,
     ILogManager logManager)
     : base(
         txSource,
         processor,
         sealEngine,
         blockTree,
         blockProductionTrigger,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager,
         ConstantDifficulty.Zero)
 {
 }
Exemplo n.º 2
0
 public AuRaBlockProducer(ITxSource txSource,
                          IBlockchainProcessor processor,
                          IStateProvider stateProvider,
                          ISealer sealer,
                          IBlockTree blockTree,
                          IBlockProcessingQueue blockProcessingQueue,
                          ITimestamper timestamper,
                          IAuRaStepCalculator auRaStepCalculator,
                          IReportingValidator reportingValidator,
                          IAuraConfig config,
                          IGasLimitCalculator gasLimitCalculator,
                          ISpecProvider specProvider,
                          ILogManager logManager)
     : base(
         new ValidatedTxSource(txSource, logManager),
         processor,
         sealer,
         blockTree,
         blockProcessingQueue,
         stateProvider,
         timestamper,
         gasLimitCalculator,
         specProvider,
         logManager,
         "AuRa")
 {
     _auRaStepCalculator = auRaStepCalculator ?? throw new ArgumentNullException(nameof(auRaStepCalculator));
     _reportingValidator = reportingValidator ?? throw new ArgumentNullException(nameof(reportingValidator));
     _config             = config ?? throw new ArgumentNullException(nameof(config));
     _canProduce         = _config.AllowAuRaPrivateChains ? 1 : 0;
 }
Exemplo n.º 3
0
 protected LoopBlockProducerBase(
     ITxSource txSource,
     IBlockchainProcessor processor,
     ISealer sealer,
     IBlockTree blockTree,
     IBlockProcessingQueue blockProcessingQueue,
     IStateProvider stateProvider,
     ITimestamper timestamper,
     IGasLimitCalculator gasLimitCalculator,
     ISpecProvider specProvider,
     ILogManager logManager,
     string name)
     : base(
         txSource,
         processor,
         sealer,
         blockTree,
         blockProcessingQueue,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager)
 {
     _name = name;
 }
Exemplo n.º 4
0
 public MinedBlockProducer(ITxSource txSource,
                           IBlockchainProcessor processor,
                           ISealer sealer,
                           IBlockTree blockTree,
                           IBlockProcessingQueue blockProcessingQueue,
                           IStateProvider stateProvider,
                           IGasLimitCalculator gasLimitCalculator,
                           ITimestamper timestamper,
                           ISpecProvider specProvider,
                           ILogManager logManager,
                           IDifficultyCalculator difficultyCalculator)
     : base(
         txSource,
         processor,
         sealer,
         blockTree,
         blockProcessingQueue,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager)
 {
     _difficultyCalculator = difficultyCalculator ?? throw new ArgumentNullException(nameof(difficultyCalculator));
 }
Exemplo n.º 5
0
 public AuRaBlockProducer(ITxSource txSource,
                          IBlockchainProcessor processor,
                          IBlockProductionTrigger blockProductionTrigger,
                          IStateProvider stateProvider,
                          ISealer sealer,
                          IBlockTree blockTree,
                          ITimestamper timestamper,
                          IAuRaStepCalculator auRaStepCalculator,
                          IReportingValidator reportingValidator,
                          IAuraConfig config,
                          IGasLimitCalculator gasLimitCalculator,
                          ISpecProvider specProvider,
                          ILogManager logManager)
     : base(
         txSource,
         processor,
         sealer,
         blockTree,
         blockProductionTrigger,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager,
         new AuraDifficultyCalculator(auRaStepCalculator))
 {
     _auRaStepCalculator = auRaStepCalculator ?? throw new ArgumentNullException(nameof(auRaStepCalculator));
     _reportingValidator = reportingValidator ?? throw new ArgumentNullException(nameof(reportingValidator));
     _config             = config ?? throw new ArgumentNullException(nameof(config));
 }
Exemplo n.º 6
0
        public CliqueBlockProducer(
            ITxSource txSource,
            IBlockchainProcessor blockchainProcessor,
            IStateProvider stateProvider,
            IBlockTree blockTree,
            ITimestamper timestamper,
            ICryptoRandom cryptoRandom,
            ISnapshotManager snapshotManager,
            ISealer cliqueSealer,
            IGasLimitCalculator gasLimitCalculator,
            ISpecProvider?specProvider,
            ICliqueConfig config,
            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _txSource           = txSource ?? throw new ArgumentNullException(nameof(txSource));
            _processor          = blockchainProcessor ?? throw new ArgumentNullException(nameof(blockchainProcessor));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _stateProvider      = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            _timestamper        = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
            _cryptoRandom       = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
            _sealer             = cliqueSealer ?? throw new ArgumentNullException(nameof(cliqueSealer));
            _gasLimitCalculator = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator));
            _specProvider       = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _snapshotManager    = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager));
            _config             = config ?? throw new ArgumentNullException(nameof(config));
            _wiggle             = new WiggleRandomizer(_cryptoRandom, _snapshotManager);

            _timer.AutoReset = false;
            _timer.Elapsed  += TimerOnElapsed;
            _timer.Interval  = 100;
            _timer.Start();
        }
Exemplo n.º 7
0
 public Eth2TestBlockProducer(
     ITxSource txSource,
     IBlockchainProcessor processor,
     IBlockTree blockTree,
     IBlockProcessingQueue blockProcessingQueue,
     IStateProvider stateProvider,
     IGasLimitCalculator gasLimitCalculator,
     ISigner signer, ILogManager logManager)
     : base(txSource, processor, blockTree, blockProcessingQueue, stateProvider, gasLimitCalculator, signer, logManager)
 {
 }
 public AuRaContractGasLimitOverride(
     IList <IBlockGasLimitContract> contracts,
     Cache cache,
     bool minimum2MlnGasPerBlockWhenUsingBlockGasLimitContract,
     IGasLimitCalculator innerCalculator,
     ILogManager logManager)
 {
     _contracts = contracts ?? throw new ArgumentNullException(nameof(contracts));
     _cache     = cache ?? throw new ArgumentNullException(nameof(cache));
     _minimum2MlnGasPerBlockWhenUsingBlockGasLimitContract = minimum2MlnGasPerBlockWhenUsingBlockGasLimitContract;
     _innerCalculator = innerCalculator ?? throw new ArgumentNullException(nameof(innerCalculator));
     _logger          = logManager?.GetClassLogger <AuRaContractGasLimitOverride>() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemplo n.º 9
0
 protected BlockProducerBase(
     ITxSource?txSource,
     IBlockchainProcessor?processor,
     ISealer?sealer,
     IBlockTree?blockTree,
     IBlockProcessingQueue?blockProcessingQueue,
     IStateProvider?stateProvider,
     IGasLimitCalculator?gasLimitCalculator,
     ITimestamper?timestamper,
     ILogManager?logManager)
 {
     _txSource            = txSource ?? throw new ArgumentNullException(nameof(txSource));
     Processor            = processor ?? throw new ArgumentNullException(nameof(processor));
     Sealer               = sealer ?? throw new ArgumentNullException(nameof(sealer));
     BlockTree            = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     BlockProcessingQueue = blockProcessingQueue ?? throw new ArgumentNullException(nameof(blockProcessingQueue));
     _stateProvider       = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _gasLimitCalculator  = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator));
     Timestamper          = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     Logger               = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemplo n.º 10
0
        public Task <IBlockProducer> BuildProducer(IBlockProductionTrigger blockProductionTrigger, ITxSource?additionalTxSource = null)
        {
            if (_api.EngineSigner == null)
            {
                throw new StepDependencyException(nameof(_api.EngineSigner));
            }
            if (_api.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(_api.ChainSpec));
            }

            ILogger logger = _api.LogManager.GetClassLogger();

            if (logger.IsWarn)
            {
                logger.Warn("Starting AuRa block producer & sealer");
            }

            BlockProducerEnv producerEnv = GetProducerChain(additionalTxSource);

            IGasLimitCalculator gasLimitCalculator = _api.GasLimitCalculator = CreateGasLimitCalculator(producerEnv.ReadOnlyTxProcessingEnv);

            IBlockProducer blockProducer = new AuRaBlockProducer(
                producerEnv.TxSource,
                producerEnv.ChainProcessor,
                blockProductionTrigger,
                producerEnv.ReadOnlyStateProvider,
                _api.Sealer,
                _api.BlockTree,
                _api.Timestamper,
                StepCalculator,
                _api.ReportingValidator,
                _auraConfig,
                gasLimitCalculator,
                _api.SpecProvider,
                _api.LogManager);

            return(Task.FromResult(blockProducer));
        }
Exemplo n.º 11
0
 public Eth2BlockProducer(ITxSource txSource,
                          IBlockchainProcessor processor,
                          IBlockTree blockTree,
                          IBlockProductionTrigger blockProductionTrigger,
                          IStateProvider stateProvider,
                          IGasLimitCalculator gasLimitCalculator,
                          ISigner signer,
                          ITimestamper timestamper,
                          ISpecProvider specProvider,
                          ILogManager logManager)
     : base(
         txSource,
         processor,
         new Eth2SealEngine(signer),
         blockTree,
         blockProductionTrigger,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager,
         ConstantDifficultyCalculator.One)
 {
 }
Exemplo n.º 12
0
 public MinedBlockProducer(ITxSource txSource,
                           IBlockchainProcessor processor,
                           ISealer sealer,
                           IBlockTree blockTree,
                           IBlockProductionTrigger blockProductionTrigger,
                           IStateProvider stateProvider,
                           IGasLimitCalculator gasLimitCalculator,
                           ITimestamper timestamper,
                           ISpecProvider specProvider,
                           ILogManager logManager)
     : base(
         txSource,
         processor,
         sealer,
         blockTree,
         blockProductionTrigger,
         stateProvider,
         gasLimitCalculator,
         timestamper,
         specProvider,
         logManager,
         new EthashDifficultyCalculator(specProvider))
 {
 }
Exemplo n.º 13
0
 public TxBundleSimulator(ITracerFactory tracerFactory, IGasLimitCalculator gasLimitCalculator, ITimestamper timestamper, ITxPool txPool, ISpecProvider specProvider, ISigner?signer) : base(tracerFactory, specProvider, signer)
 {
     _gasLimitCalculator = gasLimitCalculator;
     _timestamper        = timestamper;
     _txPool             = txPool;
 }
Exemplo n.º 14
0
 public ProducerUnderTest(ITxSource txSource, IBlockchainProcessor processor, ISealer sealer, IBlockTree blockTree, IBlockProductionTrigger blockProductionTrigger, IStateProvider stateProvider, IGasLimitCalculator gasLimitCalculator, ITimestamper timestamper, ILogManager logManager)
     : base(txSource, processor, sealer, blockTree, blockProductionTrigger, stateProvider, gasLimitCalculator, timestamper, MainnetSpecProvider.Instance, logManager, new TimestampDifficultyCalculator())
 {
 }
Exemplo n.º 15
0
 public ProducerUnderTest(ITxSource txSource, IBlockchainProcessor processor, ISealer sealer, IBlockTree blockTree, IBlockProcessingQueue blockProcessingQueue, IStateProvider stateProvider, IGasLimitCalculator gasLimitCalculator, ITimestamper timestamper, ILogManager logManager)
     : base(txSource, processor, sealer, blockTree, blockProcessingQueue, stateProvider, gasLimitCalculator, timestamper, logManager)
 {
 }
Exemplo n.º 16
0
        public Task <IBlockProducer> InitBlockProducer(IBlockProductionTrigger?blockProductionTrigger = null, ITxSource?additionalTxSource = null)
        {
            if (_nethermindApi !.SealEngineType != Nethermind.Core.SealEngineType.Clique)
            {
                return(Task.FromResult((IBlockProducer)null));
            }

            (IApiWithBlockchain getFromApi, IApiWithBlockchain setInApi) = _nethermindApi !.ForProducer;

            _miningConfig = getFromApi.Config <IMiningConfig>();
            if (!_miningConfig.Enabled)
            {
                throw new InvalidOperationException("Request to start block producer while mining disabled.");
            }

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

            ReadOnlyDbProvider           readOnlyDbProvider          = getFromApi.DbProvider !.AsReadOnly(false);
            ReadOnlyBlockTree            readOnlyBlockTree           = getFromApi.BlockTree !.AsReadOnly();
            ITransactionComparerProvider transactionComparerProvider = getFromApi.TransactionComparerProvider;

            ReadOnlyTxProcessingEnv producerEnv = new (
                readOnlyDbProvider,
                getFromApi.ReadOnlyTrieStore,
                readOnlyBlockTree,
                getFromApi.SpecProvider,
                getFromApi.LogManager);

            BlockProcessor producerProcessor = new (
                getFromApi !.SpecProvider,
                getFromApi !.BlockValidator,
                NoBlockRewards.Instance,
                getFromApi.BlockProducerEnvFactory.TransactionsExecutorFactory.Create(producerEnv),
                producerEnv.StateProvider,
                producerEnv.StorageProvider, // do not remove transactions from the pool when preprocessing
                NullReceiptStorage.Instance,
                NullWitnessCollector.Instance,
                getFromApi.LogManager);

            IBlockchainProcessor producerChainProcessor = new BlockchainProcessor(
                readOnlyBlockTree,
                producerProcessor,
                getFromApi.BlockPreprocessor,
                getFromApi.StateReader,
                getFromApi.LogManager,
                BlockchainProcessor.Options.NoReceipts);

            OneTimeChainProcessor chainProcessor = new (
                readOnlyDbProvider,
                producerChainProcessor);

            ITxFilterPipeline txFilterPipeline =
                TxFilterPipelineBuilder.CreateStandardFilteringPipeline(
                    _nethermindApi.LogManager,
                    getFromApi.SpecProvider,
                    _miningConfig);

            TxPoolTxSource txPoolTxSource = new(
                getFromApi.TxPool,
                getFromApi.SpecProvider,
                transactionComparerProvider,
                getFromApi.LogManager,
                txFilterPipeline);

            IGasLimitCalculator gasLimitCalculator = setInApi.GasLimitCalculator = new TargetAdjustedGasLimitCalculator(getFromApi.SpecProvider, _miningConfig);

            IBlockProducer blockProducer = new CliqueBlockProducer(
                additionalTxSource.Then(txPoolTxSource),
                chainProcessor,
                producerEnv.StateProvider,
                getFromApi.BlockTree !,
                getFromApi.Timestamper,
                getFromApi.CryptoRandom,
                _snapshotManager !,
                getFromApi.Sealer !,
                gasLimitCalculator,
                getFromApi.SpecProvider,
                _cliqueConfig !,
                getFromApi.LogManager);

            return(Task.FromResult(blockProducer));
        }
 public Eth2TestBlockProducerFactory(IGasLimitCalculator gasLimitCalculator, ITxSource?txSource = null) : base(txSource, gasLimitCalculator)
 {
 }