drive/verify/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::DriveDocumentQuery;
8
9use dpp::version::PlatformVersion;
10
11impl DriveDocumentQuery<'_> {
12 pub fn verify_proof_keep_serialized(
29 &self,
30 proof: &[u8],
31 platform_version: &PlatformVersion,
32 ) -> Result<(RootHash, Vec<Vec<u8>>), Error> {
33 self.ensure_no_sub_queries("verify_proof_keep_serialized")?;
34 match platform_version
35 .drive
36 .methods
37 .verify
38 .document
39 .verify_proof_keep_serialized
40 {
41 0 => self.verify_proof_keep_serialized_v0(proof, platform_version),
42 version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
43 method: "verify_proof_keep_serialized".to_string(),
44 known_versions: vec![0],
45 received: version,
46 })),
47 }
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54 use crate::error::drive::DriveError;
55 use dpp::data_contract::accessors::v0::DataContractV0Getters;
56 use dpp::data_contracts::SystemDataContract;
57 use dpp::system_data_contracts::load_system_data_contract;
58
59 #[test]
60 fn test_document_verify_proof_keep_serialized_unknown_version() {
61 let platform_version = PlatformVersion::latest();
62 let contract = load_system_data_contract(SystemDataContract::DPNS, platform_version)
63 .expect("expected to load DPNS contract");
64 let document_type = contract
65 .document_type_for_name("domain")
66 .expect("expected domain document type");
67
68 let mut platform_version = platform_version.clone();
69 platform_version
70 .drive
71 .methods
72 .verify
73 .document
74 .verify_proof_keep_serialized = 255;
75
76 let query = DriveDocumentQuery {
77 contract: &contract,
78 document_type,
79 internal_clauses: Default::default(),
80 offset: None,
81 limit: None,
82 order_by: Default::default(),
83 start_at: None,
84 start_at_included: false,
85 block_time_ms: None,
86 resolved_time_ranges: vec![],
87 sub_queries: vec![],
88 };
89
90 let result = query.verify_proof_keep_serialized(&[], &platform_version);
91
92 assert!(
93 matches!(result, Err(Error::Drive(DriveError::UnknownVersionMismatch { method, known_versions, received }))
94 if method == "verify_proof_keep_serialized" && known_versions == vec![0] && received == 255
95 )
96 );
97 }
98}