#if ALTCOINS using System; using System.Linq; using BTCPayServer.Abstractions.Contracts; using BTCPayServer.Abstractions.Services; using BTCPayServer.Configuration; using BTCPayServer.Payments; using BTCPayServer.Services.Altcoins.Zcash.Configuration; using BTCPayServer.Services.Altcoins.Zcash.Payments; using BTCPayServer.Services.Altcoins.Zcash.Services; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace BTCPayServer.Services.Altcoins.Zcash { public static class ZcashLikeExtensions { public static IServiceCollection AddZcashLike(this IServiceCollection serviceCollection) { serviceCollection.AddSingleton(provider => provider.ConfigureZcashLikeConfiguration()); serviceCollection.AddSingleton(); serviceCollection.AddHostedService(); serviceCollection.AddHostedService(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(provider => provider.GetService()); serviceCollection.AddSingleton(new UIExtension("Zcash/StoreNavZcashExtension", "store-nav")); serviceCollection.AddSingleton(); return serviceCollection; } private static ZcashLikeConfiguration ConfigureZcashLikeConfiguration(this IServiceProvider serviceProvider) { var configuration = serviceProvider.GetService(); var btcPayNetworkProvider = serviceProvider.GetService(); var result = new ZcashLikeConfiguration(); var supportedChains = configuration.GetOrDefault("chains", string.Empty) .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToUpperInvariant()); var supportedNetworks = btcPayNetworkProvider.Filter(supportedChains.ToArray()).GetAll() .OfType(); foreach (var ZcashLikeSpecificBtcPayNetwork in supportedNetworks) { var daemonUri = configuration.GetOrDefault($"{ZcashLikeSpecificBtcPayNetwork.CryptoCode}_daemon_uri", null); var walletDaemonUri = configuration.GetOrDefault( $"{ZcashLikeSpecificBtcPayNetwork.CryptoCode}_wallet_daemon_uri", null); var walletDaemonWalletDirectory = configuration.GetOrDefault( $"{ZcashLikeSpecificBtcPayNetwork.CryptoCode}_wallet_daemon_walletdir", null); if (daemonUri == null || walletDaemonUri == null) { throw new ConfigException($"{ZcashLikeSpecificBtcPayNetwork.CryptoCode} is misconfigured"); } result.ZcashLikeConfigurationItems.Add(ZcashLikeSpecificBtcPayNetwork.CryptoCode, new ZcashLikeConfigurationItem() { DaemonRpcUri = daemonUri, InternalWalletRpcUri = walletDaemonUri, WalletDirectory = walletDaemonWalletDirectory }); } return result; } } } #endif