| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /* This file is part of DarkFi (https://dark.fi)
- *
- * Copyright (C) 2020-2022 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 darkfi_sdk::{
- crypto::{MerkleNode, MerkleTree},
- incrementalmerkletree::Tree,
- };
- use halo2_proofs::arithmetic::Field;
- use pasta_curves::pallas;
- use rand::rngs::OsRng;
- #[test]
- fn bridgetree_checkpoints() {
- const MAX_CHECKPOINTS: usize = 100;
- let mut tree = MerkleTree::new(MAX_CHECKPOINTS);
- let mut roots = vec![];
- for _ in 0..MAX_CHECKPOINTS {
- let leaf = MerkleNode::from(pallas::Base::random(&mut OsRng));
- tree.append(&leaf);
- roots.push(tree.root(0).unwrap());
- tree.checkpoint();
- }
- for root in roots.iter().rev() {
- tree.rewind();
- assert!(root == &tree.root(0).unwrap());
- }
- }
|