drive/verify/shielded/verify_recent_nullifier_changes/
mod.rs1mod 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 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}