iop_coeus_node/policy/subtree/
expiration.rs

1use 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}