protected override void SaveAccount(Account account) { byte[] decryptedPrivateKey = new byte[96]; Buffer.BlockCopy(account.PublicKey, 0, decryptedPrivateKey, 0, 64); using (account.Decrypt()) { Buffer.BlockCopy(account.PrivateKey, 0, decryptedPrivateKey, 64, 32); } byte[] encryptedPrivateKey = EncryptPrivateKey(decryptedPrivateKey); Array.Clear(decryptedPrivateKey, 0, decryptedPrivateKey.Length); using (WalletDataContext ctx = new WalletDataContext(connectionString)) { DbAccount db_account = ctx.Accounts.FirstOrDefault(p => p.PublicKeyHash == account.PublicKeyHash.ToArray()); if (db_account == null) { db_account = ctx.Accounts.Add(new DbAccount { PrivateKeyEncrypted = encryptedPrivateKey, PublicKeyHash = account.PublicKeyHash.ToArray() }); } else { db_account.PrivateKeyEncrypted = encryptedPrivateKey; } ctx.SaveChanges(); } }
protected override void DeleteAccount(UInt160 publicKeyHash) { using (WalletDataContext ctx = new WalletDataContext(connectionString)) { DbAccount account = ctx.Accounts.FirstOrDefault(p => p.PublicKeyHash == publicKeyHash.ToArray()); if (account != null) { ctx.Contracts.RemoveRange(ctx.Contracts.Where(p => p.PublicKeyHash == publicKeyHash.ToArray())); ctx.Accounts.Remove(account); ctx.SaveChanges(); } } }