acme_chains/actors/blocks/
block.rs

1/*
2   Appellation: block
3   Context: module
4   Creator: FL03 <jo3mccain@icloud.com>
5   Description:
6       Implement the standard block structure
7*/
8use crate::{create_block, BData, BHash, BId, BNonce, BTStamp};
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, Debug, Deserialize, Hash, PartialEq, Serialize)]
12pub struct Block {
13    pub id: BId,
14    pub data: BData,
15    pub hash: BHash,
16    pub nonce: BNonce,
17    pub previous: BHash,
18    pub timestamp: BTStamp,
19}
20
21impl Block {
22    pub fn new(id: BId, data: BData, previous: BHash) -> Self {
23        Block::constructor(id, data, previous)
24    }
25    pub fn consensus(data: BData, id: BId, previous: BHash, timestamp: BTStamp) -> (BNonce, BHash) {
26        create_block(data, id, previous, timestamp)
27    }
28    pub fn constructor(id: BId, data: BData, previous: BHash) -> Self {
29        let timestamp = crate::BlockStamp::utc();
30        let (nonce, hash) = Block::consensus(data.clone(), id, previous.clone(), timestamp);
31        Self {
32            id,
33            data,
34            hash,
35            nonce,
36            previous,
37            timestamp,
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_curate_block() {
48        let id = 0;
49        let previous: BHash = "".into();
50        let data = "".to_string();
51        let block = Block::new(id, data.clone(), previous);
52        assert_eq!(&block, &block)
53    }
54}