Allow to construct MerkleBlock using the header and txids
Co-Authored-By: Elichai Turkel <elichai.turkel@gmail.com>
This commit is contained in:
parent
9cff794a09
commit
65efc5cd37
|
@ -440,18 +440,31 @@ impl MerkleBlock {
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn from_block(block: &Block, match_txids: &HashSet<Txid>) -> Self {
|
pub fn from_block(block: &Block, match_txids: &HashSet<Txid>) -> Self {
|
||||||
let header = block.header;
|
let block_txids: Vec<_> = block.txdata.iter().map(Transaction::txid).collect();
|
||||||
|
Self::from_header_txids(&block.header, &block_txids, match_txids)
|
||||||
let mut matches: Vec<bool> = Vec::with_capacity(block.txdata.len());
|
|
||||||
let mut hashes: Vec<Txid> = Vec::with_capacity(block.txdata.len());
|
|
||||||
|
|
||||||
for hash in block.txdata.iter().map(Transaction::txid) {
|
|
||||||
matches.push(match_txids.contains(&hash));
|
|
||||||
hashes.push(hash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let pmt = PartialMerkleTree::from_txids(&hashes, &matches);
|
/// Create a MerkleBlock from the block's header and txids, that should contain proofs for match_txids.
|
||||||
MerkleBlock { header, txn: pmt }
|
///
|
||||||
|
/// The `header` is the block header, `block_txids` is the full list of txids included in the block and
|
||||||
|
/// `match_txids` is a set containing the transaction ids that should be included in the partial merkle tree.
|
||||||
|
/// ```
|
||||||
|
|
||||||
|
pub fn from_header_txids(
|
||||||
|
header: &BlockHeader,
|
||||||
|
block_txids: &[Txid],
|
||||||
|
match_txids: &HashSet<Txid>,
|
||||||
|
) -> Self {
|
||||||
|
let matches: Vec<bool> = block_txids
|
||||||
|
.into_iter()
|
||||||
|
.map(|txid| match_txids.contains(txid))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let pmt = PartialMerkleTree::from_txids(&block_txids, &matches);
|
||||||
|
MerkleBlock {
|
||||||
|
header: *header,
|
||||||
|
txn: pmt,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extract the matching txid's represented by this partial merkle tree
|
/// Extract the matching txid's represented by this partial merkle tree
|
||||||
|
|
Loading…
Reference in New Issue