chia_protocol/
unfinished_block.rs1use chia_streamable_macro::streamable;
2
3use crate::Bytes32;
4use crate::EndOfSubSlotBundle;
5use crate::Program;
6use crate::RewardChainBlockUnfinished;
7use crate::VDFProof;
8use crate::{Foliage, FoliageTransactionBlock, TransactionsInfo};
9use chia_traits::Streamable;
10
11#[streamable]
12pub struct UnfinishedBlock {
13 finished_sub_slots: Vec<EndOfSubSlotBundle>, reward_chain_block: RewardChainBlockUnfinished, challenge_chain_sp_proof: Option<VDFProof>, reward_chain_sp_proof: Option<VDFProof>, foliage: Foliage, foliage_transaction_block: Option<FoliageTransactionBlock>, transactions_info: Option<TransactionsInfo>, transactions_generator: Option<Program>, transactions_generator_ref_list: Vec<u32>, }
24
25impl UnfinishedBlock {
26 pub fn prev_header_hash(&self) -> Bytes32 {
27 self.foliage.prev_block_hash
28 }
29
30 pub fn partial_hash(&self) -> Bytes32 {
31 self.reward_chain_block.hash().into()
32 }
33
34 pub fn is_transaction_block(&self) -> bool {
35 self.foliage.foliage_transaction_block_hash.is_some()
36 }
37
38 pub fn total_iters(&self) -> u128 {
39 self.reward_chain_block.total_iters
40 }
41}
42
43#[cfg(feature = "py-bindings")]
44use chia_traits::ChiaToPython;
45#[cfg(feature = "py-bindings")]
46use pyo3::prelude::*;
47
48#[cfg(feature = "py-bindings")]
49#[pymethods]
50impl UnfinishedBlock {
51 #[getter]
52 #[pyo3(name = "prev_header_hash")]
53 fn py_prev_header_hash(&self) -> Bytes32 {
54 self.prev_header_hash()
55 }
56
57 #[getter]
58 #[pyo3(name = "partial_hash")]
59 fn py_partial_hash(&self) -> Bytes32 {
60 self.partial_hash()
61 }
62
63 #[pyo3(name = "is_transaction_block")]
64 fn py_is_transaction_block(&self) -> bool {
65 self.is_transaction_block()
66 }
67
68 #[getter]
69 #[pyo3(name = "total_iters")]
70 fn py_total_iters<'a>(&self, py: Python<'a>) -> PyResult<Bound<'a, PyAny>> {
71 ChiaToPython::to_python(&self.total_iters(), py)
72 }
73}