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