コード例 #1
0
        public ReadOnlyChainProcessingEnv(
            ReadOnlyTxProcessingEnv txEnv,
            IBlockValidator blockValidator,
            IBlockPreprocessorStep recoveryStep,
            IRewardCalculator rewardCalculator,
            IReceiptStorage receiptStorage,
            IReadOnlyDbProvider dbProvider,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _txEnv = txEnv;

            BlockProcessor = new BlockProcessor(
                specProvider,
                blockValidator,
                rewardCalculator,
                _txEnv.TransactionProcessor,
                StateProvider,
                _txEnv.StorageProvider,
                NullTxPool.Instance,
                receiptStorage,
                NullWitnessCollector.Instance,
                logManager);

            _blockProcessingQueue = new BlockchainProcessor(_txEnv.BlockTree, BlockProcessor, recoveryStep, logManager, BlockchainProcessor.Options.NoReceipts);
            BlockProcessingQueue  = _blockProcessingQueue;
            ChainProcessor        = new OneTimeChainProcessor(dbProvider, _blockProcessingQueue);
        }
コード例 #2
0
        public UserOperationSimulator(
            IUserOperationTxBuilder userOperationTxBuilder,
            IStateProvider stateProvider,
            IStateReader stateReader,
            AbiDefinition entryPointContractAbi,
            Address create2FactoryAddress,
            Address entryPointContractAddress,
            ISpecProvider specProvider,
            IBlockTree blockTree,
            IDbProvider dbProvider,
            IReadOnlyTrieStore trieStore,
            ITimestamper timestamper,
            ILogManager logManager)
        {
            _userOperationTxBuilder    = userOperationTxBuilder;
            _stateProvider             = stateProvider;
            _stateReader               = stateReader;
            _entryPointContractAbi     = entryPointContractAbi;
            _create2FactoryAddress     = create2FactoryAddress;
            _entryPointContractAddress = entryPointContractAddress;
            _specProvider              = specProvider;
            _blockTree   = blockTree;
            _dbProvider  = dbProvider.AsReadOnly(false);
            _trieStore   = trieStore;
            _timestamper = timestamper;
            _logManager  = logManager;

            _abiEncoder = new AbiEncoder();
        }
コード例 #3
0
        public BeamBlockchainProcessor(
            IReadOnlyDbProvider readOnlyDbProvider,
            IBlockTree blockTree,
            ISpecProvider specProvider,
            ILogManager logManager,
            IBlockValidator blockValidator,
            IBlockPreprocessorStep recoveryStep,
            IRewardCalculatorSource rewardCalculatorSource,
            IBlockProcessingQueue processingQueue,
            ISyncModeSelector syncModeSelector)
        {
            _readOnlyDbProvider              = readOnlyDbProvider ?? throw new ArgumentNullException(nameof(readOnlyDbProvider));
            _blockValidator                  = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _recoveryStep                    = recoveryStep ?? throw new ArgumentNullException(nameof(recoveryStep));
            _rewardCalculatorSource          = rewardCalculatorSource ?? throw new ArgumentNullException(nameof(rewardCalculatorSource));
            _standardProcessorQueue          = processingQueue ?? throw new ArgumentNullException(nameof(processingQueue));
            _syncModeSelector                = syncModeSelector ?? throw new ArgumentNullException(nameof(syncModeSelector));
            _specProvider                    = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logManager                      = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _readOnlyBlockTree               = new ReadOnlyBlockTree(blockTree);
            blockTree.NewBestSuggestedBlock += OnNewBlock;
            _logger      = logManager.GetClassLogger();
            _blockAction = BeamProcess;

            _syncModeSelector.Preparing += SyncModeSelectorOnPreparing;
            _syncModeSelector.Changing  += SyncModeSelectorOnChanging;
            _syncModeSelector.Changed   += SyncModeSelectorOnChanged;
        }
