mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-13 06:29:25 +00:00
add block hash calculations
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user