Пример #1
0
 public ImportKeysResponse ImportKeys(ImportKeysRequest importKeysRequest)
 {
     using var context = GetWalletContext();
     return(context.WalletManager.ImportKeys(importKeysRequest));
 }
Пример #2
0
 internal ImportKeysResponse ImportKeys(ImportKeysRequest importKeysRequest)
 {
     // TODO
     //return ImportExportService.ImportKeys(importKeysRequest, this.x1WalletFile.PassphraseChallenge);
     return(null);
 }
Пример #3
0
        public static ImportKeysResponse ImportKeys(ImportKeysRequest importKeysRequest, byte[] passphraseChallenge)
        {
            if (importKeysRequest == null)
            {
                throw new ArgumentNullException(nameof(importKeysRequest));
            }
            if (importKeysRequest.WalletPassphrase == null)
            {
                throw new ArgumentNullException(nameof(importKeysRequest.WalletPassphrase));
            }
            if (importKeysRequest.Keys == null)
            {
                throw new ArgumentNullException(nameof(importKeysRequest.Keys));
            }

            var delimiters = new HashSet <char>();

            foreach (var c in importKeysRequest.Keys.Trim().ToCharArray())
            {
                if (char.IsWhiteSpace(c))
                {
                    delimiters.Add(c);
                }
            }

            var items        = importKeysRequest.Keys.Split(delimiters.ToArray());
            var possibleKeys = items.Where(i => i.Length == 52).Distinct().ToList();

            if (possibleKeys.Count == 0)
            {
                throw new X1WalletException(HttpStatusCode.BadRequest, "Input material cointained no keys.");
            }

            var test = VCL.DecryptWithPassphrase(importKeysRequest.WalletPassphrase, passphraseChallenge);

            if (test == null)
            {
                throw new X1WalletException(HttpStatusCode.Unauthorized,
                                            "Your passphrase is incorrect.");
            }
            var importedAddresses = new List <string>();

            var obsidianNetwork = new ObsidianNetwork();

            foreach (var candidate in possibleKeys)
            {
                try
                {
                    var secret     = new BitcoinSecret(candidate, obsidianNetwork);
                    var privateKey = secret.PrivateKey.ToBytes();
                    throw new NotImplementedException();
                    //var address = AddressHelper.CreateWithPrivateKey(privateKey, importKeysRequest.WalletPassphrase, AddressType.SingleKey);

                    //this.X1WalletFile.Addresses.Add(address.Address, address);
                    //importedAddresses.Add($"{secret.GetAddress()} -> {address.Address}");
                }
                catch (Exception e)
                {
                    Log.Logger.LogWarning($"Could not import '{candidate}' as key or address. {e.Message}");
                }
            }

            // this.X1WalletFile.SaveX1WalletFile(this.CurrentX1WalletFilePath);

            var response = new ImportKeysResponse
            {
                ImportedAddresses = importedAddresses, Message = $"Imported {importedAddresses.Count} addresses."
            };

            return(response);
        }