Beispiel #1
0
 public StoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     AccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     IFeeProviderFactory feeRateProvider,
     LanguageService langService,
     IHostingEnvironment env)
 {
     _RateFactory         = rateFactory;
     _Repo                = repo;
     _TokenRepository     = tokenRepo;
     _UserManager         = userManager;
     _LangService         = langService;
     _TokenController     = tokenController;
     _WalletProvider      = walletProvider;
     _Env                 = env;
     _NetworkProvider     = networkProvider;
     _ExplorerProvider    = explorerProvider;
     _FeeRateProvider     = feeRateProvider;
     _ServiceProvider     = serviceProvider;
     _BtcpayServerOptions = btcpayServerOptions;
     _BTCPayEnv           = btcpayEnv;
 }
Beispiel #2
0
 public AppsHelper(ApplicationDbContextFactory contextFactory, CurrencyNameTable currencies, RateFetcher rateFetcher, HtmlSanitizer htmlSanitizer)
 {
     _ContextFactory = contextFactory;
     _Currencies     = currencies;
     _RateFetcher    = rateFetcher;
     _HtmlSanitizer  = htmlSanitizer;
 }
Beispiel #3
0
 public WalletsController(StoreRepository repo,
                          AtomicSwapRepository atomicSwapRepository,
                          WalletRepository walletRepository,
                          CurrencyNameTable currencyTable,
                          BTCPayNetworkProvider networkProvider,
                          UserManager <ApplicationUser> userManager,
                          MvcNewtonsoftJsonOptions mvcJsonOptions,
                          NBXplorerDashboard dashboard,
                          RateFetcher rateProvider,
                          IAuthorizationService authorizationService,
                          ExplorerClientProvider explorerProvider,
                          IFeeProviderFactory feeRateProvider,
                          BTCPayWalletProvider walletProvider,
                          AtomicSwapClientFactory atomicSwapClientFactory)
 {
     _currencyTable          = currencyTable;
     Repository              = repo;
     WalletRepository        = walletRepository;
     RateFetcher             = rateProvider;
     _authorizationService   = authorizationService;
     NetworkProvider         = networkProvider;
     _userManager            = userManager;
     _serializerSettings     = mvcJsonOptions.SerializerSettings;
     _dashboard              = dashboard;
     ExplorerClientProvider  = explorerProvider;
     _feeRateProvider        = feeRateProvider;
     _walletProvider         = walletProvider;
     AtomicSwapClientFactory = atomicSwapClientFactory;
     AtomicSwapRepository    = atomicSwapRepository;
 }
        public async void CanGetCurrencyListFromChangelly()
        {
            using (var tester = ServerTester.Create())
            {
                tester.Start();
                var user = tester.NewAccount();
                user.GrantAccess();

                //save changelly settings
                var updateModel      = CreateDefaultChangellyParams(true);
                var storesController = tester.PayTester.GetController <StoresController>(user.UserId, user.StoreId);

                //confirm saved
                Assert.Equal("UpdateStore", Assert.IsType <RedirectToActionResult>(
                                 await storesController.UpdateChangellySettings(user.StoreId, updateModel, "save")).ActionName);

                var factory             = UnitTest1.CreateBTCPayRateFactory();
                var fetcher             = new RateFetcher(factory);
                var httpClientFactory   = new MockHttpClientFactory();
                var changellyController = new ChangellyController(
                    new ChangellyClientProvider(tester.PayTester.StoreRepository, httpClientFactory),
                    tester.NetworkProvider, fetcher);
                changellyController.IsTest = true;
                var result = Assert
                             .IsType <OkObjectResult>(await changellyController.GetCurrencyList(user.StoreId))
                             .Value as IEnumerable <CurrencyFull>;
                Assert.True(result.Any());
            }
        }
