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 signature(&self) -> &Signature {
59 &self.signature
60 }
61
62 pub fn body(&self) -> &BlockBody {
64 &self.body
65 }
66
67 pub fn proof(&self) -> &BlockProof {
69 &self.proof
70 }
71}
72
73impl Serializable for ProvenBlock {
77 fn write_into<W: ByteWriter>(&self, target: &mut W) {
78 self.header.write_into(target);
79 self.body.write_into(target);
80 self.signature.write_into(target);
81 self.proof.write_into(target);
82 }
83}
84
85impl Deserializable for ProvenBlock {
86 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
87 let block = Self {
88 header: BlockHeader::read_from(source)?,
89 body: BlockBody::read_from(source)?,
90 signature: Signature::read_from(source)?,
91 proof: BlockProof::read_from(source)?,
92 };
93
94 Ok(block)
95 }
96}