platform_version/version/fee/
mod.rs1use crate::error::PlatformVersionError;
2use crate::version::fee::data_contract_registration::v1::FEE_DATA_CONTRACT_REGISTRATION_VERSION1;
3use crate::version::fee::data_contract_registration::FeeDataContractRegistrationVersion;
4use crate::version::fee::data_contract_validation::FeeDataContractValidationVersion;
5use crate::version::fee::hashing::v1::FEE_HASHING_VERSION1;
6use crate::version::fee::hashing::{FeeHashingVersion, FeeHashingVersionBeforeVersion11};
7use crate::version::fee::processing::{
8 FeeProcessingVersion, FeeProcessingVersionFieldsBeforeVersion1Point4,
9};
10use crate::version::fee::signature::FeeSignatureVersion;
11use crate::version::fee::state_transition_min_fees::{
12 StateTransitionMinFees, StateTransitionMinFeesBeforeProtocolVersion11,
13};
14use crate::version::fee::storage::FeeStorageVersion;
15use crate::version::fee::v1::FEE_VERSION1;
16use crate::version::fee::vote_resolution_fund_fees::VoteResolutionFundFees;
17use bincode::{Decode, Encode};
18
19pub mod data_contract_registration;
20mod data_contract_validation;
21mod hashing;
22mod processing;
23pub mod signature;
24pub mod state_transition_min_fees;
25pub mod storage;
26pub mod v1;
27pub mod v2;
28pub mod vote_resolution_fund_fees;
29
30pub type FeeVersionNumber = u32;
31
32pub const FEE_VERSIONS: &[FeeVersion] = &[FEE_VERSION1];
33
34#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)]
35pub struct FeeVersion {
36 pub fee_version_number: FeeVersionNumber,
37 pub uses_version_fee_multiplier_permille: Option<u64>,
39 pub storage: FeeStorageVersion,
40 pub signature: FeeSignatureVersion,
41 pub hashing: FeeHashingVersion,
42 pub processing: FeeProcessingVersion,
43 pub data_contract_validation: FeeDataContractValidationVersion,
44 pub data_contract_registration: FeeDataContractRegistrationVersion,
45 pub state_transition_min_fees: StateTransitionMinFees,
46 pub vote_resolution_fund_fees: VoteResolutionFundFees,
47}
48
49impl FeeVersion {
50 pub fn as_static(&self) -> &'static FeeVersion {
51 FeeVersion::get(self.fee_version_number).expect("expected fee version to exist")
52 }
53 pub fn get<'a>(version: FeeVersionNumber) -> Result<&'a Self, PlatformVersionError> {
54 if version > 0 {
55 FEE_VERSIONS.get(version as usize - 1).ok_or_else(|| {
56 PlatformVersionError::UnknownVersionError(format!("no fee version {version}"))
57 })
58 } else {
59 Err(PlatformVersionError::UnknownVersionError(format!(
60 "no fee version {version}"
61 )))
62 }
63 }
64
65 pub fn get_optional<'a>(version: FeeVersionNumber) -> Option<&'a Self> {
66 if version > 0 {
67 FEE_VERSIONS.get(version as usize - 1)
68 } else {
69 None
70 }
71 }
72
73 pub fn first<'a>() -> &'a Self {
74 FEE_VERSIONS
75 .first()
76 .expect("expected to have a fee version")
77 }
78
79 pub fn latest<'a>() -> &'a Self {
80 FEE_VERSIONS.last().expect("expected to have a fee version")
81 }
82}
83
84#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)]
89pub struct FeeVersionFieldsBeforeVersion4 {
90 pub uses_version_fee_multiplier_permille: Option<u64>,
92 pub storage: FeeStorageVersion,
93 pub signature: FeeSignatureVersion,
94 pub hashing: FeeHashingVersionBeforeVersion11,
95 pub processing: FeeProcessingVersionFieldsBeforeVersion1Point4,
96 pub data_contract: FeeDataContractValidationVersion,
97 pub state_transition_min_fees: StateTransitionMinFeesBeforeProtocolVersion11,
98 pub vote_resolution_fund_fees: VoteResolutionFundFees,
99}
100
101impl From<FeeVersionFieldsBeforeVersion4> for FeeVersion {
102 fn from(value: FeeVersionFieldsBeforeVersion4) -> Self {
103 FeeVersion {
104 fee_version_number: 1,
105 uses_version_fee_multiplier_permille: value.uses_version_fee_multiplier_permille,
106 storage: value.storage,
107 signature: value.signature,
108 hashing: FEE_HASHING_VERSION1,
109 processing: FeeProcessingVersion::from(value.processing),
110 data_contract_validation: value.data_contract,
111 data_contract_registration: FEE_DATA_CONTRACT_REGISTRATION_VERSION1,
112 state_transition_min_fees: StateTransitionMinFees::from(
113 value.state_transition_min_fees,
114 ),
115 vote_resolution_fund_fees: value.vote_resolution_fund_fees,
116 }
117 }
118}