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,
|
2024-11-29 12:28:08 +02:00
|
|
|
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,
|
2024-11-29 12:28:08 +02:00
|
|
|
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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|