コード例 #1
0
            protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolTxSource, ISealer sealer, ITransactionComparerProvider transactionComparerProvider)
            {
                MiningConfig miningConfig = new() { MinGasPrice = UInt256.One };

                BlockProducerEnvFactory blockProducerEnvFactory = new BlockProducerEnvFactory(
                    DbProvider,
                    BlockTree,
                    ReadOnlyTrieStore,
                    SpecProvider,
                    BlockValidator,
                    NoBlockRewards.Instance,
                    ReceiptStorage,
                    BlockPreprocessorStep,
                    TxPool,
                    transactionComparerProvider,
                    miningConfig,
                    LogManager);

                UserOperationTxSource = new(UserOperationTxBuilder, UserOperationPool, UserOperationSimulator, SpecProvider, LogManager.GetClassLogger());

                Eth2TestBlockProducerFactory producerFactory = new Eth2TestBlockProducerFactory(GasLimitCalculator, UserOperationTxSource);
                Eth2BlockProducer            blockProducer   = producerFactory.Create(
                    blockProducerEnvFactory,
                    BlockTree,
                    BlockProductionTrigger,
                    SpecProvider,
                    new Eth2Signer(MinerAddress),
                    Timestamper,
                    miningConfig,
                    LogManager);

                return(blockProducer);
            }
コード例 #2
0
        public Task InitBlockProducer()
        {
            if (_mergeConfig.Enabled)
            {
                _miningConfig = _api.Config <IMiningConfig>();
                if (_api.EngineSigner == null)
                {
                    throw new ArgumentException(nameof(_api.EngineSigner));
                }
                if (_api.ChainSpec == null)
                {
                    throw new ArgumentException(nameof(_api.ChainSpec));
                }
                if (_api.BlockTree == null)
                {
                    throw new ArgumentException(nameof(_api.BlockTree));
                }
                if (_api.BlockProcessingQueue == null)
                {
                    throw new ArgumentException(nameof(_api.BlockProcessingQueue));
                }
                if (_api.StateProvider == null)
                {
                    throw new ArgumentException(nameof(_api.StateProvider));
                }
                if (_api.SpecProvider == null)
                {
                    throw new ArgumentException(nameof(_api.SpecProvider));
                }
                if (_api.BlockValidator == null)
                {
                    throw new ArgumentException(nameof(_api.BlockValidator));
                }
                if (_api.RewardCalculatorSource == null)
                {
                    throw new ArgumentException(nameof(_api.RewardCalculatorSource));
                }
                if (_api.ReceiptStorage == null)
                {
                    throw new ArgumentException(nameof(_api.ReceiptStorage));
                }
                if (_api.TxPool == null)
                {
                    throw new ArgumentException(nameof(_api.TxPool));
                }
                if (_api.DbProvider == null)
                {
                    throw new ArgumentException(nameof(_api.DbProvider));
                }
                if (_api.ReadOnlyTrieStore == null)
                {
                    throw new ArgumentException(nameof(_api.ReadOnlyTrieStore));
                }

                ILogger logger = _api.LogManager.GetClassLogger();
                if (logger.IsWarn)
                {
                    logger.Warn("Starting ETH2 block producer & sealer");
                }

                _api.BlockProducer = _blockProducer = new Eth2BlockProducerFactory().Create(
                    _api.BlockTree,
                    _api.DbProvider,
                    _api.ReadOnlyTrieStore,
                    _api.BlockPreprocessor,
                    _api.TxPool,
                    _api.BlockValidator,
                    _api.RewardCalculatorSource,
                    _api.ReceiptStorage,
                    _api.BlockProcessingQueue,
                    _api.SpecProvider,
                    _api.EngineSigner,
                    _miningConfig,
                    _api.LogManager
                    );
            }

            return(Task.CompletedTask);
        }
コード例 #3
0
        public Task <IBlockProducer> InitBlockProducer(IBlockProductionTrigger?blockProductionTrigger = null, ITxSource?additionalTxSource = null)
        {
            if (_mergeConfig.Enabled)
            {
                _miningConfig = _api.Config <IMiningConfig>();
                if (_api.EngineSigner == null)
                {
                    throw new ArgumentNullException(nameof(_api.EngineSigner));
                }
                if (_api.ChainSpec == null)
                {
                    throw new ArgumentNullException(nameof(_api.ChainSpec));
                }
                if (_api.BlockTree == null)
                {
                    throw new ArgumentNullException(nameof(_api.BlockTree));
                }
                if (_api.BlockProcessingQueue == null)
                {
                    throw new ArgumentNullException(nameof(_api.BlockProcessingQueue));
                }
                if (_api.StateProvider == null)
                {
                    throw new ArgumentNullException(nameof(_api.StateProvider));
                }
                if (_api.SpecProvider == null)
                {
                    throw new ArgumentNullException(nameof(_api.SpecProvider));
                }
                if (_api.BlockValidator == null)
                {
                    throw new ArgumentNullException(nameof(_api.BlockValidator));
                }
                if (_api.RewardCalculatorSource == null)
                {
                    throw new ArgumentNullException(nameof(_api.RewardCalculatorSource));
                }
                if (_api.ReceiptStorage == null)
                {
                    throw new ArgumentNullException(nameof(_api.ReceiptStorage));
                }
                if (_api.TxPool == null)
                {
                    throw new ArgumentNullException(nameof(_api.TxPool));
                }
                if (_api.DbProvider == null)
                {
                    throw new ArgumentNullException(nameof(_api.DbProvider));
                }
                if (_api.ReadOnlyTrieStore == null)
                {
                    throw new ArgumentNullException(nameof(_api.ReadOnlyTrieStore));
                }

                ILogger logger = _api.LogManager.GetClassLogger();
                if (logger.IsWarn)
                {
                    logger.Warn("Starting ETH2 block producer & sealer");
                }

                _manualTimestamper ??= new ManualTimestamper();
                _api.BlockProducer = _blockProducer = new Eth2BlockProducerFactory(additionalTxSource).Create(
                    _api.BlockProducerEnvFactory,
                    _api.BlockTree,
                    blockProductionTrigger ?? DefaultBlockProductionTrigger,
                    _api.SpecProvider,
                    _api.EngineSigner,
                    _manualTimestamper,
                    _miningConfig,
                    _api.LogManager
                    );
            }

            return(Task.FromResult((IBlockProducer)_blockProducer));
        }