From 77579ebd456fb17aee8ee617a055c1f70e5377ef Mon Sep 17 00:00:00 2001 From: Hanh Date: Mon, 6 Sep 2021 11:07:14 +0800 Subject: [PATCH] Detect duplicate accounts --- src/db.rs | 9 +++++++-- src/wallet.rs | 8 +++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/db.rs b/src/db.rs index 4edfabc..21592e6 100644 --- a/src/db.rs +++ b/src/db.rs @@ -84,13 +84,18 @@ impl DbAdapter { sk: Option<&str>, ivk: &str, address: &str, - ) -> anyhow::Result { + ) -> anyhow::Result { + let mut statement = self.connection.prepare("SELECT id_account FROM accounts WHERE ivk = ?1")?; + if statement.exists( + params![ivk])? { + return Ok(-1) + } self.connection.execute( "INSERT INTO accounts(name, seed, sk, ivk, address) VALUES (?1, ?2, ?3, ?4, ?5) ON CONFLICT DO NOTHING", params![name, seed, sk, ivk, address], )?; - let id_tx: u32 = self.connection.query_row( + let id_tx: i32 = self.connection.query_row( "SELECT id_account FROM accounts WHERE ivk = ?1", params![ivk], |row| row.get(0), diff --git a/src/wallet.rs b/src/wallet.rs index e6e5e1d..85f8bad 100644 --- a/src/wallet.rs +++ b/src/wallet.rs @@ -84,7 +84,7 @@ impl Wallet { recipient.is_some() } - pub fn new_account(&self, name: &str, data: &str) -> anyhow::Result { + pub fn new_account(&self, name: &str, data: &str) -> anyhow::Result { if data.is_empty() { let mut entropy = [0u8; 32]; OsRng.fill_bytes(&mut entropy); @@ -107,12 +107,14 @@ impl Wallet { Ok(ivk) } - pub fn new_account_with_key(&self, name: &str, key: &str) -> anyhow::Result { + pub fn new_account_with_key(&self, name: &str, key: &str) -> anyhow::Result { let (seed, sk, ivk, pa) = decode_key(key)?; let account = self .db .store_account(name, seed.as_deref(), sk.as_deref(), &ivk, &pa)?; - self.db.create_taddr(account)?; + if account > 0 { + self.db.create_taddr(account as u32)?; + } Ok(account) }