bitcoin_parser/
header.rs

1pub use byteorder::{ByteOrder, LittleEndian};
2use hash::Hash;
3
4/// A structure that represents the bitcoin block header
5#[derive(Clone, Copy)]
6pub struct BlockHeader<'a>(&'a [u8; 80]);
7
8impl<'a> BlockHeader<'a> {
9  pub fn new(slice: &[u8; 80]) -> BlockHeader {
10    BlockHeader(slice)
11  }
12
13  pub fn as_slice(&self) -> &'a [u8; 80] {
14    &self.0
15  }
16
17  pub fn version(&self) -> i32 {
18    let slice = &self.0[0..];
19    LittleEndian::read_i32(slice)
20  }
21
22  pub fn cur_hash(&self) -> Hash {
23    Hash::from_data(self.0)
24  }
25
26  pub fn prev_hash(&self) -> Hash {
27    Hash::from_slice(array_ref!(self.0, 4, 32))
28  }
29
30  pub fn merkle_root(&self) -> Hash {
31    Hash::from_slice(array_ref!(self.0, 36, 32))
32  }
33
34  pub fn timestamp(&self) -> u32 {
35    let slice = &self.0[68..];
36    LittleEndian::read_u32(slice)
37  }
38
39  pub fn bits(&self) -> u32 {
40    let slice = &self.0[72..];
41    LittleEndian::read_u32(slice)
42  }
43
44  pub fn nonce(&self) -> u32 {
45    let slice = &self.0[76..];
46    LittleEndian::read_u32(slice)
47  }
48}