dpp/validation/
operations.rs1use crate::fee::Credits;
2use platform_version::version::PlatformVersion;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum ProtocolValidationOperation {
6 DocumentTypeSchemaValidationForSize(u64),
7 DocumentTypeSchemaPropertyValidation(u64),
8 DocumentTypeSchemaIndexValidation(u64, bool),
9}
10
11impl ProtocolValidationOperation {
12 pub fn processing_cost(&self, platform_version: &PlatformVersion) -> Credits {
13 match self {
14 ProtocolValidationOperation::DocumentTypeSchemaValidationForSize(size) => {
15 platform_version
16 .fee_version
17 .data_contract_validation
18 .document_type_base_fee
19 + *size
20 * platform_version
21 .fee_version
22 .data_contract_validation
23 .document_type_schema_size_fee
24 }
25 ProtocolValidationOperation::DocumentTypeSchemaPropertyValidation(properties_count) => {
26 *properties_count
27 * platform_version
28 .fee_version
29 .data_contract_validation
30 .document_type_per_property_fee
31 }
32 ProtocolValidationOperation::DocumentTypeSchemaIndexValidation(
33 index_properties_count,
34 is_unique,
35 ) => {
36 if *is_unique {
37 *index_properties_count
38 * platform_version
39 .fee_version
40 .data_contract_validation
41 .document_type_unique_index_per_property_fee
42 + platform_version
43 .fee_version
44 .data_contract_validation
45 .document_type_base_unique_index_fee
46 } else {
47 *index_properties_count
48 * platform_version
49 .fee_version
50 .data_contract_validation
51 .document_type_non_unique_index_per_property_fee
52 + platform_version
53 .fee_version
54 .data_contract_validation
55 .document_type_base_non_unique_index_fee
56 }
57 }
58 }
59 }
60}