コード例 #4
0
        public DebugBridge(
            IConfigProvider configProvider,
            IReadOnlyDbProvider dbProvider,
            IGethStyleTracer tracer,
            IBlockTree blockTree,
            IReceiptStorage receiptStorage,
            IReceiptsMigration receiptsMigration,
            ISpecProvider specProvider)
        {
            _configProvider    = configProvider ?? throw new ArgumentNullException(nameof(configProvider));
            _tracer            = tracer ?? throw new ArgumentNullException(nameof(tracer));
            _blockTree         = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage    = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _receiptsMigration = receiptsMigration ?? throw new ArgumentNullException(nameof(receiptsMigration));
            _specProvider      = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            dbProvider         = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            IDb blockInfosDb = dbProvider.BlockInfosDb ?? throw new ArgumentNullException(nameof(dbProvider.BlockInfosDb));
            IDb blocksDb     = dbProvider.BlocksDb ?? throw new ArgumentNullException(nameof(dbProvider.BlocksDb));
            IDb headersDb    = dbProvider.HeadersDb ?? throw new ArgumentNullException(nameof(dbProvider.HeadersDb));
            IDb receiptsDb   = dbProvider.ReceiptsDb ?? throw new ArgumentNullException(nameof(dbProvider.ReceiptsDb));
            IDb codeDb       = dbProvider.CodeDb ?? throw new ArgumentNullException(nameof(dbProvider.CodeDb));
            IDb pendingTxsDb = dbProvider.PendingTxsDb ?? throw new ArgumentNullException(nameof(dbProvider.PendingTxsDb));

            _dbMappings = new Dictionary <string, IDb>(StringComparer.InvariantCultureIgnoreCase)
            {
                { DbNames.State, dbProvider.StateDb },
                { DbNames.Storage, dbProvider.StateDb },
                { DbNames.BlockInfos, blockInfosDb },
                { DbNames.Blocks, blocksDb },
                { DbNames.Headers, headersDb },
                { DbNames.Code, codeDb },
                { DbNames.Receipts, receiptsDb },
                { DbNames.PendingTxs, pendingTxsDb },
            };
        }
コード例 #5
0
 public DebugModuleFactory(
     IDbProvider dbProvider,
     IBlockTree blockTree,
     IJsonRpcConfig jsonRpcConfig,
     IBlockValidator blockValidator,
     IBlockPreprocessorStep recoveryStep,
     IRewardCalculatorSource rewardCalculator,
     IReceiptStorage receiptStorage,
     IReceiptsMigration receiptsMigration,
     IReadOnlyTrieStore trieStore,
     IConfigProvider configProvider,
     ISpecProvider specProvider,
     ILogManager logManager)
 {
     _dbProvider             = dbProvider.AsReadOnly(false);
     _blockTree              = blockTree.AsReadOnly();
     _jsonRpcConfig          = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig));
     _blockValidator         = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
     _recoveryStep           = recoveryStep ?? throw new ArgumentNullException(nameof(recoveryStep));
     _rewardCalculatorSource = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator));
     _receiptStorage         = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _receiptsMigration      = receiptsMigration ?? throw new ArgumentNullException(nameof(receiptsMigration));
     _trieStore              = (trieStore ?? throw new ArgumentNullException(nameof(trieStore)));
     _configProvider         = configProvider ?? throw new ArgumentNullException(nameof(configProvider));
     _specProvider           = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _logManager             = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _logger = logManager.GetClassLogger();
 }
