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