walletdb: Test merkle tree.

This commit is contained in:
parazyd
2021-12-22 15:26:52 +01:00
parent 5025d9359b
commit 108b383c31
2 changed files with 34 additions and 6 deletions

View File

@@ -16,9 +16,12 @@ use serde::{
use subtle::{ConstantTimeEq, CtOption};
use crate::{
crypto::constants::{
sinsemilla::{i2lebsp_k, MERKLE_CRH_PERSONALIZATION},
L_ORCHARD_MERKLE, MERKLE_DEPTH_ORCHARD,
crypto::{
coin::Coin,
constants::{
sinsemilla::{i2lebsp_k, MERKLE_CRH_PERSONALIZATION},
L_ORCHARD_MERKLE, MERKLE_DEPTH_ORCHARD,
},
},
error::Result,
serial::{Decodable, Encodable},
@@ -49,6 +52,10 @@ impl MerkleNode {
pub fn from_bytes(bytes: &[u8; 32]) -> CtOption<Self> {
pallas::Base::from_repr(*bytes).map(MerkleNode)
}
pub fn from_coin(coin: &Coin) -> Self {
MerkleNode(coin.0)
}
}
impl Serialize for MerkleNode {

View File

@@ -344,7 +344,7 @@ mod tests {
crypto::merkle_node::MerkleNode,
types::{DrkCoinBlind, DrkSerial, DrkValueBlind},
};
use incrementalmerkletree::bridgetree::BridgeTree;
use incrementalmerkletree::{bridgetree::BridgeTree, Frontier, Tree};
use pasta_curves::{arithmetic::Field, pallas};
use rand::rngs::OsRng;
@@ -370,7 +370,7 @@ mod tests {
async fn test_walletdb() -> Result<()> {
let wallet = WalletDb::new("sqlite::memory:", WPASS.to_string()).await?;
let keypair = Keypair::random(&mut OsRng);
let tree1 = BridgeTree::<MerkleNode, 32>::new(100);
let mut tree1 = BridgeTree::<MerkleNode, 32>::new(100);
// init_db()
wallet.init_db().await?;
@@ -387,9 +387,23 @@ mod tests {
// put_own_coins()
wallet.put_own_coins(c0).await?;
tree1.append(&MerkleNode::from_coin(&c0.coin));
tree1.witness();
wallet.put_own_coins(c1).await?;
tree1.append(&MerkleNode::from_coin(&c1.coin));
tree1.witness();
wallet.put_own_coins(c2).await?;
tree1.append(&MerkleNode::from_coin(&c2.coin));
tree1.witness();
wallet.put_own_coins(c3).await?;
tree1.append(&MerkleNode::from_coin(&c3.coin));
tree1.witness();
// We'll check this merkle root corresponds to the one we'll retrieve.
let root1 = tree1.root();
// put_tree()
wallet.put_tree(&tree1).await?;
@@ -424,7 +438,14 @@ mod tests {
// get_tree()
let tree2 = wallet.get_tree().await?;
//assert_eq!(tree1, tree2);
let root2 = tree2.root();
assert_eq!(root1, root2);
// Let's try it once more to test sql replacing.
wallet.put_tree(&tree2).await?;
let tree3 = wallet.get_tree().await?;
let root3 = tree3.root();
assert_eq!(root2, root3);
Ok(())
}