Beispiel #5
0
 public ServerController(UserManager <ApplicationUser> userManager,
                         StoredFileRepository storedFileRepository,
                         FileService fileService,
                         IEnumerable <IStorageProviderService> storageProviderServices,
                         BTCPayServerOptions options,
                         RateFetcher rateProviderFactory,
                         SettingsRepository settingsRepository,
                         NBXplorerDashboard dashBoard,
                         IHttpClientFactory httpClientFactory,
                         LightningConfigurationProvider lnConfigProvider,
                         TorServices torServices,
                         StoreRepository storeRepository,
                         ApplicationDbContextFactory contextFactory)
 {
     _Options = options;
     _StoredFileRepository    = storedFileRepository;
     _FileService             = fileService;
     _StorageProviderServices = storageProviderServices;
     _UserManager             = userManager;
     _SettingsRepository      = settingsRepository;
     _dashBoard           = dashBoard;
     HttpClientFactory    = httpClientFactory;
     _RateProviderFactory = rateProviderFactory;
     _StoreRepository     = storeRepository;
     _LnConfigProvider    = lnConfigProvider;
     _torServices         = torServices;
     _ContextFactory      = contextFactory;
 }
        public async void CanCalculateToAmountForChangelly()
        {
            using (var tester = ServerTester.Create())
            {
                tester.Start();
                var user = tester.NewAccount();
                user.GrantAccess();

                var updateModel      = CreateDefaultChangellyParams(true);
                var storesController = tester.PayTester.GetController <StoresController>(user.UserId, user.StoreId);

                Assert.Equal("UpdateStore", Assert.IsType <RedirectToActionResult>(
                                 await storesController.UpdateChangellySettings(user.StoreId, updateModel, "save")).ActionName);

                var factory             = UnitTest1.CreateBTCPayRateFactory();
                var fetcher             = new RateFetcher(factory);
                var httpClientFactory   = new MockHttpClientFactory();
                var changellyController = new ChangellyController(
                    new ChangellyClientProvider(tester.PayTester.StoreRepository, httpClientFactory),
                    tester.NetworkProvider, fetcher);
                changellyController.IsTest = true;
                Assert.IsType <decimal>(Assert
                                        .IsType <OkObjectResult>(await changellyController.CalculateAmount(user.StoreId, "ltc", "btc", 1.0m))
                                        .Value);
            }
        }
 public InvoiceController(
     IServiceProvider serviceProvider,
     InvoiceRepository invoiceRepository,
     CurrencyNameTable currencyNameTable,
     UserManager <ApplicationUser> userManager,
     RateFetcher rateProvider,
     StoreRepository storeRepository,
     EventAggregator eventAggregator,
     ContentSecurityPolicies csp,
     BTCPayNetworkProvider networkProvider,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     ApplicationDbContextFactory dbContextFactory,
     PullPaymentHostedService paymentHostedService,
     WebhookNotificationManager webhookNotificationManager)
 {
     _ServiceProvider   = serviceProvider;
     _CurrencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
     _StoreRepository   = storeRepository ?? throw new ArgumentNullException(nameof(storeRepository));
     _InvoiceRepository = invoiceRepository ?? throw new ArgumentNullException(nameof(invoiceRepository));
     _RateProvider      = rateProvider ?? throw new ArgumentNullException(nameof(rateProvider));
     _UserManager       = userManager;
     _EventAggregator   = eventAggregator;
     _NetworkProvider   = networkProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _dbContextFactory          = dbContextFactory;
     _paymentHostedService      = paymentHostedService;
     WebhookNotificationManager = webhookNotificationManager;
     _CSP = csp;
 }
