Skip to main content

ic_backup/policy/settlement_identity/
mod.rs

1//! Ordered passive identity checks shared by original-operation settlements.
2
3use crate::model::artifacts::ArtifactChecksumRecord;
4
5pub(super) struct SettlementIdentity<'a> {
6    pub authority: &'a ArtifactChecksumRecord,
7    pub mutation_attempt: u32,
8    pub observation_attempt: u32,
9    pub challenge: &'a ArtifactChecksumRecord,
10}
11
12impl SettlementIdentity<'_> {
13    pub fn compare(&self, expected: &Self) -> Result<(), SettlementIdentityMismatch> {
14        if self.authority != expected.authority {
15            return Err(SettlementIdentityMismatch::Authority);
16        }
17        if self.mutation_attempt != expected.mutation_attempt
18            || self.observation_attempt != expected.observation_attempt
19        {
20            return Err(SettlementIdentityMismatch::Attempt);
21        }
22        if self.challenge != expected.challenge {
23            return Err(SettlementIdentityMismatch::Challenge);
24        }
25        Ok(())
26    }
27}
28
29/// Passive settlement claims differ from their independently qualified original evidence.
30#[derive(Debug, thiserror::Error, Eq, PartialEq)]
31pub enum SettlementIdentityMismatch {
32    /// Full original operation authority differs.
33    #[error("settlement authority differs")]
34    Authority,
35    /// Original mutation or observation attempt differs.
36    #[error("settlement attempts differ")]
37    Attempt,
38    /// Caller-owned qualification challenge differs.
39    #[error("settlement challenge differs")]
40    Challenge,
41}