1pub use byteorder::{ByteOrder, LittleEndian};
2use hash::Hash;
3
4#[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}