diff --git a/BTCPayServer/Controllers/StoresController.Onchain.cs b/BTCPayServer/Controllers/StoresController.Onchain.cs
index f1ddd597a..c31c8b294 100644
--- a/BTCPayServer/Controllers/StoresController.Onchain.cs
+++ b/BTCPayServer/Controllers/StoresController.Onchain.cs
@@ -55,7 +55,9 @@ namespace BTCPayServer.Controllers
vm.RootKeyPath = network.GetRootKeyPath();
vm.CanUseHotWallet = hotWallet;
vm.CanUseRPCImport = rpcImport;
- vm.CanUseTaproot = TaprootSupported(vm.CryptoCode);
+ vm.SupportTaproot = network.NBitcoinNetwork.Consensus.SupportTaproot;
+ vm.SupportSegwit = network.NBitcoinNetwork.Consensus.SupportSegwit;
+ vm.IsTaprootActivated = TaprootActivated(vm.CryptoCode);
if (vm.Method == null)
{
@@ -110,11 +112,6 @@ namespace BTCPayServer.Controllers
try
{
strategy = ParseDerivationStrategy(vm.DerivationScheme, network);
- if(strategy.AccountDerivation is TaprootDerivationStrategy && !TaprootSupported(vm.CryptoCode))
- {
- ModelState.AddModelError(nameof(vm.DerivationScheme), "Taproot is not supported");
- return View(vm.ViewName, vm);
- }
strategy.Source = "ManualDerivationScheme";
if (!string.IsNullOrEmpty(vm.AccountKey))
{
@@ -214,7 +211,9 @@ namespace BTCPayServer.Controllers
vm.CanUseHotWallet = hotWallet;
vm.CanUseRPCImport = rpcImport;
- vm.CanUseTaproot = TaprootSupported(vm.CryptoCode);
+ vm.SupportTaproot = network.NBitcoinNetwork.Consensus.SupportTaproot;
+ vm.SupportSegwit = network.NBitcoinNetwork.Consensus.SupportSegwit;
+ vm.IsTaprootActivated = TaprootActivated(vm.CryptoCode);
vm.RootKeyPath = network.GetRootKeyPath();
vm.Network = network;
@@ -266,14 +265,11 @@ namespace BTCPayServer.Controllers
IsHotWallet = isImport ? request.SavePrivateKeys : method == WalletSetupMethod.HotWallet,
DerivationSchemeFormat = "BTCPay",
CanUseHotWallet = hotWallet,
- CanUseRPCImport = rpcImport
+ CanUseRPCImport = rpcImport,
+ IsTaprootActivated = TaprootActivated(cryptoCode),
+ SupportTaproot = network.NBitcoinNetwork.Consensus.SupportTaproot,
+ SupportSegwit = network.NBitcoinNetwork.Consensus.SupportSegwit
};
-
- if (request.ScriptPubKeyType == ScriptPubKeyType.TaprootBIP86 && !TaprootSupported(cryptoCode) )
- {
- ModelState.AddModelError(nameof(request.ScriptPubKeyType), $"Taproot not supported");
- return View(vm.ViewName, vm);
- }
if (isImport && string.IsNullOrEmpty(request.ExistingMnemonic))
{
diff --git a/BTCPayServer/Controllers/StoresController.cs b/BTCPayServer/Controllers/StoresController.cs
index e2f00163d..5539af5a6 100644
--- a/BTCPayServer/Controllers/StoresController.cs
+++ b/BTCPayServer/Controllers/StoresController.cs
@@ -146,11 +146,16 @@ namespace BTCPayServer.Controllers
}
}
- public bool TaprootSupported(string crytoCode)
+ public bool TaprootActivated(string crytoCode)
{
- var networkSupport = ((BTCPayNetwork)_NetworkProvider.GetNetwork(crytoCode))?.NBitcoinNetwork?.Consensus?.SupportTaproot is true;
+ var network = (BTCPayNetwork)_NetworkProvider.GetNetwork(crytoCode);
+#pragma warning disable CS0618
+ if (!(network.IsBTC && network.NBitcoinNetwork.ChainName == ChainName.Mainnet))
+ // Consider it activated for everything that is not mainnet bitcoin
+ return true;
+#pragma warning restore CS0618
var status = _Dashboard.Get(crytoCode).Status;
- return networkSupport && !(status.NetworkType == ChainName.Mainnet && status.ChainHeight < 709632);
+ return status.ChainHeight >= 709632;
}
diff --git a/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs b/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs
index eaf2f2baf..6f6846217 100644
--- a/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs
+++ b/BTCPayServer/Models/StoreViewModels/DerivationSchemeViewModel.cs
@@ -39,8 +39,10 @@ namespace BTCPayServer.Models.StoreViewModels
public bool CanUseHotWallet { get; set; }
[Display(Name = "Can use RPC import")]
public bool CanUseRPCImport { get; set; }
- [Display(Name = "Can use Taproot")]
- public bool CanUseTaproot { get; set; }
+ public bool SupportSegwit { get; set; }
+ public bool SupportTaproot { get; set; }
+ [Display(Name = "Is taproot activated")]
+ public bool IsTaprootActivated { get; set; }
public RootedKeyPath GetAccountKeypath()
{
if (KeyPath != null && RootFingerprint != null &&
diff --git a/BTCPayServer/Views/Stores/GenerateWallet.cshtml b/BTCPayServer/Views/Stores/GenerateWallet.cshtml
index e5d99c66b..e87dd8863 100644
--- a/BTCPayServer/Views/Stores/GenerateWallet.cshtml
+++ b/BTCPayServer/Views/Stores/GenerateWallet.cshtml
@@ -7,7 +7,9 @@
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, $"Create {Model.CryptoCode} {type} Wallet", Context.GetStoreData().StoreName);
ViewData.Add(nameof(Model.CanUseHotWallet), Model.CanUseHotWallet);
ViewData.Add(nameof(Model.CanUseRPCImport), Model.CanUseRPCImport);
- ViewData.Add(nameof(Model.CanUseTaproot), Model.CanUseTaproot);
+ ViewData.Add(nameof(Model.IsTaprootActivated), Model.IsTaprootActivated);
+ ViewData.Add(nameof(Model.SupportSegwit), Model.SupportSegwit);
+ ViewData.Add(nameof(Model.SupportTaproot), Model.SupportTaproot);
ViewData.Add(nameof(Model.Method), Model.Method);
}
diff --git a/BTCPayServer/Views/Stores/ImportWallet/Seed.cshtml b/BTCPayServer/Views/Stores/ImportWallet/Seed.cshtml
index c82b6cb40..aaf66a053 100644
--- a/BTCPayServer/Views/Stores/ImportWallet/Seed.cshtml
+++ b/BTCPayServer/Views/Stores/ImportWallet/Seed.cshtml
@@ -21,7 +21,9 @@
{
ViewData.Add(nameof(Model.CanUseHotWallet), Model.CanUseHotWallet);
ViewData.Add(nameof(Model.CanUseRPCImport), Model.CanUseRPCImport);
- ViewData.Add(nameof(Model.CanUseTaproot), Model.CanUseTaproot);
+ ViewData.Add(nameof(Model.IsTaprootActivated), Model.IsTaprootActivated);
+ ViewData.Add(nameof(Model.SupportSegwit), Model.SupportSegwit);
+ ViewData.Add(nameof(Model.SupportTaproot), Model.SupportTaproot);
ViewData.Add(nameof(Model.Method), Model.Method);