コード例 #6
0
        public DebugBridge(IConfigProvider configProvider, IReadOnlyDbProvider dbProvider, ITracer tracer, IBlockchainProcessor receiptsProcessor, IBlockTree blockTree)
        {
            receiptsProcessor.ProcessingQueueEmpty += (sender, args) => _receiptProcessedEvent.Set();
            _configProvider = configProvider ?? throw new ArgumentNullException(nameof(configProvider));
            _tracer         = tracer ?? throw new ArgumentNullException(nameof(tracer));
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            dbProvider      = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            IDb blockInfosDb = dbProvider.BlockInfosDb ?? throw new ArgumentNullException(nameof(dbProvider.BlockInfosDb));
            IDb blocksDb     = dbProvider.BlocksDb ?? throw new ArgumentNullException(nameof(dbProvider.BlocksDb));
            IDb headersDb    = dbProvider.HeadersDb ?? throw new ArgumentNullException(nameof(dbProvider.HeadersDb));
            IDb receiptsDb   = dbProvider.ReceiptsDb ?? throw new ArgumentNullException(nameof(dbProvider.ReceiptsDb));
            IDb codeDb       = dbProvider.CodeDb ?? throw new ArgumentNullException(nameof(dbProvider.CodeDb));
            IDb pendingTxsDb = dbProvider.PendingTxsDb ?? throw new ArgumentNullException(nameof(dbProvider.PendingTxsDb));
            IDb traceDb      = dbProvider.TraceDb ?? throw new ArgumentNullException(nameof(dbProvider.TraceDb));

            _dbMappings = new Dictionary <string, IDb>(StringComparer.InvariantCultureIgnoreCase)
            {
                { DbNames.State, dbProvider.StateDb },
                { DbNames.Storage, dbProvider.StateDb },
                { DbNames.BlockInfos, blockInfosDb },
                { DbNames.Blocks, blocksDb },
                { DbNames.Headers, headersDb },
                { DbNames.Code, codeDb },
                { DbNames.Receipts, receiptsDb },
                { DbNames.PendingTxs, pendingTxsDb },
                { DbNames.Trace, traceDb }
            };
        }
コード例 #7
0
        protected override BlockProcessor CreateBlockProcessor(
            ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv,
            ReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
            IReadOnlyDbProvider readOnlyDbProvider)
        {
            if (_context.RewardCalculatorSource == null)
            {
                throw new StepDependencyException(nameof(_context.RewardCalculatorSource));
            }
            if (_context.ValidatorStore == null)
            {
                throw new StepDependencyException(nameof(_context.ValidatorStore));
            }
            if (_context.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(_context.ChainSpec));
            }
            if (_context.BlockTree == null)
            {
                throw new StepDependencyException(nameof(_context.BlockTree));
            }

            var validator = new AuRaValidatorFactory(
                readOnlyTxProcessingEnv.StateProvider,
                _context.AbiEncoder,
                readOnlyTxProcessingEnv.TransactionProcessor,
                readOnlyTransactionProcessorSource,
                readOnlyTxProcessingEnv.BlockTree,
                _context.ReceiptStorage,
                _context.ValidatorStore,
                _context.FinalizationManager,
                _context.LogManager,
                true)
                            .CreateValidatorProcessor(_context.ChainSpec.AuRa.Validators, _context.BlockTree.Head?.Header);

            if (validator is IDisposable disposableValidator)
            {
                _context.DisposeStack.Push(disposableValidator);
            }

            return(new AuRaBlockProcessor(
                       _context.SpecProvider,
                       _context.BlockValidator,
                       _context.RewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor),
                       readOnlyTxProcessingEnv.TransactionProcessor,
                       readOnlyDbProvider.StateDb,
                       readOnlyDbProvider.CodeDb,
                       readOnlyTxProcessingEnv.StateProvider,
                       readOnlyTxProcessingEnv.StorageProvider,
                       _context.TxPool,
                       _context.ReceiptStorage,
                       _context.LogManager,
                       readOnlyTxProcessingEnv.BlockTree,
                       GetTxPermissionFilter(readOnlyTxProcessingEnv, readOnlyTransactionProcessorSource, readOnlyTxProcessingEnv.StateProvider),
                       GetGasLimitOverride(readOnlyTxProcessingEnv, readOnlyTransactionProcessorSource, readOnlyTxProcessingEnv.StateProvider))
            {
                AuRaValidator = validator
            });
        }
