mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 22:44:29 +01:00
Move ElectrumMapping to BtcPayNetwork
This commit is contained in:
@@ -1459,7 +1459,9 @@ namespace BTCPayServer.Tests
|
|||||||
[Trait("Fast", "Fast")]
|
[Trait("Fast", "Fast")]
|
||||||
public void CanParseDerivationScheme()
|
public void CanParseDerivationScheme()
|
||||||
{
|
{
|
||||||
var parser = new DerivationSchemeParser(Network.TestNet);
|
var testnetNetworkProvider = new BTCPayNetworkProvider(NetworkType.Testnet);
|
||||||
|
var regtestNetworkProvider = new BTCPayNetworkProvider(NetworkType.Regtest);
|
||||||
|
var parser = new DerivationSchemeParser(testnetNetworkProvider.GetNetwork("BTC"));
|
||||||
NBXplorer.DerivationStrategy.DerivationStrategyBase result;
|
NBXplorer.DerivationStrategy.DerivationStrategyBase result;
|
||||||
// Passing electrum stuff
|
// Passing electrum stuff
|
||||||
// Native
|
// Native
|
||||||
@@ -1495,16 +1497,16 @@ namespace BTCPayServer.Tests
|
|||||||
result = parser.Parse(tpub);
|
result = parser.Parse(tpub);
|
||||||
Assert.Equal($"{tpub}-[p2sh]", result.ToString());
|
Assert.Equal($"{tpub}-[p2sh]", result.ToString());
|
||||||
|
|
||||||
parser = new DerivationSchemeParser(Network.RegTest);
|
parser = new DerivationSchemeParser(regtestNetworkProvider.GetNetwork("BTC"));
|
||||||
var parsed = parser.Parse("xpub6DG1rMYXiQtCc6CfdLFD9CtxqhzzRh7j6Sq6EdE9abgYy3cfDRrniLLv2AdwqHL1exiLnnKR5XXcaoiiexf3Y9R6J6rxkJtqJHzNzMW9QMZ-[p2sh]");
|
var parsed = parser.Parse("xpub6DG1rMYXiQtCc6CfdLFD9CtxqhzzRh7j6Sq6EdE9abgYy3cfDRrniLLv2AdwqHL1exiLnnKR5XXcaoiiexf3Y9R6J6rxkJtqJHzNzMW9QMZ-[p2sh]");
|
||||||
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[p2sh]", parsed.ToString());
|
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[p2sh]", parsed.ToString());
|
||||||
|
|
||||||
// Let's make sure we can't generate segwit with dogecoin
|
// Let's make sure we can't generate segwit with dogecoin
|
||||||
parser = new DerivationSchemeParser(NBitcoin.Altcoins.Dogecoin.Instance.Regtest);
|
parser = new DerivationSchemeParser(regtestNetworkProvider.GetNetwork("DOGE"));
|
||||||
parsed = parser.Parse("xpub6DG1rMYXiQtCc6CfdLFD9CtxqhzzRh7j6Sq6EdE9abgYy3cfDRrniLLv2AdwqHL1exiLnnKR5XXcaoiiexf3Y9R6J6rxkJtqJHzNzMW9QMZ-[p2sh]");
|
parsed = parser.Parse("xpub6DG1rMYXiQtCc6CfdLFD9CtxqhzzRh7j6Sq6EdE9abgYy3cfDRrniLLv2AdwqHL1exiLnnKR5XXcaoiiexf3Y9R6J6rxkJtqJHzNzMW9QMZ-[p2sh]");
|
||||||
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[legacy]", parsed.ToString());
|
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[legacy]", parsed.ToString());
|
||||||
|
|
||||||
parser = new DerivationSchemeParser(NBitcoin.Altcoins.Dogecoin.Instance.Regtest);
|
parser = new DerivationSchemeParser(regtestNetworkProvider.GetNetwork("DOGE"));
|
||||||
parsed = parser.Parse("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[p2sh]");
|
parsed = parser.Parse("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[p2sh]");
|
||||||
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[legacy]", parsed.ToString());
|
Assert.Equal("tpubDDdeNbNDRgqestPX5XEJM8ELAq6eR5cne5RPbBHHvWSSiLHNHehsrn1kGCijMnHFSsFFQMqHcdMfGzDL3pWHRasPMhcGRqZ4tFankQ3i4ok-[legacy]", parsed.ToString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ namespace BTCPayServer
|
|||||||
public int MaxTrackedConfirmation { get; internal set; } = 6;
|
public int MaxTrackedConfirmation { get; internal set; } = 6;
|
||||||
public string[] DefaultRateRules { get; internal set; } = Array.Empty<string>();
|
public string[] DefaultRateRules { get; internal set; } = Array.Empty<string>();
|
||||||
public bool SupportRBF { get; internal set; }
|
public bool SupportRBF { get; internal set; }
|
||||||
|
public Dictionary<uint, string[]> ElectrumMapping = new Dictionary<uint, string[]>();
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return CryptoCode;
|
return CryptoCode;
|
||||||
|
|||||||
@@ -26,7 +26,19 @@ namespace BTCPayServer
|
|||||||
LightningImagePath = "imlegacy/bitcoin-lightning.svg",
|
LightningImagePath = "imlegacy/bitcoin-lightning.svg",
|
||||||
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
||||||
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'"),
|
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'"),
|
||||||
SupportRBF = true
|
SupportRBF = true,
|
||||||
|
ElectrumMapping = new Dictionary<uint, string[]>()
|
||||||
|
{
|
||||||
|
//https://github.com/spesmilo/electrum/blob/11733d6bc271646a00b69ff07657119598874da4/electrum/constants.py
|
||||||
|
//mainnet
|
||||||
|
{0x0488b21eU, new[] { "legacy" }},
|
||||||
|
{0x049d7cb2U, new[] { "p2sh" }},
|
||||||
|
{0x4b24746U, Array.Empty<string>()},
|
||||||
|
//testnet
|
||||||
|
{0x043587cfU, new[] { "legacy" }},
|
||||||
|
{0x044a5262U, new[] { "p2sh" }},
|
||||||
|
{0x045f1cf6U, Array.Empty<string>()}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,19 @@ namespace BTCPayServer
|
|||||||
CryptoImagePath = "imlegacy/litecoin.svg",
|
CryptoImagePath = "imlegacy/litecoin.svg",
|
||||||
LightningImagePath = "imlegacy/litecoin-lightning.svg",
|
LightningImagePath = "imlegacy/litecoin-lightning.svg",
|
||||||
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
||||||
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'")
|
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'"),
|
||||||
|
ElectrumMapping = new Dictionary<uint, string[]>()
|
||||||
|
{
|
||||||
|
//https://github.com/pooler/electrum-ltc/blob/0d6989a9d2fb2edbea421c116e49d1015c7c5a91/electrum_ltc/constants.py
|
||||||
|
//mainnet
|
||||||
|
{0x0488b21eU, new[] { "legacy" }},
|
||||||
|
{0x049d7cb2U, new[] { "p2sh" }},
|
||||||
|
{0x04b24746U, Array.Empty<string>()},
|
||||||
|
//testnet
|
||||||
|
{0x043587cfU, new[] { "legacy" }},
|
||||||
|
{0x044a5262U, new[] { "p2sh" }},
|
||||||
|
{0x045f1cf6U, Array.Empty<string>()}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ namespace BTCPayServer.Controllers
|
|||||||
|
|
||||||
private DerivationSchemeSettings ParseDerivationStrategy(string derivationScheme, Script hint, BTCPayNetwork network)
|
private DerivationSchemeSettings ParseDerivationStrategy(string derivationScheme, Script hint, BTCPayNetwork network)
|
||||||
{
|
{
|
||||||
var parser = new DerivationSchemeParser(network.NBitcoinNetwork);
|
var parser = new DerivationSchemeParser(network);
|
||||||
parser.HintScriptPubKey = hint;
|
parser.HintScriptPubKey = hint;
|
||||||
return new DerivationSchemeSettings(parser.Parse(derivationScheme), network);
|
return new DerivationSchemeSettings(parser.Parse(derivationScheme), network);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,27 +12,22 @@ namespace BTCPayServer
|
|||||||
{
|
{
|
||||||
public class DerivationSchemeParser
|
public class DerivationSchemeParser
|
||||||
{
|
{
|
||||||
public Network Network { get; set; }
|
private BTCPayNetwork BtcPayNetwork { get; }
|
||||||
public Script HintScriptPubKey { get; set; }
|
|
||||||
static Dictionary<uint, string[]> electrumMapping;
|
|
||||||
|
|
||||||
static DerivationSchemeParser()
|
public Network Network => BtcPayNetwork.NBitcoinNetwork;
|
||||||
|
|
||||||
|
public Script HintScriptPubKey { get; set; }
|
||||||
|
|
||||||
|
public DerivationSchemeParser(BTCPayNetwork expectedNetwork)
|
||||||
{
|
{
|
||||||
//Source https://github.com/spesmilo/electrum/blob/11733d6bc271646a00b69ff07657119598874da4/electrum/constants.py
|
BtcPayNetwork = expectedNetwork;
|
||||||
electrumMapping = new Dictionary<uint, string[]>();
|
|
||||||
electrumMapping.Add(0x0488b21eU, new[] { "legacy" });
|
|
||||||
electrumMapping.Add(0x049d7cb2U, new string[] { "p2sh" });
|
|
||||||
electrumMapping.Add(0x4b24746U, Array.Empty<string>());
|
|
||||||
}
|
|
||||||
public DerivationSchemeParser(Network expectedNetwork)
|
|
||||||
{
|
|
||||||
Network = expectedNetwork;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public DerivationStrategyBase ParseElectrum(string str)
|
public DerivationStrategyBase ParseElectrum(string str)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (str == null)
|
if (str == null)
|
||||||
throw new ArgumentNullException(nameof(str));
|
throw new ArgumentNullException(nameof(str));
|
||||||
str = str.Trim();
|
str = str.Trim();
|
||||||
@@ -45,7 +40,7 @@ namespace BTCPayServer
|
|||||||
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.Main).ToNetwork(Network);
|
var extPubKey = new BitcoinExtPubKey(Network.GetBase58CheckEncoder().EncodeData(data), Network.Main).ToNetwork(Network);
|
||||||
if (!electrumMapping.TryGetValue(prefix, out string[] labels))
|
if (!BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out string[] labels))
|
||||||
{
|
{
|
||||||
throw new FormatException();
|
throw new FormatException();
|
||||||
}
|
}
|
||||||
@@ -120,7 +115,7 @@ namespace BTCPayServer
|
|||||||
data[ii] = standardPrefix[ii];
|
data[ii] = standardPrefix[ii];
|
||||||
var derivationScheme = new BitcoinExtPubKey(Network.GetBase58CheckEncoder().EncodeData(data), Network.Main).ToNetwork(Network).ToString();
|
var derivationScheme = new BitcoinExtPubKey(Network.GetBase58CheckEncoder().EncodeData(data), Network.Main).ToNetwork(Network).ToString();
|
||||||
|
|
||||||
electrumMapping.TryGetValue(prefix, out string[] labels);
|
BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out string[] labels);
|
||||||
if (labels != null)
|
if (labels != null)
|
||||||
{
|
{
|
||||||
foreach (var label in labels)
|
foreach (var label in labels)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace BTCPayServer
|
|||||||
throw new ArgumentNullException(nameof(network));
|
throw new ArgumentNullException(nameof(network));
|
||||||
var result = new DerivationSchemeSettings();
|
var result = new DerivationSchemeSettings();
|
||||||
result.Source = "Coldcard";
|
result.Source = "Coldcard";
|
||||||
var derivationSchemeParser = new DerivationSchemeParser(network.NBitcoinNetwork);
|
var derivationSchemeParser = new DerivationSchemeParser(network);
|
||||||
JObject jobj = null;
|
JObject jobj = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user