drive/verify/shielded/verify_recent_nullifier_changes/
mod.rs

1mod v0;
2
3use crate::drive::shielded::nullifiers::types::NullifierChangePerBlock;
4use crate::drive::Drive;
5use crate::error::drive::DriveError;
6use crate::error::Error;
7use crate::verify::RootHash;
8use dpp::version::PlatformVersion;
9
10impl Drive {
11    /// Verifies the proof of recent nullifier changes starting from a given block height.
12    pub fn verify_recent_nullifier_changes(
13        proof: &[u8],
14        start_block_height: u64,
15        limit: Option<u16>,
16        verify_subset_of_proof: bool,
17        platform_version: &PlatformVersion,
18    ) -> Result<(RootHash, Vec<NullifierChangePerBlock>), Error> {
19        match platform_version
20            .drive
21            .methods
22            .verify
23            .shielded
24            .verify_recent_nullifier_changes
25        {
26            0 => Self::verify_recent_nullifier_changes_v0(
27                proof,
28                start_block_height,
29                limit,
30                verify_subset_of_proof,
31                platform_version,
32            ),
33            version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
34                method: "verify_recent_nullifier_changes".to_string(),
35                known_versions: vec![0],
36                received: version,
37            })),
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45    use dpp::version::PlatformVersion;
46
47    #[test]
48    fn test_verify_recent_nullifier_changes_unknown_version_mismatch() {
49        let mut platform_version = PlatformVersion::latest().clone();
50        platform_version
51            .drive
52            .methods
53            .verify
54            .shielded
55            .verify_recent_nullifier_changes = 255;
56
57        let result = Drive::verify_recent_nullifier_changes(&[], 0, None, false, &platform_version);
58
59        assert!(
60            matches!(
61                &result,
62                Err(Error::Drive(DriveError::UnknownVersionMismatch { .. }))
63            ),
64            "expected UnknownVersionMismatch, got is_err={}",
65            result.is_err(),
66        );
67    }
68}