コード例 #1
0
 public async Task Can_add_async()
 {
     IMongoDatabase  database        = MongoForTest.Provider.GetDatabase();
     var             repo            = new ProviderDepositApprovalMongoRepository(database);
     DepositApproval depositApproval = BuildDummyDepositApproval();
     await repo.AddAsync(depositApproval);
 }
コード例 #2
0
        public async Task Can_get_by_id()
        {
            IMongoDatabase  database        = MongoForTest.Provider.GetDatabase();
            var             repo            = new ProviderDepositApprovalMongoRepository(database);
            DepositApproval depositApproval = BuildDummyDepositApproval();
            await repo.AddAsync(depositApproval);

            DepositApproval result = await repo.GetAsync(depositApproval.Id);

            result.Should().BeEquivalentTo(depositApproval);
        }
コード例 #3
0
        public async Task Can_browse_with_query_and_pagination()
        {
            IMongoDatabase  database        = MongoForTest.Provider.GetDatabase();
            var             repo            = new ProviderDepositApprovalMongoRepository(database);
            DepositApproval depositApproval = BuildDummyDepositApproval();
            await repo.AddAsync(depositApproval);

            GetProviderDepositApprovals query = new GetProviderDepositApprovals();

            query.Consumer    = depositApproval.Consumer;
            query.OnlyPending = true;
            query.DataAssetId = depositApproval.AssetId;
            query.Page        = 0;
            query.Results     = 10;
            await repo.BrowseAsync(query);
        }
