diff --git a/BTCPayServer.Common/BTCPayNetwork.cs b/BTCPayServer.Common/BTCPayNetwork.cs index 6b2e41099..6cceb9363 100644 --- a/BTCPayServer.Common/BTCPayNetwork.cs +++ b/BTCPayServer.Common/BTCPayNetwork.cs @@ -73,6 +73,34 @@ namespace BTCPayServer { return CryptoCode; } + + public KeyPath GetRootKeyPath(DerivationType type) + { + KeyPath baseKey; + if (!NBitcoinNetwork.Consensus.SupportSegwit) + { + baseKey = new KeyPath("44'"); + } + else + { + switch (type) + { + case DerivationType.Legacy: + baseKey = new KeyPath("44'"); + break; + case DerivationType.SegwitP2SH: + baseKey = new KeyPath("49'"); + break; + case DerivationType.Segwit: + baseKey = new KeyPath("84'"); + break; + default: + throw new ArgumentOutOfRangeException(nameof(type), type, null); + } + } + return baseKey + .Derive(CoinType); + } public KeyPath GetRootKeyPath() { diff --git a/BTCPayServer.Tests/SeleniumTester.cs b/BTCPayServer.Tests/SeleniumTester.cs index 2bcf20365..ac2343a0c 100644 --- a/BTCPayServer.Tests/SeleniumTester.cs +++ b/BTCPayServer.Tests/SeleniumTester.cs @@ -80,7 +80,7 @@ namespace BTCPayServer.Tests public void AddDerivationScheme(string derivationScheme = "xpub661MyMwAqRbcGABgHMUXDzPzH1tU7eZaAaJQXhDXsSxsqyQzQeU6kznNfSuAyqAK9UaWSaZaMFdNiY5BCF4zBPAzSnwfUAwUhwttuAKwfRX-[legacy]") { Driver.FindElement(By.Id("ModifyBTC")).ForceClick(); - Driver.FindElement(By.Id("DerivationScheme")).SendKeys(derivationScheme); + Driver.FindElement(By.ClassName("store-derivation-scheme")).SendKeys(derivationScheme); Driver.FindElement(By.Id("Continue")).ForceClick(); Driver.FindElement(By.Id("Confirm")).ForceClick(); Driver.FindElement(By.Id("Save")).ForceClick(); diff --git a/BTCPayServer/Controllers/StoresController.BTCLike.cs b/BTCPayServer/Controllers/StoresController.BTCLike.cs index 80bfefc3f..5aed76201 100644 --- a/BTCPayServer/Controllers/StoresController.BTCLike.cs +++ b/BTCPayServer/Controllers/StoresController.BTCLike.cs @@ -39,6 +39,7 @@ namespace BTCPayServer.Controllers DerivationSchemeViewModel vm = new DerivationSchemeViewModel(); vm.CryptoCode = cryptoCode; vm.RootKeyPath = network.GetRootKeyPath(); + vm.Network = network; SetExistingValues(store, vm); return View(vm); } @@ -119,6 +120,8 @@ namespace BTCPayServer.Controllers return new EmptyResult(); } + + private void SetExistingValues(StoreData store, DerivationSchemeViewModel vm) { var derivation = GetExistingDerivationStrategy(vm.CryptoCode, store); @@ -157,6 +160,7 @@ namespace BTCPayServer.Controllers return NotFound(); } + vm.Network = network; vm.RootKeyPath = network.GetRootKeyPath(); DerivationSchemeSettings strategy = null; diff --git a/BTCPayServer/Models/StatusMessageModel.cs b/BTCPayServer/Models/StatusMessageModel.cs index 9c70d3818..2b63fece6 100644 --- a/BTCPayServer/Models/StatusMessageModel.cs +++ b/BTCPayServer/Models/StatusMessageModel.cs @@ -23,6 +23,7 @@ namespace BTCPayServer.Models Html = model.Html; Message = model.Message; Severity = model.Severity; + AllowDismiss = model.AllowDismiss; } else { @@ -38,6 +39,7 @@ namespace BTCPayServer.Models public string Message { get; set; } public string Html { get; set; } public StatusSeverity Severity { get; set; } + public bool AllowDismiss { get; set; } = true; public string SeverityCSS { @@ -51,6 +53,8 @@ namespace BTCPayServer.Models return "danger"; case StatusSeverity.Success: return "success"; + case StatusSeverity.Warning: + return "warning"; default: throw new ArgumentOutOfRangeException(); } @@ -74,7 +78,8 @@ namespace BTCPayServer.Models { Info, Error, - Success + Success, + Warning } } } diff --git a/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs b/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs index 44cb24a75..e176c691e 100644 --- a/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs +++ b/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs @@ -40,5 +40,6 @@ namespace BTCPayServer.Models.StoreViewModels public string Config { get; set; } public string Source { get; set; } public string AccountKey { get; set; } + public BTCPayNetwork Network { get; set; } } } diff --git a/BTCPayServer/Views/Shared/_StatusMessage.cshtml b/BTCPayServer/Views/Shared/_StatusMessage.cshtml index 84a26635d..2d86ab5af 100644 --- a/BTCPayServer/Views/Shared/_StatusMessage.cshtml +++ b/BTCPayServer/Views/Shared/_StatusMessage.cshtml @@ -1,10 +1,15 @@ @model string -@if(!string.IsNullOrEmpty(Model)) +@if (!string.IsNullOrEmpty(Model)) { var parsedModel = new StatusMessageModel(Model); -