コード例 #8
0
        public ReadOnlyTxProcessingEnv(IReadOnlyDbProvider readOnlyDbProvider, ReadOnlyBlockTree readOnlyBlockTree, ISpecProvider specProvider, ILogManager logManager)
        {
            ISnapshotableDb stateDb = readOnlyDbProvider.StateDb;
            IDb             codeDb  = readOnlyDbProvider.CodeDb;

            StateReader     = new StateReader(stateDb, codeDb, logManager);
            StateProvider   = new StateProvider(stateDb, codeDb, logManager);
            StorageProvider = new StorageProvider(stateDb, StateProvider, logManager);

            BlockTree         = readOnlyBlockTree;
            BlockhashProvider = new BlockhashProvider(BlockTree, logManager);

            VirtualMachine       = new VirtualMachine(StateProvider, StorageProvider, BlockhashProvider, specProvider, logManager);
            TransactionProcessor = new TransactionProcessor(specProvider, StateProvider, StorageProvider, VirtualMachine, logManager);
        }
コード例 #9
0
        public ReadOnlyChainProcessingEnv(
            ReadOnlyTxProcessingEnv txEnv,
            IBlockValidator blockValidator,
            IBlockDataRecoveryStep recoveryStep,
            IRewardCalculator rewardCalculator,
            IReceiptStorage receiptStorage,
            IReadOnlyDbProvider dbProvider,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _txEnv = txEnv;
            IBlockProcessor blockProcessor = new BlockProcessor(specProvider, blockValidator, rewardCalculator, _txEnv.TransactionProcessor, dbProvider.StateDb, dbProvider.CodeDb, dbProvider.TraceDb, StateProvider, _txEnv.StorageProvider, NullTxPool.Instance, receiptStorage, logManager);

            Processor = new OneTimeChainProcessor(dbProvider, new BlockchainProcessor(_txEnv.BlockTree, blockProcessor, recoveryStep, logManager, false, false));
        }
コード例 #10
0
        private (IBlockchainProcessor, IStateReader) CreateProcessor(Block block, IReadOnlyDbProvider readOnlyDbProvider, ISpecProvider specProvider, ILogManager logManager)
        {
            ReadOnlyTxProcessingEnv    txEnv = new ReadOnlyTxProcessingEnv(readOnlyDbProvider, _readOnlyBlockTree, specProvider, logManager);
            ReadOnlyChainProcessingEnv env   = new ReadOnlyChainProcessingEnv(txEnv, _blockValidator, _recoveryStep, _rewardCalculatorSource.Get(txEnv.TransactionProcessor), NullReceiptStorage.Instance, _readOnlyDbProvider, specProvider, logManager);

            env.BlockProcessor.TransactionProcessed += (sender, args) =>
            {
                if (_logger.IsInfo)
                {
                    _logger.Info($"Processed tx {args.Index}/{block.Transactions.Length} of {block.Number}");
                }
            };

            return(env.ChainProcessor, txEnv.StateReader);
        }
コード例 #11
0
            public RpcState(IBlockTree blockTree, ISpecProvider specProvider, IReadOnlyDbProvider readOnlyDbProvider,
                            ILogManager logManager)
            {
                var stateDb = readOnlyDbProvider.StateDb;
                var codeDb  = readOnlyDbProvider.CodeDb;

                StateReader          = new StateReader(readOnlyDbProvider.StateDb, codeDb, logManager);
                StateProvider        = new StateProvider(stateDb, codeDb, logManager);
                StorageProvider      = new StorageProvider(stateDb, StateProvider, logManager);
                BlockTree            = new ReadOnlyBlockTree(blockTree);
                BlockhashProvider    = new BlockhashProvider(BlockTree, logManager);
                VirtualMachine       = new VirtualMachine(StateProvider, StorageProvider, BlockhashProvider, logManager);
                TransactionProcessor = new TransactionProcessor(specProvider, StateProvider, StorageProvider,
                                                                VirtualMachine, logManager);
            }
