Ejemplo n.º 1
0
        public EthModuleFactory(IDbProvider dbProvider,
                                ITxPool txPool,
                                IWallet wallet,
                                IJsonRpcConfig jsonRpcConfig,
                                IBlockTree blockTree,
                                IEthereumEcdsa ethereumEcdsa,
                                IBlockProcessor blockProcessor,
                                IReceiptFinder receiptFinder,
                                ISpecProvider specProvider,
                                IJsonRpcConfig config,
                                IBloomStorage bloomStorage,
                                ILogManager logManager,
                                bool isMining)
        {
            _dbProvider    = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            _txPool        = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _wallet        = wallet ?? throw new ArgumentNullException(nameof(wallet));
            _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(wallet));
            _blockTree     = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _ethereumEcdsa = ethereumEcdsa ?? throw new ArgumentNullException(nameof(ethereumEcdsa));
            _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder));
            _specProvider  = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _rpcConfig     = config ?? throw new ArgumentNullException(nameof(config));
            _bloomStorage  = bloomStorage ?? throw new ArgumentNullException(nameof(bloomStorage));
            _logManager    = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _isMining      = isMining;

            _filterStore   = new FilterStore();
            _filterManager = new FilterManager(_filterStore, blockProcessor, _txPool, _logManager);
        }
Ejemplo n.º 2
0
        public virtual async Task<INdmCapabilityConnector> InitAsync(IConfigProvider configProvider,
            IDbProvider dbProvider, string baseDbPath, IBlockTree blockTree,
            ITxPool txPool, ISpecProvider specProvider, IReceiptStorage receiptStorage, IWallet wallet,
            IFilterStore filterStore, IFilterManager filterManager,
            ITimestamper timestamper, IEthereumEcdsa ecdsa, IRpcModuleProvider rpcModuleProvider, IKeyStore keyStore,
            IJsonSerializer jsonSerializer, ICryptoRandom cryptoRandom, IEnode enode,
            INdmConsumerChannelManager consumerChannelManager, INdmDataPublisher dataPublisher, IGrpcServer grpcServer,
            INodeStatsManager nodeStatsManager, IProtocolsManager protocolsManager,
            IProtocolValidator protocolValidator, IMessageSerializationService messageSerializationService,
            bool enableUnsecuredDevWallet, IWebSocketsManager webSocketsManager, ILogManager logManager,
            IBlockProcessor blockProcessor)
        {
            var (config, services, faucet, accountService, consumerService, consumerAddress, providerAddress) =
                await PreInitAsync(configProvider, dbProvider, baseDbPath, blockTree, txPool, specProvider,
                    receiptStorage, wallet, filterStore, filterManager, timestamper, ecdsa, rpcModuleProvider, keyStore,
                    jsonSerializer, cryptoRandom, enode, consumerChannelManager, dataPublisher, grpcServer,
                    enableUnsecuredDevWallet, webSocketsManager, logManager, blockProcessor);
            if (!config.Enabled)
            {
                return default;
            }

            var subprotocolFactory = new NdmSubprotocolFactory(messageSerializationService, nodeStatsManager,
                logManager, accountService, consumerService, consumerChannelManager, ecdsa, wallet, faucet,
                enode.PublicKey, providerAddress, consumerAddress, config.VerifyP2PSignature);
            var protocolHandlerFactory = new ProtocolHandlerFactory(subprotocolFactory, protocolValidator,
                services.RequiredServices.EthRequestService, logManager);
            var capabilityConnector = new NdmCapabilityConnector(protocolsManager, protocolHandlerFactory,
                accountService, logManager);

            return capabilityConnector;
        }
Ejemplo n.º 3
0
 public BlockchainBridge(
     IStateReader stateReader,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     IBlockTree blockTree,
     ITxPool txPool,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITransactionProcessor transactionProcessor,
     IEthereumEcdsa ecdsa,
     IBloomStorage bloomStorage,
     IReceiptsRecovery receiptsRecovery,
     int findLogBlockDepthLimit = 1000)
 {
     _stateReader          = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _storageProvider      = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
     _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 ArgumentException(nameof(filterStore));
     _filterManager        = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _wallet               = wallet ?? throw new ArgumentException(nameof(wallet));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentException(nameof(transactionProcessor));
     _ecdsa     = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _logFinder = new LogFinder(_blockTree, _receiptStorage, bloomStorage, receiptsRecovery, findLogBlockDepthLimit);
 }
Ejemplo n.º 4
0
        public async Task SetUp()
        {
            _dbProvider = await TestMemDbProvider.InitAsync();

            _timestamper          = new ManualTimestamper();
            _blockTree            = Substitute.For <IBlockTree>();
            _txPool               = Substitute.For <ITxPool>();
            _receiptStorage       = Substitute.For <IReceiptStorage>();
            _filterStore          = Substitute.For <IFilterStore>();
            _filterManager        = Substitute.For <IFilterManager>();
            _transactionProcessor = Substitute.For <ITransactionProcessor>();
            _ethereumEcdsa        = Substitute.For <IEthereumEcdsa>();
            _specProvider         = MainnetSpecProvider.Instance;

            ReadOnlyTxProcessingEnv processingEnv = new ReadOnlyTxProcessingEnv(
                new ReadOnlyDbProvider(_dbProvider, false),
                new TrieStore(_dbProvider.StateDb, LimboLogs.Instance).AsReadOnly(),
                new ReadOnlyBlockTree(_blockTree),
                _specProvider,
                LimboLogs.Instance);

            processingEnv.TransactionProcessor = _transactionProcessor;

            _blockchainBridge = new BlockchainBridge(
                processingEnv,
                _txPool,
                _receiptStorage,
                _filterStore,
                _filterManager,
                _ethereumEcdsa,
                _timestamper,
                Substitute.For <ILogFinder>(),
                false,
                false);
        }
