bitcoin-parser 0.1.0

Bitcoin block header parser
Documentation
pub use byteorder::{ByteOrder, LittleEndian};
use hash::Hash;

/// A structure that represents the bitcoin block header
#[derive(Clone, Copy)]
pub struct BlockHeader<'a>(&'a [u8; 80]);

impl<'a> BlockHeader<'a> {
  pub fn new(slice: &[u8; 80]) -> BlockHeader {
    BlockHeader(slice)
  }

  pub fn as_slice(&self) -> &'a [u8; 80] {
    &self.0
  }

  pub fn version(&self) -> i32 {
    let slice = &self.0[0..];
    LittleEndian::read_i32(slice)
  }

  pub fn cur_hash(&self) -> Hash {
    Hash::from_data(self.0)
  }

  pub fn prev_hash(&self) -> Hash {
    Hash::from_slice(array_ref!(self.0, 4, 32))
  }

  pub fn merkle_root(&self) -> Hash {
    Hash::from_slice(array_ref!(self.0, 36, 32))
  }

  pub fn timestamp(&self) -> u32 {
    let slice = &self.0[68..];
    LittleEndian::read_u32(slice)
  }

  pub fn bits(&self) -> u32 {
    let slice = &self.0[72..];
    LittleEndian::read_u32(slice)
  }

  pub fn nonce(&self) -> u32 {
    let slice = &self.0[76..];
    LittleEndian::read_u32(slice)
  }
}