use crate::{proto, ErrorReport, Result};
use std::time::Duration;
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct Params {
pub signed_blocks_window: i64,
pub min_signed_per_window: Vec<u8>,
pub downtime_jail_duration: Option<Duration>,
pub slash_fraction_double_sign: Vec<u8>,
pub slash_fraction_downtime: Vec<u8>,
}
impl TryFrom<proto::cosmos::slashing::v1beta1::Params> for Params {
type Error = ErrorReport;
fn try_from(proto: cosmos_sdk_proto::cosmos::slashing::v1beta1::Params) -> Result<Params> {
Ok(Params {
signed_blocks_window: proto.signed_blocks_window,
min_signed_per_window: proto.min_signed_per_window,
downtime_jail_duration: proto
.downtime_jail_duration
.map(TryFrom::try_from)
.transpose()?,
slash_fraction_double_sign: proto.slash_fraction_double_sign,
slash_fraction_downtime: proto.slash_fraction_downtime,
})
}
}
impl From<Params> for proto::cosmos::slashing::v1beta1::Params {
fn from(params: Params) -> Self {
proto::cosmos::slashing::v1beta1::Params {
signed_blocks_window: params.signed_blocks_window,
min_signed_per_window: params.min_signed_per_window,
downtime_jail_duration: params
.downtime_jail_duration
.map(TryInto::try_into)
.transpose()
.expect("invalid downtime jail duration"), slash_fraction_double_sign: params.slash_fraction_double_sign,
slash_fraction_downtime: params.slash_fraction_downtime,
}
}
}