Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
450205e
wip
jawid-h Feb 1, 2023
a302bcb
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Feb 6, 2023
520be10
chore: wip
jawid-h Feb 7, 2023
bb4e21c
chore: wip
jawid-h Feb 8, 2023
d036203
chore: all except doc batch
jawid-h Feb 8, 2023
2392d05
chore: wip
jawid-h Feb 9, 2023
79bc35f
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Feb 17, 2023
cce7c23
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Feb 17, 2023
325022c
Merge branch 'feat/st-factory' of github.com:dashpay/platform into fe…
jawid-h Feb 17, 2023
a08ae75
chore: wip
jawid-h Feb 17, 2023
fd6b158
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Feb 20, 2023
0d32a74
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Feb 21, 2023
66033f7
chore: make ?Send work
jawid-h Feb 22, 2023
ff439f1
chore: InvalidStateTransitionError
jawid-h Feb 22, 2023
72f46b2
chore: fix validation function behaviour
jawid-h Feb 23, 2023
0cc2300
chore: wip
jawid-h Feb 23, 2023
e476983
chore: wip
jawid-h Feb 23, 2023
c58c005
chore: fixes
jawid-h Feb 23, 2023
595fb9f
chore: AbstractStateTransition
jawid-h Feb 27, 2023
dcc1b97
chore: use macro
jawid-h Feb 27, 2023
46eec30
chore: InvalidStateTransitionError
jawid-h Feb 27, 2023
0e52a84
chore: wip
jawid-h Feb 28, 2023
545d96a
chore: wip
jawid-h Feb 28, 2023
1c5fe5e
chore: wip
jawid-h Mar 1, 2023
284ea96
chore: wip
jawid-h Mar 2, 2023
8218d98
Merge v0.24-dev
markin-io Mar 3, 2023
05a3f7e
fix: inconsistencies after merge
markin-io Mar 3, 2023
fae3602
chore: fix tests
jawid-h Mar 6, 2023
48410a8
chore: clippy
jawid-h Mar 6, 2023
97dd2f5
chore: ST factor test
jawid-h Mar 7, 2023
3f50584
chore: messy wip
jawid-h Mar 7, 2023
99df902
feat(wasm-dpp): StateTransitionFactory return wasm instances of state…
markin-io Mar 7, 2023
87c6247
chore: fix
jawid-h Mar 8, 2023
41c66f0
chore: remove StateTransitionWasm
jawid-h Mar 8, 2023
ffe7695
chore: remove unused code
jawid-h Mar 8, 2023
7fcf2af
Merge branch 'v0.24-dev' into feat/st-factory
jawid-h Mar 8, 2023
9b2eccd
fix(dpp): inconsistencies after merge
markin-io Mar 8, 2023
419b49f
chore: linter fix
jawid-h Mar 9, 2023
806bb74
Merge branch 'feat/st-factory' of github.com:dashpay/platform into fe…
jawid-h Mar 9, 2023
c15a662
chore: cargo fmt
jawid-h Mar 9, 2023
0d4580c
chore(wasm-dpp): clippy
markin-io Mar 9, 2023
ad75501
chore: rename error
jawid-h Mar 14, 2023
109956a
chore: add tests
jawid-h Mar 14, 2023
9179400
chore: linter fix
jawid-h Mar 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/rs-dpp/src/data_contract/data_contract_facade.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
use crate::data_contract::state_transition::{
DataContractCreateTransition, DataContractUpdateTransition,
};
use crate::data_contract::validation::data_contract_validator::DataContractValidator;
use crate::data_contract::{DataContract, DataContractFactory};
use crate::document::document_transition::document_base_transition::JsonValue;
Expand All @@ -9,6 +6,9 @@ use crate::version::ProtocolVersionValidator;
use crate::ProtocolError;
use std::sync::Arc;

use super::state_transition::data_contract_create_transition::DataContractCreateTransition;
use super::state_transition::data_contract_update_transition::DataContractUpdateTransition;

