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); }
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); }
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()); }
public void Track(DerivationStrategyBase strategy, TrackWalletRequest trackDerivationRequest, CancellationToken cancellation = default) { TrackAsync(strategy, trackDerivationRequest, cancellation).GetAwaiter().GetResult(); }