[][src]Struct pexacoin::util::merkleblock::MerkleBlock

pub struct MerkleBlock {
    pub header: BlockHeader,
    pub txn: PartialMerkleTree,
}

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

Methods

impl MerkleBlock[src]

pub fn from_block(block: &Block, match_txids: &HashSet<Hash>) -> Self[src]

Create a MerkleBlock from a block, that should contain proofs for the txids.

The block is a full block containing the header and transactions and match_txids is a set containing the transaction ids that should be included in the partial merkle tree.

Examples

extern crate bitcoin;
use bitcoin::hashes::sha256d;
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 = sha256d::Hash::from_hex(
    "5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2").unwrap();
let match_txids = vec![txid].into_iter().collect();
let mb = MerkleBlock::from_block(&block, &match_txids);

// Authenticate and extract matched transaction ids
let mut matches: Vec<sha256d::Hash> = vec![];
let mut index: Vec<u32> = vec![];
assert!(mb.extract_matches(&mut matches, &mut index).is_ok());
assert_eq!(txid, matches[0]);

pub fn extract_matches(
    &self,
    matches: &mut Vec<Hash>,
    indexes: &mut Vec<u32>
) -> Result<(), MerkleBlockError>
[src]

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

impl Encodable for MerkleBlock[src]

impl Decodable for MerkleBlock[src]

impl Eq for MerkleBlock[src]

impl Clone for MerkleBlock[src]

impl PartialEq<MerkleBlock> for MerkleBlock[src]

impl Debug for MerkleBlock[src]

Auto Trait Implementations

Blanket Implementations

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]