miden_protocol/block/
proven_block.rs1use miden_crypto::dsa::ecdsa_k256_keccak::Signature;
2
3use crate::MIN_PROOF_SECURITY_LEVEL;
4use crate::block::{BlockBody, BlockHeader, BlockProof};
5use crate::utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct ProvenBlock {
18 header: BlockHeader,
20
21 body: BlockBody,
23
24 signature: Signature,
26
27 proof: BlockProof,
29}
30
31impl ProvenBlock {
32 pub fn new_unchecked(
39 header: BlockHeader,
40 body: BlockBody,
41 signature: Signature,
42 proof: BlockProof,
43 ) -> Self {
44 Self { header, signature, body, proof }
45 }
46
47 pub fn proof_security_level(&self) -> u32 {
49 MIN_PROOF_SECURITY_LEVEL
50 }
51
52 pub fn header(&self) -> &BlockHeader {
54 &self.header
55 }
56
57 pub fn body(&self) -> &BlockBody {
59 &self.body
60 }
61
62 pub fn signature(&self) -> &Signature {
64 &self.signature
65 }
66
67 pub fn proof(&self) -> &BlockProof {
69 &self.proof
70 }
71
72 pub fn into_parts(self) -> (BlockHeader, BlockBody, Signature, BlockProof) {
74 (self.header, self.body, self.signature, self.proof)
75 }
76}
77
78impl Serializable for ProvenBlock {
82 fn write_into<W: ByteWriter>(&self, target: &mut W) {
83 self.header.write_into(target);
84 self.body.write_into(target);
85 self.signature.write_into(target);
86 self.proof.write_into(target);
87 }
88}
89
90impl Deserializable for ProvenBlock {
91 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
92 let block = Self {
93 header: BlockHeader::read_from(source)?,
94 body: BlockBody::read_from(source)?,
95 signature: Signature::read_from(source)?,
96 proof: BlockProof::read_from(source)?,
97 };
98
99 Ok(block)
100 }
101}