use crate::message::SignedMessage;
use crate::shim::message::Message;
use cid::Cid;
use fvm_ipld_blockstore::Blockstore;
use serde_tuple::{self, Deserialize_tuple, Serialize_tuple};
use super::CachingBlockHeader;
pub const BLOCK_MESSAGE_LIMIT: usize = 10000;
#[derive(Clone, Debug, PartialEq)]
pub struct Block {
pub header: CachingBlockHeader,
pub bls_messages: Vec<Message>,
pub secp_messages: Vec<SignedMessage>,
}
impl Block {
pub fn header(&self) -> &CachingBlockHeader {
&self.header
}
pub fn bls_msgs(&self) -> &[Message] {
&self.bls_messages
}
pub fn secp_msgs(&self) -> &[SignedMessage] {
&self.secp_messages
}
pub fn cid(&self) -> &Cid {
self.header.cid()
}
pub fn persist(&self, db: &impl Blockstore) -> Result<(), crate::chain::store::Error> {
crate::chain::persist_objects(&db, std::iter::once(self.header()))?;
crate::chain::persist_objects(&db, self.bls_msgs().iter())?;
crate::chain::persist_objects(&db, self.secp_msgs().iter())
}
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct TxMeta {
pub bls_message_root: Cid,
pub secp_message_root: Cid,
}