예제 #1
0
 public EthModuleFactory(
     ITxPool txPool,
     ITxSender txSender,
     IWallet wallet,
     IBlockTree blockTree,
     IJsonRpcConfig config,
     ILogManager logManager,
     IStateReader stateReader,
     IBlockchainBridgeFactory blockchainBridgeFactory,
     ISpecProvider specProvider,
     IReceiptStorage receiptStorage,
     IGasPriceOracle gasPriceOracle,
     IEthSyncingInfo ethSyncingInfo)
 {
     _txPool                  = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _txSender                = txSender ?? throw new ArgumentNullException(nameof(txSender));
     _wallet                  = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _rpcConfig               = config ?? throw new ArgumentNullException(nameof(config));
     _logManager              = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _stateReader             = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _blockchainBridgeFactory = blockchainBridgeFactory ?? throw new ArgumentNullException(nameof(blockchainBridgeFactory));
     _specProvider            = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _ethSyncingInfo          = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
     _receiptStorage          = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _gasPriceOracle          = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle));
     _blockTree               = blockTree.AsReadOnly();
 }
예제 #2
0
 public EthRpcModule(
     IJsonRpcConfig rpcConfig,
     IBlockchainBridge blockchainBridge,
     IBlockFinder blockFinder,
     IStateReader stateReader,
     ITxPool txPool,
     ITxSender txSender,
     IWallet wallet,
     IReceiptFinder receiptFinder,
     ILogManager logManager,
     ISpecProvider specProvider,
     IGasPriceOracle gasPriceOracle,
     IEthSyncingInfo ethSyncingInfo,
     IFeeHistoryOracle feeHistoryOracle)
 {
     _logger           = logManager.GetClassLogger();
     _rpcConfig        = rpcConfig ?? throw new ArgumentNullException(nameof(rpcConfig));
     _blockchainBridge = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge));
     _blockFinder      = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder));
     _stateReader      = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _txPoolBridge     = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _txSender         = txSender ?? throw new ArgumentNullException(nameof(txSender));
     _wallet           = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _receiptFinder    = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder));;
     _specProvider     = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _gasPriceOracle   = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle));
     _ethSyncingInfo   = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
     _feeHistoryOracle = feeHistoryOracle ?? throw new ArgumentNullException(nameof(feeHistoryOracle));
 }
        public SyncingSubscription(
            IJsonRpcDuplexClient jsonRpcDuplexClient,
            IBlockTree?blockTree,
            IEthSyncingInfo ethSyncingInfo,
            ILogManager?logManager)
            : base(jsonRpcDuplexClient)
        {
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
            _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _lastIsSyncing = _ethSyncingInfo.IsSyncing();
            if (_logger.IsTrace)
            {
                _logger.Trace($"Syncing subscription {Id}: Syncing status on start is {_lastIsSyncing}");
            }

            _blockTree.NewBestSuggestedBlock += OnConditionsChange;
            if (_logger.IsTrace)
            {
                _logger.Trace($"Syncing subscription {Id} will track NewBestSuggestedBlocks");
            }

            _blockTree.NewHeadBlock += OnConditionsChange;
            if (_logger.IsTrace)
            {
                _logger.Trace($"Syncing subscription {Id} will track NewHeadBlocks");
            }
        }
예제 #4
0
 public SubscriptionFactory(
     ILogManager?logManager,
     IBlockTree?blockTree,
     ITxPool?txPool,
     IReceiptStorage?receiptStorage,
     IFilterStore?filterStore,
     IEthSyncingInfo ethSyncingInfo,
     ISpecProvider specProvider)
 {
     _logManager     = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _txPool         = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore    = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
     _specProvider   = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
 }
            protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolTxSource, ISealer sealer, ITransactionComparerProvider transactionComparerProvider)
            {
                SealEngine = new MergeSealEngine(SealEngine, PoSSwitcher, SealValidator, LogManager);
                IBlockProducer preMergeBlockProducer =
                    base.CreateTestBlockProducer(txPoolTxSource, sealer, transactionComparerProvider);
                MiningConfig miningConfig = new() { Enabled = true, MinGasPrice = 0 };
                TargetAdjustedGasLimitCalculator targetAdjustedGasLimitCalculator = new(SpecProvider, miningConfig);

                EthSyncingInfo = new EthSyncingInfo(BlockTree);
                PostMergeBlockProducerFactory?blockProducerFactory = new(
                    SpecProvider,
                    SealEngine,
                    Timestamper,
                    miningConfig,
                    LogManager,
                    targetAdjustedGasLimitCalculator);

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


                BlockProducerEnv       blockProducerEnv       = blockProducerEnvFactory.Create();
                PostMergeBlockProducer?postMergeBlockProducer = blockProducerFactory.Create(
                    blockProducerEnv, BlockProductionTrigger);

                PostMergeBlockProducer = postMergeBlockProducer;
                PayloadPreparationService ??= new PayloadPreparationService(
                    postMergeBlockProducer,
                    new BlockImprovementContextFactory(BlockProductionTrigger, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot)),
                    TimerFactory.Default,
                    LogManager,
                    TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot));
                return(new MergeBlockProducer(preMergeBlockProducer, postMergeBlockProducer, PoSSwitcher));
            }