Ejemplo n.º 5
0
 public void SetUp()
 {
     _stateReader          = Substitute.For <IStateReader>();
     _stateProvider        = Substitute.For <IStateProvider>();
     _storageProvider      = Substitute.For <IStorageProvider>();
     _blockTree            = Substitute.For <IBlockTree>();
     _txPool               = Substitute.For <ITxPool>();
     _receiptStorage       = Substitute.For <IReceiptStorage>();
     _filterStore          = Substitute.For <IFilterStore>();
     _filterManager        = Substitute.For <IFilterManager>();
     _wallet               = Substitute.For <IWallet>();
     _transactionProcessor = Substitute.For <ITransactionProcessor>();
     _ethereumEcdsa        = Substitute.For <IEthereumEcdsa>();
     _bloomStorage         = Substitute.For <IBloomStorage>();
     _receiptsRecovery     = Substitute.For <IReceiptsRecovery>();
     _blockchainBridge     = new BlockchainBridge(
         _stateReader,
         _stateProvider,
         _storageProvider,
         _blockTree,
         _txPool,
         _receiptStorage,
         _filterStore,
         _filterManager,
         _wallet,
         _transactionProcessor,
         _ethereumEcdsa,
         _bloomStorage,
         _receiptsRecovery);
 }
Ejemplo n.º 6
0
 public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv,
                         ITxPool?txPool,
                         IReceiptFinder?receiptStorage,
                         IFilterStore?filterStore,
                         IFilterManager?filterManager,
                         IEthereumEcdsa?ecdsa,
                         ITimestamper?timestamper,
                         ILogFinder?logFinder,
                         ISpecProvider specProvider,
                         bool isMining)
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentNullException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentNullException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _logFinder     = logFinder ?? throw new ArgumentNullException(nameof(logFinder));
     _specProvider  = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     IsMining       = isMining;
 }
Ejemplo n.º 7
0
        public void Setup()
        {
            _logManager          = Substitute.For <ILogManager>();
            _blockTree           = Substitute.For <IBlockTree>();
            _txPool              = Substitute.For <ITxPool>();
            _receiptStorage      = Substitute.For <IReceiptStorage>();
            _filterStore         = new FilterStore();
            _jsonRpcDuplexClient = Substitute.For <IJsonRpcDuplexClient>();
            _jsonSerializer      = new EthereumJsonSerializer();

            SubscriptionFactory subscriptionFactory = new SubscriptionFactory(
                _logManager,
                _blockTree,
                _txPool,
                _receiptStorage,
                _filterStore);

            _subscriptionManager = new SubscriptionManager(
                subscriptionFactory,
                _logManager);

            _subscribeRpcModule         = new SubscribeRpcModule(_subscriptionManager);
            _subscribeRpcModule.Context = new JsonRpcContext(RpcEndpoint.WebSocket, _jsonRpcDuplexClient);

            // block numbers matching filters in LogsSubscriptions with null arguments will be 33333-77777
            BlockHeader fromBlock = Build.A.BlockHeader.WithNumber(33333).TestObject;
            BlockHeader toBlock   = Build.A.BlockHeader.WithNumber(77777).TestObject;

            _blockTree.FindHeader(Arg.Any <BlockParameter>()).Returns(fromBlock);
            _blockTree.FindHeader(Arg.Any <BlockParameter>(), true).Returns(toBlock);
        }
Ejemplo n.º 8
0
 public BlockchainBridge(
     IStateReader stateReader,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     IBlockTree blockTree,
     ITransactionPool transactionPool,
     ITransactionPoolInfoProvider transactionPoolInfoProvider,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITransactionProcessor transactionProcessor)
 {
     _stateReader                 = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _stateProvider               = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _storageProvider             = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
     _blockTree                   = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _transactionPool             = transactionPool ?? throw new ArgumentNullException(nameof(_transactionPool));
     _transactionPoolInfoProvider = transactionPoolInfoProvider ?? throw new ArgumentNullException(nameof(transactionPoolInfoProvider));
     _receiptStorage              = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore                 = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager               = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _wallet = wallet ?? throw new ArgumentException(nameof(wallet));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentException(nameof(transactionProcessor));
 }
Ejemplo n.º 9
0
 public void Setup()
 {
     _configProvider            = Substitute.For <IConfigProvider>();
     _configManager             = Substitute.For <IConfigManager>();
     _ndmConfig                 = new NdmConfig();
     _baseDbPath                = "db";
     _rocksProvider             = Substitute.For <IDbProvider>();
     _mongoProvider             = Substitute.For <IMongoProvider>();
     _logManager                = Substitute.For <ILogManager>();
     _blockTree                 = Substitute.For <IBlockTree>();
     _specProvider              = Substitute.For <ISpecProvider>();
     _transactionPool           = Substitute.For <ITxPool>();
     _receiptStorage            = Substitute.For <IReceiptStorage>();
     _filterStore               = Substitute.For <IFilterStore>();
     _filterManager             = Substitute.For <IFilterManager>();
     _wallet                    = Substitute.For <IWallet>();
     _timestamper               = Substitute.For <ITimestamper>();
     _ecdsa                     = Substitute.For <IEthereumEcdsa>();
     _keyStore                  = Substitute.For <IKeyStore>();
     _rpcModuleProvider         = Substitute.For <IRpcModuleProvider>();
     _jsonSerializer            = Substitute.For <IJsonSerializer>();
     _cryptoRandom              = Substitute.For <ICryptoRandom>();
     _enode                     = Substitute.For <IEnode>();
     _ndmConsumerChannelManager = Substitute.For <INdmConsumerChannelManager>();
     _ndmDataPublisher          = Substitute.For <INdmDataPublisher>();
     _grpcServer                = Substitute.For <IGrpcServer>();
     _ethRequestService         = Substitute.For <IEthRequestService>();
     _notifier                  = Substitute.For <INdmNotifier>();
     _enableUnsecuredDevWallet  = false;
     _blockProcessor            = Substitute.For <IBlockProcessor>();
     _ndmModule                 = new NdmModule();
 }
