Skip to content

Commit 2eab1ca

Browse files
committed
chore: implemented?
1 parent eeb4334 commit 2eab1ca

31 files changed

Lines changed: 551 additions & 13 deletions

File tree

packages/dapi-grpc/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,6 @@ ignored = [
8383
"platform-version",
8484
"futures-core",
8585
"tonic-prost-build",
86-
"getrandom", # Ignore getrandom as we need it to enable `js` feature
86+
"getrandom", # Ignore getrandom as we need it to enable `js` feature
8787
"dash-platform-macros", # used in build.rs
8888
]

packages/rs-dpp/src/data_contract/document_type/property/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use std::convert::TryInto;
33

44
use std::io::{BufReader, Cursor, Read};
55

6-
use bincode::{Decode, Encode};
76
use crate::data_contract::errors::DataContractError;
7+
use bincode::{Decode, Encode};
88

99
use crate::consensus::basic::decode::DecodingError;
1010
use crate::data_contract::config::v1::DataContractConfigGettersV1;

packages/rs-dpp/src/errors/consensus/basic/basic_error.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::consensus::state::document::referenced_entity_not_found_error::ReferencedEntityNotFoundError;
12
use crate::errors::ProtocolError;
23
use bincode::{Decode, Encode};
34
use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
@@ -273,6 +274,9 @@ pub enum BasicError {
273274
#[error(transparent)]
274275
MaxDocumentsTransitionsExceededError(MaxDocumentsTransitionsExceededError),
275276

277+
#[error(transparent)]
278+
ReferencedEntityNotFoundError(ReferencedEntityNotFoundError),
279+
276280
// Identity
277281
#[error(transparent)]
278282
DuplicatedIdentityPublicKeyBasicError(DuplicatedIdentityPublicKeyBasicError),

packages/rs-dpp/src/errors/consensus/codes.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ impl ErrorWithCode for BasicError {
153153
Self::DocumentCreationNotAllowedError(_) => 10416,
154154
Self::DocumentFieldMaxSizeExceededError(_) => 10417,
155155
Self::ContestedDocumentsTemporarilyNotAllowedError(_) => 10418,
156+
Self::ReferencedEntityNotFoundError(_) => 10419,
156157

157158
// Token Errors: 10450-10499
158159
Self::InvalidTokenIdError(_) => 10450,

packages/rs-drive-abci/src/execution/validation/state_transition/check_tx_verification/v0/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,6 @@ pub(super) fn state_transition_to_execution_event_for_check_tx_v0<'a, C: CoreRPC
241241
}
242242
let action = state_transition_action_result.into_data()?;
243243

244-
// Validating structure
245244
let result = state_transition.validate_advanced_structure_from_state(
246245
platform.state.last_block_info(),
247246
platform.config.network,

packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/advanced_structure_with_state.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub(crate) trait StateTransitionStructureKnownInStateValidationV0 {
2525
/// # Returns
2626
///
2727
/// * `Result<SimpleConsensusValidationResult, Error>` - A result with either a SimpleConsensusValidationResult or an Error.
28+
#[allow(clippy::too_many_arguments)]
2829
fn validate_advanced_structure_from_state(
2930
&self,
3031
block_info: &BlockInfo,

packages/rs-drive-abci/src/execution/validation/state_transition/processor/v0/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,6 @@ pub(super) fn process_state_transition_v0<'a, C: CoreRPCLike>(
269269
}
270270
let action = state_transition_action_result.into_data()?;
271271

272-
// Validating structure
273272
let result = state_transition.validate_advanced_structure_from_state(
274273
block_info,
275274
platform.config.network,

packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/mod.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ use crate::error::execution::ExecutionError;
1010
use crate::execution::types::state_transition_execution_context::StateTransitionExecutionContext;
1111
use crate::execution::validation::state_transition::batch::action_validation::document::document_create_transition_action::state_v0::DocumentCreateTransitionActionStateValidationV0;
1212
use crate::execution::validation::state_transition::batch::action_validation::document::document_create_transition_action::state_v1::DocumentCreateTransitionActionStateValidationV1;
13+
use crate::execution::validation::state_transition::batch::action_validation::document::document_create_transition_action::state_v2::DocumentCreateTransitionActionStateValidationV2;
1314
use crate::execution::validation::state_transition::batch::action_validation::document::document_create_transition_action::advanced_structure_v0::DocumentCreateTransitionActionStructureValidationV0;
1415
use crate::platform_types::platform::PlatformStateRef;
1516

1617
mod advanced_structure_v0;
1718
mod state_v0;
1819
mod state_v1;
20+
mod state_v2;
1921

2022
pub trait DocumentCreateTransitionActionValidation {
2123
fn validate_structure(
@@ -95,9 +97,17 @@ impl DocumentCreateTransitionActionValidation for DocumentCreateTransitionAction
9597
transaction,
9698
platform_version,
9799
),
100+
2 => self.validate_state_v2(
101+
platform,
102+
owner_id,
103+
block_info,
104+
execution_context,
105+
transaction,
106+
platform_version,
107+
),
98108
version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch {
99109
method: "DocumentCreateTransitionAction::validate_state".to_string(),
100-
known_versions: vec![0, 1],
110+
known_versions: vec![0, 1, 2],
101111
received: version,
102112
})),
103113
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
use dpp::block::block_info::BlockInfo;
2+
use dpp::identifier::Identifier;
3+
use dpp::validation::SimpleConsensusValidationResult;
4+
use dpp::version::PlatformVersion;
5+
use drive::query::TransactionArg;
6+
use drive::state_transition_action::batch::batched_transition::document_transition::document_create_transition_action::{
7+
DocumentCreateTransitionAction, DocumentCreateTransitionActionAccessorsV0,
8+
};
9+
10+
use crate::error::Error;
11+
use crate::execution::types::state_transition_execution_context::StateTransitionExecutionContext;
12+
use crate::execution::validation::state_transition::batch::action_validation::document::document_create_transition_action::state_v1::DocumentCreateTransitionActionStateValidationV1;
13+
use crate::execution::validation::state_transition::batch::action_validation::document::document_reference_validation::DocumentReferenceValidation;
14+
use crate::platform_types::platform::PlatformStateRef;
15+
16+
pub(in crate::execution::validation::state_transition::state_transitions::batch::action_validation) trait DocumentCreateTransitionActionStateValidationV2
17+
{
18+
fn validate_state_v2(
19+
&self,
20+
platform: &PlatformStateRef,
21+
owner_id: Identifier,
22+
block_info: &BlockInfo,
23+
execution_context: &mut StateTransitionExecutionContext,
24+
transaction: TransactionArg,
25+
platform_version: &PlatformVersion,
26+
) -> Result<SimpleConsensusValidationResult, Error>;
27+
}
28+
29+
impl DocumentCreateTransitionActionStateValidationV2 for DocumentCreateTransitionAction {
30+
fn validate_state_v2(
31+
&self,
32+
platform: &PlatformStateRef,
33+
owner_id: Identifier,
34+
block_info: &BlockInfo,
35+
execution_context: &mut StateTransitionExecutionContext,
36+
transaction: TransactionArg,
37+
platform_version: &PlatformVersion,
38+
) -> Result<SimpleConsensusValidationResult, Error> {
39+
let validation_result = self.validate_state_v1(
40+
platform,
41+
owner_id,
42+
block_info,
43+
execution_context,
44+
transaction,
45+
platform_version,
46+
)?;
47+
if !validation_result.is_valid() {
48+
return Ok(validation_result);
49+
}
50+
51+
let reference_result = self.base().validate_document_references(
52+
self.data(),
53+
None,
54+
platform,
55+
transaction,
56+
execution_context,
57+
platform_version,
58+
)?;
59+
if !reference_result.is_valid() {
60+
return Ok(reference_result);
61+
}
62+
63+
Ok(SimpleConsensusValidationResult::new())
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
pub mod v0;
2+
3+
use std::collections::{BTreeMap, BTreeSet};
4+
5+
use dpp::platform_value::Value;
6+
use dpp::validation::SimpleConsensusValidationResult;
7+
use dpp::version::PlatformVersion;
8+
use drive::query::TransactionArg;
9+
use drive::state_transition_action::batch::batched_transition::document_transition::document_base_transition_action::DocumentBaseTransitionAction;
10+
11+
use crate::error::execution::ExecutionError;
12+
use crate::error::Error;
13+
use crate::execution::types::state_transition_execution_context::StateTransitionExecutionContext;
14+
use crate::execution::validation::state_transition::batch::action_validation::document::document_reference_validation::v0::DocumentReferenceValidationV0;
15+
use crate::platform_types::platform::PlatformStateRef;
16+
17+
pub(crate) trait DocumentReferenceValidation {
18+
fn validate_document_references(
19+
&self,
20+
document_data: &BTreeMap<String, Value>,
21+
changed_fields: Option<&BTreeSet<String>>,
22+
platform: &PlatformStateRef,
23+
transaction: TransactionArg,
24+
execution_context: &mut StateTransitionExecutionContext,
25+
platform_version: &PlatformVersion,
26+
) -> Result<SimpleConsensusValidationResult, Error>;
27+
}
28+
29+
impl DocumentReferenceValidation for DocumentBaseTransitionAction {
30+
fn validate_document_references(
31+
&self,
32+
document_data: &BTreeMap<String, Value>,
33+
changed_fields: Option<&BTreeSet<String>>,
34+
platform: &PlatformStateRef,
35+
transaction: TransactionArg,
36+
execution_context: &mut StateTransitionExecutionContext,
37+
platform_version: &PlatformVersion,
38+
) -> Result<SimpleConsensusValidationResult, Error> {
39+
match platform_version
40+
.drive_abci
41+
.validation_and_processing
42+
.state_transitions
43+
.batch_state_transition
44+
.document_reference_validation
45+
{
46+
0 => self.validate_document_references_v0(
47+
document_data,
48+
changed_fields,
49+
platform,
50+
transaction,
51+
execution_context,
52+
platform_version,
53+
),
54+
version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch {
55+
method: "DocumentBaseTransitionAction::validate_document_references".to_string(),
56+
known_versions: vec![0],
57+
received: version,
58+
})),
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)