mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
cashier: add save/load/create merkle tree to cashierdb and cashierd
This commit is contained in:
@@ -692,6 +692,7 @@ async fn start(
|
||||
)
|
||||
.await?;
|
||||
|
||||
let tree = client.get_tree().await?;
|
||||
let merkle_roots = RocksColumn::<columns::MerkleRoots>::new(rocks.clone());
|
||||
let nullifiers = RocksColumn::<columns::Nullifiers>::new(rocks);
|
||||
|
||||
@@ -702,7 +703,7 @@ async fn start(
|
||||
let cashier_public_keys = vec![cashier_public];
|
||||
|
||||
let state = Arc::new(Mutex::new(State {
|
||||
tree: BridgeTree::<MerkleNode, 32>::new(100),
|
||||
tree,
|
||||
merkle_roots,
|
||||
nullifiers,
|
||||
public_keys: cashier_public_keys,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use incrementalmerkletree::bridgetree::BridgeTree;
|
||||
use std::{fs::create_dir_all, path::Path, str::FromStr};
|
||||
|
||||
use async_std::sync::Arc;
|
||||
@@ -10,7 +11,10 @@ use sqlx::{
|
||||
use super::wallet_api::WalletApi;
|
||||
use crate::{
|
||||
client::ClientFailed,
|
||||
crypto::keypair::{Keypair, PublicKey, SecretKey},
|
||||
crypto::{
|
||||
keypair::{Keypair, PublicKey, SecretKey},
|
||||
merkle_node::MerkleNode,
|
||||
},
|
||||
types::DrkTokenId,
|
||||
util::NetworkName,
|
||||
Error, Result,
|
||||
@@ -89,6 +93,45 @@ impl CashierDb {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn tree_gen(&self) -> Result<()> {
|
||||
trace!("Attempting to generate merkle tree");
|
||||
let mut conn = self.conn.acquire().await?;
|
||||
|
||||
match sqlx::query("SELECT * FROM tree").fetch_one(&mut conn).await {
|
||||
Ok(_) => {
|
||||
error!("Tree already exist");
|
||||
Err(Error::from(ClientFailed::TreeExists))
|
||||
}
|
||||
Err(_) => {
|
||||
let tree = BridgeTree::<MerkleNode, 32>::new(100);
|
||||
self.put_tree(&tree).await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_tree(&self) -> Result<BridgeTree<MerkleNode, 32>> {
|
||||
trace!("Getting merkle tree");
|
||||
let mut conn = self.conn.acquire().await?;
|
||||
|
||||
let row = sqlx::query("SELECT tree FROM tree").fetch_one(&mut conn).await?;
|
||||
let tree: BridgeTree<MerkleNode, 32> = bincode::deserialize(row.get("tree"))?;
|
||||
Ok(tree)
|
||||
}
|
||||
|
||||
pub async fn put_tree(&self, tree: &BridgeTree<MerkleNode, 32>) -> Result<()> {
|
||||
trace!("Attempting to write merkle tree");
|
||||
let mut conn = self.conn.acquire().await?;
|
||||
|
||||
let tree_bytes = bincode::serialize(tree)?;
|
||||
sqlx::query("INSERT INTO tree(tree) VALUES (?1)")
|
||||
.bind(tree_bytes)
|
||||
.execute(&mut conn)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn put_main_keys(&self, token_key: &TokenKey, network: &NetworkName) -> Result<()> {
|
||||
trace!("Writing main keys into the database");
|
||||
let network = self.get_value_serialized(network)?;
|
||||
|
||||
Reference in New Issue
Block a user