Beispiel #8
0
 public InvoiceController(
     IServiceProvider serviceProvider,
     InvoiceRepository invoiceRepository,
     CurrencyNameTable currencyNameTable,
     UserManager <ApplicationUser> userManager,
     RateFetcher rateProvider,
     StoreRepository storeRepository,
     EventAggregator eventAggregator,
     BTCPayWalletProvider walletProvider,
     ContentSecurityPolicies csp,
     BTCPayNetworkProvider networkProvider,
     IEnumerable <IPaymentMethodHandler> paymentMethodHandlers)
 {
     _ServiceProvider       = serviceProvider;
     _CurrencyNameTable     = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
     _StoreRepository       = storeRepository ?? throw new ArgumentNullException(nameof(storeRepository));
     _InvoiceRepository     = invoiceRepository ?? throw new ArgumentNullException(nameof(invoiceRepository));
     _RateProvider          = rateProvider ?? throw new ArgumentNullException(nameof(rateProvider));
     _UserManager           = userManager;
     _EventAggregator       = eventAggregator;
     _NetworkProvider       = networkProvider;
     _paymentMethodHandlers = paymentMethodHandlers;
     _WalletProvider        = walletProvider;
     _CSP = csp;
 }
 public UIInvoiceController(
     InvoiceRepository invoiceRepository,
     CurrencyNameTable currencyNameTable,
     UserManager <ApplicationUser> userManager,
     RateFetcher rateProvider,
     StoreRepository storeRepository,
     EventAggregator eventAggregator,
     ContentSecurityPolicies csp,
     BTCPayNetworkProvider networkProvider,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     ApplicationDbContextFactory dbContextFactory,
     PullPaymentHostedService paymentHostedService,
     WebhookSender webhookNotificationManager,
     LanguageService languageService,
     ExplorerClientProvider explorerClients,
     UIWalletsController walletsController)
 {
     _CurrencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
     _StoreRepository   = storeRepository ?? throw new ArgumentNullException(nameof(storeRepository));
     _InvoiceRepository = invoiceRepository ?? throw new ArgumentNullException(nameof(invoiceRepository));
     _RateProvider      = rateProvider ?? throw new ArgumentNullException(nameof(rateProvider));
     _UserManager       = userManager;
     _EventAggregator   = eventAggregator;
     _NetworkProvider   = networkProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _dbContextFactory          = dbContextFactory;
     _paymentHostedService      = paymentHostedService;
     WebhookNotificationManager = webhookNotificationManager;
     _languageService           = languageService;
     this._ExplorerClients      = explorerClients;
     _walletsController         = walletsController;
 }
Beispiel #10
0
        public ChangellyController(ChangellyClientProvider changellyClientProvider,
                                   BTCPayNetworkProvider btcPayNetworkProvider,
                                   RateFetcher rateProviderFactory)
        {
            _RateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));

            _changellyClientProvider = changellyClientProvider;
            _btcPayNetworkProvider   = btcPayNetworkProvider;
        }
 public UIUserStoresController(
     UserManager <ApplicationUser> userManager,
     StoreRepository storeRepository,
     RateFetcher rateFactory)
 {
     _repo        = storeRepository;
     _userManager = userManager;
     _rateFactory = rateFactory;
 }
 public BitpayRateController(
     RateFetcher rateProviderFactory,
     BTCPayNetworkProvider networkProvider,
     StoreRepository storeRepo,
     CurrencyNameTable currencyNameTable)
 {
     _rateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));
     _networkProvider     = networkProvider;
     _storeRepo           = storeRepo;
     _currencyNameTable   = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
 }
Beispiel #13
0
 public RateController(
     RateFetcher rateProviderFactory,
     BTCPayNetworkProvider networkProvider,
     TokenRepository tokenRepository,
     StoreRepository storeRepo,
     CurrencyNameTable currencyNameTable)
 {
     _RateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));
     _NetworkProvider     = networkProvider;
     TokenRepository      = tokenRepository;
     _StoreRepo           = storeRepo;
     _CurrencyNameTable   = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
 }
Beispiel #14
0
 public AppService(ApplicationDbContextFactory contextFactory,
                   InvoiceRepository invoiceRepository,
                   BTCPayNetworkProvider networks,
                   CurrencyNameTable currencies,
                   RateFetcher rateFetcher,
                   HtmlSanitizer htmlSanitizer)
 {
     _ContextFactory    = contextFactory;
     _InvoiceRepository = invoiceRepository;
     _Currencies        = currencies;
     _RateFetcher       = rateFetcher;
     _HtmlSanitizer     = htmlSanitizer;
     _Networks          = networks;
 }
 public ServerController(UserManager <ApplicationUser> userManager,
                         Configuration.BTCPayServerOptions options,
                         RateFetcher rateProviderFactory,
                         SettingsRepository settingsRepository,
                         NBXplorerDashboard dashBoard,
                         LightningConfigurationProvider lnConfigProvider,
                         Services.Stores.StoreRepository storeRepository)
 {
     _Options             = options;
     _UserManager         = userManager;
     _SettingsRepository  = settingsRepository;
     _dashBoard           = dashBoard;
     _RateProviderFactory = rateProviderFactory;
     _StoreRepository     = storeRepository;
     _LnConfigProvider    = lnConfigProvider;
 }
