add block hash calculations

This commit is contained in:
Boog900
2023-05-31 20:44:11 +01:00
parent f81f5c386d
commit 4a2f512b8d
2 changed files with 94 additions and 0 deletions

View File

@@ -1,10 +1,13 @@
use std::io::{self, Read, Write};
use crate::{
hash,
serialize::*,
transaction::{Input, Transaction},
};
mod merkle_root;
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct BlockHeader {
pub major_version: u64,
@@ -65,6 +68,29 @@ impl Block {
Ok(())
}
pub fn tx_merkle_root(&self) -> [u8; 32] {
merkle_root::tree_hash(self.miner_tx.hash(), &self.txs)
}
pub fn serialize_hashable(&self) -> Vec<u8> {
let mut blob = self.header.serialize();
blob.extend_from_slice(&self.tx_merkle_root());
write_varint(&(1 + self.txs.len() as u64), &mut blob).unwrap();
let mut out = vec![];
write_varint(&(blob.len() as u64), &mut out).unwrap();
out.append(&mut blob);
out
}
pub fn id(&self) -> [u8; 32] {
// TODO: block 202612?
hash(&self.serialize_hashable())
}
pub fn serialize(&self) -> Vec<u8> {
let mut serialized = vec![];
self.write(&mut serialized).unwrap();