Ejemplo n.º 10
0
        public EthModuleFactory(
            IDbProvider dbProvider,
            ITxPool txPool,
            IWallet wallet,
            IBlockTree blockTree,
            IEthereumEcdsa ethereumEcdsa,
            IBlockProcessor blockProcessor,
            IReceiptStorage receiptStorage,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _dbProvider     = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            _txPool         = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _wallet         = wallet ?? throw new ArgumentNullException(nameof(wallet));
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _ethereumEcdsa  = ethereumEcdsa ?? throw new ArgumentNullException(nameof(ethereumEcdsa));
            _blockProcessor = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor));
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _specProvider   = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logManager     = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _logger         = logManager.GetClassLogger();

            _filterStore   = new FilterStore();
            _filterManager = new FilterManager(_filterStore, _blockProcessor, _txPool, _logManager);
        }
Ejemplo n.º 11
0
 public BlockchainBridge(
     ReadOnlyTxProcessingEnv processingEnv,
     ITxPool txPool,
     IReceiptFinder receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IEthereumEcdsa ecdsa,
     IBloomStorage bloomStorage,
     ITimestamper timestamper,
     ILogManager logManager,
     bool isMining,
     int findLogBlockDepthLimit          = 1000,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     IsMining       = isMining;
     _logFinder     = new LogFinder(_blockTree, _receiptFinder, bloomStorage, logManager, new ReceiptsRecovery(), findLogBlockDepthLimit);
 }
Ejemplo n.º 12
0
 public void Setup()
 {
     _currentFilterId = 0;
     _filterStore     = Substitute.For <IFilterStore>();
     _blockProcessor  = Substitute.For <IBlockProcessor>();
     _txPool          = Substitute.For <ITxPool>();
     _logManager      = Substitute.For <ILogManager>();
 }
Ejemplo n.º 13
0
 public SubscriptionFactory(
     ILogManager?logManager,
     IBlockTree?blockTree,
     ITxPool?txPool,
     IReceiptStorage?receiptStorage,
     IFilterStore?filterStore)
 {
     _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));
 }
Ejemplo n.º 14
0
 public FilterManager(IFilterStore filterStore, IBlockProcessor blockProcessor, ITxPool txPool,
                      ILogManager logManager)
 {
     _filterStore   = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     blockProcessor = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor));
     txPool         = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _logger        = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     blockProcessor.BlockProcessed       += OnBlockProcessed;
     blockProcessor.TransactionProcessed += OnTransactionProcessed;
     _filterStore.FilterRemoved          += OnFilterRemoved;
     txPool.NewPending     += OnNewPendingTransaction;
     txPool.RemovedPending += OnRemovedPendingTransaction;
 }
Ejemplo n.º 15
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));
 }
Ejemplo n.º 16
0
        public LogsSubscription(
            IJsonRpcDuplexClient jsonRpcDuplexClient,
            IReceiptStorage?receiptStorage,
            IFilterStore?store,
            IBlockTree?blockTree,
            ILogManager?logManager,
            Filter?filter = null)
            : base(jsonRpcDuplexClient)
        {
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            IFilterStore filterStore = store ?? throw new ArgumentNullException(nameof(store));

            if (filter != null)
            {
                _filter = filterStore.CreateLogFilter(
                    filter.FromBlock,
                    filter.ToBlock,
                    filter.Address,
                    filter.Topics);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Logs Subscription {Id}: Created LogFilter with the same arguments like \"filter\"");
                }
            }
            else
            {
                _filter = filterStore.CreateLogFilter(
                    BlockParameter.Latest,
                    BlockParameter.Latest);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Logs Subscription {Id}: Argument \"filter\" was null and created LogFilter with arguments: FromBlock: BlockParameter.Latest, ToBlock: BlockParameter.Latest");
                }
            }

            _receiptStorage.ReceiptsInserted += OnReceiptsInserted;
            _blockTree.NewHeadBlock          += OnNewHeadBlock;
            if (_logger.IsTrace)
            {
                _logger.Trace($"Logs subscription {Id} will track ReceiptsInserted.");
            }
        }
Ejemplo n.º 17
0
 public NdmRequiredServices(IConfigProvider configProvider, IConfigManager configManager, INdmConfig ndmConfig,
                            string baseDbPath, IDbProvider rocksProvider, IMongoProvider mongoProvider, ILogManager logManager,
                            IBlockTree blockTree, ITxPool transactionPool, ISpecProvider specProvider, IReceiptStorage receiptStorage,
                            IFilterStore filterStore, IFilterManager filterManager, IWallet wallet, ITimestamper timestamper,
                            IEthereumEcdsa ecdsa, IKeyStore keyStore, IRpcModuleProvider rpcModuleProvider,
                            IJsonSerializer jsonSerializer, ICryptoRandom cryptoRandom, IEnode enode,
                            INdmConsumerChannelManager ndmConsumerChannelManager, INdmDataPublisher ndmDataPublisher,
                            IGrpcServer grpcServer, IEthRequestService ethRequestService, INdmNotifier notifier,
                            bool enableUnsecuredDevWallet, IBlockProcessor blockProcessor, IJsonRpcClientProxy jsonRpcClientProxy,
                            IEthJsonRpcClientProxy ethJsonRpcClientProxy, IHttpClient httpClient, IMonitoringService monitoringService)
 {
     ConfigProvider            = configProvider;
     ConfigManager             = configManager;
     NdmConfig                 = ndmConfig;
     BaseDbPath                = baseDbPath;
     RocksProvider             = rocksProvider;
     MongoProvider             = mongoProvider;
     LogManager                = logManager;
     BlockTree                 = blockTree;
     TransactionPool           = transactionPool;
     SpecProvider              = specProvider;
     ReceiptStorage            = receiptStorage;
     FilterStore               = filterStore;
     FilterManager             = filterManager;
     Wallet                    = wallet;
     Timestamper               = timestamper;
     Ecdsa                     = ecdsa;
     KeyStore                  = keyStore;
     RpcModuleProvider         = rpcModuleProvider;
     JsonSerializer            = jsonSerializer;
     CryptoRandom              = cryptoRandom;
     Enode                     = enode;
     NdmConsumerChannelManager = ndmConsumerChannelManager;
     NdmDataPublisher          = ndmDataPublisher;
     GrpcServer                = grpcServer;
     EthRequestService         = ethRequestService;
     Notifier                  = notifier;
     EnableUnsecuredDevWallet  = enableUnsecuredDevWallet;
     BlockProcessor            = blockProcessor;
     JsonRpcClientProxy        = jsonRpcClientProxy;
     EthJsonRpcClientProxy     = ethJsonRpcClientProxy;
     HttpClient                = httpClient;
     MonitoringService         = monitoringService;
 }
