MCPcopy Create free account
hub / github.com/BitVM/BitVM / test_spv

Function test_spv

final-spv/src/spv.rs:96–139  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

94
95 #[test]
96 fn test_spv() {
97 let mut mmr_native = MMRNative::new();
98 let mut mmr_guest = MMRGuest::new();
99 let block_headers = MAINNET_BLOCK_HEADERS
100 .iter()
101 .map(|header| CircuitBlockHeader::try_from_slice(header).unwrap())
102 .collect::<Vec<CircuitBlockHeader>>();
103 let txs = MAINNET_BLOCK_TRANSACTIONS
104 .iter()
105 .map(|tx| {
106 println!("{:?}", tx);
107 CircuitTransaction(bitcoin::consensus::deserialize(*tx).unwrap())
108 })
109 .collect::<Vec<CircuitTransaction>>();
110 let mut bitcoin_merkle_proofs: Vec<BlockInclusionProof> = vec![];
111 for tx in txs.iter() {
112 let txid = tx.txid();
113 println!("txid: {:?}", txid);
114 let bitcoin_merkle_tree = BitcoinMerkleTree::new(vec![txid]);
115 let bitcoin_merkle_proof = bitcoin_merkle_tree.generate_proof(0);
116 assert!(verify_merkle_proof(
117 txid,
118 &bitcoin_merkle_proof,
119 bitcoin_merkle_tree.root()
120 ));
121 bitcoin_merkle_proofs.push(bitcoin_merkle_proof);
122 }
123 for (i, header) in block_headers.iter().enumerate() {
124 mmr_native.append(header.compute_block_hash());
125 mmr_guest.append(header.compute_block_hash());
126 for j in 0..i {
127 let (mmr_leaf, mmr_proof) = mmr_native.generate_proof(j as u32);
128 assert!(mmr_native.verify_proof(mmr_leaf, &mmr_proof));
129 assert_eq!(mmr_leaf, block_headers[j].compute_block_hash());
130 let spv = SPV::new(
131 txs[j].clone(),
132 bitcoin_merkle_proofs[j].clone(),
133 block_headers[j].clone(),
134 mmr_proof,
135 );
136 assert!(spv.verify(mmr_guest.clone()));
137 }
138 }
139 }
140}

Callers

nothing calls this directly

Calls 8

CircuitTransactionClass · 0.85
deserializeFunction · 0.85
txidMethod · 0.80
compute_block_hashMethod · 0.80
cloneMethod · 0.80
generate_proofMethod · 0.45
pushMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected