예제 #1
0
 public async Task TrackAsync(DerivationStrategyBase strategy, TrackWalletRequest trackDerivationRequest, CancellationToken cancellation = default)
 {
     if (strategy == null)
     {
         throw new ArgumentNullException(nameof(strategy));
     }
     await SendAsync <string>(HttpMethod.Post, trackDerivationRequest, "v1/cryptos/{0}/derivations/{1}", new[] { CryptoCode, strategy.ToString() }, cancellation).ConfigureAwait(false);
 }
예제 #2
0
 private GenerateAddressQuery GenerateAddressQuery(TrackWalletRequest request, DerivationFeature feature)
 {
     if (request?.DerivationOptions == null)
     {
         return(null);
     }
     foreach (var derivationOption in request.DerivationOptions)
     {
         if ((derivationOption.Feature is DerivationFeature f && f == feature) || derivationOption.Feature is null)
         {
             return(new GenerateAddressQuery(derivationOption.MinAddresses, derivationOption.MaxAddresses));
         }
     }
     return(null);
 }
예제 #3
0
        public async Task <IActionResult> TrackWallet(
            string cryptoCode,
            [ModelBinder(BinderType = typeof(DerivationStrategyModelBinder))]
            DerivationStrategyBase derivationScheme,
            [ModelBinder(BinderType = typeof(BitcoinAddressModelBinder))]
            BitcoinAddress address, [FromBody] TrackWalletRequest request = null)
        {
            request = request ?? new TrackWalletRequest();
            TrackedSource trackedSource = GetTrackedSource(derivationScheme, address);

            if (trackedSource == null)
            {
                return(NotFound());
            }
            var network = GetNetwork(cryptoCode, false);

            if (trackedSource is DerivationSchemeTrackedSource dts)
            {
                if (request.Wait)
                {
                    foreach (var feature in keyPathTemplates.GetSupportedDerivationFeatures())
                    {
                        await RepositoryProvider.GetRepository(network).GenerateAddresses(dts.DerivationStrategy, feature, GenerateAddressQuery(request, feature));
                    }
                }
                else
                {
                    foreach (var feature in keyPathTemplates.GetSupportedDerivationFeatures())
                    {
                        await RepositoryProvider.GetRepository(network).GenerateAddresses(dts.DerivationStrategy, feature, new GenerateAddressQuery(minAddresses: 3, null));
                    }
                    foreach (var feature in keyPathTemplates.GetSupportedDerivationFeatures())
                    {
                        _ = AddressPoolService.GenerateAddresses(network, dts.DerivationStrategy, feature, GenerateAddressQuery(request, feature));
                    }
                }
            }
            else if (trackedSource is IDestination ats)
            {
                await RepositoryProvider.GetRepository(network).Track(ats);
            }
            return(Ok());
        }
예제 #4
0
 public void Track(DerivationStrategyBase strategy, TrackWalletRequest trackDerivationRequest, CancellationToken cancellation = default)
 {
     TrackAsync(strategy, trackDerivationRequest, cancellation).GetAwaiter().GetResult();
 }