Beispiel #16
0
 public StoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     AccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     LanguageService langService,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     SettingsRepository settingsRepository,
     IAuthorizationService authorizationService,
     EventAggregator eventAggregator,
     CssThemeManager cssThemeManager,
     AppService appService,
     IWebHostEnvironment webHostEnvironment,
     WebhookNotificationManager webhookNotificationManager,
     IOptions <LightningNetworkOptions> lightningNetworkOptions,
     IDataProtectionProvider dataProtector)
 {
     _RateFactory     = rateFactory;
     _Repo            = repo;
     _TokenRepository = tokenRepo;
     _UserManager     = userManager;
     _LangService     = langService;
     _TokenController = tokenController;
     _WalletProvider  = walletProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _settingsRepository             = settingsRepository;
     _authorizationService           = authorizationService;
     _CssThemeManager           = cssThemeManager;
     _appService                = appService;
     _webHostEnvironment        = webHostEnvironment;
     _lightningNetworkOptions   = lightningNetworkOptions;
     DataProtector              = dataProtector.CreateProtector("ConfigProtector");
     WebhookNotificationManager = webhookNotificationManager;
     _EventAggregator           = eventAggregator;
     _NetworkProvider           = networkProvider;
     _ExplorerProvider          = explorerProvider;
     _ServiceProvider           = serviceProvider;
     _BtcpayServerOptions       = btcpayServerOptions;
     _BTCPayEnv = btcpayEnv;
 }
 public StoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     AccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     IFeeProviderFactory feeRateProvider,
     LanguageService langService,
     ChangellyClientProvider changellyClientProvider,
     IWebHostEnvironment env, IHttpClientFactory httpClientFactory,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     SettingsRepository settingsRepository,
     IAuthorizationService authorizationService,
     EventAggregator eventAggregator,
     CssThemeManager cssThemeManager,
     AppService appService)
 {
     _RateFactory             = rateFactory;
     _Repo                    = repo;
     _TokenRepository         = tokenRepo;
     _UserManager             = userManager;
     _LangService             = langService;
     _changellyClientProvider = changellyClientProvider;
     _TokenController         = tokenController;
     _WalletProvider          = walletProvider;
     _Env = env;
     _httpClientFactory = httpClientFactory;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _settingsRepository             = settingsRepository;
     _authorizationService           = authorizationService;
     _CssThemeManager     = cssThemeManager;
     _appService          = appService;
     _EventAggregator     = eventAggregator;
     _NetworkProvider     = networkProvider;
     _ExplorerProvider    = explorerProvider;
     _FeeRateProvider     = feeRateProvider;
     _ServiceProvider     = serviceProvider;
     _BtcpayServerOptions = btcpayServerOptions;
     _BTCPayEnv           = btcpayEnv;
 }
 public UIStoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     BitpayAccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     LanguageService langService,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     SettingsRepository settingsRepository,
     IAuthorizationService authorizationService,
     EventAggregator eventAggregator,
     AppService appService,
     WebhookSender webhookNotificationManager,
     IDataProtectionProvider dataProtector,
     NBXplorerDashboard Dashboard,
     IOptions <ExternalServicesOptions> externalServiceOptions)
 {
     _RateFactory     = rateFactory;
     _Repo            = repo;
     _TokenRepository = tokenRepo;
     _UserManager     = userManager;
     _LangService     = langService;
     _TokenController = tokenController;
     _WalletProvider  = walletProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _settingsRepository             = settingsRepository;
     _authorizationService           = authorizationService;
     _appService   = appService;
     DataProtector = dataProtector.CreateProtector("ConfigProtector");
     WebhookNotificationManager = webhookNotificationManager;
     _EventAggregator           = eventAggregator;
     _NetworkProvider           = networkProvider;
     _ExplorerProvider          = explorerProvider;
     _ServiceProvider           = serviceProvider;
     _BtcpayServerOptions       = btcpayServerOptions;
     _BTCPayEnv = btcpayEnv;
     _Dashboard = Dashboard;
     _externalServiceOptions = externalServiceOptions;
 }
