public BlockValidator(ILogger <BlockValidator> logger, IConsensusParameters consensusParameters, IChainState chainState, IValidationRuleSet <IBlockValidationRule> blockValidationRules, IBlockValidationContextFactory blockValidationContextFactory, IPeriodicWork validationLoop, IEventBus eventBus) { _logger = logger; _validationLoop = validationLoop; _chainState = chainState; _blockValidationRules = blockValidationRules; _blockValidationContextFactory = blockValidationContextFactory; _eventBus = eventBus; _blocksToValidate = Channel.CreateUnbounded <BlockToValidate>(new UnboundedChannelOptions { SingleReader = true, SingleWriter = false }); _genesisHash = consensusParameters.GenesisHeader.Hash !; _validationLoop.Configure(false, this); }
public SynchronizationProcessor(ILogger <SynchronizationProcessor> logger, IEventBus eventBus, IDateTimeProvider dateTimeProvider, IPeerBehaviorManager peerBehaviorManager, IConsensusParameters consensusParameters, IInitialBlockDownloadTracker ibdState, IBlockHeaderHashCalculator blockHeaderHashCalculator, ITransactionHashCalculator transactionHashCalculator, IBlockFetcherManager blockFetcherManager, ILocalServiceProvider localServiceProvider, IChainState chainState, IHeaderValidator headerValidator, IBlockValidator blockValidator, IPeriodicWork headerSyncLoop, IOptions <BitcoinSettings> options) : base(logger, eventBus, peerBehaviorManager, isHandshakeAware: true, receiveMessagesOnlyIfHandshaked: true) { _dateTimeProvider = dateTimeProvider; _consensusParameters = consensusParameters; _ibdState = ibdState; _blockHeaderHashCalculator = blockHeaderHashCalculator; _transactionHashCalculator = transactionHashCalculator; _blockFetcherManager = blockFetcherManager; _localServiceProvider = localServiceProvider; _chainState = chainState; _headerValidator = headerValidator; _blockValidator = blockValidator; _headerSyncLoop = headerSyncLoop; _options = options.Value; _minimumChainWork = _options.MinimumChainWork ?? _consensusParameters.MinimumChainWork; if (_minimumChainWork < _consensusParameters.MinimumChainWork) { this.logger.LogWarning($"{nameof(_minimumChainWork)} set below default value of {_consensusParameters.MinimumChainWork}"); } headerSyncLoop.Configure(stopOnException: false, this); }