lssa/common/src/block.rs

46 lines
1.2 KiB
Rust
Raw Normal View History

2024-11-25 07:26:16 +02:00
use rs_merkle::Hasher;
2024-10-10 14:09:31 +03:00
use serde::{Deserialize, Serialize};
2024-11-25 07:26:16 +02:00
use crate::{merkle_tree_public::hasher::OwnHasher, transaction::Transaction};
2025-08-07 15:19:06 -03:00
use nssa;
2024-10-10 14:09:31 +03:00
pub type BlockHash = [u8; 32];
pub type Data = Vec<u8>;
pub type BlockId = u64;
2024-12-09 03:58:07 +01:00
#[derive(Debug, Serialize, Deserialize, Clone)]
2024-10-10 14:09:31 +03:00
pub struct Block {
pub block_id: BlockId,
pub prev_block_id: BlockId,
pub prev_block_hash: BlockHash,
2024-10-10 14:09:31 +03:00
pub hash: BlockHash,
2025-08-07 15:19:06 -03:00
pub transactions: Vec<nssa::PublicTransaction>,
2024-10-10 14:09:31 +03:00
pub data: Data,
}
2024-11-25 07:26:16 +02:00
#[derive(Debug, Serialize, Deserialize)]
pub struct HashableBlockData {
pub block_id: BlockId,
pub prev_block_id: BlockId,
pub prev_block_hash: BlockHash,
2025-08-07 15:19:06 -03:00
pub transactions: Vec<nssa::PublicTransaction>,
2024-11-25 07:26:16 +02:00
pub data: Data,
}
2025-08-05 14:59:20 +03:00
impl From<HashableBlockData> for Block {
fn from(value: HashableBlockData) -> Self {
let data = serde_json::to_vec(&value).unwrap();
2024-11-25 07:26:16 +02:00
let hash = OwnHasher::hash(&data);
Self {
2025-08-05 14:59:20 +03:00
block_id: value.block_id,
prev_block_id: value.prev_block_id,
2024-11-25 07:26:16 +02:00
hash,
2025-08-05 14:59:20 +03:00
transactions: value.transactions,
data: value.data,
prev_block_hash: value.prev_block_hash,
2024-11-25 07:26:16 +02:00
}
}
}