コード例 #1
0
        public void Init(string path)
        {
            var dbOnTheRocks            = new ProviderSessionsRocksDb(path, new DbConfig(), LimboLogs.Instance);
            var providerSessionsBytes   = dbOnTheRocks.GetAll();
            var providerSessionsDecoder = new ProviderSessionDecoder();
            var providerSessions        = providerSessionsBytes
                                          .Select(b => providerSessionsDecoder.Decode(b.Value.AsRlpStream()));

            var window = new Window("Provider sessions")
            {
                X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill()
            };

            if (!providerSessions.Any())
            {
                MessageBox.Query(40, 7, "Provider sessions", "No data." +
                                 $"{Environment.NewLine}(ESC to close)");
                window.FocusPrev();
                return;
            }

            var y = 1;

            foreach (var providerSession in providerSessions)
            {
                var providerSessionBtn = new Button(1, y++, $"DepositId: {providerSession.DepositId}," +
                                                    $"ProviderAddress: {providerSession.ProviderAddress}");

                providerSessionBtn.Clicked = () =>
                {
                    var providerSessionDetailsWindow = new Window("Session details")
                    {
                        X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill()
                    };
                    Application.Top.Add(providerSessionDetailsWindow);
                    var serializer         = new EthereumJsonSerializer();
                    var providerSessionLbl = new Label(1, 1, serializer.Serialize(providerSession, true));
                    providerSessionDetailsWindow.Add(providerSessionLbl);
                    Application.Run(providerSessionDetailsWindow);
                };
                window.Add(providerSessionBtn);
            }

            Application.Top.Add(window);
            Application.Run(window);
        }
コード例 #2
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);
        }
コード例 #3
0
 private static void AddDecoders()
 {
     ConsumerDecoder.Init();
     PaymentClaimDecoder.Init();
     ProviderSessionDecoder.Init();
 }