Ejemplo n.º 18
0
 public void Setup()
 {
     _ndmModule          = Substitute.For <INdmModule>();
     _ndmConsumersModule = Substitute.For <INdmConsumersModule>();
     _configProvider     = Substitute.For <IConfigProvider>();
     _dbProvider         = Substitute.For <IDbProvider>();
     _blockTree          = Substitute.For <IBlockTree>();
     _txPool             = Substitute.For <ITxPool>();
     _txSender           = Substitute.For <ITxSender>();
     _specProvider       = Substitute.For <ISpecProvider>();
     _receiptFinder      = Substitute.For <IReceiptFinder>();
     _wallet             = Substitute.For <IWallet>();
     _filterStore        = Substitute.For <IFilterStore>();
     _filterManager      = Substitute.For <IFilterManager>();
     _timestamper        = Substitute.For <ITimestamper>();
     _ecdsa                       = Substitute.For <IEthereumEcdsa>();
     _rpcModuleProvider           = Substitute.For <IRpcModuleProvider>();
     _keyStore                    = Substitute.For <IKeyStore>();
     _jsonSerializer              = Substitute.For <IJsonSerializer>();
     _cryptoRandom                = Substitute.For <ICryptoRandom>();
     _enode                       = Substitute.For <IEnode>();
     _consumerChannelManager      = Substitute.For <INdmConsumerChannelManager>();
     _dataPublisher               = Substitute.For <INdmDataPublisher>();
     _grpcServer                  = Substitute.For <IGrpcServer>();
     _nodeStatsManager            = Substitute.For <INodeStatsManager>();
     _protocolsManager            = Substitute.For <IProtocolsManager>();
     _protocolValidator           = Substitute.For <IProtocolValidator>();
     _messageSerializationService = Substitute.For <IMessageSerializationService>();
     _webSocketsManager           = Substitute.For <IWebSocketsManager>();
     _logManager                  = LimboLogs.Instance;
     _blockProcessor              = Substitute.For <IBlockProcessor>();
     _jsonRpcClientProxy          = Substitute.For <IJsonRpcClientProxy>();
     _ethJsonRpcClientProxy       = Substitute.For <IEthJsonRpcClientProxy>();
     _httpClient                  = Substitute.For <IHttpClient>();
     _monitoringService           = Substitute.For <IMonitoringService>();
     _enableUnsecuredDevWallet    = false;
     _ndmConfig                   = new NdmConfig {
         Enabled = true, StoreConfigInDatabase = false
     };
     _configProvider.GetConfig <INdmConfig>().Returns(_ndmConfig);
     _ndmInitializer = new NdmInitializer(_ndmModule, _ndmConsumersModule, _logManager);
     _bloomStorage   = Substitute.For <IBloomStorage>();
 }
