use crate::error::{Error, ensure};
use bitcoin::{Block, block::Header};
use urma_chain::{decode, observation::Chain};
#[derive(Debug)]
pub struct VerifiedBlock {
height: u64,
header: Header,
raw: Vec<u8>,
block: Block,
}
impl VerifiedBlock {
pub fn height(&self) -> u64 {
self.height
}
pub fn header(&self) -> &Header {
&self.header
}
pub fn raw(&self) -> &[u8] {
&self.raw
}
pub fn block(&self) -> &Block {
&self.block
}
}
pub(super) fn decode_verified(
chain: Chain,
height: u64,
header: Header,
raw: Vec<u8>,
) -> Result<VerifiedBlock, Error> {
let block = decode::esplora_block(&raw, chain, header.block_hash())?;
ensure!(
block.header == header,
"peer block header differs from the captured verified header"
);
Ok(VerifiedBlock {
height,
header,
raw,
block,
})
}