diff --git a/BTCPayServer/DerivationSchemeParser.cs b/BTCPayServer/DerivationSchemeParser.cs index bca4d570d..61d8fad34 100644 --- a/BTCPayServer/DerivationSchemeParser.cs +++ b/BTCPayServer/DerivationSchemeParser.cs @@ -40,7 +40,7 @@ namespace BTCPayServer var standardPrefix = Utils.ToBytes(0x0488b21eU, false); for (int ii = 0; ii < 4; ii++) data[ii] = standardPrefix[ii]; - var extPubKey = new BitcoinExtPubKey(Network.GetBase58CheckEncoder().EncodeData(data), Network.NetworkSet.Mainnet).ToNetwork(Network); + var extPubKey = GetBitcoinExtPubKeyByNetwork(Network, data); if (!BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type)) { throw new FormatException(); @@ -117,7 +117,8 @@ namespace BTCPayServer var standardPrefix = Utils.ToBytes(0x0488b21eU, false); for (int ii = 0; ii < 4; ii++) data[ii] = standardPrefix[ii]; - var derivationScheme = new BitcoinExtPubKey(Network.GetBase58CheckEncoder().EncodeData(data), Network.NetworkSet.Mainnet).ToNetwork(Network).ToString(); + + var derivationScheme = GetBitcoinExtPubKeyByNetwork(Network, data).ToString(); if (BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type)) { @@ -154,6 +155,18 @@ namespace BTCPayServer return FindMatch(hintedLabels, BtcPayNetwork.NBXplorerNetwork.DerivationStrategyFactory.Parse(str)); } + public static BitcoinExtPubKey GetBitcoinExtPubKeyByNetwork(Network network, byte[] data) + { + try + { + return new BitcoinExtPubKey(network.GetBase58CheckEncoder().EncodeData(data), network.NetworkSet.Mainnet).ToNetwork(network); + } + catch (Exception e) + { + return new BitcoinExtPubKey(network.GetBase58CheckEncoder().EncodeData(data), Network.Main).ToNetwork(network); + } + } + private DerivationStrategyBase FindMatch(HashSet hintLabels, DerivationStrategyBase result) { var firstKeyPath = new KeyPath("0/0");