neo3/neo_protocol/responses/
neo_block.rs1use crate::{
2 deserialize_h256, deserialize_h256_option,
3 neo_protocol::{NeoWitness, RTransaction},
4 serialize_h256, serialize_h256_option,
5};
6use primitive_types::H256;
7use serde::{Deserialize, Serialize};
8use std::num::ParseIntError;
9
10#[derive(Serialize, Deserialize, Clone, Debug)]
11pub struct NeoBlock {
12 #[serde(serialize_with = "serialize_h256")]
14 #[serde(deserialize_with = "deserialize_h256")]
15 pub hash: H256,
16 pub size: i32,
17 pub version: i32,
18 #[serde(serialize_with = "serialize_h256")]
19 #[serde(deserialize_with = "deserialize_h256")]
20 #[serde(rename = "previousblockhash")]
21 pub prev_block_hash: H256,
22 #[serde(serialize_with = "serialize_h256")]
23 #[serde(deserialize_with = "deserialize_h256")]
24 #[serde(rename = "merkleroot")]
25 pub merkle_root_hash: H256,
26 pub time: i32,
27 pub nonce: String,
28 pub index: i32,
29 pub primary: Option<i32>,
30 #[serde(rename = "nextconsensus")]
31 pub next_consensus: String,
32 pub witnesses: Option<Vec<NeoWitness>>,
33 #[serde(rename = "tx", default = "default_transactions")]
34 pub transactions: Option<Vec<RTransaction>>,
35 pub confirmations: i32,
36 #[serde(serialize_with = "serialize_h256_option")]
37 #[serde(deserialize_with = "deserialize_h256_option")]
38 #[serde(rename = "nextblockhash")]
39 pub next_block_hash: Option<H256>,
40}
41
42impl NeoBlock {
43 pub fn get_nonce_as_u64(&self) -> Result<u64, ParseIntError> {
45 u64::from_str_radix(&self.nonce, 16)
46 }
47}
48
49impl std::hash::Hash for NeoBlock {
50 fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
51 self.hash.hash(state);
52 self.size.hash(state);
53 self.version.hash(state);
54 self.prev_block_hash.hash(state);
55 self.merkle_root_hash.hash(state);
56 self.time.hash(state);
57 self.nonce.hash(state);
58 self.index.hash(state);
59 self.primary.hash(state);
60 self.next_consensus.hash(state);
61 self.witnesses.hash(state);
62 self.confirmations.hash(state);
64 self.next_block_hash.hash(state);
65 }
66}
67
68fn default_transactions() -> Option<Vec<RTransaction>> {
69 Some(Vec::new())
70}