drive/verify/shielded/verify_shielded_pool_state/
mod.rs

1mod v0;
2
3use crate::drive::Drive;
4use crate::error::drive::DriveError;
5use crate::error::Error;
6use crate::verify::RootHash;
7use dpp::version::PlatformVersion;
8
9impl Drive {
10    /// Verifies a proof for the shielded pool total balance.
11    pub fn verify_shielded_pool_state(
12        proof: &[u8],
13        verify_subset_of_proof: bool,
14        platform_version: &PlatformVersion,
15    ) -> Result<(RootHash, Option<u64>), Error> {
16        match platform_version
17            .drive
18            .methods
19            .verify
20            .shielded
21            .verify_shielded_pool_state
22        {
23            0 => {
24                Self::verify_shielded_pool_state_v0(proof, verify_subset_of_proof, platform_version)
25            }
26            version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
27                method: "verify_shielded_pool_state".to_string(),
28                known_versions: vec![0],
29                received: version,
30            })),
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38    use dpp::version::PlatformVersion;
39
40    #[test]
41    fn test_verify_shielded_pool_state_unknown_version_mismatch() {
42        let mut platform_version = PlatformVersion::latest().clone();
43        platform_version
44            .drive
45            .methods
46            .verify
47            .shielded
48            .verify_shielded_pool_state = 255;
49
50        let result = Drive::verify_shielded_pool_state(&[], false, &platform_version);
51
52        assert!(
53            matches!(
54                result,
55                Err(Error::Drive(DriveError::UnknownVersionMismatch { .. }))
56            ),
57            "expected UnknownVersionMismatch, got {:?}",
58            result,
59        );
60    }
61}