dpp/validation/
operations.rs

1use 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}