Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 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
64e4c0c
rebase to feat/st-factory
markin-io Mar 3, 2023
1540330
fix: inconsistency after rebase
markin-io Mar 3, 2023
18b19ba
fix(rs-dpp): set entropy for data contract in data contract factory c…
markin-io Mar 3, 2023
0f7f31f
fix(rs-dpp): set entropy for data contract in data contract factory c…
markin-io Mar 3, 2023
e09b1b2
feat(wasm-dpp): StateTransitionFacade validateBasic
markin-io Mar 3, 2023
022933c
feat(wasm-dpp): StateTransitionFacade validateSignatures
markin-io Mar 6, 2023
4bfc1f7
feat(wasm-dpp): StateTransitionFacade validateFee
markin-io Mar 6, 2023
63307d2
feat(wasm-dpp): StateTransitionFacade validateState
markin-io Mar 6, 2023
457153e
fix(rs-dpp): inconsistencies after rebase
markin-io Mar 8, 2023
8d3689d
feat(wasm-dpp): integrated factory into StateTransitionFacade
markin-io Mar 8, 2023
799ccb4
fix(dpp): missing error mapping for failed signature verification
markin-io Mar 9, 2023
1efa4d5
fix(dpp): missing signature public key id in signature property paths
markin-io Mar 9, 2023
d9e3296
feat(wasm-dpp): state_transition_facade validate
markin-io Mar 9, 2023
5a3813d
test(rs-dpp): fix failing tests
markin-io Mar 9, 2023
a000041
test(wasm-dpp): fix failing tests
markin-io Mar 9, 2023
e20a3d8
chore: clippy and eslint
markin-io Mar 9, 2023
8ede019
test: fix identifier field
markin-io Mar 9, 2023
6fe20a5
Merge v0.24-dev
markin-io Mar 15, 2023
4b8f8c2
fix(wasm-dpp): inconsistencies after merge
markin-io Mar 15, 2023
d46d393
refactor(wasm-dpp): rename DocumentsBatchTransitionWASM to DocumentsB…
markin-io Mar 15, 2023
8c268a2
refactor(wasm-dpp): or_else and code blocks
markin-io Mar 15, 2023
a4b20ca
cleanup
markin-io Mar 15, 2023
bc6b12e
Merge branch 'v0.24-dev' into feat/st-facade
markin-io Mar 15, 2023
82430cc
test(wasm-dpp): fix identifier path
markin-io Mar 15, 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
4 changes: 4 additions & 0 deletions packages/rs-dpp/src/data_contract/data_contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,10 @@ impl DataContract {
self.entropy
}

pub fn set_entropy(&mut self, entropy: [u8; 32]) {
self.entropy = entropy;
}

pub fn owner_id(&self) -> &Identifier {
&self.owner_id
}
Expand Down
4 changes: 3 additions & 1 deletion packages/rs-dpp/src/data_contract/data_contract_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ impl DataContractFactory {

let cbor = value_to_cbor(JsonValue::Object(root_map), Some(1))?;

DataContract::from_cbor(cbor)
let mut data_contract = DataContract::from_cbor(cbor)?;
data_contract.set_entropy(entropy);
Ok(data_contract)
}

/// Create Data Contract from plain object
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,10 @@ impl StateTransitionConvert for DocumentsBatchTransition {
}

fn signature_property_paths() -> Vec<&'static str> {
vec![property_names::SIGNATURE]
vec![
property_names::SIGNATURE,
property_names::SIGNATURE_PUBLIC_KEY_ID,
Comment thread
markin-io marked this conversation as resolved.
]
}

fn to_json(&self, skip_signature: bool) -> Result<JsonValue, ProtocolError> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use std::convert::TryInto;

use async_trait::async_trait;
use futures::future::join_all;
use itertools::Itertools;

use crate::data_contract::errors::DataContractNotPresentError;
use crate::validation::{AsyncDataValidator, SimpleValidationResult};
use crate::{
block_time_window::validate_time_in_block_time_window::validate_time_in_block_time_window,
consensus::ConsensusError,
Expand All @@ -27,6 +29,40 @@ use super::{
validate_documents_uniqueness_by_indices::validate_documents_uniqueness_by_indices,
};

pub struct DocumentsBatchTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
state_repository: SR,
}

