Skip to content

Commit f57a0b3

Browse files
matched withdrawal fees
1 parent 404d6d7 commit f57a0b3

File tree

8 files changed

+71
-17
lines changed
  • packages
    • rs-drive-abci/src/execution
      • types/execution_operation
      • validation/state_transition/state_transitions/identity_credit_withdrawal
    • rs-platform-version/src/version/fee

8 files changed

+71
-17
lines changed

packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ pub enum ValidationOperation {
6767
Protocol(ProtocolValidationOperation),
6868
RetrieveIdentity(RetrieveIdentityInfo),
6969
RetrievePrefundedSpecializedBalance,
70+
PerformNetworkThresholdSigning,
7071
SingleSha256(HashBlockCount),
7172
DoubleSha256(HashBlockCount),
7273
ValidateKeyStructure(KeyCount), // This is extremely cheap
@@ -210,6 +211,19 @@ impl ValidationOperation {
210211
"execution processing fee overflow error",
211212
))?;
212213
}
214+
ValidationOperation::PerformNetworkThresholdSigning => {
215+
let operation_cost = platform_version
216+
.fee_version
217+
.processing
218+
.perform_network_threshold_signing;
219+
220+
fee_result.processing_fee = fee_result
221+
.processing_fee
222+
.checked_add(operation_cost)
223+
.ok_or(ExecutionError::Overflow(
224+
"execution processing fee overflow error",
225+
))?;
226+
}
213227
}
214228
}
215229
Ok(())

packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_credit_withdrawal/balance/v0/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ use dpp::state_transition::identity_credit_withdrawal_transition::accessors::Ide
55
use dpp::state_transition::identity_credit_withdrawal_transition::IdentityCreditWithdrawalTransition;
66

77
use crate::error::execution::ExecutionError;
8+
use crate::execution::types::execution_operation::ValidationOperation;
9+
use crate::execution::types::state_transition_execution_context::{
10+
StateTransitionExecutionContext, StateTransitionExecutionContextMethodsV0,
11+
};
812
use dpp::validation::SimpleConsensusValidationResult;
913
use dpp::version::PlatformVersion;
1014

packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_credit_withdrawal/mod.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl StateTransitionActionTransformerV0 for IdentityCreditWithdrawalTransition {
3333
platform: &PlatformRef<C>,
3434
block_info: &BlockInfo,
3535
_validation_mode: ValidationMode,
36-
_execution_context: &mut StateTransitionExecutionContext,
36+
execution_context: &mut StateTransitionExecutionContext,
3737
tx: TransactionArg,
3838
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error> {
3939
let platform_version = platform.state.current_platform_version()?;
@@ -45,7 +45,13 @@ impl StateTransitionActionTransformerV0 for IdentityCreditWithdrawalTransition {
4545
.identity_credit_withdrawal_state_transition
4646
.transform_into_action
4747
{
48-
0 => self.transform_into_action_v0(platform, block_info, tx, platform_version),
48+
0 => self.transform_into_action_v0(
49+
platform,
50+
block_info,
51+
execution_context,
52+
tx,
53+
platform_version,
54+
),
4955
version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch {
5056
method: "identity credit withdrawal transition: transform_into_action".to_string(),
5157
known_versions: vec![0],
@@ -94,7 +100,7 @@ impl StateTransitionStateValidationV0 for IdentityCreditWithdrawalTransition {
94100
platform: &PlatformRef<C>,
95101
_validation_mode: ValidationMode,
96102
block_info: &BlockInfo,
97-
_execution_context: &mut StateTransitionExecutionContext,
103+
execution_context: &mut StateTransitionExecutionContext,
98104
tx: TransactionArg,
99105
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error> {
100106
let platform_version = platform.state.current_platform_version()?;
@@ -106,7 +112,13 @@ impl StateTransitionStateValidationV0 for IdentityCreditWithdrawalTransition {
106112
.identity_credit_withdrawal_state_transition
107113
.state
108114
{
109-
0 => self.validate_state_v0(platform, block_info, tx, platform_version),
115+
0 => self.validate_state_v0(
116+
platform,
117+
block_info,
118+
execution_context,
119+
tx,
120+
platform_version,
121+
),
110122
version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch {
111123
method: "identity credit withdrawal transition: validate_state".to_string(),
112124
known_versions: vec![0],

packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_credit_withdrawal/state/v0/mod.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ use dpp::prelude::ConsensusValidationResult;
99
use dpp::state_transition::identity_credit_withdrawal_transition::accessors::IdentityCreditWithdrawalTransitionAccessorsV0;
1010
use dpp::state_transition::identity_credit_withdrawal_transition::IdentityCreditWithdrawalTransition;
1111

12+
use crate::execution::types::execution_operation::ValidationOperation;
13+
use crate::execution::types::state_transition_execution_context::{
14+
StateTransitionExecutionContext, StateTransitionExecutionContextMethodsV0,
15+
};
1216
use dpp::version::PlatformVersion;
1317
use drive::grovedb::TransactionArg;
1418
use drive::state_transition_action::identity::identity_credit_withdrawal::IdentityCreditWithdrawalTransitionAction;
@@ -19,6 +23,7 @@ pub(in crate::execution::validation::state_transition::state_transitions::identi
1923
&self,
2024
platform: &PlatformRef<C>,
2125
block_info: &BlockInfo,
26+
execution_context: &mut StateTransitionExecutionContext,
2227
tx: TransactionArg,
2328
platform_version: &PlatformVersion,
2429
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error>;
@@ -27,6 +32,7 @@ pub(in crate::execution::validation::state_transition::state_transitions::identi
2732
&self,
2833
platform: &PlatformRef<C>,
2934
block_info: &BlockInfo,
35+
execution_context: &mut StateTransitionExecutionContext,
3036
tx: TransactionArg,
3137
platform_version: &PlatformVersion,
3238
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error>;
@@ -39,6 +45,7 @@ impl IdentityCreditWithdrawalStateTransitionStateValidationV0
3945
&self,
4046
platform: &PlatformRef<C>,
4147
block_info: &BlockInfo,
48+
execution_context: &mut StateTransitionExecutionContext,
4249
tx: TransactionArg,
4350
platform_version: &PlatformVersion,
4451
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error> {
@@ -65,17 +72,24 @@ impl IdentityCreditWithdrawalStateTransitionStateValidationV0
6572
));
6673
}
6774

68-
self.transform_into_action_v0(platform, block_info, tx, platform_version)
75+
self.transform_into_action_v0(
76+
platform,
77+
block_info,
78+
execution_context,
79+
tx,
80+
platform_version,
81+
)
6982
}
7083

7184
fn transform_into_action_v0<C: CoreRPCLike>(
7285
&self,
7386
platform: &PlatformRef<C>,
7487
block_info: &BlockInfo,
88+
execution_context: &mut StateTransitionExecutionContext,
7589
tx: TransactionArg,
7690
platform_version: &PlatformVersion,
7791
) -> Result<ConsensusValidationResult<StateTransitionAction>, Error> {
78-
Ok(
92+
let consensus_validation_result =
7993
IdentityCreditWithdrawalTransitionAction::try_from_identity_credit_withdrawal(
8094
&platform.drive,
8195
tx,
@@ -85,7 +99,11 @@ impl IdentityCreditWithdrawalStateTransitionStateValidationV0
8599
)
86100
.map(|consensus_validation_result| {
87101
consensus_validation_result.map(|withdrawal| withdrawal.into())
88-
})?,
89-
)
102+
})?;
103+
if consensus_validation_result.is_valid() {
104+
// If this is valid then we will apply the action and eventually perform network threshold signing
105+
execution_context.add_operation(ValidationOperation::PerformNetworkThresholdSigning);
106+
}
107+
Ok(consensus_validation_result)
90108
}
91109
}

packages/rs-platform-version/src/version/fee/mod.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@ mod tests {
7272
fetch_identity_balance_and_revision_processing_cost: 3,
7373
fetch_identity_cost_per_look_up_key_by_id: 4,
7474
fetch_single_identity_key_processing_cost: 5,
75-
validate_key_structure: 6,
76-
fetch_prefunded_specialized_balance_processing_cost: 7,
75+
perform_network_threshold_signing: 6,
76+
validate_key_structure: 7,
77+
fetch_prefunded_specialized_balance_processing_cost: 8,
7778
},
7879
data_contract: FeeDataContractValidationVersion {
7980
document_type_base_fee: 1,
@@ -129,8 +130,9 @@ mod tests {
129130
fetch_identity_balance_and_revision_processing_cost: 3,
130131
fetch_identity_cost_per_look_up_key_by_id: 4,
131132
fetch_single_identity_key_processing_cost: 5,
132-
validate_key_structure: 6,
133-
fetch_prefunded_specialized_balance_processing_cost: 7,
133+
perform_network_threshold_signing: 6,
134+
validate_key_structure: 7,
135+
fetch_prefunded_specialized_balance_processing_cost: 8,
134136
},
135137
data_contract: FeeDataContractValidationVersion {
136138
document_type_base_fee: 1,

packages/rs-platform-version/src/version/fee/processing/mod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub struct FeeProcessingVersion {
1010
pub fetch_identity_cost_per_look_up_key_by_id: u64,
1111
pub fetch_prefunded_specialized_balance_processing_cost: u64,
1212
pub fetch_single_identity_key_processing_cost: u64,
13+
pub perform_network_threshold_signing: u64,
1314
pub validate_key_structure: u64,
1415
}
1516

@@ -26,8 +27,9 @@ mod tests {
2627
fetch_identity_balance_and_revision_processing_cost: 3,
2728
fetch_identity_cost_per_look_up_key_by_id: 4,
2829
fetch_single_identity_key_processing_cost: 5,
29-
validate_key_structure: 6,
30-
fetch_prefunded_specialized_balance_processing_cost: 7,
30+
perform_network_threshold_signing: 6,
31+
validate_key_structure: 7,
32+
fetch_prefunded_specialized_balance_processing_cost: 8,
3133
};
3234

3335
let version2 = FeeProcessingVersion {
@@ -36,8 +38,9 @@ mod tests {
3638
fetch_identity_balance_and_revision_processing_cost: 3,
3739
fetch_identity_cost_per_look_up_key_by_id: 4,
3840
fetch_single_identity_key_processing_cost: 5,
39-
validate_key_structure: 6,
40-
fetch_prefunded_specialized_balance_processing_cost: 7,
41+
perform_network_threshold_signing: 6,
42+
validate_key_structure: 7,
43+
fetch_prefunded_specialized_balance_processing_cost: 8,
4144
};
4245

4346
// This assertion will check if all fields are considered in the equality comparison

packages/rs-platform-version/src/version/fee/processing/v1.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ pub const FEE_PROCESSING_VERSION1: FeeProcessingVersion = FeeProcessingVersion {
77
fetch_identity_cost_per_look_up_key_by_id: 9000,
88
fetch_prefunded_specialized_balance_processing_cost: 10000,
99
fetch_single_identity_key_processing_cost: 10000,
10+
perform_network_threshold_signing: 100000000, // 1mDash (2.5 cents at 25$/Dash)
1011
validate_key_structure: 50,
1112
};

packages/rs-platform-version/src/version/fee/state_transition_min_fees/v1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::version::fee::state_transition_min_fees::StateTransitionMinFees;
22

33
pub const STATE_TRANSITION_MIN_FEES_VERSION1: StateTransitionMinFees = StateTransitionMinFees {
44
credit_transfer: 100000,
5-
credit_withdrawal: 100000,
5+
credit_withdrawal: 400000000, //credit withdrawals are more expensive that the rest
66
identity_update: 100000,
77
document_batch_sub_transition: 100000,
88
contract_create: 100000,

0 commit comments

Comments
 (0)