@@ -21,9 +21,9 @@ use drive::grovedb::TransactionArg;
2121use drive:: state_transition_action:: StateTransitionAction ;
2222use std:: collections:: BTreeMap ;
2323
24- use crate :: execution:: types:: state_transition_execution_context:: { StateTransitionExecutionContext } ;
24+ use crate :: execution:: types:: state_transition_execution_context:: StateTransitionExecutionContext ;
2525use crate :: execution:: validation:: state_transition:: common:: validate_simple_pre_check_balance:: ValidateSimplePreCheckBalance ;
26- use crate :: execution:: validation:: state_transition:: common:: validate_state_transition_identity_signed:: { ValidateStateTransitionIdentitySignature } ;
26+ use crate :: execution:: validation:: state_transition:: common:: validate_state_transition_identity_signed:: ValidateStateTransitionIdentitySignature ;
2727use crate :: execution:: validation:: state_transition:: identity_create:: { StateTransitionStateValidationForIdentityCreateTransitionV0 , StateTransitionStructureKnownInStateValidationForIdentityCreateTransitionV0 } ;
2828use crate :: execution:: validation:: state_transition:: identity_top_up:: StateTransitionIdentityTopUpTransitionActionTransformer ;
2929use crate :: execution:: validation:: state_transition:: state_transitions:: identity_update:: advanced_structure:: v0:: IdentityUpdateStateTransitionIdentityAndSignaturesValidationV0 ;
@@ -105,7 +105,7 @@ pub(super) fn process_state_transition_v0<'a, C: CoreRPCLike>(
105105 }
106106
107107 // Only Data contract state transitions and Masternode vote do not have basic structure validation
108- if state_transition. has_basic_structure_validation ( ) {
108+ if state_transition. has_basic_structure_validation ( platform_version ) {
109109 // We validate basic structure validation after verifying the identity,
110110 // this is structure validation that does not require state and is already checked on check_tx
111111 let consensus_result = state_transition. validate_basic_structure ( platform_version) ?;
@@ -333,7 +333,7 @@ pub(crate) trait StateTransitionBasicStructureValidationV0 {
333333
334334 /// True if the state transition has basic structure validation.
335335 /// Currently only data contract update does not
336- fn has_basic_structure_validation ( & self ) -> bool {
336+ fn has_basic_structure_validation ( & self , _platform_version : & PlatformVersion ) -> bool {
337337 true
338338 }
339339}
@@ -516,9 +516,7 @@ impl StateTransitionBasicStructureValidationV0 for StateTransition {
516516 platform_version : & PlatformVersion ,
517517 ) -> Result < SimpleConsensusValidationResult , Error > {
518518 match self {
519- StateTransition :: DataContractCreate ( _)
520- | StateTransition :: DataContractUpdate ( _)
521- | StateTransition :: MasternodeVote ( _) => {
519+ StateTransition :: MasternodeVote ( _) => {
522520 // no basic structure validation
523521 Ok ( SimpleConsensusValidationResult :: new ( ) )
524522 }
@@ -532,15 +530,66 @@ impl StateTransitionBasicStructureValidationV0 for StateTransition {
532530 StateTransition :: IdentityCreditTransfer ( st) => {
533531 st. validate_basic_structure ( platform_version)
534532 }
533+ StateTransition :: DataContractCreate ( st) => {
534+ if platform_version
535+ . drive_abci
536+ . validation_and_processing
537+ . state_transitions
538+ . contract_create_state_transition
539+ . basic_structure
540+ . is_some ( )
541+ {
542+ st. validate_basic_structure ( platform_version)
543+ } else {
544+ Ok ( SimpleConsensusValidationResult :: new ( ) )
545+ }
546+ }
547+ StateTransition :: DataContractUpdate ( st) => {
548+ if platform_version
549+ . drive_abci
550+ . validation_and_processing
551+ . state_transitions
552+ . contract_update_state_transition
553+ . basic_structure
554+ . is_some ( )
555+ {
556+ st. validate_basic_structure ( platform_version)
557+ } else {
558+ Ok ( SimpleConsensusValidationResult :: new ( ) )
559+ }
560+ }
535561 }
536562 }
537- fn has_basic_structure_validation ( & self ) -> bool {
538- !matches ! (
539- self ,
540- StateTransition :: DataContractCreate ( _)
541- | StateTransition :: DataContractUpdate ( _)
542- | StateTransition :: MasternodeVote ( _)
543- )
563+ fn has_basic_structure_validation ( & self , platform_version : & PlatformVersion ) -> bool {
564+ match self {
565+ StateTransition :: DataContractCreate ( _) => {
566+ // Added in protocol version 9 (version 2.0)
567+ platform_version
568+ . drive_abci
569+ . validation_and_processing
570+ . state_transitions
571+ . contract_create_state_transition
572+ . basic_structure
573+ . is_some ( )
574+ }
575+ StateTransition :: DataContractUpdate ( _) => {
576+ // Added in protocol version 9 (version 2.0)
577+ platform_version
578+ . drive_abci
579+ . validation_and_processing
580+ . state_transitions
581+ . contract_update_state_transition
582+ . basic_structure
583+ . is_some ( )
584+ }
585+ StateTransition :: Batch ( _)
586+ | StateTransition :: IdentityCreate ( _)
587+ | StateTransition :: IdentityTopUp ( _)
588+ | StateTransition :: IdentityCreditWithdrawal ( _)
589+ | StateTransition :: IdentityUpdate ( _)
590+ | StateTransition :: IdentityCreditTransfer ( _) => true ,
591+ StateTransition :: MasternodeVote ( _) => false ,
592+ }
544593 }
545594}
546595
0 commit comments