Detect duplicate accounts

This commit is contained in:
Hanh 2021-09-06 11:07:14 +08:00
parent 19900dd8cf
commit 77579ebd45
2 changed files with 12 additions and 5 deletions

View File

@ -84,13 +84,18 @@ impl DbAdapter {
sk: Option<&str>,
ivk: &str,
address: &str,
) -> anyhow::Result<u32> {
) -> anyhow::Result<i32> {
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),

View File

@ -84,7 +84,7 @@ impl Wallet {
recipient.is_some()
}
pub fn new_account(&self, name: &str, data: &str) -> anyhow::Result<u32> {
pub fn new_account(&self, name: &str, data: &str) -> anyhow::Result<i32> {
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<u32> {
pub fn new_account_with_key(&self, name: &str, key: &str) -> anyhow::Result<i32> {
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)
}