Skip to main content

drive/verify/shielded/verify_shielded_pool_state/
mod.rs

1mod v0;
2
3use crate::drive::shielded::paths::token_shielded_pool_path_vec;
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 a proof for the shielded pool total balance.
12    pub fn verify_shielded_pool_state(
13        proof: &[u8],
14        verify_subset_of_proof: bool,
15        platform_version: &PlatformVersion,
16    ) -> Result<(RootHash, Option<u64>), Error> {
17        match platform_version
18            .drive
19            .methods
20            .verify
21            .shielded
22            .verify_shielded_pool_state
23        {
24            0 => {
25                Self::verify_shielded_pool_state_v0(proof, verify_subset_of_proof, platform_version)
26            }
27            version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
28                method: "verify_shielded_pool_state".to_string(),
29                known_versions: vec![0],
30                received: version,
31            })),
32        }
33    }
34}
35
36impl Drive {
37    /// Verifies a proof for a TOKEN shielded pool's total balance (the amount of the token
38    /// currently shielded). Same versioning as [`Drive::verify_shielded_pool_state`].
39    pub fn verify_token_shielded_pool_state(
40        proof: &[u8],
41        token_id: [u8; 32],
42        verify_subset_of_proof: bool,
43        platform_version: &PlatformVersion,
44    ) -> Result<(RootHash, Option<u64>), Error> {
45        match platform_version
46            .drive
47            .methods
48            .verify
49            .shielded
50            .verify_shielded_pool_state
51        {
52            0 => Self::verify_pool_state_v0(
53                proof,
54                token_shielded_pool_path_vec(token_id),
55                verify_subset_of_proof,
56                platform_version,
57            ),
58            version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
59                method: "verify_token_shielded_pool_state".to_string(),
60                known_versions: vec![0],
61                received: version,
62            })),
63        }
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70    use dpp::version::PlatformVersion;
71
72    #[test]
73    fn test_verify_shielded_pool_state_unknown_version_mismatch() {
74        let mut platform_version = PlatformVersion::latest().clone();
75        platform_version
76            .drive
77            .methods
78            .verify
79            .shielded
80            .verify_shielded_pool_state = 255;
81
82        let result = Drive::verify_shielded_pool_state(&[], false, &platform_version);
83
84        assert!(
85            matches!(
86                result,
87                Err(Error::Drive(DriveError::UnknownVersionMismatch { .. }))
88            ),
89            "expected UnknownVersionMismatch, got {:?}",
90            result,
91        );
92    }
93}