Ejemplo n.º 19
0
        PreInitAsync(
            IConfigProvider configProvider,
            IDbProvider dbProvider,
            string baseDbPath,
            IBlockTree blockTree,
            ITxPool txPool,
            ITxSender txSender,
            ISpecProvider specProvider,
            IReceiptFinder receiptFinder,
            IWallet wallet,
            IFilterStore filterStore,
            IFilterManager filterManager,
            ITimestamper timestamper,
            IEthereumEcdsa ecdsa,
            IRpcModuleProvider rpcModuleProvider,
            IKeyStore keyStore,
            IJsonSerializer jsonSerializer,
            ICryptoRandom cryptoRandom,
            IEnode enode,
            INdmConsumerChannelManager consumerChannelManager,
            INdmDataPublisher dataPublisher,
            IGrpcServer grpcServer,
            bool enableUnsecuredDevWallet,
            IWebSocketsManager webSocketsManager,
            ILogManager logManager,
            IBlockProcessor blockProcessor,
            IJsonRpcClientProxy?jsonRpcClientProxy,
            IEthJsonRpcClientProxy?ethJsonRpcClientProxy,
            IHttpClient httpClient,
            IMonitoringService monitoringService,
            IBloomStorage bloomStorage)
        {
            // what is block processor doing here?

            if (!(configProvider.GetConfig <INdmConfig>() is NdmConfig defaultConfig))
            {
                return(default);
        public void SetUp()
        {
            _dbProvider = new MemDbProvider();

            _stateReader     = new StateReader(_dbProvider.StateDb, _dbProvider.CodeDb, LimboLogs.Instance);
            _stateProvider   = new StateProvider(_dbProvider.StateDb, _dbProvider.CodeDb, LimboLogs.Instance);
            _storageProvider = new StorageProvider(_dbProvider.StateDb, _stateProvider, LimboLogs.Instance);

            _timestamper          = new ManualTimestamper();
            _blockTree            = Substitute.For <IBlockTree>();
            _txPool               = Substitute.For <ITxPool>();
            _receiptStorage       = Substitute.For <IReceiptStorage>();
            _filterStore          = Substitute.For <IFilterStore>();
            _filterManager        = Substitute.For <IFilterManager>();
            _wallet               = Substitute.For <IWallet>();
            _transactionProcessor = Substitute.For <ITransactionProcessor>();
            _ethereumEcdsa        = Substitute.For <IEthereumEcdsa>();
            _bloomStorage         = Substitute.For <IBloomStorage>();
            _specProvider         = MainnetSpecProvider.Instance;
            _blockchainBridge     = new BlockchainBridge(
                _stateReader,
                _stateProvider,
                _storageProvider,
                _blockTree,
                _txPool,
                _receiptStorage,
                _filterStore,
                _filterManager,
                _wallet,
                _transactionProcessor,
                _ethereumEcdsa,
                _bloomStorage,
                _timestamper,
                LimboLogs.Instance,
                false);
        }
Ejemplo n.º 21
0
        public virtual async Task <INdmCapabilityConnector> InitAsync(IConfigProvider configProvider,
                                                                      IDbProvider dbProvider, string baseDbPath, IBlockTree blockTree, ITxPool txPool, ISpecProvider specProvider,
                                                                      IReceiptStorage receiptStorage, IWallet wallet, IFilterStore filterStore, IFilterManager filterManager,
                                                                      ITimestamper timestamper, IEthereumEcdsa ecdsa, IRpcModuleProvider rpcModuleProvider, IKeyStore keyStore,
                                                                      IJsonSerializer jsonSerializer, ICryptoRandom cryptoRandom, IEnode enode,
                                                                      INdmConsumerChannelManager consumerChannelManager, INdmDataPublisher dataPublisher, IGrpcServer grpcServer,
                                                                      INodeStatsManager nodeStatsManager, IProtocolsManager protocolsManager,
                                                                      IProtocolValidator protocolValidator, IMessageSerializationService messageSerializationService,
                                                                      bool enableUnsecuredDevWallet, IWebSocketsManager webSocketsManager, ILogManager logManager,
                                                                      IBlockProcessor blockProcessor, IJsonRpcClientProxy jsonRpcClientProxy,
                                                                      IEthJsonRpcClientProxy ethJsonRpcClientProxy, IHttpClient httpClient, IMonitoringService monitoringService)
        {
            var(config, services, faucet, ethRequestService, accountService, consumerService, consumerAddress,
                providerAddress) = await PreInitAsync(configProvider, dbProvider, baseDbPath, blockTree, txPool,
                                                      specProvider, receiptStorage, wallet, filterStore, filterManager, timestamper, ecdsa, rpcModuleProvider,
                                                      keyStore, jsonSerializer, cryptoRandom, enode, consumerChannelManager, dataPublisher, grpcServer,
                                                      enableUnsecuredDevWallet, webSocketsManager, logManager, blockProcessor, jsonRpcClientProxy,
                                                      ethJsonRpcClientProxy, httpClient, monitoringService);

            if (!config.Enabled)
            {
                return(default);
Ejemplo n.º 22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AccountFilter"/> class.
 /// </summary>
 /// <param name="filterStore">The filter store.</param>
 public AccountFilter(IFilterStore filterStore)
 {
     _filterStore = filterStore;
 }
        private Task InitBlockchain()
        {
            InitBlockTraceDumper();

            (IApiWithStores getApi, IApiWithBlockchain setApi) = _api.ForBlockchain;

            if (getApi.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(getApi.ChainSpec));
            }
            if (getApi.DbProvider == null)
            {
                throw new StepDependencyException(nameof(getApi.DbProvider));
            }
            if (getApi.SpecProvider == null)
            {
                throw new StepDependencyException(nameof(getApi.SpecProvider));
            }
            if (getApi.BlockTree == null)
            {
                throw new StepDependencyException(nameof(getApi.BlockTree));
            }

            _logger = getApi.LogManager.GetClassLogger();
            IInitConfig    initConfig    = getApi.Config <IInitConfig>();
            ISyncConfig    syncConfig    = getApi.Config <ISyncConfig>();
            IPruningConfig pruningConfig = getApi.Config <IPruningConfig>();
            IMiningConfig  miningConfig  = getApi.Config <IMiningConfig>();

            if (syncConfig.DownloadReceiptsInFastSync && !syncConfig.DownloadBodiesInFastSync)
            {
                _logger.Warn($"{nameof(syncConfig.DownloadReceiptsInFastSync)} is selected but {nameof(syncConfig.DownloadBodiesInFastSync)} - enabling bodies to support receipts download.");
                syncConfig.DownloadBodiesInFastSync = true;
            }

            Account.AccountStartNonce = getApi.ChainSpec.Parameters.AccountStartNonce;

            IWitnessCollector witnessCollector;

            if (syncConfig.WitnessProtocolEnabled)
            {
                WitnessCollector witnessCollectorImpl = new(getApi.DbProvider.WitnessDb, _api.LogManager);
                witnessCollector         = setApi.WitnessCollector = witnessCollectorImpl;
                setApi.WitnessRepository = witnessCollectorImpl.WithPruning(getApi.BlockTree !, getApi.LogManager);
            }
            else
            {
                witnessCollector         = setApi.WitnessCollector = NullWitnessCollector.Instance;
                setApi.WitnessRepository = NullWitnessCollector.Instance;
            }

            CachingStore cachedStateDb = getApi.DbProvider.StateDb
                                         .Cached(Trie.MemoryAllowance.TrieNodeCacheCount);

            setApi.MainStateDbWithCache = cachedStateDb;
            IKeyValueStore codeDb = getApi.DbProvider.CodeDb
                                    .WitnessedBy(witnessCollector);

            TrieStore trieStore;
            IKeyValueStoreWithBatching stateWitnessedBy = setApi.MainStateDbWithCache.WitnessedBy(witnessCollector);

            if (pruningConfig.Mode.IsMemory())
            {
                IPersistenceStrategy persistenceStrategy = Persist.IfBlockOlderThan(pruningConfig.PersistenceInterval); // TODO: this should be based on time
                if (pruningConfig.Mode.IsFull())
                {
                    PruningTriggerPersistenceStrategy triggerPersistenceStrategy = new((IFullPruningDb)getApi.DbProvider !.StateDb, getApi.BlockTree !, getApi.LogManager);
                    getApi.DisposeStack.Push(triggerPersistenceStrategy);
                    persistenceStrategy = persistenceStrategy.Or(triggerPersistenceStrategy);
                }

                setApi.TrieStore = trieStore = new TrieStore(
                    stateWitnessedBy,
                    Prune.WhenCacheReaches(pruningConfig.CacheMb.MB()), // TODO: memory hint should define this
                    persistenceStrategy,
                    getApi.LogManager);

                if (pruningConfig.Mode.IsFull())
                {
                    IFullPruningDb fullPruningDb = (IFullPruningDb)getApi.DbProvider !.StateDb;
                    fullPruningDb.PruningStarted += (_, args) =>
                    {
                        cachedStateDb.PersistCache(args.Context);
                        trieStore.PersistCache(args.Context, args.Context.CancellationTokenSource.Token);
                    };
                }
            }
            else
            {
                setApi.TrieStore = trieStore = new TrieStore(
                    stateWitnessedBy,
                    No.Pruning,
                    Persist.EveryBlock,
                    getApi.LogManager);
            }

            TrieStoreBoundaryWatcher trieStoreBoundaryWatcher = new(trieStore, _api.BlockTree !, _api.LogManager);

            getApi.DisposeStack.Push(trieStoreBoundaryWatcher);
            getApi.DisposeStack.Push(trieStore);

            ITrieStore readOnlyTrieStore = setApi.ReadOnlyTrieStore = trieStore.AsReadOnly(cachedStateDb);

            IStateProvider stateProvider = setApi.StateProvider = new StateProvider(
                trieStore,
                codeDb,
                getApi.LogManager);

            ReadOnlyDbProvider readOnly = new(getApi.DbProvider, false);

            IStateReader stateReader = setApi.StateReader = new StateReader(readOnlyTrieStore, readOnly.GetDb <IDb>(DbNames.Code), getApi.LogManager);

            setApi.TransactionComparerProvider = new TransactionComparerProvider(getApi.SpecProvider !, getApi.BlockTree.AsReadOnly());
            setApi.ChainHeadStateProvider      = new ChainHeadReadOnlyStateProvider(getApi.BlockTree, stateReader);
            Account.AccountStartNonce          = getApi.ChainSpec.Parameters.AccountStartNonce;

            stateProvider.StateRoot = getApi.BlockTree !.Head?.StateRoot ?? Keccak.EmptyTreeHash;

            if (_api.Config <IInitConfig>().DiagnosticMode == DiagnosticMode.VerifyTrie)
            {
                Task.Run(() =>
                {
                    try
                    {
                        _logger !.Info("Collecting trie stats and verifying that no nodes are missing...");
                        TrieStats stats = stateProvider.CollectStats(getApi.DbProvider.CodeDb, _api.LogManager);
                        _logger.Info($"Starting from {getApi.BlockTree.Head?.Number} {getApi.BlockTree.Head?.StateRoot}{Environment.NewLine}" + stats);
                    }
                    catch (Exception ex)
                    {
                        _logger !.Error(ex.ToString());
                    }
                });
            }

            // Init state if we need system calls before actual processing starts
            if (getApi.BlockTree !.Head?.StateRoot != null)
            {
                stateProvider.StateRoot = getApi.BlockTree.Head.StateRoot;
            }

            TxValidator txValidator = setApi.TxValidator = new TxValidator(getApi.SpecProvider.ChainId);

            ITxPool txPool = _api.TxPool = CreateTxPool();

            ReceiptCanonicalityMonitor receiptCanonicalityMonitor = new(getApi.BlockTree, getApi.ReceiptStorage, _api.LogManager);

            getApi.DisposeStack.Push(receiptCanonicalityMonitor);
            _api.ReceiptMonitor = receiptCanonicalityMonitor;

            _api.BlockPreprocessor.AddFirst(
                new RecoverSignatures(getApi.EthereumEcdsa, txPool, getApi.SpecProvider, getApi.LogManager));

            IStorageProvider storageProvider = setApi.StorageProvider = new StorageProvider(
                trieStore,
                stateProvider,
                getApi.LogManager);

            // blockchain processing
            BlockhashProvider blockhashProvider = new (
                getApi.BlockTree, getApi.LogManager);

            VirtualMachine virtualMachine = new (
                blockhashProvider,
                getApi.SpecProvider,
                getApi.LogManager);

            WorldState worldState = new (stateProvider, storageProvider);

            _api.TransactionProcessor = new TransactionProcessor(
                getApi.SpecProvider,
                worldState,
                virtualMachine,
                getApi.LogManager);

            InitSealEngine();
            if (_api.SealValidator == null)
            {
                throw new StepDependencyException(nameof(_api.SealValidator));
            }

            setApi.HeaderValidator = CreateHeaderValidator();

            IHeaderValidator?headerValidator = setApi.HeaderValidator;
            IUnclesValidator unclesValidator = setApi.UnclesValidator = new UnclesValidator(
                getApi.BlockTree,
                headerValidator,
                getApi.LogManager);

            setApi.BlockValidator = new BlockValidator(
                txValidator,
                headerValidator,
                unclesValidator,
                getApi.SpecProvider,
                getApi.LogManager);

            IChainHeadInfoProvider chainHeadInfoProvider =
                new ChainHeadInfoProvider(getApi.SpecProvider, getApi.BlockTree, stateReader);

            setApi.TxPoolInfoProvider = new TxPoolInfoProvider(chainHeadInfoProvider.AccountStateProvider, txPool);
            setApi.GasPriceOracle     = new GasPriceOracle(getApi.BlockTree, getApi.SpecProvider, _api.LogManager, miningConfig.MinGasPrice);
            IBlockProcessor mainBlockProcessor = setApi.MainBlockProcessor = CreateBlockProcessor();

            BlockchainProcessor blockchainProcessor = new(
                getApi.BlockTree,
                mainBlockProcessor,
                _api.BlockPreprocessor,
                stateReader,
                getApi.LogManager,
                new BlockchainProcessor.Options
            {
                StoreReceiptsByDefault = initConfig.StoreReceipts,
                DumpOptions = initConfig.AutoDump
            });

            setApi.BlockProcessingQueue = blockchainProcessor;
            setApi.BlockchainProcessor  = blockchainProcessor;
            setApi.EthSyncingInfo       = new EthSyncingInfo(getApi.BlockTree);

            // TODO: can take the tx sender from plugin here maybe
            ITxSigner txSigner       = new WalletTxSigner(getApi.Wallet, getApi.SpecProvider.ChainId);
            TxSealer  standardSealer = new(txSigner, getApi.Timestamper);
            NonceReservingTxSealer nonceReservingTxSealer =
                new(txSigner, getApi.Timestamper, txPool);

            setApi.TxSender = new TxPoolSender(txPool, nonceReservingTxSealer, standardSealer);

            // TODO: possibly hide it (but need to confirm that NDM does not really need it)
            IFilterStore filterStore = setApi.FilterStore = new FilterStore();

            setApi.FilterManager         = new FilterManager(filterStore, mainBlockProcessor, txPool, getApi.LogManager);
            setApi.HealthHintService     = CreateHealthHintService();
            setApi.BlockProductionPolicy = new BlockProductionPolicy(miningConfig);

            InitializeFullPruning(pruningConfig, initConfig, _api, stateReader);

            return(Task.CompletedTask);
        }
Ejemplo n.º 24
0
 public NdmRequiredServices(
     IConfigProvider configProvider,
     IConfigManager configManager,
     INdmConfig ndmConfig,
     string baseDbPath,
     IDbProvider rocksProvider,
     IMongoProvider mongoProvider,
     ILogManager logManager,
     IBlockTree blockTree,
     ITxPool transactionPool,
     ISpecProvider specProvider,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITimestamper timestamper,
     IEthereumEcdsa ecdsa,
     IKeyStore keyStore,
     IRpcModuleProvider rpcModuleProvider,
     IJsonSerializer jsonSerializer,
     ICryptoRandom cryptoRandom,
     IEnode enode,
     INdmConsumerChannelManager ndmConsumerChannelManager,
     INdmDataPublisher ndmDataPublisher,
     IGrpcServer grpcServer,
     IEthRequestService ethRequestService,
     INdmNotifier notifier,
     bool enableUnsecuredDevWallet,
     IBlockProcessor blockProcessor,
     IJsonRpcClientProxy?jsonRpcClientProxy,
     IEthJsonRpcClientProxy?ethJsonRpcClientProxy,
     IHttpClient httpClient,
     IMonitoringService monitoringService,
     IBloomStorage bloomStorage)
 {
     ConfigProvider            = configProvider ?? throw new ArgumentNullException(nameof(configProvider));
     ConfigManager             = configManager ?? throw new ArgumentNullException(nameof(configManager));
     NdmConfig                 = ndmConfig ?? throw new ArgumentNullException(nameof(ndmConfig));
     BaseDbPath                = baseDbPath ?? throw new ArgumentNullException(nameof(baseDbPath));
     RocksProvider             = rocksProvider ?? throw new ArgumentNullException(nameof(rocksProvider));
     MongoProvider             = mongoProvider ?? throw new ArgumentNullException(nameof(mongoProvider));
     LogManager                = logManager ?? throw new ArgumentNullException(nameof(logManager));
     BlockTree                 = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     TransactionPool           = transactionPool ?? throw new ArgumentNullException(nameof(transactionPool));
     SpecProvider              = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     ReceiptStorage            = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     FilterStore               = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     FilterManager             = filterManager ?? throw new ArgumentNullException(nameof(filterManager));
     Wallet                    = wallet ?? throw new ArgumentNullException(nameof(wallet));
     Timestamper               = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     Ecdsa                     = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     KeyStore                  = keyStore ?? throw new ArgumentNullException(nameof(keyStore));
     RpcModuleProvider         = rpcModuleProvider ?? throw new ArgumentNullException(nameof(rpcModuleProvider));
     JsonSerializer            = jsonSerializer ?? throw new ArgumentNullException(nameof(jsonSerializer));
     CryptoRandom              = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     Enode                     = enode ?? throw new ArgumentNullException(nameof(enode));
     NdmConsumerChannelManager = ndmConsumerChannelManager ?? throw new ArgumentNullException(nameof(ndmConsumerChannelManager));
     NdmDataPublisher          = ndmDataPublisher ?? throw new ArgumentNullException(nameof(ndmDataPublisher));
     GrpcServer                = grpcServer ?? throw new ArgumentNullException(nameof(grpcServer));
     EthRequestService         = ethRequestService ?? throw new ArgumentNullException(nameof(ethRequestService));
     Notifier                  = notifier ?? throw new ArgumentNullException(nameof(notifier));
     EnableUnsecuredDevWallet  = enableUnsecuredDevWallet;
     BlockProcessor            = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor));
     HttpClient                = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
     MonitoringService         = monitoringService ?? throw new ArgumentNullException(nameof(monitoringService));
     JsonRpcClientProxy        = jsonRpcClientProxy;
     EthJsonRpcClientProxy     = ethJsonRpcClientProxy;
     BloomStorage              = bloomStorage;
 }
Ejemplo n.º 25
0
        public virtual async Task <INdmCapabilityConnector> InitAsync(
            IConfigProvider configProvider,
            IDbProvider dbProvider,
            string baseDbPath,
            IBlockTree blockTree,
            ITxPool txPool,
            ITxSender txSender,
            ISpecProvider specProvider,
            IReceiptFinder receiptFinder,
            IWallet wallet,
            IFilterStore filterStore,
            IFilterManager filterManager,
            ITimestamper timestamper,
            IEthereumEcdsa ecdsa,
            IRpcModuleProvider rpcModuleProvider,
            IKeyStore keyStore,
            IJsonSerializer jsonSerializer,
            ICryptoRandom cryptoRandom,
            IEnode enode,
            INdmConsumerChannelManager consumerChannelManager,
            INdmDataPublisher dataPublisher,
            IGrpcServer grpcServer,
            INodeStatsManager nodeStatsManager,
            IProtocolsManager protocolsManager,
            IProtocolValidator protocolValidator,
            IMessageSerializationService messageSerializationService,
            bool enableUnsecuredDevWallet,
            IWebSocketsManager webSocketsManager,
            ILogManager logManager,
            IBlockProcessor blockProcessor,
            IJsonRpcClientProxy?jsonRpcClientProxy,
            IEthJsonRpcClientProxy?ethJsonRpcClientProxy,
            IHttpClient httpClient,
            IMonitoringService monitoringService,
            IBloomStorage bloomStorage)
        {
            _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            INdmConfig ndmConfig = configProvider.GetConfig <INdmConfig>();

            if (!ndmConfig.Enabled)
            {
                // can we not even call it here? // can be step and use the subsystems
                return(NullNdmCapabilityConnector.Instance);
            }

            (NdmConfig config, INdmServices services, INdmFaucet faucet, IEthRequestService ethRequestService, IAccountService accountService, IConsumerService consumerService, Address consumerAddress, Address providerAddress) = await PreInitAsync(
                configProvider,
                dbProvider,
                baseDbPath,
                blockTree,
                txPool,
                txSender,
                specProvider,
                receiptFinder,
                wallet,
                filterStore,
                filterManager,
                timestamper,
                ecdsa,
                rpcModuleProvider,
                keyStore,
                jsonSerializer,
                cryptoRandom,
                enode,
                consumerChannelManager,
                dataPublisher,
                grpcServer,
                enableUnsecuredDevWallet,
                webSocketsManager,
                logManager,
                blockProcessor,
                jsonRpcClientProxy,
                ethJsonRpcClientProxy,
                httpClient,
                monitoringService,
                bloomStorage);

            NdmSubprotocolFactory subprotocolFactory = new NdmSubprotocolFactory(messageSerializationService, nodeStatsManager,
                                                                                 logManager, accountService, consumerService, consumerChannelManager, ecdsa, wallet, faucet,
                                                                                 enode.PublicKey, providerAddress, consumerAddress, config.VerifyP2PSignature);
            ProtocolHandlerFactory protocolHandlerFactory = new ProtocolHandlerFactory(subprotocolFactory, protocolValidator,
                                                                                       ethRequestService, logManager);

            NdmCapabilityConnector capabilityConnector = new NdmCapabilityConnector(
                protocolsManager,
                protocolHandlerFactory,
                accountService,
                logManager,
                ndmConfig.ProviderAddress == null ? Address.Zero : new Address(ndmConfig.ProviderAddress));

            return(capabilityConnector);
        }
Ejemplo n.º 26
0
            PreInitAsync(IConfigProvider configProvider, IDbProvider dbProvider, string baseDbPath,
                IBlockTree blockTree, ITxPool txPool, ISpecProvider specProvider,
                IReceiptStorage receiptStorage, IWallet wallet, IFilterStore filterStore, IFilterManager filterManager,
                ITimestamper timestamper, IEthereumEcdsa ecdsa, IRpcModuleProvider rpcModuleProvider,
                IKeyStore keyStore, IJsonSerializer jsonSerializer, ICryptoRandom cryptoRandom, IEnode enode,
                INdmConsumerChannelManager consumerChannelManager, INdmDataPublisher dataPublisher,
                IGrpcServer grpcServer, bool enableUnsecuredDevWallet, IWebSocketsManager webSocketsManager,
                ILogManager logManager, IBlockProcessor blockProcessor)
        {
            if (!(configProvider.GetConfig<INdmConfig>() is NdmConfig defaultConfig))
            {
                return default;
            }

            if (!defaultConfig.Enabled)
            {
                return default;
            }

            if (defaultConfig.StoreConfigInDatabase && string.IsNullOrWhiteSpace(defaultConfig.Id))
            {
                throw new ArgumentException("NDM config stored in database requires an id.", nameof(defaultConfig.Id));
            }

            IMongoProvider mongoProvider = null;
            IConfigRepository configRepository = null;
            IEthRequestRepository ethRequestRepository = null;
            switch (defaultConfig.Persistence?.ToLowerInvariant())
            {
                case "mongo":
                    mongoProvider = new MongoProvider(configProvider.GetConfig<INdmMongoConfig>(), logManager);
                    var database = mongoProvider.GetDatabase();
                    configRepository = new ConfigMongoRepository(database);
                    ethRequestRepository = new EthRequestMongoRepository(database);
                    break;
                default:
                    configRepository = new ConfigRocksRepository(dbProvider.ConfigsDb, new NdmConfigDecoder());
                    ethRequestRepository = new EthRequestRocksRepository(dbProvider.EthRequestsDb,
                        new EthRequestDecoder());
                    break;
            }

            var configManager = new ConfigManager(defaultConfig, configRepository);
            var ndmConfig = await configManager.GetAsync(defaultConfig.Id);
            if (ndmConfig is null)
            {
                ndmConfig = defaultConfig;
                if (defaultConfig.StoreConfigInDatabase)
                {
                    await configManager.UpdateAsync(ndmConfig);
                }
            }

            var webSocketsModule = webSocketsManager.GetModule("ndm");
            var notifier = new NdmNotifier(webSocketsModule);
            var ethRequestService = new EthRequestService(ndmConfig.FaucetHost, logManager);
            var services = _ndmModule.Init(new NdmRequiredServices(configProvider, configManager, ndmConfig,
                baseDbPath, dbProvider, mongoProvider, logManager, blockTree, txPool, specProvider, receiptStorage,
                filterStore, filterManager, wallet, timestamper, ecdsa, keyStore, rpcModuleProvider, jsonSerializer,
                cryptoRandom, enode, consumerChannelManager, dataPublisher, grpcServer, ethRequestService, notifier,
                enableUnsecuredDevWallet, blockProcessor));

            var faucetAddress = string.IsNullOrWhiteSpace(ndmConfig.FaucetAddress)
                ? null
                : new Address(ndmConfig.FaucetAddress);
            var faucet = new NdmFaucet(services.CreatedServices.BlockchainBridge, ethRequestRepository, faucetAddress,
                ndmConfig.FaucetWeiRequestMaxValue, ndmConfig.FaucetEthDailyRequestsTotalValue, ndmConfig.FaucetEnabled,
                timestamper, wallet, logManager);

            var consumerAddress = string.IsNullOrWhiteSpace(ndmConfig.ConsumerAddress)
                ? Address.Zero
                : new Address(ndmConfig.ConsumerAddress);
            var providerAddress = string.IsNullOrWhiteSpace(ndmConfig.ProviderAddress)
                ? Address.Zero
                : new Address(ndmConfig.ProviderAddress);
            var consumers = _ndmConsumersModule.Init(services);

            return (ndmConfig, services, faucet, consumers.AccountService, consumers.ConsumerService, consumerAddress,
                providerAddress);
        }