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(); }
public void Setup() { _dataRequestFactory = Substitute.For <IDataRequestFactory>(); _depositProvider = Substitute.For <IDepositProvider>(); _kycVerifier = Substitute.For <IKycVerifier>(); _wallet = Substitute.For <IWallet>(); _providerService = Substitute.For <IProviderService>(); _timestamper = new Timestamper(Date); _sessionRepository = Substitute.For <IConsumerSessionRepository>(); _notifier = Substitute.For <INdmNotifier>(); _consumerNotifier = new ConsumerNotifier(_notifier); _dataRequestService = new DataRequestService(_dataRequestFactory, _depositProvider, _kycVerifier, _wallet, _providerService, _timestamper, _sessionRepository, _consumerNotifier, LimboLogs.Instance); }
public void Setup() { IConfigManager configManager = Substitute.For <IConfigManager>(); configManager.GetAsync(null).ReturnsForAnyArgs(new NdmConfig()); IDataStreamService dataStreamService = Substitute.For <IDataStreamService>(); _providerService = Substitute.For <IProviderService>(); ISessionService sessionService = Substitute.For <ISessionService>(); _ndmNotifier = Substitute.For <INdmNotifier>(); IConsumerNotifier consumerNotifier = new ConsumerNotifier(_ndmNotifier); _wallet = new DevWallet(new WalletConfig(), LimboLogs.Instance); _consumerAddress = _wallet.GetAccounts()[0]; _accountService = new AccountService(configManager, dataStreamService, _providerService, sessionService, consumerNotifier, _wallet, "configId", _consumerAddress, LimboLogs.Instance); }
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; }
public void Setup() { INdmPeer peer = Substitute.For <INdmPeer>(); peer.ProviderAddress.Returns(_providerAddress); _providerId = TestItem.PublicKeyB; peer.NodeId.Returns(_providerId); DataAssetProvider provider = new DataAssetProvider(_providerAddress, "name"); DataAsset newPendingAsset = new DataAsset(_newPendingAssetId, "name", "desc", 1, DataAssetUnitType.Unit, 1000, 10000, new DataAssetRules(new DataAssetRule(1), null), provider); DataAsset pendingAsset = new DataAsset(_pendingAssetId, "name", "desc", 1, DataAssetUnitType.Unit, 1000, 10000, new DataAssetRules(new DataAssetRule(1), null), provider); DataAsset rejectedAsset = new DataAsset(_rejectedAssetId, "name", "desc", 1, DataAssetUnitType.Unit, 1000, 10000, new DataAssetRules(new DataAssetRule(1), null), provider); DataAsset confirmedAsset = new DataAsset(_confirmedAssetId, "name", "desc", 1, DataAssetUnitType.Unit, 1000, 10000, new DataAssetRules(new DataAssetRule(1), null), provider); DepositsInMemoryDb db = new DepositsInMemoryDb(); ProviderInMemoryRepository providerRepository = new ProviderInMemoryRepository(db); _cdaRepo = new ConsumerDepositApprovalInMemoryRepository(); _ndmNotifier = Substitute.For <INdmNotifier>(); ConsumerNotifier notifier = new ConsumerNotifier(_ndmNotifier); DataAssetService dataAssetService = new DataAssetService(providerRepository, notifier, LimboLogs.Instance); dataAssetService.AddDiscovered(newPendingAsset, peer); dataAssetService.AddDiscovered(pendingAsset, peer); dataAssetService.AddDiscovered(rejectedAsset, peer); dataAssetService.AddDiscovered(confirmedAsset, peer); _providerService = new ProviderService(providerRepository, notifier, LimboLogs.Instance); _providerService.Add(peer); _service = new DepositApprovalService(dataAssetService, _providerService, _cdaRepo, Timestamper.Default, notifier, LimboLogs.Instance); _confirmedApproval = new DepositApproval(Keccak.Compute(Rlp.Encode(Rlp.Encode(_confirmedAssetId), Rlp.Encode(_consumerAddress)).Bytes), _confirmedAssetId, "asset", "kyc", _consumerAddress, _providerAddress, 1, DepositApprovalState.Confirmed); _pendingApproval = new DepositApproval(Keccak.Compute(Rlp.Encode(Rlp.Encode(_pendingAssetId), Rlp.Encode(_consumerAddress)).Bytes), _pendingAssetId, "asset", "kyc", _consumerAddress, _providerAddress, 1, DepositApprovalState.Pending); _rejectedApproval = new DepositApproval(Keccak.Compute(Rlp.Encode(Rlp.Encode(_rejectedAssetId), Rlp.Encode(_consumerAddress)).Bytes), _rejectedAssetId, "asset", "kyc", _consumerAddress, _providerAddress, 1, DepositApprovalState.Rejected); _cdaRepo.AddAsync(_confirmedApproval); _cdaRepo.AddAsync(_pendingApproval); _cdaRepo.AddAsync(_rejectedApproval); }
public ConsumerNotifier(INdmNotifier notifier) { _notifier = notifier; }
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; }
public async Task Init() { AddDecoders(); ILogManager logManager = _api.LogManager; ILogger logger = logManager.GetClassLogger(); bool disableSendingDepositTransaction = HasEnabledVariable("SENDING_DEPOSIT_TRANSACTION_DISABLED"); bool instantDepositVerificationEnabled = HasEnabledVariable("INSTANT_DEPOSIT_VERIFICATION_ENABLED"); bool backgroundServicesDisabled = HasEnabledVariable("BACKGROUND_SERVICES_DISABLED"); if (disableSendingDepositTransaction) { if (logger.IsWarn) { logger.Warn("*** NDM sending deposit transaction is disabled ***"); } } if (instantDepositVerificationEnabled) { if (logger.IsWarn) { logger.Warn("*** NDM instant deposit verification is enabled ***"); } } if (backgroundServicesDisabled) { if (logger.IsWarn) { logger.Warn("*** NDM background services are disabled ***"); } } INdmConfig ndmConfig = _api.NdmConfig; string configId = ndmConfig.Id; IDbConfig dbConfig = _api.ConfigProvider.GetConfig <IDbConfig>(); Address contractAddress = string.IsNullOrWhiteSpace(ndmConfig.ContractAddress) ? Address.Zero : new Address(ndmConfig.ContractAddress); DepositDetailsDecoder depositDetailsRlpDecoder = new DepositDetailsDecoder(); DepositApprovalDecoder depositApprovalRlpDecoder = new DepositApprovalDecoder(); DataDeliveryReceiptDetailsDecoder receiptRlpDecoder = new DataDeliveryReceiptDetailsDecoder(); ConsumerSessionDecoder sessionRlpDecoder = new ConsumerSessionDecoder(); ReceiptRequestValidator receiptRequestValidator = new ReceiptRequestValidator(logManager); IDepositDetailsRepository depositRepository; IConsumerDepositApprovalRepository depositApprovalRepository; IProviderRepository providerRepository; IReceiptRepository receiptRepository; IConsumerSessionRepository sessionRepository; IDepositUnitsCalculator depositUnitsCalculator; switch (ndmConfig.Persistence?.ToLowerInvariant()) { case "mongo": IMongoDatabase?database = _api.MongoProvider.GetDatabase(); if (database == null) { throw new ApplicationException("Failed to initialize Mongo DB."); } sessionRepository = new ConsumerSessionMongoRepository(database); depositUnitsCalculator = new DepositUnitsCalculator(sessionRepository, _api.Timestamper); depositRepository = new DepositDetailsMongoRepository(database, depositUnitsCalculator); depositApprovalRepository = new ConsumerDepositApprovalMongoRepository(database); providerRepository = new ProviderMongoRepository(database); receiptRepository = new ReceiptMongoRepository(database, "consumerReceipts"); break; case "memory": if (logger.IsWarn) { logger.Warn("*** NDM is using in memory database ***"); } DepositsInMemoryDb depositsDatabase = new DepositsInMemoryDb(); sessionRepository = new ConsumerSessionInMemoryRepository(); depositUnitsCalculator = new DepositUnitsCalculator(sessionRepository, _api.Timestamper); depositRepository = new DepositDetailsInMemoryRepository(depositsDatabase, depositUnitsCalculator); depositApprovalRepository = new ConsumerDepositApprovalInMemoryRepository(); providerRepository = new ProviderInMemoryRepository(depositsDatabase); receiptRepository = new ReceiptInMemoryRepository(); break; default: var dbInitializer = new ConsumerNdmDbInitializer(_api.DbProvider, ndmConfig, _api.RocksDbFactory, _api.MemDbFactory); await dbInitializer.InitAsync(); sessionRepository = new ConsumerSessionRocksRepository(_api.Db <IDb>(ConsumerNdmDbNames.ConsumerSessions), sessionRlpDecoder); depositUnitsCalculator = new DepositUnitsCalculator(sessionRepository, _api.Timestamper); depositRepository = new DepositDetailsRocksRepository(_api.Db <IDb>(ConsumerNdmDbNames.Deposits), depositDetailsRlpDecoder, depositUnitsCalculator); depositApprovalRepository = new ConsumerDepositApprovalRocksRepository( _api.Db <IDb>(ConsumerNdmDbNames.ConsumerDepositApprovals), depositApprovalRlpDecoder); providerRepository = new ProviderRocksRepository(_api.Db <IDb>(ConsumerNdmDbNames.Deposits), depositDetailsRlpDecoder); receiptRepository = new ReceiptRocksRepository(_api.Db <IDb>(ConsumerNdmDbNames.ConsumerReceipts), receiptRlpDecoder); break; } uint requiredBlockConfirmations = ndmConfig.BlockConfirmations; IAbiEncoder abiEncoder = _api.AbiEncoder; INdmBlockchainBridge blockchainBridge = _api.BlockchainBridge; IBlockProcessor blockProcessor = _api.MainBlockProcessor; IConfigManager configManager = _api.ConfigManager; Address consumerAddress = _api.ConsumerAddress; ICryptoRandom cryptoRandom = _api.CryptoRandom; IDepositService depositService = _api.DepositService; gasPriceService = _api.GasPriceService; IEthereumEcdsa ecdsa = _api.EthereumEcdsa; ethRequestService = _api.EthRequestService; jsonRpcNdmConsumerChannel = _api.JsonRpcNdmConsumerChannel; INdmNotifier ndmNotifier = _api.NdmNotifier; PublicKey nodePublicKey = _api.Enode.PublicKey; timestamper = _api.Timestamper; IWallet wallet = _api.Wallet; IHttpClient httpClient = _api.HttpClient; IJsonRpcClientProxy? jsonRpcClientProxy = _api.JsonRpcClientProxy; IEthJsonRpcClientProxy?ethJsonRpcClientProxy = _api.EthJsonRpcClientProxy; TransactionService transactionService = _api.TransactionService; IMonitoringService monitoringService = _api.MonitoringService; IWebSocketsModule ndmWebSocketsModule = _api.WebSocketsManager.GetModule("ndm"); monitoringService?.RegisterMetrics(typeof(Metrics)); DataRequestFactory dataRequestFactory = new DataRequestFactory(wallet, nodePublicKey); TransactionVerifier transactionVerifier = new TransactionVerifier(blockchainBridge, requiredBlockConfirmations); DepositProvider depositProvider = new DepositProvider(depositRepository, depositUnitsCalculator, logManager); KycVerifier kycVerifier = new KycVerifier(depositApprovalRepository, logManager); ConsumerNotifier consumerNotifier = new ConsumerNotifier(ndmNotifier); DataAssetService dataAssetService = new DataAssetService(providerRepository, consumerNotifier, logManager); ProviderService providerService = new ProviderService(providerRepository, consumerNotifier, logManager); DataRequestService dataRequestService = new DataRequestService(dataRequestFactory, depositProvider, kycVerifier, wallet, providerService, timestamper, sessionRepository, consumerNotifier, logManager); SessionService sessionService = new SessionService(providerService, depositProvider, dataAssetService, sessionRepository, timestamper, consumerNotifier, logManager); DataConsumerService dataConsumerService = new DataConsumerService(depositProvider, sessionService, consumerNotifier, timestamper, sessionRepository, logManager); DataStreamService dataStreamService = new DataStreamService(dataAssetService, depositProvider, providerService, sessionService, wallet, consumerNotifier, sessionRepository, logManager); DepositApprovalService depositApprovalService = new DepositApprovalService(dataAssetService, providerService, depositApprovalRepository, timestamper, consumerNotifier, logManager); DepositConfirmationService depositConfirmationService = new DepositConfirmationService(blockchainBridge, consumerNotifier, depositRepository, depositService, logManager, requiredBlockConfirmations); IDepositManager depositManager = new DepositManager(depositService, depositUnitsCalculator, dataAssetService, kycVerifier, providerService, abiEncoder, cryptoRandom, wallet, gasPriceService, depositRepository, timestamper, logManager, requiredBlockConfirmations, disableSendingDepositTransaction); if (instantDepositVerificationEnabled) { depositManager = new InstantDepositManager(depositManager, depositRepository, timestamper, logManager, requiredBlockConfirmations); } depositReportService = new DepositReportService(depositRepository, depositUnitsCalculator, receiptRepository, sessionRepository, timestamper); ReceiptService receiptService = new ReceiptService(depositProvider, providerService, receiptRequestValidator, sessionService, timestamper, receiptRepository, sessionRepository, abiEncoder, wallet, ecdsa, nodePublicKey, logManager); RefundService refundService = new RefundService(blockchainBridge, abiEncoder, depositRepository, contractAddress, logManager, wallet); RefundClaimant refundClaimant = new RefundClaimant(refundService, blockchainBridge, depositRepository, transactionVerifier, gasPriceService, timestamper, logManager); _api.AccountService = new AccountService(configManager, dataStreamService, providerService, sessionService, consumerNotifier, wallet, configId, consumerAddress, logManager); _api.NdmAccountUpdater = new NdmAccountUpdater(ndmWebSocketsModule, consumerAddress, _api.MainBlockProcessor, _api.ChainHeadStateProvider); ProxyService proxyService = new ProxyService(jsonRpcClientProxy, configManager, configId, logManager); _api.ConsumerService = new ConsumerService(_api.AccountService, dataAssetService, dataRequestService, dataConsumerService, dataStreamService, depositManager, depositApprovalService, providerService, receiptService, refundService, sessionService, proxyService); ethPriceService = new EthPriceService(httpClient, timestamper, logManager); daiPriceService = new DaiPriceService(httpClient, timestamper, logManager); consumerTransactionsService = new ConsumerTransactionsService(transactionService, depositRepository, timestamper, logManager); gasLimitsService = new ConsumerGasLimitsService(depositService, refundService); if (!backgroundServicesDisabled) { bool useDepositTimer = ndmConfig.ProxyEnabled; ConsumerServicesBackgroundProcessor consumerServicesBackgroundProcessor = new ConsumerServicesBackgroundProcessor( _api.AccountService, refundClaimant, depositConfirmationService, ethPriceService, daiPriceService, _api.GasPriceService, _api.MainBlockProcessor, depositRepository, consumerNotifier, logManager, useDepositTimer, ethJsonRpcClientProxy); consumerServicesBackgroundProcessor.Init(); } }