예제 #1
0
        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);
        }
예제 #2
0
        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);
        }