Пример #1
0
 private static bool TryParseXpub(string xpub, DerivationSchemeParser derivationSchemeParser, ref DerivationSchemeSettings derivationSchemeSettings, bool electrum = true)
 {
     if (!electrum)
     {
         try
         {
             var result = derivationSchemeParser.ParseOutputDescriptor(xpub);
             derivationSchemeSettings.AccountOriginal    = xpub.Trim();
             derivationSchemeSettings.AccountDerivation  = result.Item1;
             derivationSchemeSettings.AccountKeySettings = result.Item2.Select((path, i) => new AccountKeySettings()
             {
                 RootFingerprint = path?.MasterFingerprint,
                 AccountKeyPath  = path?.KeyPath,
                 AccountKey      = result.Item1.GetExtPubKeys().ElementAt(i).GetWif(derivationSchemeParser.Network)
             }).ToArray();
             return(true);
         }
         catch (Exception)
         {
             // ignored
         }
     }
     try
     {
         derivationSchemeSettings.AccountOriginal    = xpub.Trim();
         derivationSchemeSettings.AccountDerivation  = electrum ? derivationSchemeParser.ParseElectrum(derivationSchemeSettings.AccountOriginal) : derivationSchemeParser.Parse(derivationSchemeSettings.AccountOriginal);
         derivationSchemeSettings.AccountKeySettings = derivationSchemeSettings.AccountDerivation.GetExtPubKeys()
                                                       .Select(key => new AccountKeySettings()
         {
             AccountKey = key.GetWif(derivationSchemeParser.Network)
         }).ToArray();
         if (derivationSchemeSettings.AccountDerivation is DirectDerivationStrategy direct && !direct.Segwit)
         {
             derivationSchemeSettings.AccountOriginal = null; // Saving this would be confusing for user, as xpub of electrum is legacy derivation, but for btcpay, it is segwit derivation
         }
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Пример #2
0
 private static bool TryParseXpub(string xpub, DerivationSchemeParser derivationSchemeParser, ref DerivationSchemeSettings derivationSchemeSettings, bool electrum = true)
 {
     try
     {
         derivationSchemeSettings.AccountOriginal                  = xpub.Trim();
         derivationSchemeSettings.AccountDerivation                = electrum ? derivationSchemeParser.ParseElectrum(derivationSchemeSettings.AccountOriginal) : derivationSchemeParser.Parse(derivationSchemeSettings.AccountOriginal);
         derivationSchemeSettings.AccountKeySettings               = new AccountKeySettings[1];
         derivationSchemeSettings.AccountKeySettings[0]            = new AccountKeySettings();
         derivationSchemeSettings.AccountKeySettings[0].AccountKey = derivationSchemeSettings.AccountDerivation.GetExtPubKeys().Single().GetWif(derivationSchemeParser.Network);
         if (derivationSchemeSettings.AccountDerivation is DirectDerivationStrategy direct && !direct.Segwit)
         {
             derivationSchemeSettings.AccountOriginal = null; // Saving this would be confusing for user, as xpub of electrum is legacy derivation, but for btcpay, it is segwit derivation
         }
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }