drive/verify/single_document/verify_proof_keep_serialized/
mod.rs1mod v0;
2
3use crate::error::drive::DriveError;
4use crate::verify::RootHash;
5
6use crate::error::Error;
7use crate::query::SingleDocumentDriveQuery;
8
9use dpp::version::PlatformVersion;
10
11impl SingleDocumentDriveQuery {
12 pub fn verify_proof_keep_serialized(
34 &self,
35 is_subset: bool,
36 proof: &[u8],
37 platform_version: &PlatformVersion,
38 ) -> Result<(RootHash, Option<Vec<u8>>), Error> {
39 match platform_version
40 .drive
41 .methods
42 .verify
43 .single_document
44 .verify_proof_keep_serialized
45 {
46 0 => self.verify_proof_keep_serialized_v0(is_subset, proof, platform_version),
47 version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
48 method: "SingleDocumentDriveQuery::verify_proof_keep_serialized".to_string(),
49 known_versions: vec![0],
50 received: version,
51 })),
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59 use crate::error::drive::DriveError;
60 use crate::query::SingleDocumentDriveQueryContestedStatus;
61
62 #[test]
63 fn test_single_document_verify_proof_keep_serialized_unknown_version() {
64 let mut platform_version = PlatformVersion::latest().clone();
65 platform_version
66 .drive
67 .methods
68 .verify
69 .single_document
70 .verify_proof_keep_serialized = 255;
71
72 let query = SingleDocumentDriveQuery {
73 contract_id: [0u8; 32],
74 document_type_name: "test".to_string(),
75 document_type_keeps_history: false,
76 document_id: [0u8; 32],
77 block_time_ms: None,
78 contested_status: SingleDocumentDriveQueryContestedStatus::NotContested,
79 };
80
81 let result = query.verify_proof_keep_serialized(false, &[], &platform_version);
82
83 assert!(
84 matches!(result, Err(Error::Drive(DriveError::UnknownVersionMismatch { method, known_versions, received }))
85 if method == "SingleDocumentDriveQuery::verify_proof_keep_serialized" && known_versions == vec![0] && received == 255
86 )
87 );
88 }
89}