public ImportKeysResponse ImportKeys(ImportKeysRequest importKeysRequest) { using var context = GetWalletContext(); return(context.WalletManager.ImportKeys(importKeysRequest)); }
internal ImportKeysResponse ImportKeys(ImportKeysRequest importKeysRequest) { // TODO //return ImportExportService.ImportKeys(importKeysRequest, this.x1WalletFile.PassphraseChallenge); return(null); }
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); }