Beispiel #19
0
 public StoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     AccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     IFeeProviderFactory feeRateProvider,
     LanguageService langService,
     ChangellyClientProvider changellyClientProvider,
     IOptions <MvcJsonOptions> mvcJsonOptions,
     IHostingEnvironment env, IHttpClientFactory httpClientFactory,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     CssThemeManager cssThemeManager)
 {
     _RateFactory             = rateFactory;
     _Repo                    = repo;
     _TokenRepository         = tokenRepo;
     _UserManager             = userManager;
     _LangService             = langService;
     _changellyClientProvider = changellyClientProvider;
     MvcJsonOptions           = mvcJsonOptions;
     _TokenController         = tokenController;
     _WalletProvider          = walletProvider;
     _Env = env;
     _httpClientFactory = httpClientFactory;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _CssThemeManager     = cssThemeManager;
     _NetworkProvider     = networkProvider;
     _ExplorerProvider    = explorerProvider;
     _FeeRateProvider     = feeRateProvider;
     _ServiceProvider     = serviceProvider;
     _BtcpayServerOptions = btcpayServerOptions;
     _BTCPayEnv           = btcpayEnv;
 }
 public WalletsController(StoreRepository repo,
                          CurrencyNameTable currencyTable,
                          BTCPayNetworkProvider networkProvider,
                          UserManager <ApplicationUser> userManager,
                          IOptions <MvcJsonOptions> mvcJsonOptions,
                          NBXplorerDashboard dashboard,
                          RateFetcher rateProvider,
                          ExplorerClientProvider explorerProvider,
                          IFeeProviderFactory feeRateProvider,
                          BTCPayWalletProvider walletProvider)
 {
     _currencyTable    = currencyTable;
     _Repo             = repo;
     _RateProvider     = rateProvider;
     _NetworkProvider  = networkProvider;
     _userManager      = userManager;
     _mvcJsonOptions   = mvcJsonOptions;
     _dashboard        = dashboard;
     _explorerProvider = explorerProvider;
     _feeRateProvider  = feeRateProvider;
     _walletProvider   = walletProvider;
 }
