chia_protocol/
unfinished_header_block.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use chia_streamable_macro::streamable;
use chia_traits::Streamable;

use crate::{
    Bytes, Bytes32, EndOfSubSlotBundle, Foliage, FoliageTransactionBlock,
    RewardChainBlockUnfinished, VDFProof,
};

#[streamable]
pub struct UnfinishedHeaderBlock {
    /// Same as a FullBlock but without TransactionInfo and Generator, used by light clients.
    /// If first sb.
    finished_sub_slots: Vec<EndOfSubSlotBundle>,

    /// Reward chain trunk data.
    reward_chain_block: RewardChainBlockUnfinished,

    /// If not first sp in sub-slot.
    challenge_chain_sp_proof: Option<VDFProof>,

    /// If not first sp in sub-slot.
    reward_chain_sp_proof: Option<VDFProof>,

    /// Reward chain foliage data.
    foliage: Foliage,

    /// Reward chain foliage data (tx block).
    foliage_transaction_block: Option<FoliageTransactionBlock>,

    /// Filter for block transactions.
    transactions_filter: Bytes,
}

impl UnfinishedHeaderBlock {
    pub fn prev_header_hash(&self) -> Bytes32 {
        self.foliage.prev_block_hash
    }

    pub fn header_hash(&self) -> Bytes32 {
        self.foliage.hash().into()
    }

    pub fn total_iters(&self) -> u128 {
        self.reward_chain_block.total_iters
    }
}

#[cfg(feature = "py-bindings")]
use chia_traits::ChiaToPython;

#[cfg(feature = "py-bindings")]
use pyo3::prelude::*;

#[cfg(feature = "py-bindings")]
#[pymethods]
impl UnfinishedHeaderBlock {
    #[getter]
    #[pyo3(name = "prev_header_hash")]
    fn py_prev_header_hash(&self) -> Bytes32 {
        self.prev_header_hash()
    }

    #[getter]
    #[pyo3(name = "header_hash")]
    fn py_header_hash(&self) -> Bytes32 {
        self.header_hash()
    }

    #[getter]
    #[pyo3(name = "total_iters")]
    fn py_total_iters<'a>(&self, py: Python<'a>) -> PyResult<Bound<'a, PyAny>> {
        ChiaToPython::to_python(&self.total_iters(), py)
    }
}