private void OnImportWatchOnlyCommand(string addressOrFile) { if (NoWallet()) { return; } UInt160 address = null; try { address = StringToAddress(addressOrFile, NeoSystem.Settings.AddressVersion); } catch (FormatException) { } if (address is null) { var fileInfo = new FileInfo(addressOrFile); if (!fileInfo.Exists) { ConsoleHelper.Warning($"File '{fileInfo.FullName}' doesn't exists"); return; } if (fileInfo.Length > 1024 * 1024) { if (!ReadUserInput($"The file '{fileInfo.FullName}' is too big, do you want to continue? (yes|no)", false).IsYes()) { return; } } string[] lines = File.ReadAllLines(fileInfo.FullName).Where(u => !string.IsNullOrEmpty(u)).ToArray(); using (var percent = new ConsolePercent(0, lines.Length)) { for (int i = 0; i < lines.Length; i++) { address = StringToAddress(lines[i], NeoSystem.Settings.AddressVersion); CurrentWallet.CreateAccount(address); percent.Value++; } } } else { WalletAccount account = CurrentWallet.GetAccount(address); if (account is not null) { ConsoleHelper.Warning("This address is already in your wallet"); } else { account = CurrentWallet.CreateAccount(address); ConsoleHelper.Info("Address: ", account.Address); } } if (CurrentWallet is NEP6Wallet wallet) { wallet.Save(); } }
private void OnImportKeyCommand(string wifOrFile) { byte[] prikey = null; try { prikey = Wallet.GetPrivateKeyFromWIF(wifOrFile); } catch (FormatException) { } if (prikey == null) { var fileInfo = new FileInfo(wifOrFile); if (!fileInfo.Exists) { Console.WriteLine($"Error: File '{fileInfo.FullName}' doesn't exists"); return; } if (wifOrFile.Length > 1024 * 1024) { if (!ReadUserInput($"The file '{fileInfo.FullName}' is too big, do you want to continue? (yes|no)", false).IsYes()) { return; } } string[] lines = File.ReadAllLines(fileInfo.FullName).Where(u => !string.IsNullOrEmpty(u)).ToArray(); using (var percent = new ConsolePercent(0, lines.Length)) { for (int i = 0; i < lines.Length; i++) { if (lines[i].Length == 64) { prikey = lines[i].HexToBytes(); } else { prikey = Wallet.GetPrivateKeyFromWIF(lines[i]); } CurrentWallet.CreateAccount(prikey); Array.Clear(prikey, 0, prikey.Length); percent.Value++; } } } else { WalletAccount account = CurrentWallet.CreateAccount(prikey); Array.Clear(prikey, 0, prikey.Length); Console.WriteLine($"Address: {account.Address}"); Console.WriteLine($" Pubkey: {account.GetKey().PublicKey.EncodePoint(true).ToHexString()}"); } if (CurrentWallet is NEP6Wallet wallet) { wallet.Save(); } }
private void WriteBlocks(uint start, uint count, string path, bool writeStart) { uint end = start + count - 1; using FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.WriteThrough); if (fs.Length > 0) { byte[] buffer = new byte[sizeof(uint)]; if (writeStart) { fs.Seek(sizeof(uint), SeekOrigin.Begin); fs.Read(buffer, 0, buffer.Length); start += BitConverter.ToUInt32(buffer, 0); fs.Seek(sizeof(uint), SeekOrigin.Begin); } else { fs.Read(buffer, 0, buffer.Length); start = BitConverter.ToUInt32(buffer, 0); fs.Seek(0, SeekOrigin.Begin); } } else { if (writeStart) { fs.Write(BitConverter.GetBytes(start), 0, sizeof(uint)); } } if (start <= end) { fs.Write(BitConverter.GetBytes(count), 0, sizeof(uint)); } fs.Seek(0, SeekOrigin.End); Console.WriteLine("Export block from " + start + " to " + end); using (var percent = new ConsolePercent(start, end)) { for (uint i = start; i <= end; i++) { Block block = Blockchain.Singleton.GetBlock(i); byte[] array = block.ToArray(); fs.Write(BitConverter.GetBytes(array.Length), 0, sizeof(int)); fs.Write(array, 0, array.Length); percent.Value = i; } } }
private void OnCreateAddressCommand(ushort count = 1) { if (NoWallet()) { return; } string path = "address.txt"; if (File.Exists(path)) { if (!ReadUserInput($"The file '{path}' already exists, do you want to overwrite it? (yes|no)", false).IsYes()) { return; } } List <string> addresses = new List <string>(); using (var percent = new ConsolePercent(0, count)) { Parallel.For(0, count, (i) => { WalletAccount account = CurrentWallet.CreateAccount(); lock (addresses) { addresses.Add(account.Address); percent.Value++; } }); } if (CurrentWallet is NEP6Wallet wallet) { wallet.Save(); } Console.WriteLine($"Export addresses to {path}"); File.WriteAllLines(path, addresses); }