miden_client/rpc/domain/
sync.rs1use miden_protocol::block::{BlockHeader, BlockNumber};
2use miden_protocol::crypto::merkle::mmr::MmrDelta;
3
4use crate::rpc::domain::MissingFieldHelper;
5use crate::rpc::{RpcError, generated as proto};
6
7pub struct ChainMmrInfo {
12 pub block_from: BlockNumber,
14 pub block_to: BlockNumber,
16 pub mmr_delta: MmrDelta,
18 pub block_header: BlockHeader,
20}
21
22impl TryFrom<proto::rpc::SyncChainMmrResponse> for ChainMmrInfo {
23 type Error = RpcError;
24
25 fn try_from(value: proto::rpc::SyncChainMmrResponse) -> Result<Self, Self::Error> {
26 let block_range = value
27 .block_range
28 .ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(block_range)))?;
29
30 let mmr_delta = value
31 .mmr_delta
32 .ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(mmr_delta)))?
33 .try_into()?;
34
35 let block_header = value
36 .block_header
37 .ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(block_header)))?
38 .try_into()?;
39
40 Ok(Self {
41 block_from: block_range.block_from.into(),
42 block_to: block_range
43 .block_to
44 .ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(
45 block_range.block_to
46 )))?
47 .into(),
48 mmr_delta,
49 block_header,
50 })
51 }
52}