コード例 #4
0
        public async Task InitAsync()
        {
            AddDecoders();
            var logManager = _api.LogManager;
            var logger     = logManager.GetClassLogger();
            var skipDepositVerification                = HasEnabledVariable("SKIP_DEPOSIT_VERIFICATION");
            var backgroundServicesDisabled             = HasEnabledVariable("BACKGROUND_SERVICES_DISABLED");
            var disableSendingPaymentClaimTransaction  = HasEnabledVariable("SENDING_PAYMENT_CLAIM_TRANSACTION_DISABLED");
            var instantPaymentClaimVerificationEnabled = HasEnabledVariable("INSTANT_PAYMENT_CLAIM_VERIFICATION_ENABLED");

            if (skipDepositVerification)
            {
                if (logger.IsWarn)
                {
                    logger.Warn("*** NDM provider skipping deposit verification ***");
                }
            }

            if (backgroundServicesDisabled)
            {
                if (logger.IsWarn)
                {
                    logger.Warn("*** NDM provider background services are disabled ***");
                }
            }

            if (disableSendingPaymentClaimTransaction)
            {
                if (logger.IsWarn)
                {
                    logger.Warn("*** NDM provider sending payment claim transaction is disabled ***");
                }
            }

            if (instantPaymentClaimVerificationEnabled)
            {
                if (logger.IsWarn)
                {
                    logger.Warn("*** NDM provider instant payment claim verification is enabled ***");
                }
            }

            var blockchainBridge = _api.BlockchainBridge;
            var ndmConfig        = _api.NdmConfig;
            var txPool           = _api.TxPool;
            var dbConfig         = _api.ConfigProvider.GetConfig <IProviderDbConfig>();
            var contractAddress  = string.IsNullOrWhiteSpace(ndmConfig.ContractAddress)
                ? Address.Zero
                : new Address(ndmConfig.ContractAddress);

            _gasPriceService = _api.GasPriceService;
            var dbInitializer = new ProviderDbInitializer(_api.DbProvider, dbConfig, _api.RocksDbFactory, _api.MemDbFactory);
            await dbInitializer.Init();

            var consumerRlpDecoder        = new ConsumerDecoder();
            var dataAssetRlpDecoder       = new DataAssetDecoder();
            var depositApprovalRlpDecoder = new DepositApprovalDecoder();
            var paymentClaimRlpDecoder    = new PaymentClaimDecoder();
            var receiptRlpDecoder         = new DataDeliveryReceiptDetailsDecoder();
            var sessionRlpDecoder         = new ProviderSessionDecoder();
            var unitsRangeRlpDecoder      = new UnitsRangeDecoder();
            var accountAddress            = string.IsNullOrWhiteSpace(ndmConfig.ProviderAddress)
                ? Address.Zero
                : new Address(ndmConfig.ProviderAddress);
            var coldWalletAddress = string.IsNullOrWhiteSpace(ndmConfig.ProviderColdWalletAddress)
                ? Address.Zero
                : new Address(ndmConfig.ProviderColdWalletAddress);
            var depositService = new DepositService(blockchainBridge, _api.AbiEncoder,
                                                    _api.Wallet, contractAddress);
            var paymentService = new PaymentService(blockchainBridge, _api.AbiEncoder,
                                                    _api.Wallet, contractAddress, logManager, txPool);
            var refundPolicy = new RefundPolicy();
            var dataAvailabilityValidator = new DataAvailabilityValidator();
            var transactionVerifier       = new TransactionVerifier(blockchainBridge, ndmConfig.BlockConfirmations);
            var transactionService        = _api.TransactionService;
            var timestamper = _api.Timestamper;

            IConsumerRepository  consumerRepository;
            IDataAssetRepository dataAssetRepository;
            IProviderDepositApprovalRepository depositApprovalRepository;
            IPaymentClaimRepository            paymentClaimRepository;
            IProviderSessionRepository         sessionRepository;
            IReceiptRepository receiptRepository;

            switch (ndmConfig.Persistence?.ToLowerInvariant())
            {
            case "mongo":
                IMongoDatabase?database = _api.MongoProvider.GetDatabase();
                if (database == null)
                {
                    throw new InvalidOperationException("Failed to initialize Mongo DB for NDM");
                }

                consumerRepository        = new ConsumerMongoRepository(database);
                dataAssetRepository       = new DataAssetMongoRepository(database);
                depositApprovalRepository = new ProviderDepositApprovalMongoRepository(database);
                paymentClaimRepository    = new PaymentClaimMongoRepository(database);
                receiptRepository         = new ReceiptMongoRepository(database, "providerReceipts");
                sessionRepository         = new ProviderSessionMongoRepository(database);
                break;

            default:
                consumerRepository = new ConsumerRocksRepository(_api.Db <IDb>(ProviderDbNames.Consumers),
                                                                 consumerRlpDecoder);
                dataAssetRepository = new DataAssetRocksRepository(_api.Db <IDb>(ProviderDbNames.DataAssets),
                                                                   dataAssetRlpDecoder);
                depositApprovalRepository = new ProviderDepositApprovalRocksRepository(
                    _api.Db <IDb>(ProviderDbNames.ProviderDepositApprovals), depositApprovalRlpDecoder);
                paymentClaimRepository = new PaymentClaimRocksRepository(_api.Db <IDb>(ProviderDbNames.PaymentClaims),
                                                                         paymentClaimRlpDecoder);
                receiptRepository = new ReceiptRocksRepository(_api.Db <IDb>(ProviderDbNames.ProviderReceipts),
                                                               receiptRlpDecoder);
                sessionRepository = new ProviderSessionRocksRepository(_api.Db <IDb>(ProviderDbNames.ProviderSessions),
                                                                       sessionRlpDecoder);
                break;
            }

            var wallet = _api.Wallet;
            var depositHandlerFactory = new DepositNodesHandlerFactory();

            _providerThresholdsService = new ProviderThresholdsService(_api.ConfigManager, ndmConfig.Id, logManager);

            var receiptsPolicies = new ReceiptsPolicies(_providerThresholdsService);

            IPaymentClaimProcessor paymentClaimProcessor = new PaymentClaimProcessor(_gasPriceService,
                                                                                     consumerRepository, paymentClaimRepository, paymentService, coldWalletAddress, timestamper,
                                                                                     unitsRangeRlpDecoder, logManager, disableSendingPaymentClaimTransaction);

            if (instantPaymentClaimVerificationEnabled)
            {
                paymentClaimProcessor = new InstantPaymentClaimProcessor(paymentClaimProcessor, paymentClaimRepository,
                                                                         logManager);
            }

            var receiptProcessor = new ReceiptProcessor(sessionRepository, _api.AbiEncoder,
                                                        _api.EthereumEcdsa, logManager);

            var sessionManager = new SessionManager(sessionRepository, _api.Timestamper,
                                                    logManager);

            _depositManager = new DepositManager(depositHandlerFactory, sessionManager, receiptsPolicies, wallet,
                                                 accountAddress, receiptProcessor, paymentClaimProcessor, consumerRepository, paymentClaimRepository,
                                                 receiptRepository, sessionRepository, timestamper, _gasPriceService, logManager);

            _providerService = new ProviderService(_api.ConfigManager, ndmConfig.Id,
                                                   consumerRepository, dataAssetRepository, depositApprovalRepository, paymentClaimRepository,
                                                   paymentClaimProcessor, sessionRepository, timestamper, _api.EthereumEcdsa,
                                                   _api.AbiEncoder, _api.NdmDataPublisher, _gasPriceService,
                                                   dataAvailabilityValidator, sessionManager, transactionVerifier, _depositManager, refundPolicy,
                                                   depositService, wallet, blockchainBridge, accountAddress, coldWalletAddress,
                                                   _api.Enode.PublicKey, ndmConfig.ProviderName, ndmConfig.FilesPath,
                                                   ndmConfig.FileMaxSize, ndmConfig.BlockConfirmations, paymentService.GasLimit, logManager,
                                                   skipDepositVerification, backgroundServicesDisabled);

            _reportService = new ReportService(consumerRepository, paymentClaimRepository);

            _providerTransactionsService = new ProviderTransactionsService(transactionService,
                                                                           paymentClaimRepository, timestamper, logManager);

            _providerGasLimitsService = new ProviderGasLimitsService(paymentService);

            IWebSocketsModule ndmWebSocketsModule = _api.WebSocketsManager.GetModule("ndm");

            _api.NdmAccountUpdater = ndmConfig.ProviderColdWalletAddress != null
                                                                        ? new NdmAccountUpdater(ndmWebSocketsModule, _providerService.GetAddress(), _api.MainBlockProcessor, _api.StateProvider, new Address(ndmConfig.ProviderColdWalletAddress))
                                                                        : new NdmAccountUpdater(ndmWebSocketsModule, _providerService.GetAddress(), _api.MainBlockProcessor, _api.StateProvider);
        }