コード例 #12
0
        private (IBlockchainProcessor, IStateReader) CreateProcessor(Block block, IReadOnlyDbProvider readOnlyDbProvider, ISpecProvider specProvider, ILogManager logManager)
        {
            // TODO: need to pass the state with cache
            ReadOnlyTxProcessingEnv    txEnv = new(readOnlyDbProvider, new TrieStore(readOnlyDbProvider.StateDb, logManager).AsReadOnly(), _readOnlyBlockTree, specProvider, logManager);
            ReadOnlyChainProcessingEnv env   = new(txEnv, _blockValidator, _recoveryStep, _rewardCalculatorSource.Get(txEnv.TransactionProcessor), NullReceiptStorage.Instance, _readOnlyDbProvider, specProvider, logManager);

            env.BlockProcessor.TransactionProcessed += (_, args) =>
            {
                Interlocked.Increment(ref Metrics.BeamedTransactions);
                if (_logger.IsInfo)
                {
                    _logger.Info($"Processed tx {args.Index + 1}/{block.Transactions?.Length} of {block.Number}");
                }
            };

            return(env.ChainProcessor, txEnv.StateReader);
        }
コード例 #13
0
        public ReadOnlyTxProcessingEnv(
            IReadOnlyDbProvider readOnlyDbProvider,
            ReadOnlyTrieStore readOnlyTrieStore,
            ReadOnlyBlockTree readOnlyBlockTree,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            DbProvider = readOnlyDbProvider;
            _codeDb    = readOnlyDbProvider.CodeDb.AsReadOnly(true);

            StateReader     = new StateReader(readOnlyTrieStore, _codeDb, logManager);
            StateProvider   = new StateProvider(readOnlyTrieStore, _codeDb, logManager);
            StorageProvider = new StorageProvider(readOnlyTrieStore, StateProvider, logManager);

            BlockTree         = readOnlyBlockTree;
            BlockhashProvider = new BlockhashProvider(BlockTree, logManager);

            Machine = new VirtualMachine(StateProvider, StorageProvider, BlockhashProvider, specProvider, logManager);
            TransactionProcessor = new TransactionProcessor(specProvider, StateProvider, StorageProvider, Machine, logManager);
        }
コード例 #14
0
        public DebugBridge(IReadOnlyDbProvider dbProvider, ITracer tracer, IBlockchainProcessor receiptsProcessor)
        {
            _receiptsProcessor = receiptsProcessor ?? throw new ArgumentNullException(nameof(receiptsProcessor));
            _receiptsProcessor.ProcessingQueueEmpty += (sender, args) => _receiptProcessedEvent.Set();
            _tracer    = tracer ?? throw new ArgumentNullException(nameof(tracer));
            dbProvider = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            IDb blockInfosDb = dbProvider.BlockInfosDb ?? throw new ArgumentNullException(nameof(dbProvider.BlockInfosDb));
            IDb blocksDb     = dbProvider.BlocksDb ?? throw new ArgumentNullException(nameof(dbProvider.BlocksDb));
            IDb receiptsDb   = dbProvider.ReceiptsDb ?? throw new ArgumentNullException(nameof(dbProvider.ReceiptsDb));
            IDb codeDb       = dbProvider.CodeDb ?? throw new ArgumentNullException(nameof(dbProvider.CodeDb));

            _dbMappings = new Dictionary <string, IDb>(StringComparer.InvariantCultureIgnoreCase)
            {
                { DbNames.State, dbProvider.StateDb },
                { DbNames.Storage, dbProvider.StateDb },
                { DbNames.BlockInfos, blockInfosDb },
                { DbNames.Blocks, blocksDb },
                { DbNames.Code, codeDb },
                { DbNames.Receipts, receiptsDb }
            };
        }
