iop_coeus_node/policy/subtree/
expiration.rs1use super::*;
2
3impl SubtreePolicy for ExpirationPolicy {
4 fn validate(
5 &self, state: &State, policy_domain: &Domain, domain_after_op: &Domain,
6 ) -> Result<()> {
7 if let Some(policy_expiration) = &policy_domain.subtree_policies().expiration {
8 if let Some(checked_expiration) = &domain_after_op.subtree_policies().expiration {
9 ensure!(
10 policy_expiration.max_lifetime_blocks <= checked_expiration.max_lifetime_blocks,
11 "Cannot make expiration of {} longer than what {} defined",
12 policy_domain.name(),
13 domain_after_op.name()
14 );
15 }
16 ensure!(
17 state.last_seen_height() < domain_after_op.expires_at_height(),
18 "Domain {} expired",
19 domain_after_op.name()
20 );
21 ensure!(
22 state.last_seen_height() + policy_expiration.max_lifetime_blocks
23 >= domain_after_op.expires_at_height(),
24 "Domain {} would expire too late based on policy in {}",
25 domain_after_op.name(),
26 policy_domain.name()
27 );
28 }
29 Ok(())
30 }
31}