|
@@ -0,0 +1,44 @@
|
|
|
|
|
+/* 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());
|
|
|
|
|
+ }
|
|
|
|
|
+}
|