Struct sapio_bitcoin::util::merkleblock::MerkleBlock
source · [−]pub struct MerkleBlock {
pub header: BlockHeader,
pub txn: PartialMerkleTree,
}
Expand description
Data structure that represents a block header paired to a partial merkle tree.
NOTE: This assumes that the given Block has at least 1 transaction. If the Block has 0 txs, it will hit an assertion.
Fields
header: BlockHeader
The block header
txn: PartialMerkleTree
Transactions making up a partial merkle tree
Implementations
sourceimpl MerkleBlock
impl MerkleBlock
sourcepub fn from_block_with_predicate<F>(block: &Block, match_txids: F) -> Self where
F: Fn(&Txid) -> bool,
pub fn from_block_with_predicate<F>(block: &Block, match_txids: F) -> Self where
F: Fn(&Txid) -> bool,
Create a MerkleBlock from a block, that contains proofs for specific txids.
The block
is a full block containing the header and transactions and match_txids
is a
function that returns true for the ids that should be included in the partial merkle tree.
Examples
use bitcoin::hash_types::Txid;
use bitcoin::hashes::hex::FromHex;
use bitcoin::{Block, MerkleBlock};
// Block 80000
let block_bytes = Vec::from_hex("01000000ba8b9cda965dd8e536670f9ddec10e53aab14b20bacad2\
7b9137190000000000190760b278fe7b8565fda3b968b918d5fd997f993b23674c0af3b6fde300b38f33\
a5914ce6ed5b1b01e32f5702010000000100000000000000000000000000000000000000000000000000\
00000000000000ffffffff0704e6ed5b1b014effffffff0100f2052a01000000434104b68a50eaa0287e\
ff855189f949c1c6e5f58b37c88231373d8a59809cbae83059cc6469d65c665ccfd1cfeb75c6e8e19413\
bba7fbff9bc762419a76d87b16086eac000000000100000001a6b97044d03da79c005b20ea9c0e1a6d9d\
c12d9f7b91a5911c9030a439eed8f5000000004948304502206e21798a42fae0e854281abd38bacd1aee\
d3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d\
5d6cc8d25c6b241501ffffffff0100f2052a010000001976a914404371705fa9bd789a2fcd52d2c580b6\
5d35549d88ac00000000").unwrap();
let block: Block = bitcoin::consensus::deserialize(&block_bytes).unwrap();
// Create a merkle block containing a single transaction
let txid = Txid::from_hex(
"5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2").unwrap();
let match_txids: Vec<Txid> = vec![txid].into_iter().collect();
let mb = MerkleBlock::from_block_with_predicate(&block, |t| match_txids.contains(t));
// Authenticate and extract matched transaction ids
let mut matches: Vec<Txid> = vec![];
let mut index: Vec<u32> = vec![];
assert!(mb.extract_matches(&mut matches, &mut index).is_ok());
assert_eq!(txid, matches[0]);
sourcepub fn from_block(block: &Block, match_txids: &HashSet<Txid>) -> Self
👎 Deprecated since 0.26.2: use from_block_with_predicate
This is supported on crate feature std
only.
pub fn from_block(block: &Block, match_txids: &HashSet<Txid>) -> Self
use from_block_with_predicate
std
only.Create a MerkleBlock from a block, that contains proofs for specific txids.
sourcepub fn from_header_txids_with_predicate<F>(
header: &BlockHeader,
block_txids: &[Txid],
match_txids: F
) -> Self where
F: Fn(&Txid) -> bool,
pub fn from_header_txids_with_predicate<F>(
header: &BlockHeader,
block_txids: &[Txid],
match_txids: F
) -> Self where
F: Fn(&Txid) -> bool,
Create a MerkleBlock from the block’s header and txids, that contain proofs for specific txids.
The header
is the block header, block_txids
is the full list of txids included in the block and
match_txids
is a function that returns true for the ids that should be included in the partial merkle tree.
sourcepub fn from_header_txids(
header: &BlockHeader,
block_txids: &[Txid],
match_txids: &HashSet<Txid>
) -> Self
👎 Deprecated since 0.26.2: use from_header_txids_with_predicate
This is supported on crate feature std
only.
pub fn from_header_txids(
header: &BlockHeader,
block_txids: &[Txid],
match_txids: &HashSet<Txid>
) -> Self
use from_header_txids_with_predicate
std
only.Create a MerkleBlock from the block’s header and txids, that should contain proofs for match_txids.
sourcepub fn extract_matches(
&self,
matches: &mut Vec<Txid>,
indexes: &mut Vec<u32>
) -> Result<(), MerkleBlockError>
pub fn extract_matches(
&self,
matches: &mut Vec<Txid>,
indexes: &mut Vec<u32>
) -> Result<(), MerkleBlockError>
Extract the matching txid’s represented by this partial merkle tree and their respective indices within the partial tree. returns Ok(()) on success, or error in case of failure
Trait Implementations
sourceimpl Clone for MerkleBlock
impl Clone for MerkleBlock
sourcefn clone(&self) -> MerkleBlock
fn clone(&self) -> MerkleBlock
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for MerkleBlock
impl Debug for MerkleBlock
sourceimpl Decodable for MerkleBlock
impl Decodable for MerkleBlock
sourcefn consensus_decode<D: Read>(d: D) -> Result<Self, Error>
fn consensus_decode<D: Read>(d: D) -> Result<Self, Error>
Decode an object with a well-defined format
sourceimpl Encodable for MerkleBlock
impl Encodable for MerkleBlock
sourceimpl PartialEq<MerkleBlock> for MerkleBlock
impl PartialEq<MerkleBlock> for MerkleBlock
sourcefn eq(&self, other: &MerkleBlock) -> bool
fn eq(&self, other: &MerkleBlock) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &MerkleBlock) -> bool
fn ne(&self, other: &MerkleBlock) -> bool
This method tests for !=
.
impl Eq for MerkleBlock
impl StructuralEq for MerkleBlock
impl StructuralPartialEq for MerkleBlock
Auto Trait Implementations
impl RefUnwindSafe for MerkleBlock
impl Send for MerkleBlock
impl Sync for MerkleBlock
impl Unpin for MerkleBlock
impl UnwindSafe for MerkleBlock
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more