Example #1
0
        public NdmFaucet(
            INdmBlockchainBridge?blockchainBridge,
            IEthRequestRepository?requestRepository,
            Address?faucetAddress,
            UInt256 maxValue,
            UInt256 dailyRequestsTotalValueEth,
            bool enabled,
            ITimestamper?timestamper,
            IWallet?wallet,
            ILogManager?logManager)
        {
            _blockchainBridge           = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge));
            _requestRepository          = requestRepository ?? throw new ArgumentNullException(nameof(requestRepository));
            _faucetAddress              = faucetAddress;
            _maxValue                   = maxValue;
            _dailyRequestsTotalValueWei = dailyRequestsTotalValueEth * 1_000_000_000_000_000_000;
            _enabled     = enabled;
            _timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
            _wallet      = wallet ?? throw new ArgumentNullException(nameof(wallet));
            _today       = _timestamper.UtcNow;
            _logger      = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            if (!_enabled || _faucetAddress is null)
            {
                return;
            }

            if (_logger.IsInfo)
            {
                _logger.Info($"NDM Faucet was enabled for this host, account: {faucetAddress}, request max value: {maxValue} wei");
            }
            _requestRepository.SumDailyRequestsTotalValueAsync(_today).ContinueWith(t =>
            {
                if (t.IsFaulted && _logger.IsError)
                {
                    _logger.Error($"Error during NDM faucet today's ({_today.Date:d}) total value initialization.", t.Exception);
                    return;
                }

                _todayRequestsTotalValueWei = t.Result;
                _initialized = true;
                if (_logger.IsInfo)
                {
                    _logger.Info($"Initialized NDM faucet today's ({_today.Date:d}) total value: {_todayRequestsTotalValueWei} wei");
                }
            });
        }
Example #2
0
 public void Setup()
 {
     _blockchainBridge = Substitute.For <IBlockchainBridge>();
     _repository       = Substitute.For <IEthRequestRepository>();
     _faucetAddress    = Address.FromNumber(1);
     _maxValue         = 1.GWei();
     _enabled          = true;
     _timestamp        = new Timestamp();
     _logManager       = NullLogManager.Instance;
     _host             = "127.0.0.1";
     _address          = Address.FromNumber(2);
     _value            = 1.GWei();
     _faucetAccount    = Account.TotallyEmpty;
     _transactionHash  = Keccak.Zero;
     _blockchainBridge.GetAccount(_faucetAddress).Returns(_faucetAccount);
     _blockchainBridge.SendTransaction(Arg.Any <Transaction>()).Returns(_transactionHash);
 }
Example #3
0
 public NdmFaucet(IBlockchainBridge blockchainBridge, IEthRequestRepository requestRepository,
                  Address faucetAddress, UInt256 maxValue, bool enabled, ITimestamp timestamp, ILogManager logManager)
 {
     _blockchainBridge  = blockchainBridge;
     _requestRepository = requestRepository;
     _faucetAddress     = faucetAddress;
     _maxValue          = maxValue;
     _enabled           = enabled;
     _timestamp         = timestamp;
     _logger            = logManager.GetClassLogger();
     if (_enabled && !(_faucetAddress is null))
     {
         if (_logger.IsInfo)
         {
             _logger.Info($"NDM Faucet was enabled for this host, account: {faucetAddress}, ETH request max value: {maxValue} wei");
         }
     }
 }
Example #4
0
 public void Setup()
 {
     _blockchainBridge = Substitute.For <IBlockchainBridge>();
     _repository       = Substitute.For <IEthRequestRepository>();
     _repository.SumDailyRequestsTotalValueAsync(Arg.Any <DateTime>()).ReturnsForAnyArgs(UInt256.Zero);
     _faucetAddress = Address.FromNumber(1);
     _maxValue      = 1.Ether();
     _dailyRequestsTotalValueEth = 500;
     _enabled         = true;
     _timestamper     = new Timestamper();
     _logManager      = LimboLogs.Instance;
     _host            = "127.0.0.1";
     _address         = Address.FromNumber(2);
     _value           = 1.Ether();
     _faucetAccount   = Account.TotallyEmpty;
     _transactionHash = Keccak.Zero;
     _blockchainBridge.GetAccount(_faucetAddress).Returns(_faucetAccount);
     _blockchainBridge.SendTransaction(Arg.Any <Transaction>(), true).Returns(_transactionHash);
 }
Example #5
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);
        }