#[async_trait(?Send)]
impl<SR> AsyncDataValidator for DocumentsBatchTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
type Item = DocumentsBatchTransition;

async fn validate(
&self,
data: &DocumentsBatchTransition,
) -> Result<SimpleValidationResult, ProtocolError> {
validate_document_batch_transition_state(&self.state_repository, data).await
}
}

impl<SR> DocumentsBatchTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
pub fn new(state_repository: SR) -> DocumentsBatchTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
DocumentsBatchTransitionStateValidator { state_repository }
}
}

pub async fn validate_document_batch_transition_state(
state_repository: &impl StateRepositoryLike,
state_transition: &DocumentsBatchTransition,
Expand Down
11 changes: 10 additions & 1 deletion packages/rs-dpp/src/errors/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ use crate::state_transition::errors::{
PublicKeySecurityLevelNotMetError, StateTransitionError, StateTransitionIsNotSignedError,
WrongPublicKeyPurposeError,
};
use crate::{CompatibleProtocolVersionIsNotDefinedError, NonConsensusError, SerdeParsingError};
use crate::{
CompatibleProtocolVersionIsNotDefinedError, DashPlatformProtocolInitError, NonConsensusError,
SerdeParsingError,
};
use platform_value::Error as ValueError;

#[derive(Error, Debug)]
Expand Down Expand Up @@ -170,3 +173,9 @@ impl From<SerdeParsingError> for ProtocolError {
ProtocolError::ParsingError(e.to_string())
}
}

impl From<DashPlatformProtocolInitError> for ProtocolError {
fn from(e: DashPlatformProtocolInitError) -> Self {
ProtocolError::Generic(e.to_string())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,45 @@ use crate::consensus::state::identity::IdentityAlreadyExistsError;
use crate::identity::state_transition::identity_create_transition::IdentityCreateTransition;
use crate::state_repository::StateRepositoryLike;
use crate::state_transition::StateTransitionLike;
use crate::validation::ValidationResult;
use crate::NonConsensusError;
use crate::validation::{AsyncDataValidator, SimpleValidationResult, ValidationResult};
use crate::{NonConsensusError, ProtocolError};
use async_trait::async_trait;

pub struct IdentityCreateTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
state_repository: SR,
}

#[async_trait(?Send)]
impl<SR> AsyncDataValidator for IdentityCreateTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
type Item = IdentityCreateTransition;

async fn validate(
&self,
data: &IdentityCreateTransition,
) -> Result<SimpleValidationResult, ProtocolError> {
validate_identity_create_transition_state(&self.state_repository, data)
.await
.map_err(|err| err.into())
}
}

impl<SR> IdentityCreateTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
pub fn new(state_repository: SR) -> IdentityCreateTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
IdentityCreateTransitionStateValidator { state_repository }
}
}

/// Validate that identity exists
///
Expand All @@ -14,8 +51,9 @@ use crate::NonConsensusError;
/// 2. Verify ownership proof signature, as it requires special transaction to be implemented
pub async fn validate_identity_create_transition_state(
state_repository: &impl StateRepositoryLike,
state_transition: IdentityCreateTransition,
state_transition: &IdentityCreateTransition,
) -> Result<ValidationResult<()>, NonConsensusError> {
// TODO: refactor to return ProtocolError?
let mut result = ValidationResult::default();

let identity_id = state_transition.get_identity_id();
Expand Down Expand Up @@ -56,7 +94,8 @@ mod test {
.expect_fetch_identity_balance()
.return_once(|_, _| Ok(Some(1)));

let result = validate_identity_create_transition_state(&state_repository, transition).await;
let result =
validate_identity_create_transition_state(&state_repository, &transition).await;
assert!(result.is_ok());
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,45 @@
use crate::identity::state_transition::identity_topup_transition::IdentityTopUpTransition;
use crate::state_repository::StateRepositoryLike;
use crate::validation::ValidationResult;
use crate::NonConsensusError;
use crate::validation::{AsyncDataValidator, SimpleValidationResult, ValidationResult};
use crate::{NonConsensusError, ProtocolError};
use async_trait::async_trait;

pub struct IdentityTopUpTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
state_repository: SR,
}

#[async_trait(?Send)]
impl<SR> AsyncDataValidator for IdentityTopUpTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
type Item = IdentityTopUpTransition;

async fn validate(
&self,
data: &IdentityTopUpTransition,
) -> Result<SimpleValidationResult, ProtocolError> {
validate_identity_topup_transition_state(data, &self.state_repository)
.await
.map(|result| result.into())
.map_err(|err| err.into())
}
}

