public BitcoinDWaiters( AddressPoolServiceAccessor addressPool, NBXplorerNetworkProvider networkProvider, ChainProvider chains, RepositoryProvider repositoryProvider, ExplorerConfiguration config, RPCClientProvider rpcProvider, EventAggregator eventAggregator) { _Waiters = networkProvider .GetAll() .Select(s => (Repository: repositoryProvider.GetRepository(s), RPCClient: rpcProvider.GetRPCClient(s), Chain: chains.GetChain(s), Network: s)) .Where(s => s.Repository != null && s.RPCClient != null && s.Chain != null) .Select(s => new BitcoinDWaiter(s.RPCClient, config, networkProvider.GetFromCryptoCode(s.Network.CryptoCode), s.Chain, s.Repository, addressPool.Instance, eventAggregator)) .ToDictionary(s => s.Network.CryptoCode, s => s); this.repositoryProvider = repositoryProvider; }
public async Task StartAsync(CancellationToken cancellationToken) { await repositoryProvider.StartCompletion; _AddressPoolByNetwork = networks.GetAll().ToDictionary(o => o, o => new AddressPool(repositoryProvider.GetRepository(o))); await Task.WhenAll(_AddressPoolByNetwork.Select(kv => kv.Value.StartAsync(cancellationToken))); }
public async Task StartAsync(CancellationToken cancellationToken) { await repositoryProvider.StartCompletion; _Waiters = networkProvider .GetAll() .Select(s => (Repository: repositoryProvider.GetRepository(s), RPCClient: rpcProvider.GetRPCClient(s), Chain: chains.GetChain(s), Network: s)) .Where(s => s.Repository != null && s.RPCClient != null && s.Chain != null) .Select(s => new BitcoinDWaiter(s.RPCClient, config, networkProvider.GetFromCryptoCode(s.Network.CryptoCode), s.Chain, s.Repository, addressPool, eventAggregator)) .ToDictionary(s => s.Network.CryptoCode, s => s); await Task.WhenAll(_Waiters.Select(s => s.Value.StartAsync(cancellationToken)).ToArray()); }
public RepositoryProvider(NBXplorerNetworkProvider networks, KeyPathTemplates keyPathTemplates, ExplorerConfiguration configuration) { this.keyPathTemplates = keyPathTemplates; _Configuration = configuration; var directory = Path.Combine(configuration.DataDir, "db"); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } int tried = 0; retry: try { _Engine = new DBriizeEngine(new DBriizeConfiguration() { DBriizeDataFolderName = directory }); } catch when(tried < 10) { tried++; Thread.Sleep(tried * 500); goto retry; } foreach (var net in networks.GetAll()) { var settings = GetChainSetting(net); if (settings != null) { var repo = net.NBitcoinNetwork.NetworkSet == Liquid.Instance ? new LiquidRepository(_Engine, net, keyPathTemplates, settings.RPC) : new Repository(_Engine, net, keyPathTemplates, settings.RPC); repo.MaxPoolSize = configuration.MaxGapSize; repo.MinPoolSize = configuration.MinGapSize; repo.MinUtxoValue = settings.MinUtxoValue; _Repositories.Add(net.CryptoCode, repo); } } }
public AddressPoolService(NBXplorerNetworkProvider networks, RepositoryProvider repositoryProvider, KeyPathTemplates keyPathTemplates, AddressPoolServiceAccessor accessor) { accessor.Instance = this; _AddressPoolByNetwork = networks.GetAll().ToDictionary(o => o, o => new AddressPool(repositoryProvider.GetRepository(o))); this.keyPathTemplates = keyPathTemplates; }