コード例 #15
0
 public AlternativeChain(
     IBlockTree blockTree,
     IBlockValidator blockValidator,
     IRewardCalculator rewardCalculator,
     ISpecProvider specProvider,
     IReadOnlyDbProvider dbProvider,
     IBlockDataRecoveryStep recoveryStep,
     ILogManager logManager,
     ITransactionPool customTransactionPool,
     IReceiptStorage receiptStorage)
 {
     StateProvider = new StateProvider(new StateTree(dbProvider.StateDb), dbProvider.CodeDb, logManager);
     StorageProvider storageProvider = new StorageProvider(dbProvider.StateDb, StateProvider, logManager);
     IBlockTree readOnlyTree = new ReadOnlyBlockTree(blockTree);
     BlockhashProvider blockhashProvider = new BlockhashProvider(readOnlyTree);
     VirtualMachine virtualMachine = new VirtualMachine(StateProvider, storageProvider, blockhashProvider, logManager);
     ITransactionProcessor transactionProcessor = new TransactionProcessor(specProvider, StateProvider, storageProvider, virtualMachine, logManager);
     ITransactionPool transactionPool = customTransactionPool;
     IBlockProcessor blockProcessor = new BlockProcessor(specProvider, blockValidator, rewardCalculator, transactionProcessor, dbProvider.StateDb, dbProvider.CodeDb, dbProvider.TraceDb, StateProvider, storageProvider, transactionPool, receiptStorage, logManager);
     Processor = new BlockchainProcessor(readOnlyTree, blockProcessor, recoveryStep, logManager, false, false);
 }
コード例 #16
0
        public ReadOnlyChain(
            ReadOnlyBlockTree readOnlyTree,
            IBlockValidator blockValidator,
            IRewardCalculator rewardCalculator,
            ISpecProvider specProvider,
            IReadOnlyDbProvider dbProvider,
            IBlockDataRecoveryStep recoveryStep,
            ILogManager logManager,
            ITxPool customTxPool,
            IReceiptStorage receiptStorage)
        {
            ReadOnlyStateProvider = new StateProvider(dbProvider.StateDb, dbProvider.CodeDb, logManager);
            StorageProvider       storageProvider      = new StorageProvider(dbProvider.StateDb, ReadOnlyStateProvider, logManager);
            BlockhashProvider     blockhashProvider    = new BlockhashProvider(readOnlyTree, logManager);
            VirtualMachine        virtualMachine       = new VirtualMachine(ReadOnlyStateProvider, storageProvider, blockhashProvider, specProvider, logManager);
            ITransactionProcessor transactionProcessor = new TransactionProcessor(specProvider, ReadOnlyStateProvider, storageProvider, virtualMachine, logManager);
            ITxPool         txPool         = customTxPool;
            IBlockProcessor blockProcessor = new BlockProcessor(specProvider, blockValidator, rewardCalculator, transactionProcessor, dbProvider.StateDb, dbProvider.CodeDb, dbProvider.TraceDb, ReadOnlyStateProvider, storageProvider, txPool, receiptStorage, logManager);

            Processor = new OneTimeChainProcessor(dbProvider, new BlockchainProcessor(readOnlyTree, blockProcessor, recoveryStep, logManager, false, false));
        }
