public void Regular_trigger_works() { int triggered = 0; BuildBlocksRegularly trigger = new BuildBlocksRegularly(TimeSpan.FromMilliseconds(5)); trigger.TriggerBlockProduction += (s, e) => triggered++; Thread.Sleep(50); triggered.Should().BeInRange(1, 20); }
public async Task Regular_trigger_works() { int triggered = 0; BuildBlocksRegularly trigger = new BuildBlocksRegularly(TimeSpan.FromMilliseconds(5)); trigger.TriggerBlockProduction += (s, e) => triggered++; await Task.Delay(50); triggered.Should().BeInRange(1, 20); }
public Task <IBlockProducer> InitBlockProducer(IBlockProductionTrigger?blockProductionTrigger = null, ITxSource?additionalTxSource = null) { if (_nethermindApi !.SealEngineType != Nethermind.Core.SealEngineType.NethDev) { return(Task.FromResult((IBlockProducer)null)); } var(getFromApi, setInApi) = _nethermindApi !.ForProducer; ReadOnlyDbProvider readOnlyDbProvider = getFromApi.DbProvider.AsReadOnly(false); ReadOnlyBlockTree readOnlyBlockTree = getFromApi.BlockTree.AsReadOnly(); ITxFilterPipeline txFilterPipeline = new TxFilterPipelineBuilder(_nethermindApi.LogManager) .WithBaseFeeFilter(getFromApi.SpecProvider) .WithNullTxFilter() .WithMinGasPriceFilter(_nethermindApi.Config <IMiningConfig>().MinGasPrice, getFromApi.SpecProvider) .Build; TxPoolTxSource txPoolTxSource = new( getFromApi.TxPool, getFromApi.SpecProvider, getFromApi.TransactionComparerProvider !, getFromApi.LogManager, txFilterPipeline); ILogger logger = getFromApi.LogManager.GetClassLogger(); if (logger.IsWarn) { logger.Warn("Starting Neth Dev block producer & sealer"); } ReadOnlyTxProcessingEnv producerEnv = new( readOnlyDbProvider, getFromApi.ReadOnlyTrieStore, readOnlyBlockTree, getFromApi.SpecProvider, getFromApi.LogManager); BlockProcessor producerProcessor = new( getFromApi !.SpecProvider, getFromApi !.BlockValidator, NoBlockRewards.Instance, new BlockProcessor.BlockProductionTransactionsExecutor(producerEnv, getFromApi !.SpecProvider, getFromApi.LogManager), producerEnv.StateProvider, producerEnv.StorageProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, getFromApi.LogManager); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, producerProcessor, getFromApi.BlockPreprocessor, getFromApi.LogManager, BlockchainProcessor.Options.NoReceipts); DefaultBlockProductionTrigger = new BuildBlocksRegularly(TimeSpan.FromMilliseconds(200)) .IfPoolIsNotEmpty(getFromApi.TxPool) .Or(getFromApi.ManualBlockProductionTrigger); IBlockProducer blockProducer = new DevBlockProducer( additionalTxSource.Then(txPoolTxSource).ServeTxsOneByOne(), producerChainProcessor, producerEnv.StateProvider, getFromApi.BlockTree, blockProductionTrigger ?? DefaultBlockProductionTrigger, getFromApi.Timestamper, getFromApi.SpecProvider, getFromApi.Config <IMiningConfig>(), getFromApi.LogManager); return(Task.FromResult(blockProducer)); }