Skip to main content

miden_node_store/state/writer/
apply_block.rs

1use miden_node_proto::domain::proof_request::BlockProofRequest;
2use miden_node_tracing::miden_instrument;
3use miden_protocol::batch::OrderedBatches;
4use miden_protocol::block::{BlockInputs, BlockNumber, SignedBlock};
5use miden_protocol::utils::serde::Serializable;
6
7use crate::COMPONENT;
8use crate::errors::ApplyBlockWithProvingInputsError;
9use crate::state::BlockWriter;
10
11impl BlockWriter {
12    /// Saves proving inputs for a signed block and applies it to the state.
13    ///
14    /// Used by the in-process block producer after it has built and signed a block.
15    #[miden_instrument(
16        target = COMPONENT,
17        err,
18    )]
19    pub async fn apply_block_with_proving_inputs(
20        &mut self,
21        ordered_batches: OrderedBatches,
22        block_inputs: BlockInputs,
23        signed_block: SignedBlock,
24    ) -> Result<(), ApplyBlockWithProvingInputsError> {
25        let block_header = signed_block.header().clone();
26        let block_num = block_header.block_num();
27
28        let proving_inputs = BlockProofRequest {
29            tx_batches: ordered_batches,
30            block_header,
31            block_inputs,
32        };
33
34        self.save_proving_inputs(block_num, &proving_inputs)
35            .await
36            .map_err(ApplyBlockWithProvingInputsError::SaveProvingInputs)?;
37
38        self.apply_block(signed_block)
39            .await
40            .map_err(ApplyBlockWithProvingInputsError::ApplyBlock)
41    }
42
43    /// Saves the proving inputs for the given block to the block store.
44    pub async fn save_proving_inputs(
45        &self,
46        block_num: BlockNumber,
47        proving_inputs: &BlockProofRequest,
48    ) -> std::io::Result<()> {
49        self.block_store
50            .save_proving_inputs(block_num, &proving_inputs.to_bytes())
51            .await
52    }
53}