public void CheckRatesProvider() { var coinAverage = new CoinAverageRateProvider("BTC"); var jpy = coinAverage.GetRateAsync("JPY").GetAwaiter().GetResult(); var jpy2 = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))).GetRateAsync("JPY").GetAwaiter().GetResult(); var cached = new CachedRateProvider("BTC", coinAverage, new MemoryCache(new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.FromSeconds(1.0) })); cached.CacheSpan = TimeSpan.FromSeconds(10); var a = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var b = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); //Manually check that cache get hit after 10 sec var c = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var bitstamp = new CoinAverageRateProvider("BTC") { Exchange = "bitstamp" }; var bitstampRate = bitstamp.GetRateAsync("USD").GetAwaiter().GetResult(); Assert.Throws <RateUnavailableException>(() => bitstamp.GetRateAsync("XXXXX").GetAwaiter().GetResult()); }
public void CheckRatesProvider() { var coinAverage = new CoinAverageRateProvider(); var jpy = coinAverage.GetRateAsync("JPY").GetAwaiter().GetResult(); var jpy2 = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))).GetRateAsync("JPY").GetAwaiter().GetResult(); var cached = new CachedRateProvider(coinAverage, new MemoryCache(new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.FromSeconds(1.0) })); cached.CacheSpan = TimeSpan.FromSeconds(10); var a = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var b = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); //Manually check that cache get hit after 10 sec var c = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); }
public void InitBitcoin() { var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("BTC"); var coinaverage = new CoinAverageRateProvider("BTC"); var bitpay = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); var btcRate = new FallbackRateProvider(new IRateProvider[] { coinaverage, bitpay }); Add(new BTCPayNetwork() { CryptoCode = nbxplorerNetwork.CryptoCode, BlockExplorerLink = NBXplorerNetworkProvider.ChainType == ChainType.Main? "https://www.smartbit.com.au/tx/{0}" : "https://testnet.smartbit.com.au/tx/{0}", NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork, NBXplorerNetwork = nbxplorerNetwork, UriScheme = "bitcoin", DefaultRateProvider = btcRate, CryptoImagePath = "imlegacy/bitcoin-symbol.svg", DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType) }); }
public void InitLitecoin() { NBXplorer.Altcoins.Litecoin.Networks.EnsureRegistered(); var ltcRate = new CoinAverageRateProvider("LTC"); var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC"); Add(new BTCPayNetwork() { CryptoCode = nbxplorerNetwork.CryptoCode, BlockExplorerLink = NBXplorerNetworkProvider.ChainType == ChainType.Main ? "https://live.blockcypher.com/ltc/tx/{0}/" : "http://explorer.litecointools.com/tx/{0}", NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork, NBXplorerNetwork = nbxplorerNetwork, UriScheme = "litecoin", DefaultRateProvider = ltcRate, CryptoImagePath = "imlegacy/litecoin-symbol.svg", DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType) }); }
public static IServiceCollection AddBTCPayServer(this IServiceCollection services) { services.AddDbContext <ApplicationDbContext>((provider, o) => { var factory = provider.GetRequiredService <ApplicationDbContextFactory>(); factory.ConfigureBuilder(o); }); services.TryAddSingleton <SettingsRepository>(); services.TryAddSingleton <InvoicePaymentNotification>(); services.TryAddSingleton <BTCPayServerOptions>(o => o.GetRequiredService <IOptions <BTCPayServerOptions> >().Value); services.TryAddSingleton <InvoiceRepository>(o => { var opts = o.GetRequiredService <BTCPayServerOptions>(); var dbContext = o.GetRequiredService <ApplicationDbContextFactory>(); var dbpath = Path.Combine(opts.DataDir, "InvoiceDB"); if (!Directory.Exists(dbpath)) { Directory.CreateDirectory(dbpath); } return(new InvoiceRepository(dbContext, dbpath, opts.Network)); }); services.AddSingleton <BTCPayServerEnvironment>(); services.TryAddSingleton <TokenRepository>(); services.TryAddSingleton <EventAggregator>(); services.TryAddSingleton <ApplicationDbContextFactory>(o => { var opts = o.GetRequiredService <BTCPayServerOptions>(); ApplicationDbContextFactory dbContext = null; if (opts.PostgresConnectionString == null) { var connStr = "Data Source=" + Path.Combine(opts.DataDir, "sqllite.db"); Logs.Configuration.LogInformation($"SQLite DB used ({connStr})"); dbContext = new ApplicationDbContextFactory(DatabaseType.Sqlite, connStr); } else { Logs.Configuration.LogInformation($"Postgres DB used ({opts.PostgresConnectionString})"); dbContext = new ApplicationDbContextFactory(DatabaseType.Postgres, opts.PostgresConnectionString); } return(dbContext); }); services.TryAddSingleton <BTCPayNetworkProvider>(o => { var opts = o.GetRequiredService <BTCPayServerOptions>(); return(new BTCPayNetworkProvider(opts.Network)); }); services.TryAddSingleton <StoreRepository>(); services.TryAddSingleton <BTCPayWallet>(); services.TryAddSingleton <CurrencyNameTable>(); services.TryAddSingleton <IFeeProviderFactory>(o => new NBXplorerFeeProviderFactory(o.GetRequiredService <ExplorerClient>()) { Fallback = new FeeRate(100, 1), BlockTarget = 20 }); services.TryAddSingleton <NBXplorerWaiterAccessor>(); services.AddSingleton <IHostedService, NBXplorerWaiter>(); services.TryAddSingleton <ExplorerClient>(o => { var opts = o.GetRequiredService <BTCPayServerOptions>(); var explorer = new ExplorerClient(opts.Network, opts.Explorer); if (!explorer.SetCookieAuth(opts.CookieFile)) { explorer.SetNoAuth(); } return(explorer); }); services.TryAddSingleton <Bitpay>(o => { if (o.GetRequiredService <BTCPayServerOptions>().Network == Network.Main) { return(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); } else { return(new Bitpay(new Key(), new Uri("https://test.bitpay.com/"))); } }); services.TryAddSingleton <IRateProvider>(o => { var coinaverage = new CoinAverageRateProvider(); var bitpay = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); return(new CachedRateProvider(new FallbackRateProvider(new IRateProvider[] { coinaverage, bitpay }), o.GetRequiredService <IMemoryCache>()) { CacheSpan = TimeSpan.FromMinutes(1.0) }); }); services.AddSingleton <IHostedService, InvoiceNotificationManager>(); services.TryAddSingleton <InvoiceWatcherAccessor>(); services.AddSingleton <IHostedService, InvoiceWatcher>(); services.TryAddSingleton <Initializer>(); services.TryAddScoped <IHttpContextAccessor, HttpContextAccessor>(); services.TryAddSingleton <IAuthorizationHandler, OwnStoreHandler>(); services.AddTransient <AccessTokenController>(); services.AddTransient <CallbackController>(); services.AddTransient <InvoiceController>(); // Add application services. services.AddTransient <IEmailSender, EmailSender>(); services.AddAuthorization(o => { o.AddPolicy("CanAccessStore", builder => { builder.AddRequirements(new OwnStoreAuthorizationRequirement()); }); o.AddPolicy("OwnStore", builder => { builder.AddRequirements(new OwnStoreAuthorizationRequirement("Owner")); }); }); return(services); }
public BTCPayNetworkProvider(Network network) { var coinaverage = new CoinAverageRateProvider("BTC"); var bitpay = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); var btcRate = new FallbackRateProvider(new IRateProvider[] { coinaverage, bitpay }); var ltcRate = new CoinAverageRateProvider("LTC"); if (network == Network.Main) { Add(new BTCPayNetwork() { CryptoCode = "BTC", BlockExplorerLink = "https://www.smartbit.com.au/tx/{0}", NBitcoinNetwork = Network.Main, UriScheme = "bitcoin", DefaultRateProvider = btcRate, CryptoImagePath = "imlegacy/bitcoin-symbol.svg" }); Add(new BTCPayNetwork() { CryptoCode = "LTC", BlockExplorerLink = "https://live.blockcypher.com/ltc/tx/{0}/", NBitcoinNetwork = NBXplorer.Altcoins.Litecoin.Networks.Mainnet, UriScheme = "litecoin", DefaultRateProvider = ltcRate, CryptoImagePath = "imlegacy/litecoin-symbol.svg" }); } if (network == Network.TestNet) { Add(new BTCPayNetwork() { CryptoCode = "BTC", BlockExplorerLink = "https://testnet.smartbit.com.au/tx/{0}", NBitcoinNetwork = Network.TestNet, UriScheme = "bitcoin", DefaultRateProvider = btcRate, CryptoImagePath = "imlegacy/bitcoin-symbol.svg" }); Add(new BTCPayNetwork() { CryptoCode = "LTC", BlockExplorerLink = "http://explorer.litecointools.com/tx/{0}", NBitcoinNetwork = NBXplorer.Altcoins.Litecoin.Networks.Testnet, UriScheme = "litecoin", DefaultRateProvider = ltcRate, CryptoImagePath = "imlegacy/litecoin-symbol.svg" }); } if (network == Network.RegTest) { Add(new BTCPayNetwork() { CryptoCode = "BTC", BlockExplorerLink = "https://testnet.smartbit.com.au/tx/{0}", NBitcoinNetwork = Network.RegTest, UriScheme = "bitcoin", DefaultRateProvider = btcRate, CryptoImagePath = "imlegacy/bitcoin-symbol.svg" }); Add(new BTCPayNetwork() { CryptoCode = "LTC", BlockExplorerLink = "http://explorer.litecointools.com/tx/{0}", NBitcoinNetwork = NBXplorer.Altcoins.Litecoin.Networks.Regtest, UriScheme = "litecoin", DefaultRateProvider = ltcRate, CryptoImagePath = "imlegacy/litecoin-symbol.svg" }); } }
public static IServiceCollection AddBTCPayServer(this IServiceCollection services) { services.AddDbContext <ApplicationDbContext>((provider, o) => { var factory = provider.GetRequiredService <ApplicationDbContextFactory>(); factory.ConfigureBuilder(o); }); services.TryAddSingleton <SettingsRepository>(); services.TryAddSingleton <InvoicePaymentNotification>(); services.TryAddSingleton <BTCPayServerOptions>(o => o.GetRequiredService <IOptions <BTCPayServerOptions> >().Value); services.TryAddSingleton <IConfigureOptions <MvcOptions>, BTCPayServerConfigureOptions>(); services.TryAddSingleton(o => { var runtime = new BTCPayServerRuntime(); runtime.Configure(o.GetRequiredService <BTCPayServerOptions>()); return(runtime); }); services.AddSingleton <BTCPayServerEnvironment>(); services.TryAddSingleton <TokenRepository>(); services.TryAddSingleton(o => o.GetRequiredService <BTCPayServerRuntime>().InvoiceRepository); services.TryAddSingleton <Network>(o => o.GetRequiredService <BTCPayServerOptions>().Network); services.TryAddSingleton <ApplicationDbContextFactory>(o => o.GetRequiredService <BTCPayServerRuntime>().DBFactory); services.TryAddSingleton <StoreRepository>(); services.TryAddSingleton <BTCPayWallet>(); services.TryAddSingleton <CurrencyNameTable>(); services.TryAddSingleton <IFeeProvider>(o => new NBXplorerFeeProvider() { Fallback = new FeeRate(100, 1), BlockTarget = 20, ExplorerClient = o.GetRequiredService <ExplorerClient>() }); services.TryAddSingleton <ExplorerClient>(o => { var runtime = o.GetRequiredService <BTCPayServerRuntime>(); return(runtime.Explorer); }); services.TryAddSingleton <Bitpay>(o => { if (o.GetRequiredService <BTCPayServerOptions>().Network == Network.Main) { return(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); } else { return(new Bitpay(new Key(), new Uri("https://test.bitpay.com/"))); } }); services.TryAddSingleton <IRateProvider>(o => { var coinaverage = new CoinAverageRateProvider(); var bitpay = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))); return(new CachedRateProvider(new FallbackRateProvider(new IRateProvider[] { coinaverage, bitpay }), o.GetRequiredService <IMemoryCache>()) { CacheSpan = TimeSpan.FromMinutes(1.0) }); }); services.TryAddSingleton <InvoiceWatcher>(); services.TryAddSingleton <InvoiceNotificationManager>(); services.TryAddSingleton <IHostedService>(o => o.GetRequiredService <InvoiceWatcher>()); services.TryAddScoped <IHttpContextAccessor, HttpContextAccessor>(); services.TryAddSingleton <IAuthorizationHandler, OwnStoreHandler>(); services.AddTransient <AccessTokenController>(); services.AddTransient <CallbackController>(); services.AddTransient <InvoiceController>(); // Add application services. services.AddTransient <IEmailSender, EmailSender>(); services.AddAuthorization(o => { o.AddPolicy("CanAccessStore", builder => { builder.AddRequirements(new OwnStoreAuthorizationRequirement()); }); o.AddPolicy("OwnStore", builder => { builder.AddRequirements(new OwnStoreAuthorizationRequirement("Owner")); }); }); return(services); }