use std::sync::Arc;
use miden_protocol::block::BlockHeader;
use miden_protocol::crypto::merkle::mmr::PartialMmr;
use miden_protocol::transaction::PartialBlockchain;
#[derive(Debug, Clone)]
pub struct ChainState {
pub chain_tip_header: BlockHeader,
pub chain_mmr: Arc<PartialBlockchain>,
}
impl ChainState {
pub(crate) fn new(chain_tip_header: BlockHeader, chain_mmr: PartialMmr) -> Self {
let chain_mmr = PartialBlockchain::new(chain_mmr, [])
.expect("partial blockchain should build from partial mmr");
Self {
chain_tip_header,
chain_mmr: Arc::new(chain_mmr),
}
}
pub fn into_parts(self) -> (BlockHeader, Arc<PartialBlockchain>) {
(self.chain_tip_header, self.chain_mmr)
}
}