pub struct DataContractFacade {
factory: DataContractFactory,
data_contract_validator: Arc<DataContractValidator>,
Expand Down
8 changes: 3 additions & 5 deletions packages/rs-dpp/src/data_contract/data_contract_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@ use crate::{
util::entropy_generator,
};

use super::{
state_transition::{DataContractCreateTransition, DataContractUpdateTransition},
validation::data_contract_validator::DataContractValidator,
DataContract,
};
use super::state_transition::data_contract_create_transition::DataContractCreateTransition;
use super::state_transition::data_contract_update_transition::DataContractUpdateTransition;
use super::{validation::data_contract_validator::DataContractValidator, DataContract};

/// A way to provide external entropy generator.
pub trait EntropyGenerator {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,6 @@ impl DataContractCreateTransition {
pub fn get_entropy(&self) -> &[u8; 32] {
&self.entropy
}

/// Returns ID of the created contract
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![&self.data_contract.id]
}
}

impl StateTransitionIdentitySigned for DataContractCreateTransition {
Expand All @@ -114,6 +109,11 @@ impl StateTransitionIdentitySigned for DataContractCreateTransition {
}

impl StateTransitionLike for DataContractCreateTransition {
/// Returns ID of the created contract
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![self.data_contract.id]
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ use anyhow::Result;
use async_trait::async_trait;

use crate::{
data_contract::{state_transition::DataContractCreateTransition, DataContract},
data_contract::{
state_transition::data_contract_create_transition::DataContractCreateTransition,
DataContract,
},
errors::StateError,
state_repository::StateRepositoryLike,
state_transition::StateTransitionLike,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,6 @@ impl DataContractUpdateTransition {
pub fn set_data_contract(&mut self, data_contract: DataContract) {
self.data_contract = data_contract;
}

/// Returns ID of the created contract
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![&self.data_contract.id]
}
}

impl StateTransitionIdentitySigned for DataContractUpdateTransition {
Expand All @@ -96,6 +91,11 @@ impl StateTransitionIdentitySigned for DataContractUpdateTransition {
}

impl StateTransitionLike for DataContractUpdateTransition {
/// Returns ID of the created contract
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![self.data_contract.id]
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::consensus::basic::decode::ProtocolVersionParsingError;
use crate::consensus::basic::invalid_data_contract_version_error::InvalidDataContractVersionError;
use crate::consensus::ConsensusError;
use crate::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
use crate::validation::AsyncDataValidatorWithContext;
use crate::{
consensus::basic::BasicError,
data_contract::{
Expand All @@ -22,6 +23,7 @@ use crate::{
};
use anyhow::anyhow;
use anyhow::Context;
use async_trait::async_trait;
use json_patch::PatchOperation;
use lazy_static::lazy_static;
use serde_json::{json, Value as JsonValue};
Expand Down Expand Up @@ -65,8 +67,16 @@ where
json_schema_validator,
})
}
}

#[async_trait(?Send)]
impl<SR> AsyncDataValidatorWithContext for DataContractUpdateTransitionBasicValidator<SR>
where
SR: StateRepositoryLike,
{
type Item = JsonValue;

pub async fn validate(
async fn validate(
&self,
raw_state_transition: &JsonValue,
execution_context: &StateTransitionExecutionContext,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ use async_trait::async_trait;

use crate::consensus::basic::invalid_data_contract_version_error::InvalidDataContractVersionError;
use crate::{
data_contract::{state_transition::DataContractUpdateTransition, DataContract},
data_contract::{
state_transition::data_contract_update_transition::DataContractUpdateTransition,
DataContract,
},
errors::consensus::basic::BasicError,
state_repository::StateRepositoryLike,
state_transition::StateTransitionLike,
Expand Down Expand Up @@ -94,7 +97,7 @@ pub async fn validate_data_contract_update_transition_state(
mod test {
use super::*;
use crate::{
data_contract::state_transition::DataContractUpdateTransition,
data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition,
state_repository::MockStateRepositoryLike, state_transition::StateTransitionLike,
tests::fixtures::get_data_contract_fixture,
};
Expand Down
3 changes: 0 additions & 3 deletions packages/rs-dpp/src/data_contract/state_transition/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
pub use data_contract_create_transition::*;
pub use data_contract_update_transition::*;

pub mod data_contract_create_transition;
pub mod data_contract_update_transition;
pub mod errors;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,6 @@ impl DocumentsBatchTransition {
pub fn get_transitions(&self) -> &Vec<DocumentTransition> {
&self.transitions
}

// TODO to decide if this should be a lazy iterator or a vector
pub fn get_modified_data_ids(&self) -> impl Iterator<Item = &Identifier> {
self.transitions.iter().map(|t| &t.base().id)
}
}

impl StateTransitionIdentitySigned for DocumentsBatchTransition {
Expand Down Expand Up @@ -368,6 +363,10 @@ impl StateTransitionConvert for DocumentsBatchTransition {
}

impl StateTransitionLike for DocumentsBatchTransition {
fn get_modified_data_ids(&self) -> Vec<Identifier> {
self.transitions.iter().map(|t| t.base().id).collect()
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::{
collections::{hash_map::Entry, HashMap},
convert::{TryFrom, TryInto},
sync::Arc,
};

use crate::consensus::basic::document::{
Expand Down Expand Up @@ -60,10 +61,45 @@ pub trait Validator {
fn validate(&self, data: JsonValue) -> Result<ValidationResult<()>, ProtocolError>;
}

pub struct DocumentBatchTransitionBasicValidator<SR> {
state_repository: Arc<SR>,
protocol_version_validator: Arc<ProtocolVersionValidator>,
}

impl<SR> DocumentBatchTransitionBasicValidator<SR>
where
SR: StateRepositoryLike,
{
pub fn new(
state_repository: Arc<SR>,
protocol_version_validator: Arc<ProtocolVersionValidator>,
) -> Self {
Self {
state_repository,
protocol_version_validator,
}
}

pub async fn validate(
&self,
raw_state_transition: &JsonValue,
execution_context: &StateTransitionExecutionContext,
) -> Result<ValidationResult<()>, ProtocolError> {
// TODO: move validation code into function body to avoid cloning of state_repository
validate_documents_batch_transition_basic(
&self.protocol_version_validator,
raw_state_transition,
self.state_repository.clone(),
execution_context,
)
.await
}
}

pub async fn validate_documents_batch_transition_basic(
protocol_version_validator: &ProtocolVersionValidator,
raw_state_transition: &JsonValue,
state_repository: &impl StateRepositoryLike,
state_repository: Arc<impl StateRepositoryLike>,
execution_context: &StateTransitionExecutionContext,
) -> Result<ValidationResult<()>, ProtocolError> {
let mut result = ValidationResult::default();
Expand Down
6 changes: 5 additions & 1 deletion packages/rs-dpp/src/errors/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ use crate::data_contract::state_transition::errors::PublicKeyIsDisabledError;
use crate::document::errors::*;
use crate::state_transition::errors::{
InvalidIdentityPublicKeyTypeError, InvalidSignaturePublicKeyError, PublicKeyMismatchError,
PublicKeySecurityLevelNotMetError, StateTransitionIsNotSignedError, WrongPublicKeyPurposeError,
PublicKeySecurityLevelNotMetError, StateTransitionError, StateTransitionIsNotSignedError,
WrongPublicKeyPurposeError,
};
use crate::{CompatibleProtocolVersionIsNotDefinedError, NonConsensusError, SerdeParsingError};
use platform_value::Error as ValueError;
Expand Down Expand Up @@ -48,6 +49,9 @@ pub enum ProtocolError {
#[error(transparent)]
DataContractError(#[from] DataContractError),

#[error(transparent)]
StateTransitionError(#[from] StateTransitionError),

#[error(transparent)]
StructureError(#[from] StructureError),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,11 +237,6 @@ impl IdentityCreateTransition {
Ok(json_map)
}

/// Returns ids of created identities
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![self.get_identity_id()]
}

pub fn set_protocol_version(&mut self, protocol_version: u32) {
self.protocol_version = protocol_version;
}
Expand Down Expand Up @@ -321,6 +316,11 @@ impl StateTransitionConvert for IdentityCreateTransition {
}

impl StateTransitionLike for IdentityCreateTransition {
/// Returns ids of created identities
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![*self.get_identity_id()]
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ pub struct IdentityCreateTransitionBasicValidator<T, S, SR: StateRepositoryLike,
public_keys_validator: Arc<T>,
public_keys_in_identity_transition_validator: Arc<S>,
asset_lock_proof_validator: Arc<AssetLockProofValidator<SR>>,
public_keys_signatures_validator: SV,
public_keys_signatures_validator: Arc<SV>,
bls_adapter: BLS,
}

Expand All @@ -47,7 +47,7 @@ impl<
public_keys_in_identity_transition_validator: Arc<S>,
asset_lock_proof_validator: Arc<AssetLockProofValidator<SR>>,
bls_adapter: BLS,
public_keys_signatures_validator: SV,
public_keys_signatures_validator: Arc<SV>,
) -> Result<Self, DashPlatformProtocolInitError> {
let json_schema_validator =
JsonSchemaValidator::new(INDENTITY_CREATE_TRANSITION_SCHEMA.clone())?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,6 @@ impl IdentityCreditWithdrawalTransition {
Self::from_value(raw_object)
}

/// Returns ID of the created contract
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![&self.identity_id]
}

pub fn set_revision(&mut self, revision: Revision) {
self.revision = revision;
}
Expand All @@ -141,6 +136,10 @@ impl StateTransitionIdentitySigned for IdentityCreditWithdrawalTransition {
}

impl StateTransitionLike for IdentityCreditWithdrawalTransition {
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![self.identity_id]
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,6 @@ impl IdentityTopUpTransition {
pub fn set_protocol_version(&mut self, protocol_version: u32) {
self.protocol_version = protocol_version;
}

/// Returns ids of created identities
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![self.get_identity_id()]
}
}

impl StateTransitionConvert for IdentityTopUpTransition {
Expand Down Expand Up @@ -268,6 +263,11 @@ impl StateTransitionLike for IdentityTopUpTransition {
self.signature = signature
}

/// Returns ids of created identities
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![*self.get_identity_id()]
}

fn get_execution_context(&self) -> &StateTransitionExecutionContext {
&self.execution_context
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,11 +178,6 @@ impl IdentityUpdateTransition {
self.public_keys_disabled_at
}

/// Returns ids of created identities
pub fn get_modified_data_ids(&self) -> Vec<&Identifier> {
vec![self.get_identity_id()]
}

pub fn set_protocol_version(&mut self, protocol_version: u32) {
self.protocol_version = protocol_version;
}
Expand Down Expand Up @@ -295,6 +290,11 @@ impl StateTransitionConvert for IdentityUpdateTransition {
}

impl StateTransitionLike for IdentityUpdateTransition {
/// Returns ids of created identities
fn get_modified_data_ids(&self) -> Vec<Identifier> {
vec![*self.get_identity_id()]
}

fn get_protocol_version(&self) -> u32 {
self.protocol_version
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ pub struct ValidateIdentityUpdateTransitionBasic<KV, SV> {
protocol_version_validator: ProtocolVersionValidator,
json_schema_validator: JsonSchemaValidator,
public_keys_validator: Arc<KV>,

public_keys_signatures_validator: SV,
public_keys_signatures_validator: Arc<SV>,
}

impl<KV, SV> ValidateIdentityUpdateTransitionBasic<KV, SV>
Expand All @@ -39,7 +38,7 @@ where
pub fn new(
protocol_version_validator: ProtocolVersionValidator,
public_keys_validator: Arc<KV>,
public_keys_signatures_validator: SV,
public_keys_signatures_validator: Arc<SV>,
) -> Result<Self, ProtocolError> {
let json_schema_validator = JsonSchemaValidator::new(IDENTITY_UPDATE_SCHEMA.clone())
.map_err(|e| {
Expand Down
6 changes: 4 additions & 2 deletions packages/rs-dpp/src/state_repository.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,12 @@ pub struct FetchTransactionResponse {
#[async_trait(?Send)]
pub trait StateRepositoryLike: Sync {
type ConversionError: Into<ProtocolError>;
type FetchDataContract: TryInto<DataContract, Error = Self::ConversionError>;
type FetchDataContract: TryInto<DataContract, Error = Self::ConversionError> + Send;
type FetchDocument: TryInto<Document, Error = Self::ConversionError>;
type FetchIdentity: TryInto<Identity, Error = Self::ConversionError>;
type FetchTransaction: TryInto<FetchTransactionResponse, Error = Self::ConversionError>;
type FetchTransaction: TryInto<FetchTransactionResponse, Error = Self::ConversionError>
+ Send
+ Sync;

/// Fetch the Data Contract by ID
/// By default, the method should return data as bytes (`Vec<u8>`), but the deserialization to [`DataContract`] should be also possible
Expand Down
Loading