Files
darkfi/src/consensus/wallet.rs
2024-01-18 19:30:56 +01:00

57 lines
2.0 KiB
Rust

/* This file is part of DarkFi (https://dark.fi)
*
* Copyright (C) 2020-2024 Dyne.org foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use async_trait::async_trait;
use darkfi_sdk::crypto::{Keypair, PublicKey, SecretKey};
use darkfi_serial::deserialize;
use log::debug;
use crate::{wallet::WalletDb, Result};
const CONSENSUS_KEYS_TABLE: &str = "consensus_keys";
const CONSENSUS_KEYS_COLUMN_IS_DEFAULT: &str = "is_default";
#[async_trait]
pub trait ConsensusWallet {
async fn get_default_keypair(&self) -> Result<Keypair>;
}
#[async_trait]
impl ConsensusWallet for WalletDb {
async fn get_default_keypair(&self) -> Result<Keypair> {
debug!(target: "consensus::wallet", "Returning default keypair");
let wallet_conn = self.conn.lock().await;
let mut stmt = wallet_conn.prepare(&format!(
"SELECT * FROM {} WHERE {} = 1",
CONSENSUS_KEYS_TABLE, CONSENSUS_KEYS_COLUMN_IS_DEFAULT
))?;
let (public, secret): (PublicKey, SecretKey) = stmt.query_row((), |row| {
let p_bytes: Vec<u8> = row.get("public")?;
let s_bytes: Vec<u8> = row.get("secret")?;
let public = deserialize(&p_bytes).unwrap();
let secret = deserialize(&s_bytes).unwrap();
Ok((public, secret))
})?;
stmt.finalize()?;
Ok(Keypair { secret, public })
}
}