private void InitDecoders() { //initialize static constructors of needed decoders DataAssetDecoder.Init(); UnitsRangeDecoder.Init(); TransactionInfoDecoder.Init(); DataAssetRulesDecoder.Init(); DataAssetRuleDecoder.Init(); DataRequestDecoder.Init(); DataAssetProviderDecoder.Init(); }
public void Roundtrip(DepositDetails item) { DepositDecoder.Init(); TransactionInfoDecoder.Init(); DataAssetDecoder.Init(); DataAssetRuleDecoder.Init(); DataAssetRulesDecoder.Init(); DataAssetProviderDecoder.Init(); EarlyRefundTicketDecoder.Init(); DepositDetailsDecoder decoder = new DepositDetailsDecoder(); decoder.Decode(decoder.Encode(item).Bytes.AsRlpStream()).Should().BeEquivalentTo(item); }
public INdmServices Init(NdmRequiredServices services) { AddDecoders(); var config = services.NdmConfig; var providerAddress = string.IsNullOrWhiteSpace(config.ProviderAddress) ? Address.Zero : new Address(config.ProviderAddress); var consumerAddress = string.IsNullOrWhiteSpace(config.ConsumerAddress) ? Address.Zero : new Address(config.ConsumerAddress); var contractAddress = string.IsNullOrWhiteSpace(config.ContractAddress) ? Address.Zero : new Address(config.ContractAddress); UnlockHardcodedAccounts(providerAddress, consumerAddress, services.Wallet); var logManager = services.LogManager; var readOnlyTree = new ReadOnlyBlockTree(services.BlockTree); var readOnlyDbProvider = new ReadOnlyDbProvider(services.RocksProvider, false); var readOnlyTxProcessingEnv = new ReadOnlyTxProcessingEnv(readOnlyDbProvider, readOnlyTree, services.SpecProvider, logManager); var blockchainBridge = new BlockchainBridge( readOnlyTxProcessingEnv.StateReader, readOnlyTxProcessingEnv.StateProvider, readOnlyTxProcessingEnv.StorageProvider, readOnlyTxProcessingEnv.BlockTree, services.TransactionPool, services.ReceiptStorage, services.FilterStore, services.FilterManager, services.Wallet, readOnlyTxProcessingEnv.TransactionProcessor, services.Ecdsa); var dataAssetRlpDecoder = new DataAssetDecoder(); var encoder = new AbiEncoder(); var depositService = new DepositService(blockchainBridge, services.TransactionPool, encoder, services.Wallet, contractAddress, logManager); var ndmConsumerChannelManager = services.NdmConsumerChannelManager; var ndmDataPublisher = services.NdmDataPublisher; var jsonRpcNdmConsumerChannel = new JsonRpcNdmConsumerChannel(); // ndmConsumerChannelManager.Add(jsonRpcNdmConsumerChannel); return(new Services(services, new NdmCreatedServices(consumerAddress, encoder, dataAssetRlpDecoder, depositService, ndmDataPublisher, jsonRpcNdmConsumerChannel, ndmConsumerChannelManager, blockchainBridge))); }
public void Init(string path) { var dbOnTheRocks = new DataAssetsRocksDb(path, new DbConfig(), LimboLogs.Instance); var dataAssetsBytes = dbOnTheRocks.GetAll(); var dataAssetDecoder = new DataAssetDecoder(); var dataAssets = dataAssetsBytes .Select(b => dataAssetDecoder.Decode(b.Value.AsRlpStream())); var window = new Window("Data assets") { X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill() }; if (!dataAssets.Any()) { MessageBox.Query(40, 7, "Data assets", "No data." + $"{Environment.NewLine}(ESC to close)"); window.FocusPrev(); return; } var y = 1; foreach (var dataAsset in dataAssets) { var dataAssetsBtn = new Button(1, y++, $"Name: {dataAsset.Name}"); dataAssetsBtn.Clicked = () => { var dataAssetDetailsWindow = new Window("Data asset details") { X = 0, Y = 10, Width = Dim.Fill(), Height = Dim.Fill() }; Application.Top.Add(dataAssetDetailsWindow); var serializer = new EthereumJsonSerializer(); var dataAssetLbl = new Label(1, 1, serializer.Serialize(dataAsset, true)); dataAssetDetailsWindow.Add(dataAssetLbl); Application.Run(dataAssetDetailsWindow); }; window.Add(dataAssetsBtn); } Application.Top.Add(window); Application.Run(window); }
private static void InitDecoders() { DataAssetDecoder.Init(); DataAssetRulesDecoder.Init(); DataAssetRuleDecoder.Init(); DataAssetProviderDecoder.Init(); DataDeliveryReceiptDecoder.Init(); DataRequestDecoder.Init(); EarlyRefundTicketDecoder.Init(); FaucetResponseDecoder.Init(); FaucetRequestDetailsDecoder.Init(); DataDeliveryReceiptDecoder.Init(); DataDeliveryReceiptRequestDecoder.Init(); UnitsRangeDecoder.Init(); SessionDecoder.Init(); DepositApprovalDecoder.Init(); DataDeliveryReceiptToMergeDecoder.Init(); }
public MessageTests() { _service.Register(typeof(HiMessage).Assembly); DataAssetDecoder.Init(); DataAssetRulesDecoder.Init(); DataAssetRuleDecoder.Init(); DataAssetProviderDecoder.Init(); DataDeliveryReceiptDecoder.Init(); DataRequestDecoder.Init(); EarlyRefundTicketDecoder.Init(); FaucetResponseDecoder.Init(); FaucetRequestDetailsDecoder.Init(); DataDeliveryReceiptDecoder.Init(); DataDeliveryReceiptRequestDecoder.Init(); UnitsRangeDecoder.Init(); SessionDecoder.Init(); DepositApprovalDecoder.Init(); DataDeliveryReceiptToMergeDecoder.Init(); }
static DepositDetailsRocksRepositoryTests() { if (_cases == null) { DepositDecoder.Init(); TransactionInfoDecoder.Init(); DataAssetDecoder.Init(); DataAssetRuleDecoder.Init(); DataAssetRulesDecoder.Init(); DataAssetProviderDecoder.Init(); EarlyRefundTicketDecoder.Init(); Deposit deposit = new Deposit(TestItem.KeccakA, 100, 100, 100); DataAssetProvider provider = new DataAssetProvider(TestItem.AddressA, "provider"); DataAsset dataAsset = new DataAsset(TestItem.KeccakA, "data_asset", "desc", 1, DataAssetUnitType.Time, 1000, 10000, new DataAssetRules(new DataAssetRule(1), null), provider, null, QueryType.Stream, DataAssetState.Published, null, false, null); DepositDetails details = new DepositDetails( deposit, dataAsset, TestItem.AddressA, Array.Empty <byte>(), 10, Array.Empty <TransactionInfo>(), 9, false, false, null, Array.Empty <TransactionInfo>(), false, false, null, 0, 6); _cases = new List <DepositDetails>(); _cases.Add(details); _cases.Add(new DepositDetails( deposit, dataAsset, TestItem.AddressA, Array.Empty <byte>(), 10, Array.Empty <TransactionInfo>(), 9, false, false, null, Array.Empty <TransactionInfo>(), false, false, null, 0, 6)); _cases.Add(new DepositDetails( deposit, dataAsset, TestItem.AddressA, Array.Empty <byte>(), 10, Array.Empty <TransactionInfo>(), 9, false, false, null, Array.Empty <TransactionInfo>(), false, false, null, 0, 6)); } }
public INdmServices Init(NdmRequiredServices services) { AddDecoders(); var config = services.NdmConfig; var consumerAddress = string.IsNullOrWhiteSpace(config.ConsumerAddress) ? Address.Zero : new Address(config.ConsumerAddress); var contractAddress = string.IsNullOrWhiteSpace(config.ContractAddress) ? Address.Zero : new Address(config.ContractAddress); var configId = config.Id; var configManager = services.ConfigManager; var logManager = services.LogManager; var timestamper = services.Timestamper; var wallet = services.Wallet; var readOnlyTree = new ReadOnlyBlockTree(services.BlockTree); var readOnlyDbProvider = new ReadOnlyDbProvider(services.RocksProvider, false); var readOnlyTxProcessingEnv = new ReadOnlyTxProcessingEnv(readOnlyDbProvider, readOnlyTree, services.SpecProvider, logManager); var jsonRpcConfig = services.ConfigProvider.GetConfig <IJsonRpcConfig>(); var blockchainBridge = new BlockchainBridge( readOnlyTxProcessingEnv.StateReader, readOnlyTxProcessingEnv.StateProvider, readOnlyTxProcessingEnv.StorageProvider, readOnlyTxProcessingEnv.BlockTree, services.TransactionPool, services.ReceiptFinder, services.FilterStore, services.FilterManager, wallet, readOnlyTxProcessingEnv.TransactionProcessor, services.Ecdsa, services.BloomStorage, logManager, false, jsonRpcConfig.FindLogBlockDepthLimit); var dataAssetRlpDecoder = new DataAssetDecoder(); var encoder = new AbiEncoder(); INdmBlockchainBridge ndmBlockchainBridge; if (config.ProxyEnabled) { if (config.JsonRpcUrlProxies == null || services.EthJsonRpcClientProxy == null) { throw new InvalidDataException("JSON RPC proxy is enabled but the proxies were not initialized properly."); } services.JsonRpcClientProxy !.SetUrls(config.JsonRpcUrlProxies !); ndmBlockchainBridge = new NdmBlockchainBridgeProxy(services.EthJsonRpcClientProxy); } else { ndmBlockchainBridge = new NdmBlockchainBridge(blockchainBridge, services.TransactionPool); } var gasPriceService = new GasPriceService(services.HttpClient, configManager, configId, timestamper, logManager); var transactionService = new TransactionService(ndmBlockchainBridge, wallet, configManager, configId, logManager); var depositService = new DepositService(ndmBlockchainBridge, encoder, wallet, contractAddress); var ndmConsumerChannelManager = services.NdmConsumerChannelManager; var ndmDataPublisher = services.NdmDataPublisher; var jsonRpcNdmConsumerChannel = new JsonRpcNdmConsumerChannel(logManager); if (config.JsonRpcDataChannelEnabled) { ndmConsumerChannelManager.Add(jsonRpcNdmConsumerChannel); } return(new Services(services, new NdmCreatedServices(consumerAddress, encoder, dataAssetRlpDecoder, depositService, gasPriceService, transactionService, ndmDataPublisher, jsonRpcNdmConsumerChannel, ndmConsumerChannelManager, ndmBlockchainBridge))); }
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); }
public INdmServices Init(NdmRequiredServices services) { AddDecoders(); var config = services.NdmConfig; var consumerAddress = string.IsNullOrWhiteSpace(config.ConsumerAddress) ? Address.Zero : new Address(config.ConsumerAddress); var contractAddress = string.IsNullOrWhiteSpace(config.ContractAddress) ? Address.Zero : new Address(config.ContractAddress); var configId = config.Id; var configManager = services.ConfigManager; var logManager = services.LogManager; var timestamper = services.Timestamper; var wallet = services.Wallet; var readOnlyTree = new ReadOnlyBlockTree(services.BlockTree); var readOnlyDbProvider = new ReadOnlyDbProvider(services.RocksProvider, false); var readOnlyTxProcessingEnv = new ReadOnlyTxProcessingEnv(readOnlyDbProvider, readOnlyTree, services.SpecProvider, logManager); var blockchainBridge = new BlockchainBridge( readOnlyTxProcessingEnv.StateReader, readOnlyTxProcessingEnv.StateProvider, readOnlyTxProcessingEnv.StorageProvider, readOnlyTxProcessingEnv.BlockTree, services.TransactionPool, services.ReceiptStorage, services.FilterStore, services.FilterManager, wallet, readOnlyTxProcessingEnv.TransactionProcessor, services.Ecdsa); var dataAssetRlpDecoder = new DataAssetDecoder(); var encoder = new AbiEncoder(); INdmBlockchainBridge ndmBlockchainBridge; if (config.ProxyEnabled) { services.JsonRpcClientProxy.SetUrls(config.JsonRpcUrlProxies); ndmBlockchainBridge = new NdmBlockchainBridgeProxy(services.EthJsonRpcClientProxy); } else { ndmBlockchainBridge = new NdmBlockchainBridge(blockchainBridge, services.TransactionPool); } var gasPriceService = new GasPriceService(services.HttpClient, configManager, configId, timestamper, logManager); var transactionService = new TransactionService(ndmBlockchainBridge, wallet, configManager, configId, logManager); var depositService = new DepositService(ndmBlockchainBridge, encoder, wallet, contractAddress); var ndmConsumerChannelManager = services.NdmConsumerChannelManager; var ndmDataPublisher = services.NdmDataPublisher; var jsonRpcNdmConsumerChannel = new JsonRpcNdmConsumerChannel(); // ndmConsumerChannelManager.Add(jsonRpcNdmConsumerChannel); return(new Services(services, new NdmCreatedServices(consumerAddress, encoder, dataAssetRlpDecoder, depositService, gasPriceService, transactionService, ndmDataPublisher, jsonRpcNdmConsumerChannel, ndmConsumerChannelManager, ndmBlockchainBridge))); }