impl<SR> IdentityTopUpTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
pub fn new(state_repository: SR) -> IdentityTopUpTransitionStateValidator<SR>
where
SR: StateRepositoryLike,
{
IdentityTopUpTransitionStateValidator { state_repository }
}
}

/// Validate that identity exists
///
Expand All @@ -11,7 +49,7 @@ use crate::NonConsensusError;
/// 1. We need to check that outpoint exists (not now)
/// 2. Verify ownership proof signature, as it requires special transaction to be implemented
pub async fn validate_identity_topup_transition_state(
_state_transition: IdentityTopUpTransition,
_state_transition: &IdentityTopUpTransition,
_state_repository: &impl StateRepositoryLike,
) -> Result<ValidationResult<()>, NonConsensusError> {
Ok(ValidationResult::default())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,10 @@ impl StateTransitionConvert for IdentityUpdateTransition {
}

fn signature_property_paths() -> Vec<&'static str> {
vec![property_names::SIGNATURE]
vec![
property_names::SIGNATURE,
property_names::SIGNATURE_PUBLIC_KEY_ID,
]
}

fn to_object(&self, skip_signature: bool) -> Result<JsonValue, ProtocolError> {
Expand Down
30 changes: 20 additions & 10 deletions packages/rs-dpp/src/state_transition/abstract_state_transition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ use dashcore::signer;
use serde::Serialize;
use serde_json::Value as JsonValue;

use crate::consensus::ConsensusError;
use crate::errors::consensus::signature::SignatureError;
use crate::state_transition::errors::{
InvalidIdentityPublicKeyTypeError, StateTransitionIsNotSignedError,
};
Expand Down Expand Up @@ -118,11 +120,13 @@ pub trait StateTransitionLike:
));
}
let data_hash = self.hash(true)?;
Ok(signer::verify_hash_signature(
&data_hash,
self.get_signature(),
public_key_hash,
)?)
signer::verify_hash_signature(&data_hash, self.get_signature(), public_key_hash).or_else(
|_| {
Err(ProtocolError::from(ConsensusError::SignatureError(
SignatureError::InvalidStateTransitionSignatureError,
)))
},
)
}

/// Verifies an ECDSA signature with the public key
Expand All @@ -133,11 +137,12 @@ pub trait StateTransitionLike:
));
}
let data = self.to_buffer(true)?;
Ok(signer::verify_data_signature(
&data,
self.get_signature(),
public_key,
)?)

signer::verify_data_signature(&data, self.get_signature(), public_key).or_else(|_| {
Err(ProtocolError::from(ConsensusError::SignatureError(
SignatureError::InvalidStateTransitionSignatureError,
)))
})
}

/// Verifies a BLS signature with the public key
Expand All @@ -156,6 +161,11 @@ pub trait StateTransitionLike:

bls.verify_signature(self.get_signature(), &data, public_key)
.map(|_| ())
.or_else(|_| {
Err(ProtocolError::from(ConsensusError::SignatureError(
SignatureError::InvalidStateTransitionSignatureError,
)))
})
}

/// returns true if state transition is a document state transition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@ where
KeyType::BIP13_SCRIPT_HASH => Err(ProtocolError::InvalidIdentityPublicKeyTypeError(
InvalidIdentityPublicKeyTypeError::new(identity_public_key.key_type),
)),
}
}?;

self.set_signature_public_key_id(identity_public_key.id);
Comment thread
markin-io marked this conversation as resolved.

Ok(())
}

fn verify_signature(
Expand Down
2 changes: 2 additions & 0 deletions packages/rs-dpp/src/state_transition/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ use crate::identity::state_transition::identity_update_transition::identity_upda

mod abstract_state_transition;
mod abstract_state_transition_identity_signed;
mod state_transition_facade;
mod state_transition_factory;
pub use state_transition_facade::*;
pub use state_transition_factory::*;

use self::state_transition_execution_context::StateTransitionExecutionContext;
Expand Down
Loading