ergo_lib_c_core/
header.rs

1//! Block header with the current `spendingTransaction`, that can be predicted by a miner before it's formation
2
3use crate::{block_header::ConstBlockHeaderPtr, error::Error, util::const_ptr_as_ref};
4
5/// Block header with the current `spendingTransaction`, that can be predicted
6/// by a miner before its formation
7#[derive(PartialEq, Eq, Debug, Clone)]
8pub struct PreHeader(pub ergo_lib::ergo_chain_types::PreHeader);
9pub type PreHeaderPtr = *mut PreHeader;
10pub type ConstPreHeaderPtr = *const PreHeader;
11
12/// Create instance using data from block header
13pub unsafe fn preheader_from_block_header(
14    block_header_ptr: ConstBlockHeaderPtr,
15    preheader_out: *mut PreHeaderPtr,
16) -> Result<(), Error> {
17    let block_header = const_ptr_as_ref(block_header_ptr, "block_header")?;
18    let bh: ergo_lib::ergo_chain_types::Header = block_header.0.clone();
19    let ph: ergo_lib::ergo_chain_types::PreHeader = bh.into();
20    *preheader_out = Box::into_raw(Box::new(PreHeader(ph)));
21    Ok(())
22}