Beispiel #21
0
        public async Task <IActionResult> NewAtomicSwap(
            [ModelBinder(typeof(WalletIdModelBinder))]
            WalletId walletId,
            NewViewModel newVM)
        {
            var fromWallet = await GetDerivationStrategy(walletId);

            var statusAsync = ExplorerClientProvider.GetExplorerClient(fromWallet.Network).GetStatusAsync();

            if (fromWallet == null)
            {
                return(NotFound());
            }
            var wallets = await GetNamedWallets(walletId.CryptoCode);

            newVM.SetWalletList(wallets, newVM.SelectedWallet);
            newVM.CryptoCode = fromWallet.Network.CryptoCode;
            if (!WalletId.TryParse(newVM.SelectedWallet, out var selectedWalletId))
            {
                ModelState.AddModelError(nameof(newVM.SelectedWallet), "Invalid wallet id");
                return(View(newVM));
            }
            var toWallet = await GetDerivationStrategy(selectedWalletId);

            if (toWallet == null)
            {
                ModelState.AddModelError(nameof(newVM.SelectedWallet), "Invalid wallet id");
                return(View(newVM));
            }

            var             id    = Encoders.Base58.EncodeData(RandomUtils.GetBytes(20));
            AtomicSwapOffer offer = new AtomicSwapOffer();

            offer.MarketMakerUri = new Uri($"{this.Request.GetAbsoluteRoot().WithTrailingSlash()}api/xswap/{id}", UriKind.Absolute);
            offer.Offer          = new AtomicSwapOfferAsset()
            {
                Amount     = Money.Coins((decimal)newVM.Amount),
                CryptoCode = walletId.CryptoCode,
            };

            var minRelayFee   = (await statusAsync).BitcoinStatus.MinRelayTxFee;
            var minimumAmount = minRelayFee.GetFee(200); // Arbitrary but should cover the dust of any output

            if (offer.Offer.Amount <= minimumAmount)
            {
                ModelState.AddModelError(nameof(newVM.Amount), $"Amount must be above {minimumAmount}");
                return(View(newVM));
            }
            offer.Price = new AtomicSwapOfferAsset()
            {
                CryptoCode = toWallet.PaymentId.CryptoCode
            };
            var lockTimespan = TimeSpan.FromDays(2);

            offer.CreatedAt = DateTimeOffset.UtcNow;

            var storeData = await Repository.FindStore(walletId.StoreId, GetUserId());

            if (ModelState.IsValid)
            {
                var pair = new CurrencyPair("AAA", "BBB");
                newVM.RateRule = $"{pair} = {newVM.RateRule}";

                if (RateRules.TryParse(newVM.RateRule, out var rules, out var rateRulesErrors))
                {
                    rules.Spread = (decimal)newVM.Spread / 100.0m;
                    var rateResult = await RateFetcher.FetchRate(pair, rules, CancellationToken.None);

                    if (rateResult.BidAsk == null)
                    {
                        string errorMessage = "Error when fetching rate";
                        if (rateResult.EvaluatedRule != null)
                        {
                            errorMessage += $" ({rateResult.EvaluatedRule})";
                        }
                        ModelState.AddModelError(nameof(newVM.RateRule), errorMessage);
                    }
                    else
                    {
                        offer.Price.Amount = Money.Coins(offer.Offer.Amount.ToDecimal(MoneyUnit.BTC) * rateResult.BidAsk.Ask);

                        rules.Spread = 0;
                        offer.Rule   = rules.GetRuleFor(pair).ToString();
                    }
                }
                else
                {
                    string errorDetails = "";
                    if (rateRulesErrors.Count > 0)
                    {
                        errorDetails = $" ({rateRulesErrors[0]})";
                    }
                    ModelState.AddModelError(nameof(newVM.RateRule), $"Impossible to parse rate rules{errorDetails}");
                }
            }
Beispiel #22
0
        public async Task <IActionResult> WalletSend(
            [ModelBinder(typeof(WalletIdModelBinder))]
            WalletId walletId, string defaultDestination = null, string defaultAmount = null)
        {
            if (walletId?.StoreId == null)
            {
                return(NotFound());
            }
            var store = await Repository.FindStore(walletId.StoreId, GetUserId());

            DerivationSchemeSettings paymentMethod = GetPaymentMethod(walletId, store);

            if (paymentMethod == null)
            {
                return(NotFound());
            }
            var network = this.NetworkProvider.GetNetwork(walletId?.CryptoCode);

            if (network == null)
            {
                return(NotFound());
            }
            var storeData = store.GetStoreBlob();
            var rateRules = store.GetStoreBlob().GetRateRules(NetworkProvider);

            rateRules.Spread = 0.0m;
            var             currencyPair = new Rating.CurrencyPair(paymentMethod.PaymentId.CryptoCode, GetCurrencyCode(storeData.DefaultLang) ?? "USD");
            WalletSendModel model        = new WalletSendModel()
            {
                Destination = defaultDestination,
                CryptoCode  = walletId.CryptoCode
            };

            if (double.TryParse(defaultAmount, out var amount))
            {
                model.Amount = (decimal)amount;
            }

            var feeProvider     = _feeRateProvider.CreateFeeProvider(network);
            var recommendedFees = feeProvider.GetFeeRateAsync();
            var balance         = _walletProvider.GetWallet(network).GetBalance(paymentMethod.AccountDerivation);

            model.CurrentBalance            = (await balance).ToDecimal(MoneyUnit.BTC);
            model.RecommendedSatoshiPerByte = (int)(await recommendedFees).GetFee(1).Satoshi;
            model.FeeSatoshiPerByte         = model.RecommendedSatoshiPerByte;
            model.SupportRBF = network.SupportRBF;
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                try
                {
                    cts.CancelAfter(TimeSpan.FromSeconds(5));
                    var result = await RateFetcher.FetchRate(currencyPair, rateRules, cts.Token).WithCancellation(cts.Token);

                    if (result.BidAsk != null)
                    {
                        model.Rate         = result.BidAsk.Center;
                        model.Divisibility = _currencyTable.GetNumberFormatInfo(currencyPair.Right, true).CurrencyDecimalDigits;
                        model.Fiat         = currencyPair.Right;
                    }
                    else
                    {
                        model.RateError = $"{result.EvaluatedRule} ({string.Join(", ", result.Errors.OfType<object>().ToArray())})";
                    }
                }
                catch (Exception ex) { model.RateError = ex.Message; }
            }
            return(View(model));
        }