mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-11 01:35:22 +01:00
* Refactor Wallet import code The code for wallet import was incredibly messy as it evolved over time from various requests. This PR: * splits up each supported format into its own file * Supports taproot descriptors (through a hack until NBitcoin supports it internally) fixes #5518 * Reduces different paths for handling electrum/non-electrum xpubs * Allows plugins to add their own import support formats for onchain wallets. * Update NBitcoin to parse tr descriptors * Fix warnings * Use dedicated type OnChainWalletParsers --------- Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Linq;
|
|
using BTCPayServer;
|
|
namespace BTCPayServer.Services.WalletFileParsing;
|
|
public class OutputDescriptorWalletFileParser : IWalletFileParser
|
|
{
|
|
public (BTCPayServer.DerivationSchemeSettings? DerivationSchemeSettings, string? Error) TryParse(BTCPayNetwork network,
|
|
string data)
|
|
{
|
|
try
|
|
{
|
|
var maybeOutputDesc = !data.Trim().StartsWith("{", StringComparison.OrdinalIgnoreCase);
|
|
if (!maybeOutputDesc)
|
|
return (null, null);
|
|
|
|
var derivationSchemeParser = network.GetDerivationSchemeParser();
|
|
|
|
var descriptor = derivationSchemeParser.ParseOutputDescriptor(data);
|
|
|
|
var derivationSchemeSettings = new DerivationSchemeSettings()
|
|
{
|
|
Network = network,
|
|
Source = "OutputDescriptor",
|
|
AccountOriginal = data.Trim(),
|
|
AccountDerivation = descriptor.Item1,
|
|
AccountKeySettings = descriptor.Item2.Select((path, i) => new AccountKeySettings()
|
|
{
|
|
RootFingerprint = path?.MasterFingerprint,
|
|
AccountKeyPath = path?.KeyPath,
|
|
AccountKey =
|
|
descriptor.Item1.GetExtPubKeys().ElementAt(i).GetWif(derivationSchemeParser.Network)
|
|
}).ToArray()
|
|
};
|
|
return (derivationSchemeSettings, null);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
return (null, exception.Message);
|
|
}
|
|
}
|
|
}
|