예제 #6
0
 public EthStatsIntegration(
     string name,
     string node,
     int port,
     string network,
     string protocol,
     string api,
     string client,
     string contact,
     bool canUpdateHistory,
     string secret,
     IEthStatsClient?ethStatsClient,
     IMessageSender?sender,
     ITxPool?txPool,
     IBlockTree?blockTree,
     IPeerManager?peerManager,
     IGasPriceOracle?gasPriceOracle,
     IEthSyncingInfo ethSyncingInfo,
     bool isMining,
     ILogManager?logManager)
 {
     _name             = name;
     _node             = node;
     _port             = port;
     _network          = network;
     _protocol         = protocol;
     _api              = api;
     _client           = client;
     _contact          = contact;
     _canUpdateHistory = canUpdateHistory;
     _secret           = secret;
     _ethStatsClient   = ethStatsClient ?? throw new ArgumentNullException(nameof(ethStatsClient));
     _sender           = sender ?? throw new ArgumentNullException(nameof(sender));
     _txPool           = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _blockTree        = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _peerManager      = peerManager ?? throw new ArgumentNullException(nameof(peerManager));
     _gasPriceOracle   = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle));
     _ethSyncingInfo   = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
     _isMining         = isMining;
     _logger           = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
예제 #7
0
        public SubscriptionFactory(ILogManager?logManager,
                                   IBlockTree?blockTree,
                                   ITxPool?txPool,
                                   IReceiptStorage?receiptStorage,
                                   IFilterStore?filterStore,
                                   IEthSyncingInfo ethSyncingInfo,
                                   ISpecProvider specProvider,
                                   JsonSerializer jsonSerializer)
        {
            _jsonSerializer = jsonSerializer;
            logManager      = logManager ?? throw new ArgumentNullException(nameof(logManager));
            blockTree       = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            txPool          = txPool ?? throw new ArgumentNullException(nameof(txPool));
            receiptStorage  = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            filterStore     = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
            ethSyncingInfo  = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
            specProvider    = specProvider ?? throw new ArgumentNullException(nameof(specProvider));

            _subscriptionConstructors = new ConcurrentDictionary <string, CustomSubscriptionType> {
                //Register the standard subscription types in the dictionary.
                [SubscriptionType.NewHeads] = CreateSubscriptionType <TransactionsOption?>((jsonRpcDuplexClient, args) =>
                                                                                           new NewHeadSubscription(jsonRpcDuplexClient, blockTree, logManager, specProvider, args)),

                [SubscriptionType.Logs] = CreateSubscriptionType <Filter?>((jsonRpcDuplexClient, filter) =>
                                                                           new LogsSubscription(jsonRpcDuplexClient, receiptStorage, filterStore, blockTree, logManager, filter)),

                [SubscriptionType.NewPendingTransactions] = CreateSubscriptionType <TransactionsOption?>((jsonRpcDuplexClient, args) =>
                                                                                                         new NewPendingTransactionsSubscription(jsonRpcDuplexClient, txPool, logManager, args)),

                [SubscriptionType.DroppedPendingTransactions] = CreateSubscriptionType(jsonRpcDuplexClient =>
                                                                                       new DroppedPendingTransactionsSubscription(jsonRpcDuplexClient, txPool, logManager)),

                [SubscriptionType.Syncing] = CreateSubscriptionType(jsonRpcDuplexClient =>
                                                                    new SyncingSubscription(jsonRpcDuplexClient, blockTree, ethSyncingInfo, logManager))
            };
        }