Beispiel #1
0
 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;
 }
Beispiel #2
0
        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)));
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        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;
 }