tendermint/abci/request/
finalize_block.rsuse crate::prelude::*;
use crate::{
abci::types::{CommitInfo, Misbehavior},
account, block, Hash, Time,
};
use bytes::Bytes;
#[doc = include_str!("../doc/request-finalizeblock.md")]
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct FinalizeBlock {
pub txs: Vec<Bytes>,
pub decided_last_commit: CommitInfo,
pub misbehavior: Vec<Misbehavior>,
pub hash: Hash,
pub height: block::Height,
pub time: Time,
pub next_validators_hash: Hash,
pub proposer_address: account::Id,
}
mod v0_38 {
use super::FinalizeBlock;
use crate::Error;
use tendermint_proto::v0_38 as pb;
use tendermint_proto::Protobuf;
impl From<FinalizeBlock> for pb::abci::RequestFinalizeBlock {
fn from(value: FinalizeBlock) -> Self {
Self {
txs: value.txs,
decided_last_commit: Some(value.decided_last_commit.into()),
misbehavior: value.misbehavior.into_iter().map(Into::into).collect(),
hash: value.hash.into(),
height: value.height.into(),
time: Some(value.time.into()),
next_validators_hash: value.next_validators_hash.into(),
proposer_address: value.proposer_address.into(),
}
}
}
impl TryFrom<pb::abci::RequestFinalizeBlock> for FinalizeBlock {
type Error = Error;
fn try_from(message: pb::abci::RequestFinalizeBlock) -> Result<Self, Self::Error> {
Ok(Self {
txs: message.txs,
decided_last_commit: message
.decided_last_commit
.ok_or_else(Error::missing_last_commit_info)?
.try_into()?,
misbehavior: message
.misbehavior
.into_iter()
.map(TryInto::try_into)
.collect::<Result<_, _>>()?,
hash: message.hash.try_into()?,
height: message.height.try_into()?,
time: message
.time
.ok_or_else(Error::missing_timestamp)?
.try_into()?,
next_validators_hash: message.next_validators_hash.try_into()?,
proposer_address: message.proposer_address.try_into()?,
})
}
}
impl Protobuf<pb::abci::RequestFinalizeBlock> for FinalizeBlock {}
}