diff --git a/BTCPayServer.Common/Altcoins/Liquid/ElementsLikeBtcPayNetwork.cs b/BTCPayServer.Common/Altcoins/Liquid/ElementsLikeBtcPayNetwork.cs index d2b76e904..b343bdd38 100644 --- a/BTCPayServer.Common/Altcoins/Liquid/ElementsLikeBtcPayNetwork.cs +++ b/BTCPayServer.Common/Altcoins/Liquid/ElementsLikeBtcPayNetwork.cs @@ -10,7 +10,7 @@ namespace BTCPayServer { public string NetworkCryptoCode { get; set; } public uint256 AssetId { get; set; } - public override bool WalletSupported { get; set; } = false; + public override bool ReadonlyWallet { get; set; } = true; public int Divisibility { get; set; } = 8; public override IEnumerable<(MatchedOutput matchedOutput, OutPoint outPoint)> GetValidOutputs(NewTransactionEvent evtOutputs) diff --git a/BTCPayServer.Common/BTCPayNetwork.cs b/BTCPayServer.Common/BTCPayNetwork.cs index 47610bbaf..ec671bced 100644 --- a/BTCPayServer.Common/BTCPayNetwork.cs +++ b/BTCPayServer.Common/BTCPayNetwork.cs @@ -57,6 +57,7 @@ namespace BTCPayServer public Dictionary ElectrumMapping = new Dictionary(); public virtual bool WalletSupported { get; set; } = true; + public virtual bool ReadonlyWallet{ get; set; } = false; public int MaxTrackedConfirmation { get; internal set; } = 6; public string UriScheme { get; internal set; } diff --git a/BTCPayServer/Controllers/WalletsController.cs b/BTCPayServer/Controllers/WalletsController.cs index b0e6c301d..b88077ca2 100644 --- a/BTCPayServer/Controllers/WalletsController.cs +++ b/BTCPayServer/Controllers/WalletsController.cs @@ -246,28 +246,46 @@ namespace BTCPayServer.Controllers var walletBlob = await walletBlobAsync; var walletTransactionsInfo = await walletTransactionsInfoAsync; var model = new ListTransactionsViewModel(); - foreach (var tx in transactions.UnconfirmedTransactions.Transactions.Concat(transactions.ConfirmedTransactions.Transactions).ToArray()) + if (transactions == null) { - var vm = new ListTransactionsViewModel.TransactionViewModel(); - vm.Id = tx.TransactionId.ToString(); - vm.Link = string.Format(CultureInfo.InvariantCulture, paymentMethod.Network.BlockExplorerLink, vm.Id); - vm.Timestamp = tx.Timestamp; - vm.Positive = tx.BalanceChange.GetValue(wallet.Network) >= 0; - vm.Balance = tx.BalanceChange.ToString(); - vm.IsConfirmed = tx.Confirmations != 0; - - if (walletTransactionsInfo.TryGetValue(tx.TransactionId.ToString(), out var transactionInfo)) + TempData.SetStatusMessageModel(new StatusMessageModel() { - var labels = walletBlob.GetLabels(transactionInfo); - vm.Labels.AddRange(labels); - model.Labels.AddRange(labels); - vm.Comment = transactionInfo.Comment; + Severity = StatusMessageModel.StatusSeverity.Error, + Message = + "There was an error retrieving the transactions list. Is NBXplorer configured correctly?" + }); + model.Transactions = new List(); + } + else + { + foreach (var tx in transactions.UnconfirmedTransactions.Transactions + .Concat(transactions.ConfirmedTransactions.Transactions).ToArray()) + { + var vm = new ListTransactionsViewModel.TransactionViewModel(); + vm.Id = tx.TransactionId.ToString(); + vm.Link = string.Format(CultureInfo.InvariantCulture, paymentMethod.Network.BlockExplorerLink, + vm.Id); + vm.Timestamp = tx.Timestamp; + vm.Positive = tx.BalanceChange.GetValue(wallet.Network) >= 0; + vm.Balance = tx.BalanceChange.ToString(); + vm.IsConfirmed = tx.Confirmations != 0; + + if (walletTransactionsInfo.TryGetValue(tx.TransactionId.ToString(), out var transactionInfo)) + { + var labels = walletBlob.GetLabels(transactionInfo); + vm.Labels.AddRange(labels); + model.Labels.AddRange(labels); + vm.Comment = transactionInfo.Comment; + } + + if (labelFilter == null || + vm.Labels.Any(l => l.Value.Equals(labelFilter, StringComparison.OrdinalIgnoreCase))) + model.Transactions.Add(vm); } - if (labelFilter == null || vm.Labels.Any(l => l.Value.Equals(labelFilter, StringComparison.OrdinalIgnoreCase))) - model.Transactions.Add(vm); + model.Transactions = model.Transactions.OrderByDescending(t => t.Timestamp).ToList(); } - model.Transactions = model.Transactions.OrderByDescending(t => t.Timestamp).ToList(); + return View(model); } @@ -289,7 +307,7 @@ namespace BTCPayServer.Controllers if (paymentMethod == null) return NotFound(); var network = this.NetworkProvider.GetNetwork(walletId?.CryptoCode); - if (network == null) + if (network == null || network.ReadonlyWallet) return NotFound(); var storeData = store.GetStoreBlob(); var rateRules = store.GetStoreBlob().GetRateRules(NetworkProvider); @@ -351,7 +369,7 @@ namespace BTCPayServer.Controllers if (store == null) return NotFound(); var network = this.NetworkProvider.GetNetwork(walletId?.CryptoCode); - if (network == null) + if (network == null || network.ReadonlyWallet) return NotFound(); vm.SupportRBF = network.SupportRBF; decimal transactionAmountSum = 0; @@ -872,7 +890,7 @@ namespace BTCPayServer.Controllers WalletId walletId) { var derivationSchemeSettings = GetDerivationSchemeSettings(walletId); - if (derivationSchemeSettings == null) + if (derivationSchemeSettings == null || derivationSchemeSettings.Network.ReadonlyWallet) return NotFound(); var store = (await Repository.FindStore(walletId.StoreId, GetUserId())); var vm = new WalletSettingsViewModel() @@ -901,7 +919,7 @@ namespace BTCPayServer.Controllers if (!ModelState.IsValid) return View(vm); var derivationScheme = GetDerivationSchemeSettings(walletId); - if (derivationScheme == null) + if (derivationScheme == null || derivationScheme.Network.ReadonlyWallet) return NotFound(); if (command == "save") diff --git a/BTCPayServer/Views/Wallets/_Nav.cshtml b/BTCPayServer/Views/Wallets/_Nav.cshtml index 1560856cb..9df785349 100644 --- a/BTCPayServer/Views/Wallets/_Nav.cshtml +++ b/BTCPayServer/Views/Wallets/_Nav.cshtml @@ -1,10 +1,19 @@ @inject SignInManager SignInManager - +@inject BTCPayNetworkProvider BtcPayNetworkProvider +@{ + var wallet = WalletId.Parse( this.Context.GetRouteValue("walletId").ToString()); + var network = BtcPayNetworkProvider.GetNetwork(wallet.CryptoCode); +} -