From c9fe68b81225576939369d783a516b01c57abcd2 Mon Sep 17 00:00:00 2001 From: jackstar12 <62219658+jackstar12@users.noreply.github.com> Date: Sun, 27 Oct 2024 11:12:39 +0100 Subject: [PATCH 01/10] fix: pass current offset to log route (#6329) the current offset is lost otherwise and will cause a 404 if it was greater than 0 --- BTCPayServer/Views/UIServer/Logs.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BTCPayServer/Views/UIServer/Logs.cshtml b/BTCPayServer/Views/UIServer/Logs.cshtml index 8bd93a6774..bdbefca38f 100644 --- a/BTCPayServer/Views/UIServer/Logs.cshtml +++ b/BTCPayServer/Views/UIServer/Logs.cshtml @@ -12,7 +12,7 @@ @foreach (var file in Model.LogFiles) {
  • - @file.Name + @file.Name
  • } From 0e59107eeec5ee790056a207b269203b89bb22d6 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Sun, 27 Oct 2024 19:34:20 +0900 Subject: [PATCH 02/10] Fix tests with LightningPendingPayoutListener overriding automated payouts state changes --- .../Payments/Lightning/LightningPendingPayoutListener.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs index 708510ed1c..fc9ae63be5 100644 --- a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs +++ b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs @@ -94,6 +94,9 @@ private async Task Act() var handler = _payoutHandlers.TryGet(payoutData.GetPayoutMethodId()) as LightningLikePayoutHandler; if (handler is null || handler.PayoutsPaymentProcessing.Contains(payoutData.Id)) continue; + using var tracking = handler.PayoutsPaymentProcessing.StartTracking(); + if (!tracking.TryTrack(payoutData.Id)) + continue; var proof = handler.ParseProof(payoutData) as PayoutLightningBlob; LightningPayment payment = null; From 9bb1a5b80a0772aa09aeb20d00ab92bdefd7e906 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Sun, 27 Oct 2024 19:53:13 +0900 Subject: [PATCH 03/10] Prevent concurrency race on lightning payout update --- .../LightningPendingPayoutListener.cs | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs index fc9ae63be5..2b3d78d803 100644 --- a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs +++ b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs @@ -13,6 +13,7 @@ using BTCPayServer.Services.Stores; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Newtonsoft.Json.Linq; using PayoutData = BTCPayServer.Data.PayoutData; using StoreData = BTCPayServer.Data.StoreData; @@ -21,7 +22,6 @@ namespace BTCPayServer.Payments.Lightning; public class LightningPendingPayoutListener : BaseAsyncService { private readonly LightningClientFactoryService _lightningClientFactoryService; - private readonly ApplicationDbContextFactory _applicationDbContextFactory; private readonly PullPaymentHostedService _pullPaymentHostedService; private readonly StoreRepository _storeRepository; private readonly IOptions _options; @@ -32,7 +32,6 @@ public class LightningPendingPayoutListener : BaseAsyncService public LightningPendingPayoutListener( LightningClientFactoryService lightningClientFactoryService, - ApplicationDbContextFactory applicationDbContextFactory, PullPaymentHostedService pullPaymentHostedService, StoreRepository storeRepository, IOptions options, @@ -42,7 +41,6 @@ public LightningPendingPayoutListener( ILogger logger) : base(logger) { _lightningClientFactoryService = lightningClientFactoryService; - _applicationDbContextFactory = applicationDbContextFactory; _pullPaymentHostedService = pullPaymentHostedService; _storeRepository = storeRepository; _options = options; @@ -54,19 +52,18 @@ public LightningPendingPayoutListener( private async Task Act() { - await using var context = _applicationDbContextFactory.CreateContext(); var networks = _networkProvider.GetAll() .OfType() .Where(network => network.SupportLightning) .ToDictionary(network => PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode)); - var payouts = await PullPaymentHostedService.GetPayouts( + var payouts = await _pullPaymentHostedService.GetPayouts( new PullPaymentHostedService.PayoutQuery() { States = new PayoutState[] { PayoutState.InProgress }, PayoutMethods = networks.Keys.Select(id => id.ToString()).ToArray() - }, context); + }); var storeIds = payouts.Select(data => data.StoreDataId).Distinct(); var stores = (await Task.WhenAll(storeIds.Select(_storeRepository.FindStore))) .Where(data => data is not null).ToDictionary(data => data.Id, data => (StoreData)data); @@ -83,9 +80,7 @@ private async Task Act() .Select(c => (LightningPaymentMethodConfig)c.Value) .FirstOrDefault(); if (pm is null) - { continue; - } var client = pm.CreateLightningClient(networks[pmi], _options.Value, _lightningClientFactoryService); @@ -94,9 +89,6 @@ private async Task Act() var handler = _payoutHandlers.TryGet(payoutData.GetPayoutMethodId()) as LightningLikePayoutHandler; if (handler is null || handler.PayoutsPaymentProcessing.Contains(payoutData.Id)) continue; - using var tracking = handler.PayoutsPaymentProcessing.StartTracking(); - if (!tracking.TryTrack(payoutData.Id)) - continue; var proof = handler.ParseProof(payoutData) as PayoutLightningBlob; LightningPayment payment = null; @@ -125,10 +117,23 @@ private async Task Act() break; } } + + foreach (PayoutData payoutData in payoutByStoreByPaymentMethod) + { + if (payoutData.State != PayoutState.InProgress) + { + // This update can fail if the payout has been updated in the meantime + await _pullPaymentHostedService.MarkPaid(new HostedServices.MarkPayoutRequest() + { + PayoutId = payoutData.Id, + State = payoutData.State, + Proof = payoutData.State is PayoutState.Completed ? JObject.Parse(payoutData.Proof) : null + }); + } + } } } - await context.SaveChangesAsync(CancellationToken); await Task.Delay(TimeSpan.FromSeconds(SecondsDelay), CancellationToken); } From 41a2241ae1617cc365100786bd7d9c47bb082610 Mon Sep 17 00:00:00 2001 From: jackstar12 <62219658+jackstar12@users.noreply.github.com> Date: Sun, 27 Oct 2024 13:43:47 +0100 Subject: [PATCH 04/10] feat: log download button (#6330) * feat: add download button to logs view * fix: add using block for `fileStream` if it isnt downloaded --- BTCPayServer/Controllers/UIServerController.cs | 18 ++++++++++++++---- BTCPayServer/Views/UIServer/Logs.cshtml | 6 ++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/BTCPayServer/Controllers/UIServerController.cs b/BTCPayServer/Controllers/UIServerController.cs index 42d1e24ed9..56e0c64806 100644 --- a/BTCPayServer/Controllers/UIServerController.cs +++ b/BTCPayServer/Controllers/UIServerController.cs @@ -1275,7 +1275,7 @@ public async Task Emails(ServerEmailsViewModel model, string comm } [Route("server/logs/{file?}")] - public async Task LogsView(string? file = null, int offset = 0) + public async Task LogsView(string? file = null, int offset = 0, bool download = false) { if (offset < 0) { @@ -1317,13 +1317,23 @@ public async Task LogsView(string? file = null, int offset = 0) return NotFound(); try { - using var fileStream = new FileStream( + var fileStream = new FileStream( fi.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - using var reader = new StreamReader(fileStream); - vm.Log = await reader.ReadToEndAsync(); + if (download) + { + return new FileStreamResult(fileStream, "text/plain") + { + FileDownloadName = file + }; + } + await using (fileStream) + { + using var reader = new StreamReader(fileStream); + vm.Log = await reader.ReadToEndAsync(); + } } catch { diff --git a/BTCPayServer/Views/UIServer/Logs.cshtml b/BTCPayServer/Views/UIServer/Logs.cshtml index bdbefca38f..77a983af11 100644 --- a/BTCPayServer/Views/UIServer/Logs.cshtml +++ b/BTCPayServer/Views/UIServer/Logs.cshtml @@ -13,6 +13,12 @@ {
  • @file.Name + + + + + +
  • } From 0ac655384030231780851ef753ed222160e604ea Mon Sep 17 00:00:00 2001 From: Dennis Reimann Date: Mon, 28 Oct 2024 08:25:30 +0100 Subject: [PATCH 05/10] Add download icon --- BTCPayServer/Views/UIServer/Logs.cshtml | 5 +---- BTCPayServer/wwwroot/img/icon-sprite.svg | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/BTCPayServer/Views/UIServer/Logs.cshtml b/BTCPayServer/Views/UIServer/Logs.cshtml index 77a983af11..f9acf11b81 100644 --- a/BTCPayServer/Views/UIServer/Logs.cshtml +++ b/BTCPayServer/Views/UIServer/Logs.cshtml @@ -14,10 +14,7 @@
  • @file.Name - - - - +
  • } diff --git a/BTCPayServer/wwwroot/img/icon-sprite.svg b/BTCPayServer/wwwroot/img/icon-sprite.svg index 33f747f523..30973fc78d 100644 --- a/BTCPayServer/wwwroot/img/icon-sprite.svg +++ b/BTCPayServer/wwwroot/img/icon-sprite.svg @@ -4,6 +4,7 @@ + From 92f9b226fe9c7de2dd700b773c8c58588f535af8 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Mon, 28 Oct 2024 22:12:29 +0900 Subject: [PATCH 06/10] Prevent additional concurrency issues with LightnignPendingPayoutListener --- .../Payments/Lightning/LightningPendingPayoutListener.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs index 2b3d78d803..c20179c9ff 100644 --- a/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs +++ b/BTCPayServer/Payments/Lightning/LightningPendingPayoutListener.cs @@ -89,6 +89,9 @@ private async Task Act() var handler = _payoutHandlers.TryGet(payoutData.GetPayoutMethodId()) as LightningLikePayoutHandler; if (handler is null || handler.PayoutsPaymentProcessing.Contains(payoutData.Id)) continue; + using var track = handler.PayoutsPaymentProcessing.StartTracking(); + if (!track.TryTrack(payoutData.Id)) + continue; var proof = handler.ParseProof(payoutData) as PayoutLightningBlob; LightningPayment payment = null; From 373b90e3b5a1822eebd0dab68b8fc1d74d74bb06 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Tue, 29 Oct 2024 15:43:37 +0100 Subject: [PATCH 07/10] Liquid fixes (#6340) make sure link provider is per payment method of liquid assets. Also remove ETB as it has been unused. Also hide the send button as it is not supported thrrough BTCPay --- .../AltcoinTests/ElementsTests.cs | 12 +---- .../Components/MainNav/Default.cshtml | 11 +++-- .../UIStoresController.Dashboard.cs | 1 + .../StoreViewModels/StoreDerivationScheme.cs | 1 + BTCPayServer/Payments/PaymentMethodId.cs | 1 - .../Plugins/Altcoins/AltcoinsPlugin.cs | 12 ----- .../Altcoins/Liquid/AltcoinsPlugin.Liquid.cs | 6 ++- .../Liquid/AltcoinsPlugin.LiquidAssets.cs | 45 +++++-------------- 8 files changed, 27 insertions(+), 62 deletions(-) diff --git a/BTCPayServer.Tests/AltcoinTests/ElementsTests.cs b/BTCPayServer.Tests/AltcoinTests/ElementsTests.cs index 5e6b870af8..4e730aa974 100644 --- a/BTCPayServer.Tests/AltcoinTests/ElementsTests.cs +++ b/BTCPayServer.Tests/AltcoinTests/ElementsTests.cs @@ -63,7 +63,6 @@ public async Task ElementsAssetsAreHandledCorrectly() //no tether on our regtest, lets create it and set it var tether = tester.NetworkProvider.GetNetwork("USDT"); var lbtc = tester.NetworkProvider.GetNetwork("LBTC"); - var etb = tester.NetworkProvider.GetNetwork("ETB"); var issueAssetResult = await tester.LBTCExplorerNode.SendCommandAsync("issueasset", 100000, 0); tether.AssetId = uint256.Parse(issueAssetResult.Result["asset"].ToString()); ((ElementsBTCPayNetwork)tester.PayTester.GetService().GetWallet("USDT").Network) @@ -71,15 +70,10 @@ public async Task ElementsAssetsAreHandledCorrectly() Assert.Equal(tether.AssetId, tester.NetworkProvider.GetNetwork("USDT").AssetId); Assert.Equal(tether.AssetId, ((ElementsBTCPayNetwork)tester.PayTester.GetService().GetWallet("USDT").Network).AssetId); - var issueAssetResult2 = await tester.LBTCExplorerNode.SendCommandAsync("issueasset", 100000, 0); - etb.AssetId = uint256.Parse(issueAssetResult2.Result["asset"].ToString()); - ((ElementsBTCPayNetwork)tester.PayTester.GetService().GetWallet("ETB").Network) - .AssetId = etb.AssetId; user.RegisterDerivationScheme("LBTC"); user.RegisterDerivationScheme("USDT"); - user.RegisterDerivationScheme("ETB"); //test: register 2 assets on the same elements network and make sure paying an invoice on one does not affect the other in any way var invoice = await user.BitPay.CreateInvoiceAsync(new Invoice(0.1m, "BTC")); @@ -109,11 +103,7 @@ public async Task ElementsAssetsAreHandledCorrectly() Assert.Equal("paid", localInvoice.Status); Assert.Single(localInvoice.CryptoInfo.Single(info => info.CryptoCode.Equals("USDT", StringComparison.InvariantCultureIgnoreCase)).Payments); }); - - //test precision based on https://github.com/ElementsProject/elements/issues/805#issuecomment-601277606 - var etbBip21 = new BitcoinUrlBuilder(invoice.CryptoInfo.Single(info => info.CryptoCode == "ETB").PaymentUrls.BIP21, etb.NBitcoinNetwork); - //precision = 2, 1ETB = 0.00000100 - Assert.Equal(100, etbBip21.Amount.Satoshi); + var lbtcBip21 = new BitcoinUrlBuilder(invoice.CryptoInfo.Single(info => info.CryptoCode == "LBTC").PaymentUrls.BIP21, lbtc.NBitcoinNetwork); //precision = 8, 0.1 = 0.1 diff --git a/BTCPayServer/Components/MainNav/Default.cshtml b/BTCPayServer/Components/MainNav/Default.cshtml index e5ab2ba8ac..89ef50574b 100644 --- a/BTCPayServer/Components/MainNav/Default.cshtml +++ b/BTCPayServer/Components/MainNav/Default.cshtml @@ -106,9 +106,14 @@ @if (ViewData.IsCategoryActive(typeof(WalletsNavPages), scheme.WalletId.ToString()) || ViewData.IsPageActive([WalletsNavPages.Settings], scheme.WalletId.ToString()) || ViewData.IsPageActive([StoreNavPages.OnchainSettings], categoryId)) { - + @if (!scheme.ReadonlyWallet) + { + + } + + diff --git a/BTCPayServer/Controllers/UIStoresController.Dashboard.cs b/BTCPayServer/Controllers/UIStoresController.Dashboard.cs index 5d1ece6289..9de803945a 100644 --- a/BTCPayServer/Controllers/UIStoresController.Dashboard.cs +++ b/BTCPayServer/Controllers/UIStoresController.Dashboard.cs @@ -146,6 +146,7 @@ internal void AddPaymentMethods(StoreData store, StoreBlob storeBlob, Crypto = network.CryptoCode, PaymentMethodId = handler.PaymentMethodId, WalletSupported = network.WalletSupported, + ReadonlyWallet = network.ReadonlyWallet, Value = value, WalletId = new WalletId(store.Id, network.CryptoCode), Enabled = !excludeFilters.Match(handler.PaymentMethodId) && strategy != null, diff --git a/BTCPayServer/Models/StoreViewModels/StoreDerivationScheme.cs b/BTCPayServer/Models/StoreViewModels/StoreDerivationScheme.cs index 31f8a40ee0..23ada58689 100644 --- a/BTCPayServer/Models/StoreViewModels/StoreDerivationScheme.cs +++ b/BTCPayServer/Models/StoreViewModels/StoreDerivationScheme.cs @@ -9,6 +9,7 @@ public class StoreDerivationScheme public string Value { get; set; } public WalletId WalletId { get; set; } public bool WalletSupported { get; set; } + public bool ReadonlyWallet { get; set; } public bool Enabled { get; set; } public bool Collapsed { get; set; } } diff --git a/BTCPayServer/Payments/PaymentMethodId.cs b/BTCPayServer/Payments/PaymentMethodId.cs index 939ca2c16f..a9c12cacd3 100644 --- a/BTCPayServer/Payments/PaymentMethodId.cs +++ b/BTCPayServer/Payments/PaymentMethodId.cs @@ -104,7 +104,6 @@ public override string ToString() "XMR", "ZEC", "LCAD", - "ETB", "LBTC", "USDt", "MONA", diff --git a/BTCPayServer/Plugins/Altcoins/AltcoinsPlugin.cs b/BTCPayServer/Plugins/Altcoins/AltcoinsPlugin.cs index 36a3b10cfb..7bd9ff9f55 100644 --- a/BTCPayServer/Plugins/Altcoins/AltcoinsPlugin.cs +++ b/BTCPayServer/Plugins/Altcoins/AltcoinsPlugin.cs @@ -1,15 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; using BTCPayServer.Abstractions.Models; -using BTCPayServer.Hosting; -using BTCPayServer.Logging; -using Microsoft.AspNetCore.HttpOverrides; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using NBitcoin; -using NBitcoin.Protocol; using NBXplorer; namespace BTCPayServer.Plugins.Altcoins @@ -37,15 +28,12 @@ public override void Execute(IServiceCollection applicationBuilder) { // Activating LBTC automatically activate the other liquid assets InitUSDT(services, selectedChains, liquidNBX); - InitETB(services, selectedChains, liquidNBX); InitLCAD(services, selectedChains, liquidNBX); } else { if (selectedChains.Contains("USDT")) InitUSDT(services, selectedChains, liquidNBX); - if (selectedChains.Contains("ETB")) - InitETB(services, selectedChains, liquidNBX); if (selectedChains.Contains("LCAD")) InitLCAD(services, selectedChains, liquidNBX); } diff --git a/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.Liquid.cs b/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.Liquid.cs index fd61e9132a..c855eb890f 100644 --- a/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.Liquid.cs +++ b/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.Liquid.cs @@ -27,7 +27,11 @@ public void InitLiquid(IServiceCollection services, NBXplorer.NBXplorerNetwork n CryptoImagePath = "imlegacy/liquid.png", DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainName), CoinType = ChainName == ChainName.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"), - SupportRBF = true + SupportRBF = true, + SupportLightning = false, + SupportPayJoin = false, + VaultSupported = false, + ReadonlyWallet = true }.SetDefaultElectrumMapping(ChainName); var blockExplorerLink = ChainName == ChainName.Mainnet ? "https://liquid.network/tx/{0}" : "https://liquid.network/testnet/tx/{0}"; diff --git a/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.LiquidAssets.cs b/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.LiquidAssets.cs index 517802b1fc..4b397db96f 100644 --- a/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.LiquidAssets.cs +++ b/BTCPayServer/Plugins/Altcoins/Liquid/AltcoinsPlugin.LiquidAssets.cs @@ -30,10 +30,13 @@ private void InitUSDT(IServiceCollection services, SelectedChains selectedChains DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainName), CoinType = ChainName == ChainName.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"), SupportRBF = true, - SupportLightning = false + SupportLightning = false, + SupportPayJoin = false, + VaultSupported = false, + ReadonlyWallet = true }.SetDefaultElectrumMapping(ChainName); services.AddBTCPayNetwork(network) - .AddTransactionLinkProvider(PaymentTypes.CHAIN.GetPaymentMethodId(nbxplorerNetwork.CryptoCode), new DefaultTransactionLinkProvider(LiquidBlockExplorer)); + .AddTransactionLinkProvider(PaymentTypes.CHAIN.GetPaymentMethodId("USDt"), new DefaultTransactionLinkProvider(LiquidBlockExplorer)); services.AddCurrencyData(new CurrencyData() { Code = "USDt", @@ -45,35 +48,6 @@ private void InitUSDT(IServiceCollection services, SelectedChains selectedChains selectedChains.Add("LBTC"); } - private void InitETB(IServiceCollection services, SelectedChains selectedChains, NBXplorer.NBXplorerNetwork nbxplorerNetwork) - { - var network = new ElementsBTCPayNetwork() - { - CryptoCode = "ETB", - NetworkCryptoCode = "LBTC", - ShowSyncSummary = false, - DefaultRateRules = new[] - { - - "ETB_X = ETB_BTC * BTC_X", - "ETB_BTC = bitpay(ETB_BTC)" - }, - Divisibility = 2, - AssetId = new uint256("aa775044c32a7df391902b3659f46dfe004ccb2644ce2ddc7dba31e889391caf"), - DisplayName = "Ethiopian Birr", - NBXplorerNetwork = nbxplorerNetwork, - CryptoImagePath = "imlegacy/etb.png", - DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainName), - CoinType = ChainName == ChainName.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"), - SupportRBF = true, - SupportLightning = false - }.SetDefaultElectrumMapping(ChainName); - - services.AddBTCPayNetwork(network) - .AddTransactionLinkProvider(PaymentTypes.CHAIN.GetPaymentMethodId(nbxplorerNetwork.CryptoCode), new DefaultTransactionLinkProvider(LiquidBlockExplorer)); - selectedChains.Add("LBTC"); - } - string LiquidBlockExplorer => ChainName == ChainName.Mainnet ? "https://liquid.network/tx/{0}" : "https://liquid.network/testnet/tx/{0}"; private void InitLCAD(IServiceCollection services, SelectedChains selectedChains, NBXplorer.NBXplorerNetwork nbxplorerNetwork) { @@ -95,11 +69,14 @@ private void InitLCAD(IServiceCollection services, SelectedChains selectedChains CryptoImagePath = "imlegacy/lcad.png", DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainName), CoinType = ChainName == ChainName.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"), - SupportRBF = true, - SupportLightning = false + SupportRBF = true, + SupportLightning = false, + SupportPayJoin = false, + VaultSupported = false, + ReadonlyWallet = true }.SetDefaultElectrumMapping(ChainName); services.AddBTCPayNetwork(network) - .AddTransactionLinkProvider(PaymentTypes.CHAIN.GetPaymentMethodId(nbxplorerNetwork.CryptoCode), new DefaultTransactionLinkProvider(LiquidBlockExplorer)); + .AddTransactionLinkProvider(PaymentTypes.CHAIN.GetPaymentMethodId("LCAD"), new DefaultTransactionLinkProvider(LiquidBlockExplorer)); selectedChains.Add("LBTC"); } From a6e18736d6f4b4111f90ef4077820c0cea482193 Mon Sep 17 00:00:00 2001 From: d11n Date: Tue, 29 Oct 2024 15:44:37 +0100 Subject: [PATCH 08/10] Keypad updates (#6338) * Add keypad icons Closes #6195. * Keypad JS fixes --- .../Views/Shared/PointOfSale/Public/VueLight.cshtml | 6 +++++- BTCPayServer/wwwroot/img/icon-sprite.svg | 2 ++ BTCPayServer/wwwroot/pos/common.js | 10 ++++++---- BTCPayServer/wwwroot/pos/keypad.css | 9 ++++----- BTCPayServer/wwwroot/pos/keypad.js | 3 ++- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/BTCPayServer/Views/Shared/PointOfSale/Public/VueLight.cshtml b/BTCPayServer/Views/Shared/PointOfSale/Public/VueLight.cshtml index 7706e217a8..d493587586 100644 --- a/BTCPayServer/Views/Shared/PointOfSale/Public/VueLight.cshtml +++ b/BTCPayServer/Views/Shared/PointOfSale/Public/VueLight.cshtml @@ -65,7 +65,11 @@
    - +