mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-01-18 21:32:27 +01:00
Refactor ElectrumMapping with proper enum
This commit is contained in:
parent
51faa39636
commit
bbeb2d5009
@ -10,6 +10,12 @@ using NBXplorer;
|
|||||||
|
|
||||||
namespace BTCPayServer
|
namespace BTCPayServer
|
||||||
{
|
{
|
||||||
|
public enum DerivationType
|
||||||
|
{
|
||||||
|
Legacy,
|
||||||
|
SegwitP2SH,
|
||||||
|
Segwit
|
||||||
|
}
|
||||||
public class BTCPayDefaultSettings
|
public class BTCPayDefaultSettings
|
||||||
{
|
{
|
||||||
static BTCPayDefaultSettings()
|
static BTCPayDefaultSettings()
|
||||||
@ -65,7 +71,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 Dictionary<uint, DerivationType> ElectrumMapping = new Dictionary<uint, DerivationType>();
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return CryptoCode;
|
return CryptoCode;
|
||||||
|
@ -29,17 +29,17 @@ namespace BTCPayServer
|
|||||||
SupportRBF = true,
|
SupportRBF = true,
|
||||||
//https://github.com/spesmilo/electrum/blob/11733d6bc271646a00b69ff07657119598874da4/electrum/constants.py
|
//https://github.com/spesmilo/electrum/blob/11733d6bc271646a00b69ff07657119598874da4/electrum/constants.py
|
||||||
ElectrumMapping = NetworkType == NetworkType.Mainnet
|
ElectrumMapping = NetworkType == NetworkType.Mainnet
|
||||||
? new Dictionary<uint, string[]>()
|
? new Dictionary<uint, DerivationType>()
|
||||||
{
|
{
|
||||||
{0x0488b21eU, new[] {"legacy"}}, // xpub
|
{0x0488b21eU, DerivationType.Legacy }, // xpub
|
||||||
{0x049d7cb2U, new[] {"p2sh"}}, // ypub
|
{0x049d7cb2U, DerivationType.SegwitP2SH }, // ypub
|
||||||
{0x4b24746U, Array.Empty<string>()}, //zpub
|
{0x4b24746U, DerivationType.Segwit }, //zpub
|
||||||
}
|
}
|
||||||
: new Dictionary<uint, string[]>()
|
: new Dictionary<uint, DerivationType>()
|
||||||
{
|
{
|
||||||
{0x043587cfU, new[] {"legacy"}},
|
{0x043587cfU, DerivationType.Legacy},
|
||||||
{0x044a5262U, new[] {"p2sh"}},
|
{0x044a5262U, DerivationType.SegwitP2SH},
|
||||||
{0x045f1cf6U, Array.Empty<string>()}
|
{0x045f1cf6U, DerivationType.Segwit}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -29,21 +29,7 @@ namespace BTCPayServer
|
|||||||
CryptoImagePath = "imlegacy/groestlcoin.png",
|
CryptoImagePath = "imlegacy/groestlcoin.png",
|
||||||
LightningImagePath = "imlegacy/groestlcoin-lightning.svg",
|
LightningImagePath = "imlegacy/groestlcoin-lightning.svg",
|
||||||
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
|
||||||
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("17'") : new KeyPath("1'"),
|
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("17'") : new KeyPath("1'")
|
||||||
//https://github.com/Groestlcoin/electrum-grs/blob/6799baba60305164126a92b52e5e95284ed44543/electrum_grs/constants.py
|
|
||||||
ElectrumMapping = NetworkType == NetworkType.Mainnet
|
|
||||||
? new Dictionary<uint, string[]>()
|
|
||||||
{
|
|
||||||
{0x0488b21eU, new[] {"legacy"}},
|
|
||||||
{0x049d7cb2U, new[] {"p2sh"}},
|
|
||||||
{0x04b24746U, Array.Empty<string>()},
|
|
||||||
}
|
|
||||||
: new Dictionary<uint, string[]>()
|
|
||||||
{
|
|
||||||
{0x043587cfU, new[] {"legacy"}},
|
|
||||||
{0x044a5262U, new[] {"p2sh"}},
|
|
||||||
{0x045f1cf6U, Array.Empty<string>()}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,17 +29,17 @@ namespace BTCPayServer
|
|||||||
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'"),
|
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'"),
|
||||||
//https://github.com/pooler/electrum-ltc/blob/0d6989a9d2fb2edbea421c116e49d1015c7c5a91/electrum_ltc/constants.py
|
//https://github.com/pooler/electrum-ltc/blob/0d6989a9d2fb2edbea421c116e49d1015c7c5a91/electrum_ltc/constants.py
|
||||||
ElectrumMapping = NetworkType == NetworkType.Mainnet
|
ElectrumMapping = NetworkType == NetworkType.Mainnet
|
||||||
? new Dictionary<uint, string[]>()
|
? new Dictionary<uint, DerivationType>()
|
||||||
{
|
{
|
||||||
{0x0488b21eU, new[] {"legacy"}},
|
{0x0488b21eU, DerivationType.Legacy },
|
||||||
{0x049d7cb2U, new[] {"p2sh"}},
|
{0x049d7cb2U, DerivationType.SegwitP2SH },
|
||||||
{0x04b24746U, Array.Empty<string>()},
|
{0x04b24746U, DerivationType.Segwit },
|
||||||
}
|
}
|
||||||
: new Dictionary<uint, string[]>()
|
: new Dictionary<uint, DerivationType>()
|
||||||
{
|
{
|
||||||
{0x043587cfU, new[] {"legacy"}},
|
{0x043587cfU, DerivationType.Legacy },
|
||||||
{0x044a5262U, new[] {"p2sh"}},
|
{0x044a5262U, DerivationType.SegwitP2SH },
|
||||||
{0x045f1cf6U, Array.Empty<string>()}
|
{0x045f1cf6U, DerivationType.Segwit }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ namespace BTCPayServer
|
|||||||
{
|
{
|
||||||
network.Value.ElectrumMapping =
|
network.Value.ElectrumMapping =
|
||||||
network.Value.ElectrumMapping
|
network.Value.ElectrumMapping
|
||||||
.Where(kv => kv.Value.Contains("legacy"))
|
.Where(kv => kv.Value == DerivationType.Legacy)
|
||||||
.ToDictionary(k => k.Key, k => k.Value);
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,15 +43,15 @@ 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 (!BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out string[] labels))
|
if (!BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type))
|
||||||
{
|
{
|
||||||
throw new FormatException();
|
throw new FormatException();
|
||||||
}
|
}
|
||||||
if (labels.Length == 0)
|
if (type == DerivationType.Segwit)
|
||||||
return new DirectDerivationStrategy(extPubKey) { Segwit = true };
|
return new DirectDerivationStrategy(extPubKey) { Segwit = true };
|
||||||
if (labels[0] == "legacy")
|
if (type == DerivationType.Legacy)
|
||||||
return new DirectDerivationStrategy(extPubKey) { Segwit = false };
|
return new DirectDerivationStrategy(extPubKey) { Segwit = false };
|
||||||
if (labels[0] == "p2sh") // segwit p2sh
|
if (type == DerivationType.SegwitP2SH)
|
||||||
return new DerivationStrategyFactory(Network).Parse(extPubKey.ToString() + "-[p2sh]");
|
return new DerivationStrategyFactory(Network).Parse(extPubKey.ToString() + "-[p2sh]");
|
||||||
throw new FormatException();
|
throw new FormatException();
|
||||||
}
|
}
|
||||||
@ -118,7 +118,17 @@ 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();
|
||||||
|
|
||||||
BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out string[] labels);
|
BtcPayNetwork.ElectrumMapping.TryGetValue(prefix, out var type);
|
||||||
|
List<string> labels = new List<string>();
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case DerivationType.Legacy:
|
||||||
|
labels.Add("legacy");
|
||||||
|
break;
|
||||||
|
case DerivationType.SegwitP2SH:
|
||||||
|
labels.Add("p2sh");
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (labels != null)
|
if (labels != null)
|
||||||
{
|
{
|
||||||
foreach (var label in labels)
|
foreach (var label in labels)
|
||||||
|
Loading…
Reference in New Issue
Block a user