miden_node_proto/domain/
sign_block_request.rs1use miden_protocol::batch::OrderedBatches;
4use miden_protocol::block::{BlockHeader, BlockInputs};
5use miden_protocol::protocol_config::ProtocolConfig;
6
7use super::protocol_config::verify_protocol_config_commitment;
8use crate::errors::ConversionError;
9use crate::{BuildUnchecked, Verify, generated as proto};
10
11#[derive(Debug)]
13pub struct SignBlockRequest {
14 pub tx_batches: OrderedBatches,
15 pub block_header: BlockHeader,
16 pub block_inputs: BlockInputs,
17 pub protocol_config: Option<ProtocolConfig>,
18}
19
20impl BuildUnchecked for proto::miden::validator::v1::DecodedSignBlockRequest {
21 type Output = SignBlockRequest;
22 type Error = ConversionError;
23
24 fn build_unchecked(self) -> Result<Self::Output, Self::Error> {
27 let decoded = proto::block_proving::DecodedBlockProofRequest {
30 block_inputs: self.block_inputs,
31 batches: self.batches,
32 timestamp: self.timestamp,
33 next_validator_config: self.next_validator_config,
34 next_protocol_config: self.next_protocol_config,
35 }
36 .build_unchecked()?;
37 let protocol_config = self.protocol_config.try_map(|config| {
38 verify_protocol_config_commitment(
39 config.verify().map_err(ConversionError::new)?,
40 &decoded.block_header,
41 )
42 })?;
43 Ok(SignBlockRequest {
44 tx_batches: decoded.tx_batches,
45 block_header: decoded.block_header,
46 block_inputs: decoded.block_inputs,
47 protocol_config,
48 })
49 }
50}
51
52impl From<&SignBlockRequest> for proto::miden::validator::v1::SignBlockRequest {
53 fn from(value: &SignBlockRequest) -> Self {
54 Self {
55 batches: value.tx_batches.as_slice().iter().map(Into::into).collect(),
56 block_inputs: Some((&value.block_inputs).into()),
57 timestamp: value.block_header.timestamp(),
58 next_validator_config: Some(value.block_header.validator_config().into()),
59 next_protocol_config: value.block_header.next_protocol_config().map(Into::into),
60 protocol_config: value.protocol_config.as_ref().map(Into::into),
61 }
62 }
63}
64
65impl From<SignBlockRequest> for proto::miden::validator::v1::SignBlockRequest {
66 fn from(value: SignBlockRequest) -> Self {
67 Self::from(&value)
68 }
69}