コード例 #17
0
        protected virtual BlockProcessor CreateBlockProcessor(
            ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv,
            ReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
            IReadOnlyDbProvider readOnlyDbProvider)
        {
            if (_context.SpecProvider == null)
            {
                throw new StepDependencyException(nameof(_context.SpecProvider));
            }
            if (_context.BlockValidator == null)
            {
                throw new StepDependencyException(nameof(_context.BlockValidator));
            }
            if (_context.RewardCalculatorSource == null)
            {
                throw new StepDependencyException(nameof(_context.RewardCalculatorSource));
            }
            if (_context.ReceiptStorage == null)
            {
                throw new StepDependencyException(nameof(_context.ReceiptStorage));
            }
            if (_context.TxPool == null)
            {
                throw new StepDependencyException(nameof(_context.TxPool));
            }

            return(new BlockProcessor(
                       _context.SpecProvider,
                       _context.BlockValidator,
                       _context.RewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor),
                       readOnlyTxProcessingEnv.TransactionProcessor,
                       readOnlyDbProvider.StateDb,
                       readOnlyDbProvider.CodeDb,
                       readOnlyTxProcessingEnv.StateProvider,
                       readOnlyTxProcessingEnv.StorageProvider,
                       _context.TxPool,
                       _context.ReceiptStorage,
                       _context.LogManager));
        }
コード例 #18
0
        protected virtual BlockProcessor CreateBlockProcessor(
            ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            IReadOnlyDbProvider readOnlyDbProvider)
        {
            if (_api.SpecProvider == null)
            {
                throw new StepDependencyException(nameof(_api.SpecProvider));
            }
            if (_api.BlockValidator == null)
            {
                throw new StepDependencyException(nameof(_api.BlockValidator));
            }
            if (_api.RewardCalculatorSource == null)
            {
                throw new StepDependencyException(nameof(_api.RewardCalculatorSource));
            }
            if (_api.ReceiptStorage == null)
            {
                throw new StepDependencyException(nameof(_api.ReceiptStorage));
            }
            if (_api.TxPool == null)
            {
                throw new StepDependencyException(nameof(_api.TxPool));
            }

            return(new BlockProcessor(
                       _api.SpecProvider,
                       _api.BlockValidator,
                       _api.RewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor),
                       readOnlyTxProcessingEnv.TransactionProcessor,
                       readOnlyTxProcessingEnv.StateProvider,
                       readOnlyTxProcessingEnv.StorageProvider,
                       _api.TxPool,
                       _api.ReceiptStorage,
                       NullWitnessCollector.Instance,
                       _api.LogManager));
        }
コード例 #19
0
 public BeamBlockchainProcessor(
     IReadOnlyDbProvider readOnlyDbProvider,
     IBlockTree blockTree,
     ISpecProvider specProvider,
     ILogManager logManager,
     IBlockValidator blockValidator,
     IBlockDataRecoveryStep recoveryStep,
     IRewardCalculatorSource rewardCalculatorSource,
     IBlockProcessingQueue blockchainProcessor)
 {
     _readOnlyDbProvider     = readOnlyDbProvider ?? throw new ArgumentNullException(nameof(readOnlyDbProvider));
     _blockValidator         = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
     _recoveryStep           = recoveryStep ?? throw new ArgumentNullException(nameof(recoveryStep));
     _rewardCalculatorSource = rewardCalculatorSource ?? throw new ArgumentNullException(nameof(rewardCalculatorSource));
     _blockchainProcessor    = blockchainProcessor ?? throw new ArgumentNullException(nameof(blockchainProcessor));
     _blockTree         = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _specProvider      = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _logManager        = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _readOnlyBlockTree = new ReadOnlyBlockTree(_blockTree);
     _logger            = logManager.GetClassLogger();
     _blockTree.NewBestSuggestedBlock += OnNewBlock;
     _blockTree.NewHeadBlock          += BlockTreeOnNewHeadBlock;
 }
