fix coin parser for weird networks

This commit is contained in:
Kukks
2020-06-25 10:51:27 +02:00
parent bf8190d122
commit d66325a241

View File

@@ -40,7 +40,7 @@ namespace BTCPayServer
var standardPrefix = Utils.ToBytes(0x0488b21eU, false); var standardPrefix = Utils.ToBytes(0x0488b21eU, false);
for (int ii = 0; ii < 4; ii++) for (int ii = 0; ii < 4; ii++)
data[ii] = standardPrefix[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)) if (!BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type))
{ {
throw new FormatException(); throw new FormatException();
@@ -117,7 +117,8 @@ namespace BTCPayServer
var standardPrefix = Utils.ToBytes(0x0488b21eU, false); var standardPrefix = Utils.ToBytes(0x0488b21eU, false);
for (int ii = 0; ii < 4; ii++) for (int ii = 0; ii < 4; ii++)
data[ii] = standardPrefix[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)) if (BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type))
{ {
@@ -154,6 +155,18 @@ namespace BTCPayServer
return FindMatch(hintedLabels, BtcPayNetwork.NBXplorerNetwork.DerivationStrategyFactory.Parse(str)); 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<string> hintLabels, DerivationStrategyBase result) private DerivationStrategyBase FindMatch(HashSet<string> hintLabels, DerivationStrategyBase result)
{ {
var firstKeyPath = new KeyPath("0/0"); var firstKeyPath = new KeyPath("0/0");