acme_chains/actors/blocks/
block.rs1use 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}