コード例 #20
0
        protected override BlockProcessor CreateBlockProcessor(
            ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            IReadOnlyDbProvider readOnlyDbProvider)
        {
            if (_api.RewardCalculatorSource == null)
            {
                throw new StepDependencyException(nameof(_api.RewardCalculatorSource));
            }
            if (_api.ValidatorStore == null)
            {
                throw new StepDependencyException(nameof(_api.ValidatorStore));
            }
            if (_api.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(_api.ChainSpec));
            }
            if (_api.BlockTree == null)
            {
                throw new StepDependencyException(nameof(_api.BlockTree));
            }
            if (_api.EngineSigner == null)
            {
                throw new StepDependencyException(nameof(_api.EngineSigner));
            }

            var chainSpecAuRa = _api.ChainSpec.AuRa;

            _txPermissionFilter = TxFilterBuilders.CreateTxPermissionFilter(_api, readOnlyTxProcessorSource);

            _validator = new AuRaValidatorFactory(
                readOnlyTxProcessingEnv.StateProvider,
                _api.AbiEncoder,
                readOnlyTxProcessingEnv.TransactionProcessor,
                readOnlyTxProcessorSource,
                readOnlyTxProcessingEnv.BlockTree,
                _api.ReceiptStorage,
                _api.ValidatorStore,
                _api.FinalizationManager,
                NullTxSender.Instance,
                NullTxPool.Instance,
                NethermindApi.Config <IMiningConfig>(),
                _api.LogManager,
                _api.EngineSigner,
                _api.ReportingContractValidatorCache,
                chainSpecAuRa.PosdaoTransition,
                true)
                         .CreateValidatorProcessor(chainSpecAuRa.Validators, _api.BlockTree.Head?.Header);

            if (_validator is IDisposable disposableValidator)
            {
                _api.DisposeStack.Push(disposableValidator);
            }

            return(new AuRaBlockProcessor(
                       _api.SpecProvider,
                       _api.BlockValidator,
                       _api.RewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor),
                       readOnlyTxProcessingEnv.TransactionProcessor,
                       readOnlyTxProcessingEnv.StateProvider,
                       readOnlyTxProcessingEnv.StorageProvider,
                       NullTxPool.Instance,
                       _api.ReceiptStorage,
                       _api.LogManager,
                       readOnlyTxProcessingEnv.BlockTree,
                       _txPermissionFilter,
                       CreateGasLimitCalculator(readOnlyTxProcessorSource) as AuRaContractGasLimitOverride)
            {
                AuRaValidator = _validator
            });
        }
コード例 #21
0
        protected override BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, IReadOnlyDbProvider readOnlyDbProvider)
        {
            if (_context.RewardCalculatorSource == null)
            {
                throw new StepDependencyException(nameof(_context.RewardCalculatorSource));
            }
            if (_context.ValidatorStore == null)
            {
                throw new StepDependencyException(nameof(_context.ValidatorStore));
            }
            if (_context.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(_context.ChainSpec));
            }

            var validator = new AuRaValidatorProcessorFactory(
                readOnlyTxProcessingEnv.StateProvider,
                new AbiEncoder(),
                readOnlyTxProcessingEnv.TransactionProcessor,
                new ReadOnlyTransactionProcessorSource(readOnlyTxProcessingEnv),
                readOnlyTxProcessingEnv.BlockTree,
                _context.ReceiptStorage,
                _context.ValidatorStore,
                _context.LogManager)
                            .CreateValidatorProcessor(_context.ChainSpec.AuRa.Validators);

            var blockProducer = new AuRaBlockProcessor(
                _context.SpecProvider,
                _context.BlockValidator,
                _context.RewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor),
                readOnlyTxProcessingEnv.TransactionProcessor,
                readOnlyDbProvider.StateDb,
                readOnlyDbProvider.CodeDb,
                readOnlyTxProcessingEnv.StateProvider,
                readOnlyTxProcessingEnv.StorageProvider,
                _context.TxPool,
                _context.ReceiptStorage,
                _context.LogManager,
                validator);

            validator.SetFinalizationManager(_context.FinalizationManager, true);

            return(blockProducer);
        }
コード例 #22
0
 public OneTimeProcessor(IReadOnlyDbProvider readOnlyDbProvider, IBlockchainProcessor processor)
 {
     _readOnlyDbProvider = readOnlyDbProvider ?? throw new ArgumentNullException(nameof(readOnlyDbProvider));
     _processor          = processor ?? throw new ArgumentNullException(nameof(processor));
 }