use std::str::FromStr;
use rustreexo::node_hash::BitcoinNodeHash;
use rustreexo::proof::Proof;
use rustreexo::stump::Stump;
fn main() {
let s = Stump::new();
let utxos = get_utxo_hashes1();
let (s, update_data) = s.modify(&utxos, &[], &Proof::default()).unwrap();
let p = Proof::default();
let (p, cached_hashes) = p
.update(vec![], utxos.clone(), vec![], vec![0, 1], update_data)
.unwrap();
assert_eq!(p.n_targets(), 2);
assert_eq!(s.verify(&p, &cached_hashes), Ok(true));
let p1 = p.get_proof_subset(&cached_hashes, &[0], s.leaves).unwrap();
assert_eq!(s.verify(&p1, &cached_hashes), Ok(true));
let new_utxos = get_utxo_hashes2();
let (stump, update_data) = s.modify(&new_utxos, &[utxos[0]], &p1).unwrap();
let (p2, cached_hashes) = p
.update(
cached_hashes,
new_utxos,
vec![0],
vec![1, 2, 3, 4, 5, 6, 7],
update_data,
)
.unwrap();
assert_eq!(stump.verify(&p2, &cached_hashes), Ok(true));
}
fn get_utxo_hashes1() -> Vec<BitcoinNodeHash> {
let hashes = [
"6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d",
"4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a",
"dbc1b4c900ffe48d575b5da5c638040125f65db0fe3e24494b76ea986457d986",
"084fed08b978af4d7d196a7446a86b58009e636b611db16211b65a9aadff29c5",
"e52d9c508c502347344d8c07ad91cbd6068afc75ff6292f062a09ca381c89e71",
"e77b9a9ae9e30b0dbdb6f510a264ef9de781501d7b6b92ae89eb059c5ab743db",
"67586e98fad27da0b9968bc039a1ef34c939b9b8e523a8bef89d478608c5ecf6",
"ca358758f6d27e6cf45272937977a748fd88391db679ceda7dc7bf1f005ee879",
];
hashes
.iter()
.map(|h| BitcoinNodeHash::from_str(h).unwrap())
.collect()
}
fn get_utxo_hashes2() -> Vec<BitcoinNodeHash> {
let utxo_hashes = [
"bf4aff60ee0f3b2d82b47b94f6eff3018d1a47d1b0bc5dfbf8d3a95a2836bf5b",
"2e6adf10ab3174629fc388772373848bbe277ffee1f72568e6d06e823b39d2dd",
"d47daecc777f21d2c9c1ad6b3332a49dbcc48b821dbe2a59ae880f14d73574fe",
"cf7d22fd19e030e01d6987678a7e1f1560dfb4e4998f5142b996872c67fc4cf8",
];
utxo_hashes
.iter()
.map(|h| BitcoinNodeHash::from_str(h).unwrap())
.collect()
}