From f16715642917fc6204a5adf23c305f2242692af5 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Tue, 7 Mar 2023 09:56:27 +0100 Subject: [PATCH 01/10] introduce ProtocolVersion type to prelude --- packages/rs-dpp/src/dash_platform_protocol.rs | 5 +++-- .../rs-dpp/src/data_contract/data_contract.rs | 3 ++- .../src/data_contract/data_contract_facade.rs | 4 ++-- .../src/data_contract/data_contract_factory.rs | 10 +++++++--- .../data_contract/document_type/document_type.rs | 3 ++- packages/rs-dpp/src/data_contract/extra/common.rs | 3 ++- .../data_contract_create_transition/mod.rs | 8 ++++---- .../data_contract_update_transition/mod.rs | 6 +++--- packages/rs-dpp/src/document/document_factory.rs | 6 +++--- packages/rs-dpp/src/document/mod.rs | 3 ++- .../documents_batch_transition/mod.rs | 6 +++--- ...tible_protocol_version_is_not_defined_error.rs | 6 ++++-- .../basic/incompatible_protocol_version_error.rs | 15 ++++++++++----- .../basic/unsupported_protocol_version_error.rs | 12 +++++++----- packages/rs-dpp/src/identity/factory.rs | 5 +++-- packages/rs-dpp/src/identity/identity.rs | 6 +++--- packages/rs-dpp/src/identity/identity_facade.rs | 3 ++- .../identity_create_transition.rs | 8 ++++---- .../identity_credit_withdrawal_transition/mod.rs | 5 +++-- .../identity_topup_transition.rs | 8 ++++---- .../identity_update_transition.rs | 7 ++++--- packages/rs-dpp/src/lib.rs | 7 +++++++ packages/rs-dpp/src/metadata.rs | 5 ++++- packages/rs-dpp/src/mocks.rs | 4 +++- .../state_transition/abstract_state_transition.rs | 4 ++-- .../abstract_state_transition_identity_signed.rs | 4 ++-- packages/rs-dpp/src/state_transition/example.rs | 6 ++++-- packages/rs-dpp/src/state_transition/mod.rs | 3 ++- ...alidate_state_transition_identity_signature.rs | 9 +++++---- packages/rs-dpp/src/util/deserializer.rs | 4 +--- packages/rs-dpp/src/util/serializer.rs | 4 ++-- packages/rs-dpp/src/version/mod.rs | 4 +++- .../src/version/protocol_version_validator.rs | 11 ++++++----- packages/rs-drive-abci/src/abci/messages.rs | 2 +- packages/rs-drive-abci/src/execution/engine.rs | 2 +- .../src/execution/protocol_upgrade.rs | 2 +- packages/rs-drive-abci/src/state/mod.rs | 2 +- .../rs-drive-abci/tests/strategy_tests/main.rs | 2 +- packages/rs-drive/src/drive/cache.rs | 2 +- .../rs-drive/src/drive/protocol_upgrade/mod.rs | 2 +- .../rs-drive/src/drive/system/protocol_version.rs | 2 +- 41 files changed, 126 insertions(+), 87 deletions(-) diff --git a/packages/rs-dpp/src/dash_platform_protocol.rs b/packages/rs-dpp/src/dash_platform_protocol.rs index e701005d0c6..198d9a9032e 100644 --- a/packages/rs-dpp/src/dash_platform_protocol.rs +++ b/packages/rs-dpp/src/dash_platform_protocol.rs @@ -1,3 +1,4 @@ +use crate::prelude::ProtocolVersion; use crate::BlsModule; use std::sync::Arc; @@ -8,7 +9,7 @@ use crate::version::{ProtocolVersionValidator, COMPATIBILITY_MAP, LATEST_VERSION pub struct DashPlatformProtocol { /// Version of protocol - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, /// Public facing facades to interact with the library pub identities: IdentityFacade, /// State Repository provides the access to the stateful validation @@ -51,5 +52,5 @@ impl DashPlatformProtocol { #[derive(Default)] pub struct DPPOptions { - pub current_protocol_version: Option, + pub current_protocol_version: Option, } diff --git a/packages/rs-dpp/src/data_contract/data_contract.rs b/packages/rs-dpp/src/data_contract/data_contract.rs index 151195569d9..545d437e8c7 100644 --- a/packages/rs-dpp/src/data_contract/data_contract.rs +++ b/packages/rs-dpp/src/data_contract/data_contract.rs @@ -18,6 +18,7 @@ use crate::data_contract::contract_config::{ }; use crate::data_contract::get_binary_properties_from_schema::get_binary_properties; +use crate::prelude::ProtocolVersion; use crate::util::cbor_value::{CborBTreeMapHelper, CborCanonicalMap}; use crate::util::deserializer; use crate::util::deserializer::SplitProtocolVersionOutcome; @@ -79,7 +80,7 @@ impl Convertible for DataContract { #[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)] #[serde(rename_all = "camelCase")] pub struct DataContract { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "$id")] pub id: Identifier, #[serde(rename = "$schema")] diff --git a/packages/rs-dpp/src/data_contract/data_contract_facade.rs b/packages/rs-dpp/src/data_contract/data_contract_facade.rs index 6abea896230..392958bee70 100644 --- a/packages/rs-dpp/src/data_contract/data_contract_facade.rs +++ b/packages/rs-dpp/src/data_contract/data_contract_facade.rs @@ -4,7 +4,7 @@ use crate::data_contract::state_transition::{ use crate::data_contract::validation::data_contract_validator::DataContractValidator; use crate::data_contract::{DataContract, DataContractFactory}; use crate::document::document_transition::document_base_transition::JsonValue; -use crate::prelude::{Identifier, ValidationResult}; +use crate::prelude::{Identifier, ProtocolVersion, ValidationResult}; use crate::version::ProtocolVersionValidator; use crate::ProtocolError; use std::sync::Arc; @@ -16,7 +16,7 @@ pub struct DataContractFacade { impl DataContractFacade { pub fn new( - protocol_version: u32, + protocol_version: ProtocolVersion, protocol_version_validator: Arc, ) -> Self { let validator = Arc::new(DataContractValidator::new(protocol_version_validator)); diff --git a/packages/rs-dpp/src/data_contract/data_contract_factory.rs b/packages/rs-dpp/src/data_contract/data_contract_factory.rs index e15c8168696..f2535a32423 100644 --- a/packages/rs-dpp/src/data_contract/data_contract_factory.rs +++ b/packages/rs-dpp/src/data_contract/data_contract_factory.rs @@ -5,6 +5,7 @@ use std::sync::Arc; use data_contract::state_transition::property_names as st_prop; use crate::data_contract::property_names; +use crate::prelude::ProtocolVersion; use crate::util::serializer::value_to_cbor; use crate::{ data_contract::{self, generate_data_contract_id}, @@ -34,13 +35,16 @@ impl EntropyGenerator for DefaultEntropyGenerator { } pub struct DataContractFactory { - protocol_version: u32, + protocol_version: ProtocolVersion, validate_data_contract: Arc, entropy_generator: Box, } impl DataContractFactory { - pub fn new(protocol_version: u32, validate_data_contract: Arc) -> Self { + pub fn new( + protocol_version: ProtocolVersion, + validate_data_contract: Arc, + ) -> Self { Self { protocol_version, validate_data_contract, @@ -49,7 +53,7 @@ impl DataContractFactory { } pub fn new_with_entropy_generator( - protocol_version: u32, + protocol_version: ProtocolVersion, validate_data_contract: Arc, entropy_generator: Box, ) -> Self { diff --git a/packages/rs-dpp/src/data_contract/document_type/document_type.rs b/packages/rs-dpp/src/data_contract/document_type/document_type.rs index 92a7c94c99e..83af20ea225 100644 --- a/packages/rs-dpp/src/data_contract/document_type/document_type.rs +++ b/packages/rs-dpp/src/data_contract/document_type/document_type.rs @@ -8,13 +8,14 @@ use super::{ use crate::data_contract::document_type::{property_names, ArrayFieldType}; use crate::data_contract::errors::{DataContractError, StructureError}; +use crate::prelude::ProtocolVersion; use crate::util::cbor_value::CborBTreeMapHelper; use crate::ProtocolError; use platform_value::btreemap_extensions::BTreeValueMapHelper; use platform_value::Value; use serde::{Deserialize, Serialize}; -pub const PROTOCOL_VERSION: u32 = 1; +pub const PROTOCOL_VERSION: ProtocolVersion = 1; pub const CONTRACT_DOCUMENTS_PATH_HEIGHT: u16 = 4; pub const BASE_CONTRACT_ROOT_PATH_SIZE: usize = 33; // 1 + 32 pub const BASE_CONTRACT_KEEPING_HISTORY_STORAGE_PATH_SIZE: usize = 34; // 1 + 32 + 1 diff --git a/packages/rs-dpp/src/data_contract/extra/common.rs b/packages/rs-dpp/src/data_contract/extra/common.rs index cfda86df36b..76ba9a784a4 100644 --- a/packages/rs-dpp/src/data_contract/extra/common.rs +++ b/packages/rs-dpp/src/data_contract/extra/common.rs @@ -1,4 +1,5 @@ use crate::data_contract::errors::StructureError; +use crate::prelude::ProtocolVersion; use crate::util::cbor_value::cbor_value_into_json_value; use crate::util::serializer::value_to_cbor; use crate::ProtocolError; @@ -273,7 +274,7 @@ pub fn json_document_to_value(path: impl AsRef) -> Result, - protocol_version: Option, + protocol_version: Option, ) -> Result, ProtocolError> { let json = json_document_to_value(path)?; value_to_cbor(json, protocol_version) diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs index bd3d647b4df..fff40aa7972 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs @@ -7,7 +7,7 @@ use serde_json::Value as JsonValue; use crate::{ data_contract::DataContract, identity::KeyID, - prelude::Identifier, + prelude::{Identifier, ProtocolVersion}, state_transition::{ state_transition_execution_context::StateTransitionExecutionContext, StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike, @@ -25,7 +25,7 @@ pub mod validation; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DataContractCreateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "type")] pub transition_type: StateTransitionType, // we want to skip serialization of transitions, as we does it manually in `to_object()` and `to_json()` @@ -80,7 +80,7 @@ impl DataContractCreateTransition { &self.data_contract } - pub fn get_protocol_version(&self) -> u32 { + pub fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } @@ -114,7 +114,7 @@ impl StateTransitionIdentitySigned for DataContractCreateTransition { } impl StateTransitionLike for DataContractCreateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } /// returns the type of State Transition diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 6392a036a0b..856329d6ec0 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -4,7 +4,7 @@ use serde_json::Value as JsonValue; use crate::{ data_contract::DataContract, identity::KeyID, - prelude::Identifier, + prelude::{Identifier, ProtocolVersion}, state_transition::{ state_transition_execution_context::StateTransitionExecutionContext, StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike, @@ -22,7 +22,7 @@ pub mod validation; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DataContractUpdateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "type")] pub transition_type: StateTransitionType, // we want to skip serialization of transitions, as we does it manually in `to_object()` and `to_json()` @@ -96,7 +96,7 @@ impl StateTransitionIdentitySigned for DataContractUpdateTransition { } impl StateTransitionLike for DataContractUpdateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } /// returns the type of State Transition diff --git a/packages/rs-dpp/src/document/document_factory.rs b/packages/rs-dpp/src/document/document_factory.rs index 3ab5b588701..2d87753a329 100644 --- a/packages/rs-dpp/src/document/document_factory.rs +++ b/packages/rs-dpp/src/document/document_factory.rs @@ -7,7 +7,7 @@ use serde_json::{json, Value as JsonValue}; use crate::{ data_contract::{errors::DataContractError, DataContract}, decode_protocol_entity_factory::DecodeProtocolEntity, - prelude::Identifier, + prelude::{Identifier, ProtocolVersion}, state_repository::StateRepositoryLike, util::entropy_generator, util::{json_schema::JsonSchemaExt, json_value::JsonValueExt}, @@ -57,7 +57,7 @@ const DOCUMENT_REPLACE_KEYS_TO_STAY: [&str; 5] = [ /// Factory for creating documents pub struct DocumentFactory { - protocol_version: u32, + protocol_version: ProtocolVersion, document_validator: DocumentValidator, data_contract_fetcher_and_validator: DataContractFetcherAndValidator, } @@ -76,7 +76,7 @@ where ST: StateRepositoryLike, { pub fn new( - protocol_version: u32, + protocol_version: ProtocolVersion, validate_document: DocumentValidator, data_contract_fetcher_and_validator: DataContractFetcherAndValidator, ) -> Self { diff --git a/packages/rs-dpp/src/document/mod.rs b/packages/rs-dpp/src/document/mod.rs index 0fb16e6aef9..4a5470ebdd8 100644 --- a/packages/rs-dpp/src/document/mod.rs +++ b/packages/rs-dpp/src/document/mod.rs @@ -14,6 +14,7 @@ use crate::data_contract::DataContract; use crate::errors::ProtocolError; use crate::identifier::Identifier; use crate::metadata::Metadata; +use crate::prelude::ProtocolVersion; use crate::util::cbor_value::CborCanonicalMap; use crate::util::cbor_value::FieldType; use crate::util::deserializer::SplitProtocolVersionOutcome; @@ -52,7 +53,7 @@ pub const IDENTIFIER_FIELDS: [&str; 3] = [ #[derive(Serialize, Deserialize, Debug, Clone, Default)] pub struct Document { #[serde(rename = "$protocolVersion")] - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "$id")] pub id: Identifier, #[serde(rename = "$type")] diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs index 0656b64672f..b68cd6a786b 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs @@ -9,7 +9,7 @@ use serde_json::Value as JsonValue; use crate::data_contract::DataContract; use crate::document::document_transition::DocumentTransitionObjectLike; -use crate::prelude::{DocumentTransition, Identifier}; +use crate::prelude::{DocumentTransition, Identifier, ProtocolVersion}; use crate::state_transition::state_transition_execution_context::StateTransitionExecutionContext; use crate::util::cbor_value::{CborCanonicalMap, FieldType, ReplacePaths, ValuesCollection}; use crate::util::json_value::{JsonValueExt, ReplaceWith}; @@ -48,7 +48,7 @@ const EMPTY_VEC: Vec = vec![]; #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct DocumentsBatchTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "type")] pub transition_type: StateTransitionType, pub owner_id: Identifier, @@ -368,7 +368,7 @@ impl StateTransitionConvert for DocumentsBatchTransition { } impl StateTransitionLike for DocumentsBatchTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } diff --git a/packages/rs-dpp/src/errors/compatible_protocol_version_is_not_defined_error.rs b/packages/rs-dpp/src/errors/compatible_protocol_version_is_not_defined_error.rs index 8bd39c19c78..a1518decc7d 100644 --- a/packages/rs-dpp/src/errors/compatible_protocol_version_is_not_defined_error.rs +++ b/packages/rs-dpp/src/errors/compatible_protocol_version_is_not_defined_error.rs @@ -1,13 +1,15 @@ use thiserror::Error; +use crate::prelude::ProtocolVersion; + #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("Compatible version is not defined for protocol version {current_protocol_version}")] pub struct CompatibleProtocolVersionIsNotDefinedError { - current_protocol_version: u32, + current_protocol_version: ProtocolVersion, } impl CompatibleProtocolVersionIsNotDefinedError { - pub fn new(current_protocol_version: u32) -> Self { + pub fn new(current_protocol_version: ProtocolVersion) -> Self { Self { current_protocol_version, } diff --git a/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs index 80184b07adf..3afff0dff67 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs @@ -1,25 +1,30 @@ use thiserror::Error; +use crate::prelude::ProtocolVersion; + #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("Protocol version {parsed_protocol_version:?} is not supported. Minimal supported protocol version is {minimal_protocol_version:?}")] pub struct IncompatibleProtocolVersionError { - parsed_protocol_version: u32, - minimal_protocol_version: u32, + parsed_protocol_version: ProtocolVersion, + minimal_protocol_version: ProtocolVersion, } impl IncompatibleProtocolVersionError { - pub fn new(parsed_protocol_version: u32, minimal_protocol_version: u32) -> Self { + pub fn new( + parsed_protocol_version: ProtocolVersion, + minimal_protocol_version: ProtocolVersion, + ) -> Self { Self { parsed_protocol_version, minimal_protocol_version, } } - pub fn parsed_protocol_version(&self) -> u32 { + pub fn parsed_protocol_version(&self) -> ProtocolVersion { self.parsed_protocol_version } - pub fn minimal_protocol_version(&self) -> u32 { + pub fn minimal_protocol_version(&self) -> ProtocolVersion { self.minimal_protocol_version } } diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs index af7159e9898..31e33c326d8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs @@ -1,25 +1,27 @@ use thiserror::Error; +use crate::prelude::ProtocolVersion; + #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("Protocol version {parsed_protocol_version:?} is not supported. Latest supported version is {latest_version:?}")] pub struct UnsupportedProtocolVersionError { - parsed_protocol_version: u32, - latest_version: u32, + parsed_protocol_version: ProtocolVersion, + latest_version: ProtocolVersion, } impl UnsupportedProtocolVersionError { - pub fn new(parsed_protocol_version: u32, latest_version: u32) -> Self { + pub fn new(parsed_protocol_version: ProtocolVersion, latest_version: ProtocolVersion) -> Self { Self { parsed_protocol_version, latest_version, } } - pub fn parsed_protocol_version(&self) -> u32 { + pub fn parsed_protocol_version(&self) -> ProtocolVersion { self.parsed_protocol_version } - pub fn latest_version(&self) -> u32 { + pub fn latest_version(&self) -> ProtocolVersion { self.latest_version } } diff --git a/packages/rs-dpp/src/identity/factory.rs b/packages/rs-dpp/src/identity/factory.rs index f55ed5ba588..11d79be76bd 100644 --- a/packages/rs-dpp/src/identity/factory.rs +++ b/packages/rs-dpp/src/identity/factory.rs @@ -11,6 +11,7 @@ use crate::identity::state_transition::identity_update_transition::identity_upda use crate::identity::validation::{IdentityValidator, PublicKeysValidator}; use crate::identity::{Identity, IdentityPublicKey, KeyID, TimestampMillis}; +use crate::prelude::ProtocolVersion; use crate::{BlsModule, ProtocolError}; use anyhow::anyhow; use dashcore::{InstantLock, Transaction}; @@ -81,7 +82,7 @@ impl Identity { #[derive(Clone)] pub struct IdentityFactory { - protocol_version: u32, + protocol_version: ProtocolVersion, identity_validator: Arc>>, } @@ -90,7 +91,7 @@ where T: BlsModule, { pub fn new( - protocol_version: u32, + protocol_version: ProtocolVersion, identity_validator: Arc>>, ) -> Self { IdentityFactory { diff --git a/packages/rs-dpp/src/identity/identity.rs b/packages/rs-dpp/src/identity/identity.rs index 8bc3c0b9c87..80e8d30d94e 100644 --- a/packages/rs-dpp/src/identity/identity.rs +++ b/packages/rs-dpp/src/identity/identity.rs @@ -7,7 +7,7 @@ use serde_json::{Value as JsonValue, Value}; use crate::identity::identity_public_key; use crate::identity::state_transition::asset_lock_proof::AssetLockProof; -use crate::prelude::Revision; +use crate::prelude::{ProtocolVersion, Revision}; use crate::util::cbor_value::{CborBTreeMapHelper, CborCanonicalMap}; use crate::util::deserializer; use crate::util::deserializer::SplitProtocolVersionOutcome; @@ -33,7 +33,7 @@ pub const IDENTIFIER_FIELDS_RAW_OBJECT: [&str; 1] = [property_names::ID_RAW_OBJE #[derive(Default, Debug, Serialize, Deserialize, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Identity { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub id: Identifier, #[serde(with = "public_key_serialization")] pub public_keys: BTreeMap, @@ -88,7 +88,7 @@ mod public_key_serialization { impl Identity { /// Get Identity protocol version - pub fn get_protocol_version(&self) -> u32 { + pub fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } diff --git a/packages/rs-dpp/src/identity/identity_facade.rs b/packages/rs-dpp/src/identity/identity_facade.rs index 4dc9b92bf44..7d7ca33e5ba 100644 --- a/packages/rs-dpp/src/identity/identity_facade.rs +++ b/packages/rs-dpp/src/identity/identity_facade.rs @@ -14,6 +14,7 @@ use crate::identity::state_transition::identity_update_transition::identity_upda use crate::identity::validation::{IdentityValidator, PublicKeysValidator}; use crate::identity::{Identity, IdentityPublicKey, KeyID, TimestampMillis}; +use crate::prelude::ProtocolVersion; use crate::validation::ValidationResult; use crate::version::ProtocolVersionValidator; use crate::{BlsModule, DashPlatformProtocolInitError, NonConsensusError, ProtocolError}; @@ -29,7 +30,7 @@ where T: BlsModule, { pub fn new( - protocol_version: u32, + protocol_version: ProtocolVersion, protocol_version_validator: Arc, public_keys_validator: Arc>, ) -> Result { diff --git a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs index 236e5d7a23a..792a3a66aae 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs @@ -7,7 +7,7 @@ use serde_json::Value as JsonValue; use crate::identity::state_transition::asset_lock_proof::AssetLockProof; use crate::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition; -use crate::prelude::Identifier; +use crate::prelude::{Identifier, ProtocolVersion}; use crate::state_transition::state_transition_execution_context::StateTransitionExecutionContext; use crate::state_transition::{ StateTransition, StateTransitionConvert, StateTransitionLike, StateTransitionType, @@ -38,7 +38,7 @@ pub struct IdentityCreateTransition { pub asset_lock_proof: AssetLockProof, pub identity_id: Identifier, // Generic identity ST fields - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub transition_type: StateTransitionType, pub signature: Vec, pub execution_context: StateTransitionExecutionContext, @@ -242,7 +242,7 @@ impl IdentityCreateTransition { vec![self.get_identity_id()] } - pub fn set_protocol_version(&mut self, protocol_version: u32) { + pub fn set_protocol_version(&mut self, protocol_version: ProtocolVersion) { self.protocol_version = protocol_version; } } @@ -321,7 +321,7 @@ impl StateTransitionConvert for IdentityCreateTransition { } impl StateTransitionLike for IdentityCreateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } /// returns the type of State Transition diff --git a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs index 04972f7f0b8..dea89d87968 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs @@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; use serde_repr::{Deserialize_repr, Serialize_repr}; +use crate::prelude::ProtocolVersion; use crate::version::LATEST_VERSION; use crate::{ identity::{core_script::CoreScript, KeyID}, @@ -44,7 +45,7 @@ impl std::default::Default for Pooling { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IdentityCreditWithdrawalTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "type")] pub transition_type: StateTransitionType, pub identity_id: Identifier, @@ -141,7 +142,7 @@ impl StateTransitionIdentitySigned for IdentityCreditWithdrawalTransition { } impl StateTransitionLike for IdentityCreditWithdrawalTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } diff --git a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs index 4e5be8f1d87..4553b5945b8 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs @@ -7,7 +7,7 @@ use serde_json::Value as JsonValue; use crate::identity::state_transition::asset_lock_proof::AssetLockProof; use crate::identity::state_transition::identity_create_transition::SerializationOptions; -use crate::prelude::Identifier; +use crate::prelude::{Identifier, ProtocolVersion}; use crate::state_transition::state_transition_execution_context::StateTransitionExecutionContext; use crate::state_transition::{ StateTransition, StateTransitionConvert, StateTransitionLike, StateTransitionType, @@ -31,7 +31,7 @@ pub struct IdentityTopUpTransition { pub asset_lock_proof: AssetLockProof, pub identity_id: Identifier, // Generic identity ST fields - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub transition_type: StateTransitionType, pub signature: Vec, pub execution_context: StateTransitionExecutionContext, @@ -194,7 +194,7 @@ impl IdentityTopUpTransition { Ok(json_map) } - pub fn set_protocol_version(&mut self, protocol_version: u32) { + pub fn set_protocol_version(&mut self, protocol_version: ProtocolVersion) { self.protocol_version = protocol_version; } @@ -252,7 +252,7 @@ impl StateTransitionConvert for IdentityTopUpTransition { } impl StateTransitionLike for IdentityTopUpTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } /// returns the type of State Transition diff --git a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs index c04b570807b..dbefac48eaf 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs @@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; use crate::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition; +use crate::prelude::ProtocolVersion; use crate::{ identity::{KeyID, SecurityLevel}, prelude::{Identifier, Revision, TimestampMillis}, @@ -31,7 +32,7 @@ pub mod property_names { #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(rename_all = "camelCase")] pub struct IdentityUpdateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, #[serde(rename = "type")] pub transition_type: StateTransitionType, @@ -183,7 +184,7 @@ impl IdentityUpdateTransition { vec![self.get_identity_id()] } - pub fn set_protocol_version(&mut self, protocol_version: u32) { + pub fn set_protocol_version(&mut self, protocol_version: ProtocolVersion) { self.protocol_version = protocol_version; } } @@ -295,7 +296,7 @@ impl StateTransitionConvert for IdentityUpdateTransition { } impl StateTransitionLike for IdentityUpdateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index f48f551c993..5ac80ee0c6b 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -57,8 +57,15 @@ pub mod prelude { pub use crate::validation::ValidationResult; pub use super::convertible::Convertible; + + pub type ProtocolVersion = u32; pub type TimestampMillis = u64; pub type Revision = u64; + pub type SignaturePublicKeyId = u32; + pub type ErrorCode = u32; + pub type Balance = u64; + pub type Fee = u64; + pub type OutputIndex = u64; } pub use jsonschema; diff --git a/packages/rs-dpp/src/metadata.rs b/packages/rs-dpp/src/metadata.rs index 2881ee490cf..9306d5d0564 100644 --- a/packages/rs-dpp/src/metadata.rs +++ b/packages/rs-dpp/src/metadata.rs @@ -1,6 +1,9 @@ use serde::{Deserialize, Serialize}; -use crate::{errors::ProtocolError, prelude::TimestampMillis, util::deserializer::ProtocolVersion}; +use crate::{ + errors::ProtocolError, + prelude::{ProtocolVersion, TimestampMillis}, +}; #[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, PartialOrd, Eq)] #[serde(rename_all = "camelCase")] diff --git a/packages/rs-dpp/src/mocks.rs b/packages/rs-dpp/src/mocks.rs index 26cd400fa73..d548b43f434 100644 --- a/packages/rs-dpp/src/mocks.rs +++ b/packages/rs-dpp/src/mocks.rs @@ -3,6 +3,8 @@ use anyhow::Result as AnyResult; use serde::{Deserialize, Serialize}; +use crate::prelude::ProtocolVersion; + #[derive(Debug, Clone)] pub struct DashPlatformProtocol { pub state_repository: SR, @@ -12,7 +14,7 @@ impl DashPlatformProtocol { DashPlatformProtocol { state_repository } } - pub fn get_protocol_version(&self) -> u32 { + pub fn get_protocol_version(&self) -> ProtocolVersion { 1 } diff --git a/packages/rs-dpp/src/state_transition/abstract_state_transition.rs b/packages/rs-dpp/src/state_transition/abstract_state_transition.rs index fe87d540745..03a42f67525 100644 --- a/packages/rs-dpp/src/state_transition/abstract_state_transition.rs +++ b/packages/rs-dpp/src/state_transition/abstract_state_transition.rs @@ -6,7 +6,7 @@ use serde_json::Value as JsonValue; use crate::{ identity::KeyType, - prelude::ProtocolError, + prelude::{ProtocolError, ProtocolVersion}, util::{ hash, json_value::{JsonValueExt, ReplaceWith}, @@ -44,7 +44,7 @@ pub trait StateTransitionLike: StateTransitionConvert + Clone + Debug + Into { /// returns the protocol version - fn get_protocol_version(&self) -> u32; + fn get_protocol_version(&self) -> ProtocolVersion; /// returns the type of State Transition fn get_type(&self) -> StateTransitionType; /// returns the signature as a byte-array diff --git a/packages/rs-dpp/src/state_transition/abstract_state_transition_identity_signed.rs b/packages/rs-dpp/src/state_transition/abstract_state_transition_identity_signed.rs index bb278eb96da..8982de5b056 100644 --- a/packages/rs-dpp/src/state_transition/abstract_state_transition_identity_signed.rs +++ b/packages/rs-dpp/src/state_transition/abstract_state_transition_identity_signed.rs @@ -197,7 +197,7 @@ mod test { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] struct ExampleStateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub signature: Vec, pub signature_public_key_id: KeyID, pub transition_type: StateTransitionType, @@ -226,7 +226,7 @@ mod test { } impl StateTransitionLike for ExampleStateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { 1 } fn get_type(&self) -> StateTransitionType { diff --git a/packages/rs-dpp/src/state_transition/example.rs b/packages/rs-dpp/src/state_transition/example.rs index 60f942f2c57..9767ed18521 100644 --- a/packages/rs-dpp/src/state_transition/example.rs +++ b/packages/rs-dpp/src/state_transition/example.rs @@ -1,5 +1,7 @@ use serde::{Deserialize, Serialize}; +use crate::prelude::ProtocolVersion; + use super::{ state_transition_execution_context::StateTransitionExecutionContext, StateTransition, StateTransitionConvert, StateTransitionLike, StateTransitionType, @@ -12,7 +14,7 @@ const PROPERTY_PROTOCOL_VERSION: &str = "protocolVersion"; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] struct ExampleStateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub signature: Vec, pub transition_type: StateTransitionType, #[serde(skip)] @@ -26,7 +28,7 @@ impl From for StateTransition { } impl StateTransitionLike for ExampleStateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { self.protocol_version } diff --git a/packages/rs-dpp/src/state_transition/mod.rs b/packages/rs-dpp/src/state_transition/mod.rs index 0954f625643..e35ff2f5f5f 100644 --- a/packages/rs-dpp/src/state_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/mod.rs @@ -15,6 +15,7 @@ use crate::identity::state_transition::identity_create_transition::IdentityCreat use crate::identity::state_transition::identity_credit_withdrawal_transition::IdentityCreditWithdrawalTransition; use crate::identity::state_transition::identity_topup_transition::IdentityTopUpTransition; use crate::identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition; +use crate::prelude::ProtocolVersion; mod abstract_state_transition; mod abstract_state_transition_identity_signed; @@ -127,7 +128,7 @@ impl StateTransitionConvert for StateTransition { } impl StateTransitionLike for StateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { call_method!(self, get_protocol_version) } /// returns the type of State Transition diff --git a/packages/rs-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs b/packages/rs-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs index 108281a4bc9..effdc59437e 100644 --- a/packages/rs-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs +++ b/packages/rs-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs @@ -6,6 +6,7 @@ use lazy_static::lazy_static; use crate::{ consensus::{signature::SignatureError, ConsensusError}, identity::KeyType, + prelude::Identity, state_repository::StateRepositoryLike, state_transition::{ fee::operations::{Operation, SignatureVerificationOperation}, @@ -39,7 +40,7 @@ pub async fn validate_state_transition_identity_signature( let tmp_execution_context = StateTransitionExecutionContext::default(); // Owner must exist - let maybe_identity = state_repository + let maybe_identity: Option = state_repository .fetch_identity(state_transition.get_owner_id(), &tmp_execution_context) .await? .map(TryInto::try_into) @@ -149,7 +150,7 @@ mod test { use crate::{ document::DocumentsBatchTransition, identity::{KeyID, Purpose, SecurityLevel}, - prelude::{Identifier, Identity, IdentityPublicKey}, + prelude::{Identifier, Identity, IdentityPublicKey, ProtocolVersion}, state_repository::MockStateRepositoryLike, state_transition::{ state_transition_execution_context::StateTransitionExecutionContext, StateTransition, @@ -165,7 +166,7 @@ mod test { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] struct ExampleStateTransition { - pub protocol_version: u32, + pub protocol_version: ProtocolVersion, pub signature: Vec, pub signature_public_key_id: KeyID, pub transition_type: StateTransitionType, @@ -196,7 +197,7 @@ mod test { } impl StateTransitionLike for ExampleStateTransition { - fn get_protocol_version(&self) -> u32 { + fn get_protocol_version(&self) -> ProtocolVersion { 1 } fn get_type(&self) -> StateTransitionType { diff --git a/packages/rs-dpp/src/util/deserializer.rs b/packages/rs-dpp/src/util/deserializer.rs index b2ad7886bdf..5790fed5bd0 100644 --- a/packages/rs-dpp/src/util/deserializer.rs +++ b/packages/rs-dpp/src/util/deserializer.rs @@ -4,6 +4,7 @@ use serde_json::{Map, Number, Value as JsonValue}; use crate::data_contract::errors::StructureError; use crate::data_contract::extra::common::check_protocol_version; +use crate::prelude::ProtocolVersion; use crate::{errors::consensus::ConsensusError, errors::ProtocolError}; pub fn parse_protocol_version( @@ -19,9 +20,6 @@ pub fn parse_protocol_version( Ok(()) } -/// A protocol version -pub type ProtocolVersion = u32; - pub fn get_protocol_version(version_bytes: &[u8]) -> Result { u32::decode_var(version_bytes) .ok_or_else(|| { diff --git a/packages/rs-dpp/src/util/serializer.rs b/packages/rs-dpp/src/util/serializer.rs index a933710207e..e64752a06b3 100644 --- a/packages/rs-dpp/src/util/serializer.rs +++ b/packages/rs-dpp/src/util/serializer.rs @@ -1,6 +1,6 @@ use integer_encoding::VarIntWriter; -use crate::errors::ProtocolError; +use crate::{errors::ProtocolError, prelude::ProtocolVersion}; // ciborium::value @@ -8,7 +8,7 @@ pub const MAX_ENCODED_KBYTE_LENGTH: usize = 16; pub fn value_to_cbor( value: serde_json::Value, - protocol_version: Option, + protocol_version: Option, ) -> Result, ProtocolError> { let mut buffer: Vec = Vec::new(); if let Some(protocol_version) = protocol_version { diff --git a/packages/rs-dpp/src/version/mod.rs b/packages/rs-dpp/src/version/mod.rs index 69125c3a043..dd1503e6634 100644 --- a/packages/rs-dpp/src/version/mod.rs +++ b/packages/rs-dpp/src/version/mod.rs @@ -4,9 +4,11 @@ use lazy_static::lazy_static; pub use protocol_version_validator::ProtocolVersionValidator; +use crate::prelude::ProtocolVersion; + mod protocol_version_validator; -pub const LATEST_VERSION: u32 = 1; +pub const LATEST_VERSION: ProtocolVersion = 1; lazy_static! { pub static ref COMPATIBILITY_MAP: HashMap = { diff --git a/packages/rs-dpp/src/version/protocol_version_validator.rs b/packages/rs-dpp/src/version/protocol_version_validator.rs index 9fbefb45e25..1d1c5ceedef 100644 --- a/packages/rs-dpp/src/version/protocol_version_validator.rs +++ b/packages/rs-dpp/src/version/protocol_version_validator.rs @@ -7,14 +7,15 @@ use crate::errors::consensus::basic::{ IncompatibleProtocolVersionError, UnsupportedProtocolVersionError, }; use crate::errors::CompatibleProtocolVersionIsNotDefinedError; +use crate::prelude::ProtocolVersion; use crate::validation::DataValidator; use crate::validation::ValidationResult; use crate::version::{COMPATIBILITY_MAP, LATEST_VERSION}; #[derive(Clone)] pub struct ProtocolVersionValidator { - current_protocol_version: u32, - latest_protocol_version: u32, + current_protocol_version: ProtocolVersion, + latest_protocol_version: ProtocolVersion, compatibility_map: HashMap, } @@ -44,8 +45,8 @@ impl DataValidator for ProtocolVersionValidator { impl ProtocolVersionValidator { pub fn new( - current_protocol_version: u32, - latest_protocol_version: u32, + current_protocol_version: ProtocolVersion, + latest_protocol_version: ProtocolVersion, compatibility_map: HashMap, ) -> Self { Self { @@ -57,7 +58,7 @@ impl ProtocolVersionValidator { pub fn validate( &self, - protocol_version: u32, + protocol_version: ProtocolVersion, ) -> Result, CompatibleProtocolVersionIsNotDefinedError> { let mut result = ValidationResult::new(None); diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index 26912da7cb5..f0779d3c490 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -38,8 +38,8 @@ use crate::error::Error; use crate::execution::fee_pools::epoch::EpochInfo; use crate::execution::fee_pools::fee_distribution::FeesInPools; use crate::execution::fee_pools::process_block_fees::ProcessedBlockFeesOutcome; +use dpp::prelude::ProtocolVersion; use drive::dpp::identity::TimestampMillis; -use drive::dpp::util::deserializer::ProtocolVersion; use drive::fee::epoch::CreditsPerEpoch; use drive::fee::result::FeeResult; use serde::{de::DeserializeOwned, Deserialize, Serialize}; diff --git a/packages/rs-drive-abci/src/execution/engine.rs b/packages/rs-drive-abci/src/execution/engine.rs index 941a60d57fb..517cf6af986 100644 --- a/packages/rs-drive-abci/src/execution/engine.rs +++ b/packages/rs-drive-abci/src/execution/engine.rs @@ -5,8 +5,8 @@ use crate::abci::messages::{ use crate::error::execution::ExecutionError; use crate::error::Error; use crate::platform::Platform; +use dpp::prelude::ProtocolVersion; use drive::dpp::identity::PartialIdentity; -use drive::dpp::util::deserializer::ProtocolVersion; use drive::drive::batch::DriveOperationType; use drive::drive::block_info::BlockInfo; use drive::error::Error::GroveDB; diff --git a/packages/rs-drive-abci/src/execution/protocol_upgrade.rs b/packages/rs-drive-abci/src/execution/protocol_upgrade.rs index bd1cf672e91..6b240791b5e 100644 --- a/packages/rs-drive-abci/src/execution/protocol_upgrade.rs +++ b/packages/rs-drive-abci/src/execution/protocol_upgrade.rs @@ -2,7 +2,7 @@ use crate::constants::PROTOCOL_VERSION_UPGRADE_PERCENTAGE_NEEDED; use crate::error::execution::ExecutionError; use crate::error::Error; use crate::platform::Platform; -use drive::dpp::util::deserializer::ProtocolVersion; +use dpp::prelude::ProtocolVersion; use drive::grovedb::TransactionArg; impl Platform { diff --git a/packages/rs-drive-abci/src/state/mod.rs b/packages/rs-drive-abci/src/state/mod.rs index 6c98f23e40a..1faae17ad4d 100644 --- a/packages/rs-drive-abci/src/state/mod.rs +++ b/packages/rs-drive-abci/src/state/mod.rs @@ -1,4 +1,4 @@ -use drive::dpp::util::deserializer::ProtocolVersion; +use dpp::prelude::ProtocolVersion; use drive::drive::block_info::BlockInfo; mod genesis; diff --git a/packages/rs-drive-abci/tests/strategy_tests/main.rs b/packages/rs-drive-abci/tests/strategy_tests/main.rs index 1307aab75f1..274d015d86f 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/main.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/main.rs @@ -31,11 +31,11 @@ //! use crate::DocumentAction::{DocumentActionDelete, DocumentActionInsert}; +use dpp::prelude::ProtocolVersion; use drive::common::helpers::identities::create_test_masternode_identities_with_rng; use drive::contract::{Contract, CreateRandomDocument, DocumentType}; use drive::dpp::document::document_stub::DocumentStub; use drive::dpp::identity::{Identity, KeyID, PartialIdentity}; -use drive::dpp::util::deserializer::ProtocolVersion; use drive::drive::batch::{ ContractOperationType, DocumentOperationType, DriveOperationType, IdentityOperationType, SystemOperationType, diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index 890fc17050b..f08b176a30c 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -3,7 +3,7 @@ use crate::drive::contract::ContractFetchInfo; #[cfg(any(feature = "full", feature = "verify"))] use dpp::identity::TimestampMillis; #[cfg(any(feature = "full", feature = "verify"))] -use dpp::util::deserializer::ProtocolVersion; +use dpp::prelude::ProtocolVersion; #[cfg(any(feature = "full", feature = "verify"))] use moka::sync::Cache; #[cfg(any(feature = "full", feature = "verify"))] diff --git a/packages/rs-drive/src/drive/protocol_upgrade/mod.rs b/packages/rs-drive/src/drive/protocol_upgrade/mod.rs index c33fa857af5..585af28d007 100644 --- a/packages/rs-drive/src/drive/protocol_upgrade/mod.rs +++ b/packages/rs-drive/src/drive/protocol_upgrade/mod.rs @@ -9,7 +9,7 @@ use crate::error::Error; use crate::error::Error::GroveDB; use crate::fee::op::DriveOperation; use crate::query::QueryItem; -use dpp::util::deserializer::ProtocolVersion; +use dpp::prelude::ProtocolVersion; use grovedb::query_result_type::QueryResultType; use grovedb::{Element, PathQuery, Query, TransactionArg}; use integer_encoding::VarInt; diff --git a/packages/rs-drive/src/drive/system/protocol_version.rs b/packages/rs-drive/src/drive/system/protocol_version.rs index 801d1a43358..27844dbc44b 100644 --- a/packages/rs-drive/src/drive/system/protocol_version.rs +++ b/packages/rs-drive/src/drive/system/protocol_version.rs @@ -9,7 +9,7 @@ use crate::error::drive::DriveError; use crate::error::Error; use crate::fee::op::DriveOperation; -use dpp::util::deserializer::ProtocolVersion; +use dpp::prelude::ProtocolVersion; use grovedb::{Element, TransactionArg}; use integer_encoding::VarInt; From 46b5aa7cd5cbb6a2aa5b3d20664d8d0fcb5b48d1 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Tue, 7 Mar 2023 10:15:33 +0100 Subject: [PATCH 02/10] remove overflows for protocolVersion --- .../data_contract_create_transition/mod.rs | 6 +++--- .../data_contract_update_transition/mod.rs | 6 +++--- ...te_data_contract_update_transition_basic.rs | 2 +- .../rs-dpp/src/document/document_validator.rs | 2 +- .../documents_batch_transition/mod.rs | 8 ++++---- ...alidate_documents_batch_transition_basic.rs | 2 +- .../identity_topup_transition.rs | 4 ++-- packages/rs-dpp/src/util/cbor_value/mod.rs | 8 +++++--- packages/rs-dpp/src/util/json_value/mod.rs | 18 +++++++++++------- 9 files changed, 31 insertions(+), 25 deletions(-) diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs index fff40aa7972..e99859d35dd 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs @@ -57,7 +57,7 @@ impl DataContractCreateTransition { mut raw_data_contract_update_transition: JsonValue, ) -> Result { Ok(DataContractCreateTransition { - protocol_version: raw_data_contract_update_transition.get_u64(PROTOCOL_VERSION)? as u32, + protocol_version: raw_data_contract_update_transition.get_u32(PROTOCOL_VERSION)?, signature: raw_data_contract_update_transition .remove_into(SIGNATURE) .unwrap_or_default(), @@ -268,8 +268,8 @@ mod test { assert_eq!( version::LATEST_VERSION, json_object - .get_u64(PROTOCOL_VERSION) - .expect("the protocol version should be present") as u32 + .get_u32(PROTOCOL_VERSION) + .expect("the protocol version should be present") ); assert_eq!( diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 856329d6ec0..426a23a89b1 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -52,7 +52,7 @@ impl DataContractUpdateTransition { mut raw_data_contract_update_transition: JsonValue, ) -> Result { Ok(DataContractUpdateTransition { - protocol_version: raw_data_contract_update_transition.get_u64(PROTOCOL_VERSION)? as u32, + protocol_version: raw_data_contract_update_transition.get_u32(PROTOCOL_VERSION)?, signature: raw_data_contract_update_transition .remove_into(SIGNATURE) .unwrap_or_default(), @@ -249,8 +249,8 @@ mod test { assert_eq!( version::LATEST_VERSION, json_object - .get_u64(PROTOCOL_VERSION) - .expect("the protocol version should be present") as u32 + .get_u32(PROTOCOL_VERSION) + .expect("the protocol version should be present") ); assert_eq!( diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic.rs index 954cb624b25..ef0c3878a81 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic.rs @@ -124,7 +124,7 @@ where } }; - let new_version = raw_data_contract.get_u64(contract_property_names::VERSION)? as u32; + let new_version = raw_data_contract.get_u32(contract_property_names::VERSION)?; let old_version = existing_data_contract.version; if (new_version - old_version) != 1 { validation_result.add_error(BasicError::InvalidDataContractVersionError { diff --git a/packages/rs-dpp/src/document/document_validator.rs b/packages/rs-dpp/src/document/document_validator.rs index 4b3b0232a33..24daa071bda 100644 --- a/packages/rs-dpp/src/document/document_validator.rs +++ b/packages/rs-dpp/src/document/document_validator.rs @@ -88,7 +88,7 @@ impl DocumentValidator { return Ok(result); } - let protocol_version = raw_document.get_u64(PROPERTY_PROTOCOL_VERSION)? as u32; + let protocol_version = raw_document.get_u32(PROPERTY_PROTOCOL_VERSION)?; result.merge(self.protocol_version_validator.validate(protocol_version)?); Ok(result) diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs index b68cd6a786b..cfa726b770b 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/mod.rs @@ -96,9 +96,9 @@ impl DocumentsBatchTransition { let mut batch_transitions = DocumentsBatchTransition { protocol_version: json_value - .get_u64(property_names::PROTOCOL_VERSION) + .get_u32(property_names::PROTOCOL_VERSION) // js-dpp allows `protocolVersion` to be undefined - .unwrap_or(LATEST_VERSION as u64) as u32, + .unwrap_or(LATEST_VERSION), signature, signature_public_key_id: json_value .get_u64(property_names::SIGNATURE_PUBLIC_KEY_ID) @@ -150,9 +150,9 @@ impl DocumentsBatchTransition { ) -> Result { let mut batch_transitions = DocumentsBatchTransition { protocol_version: raw_object - .get_u64(property_names::PROTOCOL_VERSION) + .get_u32(property_names::PROTOCOL_VERSION) // js-dpp allows `protocolVersion` to be undefined - .unwrap_or(LATEST_VERSION as u64) as u32, + .unwrap_or(LATEST_VERSION), signature: raw_object.get_bytes(property_names::SIGNATURE).ok(), signature_public_key_id: raw_object .get_u64(property_names::SIGNATURE_PUBLIC_KEY_ID) diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs index 6d4204bd348..ade7069b601 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs @@ -74,7 +74,7 @@ pub async fn validate_documents_batch_transition_basic( return Ok(result); } - let protocol_version = raw_state_transition.get_u64("protocolVersion")? as u32; + let protocol_version = raw_state_transition.get_u32("protocolVersion")?; let validation_result = protocol_version_validator.validate(protocol_version)?; result.merge(validation_result); if !result.is_valid() { diff --git a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs index 4553b5945b8..f607000395b 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs @@ -90,8 +90,8 @@ impl IdentityTopUpTransition { raw_object: JsonValue, ) -> Result { let protocol_version = raw_object - .get_u64(property_names::PROTOCOL_VERSION) - .unwrap_or(LATEST_VERSION as u64) as u32; + .get_u32(property_names::PROTOCOL_VERSION) + .unwrap_or(LATEST_VERSION); let signature = raw_object .get_bytes(property_names::SIGNATURE) .unwrap_or_default(); diff --git a/packages/rs-dpp/src/util/cbor_value/mod.rs b/packages/rs-dpp/src/util/cbor_value/mod.rs index beb783c934f..36a12f7cb94 100644 --- a/packages/rs-dpp/src/util/cbor_value/mod.rs +++ b/packages/rs-dpp/src/util/cbor_value/mod.rs @@ -1,6 +1,6 @@ -use std::convert::TryInto; +use std::convert::{TryFrom, TryInto}; -use anyhow::anyhow; +use anyhow::{anyhow, Context}; use ciborium::value::Value as CborValue; use serde_json::{Map, Value as JsonValue}; @@ -118,7 +118,9 @@ impl CborMapExtension for &Vec<(CborValue, CborValue)> { let key_value = get_key_from_cbor_map(self, key) .ok_or_else(|| ProtocolError::DecodingError(String::from(error_message)))?; if let CborValue::Integer(integer_value) = key_value { - return Ok(i128::from(*integer_value) as u64); + return Ok( + u64::try_from(i128::from(*integer_value)).context("unable convert i128 to u64")? + ); } Err(ProtocolError::DecodingError(String::from(error_message))) } diff --git a/packages/rs-dpp/src/util/json_value/mod.rs b/packages/rs-dpp/src/util/json_value/mod.rs index 30a360b824b..fb91e2b2e70 100644 --- a/packages/rs-dpp/src/util/json_value/mod.rs +++ b/packages/rs-dpp/src/util/json_value/mod.rs @@ -1,4 +1,7 @@ -use std::{collections::BTreeMap, convert::TryInto}; +use std::{ + collections::BTreeMap, + convert::{TryFrom, TryInto}, +}; use anyhow::{anyhow, bail}; use log::trace; @@ -408,14 +411,15 @@ impl JsonValueExt for JsonValue { fn remove_u32(&mut self, property_name: &str) -> Result { match self { - JsonValue::Object(ref mut m) => match m.remove(property_name) { - Some(JsonValue::Number(number)) => Ok(number.as_u64().ok_or_else(|| { - anyhow!("unable to convert '{}' into unsigned integer", number) - })? as u32), - _ => { + JsonValue::Object(ref mut m) => { + if let Some(JsonValue::Number(number)) = m.remove(property_name) { + Ok(u32::try_from(number.as_u64().ok_or_else(|| { + anyhow!("unable to convert '{}' into unsigned integer", number) + })?)?) + } else { bail!("Unable to find '{}' in '{}'", property_name, self) } - }, + } _ => bail!("the Json Value isn't a map: {:?}", self), } } From f5bd8e1a40271048b1b6136eea3efe1061cac61c Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Tue, 7 Mar 2023 10:18:48 +0100 Subject: [PATCH 03/10] introduce revision as alias type --- packages/rs-dpp/src/document/mod.rs | 3 ++- .../document_transition/document_create_transition.rs | 3 ++- .../document_replace_transition.rs | 5 +++-- .../document_transition/mod.rs | 11 +++++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/rs-dpp/src/document/mod.rs b/packages/rs-dpp/src/document/mod.rs index 4a5470ebdd8..61693b7d22e 100644 --- a/packages/rs-dpp/src/document/mod.rs +++ b/packages/rs-dpp/src/document/mod.rs @@ -15,6 +15,7 @@ use crate::errors::ProtocolError; use crate::identifier::Identifier; use crate::metadata::Metadata; use crate::prelude::ProtocolVersion; +use crate::prelude::Revision; use crate::util::cbor_value::CborCanonicalMap; use crate::util::cbor_value::FieldType; use crate::util::deserializer::SplitProtocolVersionOutcome; @@ -60,7 +61,7 @@ pub struct Document { /// TODO: Why not &str? pub document_type: String, #[serde(rename = "$revision")] - pub revision: u32, + pub revision: Revision, #[serde(rename = "$dataContractId")] pub data_contract_id: Identifier, #[serde(rename = "$ownerId")] diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs index f09baaadcf0..b4d18c59f66 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs @@ -2,6 +2,7 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; +use crate::prelude::Revision; use crate::{ data_contract::DataContract, document::document_transition::Action, errors::ProtocolError, util::json_value::JsonValueExt, util::json_value::ReplaceWith, @@ -39,7 +40,7 @@ pub struct DocumentCreateTransition { } impl DocumentCreateTransition { - pub fn get_revision(&self) -> u32 { + pub fn get_revision(&self) -> Revision { INITIAL_REVISION } diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs index 834305c649f..0aad19c4f1b 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs @@ -4,6 +4,7 @@ use serde_json::Value as JsonValue; use crate::{ data_contract::DataContract, errors::ProtocolError, + prelude::Revision, util::json_value::{JsonValueExt, ReplaceWith}, }; @@ -21,7 +22,7 @@ pub struct DocumentReplaceTransition { #[serde(flatten)] pub base: DocumentBaseTransition, #[serde(rename = "$revision")] - pub revision: u32, + pub revision: Revision, #[serde(skip_serializing_if = "Option::is_none", rename = "$updatedAt")] pub updated_at: Option, #[serde(flatten, skip_serializing_if = "Option::is_none")] @@ -29,7 +30,7 @@ pub struct DocumentReplaceTransition { } impl DocumentReplaceTransition { - pub fn get_revision(&self) -> u32 { + pub fn get_revision(&self) -> Revision { self.revision } } diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs index c1cfec6b789..7eb15dfb19d 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs @@ -5,7 +5,10 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::{ - data_contract::DataContract, prelude::Identifier, util::json_value::JsonValueExt, ProtocolError, + data_contract::DataContract, + prelude::{Identifier, Revision}, + util::json_value::JsonValueExt, + ProtocolError, }; use document_base_transition::DocumentBaseTransition; @@ -20,7 +23,7 @@ pub use document_delete_transition::DocumentDeleteTransition; pub use document_replace_transition::DocumentReplaceTransition; /// the initial revision of newly created document -pub const INITIAL_REVISION: u32 = 1; +pub const INITIAL_REVISION: Revision = 1; pub const PROPERTY_ACTION: &str = "$action"; pub trait DocumentTransitionExt { @@ -48,7 +51,7 @@ pub trait DocumentTransitionExt { /// get the data of the transition if exits fn get_data(&self) -> Option<&Value>; /// get the revision of transition if exits - fn get_revision(&self) -> Option; + fn get_revision(&self) -> Option; #[cfg(test)] /// Inserts the dynamic property into the document fn insert_dynamic_property(&mut self, property_name: String, value: Value); @@ -264,7 +267,7 @@ impl DocumentTransitionExt for DocumentTransition { } } - fn get_revision(&self) -> Option { + fn get_revision(&self) -> Option { match self { DocumentTransition::Create(t) => Some(t.get_revision()), DocumentTransition::Replace(t) => Some(t.get_revision()), From 1cda69f30f773f74ae7e266009ade67da7e2395e Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Tue, 7 Mar 2023 15:07:42 +0100 Subject: [PATCH 04/10] introduce the timestmapMillis --- packages/rs-dpp/src/document/mod.rs | 6 +++--- .../apply_documents_batch_transition_factory.rs | 2 +- .../document_transition/document_create_transition.rs | 6 +++--- .../document_transition/document_replace_transition.rs | 4 ++-- packages/rs-dpp/src/identity/factory.rs | 4 ++-- packages/rs-dpp/src/identity/identity_public_key/mod.rs | 2 +- .../apply_identity_credit_withdrawal_transition_factory.rs | 7 ++++--- 7 files changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/rs-dpp/src/document/mod.rs b/packages/rs-dpp/src/document/mod.rs index 61693b7d22e..9cfa6bc8015 100644 --- a/packages/rs-dpp/src/document/mod.rs +++ b/packages/rs-dpp/src/document/mod.rs @@ -16,6 +16,7 @@ use crate::identifier::Identifier; use crate::metadata::Metadata; use crate::prelude::ProtocolVersion; use crate::prelude::Revision; +use crate::prelude::TimestampMillis; use crate::util::cbor_value::CborCanonicalMap; use crate::util::cbor_value::FieldType; use crate::util::deserializer::SplitProtocolVersionOutcome; @@ -67,10 +68,9 @@ pub struct Document { #[serde(rename = "$ownerId")] pub owner_id: Identifier, #[serde(rename = "$createdAt", skip_serializing_if = "Option::is_none")] - // TODO: Must be TimestampMillis - pub created_at: Option, + pub created_at: Option, #[serde(rename = "$updatedAt", skip_serializing_if = "Option::is_none")] - pub updated_at: Option, + pub updated_at: Option, // the serde_json::Value preserves the order (see .toml file) #[serde(flatten)] pub data: JsonValue, diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs index 4d61b571d7a..9efb9327975 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs @@ -157,7 +157,7 @@ fn document_from_transition_replace( .clone(), updated_at: document_replace_transition.updated_at, revision: document_replace_transition.revision, - created_at: Some(created_at as i64), + created_at: Some(created_at), metadata: None, //? In the JS implementation the `data_contract` and `entropy` properties are completely omitted, what suggest we should make diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs index b4d18c59f66..c9327890e42 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition.rs @@ -2,7 +2,7 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; -use crate::prelude::Revision; +use crate::prelude::{Revision, TimestampMillis}; use crate::{ data_contract::DataContract, document::document_transition::Action, errors::ProtocolError, util::json_value::JsonValueExt, util::json_value::ReplaceWith, @@ -31,9 +31,9 @@ pub struct DocumentCreateTransition { pub entropy: [u8; 32], #[serde(rename = "$createdAt", skip_serializing_if = "Option::is_none")] - pub created_at: Option, + pub created_at: Option, #[serde(rename = "$updatedAt", skip_serializing_if = "Option::is_none")] - pub updated_at: Option, + pub updated_at: Option, #[serde(flatten, skip_serializing_if = "Option::is_none")] pub data: Option, diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs index 0aad19c4f1b..4eef057aaf0 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition.rs @@ -4,7 +4,7 @@ use serde_json::Value as JsonValue; use crate::{ data_contract::DataContract, errors::ProtocolError, - prelude::Revision, + prelude::{Revision, TimestampMillis}, util::json_value::{JsonValueExt, ReplaceWith}, }; @@ -24,7 +24,7 @@ pub struct DocumentReplaceTransition { #[serde(rename = "$revision")] pub revision: Revision, #[serde(skip_serializing_if = "Option::is_none", rename = "$updatedAt")] - pub updated_at: Option, + pub updated_at: Option, #[serde(flatten, skip_serializing_if = "Option::is_none")] pub data: Option, } diff --git a/packages/rs-dpp/src/identity/factory.rs b/packages/rs-dpp/src/identity/factory.rs index 11d79be76bd..5cc8a4fd4a4 100644 --- a/packages/rs-dpp/src/identity/factory.rs +++ b/packages/rs-dpp/src/identity/factory.rs @@ -9,9 +9,9 @@ use crate::identity::state_transition::identity_public_key_transitions::Identity use crate::identity::state_transition::identity_topup_transition::IdentityTopUpTransition; use crate::identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition; use crate::identity::validation::{IdentityValidator, PublicKeysValidator}; -use crate::identity::{Identity, IdentityPublicKey, KeyID, TimestampMillis}; +use crate::identity::{Identity, IdentityPublicKey, KeyID}; -use crate::prelude::ProtocolVersion; +use crate::prelude::{ProtocolVersion, TimestampMillis}; use crate::{BlsModule, ProtocolError}; use anyhow::anyhow; use dashcore::{InstantLock, Transaction}; diff --git a/packages/rs-dpp/src/identity/identity_public_key/mod.rs b/packages/rs-dpp/src/identity/identity_public_key/mod.rs index a0215e6ed2b..6ea4acc08b8 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/mod.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/mod.rs @@ -18,6 +18,7 @@ use crate::errors::{InvalidVectorSizeError, ProtocolError}; pub use crate::identity::key_type::KeyType; pub use crate::identity::purpose::Purpose; pub use crate::identity::security_level::SecurityLevel; +use crate::prelude::TimestampMillis; use crate::util::cbor_value::{CborCanonicalMap, CborMapExtension}; use crate::util::hash::ripemd160_sha256; use crate::util::json_value::{JsonValueExt, ReplaceWith}; @@ -27,7 +28,6 @@ use crate::SerdeParsingError; use crate::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition; pub type KeyID = u32; -pub type TimestampMillis = u64; pub const BINARY_DATA_FIELDS: [&str; 1] = ["data"]; diff --git a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory.rs b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory.rs index 00ee2b59354..fbc0c27a78f 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory.rs @@ -8,8 +8,8 @@ use serde_json::json; use crate::{ contracts::withdrawals_contract, data_contract::DataContract, document::generate_document_id, document::Document, identity::state_transition::identity_credit_withdrawal_transition::Pooling, - state_repository::StateRepositoryLike, state_transition::StateTransitionLike, - util::entropy_generator::generate, + prelude::TimestampMillis, state_repository::StateRepositoryLike, + state_transition::StateTransitionLike, util::entropy_generator::generate, }; use super::IdentityCreditWithdrawalTransition; @@ -58,7 +58,8 @@ where consensus::deserialize(&latest_platform_block_header_bytes)?; let document_type = String::from(withdrawals_contract::document_types::WITHDRAWAL); - let document_created_at_millis: i64 = latest_platform_block_header.time as i64 * 1000i64; + let document_created_at_millis = + latest_platform_block_header.time as TimestampMillis * 1000; let document_data = json!({ withdrawals_contract::property_names::AMOUNT: state_transition.amount, From b9fff3f51fe08f0fcfacb33416600404013b7560 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Thu, 9 Mar 2023 10:12:16 +0100 Subject: [PATCH 05/10] fix timestamps --- ...pply_documents_batch_transition_factory.rs | 4 ++-- .../document_transition/mod.rs | 18 ++++++++-------- .../rs-dpp/src/identity/identity_facade.rs | 4 ++-- ...e_documents_batch_transition_state_spec.rs | 21 ++++++++++--------- ...edit_withdrawal_transition_factory_spec.rs | 9 ++++---- packages/rs-drive-abci/src/abci/messages.rs | 2 +- packages/rs-drive-abci/src/state/genesis.rs | 5 ++--- packages/rs-drive-nodejs/src/lib.rs | 4 ++-- .../drive/batch/drive_op_batch/identity.rs | 4 ++-- packages/rs-drive/src/drive/cache.rs | 4 ++-- 10 files changed, 38 insertions(+), 37 deletions(-) diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs index 9efb9327975..476ecbb9f8a 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs @@ -4,7 +4,7 @@ use serde_json::Value; use crate::{ document::{errors::DocumentError, Document}, - prelude::Identifier, + prelude::{Identifier, TimestampMillis}, state_repository::StateRepositoryLike, state_transition::StateTransitionLike, ProtocolError, @@ -141,7 +141,7 @@ fn document_from_transition_create( fn document_from_transition_replace( document_replace_transition: &DocumentReplaceTransition, state_transition: &DocumentsBatchTransition, - created_at: u64, + created_at: TimestampMillis, ) -> Document { // TODO cloning is costly. Probably the [`Document`] should have properties of type `Cov<'a, K>` Document { diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs index 7eb15dfb19d..dca548457be 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/mod.rs @@ -6,7 +6,7 @@ use serde_json::Value; use crate::{ data_contract::DataContract, - prelude::{Identifier, Revision}, + prelude::{Identifier, Revision, TimestampMillis}, util::json_value::JsonValueExt, ProtocolError, }; @@ -28,13 +28,13 @@ pub const PROPERTY_ACTION: &str = "$action"; pub trait DocumentTransitionExt { /// returns the creation timestamp (in milliseconds) if it exists for given type of document transition - fn get_created_at(&self) -> Option; + fn get_created_at(&self) -> Option; /// returns the update timestamp (in milliseconds) if it exists for given type of document transition - fn get_updated_at(&self) -> Option; + fn get_updated_at(&self) -> Option; /// set the created_at (in milliseconds) if it exists - fn set_created_at(&mut self, timestamp_millis: Option); + fn set_created_at(&mut self, timestamp_millis: Option); /// set the updated_at (in milliseconds) if it exists - fn set_updated_at(&mut self, timestamp_millis: Option); + fn set_updated_at(&mut self, timestamp_millis: Option); /// returns the value of dynamic property. The dynamic property is a property that is not specified in protocol /// the `path` supports dot-syntax: i.e: property.internal_property fn get_dynamic_property(&self, path: &str) -> Option<&Value>; @@ -207,7 +207,7 @@ impl DocumentTransitionExt for DocumentTransition { &self.base().data_contract_id } - fn get_updated_at(&self) -> Option { + fn get_updated_at(&self) -> Option { match self { DocumentTransition::Create(t) => t.updated_at, DocumentTransition::Replace(t) => t.updated_at, @@ -215,7 +215,7 @@ impl DocumentTransitionExt for DocumentTransition { } } - fn set_updated_at(&mut self, timestamp_millis: Option) { + fn set_updated_at(&mut self, timestamp_millis: Option) { match self { DocumentTransition::Create(ref mut t) => t.updated_at = timestamp_millis, DocumentTransition::Replace(ref mut t) => t.updated_at = timestamp_millis, @@ -223,7 +223,7 @@ impl DocumentTransitionExt for DocumentTransition { } } - fn get_created_at(&self) -> Option { + fn get_created_at(&self) -> Option { match self { DocumentTransition::Create(t) => t.created_at, DocumentTransition::Replace(_) => None, @@ -231,7 +231,7 @@ impl DocumentTransitionExt for DocumentTransition { } } - fn set_created_at(&mut self, timestamp_millis: Option) { + fn set_created_at(&mut self, timestamp_millis: Option) { match self { DocumentTransition::Create(ref mut t) => t.created_at = timestamp_millis, DocumentTransition::Replace(_) => {} diff --git a/packages/rs-dpp/src/identity/identity_facade.rs b/packages/rs-dpp/src/identity/identity_facade.rs index 7d7ca33e5ba..f123763d56d 100644 --- a/packages/rs-dpp/src/identity/identity_facade.rs +++ b/packages/rs-dpp/src/identity/identity_facade.rs @@ -12,9 +12,9 @@ use crate::identity::state_transition::identity_public_key_transitions::Identity use crate::identity::state_transition::identity_topup_transition::IdentityTopUpTransition; use crate::identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition; use crate::identity::validation::{IdentityValidator, PublicKeysValidator}; -use crate::identity::{Identity, IdentityPublicKey, KeyID, TimestampMillis}; +use crate::identity::{Identity, IdentityPublicKey, KeyID}; -use crate::prelude::ProtocolVersion; +use crate::prelude::{ProtocolVersion, TimestampMillis}; use crate::validation::ValidationResult; use crate::version::ProtocolVersionValidator; use crate::{BlsModule, DashPlatformProtocolInitError, NonConsensusError, ProtocolError}; diff --git a/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transition_state_spec.rs b/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transition_state_spec.rs index cbfd814d625..a30f2afeeea 100644 --- a/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transition_state_spec.rs +++ b/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transition_state_spec.rs @@ -12,7 +12,7 @@ use crate::{ document_transition::{Action, DocumentTransition, DocumentTransitionObjectLike}, DocumentsBatchTransition, state_transition::documents_batch_transition::validation::state::validate_documents_batch_transition_state::*, }, - prelude::Identifier, + prelude::{Identifier, TimestampMillis}, prelude::ProtocolError, state_repository::MockStateRepositoryLike, StateError, @@ -96,7 +96,7 @@ fn get_state_error(result: &ValidationResult<()>, error_number: usize) -> &State } } -fn set_updated_at(dt: &mut DocumentTransition, ts: Option) { +fn set_updated_at(dt: &mut DocumentTransition, ts: Option) { match dt { DocumentTransition::Create(ref mut t) => t.updated_at = ts, DocumentTransition::Replace(ref mut t) => t.updated_at = ts, @@ -104,7 +104,7 @@ fn set_updated_at(dt: &mut DocumentTransition, ts: Option) { } } -fn set_created_at(dt: &mut DocumentTransition, ts: Option) { +fn set_created_at(dt: &mut DocumentTransition, ts: Option) { match dt { DocumentTransition::Create(ref mut t) => t.created_at = ts, DocumentTransition::Replace(ref mut _t) => {} @@ -345,7 +345,7 @@ async fn should_return_invalid_result_if_timestamps_mismatch() { ) .expect("documents batch state transition should be created"); - let now_ts = Utc::now().timestamp_millis(); + let now_ts = Utc::now().timestamp_millis() as TimestampMillis; state_transition .transitions .iter_mut() @@ -396,8 +396,8 @@ async fn should_return_invalid_result_if_crated_at_has_violated_time_window() { ) .expect("documents batch state transition should be created"); - let now_ts_minus_6_mins = - Utc::now().timestamp_millis() - Duration::from_secs(60 * 6).as_millis() as i64; + let now_ts_minus_6_mins = (Utc::now().timestamp_millis() as u128 + - Duration::from_secs(60 * 6).as_millis()) as TimestampMillis; state_transition .transitions .iter_mut() @@ -449,8 +449,9 @@ async fn should_not_validate_time_in_block_window_on_dry_run() { .expect("documents batch state transition should be created"); state_transition.get_execution_context().enable_dry_run(); - let now_ts_minus_6_mins = - Utc::now().timestamp_millis() - Duration::from_secs(60 * 6).as_millis() as i64; + let now_ts_minus_6_mins = (Utc::now().timestamp_millis() + - Duration::from_secs(60 * 6).as_millis() as i64) + as TimestampMillis; state_transition .transitions .iter_mut() @@ -494,8 +495,8 @@ async fn should_return_invalid_result_if_updated_at_has_violated_time_window() { ) .expect("documents batch state transition should be created"); - let now_ts_minus_6_mins = - Utc::now().timestamp_millis() - Duration::from_secs(60 * 6).as_millis() as i64; + let now_ts_minus_6_mins = (Utc::now().timestamp_millis() as u128 + - Duration::from_secs(60 * 6).as_millis()) as TimestampMillis; state_transition.transitions.iter_mut().for_each(|t| { set_updated_at(t, Some(now_ts_minus_6_mins)); set_created_at(t, None); diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory_spec.rs index f9ff5a10790..100fa4cd1c2 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/apply_identity_credit_withdrawal_transition_factory_spec.rs @@ -10,6 +10,7 @@ mod apply_identity_credit_withdrawal_transition_factory { apply_identity_credit_withdrawal_transition_factory::ApplyIdentityCreditWithdrawalTransition, IdentityCreditWithdrawalTransition, Pooling, }, + prelude::TimestampMillis, state_repository::MockStateRepositoryLike, tests::fixtures::get_data_contract_fixture, }; @@ -45,7 +46,7 @@ mod apply_identity_credit_withdrawal_transition_factory { #[tokio::test] async fn should_create_withdrawal_and_reduce_balance() { - let block_time_seconds = 1675709306; + let block_time_seconds: TimestampMillis = 1675709306; let state_transition = IdentityCreditWithdrawalTransition { amount: 10, @@ -68,7 +69,7 @@ mod apply_identity_credit_withdrawal_transition_factory { .times(1) .returning(move || { let header = BlockHeader { - time: block_time_seconds, + time: block_time_seconds as u32, version: 1, prev_blockhash: Default::default(), merkle_root: Default::default(), @@ -83,8 +84,8 @@ mod apply_identity_credit_withdrawal_transition_factory { .expect_create_document() .times(1) .withf(move |doc, _| { - let created_at_match = doc.created_at == Some(block_time_seconds as i64 * 1000); - let updated_at_match = doc.created_at == Some(block_time_seconds as i64 * 1000); + let created_at_match = doc.created_at == Some(block_time_seconds * 1000); + let updated_at_match = doc.created_at == Some(block_time_seconds * 1000); let document_data_match = doc.data == json!({ diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index f0779d3c490..63e40c617c7 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -39,7 +39,7 @@ use crate::execution::fee_pools::epoch::EpochInfo; use crate::execution::fee_pools::fee_distribution::FeesInPools; use crate::execution::fee_pools::process_block_fees::ProcessedBlockFeesOutcome; use dpp::prelude::ProtocolVersion; -use drive::dpp::identity::TimestampMillis; +use drive::dpp::prelude::TimestampMillis; use drive::fee::epoch::CreditsPerEpoch; use drive::fee::result::FeeResult; use serde::{de::DeserializeOwned, Deserialize, Serialize}; diff --git a/packages/rs-drive-abci/src/state/genesis.rs b/packages/rs-drive-abci/src/state/genesis.rs index bf868a39bd0..396ceb75bf2 100644 --- a/packages/rs-drive-abci/src/state/genesis.rs +++ b/packages/rs-drive-abci/src/state/genesis.rs @@ -32,13 +32,12 @@ use crate::error::Error; use crate::platform::Platform; use ciborium::{cbor, Value as CborValue}; use dpp::platform_value::Value; +use dpp::prelude::TimestampMillis; use dpp::ProtocolError; use drive::contract::DataContract; use drive::dpp::data_contract::DriveContractExt; use drive::dpp::document::document_stub::DocumentStub; -use drive::dpp::identity::{ - Identity, IdentityPublicKey, KeyType, Purpose, SecurityLevel, TimestampMillis, -}; +use drive::dpp::identity::{Identity, IdentityPublicKey, KeyType, Purpose, SecurityLevel}; use drive::dpp::prelude::{Document, Identifier}; use drive::dpp::system_data_contracts::{load_system_data_contract, SystemDataContract}; use drive::dpp::util::string_encoding::{encode, Encoding}; diff --git a/packages/rs-drive-nodejs/src/lib.rs b/packages/rs-drive-nodejs/src/lib.rs index 07bc33ef6b0..a2b4f4f609d 100644 --- a/packages/rs-drive-nodejs/src/lib.rs +++ b/packages/rs-drive-nodejs/src/lib.rs @@ -10,8 +10,8 @@ use std::{option::Option::None, path::Path, sync::mpsc, thread}; use crate::converter::js_object_to_fee_refunds; use crate::fee::result::FeeResultWrapper; -use drive::dpp::identity::{KeyID, TimestampMillis}; -use drive::dpp::prelude::Revision; +use drive::dpp::identity::KeyID; +use drive::dpp::prelude::{Revision, TimestampMillis}; use drive::drive::flags::StorageFlags; use drive::drive::query::QueryDocumentsOutcome; use drive::error::Error; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs index 5bc9bbb73a0..e9f37d3f131 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs @@ -3,8 +3,8 @@ use crate::drive::block_info::BlockInfo; use crate::drive::Drive; use crate::error::Error; use crate::fee::op::DriveOperation; -use dpp::identity::{Identity, IdentityPublicKey, KeyID, TimestampMillis}; -use dpp::prelude::Revision; +use dpp::identity::{Identity, IdentityPublicKey, KeyID}; +use dpp::prelude::{Revision, TimestampMillis}; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index f08b176a30c..f60c560c7b1 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -1,10 +1,10 @@ #[cfg(any(feature = "full", feature = "verify"))] use crate::drive::contract::ContractFetchInfo; #[cfg(any(feature = "full", feature = "verify"))] -use dpp::identity::TimestampMillis; -#[cfg(any(feature = "full", feature = "verify"))] use dpp::prelude::ProtocolVersion; #[cfg(any(feature = "full", feature = "verify"))] +use dpp::prelude::TimestampMillis; +#[cfg(any(feature = "full", feature = "verify"))] use moka::sync::Cache; #[cfg(any(feature = "full", feature = "verify"))] use nohash_hasher::IntMap; From 6307afedfa17ad1c2a6b18f9b73704f4a0bae2f2 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Fri, 10 Mar 2023 08:56:38 +0100 Subject: [PATCH 06/10] wip --- .../validate_time_in_block_time_window.rs | 2 +- .../rs-dpp/src/identity/identity_public_key/mod.rs | 2 +- packages/rs-dpp/src/lib.rs | 7 ++++--- ...validate_identity_update_transition_state_spec.rs | 4 ++-- packages/wasm-dpp/src/document/mod.rs | 12 +++++++----- .../document_create_transition.rs | 8 ++++---- .../document_replace_transition.rs | 6 +++--- .../document_transition/mod.rs | 4 ++-- ..._public_key_disabled_at_window_violation_error.rs | 2 +- .../identity_update_transition.rs | 4 ++-- 10 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs b/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs index 65f18fcd3ac..1f170fc101f 100644 --- a/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs +++ b/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs @@ -3,7 +3,7 @@ use crate::prelude::TimestampMillis; use super::validation_result::TimeWindowValidationResult; pub const BLOCK_TIME_WINDOW_MINUTES: u64 = 5; -pub const BLOCK_TIME_WINDOW_MILLIS: u64 = BLOCK_TIME_WINDOW_MINUTES * 60 * 1000; +pub const BLOCK_TIME_WINDOW_MILLIS: TimestampMillis = BLOCK_TIME_WINDOW_MINUTES * 60 * 1000; pub fn validate_time_in_block_time_window( last_block_header_time_millis: TimestampMillis, diff --git a/packages/rs-dpp/src/identity/identity_public_key/mod.rs b/packages/rs-dpp/src/identity/identity_public_key/mod.rs index 6ea4acc08b8..e44ab770b6b 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/mod.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/mod.rs @@ -61,7 +61,7 @@ impl Into for &IdentityPublicKey { impl IdentityPublicKey { /// Set disabledAt - pub fn set_disabled_at(&mut self, timestamp_millis: u64) { + pub fn set_disabled_at(&mut self, timestamp_millis: TimestampMillis) { self.disabled_at = Some(timestamp_millis); } diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index 5ac80ee0c6b..4443d9e3b22 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -61,11 +61,12 @@ pub mod prelude { pub type ProtocolVersion = u32; pub type TimestampMillis = u64; pub type Revision = u64; - pub type SignaturePublicKeyId = u32; + pub type OutputIndex = u32; + + pub type PublicKeyId = u32; pub type ErrorCode = u32; pub type Balance = u64; - pub type Fee = u64; - pub type OutputIndex = u64; + pub type Fee = i64; } pub use jsonschema; diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_state_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_state_spec.rs index 5d9365d135e..3174bcdf938 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_state_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_state_spec.rs @@ -13,7 +13,7 @@ use crate::{ validation::MockTPublicKeysValidator, Purpose, SecurityLevel, }, - prelude::Identity, + prelude::{Identity, TimestampMillis}, state_repository::MockStateRepositoryLike, state_transition::StateTransitionLike, tests::{ @@ -191,7 +191,7 @@ async fn should_return_invalid_result_if_disabled_at_has_violated_time_window() } = setup_test(); state_transition.set_public_key_ids_to_disable(vec![1]); state_transition.set_public_keys_disabled_at(Some( - Utc::now().timestamp_millis() as u64 - (BLOCK_TIME_WINDOW_MILLIS * 2), + Utc::now().timestamp_millis() as TimestampMillis - (BLOCK_TIME_WINDOW_MILLIS * 2), )); let validator = IdentityUpdateTransitionStateValidator::new( diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index a8f177e40a2..24110ceec56 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -1,5 +1,5 @@ use dpp::dashcore::anyhow::Context; -use dpp::prelude::{DataContract, Identifier}; +use dpp::prelude::{DataContract, Identifier, Revision}; use dpp::util::json_schema::JsonSchemaExt; use dpp::util::json_value::{JsonValueExt, ReplaceWith}; use dpp::util::string_encoding::Encoding; @@ -111,13 +111,15 @@ impl DocumentWasm { self.0.owner_id.into() } + // TODO #overflow #[wasm_bindgen(js_name=setRevision)] - pub fn set_revision(&mut self, rev: u32) { + pub fn set_revision(&mut self, rev: Revision) { self.0.revision = rev } + // TODO #overflow #[wasm_bindgen(js_name=getRevision)] - pub fn get_revision(&self) -> u32 { + pub fn get_revision(&self) -> Revision { self.0.revision } @@ -256,7 +258,7 @@ impl DocumentWasm { let ts = try_to_u64(number) .context("setting createdAt in Document") .with_js_error()?; - self.0.created_at = Some(ts as i64); + self.0.created_at = Some(ts); Ok(()) } @@ -265,7 +267,7 @@ impl DocumentWasm { let ts = try_to_u64(number) .context("setting updatedAt in Document") .with_js_error()?; - self.0.updated_at = Some(ts as i64); + self.0.updated_at = Some(ts); Ok(()) } diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs index de895bf55ce..0b2bfe728c9 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs @@ -4,7 +4,7 @@ use dpp::{ document::document_transition::{ self, document_create_transition, DocumentCreateTransition, DocumentTransitionObjectLike, }, - prelude::{DataContract, Identifier}, + prelude::{DataContract, Identifier, Revision, TimestampMillis}, util::{json_schema::JsonSchemaExt, json_value::JsonValueExt}, }; use serde::Serialize; @@ -73,17 +73,17 @@ impl DocumentCreateTransitionWasm { } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn created_at(&self) -> Option { + pub fn created_at(&self) -> Option { self.inner.created_at } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { + pub fn updated_at(&self) -> Option { self.inner.updated_at } #[wasm_bindgen(js_name=getRevision)] - pub fn revision(&self) -> u32 { + pub fn revision(&self) -> Revision { document_transition::INITIAL_REVISION } diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs index 0c0bee54282..11fbef1b1fb 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs @@ -8,7 +8,7 @@ use dpp::{ DocumentTransitionObjectLike, }, }, - prelude::{DataContract, Identifier}, + prelude::{DataContract, Identifier, Revision, TimestampMillis}, util::{json_schema::JsonSchemaExt, json_value::JsonValueExt}, }; use serde::Serialize; @@ -75,12 +75,12 @@ impl DocumentReplaceTransitionWasm { } #[wasm_bindgen(js_name=getRevision)] - pub fn revision(&self) -> u32 { + pub fn revision(&self) -> Revision { self.inner.revision } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { + pub fn updated_at(&self) -> Option { self.inner.updated_at } diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs index dd186fe33ff..6fcf3f8e8d1 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs @@ -100,7 +100,7 @@ impl DocumentTransitionWasm { let timestamp_millis = try_to_u64(js_timestamp_millis) .context("setting updatedAt in DocumentsBatchTransition") .with_js_error()?; - self.0.set_updated_at(Some(timestamp_millis as i64)); + self.0.set_updated_at(Some(timestamp_millis)); Ok(()) } @@ -114,7 +114,7 @@ impl DocumentTransitionWasm { let timestamp_millis = try_to_u64(js_timestamp_millis) .context("setting createdAt in DocumentsBatchTransition") .with_js_error()?; - self.0.set_created_at(Some(timestamp_millis as i64)); + self.0.set_created_at(Some(timestamp_millis)); Ok(()) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs index c2eedb4328e..643087102b8 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs @@ -1,4 +1,4 @@ -use dpp::identity::TimestampMillis; +use dpp::prelude::TimestampMillis; use wasm_bindgen::prelude::*; #[wasm_bindgen(js_name=IdentityPublicKeyDisabledAtWindowViolationError)] diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs index d052b7e10ce..04e3a35c109 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs @@ -18,8 +18,8 @@ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; use crate::errors::from_dpp_err; use crate::utils::generic_of_js_val; use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition; -use dpp::identity::{KeyID, TimestampMillis}; -use dpp::prelude::Revision; +use dpp::identity::KeyID; +use dpp::prelude::{Revision, TimestampMillis}; use dpp::state_transition::StateTransitionIdentitySigned; use dpp::{ identifier::Identifier, From 95f6dc925b71ea8879cb6284c498297d53d44903 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Mon, 13 Mar 2023 09:36:19 +0100 Subject: [PATCH 07/10] use js_sys::Date instead of timetstamps --- packages/wasm-dpp/src/document/mod.rs | 13 ++++++++----- .../document_create_transition.rs | 17 ++++++++++------- .../document_replace_transition.rs | 9 ++++++--- .../document_transition/mod.rs | 19 ++++++------------- ...cument_timestamp_window_violation_error.rs | 14 ++++---------- ..._key_disabled_at_window_violation_error.rs | 8 +++++--- .../wasm-dpp/src/identity/identity_facade.rs | 3 ++- .../src/identity/identity_public_key/mod.rs | 14 ++++++++------ .../identity_update_transition.rs | 4 ++-- packages/wasm-dpp/src/utils.rs | 15 +++++++++++---- .../test/unit/document/Document.spec.js | 12 ++++++------ .../unit/document/DocumentFactory.spec.js | 2 +- ...plyDocumentsBatchTransitionFactory.spec.js | 2 +- ...cumentsBatchTransitionStateFactory.spec.js | 2 +- ...ocumentsUniquenessByIndicesFactory.spec.js | 4 ++-- .../unit/identity/IdentityPublicKey.spec.js | 4 ++-- 16 files changed, 75 insertions(+), 67 deletions(-) diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index 4aeccb555d4..eca0b5a7db5 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -14,7 +14,10 @@ use crate::buffer::Buffer; use crate::errors::RustConversionError; use crate::identifier::{identifier_from_js_value, IdentifierWrapper}; use crate::lodash::lodash_set; -use crate::utils::{replace_identifiers_with_bytes_without_failing, Inner, ToSerdeJSONExt}; +use crate::utils::{ + replace_identifiers_with_bytes_without_failing, timestamp_millis_to_js_date, Inner, + ToSerdeJSONExt, +}; use crate::utils::{try_to_u64, WithJsError}; use crate::with_js_error; use crate::{DataContractWasm, MetadataWasm}; @@ -273,13 +276,13 @@ impl DocumentWasm { } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn get_created_at(&self) -> Option { - self.0.created_at.map(|v| v as f64) + pub fn get_created_at(&self) -> Option { + self.0.created_at.map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn get_updated_at(&self) -> Option { - self.0.updated_at.map(|v| v as f64) + pub fn get_updated_at(&self) -> Option { + self.0.updated_at.map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=getMetadata)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs index 7c80b2d59bb..ecbc309bf5c 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs @@ -5,7 +5,7 @@ use dpp::{ self, document_create_transition, DocumentCreateTransition, DocumentTransitionObjectLike, INITIAL_REVISION, }, - prelude::{DataContract, Identifier, Revision, TimestampMillis}, + prelude::{DataContract, Identifier}, util::{json_schema::JsonSchemaExt, json_value::JsonValueExt}, }; use serde::Serialize; @@ -17,7 +17,10 @@ use crate::{ document_batch_transition::document_transition::to_object, identifier::IdentifierWrapper, lodash::lodash_set, - utils::{replace_identifiers_with_bytes_without_failing, ToSerdeJSONExt, WithJsError}, + utils::{ + replace_identifiers_with_bytes_without_failing, timestamp_millis_to_js_date, + ToSerdeJSONExt, WithJsError, + }, BinaryType, DataContractWasm, }; @@ -74,13 +77,13 @@ impl DocumentCreateTransitionWasm { } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn created_at(&self) -> Option { - self.inner.created_at + pub fn created_at(&self) -> Option { + self.inner.created_at.map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { - self.inner.updated_at + pub fn updated_at(&self) -> Option { + self.inner.updated_at.map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=getRevision)] @@ -91,7 +94,7 @@ impl DocumentCreateTransitionWasm { // AbstractDocumentTransitionMethods #[wasm_bindgen(js_name=getId)] pub fn id(&self) -> IdentifierWrapper { - self.inner.base.id.clone().into() + self.inner.base.id.into() } #[wasm_bindgen(js_name=getType)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs index aa55eaddcbe..2b640b1d769 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs @@ -19,7 +19,10 @@ use crate::{ document_batch_transition::document_transition::to_object, identifier::IdentifierWrapper, lodash::lodash_set, - utils::{replace_identifiers_with_bytes_without_failing, ToSerdeJSONExt, WithJsError}, + utils::{ + replace_identifiers_with_bytes_without_failing, timestamp_millis_to_js_date, + ToSerdeJSONExt, WithJsError, + }, BinaryType, DataContractWasm, }; @@ -80,8 +83,8 @@ impl DocumentReplaceTransitionWasm { } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { - self.inner.updated_at + pub fn updated_at(&self) -> Option { + self.inner.updated_at.map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=toObject)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs index 81acca81ac8..128170e36fe 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs @@ -23,7 +23,7 @@ use crate::{ buffer::Buffer, identifier::{identifier_from_js_value, IdentifierWrapper}, lodash::lodash_set, - utils::{try_to_u64, Inner, ToSerdeJSONExt, WithJsError}, + utils::{timestamp_millis_to_js_date, try_to_u64, Inner, ToSerdeJSONExt, WithJsError}, with_js_error, BinaryType, ConversionOptions, DataContractWasm, }; @@ -75,20 +75,13 @@ impl DocumentTransitionWasm { } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn get_created_at(&self) -> JsValue { - if let Some(created_at) = self.0.get_created_at() { - (created_at as f64).into() - } else { - JsValue::NULL - } + pub fn get_created_at(&self) -> Option { + self.0.get_created_at().map(timestamp_millis_to_js_date) } + #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn get_updated_at(&self) -> JsValue { - if let Some(updated_at) = self.0.get_updated_at() { - (updated_at as f64).into() - } else { - JsValue::NULL - } + pub fn get_updated_at(&self) -> Option { + self.0.get_updated_at().map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=setUpdatedAt)] diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs index f08c61a3183..cf4b602286c 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs @@ -1,4 +1,4 @@ -use crate::buffer::Buffer; +use crate::{buffer::Buffer, utils::timestamp_millis_to_js_date}; use dpp::{identifier::Identifier, prelude::TimestampMillis}; use wasm_bindgen::prelude::*; @@ -26,23 +26,17 @@ impl DocumentTimestampWindowViolationErrorWasm { #[wasm_bindgen(js_name=getTimestamp)] pub fn timestamp(&self) -> js_sys::Date { - let date = js_sys::Date::new_0(); - date.set_time(self.timestamp as f64); - date + timestamp_millis_to_js_date(self.timestamp) } #[wasm_bindgen(js_name=getTimeWindowStart)] pub fn time_window_start(&self) -> js_sys::Date { - let date = js_sys::Date::new_0(); - date.set_time(self.time_window_start as f64); - date + timestamp_millis_to_js_date(self.time_window_start) } #[wasm_bindgen(js_name=getTimeWindowEnd)] pub fn time_window_end(&self) -> js_sys::Date { - let date = js_sys::Date::new_0(); - date.set_time(self.time_window_end as f64); - date + timestamp_millis_to_js_date(self.time_window_end) } #[wasm_bindgen(js_name=getCode)] diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs index 7bcee7bf80b..9dbbe62c4a6 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs @@ -1,6 +1,8 @@ use dpp::prelude::TimestampMillis; use wasm_bindgen::prelude::*; +use crate::utils::timestamp_millis_to_js_date; + #[wasm_bindgen(js_name=IdentityPublicKeyDisabledAtWindowViolationError)] pub struct IdentityPublicKeyDisabledAtWindowViolationErrorWasm { disabled_at: TimestampMillis, @@ -14,19 +16,19 @@ impl IdentityPublicKeyDisabledAtWindowViolationErrorWasm { #[wasm_bindgen(js_name=getDisabledAt)] pub fn disabled_at(&self) -> js_sys::Date { // TODO: Figure out how to match rust timestamps with JS timestamps - js_sys::Date::new(&JsValue::from_f64(self.disabled_at as f64)) + timestamp_millis_to_js_date(self.disabled_at) } #[wasm_bindgen(js_name=getTimeWindowStart)] pub fn time_window_start(&self) -> js_sys::Date { // TODO: Figure out how to match rust timestamps with JS timestamps - js_sys::Date::new(&JsValue::from_f64(self.time_window_start as f64)) + timestamp_millis_to_js_date(self.time_window_start) } #[wasm_bindgen(js_name=getTimeWindowEnd)] pub fn time_window_end(&self) -> js_sys::Date { // TODO: Figure out how to match rust timestamps with JS timestamps - js_sys::Date::new(&JsValue::from_f64(self.time_window_end as f64)) + timestamp_millis_to_js_date(self.time_window_end) } #[wasm_bindgen(js_name=getCode)] diff --git a/packages/wasm-dpp/src/identity/identity_facade.rs b/packages/wasm-dpp/src/identity/identity_facade.rs index 8d89c60995a..c2825f16b3a 100644 --- a/packages/wasm-dpp/src/identity/identity_facade.rs +++ b/packages/wasm-dpp/src/identity/identity_facade.rs @@ -2,6 +2,7 @@ use std::convert::TryInto; use std::sync::Arc; +use dpp::prelude::TimestampMillis; use wasm_bindgen::prelude::*; use dpp::identity::validation::PublicKeysValidator; @@ -199,7 +200,7 @@ impl IdentityFacadeWasm { ) -> Result { let (add_public_keys, disable_public_keys) = super::factory_utils::parse_create_identity_update_transition_keys(public_keys)?; - let now = js_sys::Date::now() as u64; + let now = js_sys::Date::now() as TimestampMillis; self.0 .create_identity_update_transition( diff --git a/packages/wasm-dpp/src/identity/identity_public_key/mod.rs b/packages/wasm-dpp/src/identity/identity_public_key/mod.rs index 64c062e1e7b..9beb3a00f96 100644 --- a/packages/wasm-dpp/src/identity/identity_public_key/mod.rs +++ b/packages/wasm-dpp/src/identity/identity_public_key/mod.rs @@ -1,10 +1,11 @@ use dpp::dashcore::anyhow; +use js_sys::BigInt; pub use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; use wasm_bindgen::prelude::*; use crate::errors::from_dpp_err; -use crate::utils::Inner; +use crate::utils::{try_to_u64, Inner, WithJsError}; use crate::{buffer::Buffer, utils}; use dpp::identity::{IdentityPublicKey, KeyID}; @@ -104,14 +105,15 @@ impl IdentityPublicKeyWasm { } #[wasm_bindgen(js_name=setDisabledAt)] - pub fn set_disabled_at(&mut self, timestamp: u32) { - // TODO: It's not gonna work, must be BigInt - self.0.set_disabled_at(timestamp as u64); + pub fn set_disabled_at(&mut self, timestamp: JsValue) -> Result<(), JsValue> { + self.0 + .set_disabled_at(try_to_u64(timestamp).with_js_error()?); + Ok(()) } #[wasm_bindgen(js_name=getDisabledAt)] - pub fn get_disabled_at(&self) -> Option { - self.0.disabled_at.map(|timestamp| timestamp as f64) + pub fn get_disabled_at(&self) -> Option { + self.0.disabled_at.map(BigInt::from) } #[wasm_bindgen(js_name=hash)] diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs index d9f37822df9..df4c23fd5c1 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs @@ -16,7 +16,7 @@ use crate::{ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; use crate::errors::from_dpp_err; -use crate::utils::{generic_of_js_val, try_to_u64, WithJsError}; +use crate::utils::{generic_of_js_val, timestamp_millis_to_js_date, try_to_u64, WithJsError}; use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition; use dpp::identity::KeyID; use dpp::prelude::{ProtocolVersion, Revision, TimestampMillis}; @@ -135,7 +135,7 @@ impl IdentityUpdateTransitionWasm { pub fn get_public_keys_disabled_at(&self) -> Option { self.0 .get_public_keys_disabled_at() - .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) + .map(timestamp_millis_to_js_date) } #[wasm_bindgen(js_name=setPublicKeysDisabledAt)] diff --git a/packages/wasm-dpp/src/utils.rs b/packages/wasm-dpp/src/utils.rs index c984819f714..09b866f9315 100644 --- a/packages/wasm-dpp/src/utils.rs +++ b/packages/wasm-dpp/src/utils.rs @@ -3,6 +3,7 @@ use std::convert::TryInto; use anyhow::{anyhow, bail}; use dpp::{ dashcore::{anyhow, anyhow::Context}, + prelude::TimestampMillis, util::json_value::{JsonValueExt, ReplaceWith}, ProtocolError, }; @@ -203,7 +204,7 @@ pub fn get_class_name(value: &JsValue) -> String { } pub fn try_to_u64(value: JsValue) -> Result { - let result = if value.is_bigint() { + if value.is_bigint() { js_sys::BigInt::new(&value) .map_err(|e| anyhow!("unable to create bigInt: {}", e.to_string()))? .try_into() @@ -213,9 +214,7 @@ pub fn try_to_u64(value: JsValue) -> Result { convert_number_to_u64(number) } else { bail!("supported types are Number or BigInt") - }; - - result + } } pub fn convert_number_to_u64(js_number: js_sys::Number) -> Result { @@ -259,3 +258,11 @@ pub(crate) trait Inner { fn inner(&self) -> &Self::InnerItem; fn inner_mut(&mut self) -> &mut Self::InnerItem; } + +pub(crate) fn timestamp_millis_to_js_date(timestamp_millis: TimestampMillis) -> js_sys::Date { + let date = js_sys::Date::new_0(); + // u64(TimestampMillis) ans JS Date are not compatible. Its impossible to create a `Date` + // object from number that has precision of u64 + date.set_time(timestamp_millis as f64); + date +} diff --git a/packages/wasm-dpp/test/unit/document/Document.spec.js b/packages/wasm-dpp/test/unit/document/Document.spec.js index c4447546d83..3c6521d283e 100644 --- a/packages/wasm-dpp/test/unit/document/Document.spec.js +++ b/packages/wasm-dpp/test/unit/document/Document.spec.js @@ -219,7 +219,7 @@ describe('Document', () => { document = new Document(rawDocument, dataContract); - expect(document.getCreatedAt()).to.equal(rawDocument.$createdAt); + expect(document.getCreatedAt().getTime()).to.equal(rawDocument.$createdAt); }); it('should create Document with $updatedAt and data if present', async () => { @@ -237,7 +237,7 @@ describe('Document', () => { document = new Document(rawDocument, dataContract); - expect(document.getUpdatedAt()).to.equal(rawDocument.$updatedAt); + expect(document.getUpdatedAt().getTime()).to.equal(rawDocument.$updatedAt); }); }); @@ -400,7 +400,7 @@ describe('Document', () => { document.setCreatedAt(time); - expect(document.getCreatedAt()).to.equal(time); + expect(document.getCreatedAt().getTime()).to.equal(time); }); }); @@ -410,7 +410,7 @@ describe('Document', () => { document.setCreatedAt(time); - expect(document.getCreatedAt()).to.equal(time); + expect(document.getCreatedAt().getTime()).to.equal(time); }); }); @@ -420,7 +420,7 @@ describe('Document', () => { document.setUpdatedAt(time); - expect(document.getUpdatedAt()).to.equal(time); + expect(document.getUpdatedAt().getTime()).to.equal(time); }); }); @@ -430,7 +430,7 @@ describe('Document', () => { document.setUpdatedAt(time); - expect(document.getUpdatedAt()).to.equal(time); + expect(document.getUpdatedAt().getTime()).to.equal(time); }); }); }); diff --git a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js index 6f316e7320e..e7a19fc7e51 100644 --- a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js @@ -194,7 +194,7 @@ describe('DocumentFactory', () => { expect(newDocument.getEntropy()).not.to.deep.be.equal(Buffer.alloc(32)); expect(newDocumentJs.getCreatedAt().getTime()).to.be.equal(fakeTimeDate.getTime()); - expect(newDocument.getCreatedAt()).to.be.an('number'); + expect(newDocument.getCreatedAt()).to.be.an('Date'); }); it('should throw an error if type is not defined', () => { diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js index c2eb3febefc..8341acf99fd 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js @@ -248,7 +248,7 @@ describe('applyDocumentsBatchTransitionFactory', () => { newDocument.setRevision(documentTransition.getRevision()); newDocument.setData(documentTransition.getData()); - newDocument.setUpdatedAt(documentTransition.getUpdatedAt()); + newDocument.setUpdatedAt(documentTransition.getUpdatedAt().getTime()); expect(stateRepositoryMock.updateDocument).to.have.been.called.calledOnce(); const [updateDocument] = stateRepositoryMock.updateDocument.getCall(0).args; diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js index 20f72ee07c9..735507b69f0 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js @@ -375,7 +375,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getCreatedAt() - (6 * 60 * 1000); + const createdAtMinus6Mins = t.getCreatedAt().getTime() - (6 * 60 * 1000); t.setCreatedAt(createdAtMinus6Mins); t.setUpdatedAt(undefined); }); diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js index a3db9bb7d1e..0e277d195e0 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js @@ -294,8 +294,8 @@ describe('validateDocumentsUniquenessByIndices', () => { uniqueDatesDocumentJs.getType(), { where: [ - ['$createdAt', '==', uniqueDatesDocument.getCreatedAt()], - ['$updatedAt', '==', uniqueDatesDocument.getUpdatedAt()], + ['$createdAt', '==', uniqueDatesDocument.getCreatedAt().getTime()], + ['$updatedAt', '==', uniqueDatesDocument.getUpdatedAt().getTime()], ], }, ) diff --git a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js index 5652950a6ef..68aa146130e 100644 --- a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js +++ b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js @@ -121,7 +121,7 @@ describe('IdentityPublicKey', () => { it('should set disabledAt', () => { publicKey.setDisabledAt(123); - expect(publicKey.getDisabledAt()).to.equal(123); + expect(publicKey.getDisabledAt()).to.equal(123n); }); }); @@ -129,7 +129,7 @@ describe('IdentityPublicKey', () => { it('should return disabledAt', () => { publicKey.setDisabledAt(42); - expect(publicKey.getDisabledAt()).to.equal(42); + expect(publicKey.getDisabledAt()).to.equal(42n); }); }); From 6335372e7226d0626cbcfe6cdc2bd22580176f07 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Mon, 13 Mar 2023 10:13:32 +0100 Subject: [PATCH 08/10] fix time window vlaidation --- .../validate_time_in_block_time_window.rs | 13 +++++++++---- packages/rs-dpp/src/data_contract/data_contract.rs | 2 +- packages/rs-dpp/src/errors/consensus/fee.rs | 2 +- .../identity_credit_withdrawal_transition/mod.rs | 2 +- .../validate_identity_update_transition_state.rs | 9 +++++++-- packages/rs-dpp/src/lib.rs | 1 - .../fee/operations/delete_operation.rs | 2 +- .../fee/operations/read_operation.rs | 12 +++++++----- .../fee/operations/write_operation.rs | 13 ++++++++----- .../validation/validate_state_transition_fee.rs | 2 +- packages/wasm-dpp/src/identity/mod.rs | 2 +- 11 files changed, 37 insertions(+), 23 deletions(-) diff --git a/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs b/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs index 1f170fc101f..e482049a35b 100644 --- a/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs +++ b/packages/rs-dpp/src/block_time_window/validate_time_in_block_time_window.rs @@ -9,11 +9,16 @@ pub fn validate_time_in_block_time_window( last_block_header_time_millis: TimestampMillis, time_to_check_millis: TimestampMillis, ) -> TimeWindowValidationResult { - let time_window_start = last_block_header_time_millis - BLOCK_TIME_WINDOW_MILLIS; - let time_window_end = last_block_header_time_millis + BLOCK_TIME_WINDOW_MILLIS; + let maybe_time_window_start = + last_block_header_time_millis.checked_sub(BLOCK_TIME_WINDOW_MILLIS); + let maybe_time_window_end = last_block_header_time_millis.checked_add(BLOCK_TIME_WINDOW_MILLIS); - let valid = - time_to_check_millis >= time_window_start && time_to_check_millis <= time_window_end; + let time_window_start = maybe_time_window_start.unwrap_or(TimestampMillis::MIN); + let time_window_end = maybe_time_window_end.unwrap_or(TimestampMillis::MAX); + + let valid = maybe_time_window_start.is_some() + && maybe_time_window_end.is_some() + && (time_to_check_millis >= time_window_start && time_to_check_millis <= time_window_end); TimeWindowValidationResult { time_window_start, diff --git a/packages/rs-dpp/src/data_contract/data_contract.rs b/packages/rs-dpp/src/data_contract/data_contract.rs index 5f3f4d6bc3b..80f8cae3f41 100644 --- a/packages/rs-dpp/src/data_contract/data_contract.rs +++ b/packages/rs-dpp/src/data_contract/data_contract.rs @@ -19,7 +19,7 @@ use crate::data_contract::contract_config::{ }; use crate::data_contract::get_binary_properties_from_schema::get_binary_properties; -use crate::prelude::{ProtocolVersion, DataContractVersion}; +use crate::prelude::{DataContractVersion, ProtocolVersion}; use crate::util::cbor_value::CborCanonicalMap; use crate::util::deserializer; use crate::util::deserializer::SplitProtocolVersionOutcome; diff --git a/packages/rs-dpp/src/errors/consensus/fee.rs b/packages/rs-dpp/src/errors/consensus/fee.rs index 9fb2259bd5d..19267a01e80 100644 --- a/packages/rs-dpp/src/errors/consensus/fee.rs +++ b/packages/rs-dpp/src/errors/consensus/fee.rs @@ -1,6 +1,6 @@ use thiserror::Error; -use crate::prelude::{Fee, Balance}; +use crate::prelude::{Balance, Fee}; #[derive(Error, Debug)] pub enum FeeError { diff --git a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs index 38c3be3e561..faa634ccb6c 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_credit_withdrawal_transition/mod.rs @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; use serde_repr::{Deserialize_repr, Serialize_repr}; -use crate::prelude::{ProtocolVersion, Fee}; +use crate::prelude::{Fee, ProtocolVersion}; use crate::version::LATEST_VERSION; use crate::{ identity::{core_script::CoreScript, KeyID}, diff --git a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/validate_identity_update_transition_state.rs b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/validate_identity_update_transition_state.rs index c078da110b0..26146940ca6 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/validate_identity_update_transition_state.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/validate_identity_update_transition_state.rs @@ -1,9 +1,10 @@ -use anyhow::anyhow; +use anyhow::{anyhow, Context}; use serde_json::Value; use std::convert::TryInto; use std::sync::Arc; use crate::consensus::signature::{IdentityNotFoundError, SignatureError}; +use crate::ProtocolError; use crate::{ block_time_window::validate_time_in_block_time_window::validate_time_in_block_time_window, identity::validation::{RequiredPurposeAndSecurityLevelValidator, TPublicKeysValidator}, @@ -66,9 +67,13 @@ where // copy identity let mut identity = stored_identity.clone(); + let previous_revision = state_transition + .get_revision() + .checked_sub(1) + .context("the previous revision of transition cannot be negative")?; // Check revision - if identity.get_revision() != (state_transition.get_revision() - 1) { + if identity.get_revision() != previous_revision { validation_result.add_error(StateError::InvalidIdentityRevisionError { identity_id: state_transition.get_identity_id().to_owned(), current_revision: identity.get_revision(), diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index 567035bea4b..e1e792c2192 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -63,7 +63,6 @@ pub mod prelude { pub type Revision = u64; pub type DataContractVersion = u32; - pub type PublicKeyId = u32; pub type Balance = u64; pub type Fee = i64; } diff --git a/packages/rs-dpp/src/state_transition/fee/operations/delete_operation.rs b/packages/rs-dpp/src/state_transition/fee/operations/delete_operation.rs index f5436e31920..cc23b845f4b 100644 --- a/packages/rs-dpp/src/state_transition/fee/operations/delete_operation.rs +++ b/packages/rs-dpp/src/state_transition/fee/operations/delete_operation.rs @@ -33,7 +33,7 @@ impl OperationLike for DeleteOperation { } fn get_storage_cost(&self) -> Fee { - -1 * (self.key_size.saturating_add(self.value_size) as Fee) + -(self.key_size.saturating_add(self.value_size) as Fee) .saturating_mul(STORAGE_CREDIT_PER_BYTE) } } diff --git a/packages/rs-dpp/src/state_transition/fee/operations/read_operation.rs b/packages/rs-dpp/src/state_transition/fee/operations/read_operation.rs index 5f54ad1a681..36ff3dcd281 100644 --- a/packages/rs-dpp/src/state_transition/fee/operations/read_operation.rs +++ b/packages/rs-dpp/src/state_transition/fee/operations/read_operation.rs @@ -2,8 +2,9 @@ use serde::{Deserialize, Serialize}; use super::OperationLike; -use crate::state_transition::fee::constants::{ - PROCESSING_CREDIT_PER_BYTE, READ_BASE_PROCESSING_COST, +use crate::{ + prelude::Fee, + state_transition::fee::constants::{PROCESSING_CREDIT_PER_BYTE, READ_BASE_PROCESSING_COST}, }; #[derive(Default, Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] @@ -19,11 +20,12 @@ impl ReadOperation { } impl OperationLike for ReadOperation { - fn get_processing_cost(&self) -> i64 { - READ_BASE_PROCESSING_COST + (self.value_size as i64 * PROCESSING_CREDIT_PER_BYTE) + fn get_processing_cost(&self) -> Fee { + READ_BASE_PROCESSING_COST + .saturating_add((self.value_size as Fee).saturating_mul(PROCESSING_CREDIT_PER_BYTE)) } - fn get_storage_cost(&self) -> i64 { + fn get_storage_cost(&self) -> Fee { 0 } } diff --git a/packages/rs-dpp/src/state_transition/fee/operations/write_operation.rs b/packages/rs-dpp/src/state_transition/fee/operations/write_operation.rs index 65b2088e576..960fa006791 100644 --- a/packages/rs-dpp/src/state_transition/fee/operations/write_operation.rs +++ b/packages/rs-dpp/src/state_transition/fee/operations/write_operation.rs @@ -1,8 +1,11 @@ use serde::{Deserialize, Serialize}; use super::OperationLike; -use crate::state_transition::fee::constants::{ - PROCESSING_CREDIT_PER_BYTE, STORAGE_CREDIT_PER_BYTE, WRITE_BASE_PROCESSING_COST, +use crate::{ + prelude::Fee, + state_transition::fee::constants::{ + PROCESSING_CREDIT_PER_BYTE, STORAGE_CREDIT_PER_BYTE, WRITE_BASE_PROCESSING_COST, + }, }; #[derive(Default, Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] @@ -24,10 +27,10 @@ impl WriteOperation { impl OperationLike for WriteOperation { fn get_processing_cost(&self) -> i64 { WRITE_BASE_PROCESSING_COST - + ((self.key_size + self.value_size) as i64 * PROCESSING_CREDIT_PER_BYTE) + + ((self.key_size.saturating_add(self.value_size)) as Fee * PROCESSING_CREDIT_PER_BYTE) } - fn get_storage_cost(&self) -> i64 { - (self.key_size + self.value_size) as i64 * STORAGE_CREDIT_PER_BYTE + fn get_storage_cost(&self) -> Fee { + self.key_size.saturating_add(self.value_size) as Fee * STORAGE_CREDIT_PER_BYTE } } diff --git a/packages/rs-dpp/src/state_transition/validation/validate_state_transition_fee.rs b/packages/rs-dpp/src/state_transition/validation/validate_state_transition_fee.rs index 1b77b2183cc..dc5a1e89657 100644 --- a/packages/rs-dpp/src/state_transition/validation/validate_state_transition_fee.rs +++ b/packages/rs-dpp/src/state_transition/validation/validate_state_transition_fee.rs @@ -85,7 +85,7 @@ where if execution_context.is_dry_run() { return Ok(result); } - balance + identity.get_balance() + balance.saturating_add(identity.get_balance()) } StateTransition::DataContractCreate(st) => { let balance = self.get_identity_owner_balance(st).await?; diff --git a/packages/wasm-dpp/src/identity/mod.rs b/packages/wasm-dpp/src/identity/mod.rs index 350d4a2641a..15e3137dffb 100644 --- a/packages/wasm-dpp/src/identity/mod.rs +++ b/packages/wasm-dpp/src/identity/mod.rs @@ -16,8 +16,8 @@ use dpp::{ProtocolError, SerdeParsingError}; use crate::errors::from_dpp_err; use crate::identifier::IdentifierWrapper; -use crate::utils::{to_vec_of_serde_values, WithJsError}; use crate::utils::{self, try_to_u64}; +use crate::utils::{to_vec_of_serde_values, WithJsError}; use crate::MetadataWasm; pub use identity_public_key::*; From 2c782bc5ff44a94622fb703bc1b4dcf98dbd6810 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Mon, 13 Mar 2023 10:40:13 +0100 Subject: [PATCH 09/10] remove linter errors --- packages/wasm-dpp/lib/test/.eslintrc | 1 + packages/wasm-dpp/test/.eslintrc | 1 + .../wasm-dpp/test/integration/identity/IdentityFacade.spec.js | 2 +- .../validateIdentityUpdateTransitionStateFactory.spec.js | 2 +- packages/wasm-dpp/test/unit/document/Document.spec.js | 4 ++-- packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js | 2 +- .../wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js | 4 ++-- .../IdentityUpdateTransition/IdentityUpdateTransition.spec.js | 4 ++-- .../applyIdentityUpdateTransitionFactory.spec.js | 2 +- 9 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/wasm-dpp/lib/test/.eslintrc b/packages/wasm-dpp/lib/test/.eslintrc index 4c2b11fe817..8908307b573 100644 --- a/packages/wasm-dpp/lib/test/.eslintrc +++ b/packages/wasm-dpp/lib/test/.eslintrc @@ -1,5 +1,6 @@ { "env": { + "es2020": true, "node": true, "mocha": true }, diff --git a/packages/wasm-dpp/test/.eslintrc b/packages/wasm-dpp/test/.eslintrc index 720ced73852..3636b0316a2 100644 --- a/packages/wasm-dpp/test/.eslintrc +++ b/packages/wasm-dpp/test/.eslintrc @@ -1,5 +1,6 @@ { "env": { + "es2020": true, "node": true, "mocha": true }, diff --git a/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js b/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js index 892b1c1411a..c8ed9318564 100644 --- a/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js +++ b/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js @@ -200,7 +200,7 @@ describe('IdentityFacade', () => { expect(stateTransition.getIdentityId().toBuffer()) .to.be.deep.equal(identity.getId().toBuffer()); expect(stateTransition.getRevision()).to.equal( - identity.getRevision() + 1n, + identity.getRevision() + BigInt(1), ); expect( stateTransition.getPublicKeysToAdd().map((pk) => pk.toObject()), diff --git a/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js b/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js index 34aa3125b8d..0ac7629d94a 100644 --- a/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js @@ -72,7 +72,7 @@ describe('validateIdentityUpdateTransitionStateFactory', () => { getIdentityUpdateTransitionFixture().toObject(), ); - stateTransition.setRevision(identity.getRevision() + 1n); + stateTransition.setRevision(identity.getRevision() + BigInt(1)); stateTransition.setPublicKeyIdsToDisable(undefined); stateTransition.setPublicKeysDisabledAt(undefined); diff --git a/packages/wasm-dpp/test/unit/document/Document.spec.js b/packages/wasm-dpp/test/unit/document/Document.spec.js index 3c6521d283e..cd7972840bf 100644 --- a/packages/wasm-dpp/test/unit/document/Document.spec.js +++ b/packages/wasm-dpp/test/unit/document/Document.spec.js @@ -273,11 +273,11 @@ describe('Document', () => { describe('#setRevision/#getRevision', () => { it('should set $revision and get $revision', () => { - const revision = 5n; + const revision = BigInt(5); document.setRevision(revision); - expect(document.getRevision()).to.equal + expect(document.getRevision()).to.equal(revision); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js b/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js index 65d168e94f1..5303bbdc700 100644 --- a/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js +++ b/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js @@ -233,7 +233,7 @@ describe('IdentityFactory', () => { describe('createIdentityUpdateTransition', () => { it('should create IdentityUpdateTransition', () => { - const revision = 1n; + const revision = BigInt(1); const disablePublicKeys = [identity.getPublicKeyById(0)]; const addPublicKeys = [new IdentityPublicKeyCreateTransition({ id: 0, diff --git a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js index 68aa146130e..4f9f3c59993 100644 --- a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js +++ b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js @@ -121,7 +121,7 @@ describe('IdentityPublicKey', () => { it('should set disabledAt', () => { publicKey.setDisabledAt(123); - expect(publicKey.getDisabledAt()).to.equal(123n); + expect(publicKey.getDisabledAt()).to.equal(BigInt(123)); }); }); @@ -129,7 +129,7 @@ describe('IdentityPublicKey', () => { it('should return disabledAt', () => { publicKey.setDisabledAt(42); - expect(publicKey.getDisabledAt()).to.equal(42n); + expect(publicKey.getDisabledAt()).to.equal(BigInt(42)); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js index 1dad3dec62d..185501766b2 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js @@ -66,9 +66,9 @@ describe('IdentityUpdateTransition', () => { describe('#setRevision', () => { it('should set revision', () => { - stateTransition.setRevision(42n); + stateTransition.setRevision(BigInt(42)); - expect(stateTransition.getRevision()).to.equal(42n); + expect(stateTransition.getRevision()).to.equal(BigInt(42)); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js index 59998e8b0f9..667e619be66 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js @@ -26,7 +26,7 @@ describe('applyIdentityUpdateTransition', () => { stateTransition = new IdentityUpdateTransition( getIdentityUpdateTransitionFixture().toObject(), ); - stateTransition.setRevision(stateTransition.getRevision() + 1n); + stateTransition.setRevision(stateTransition.getRevision() + BigInt(1)); executionContext = new StateTransitionExecutionContext(); stateTransition.setExecutionContext(executionContext); From b72d8c8af207d6094dd09317c2a5837df2752824 Mon Sep 17 00:00:00 2001 From: Pawel Iwan Date: Tue, 14 Mar 2023 10:34:37 +0100 Subject: [PATCH 10/10] fix merge --- packages/wasm-dpp/src/metadata.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/wasm-dpp/src/metadata.rs b/packages/wasm-dpp/src/metadata.rs index e0e62ab7c56..b07bb0eef78 100644 --- a/packages/wasm-dpp/src/metadata.rs +++ b/packages/wasm-dpp/src/metadata.rs @@ -1,11 +1,11 @@ #![allow(clippy::from_over_into)] +use dpp::prelude::{ProtocolVersion, TimestampMillis}; pub use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; use crate::utils::ToSerdeJSONExt; use dpp::metadata::Metadata; -use dpp::util::deserializer::ProtocolVersion; use dpp::util::json_value::JsonValueExt; #[wasm_bindgen(js_name=Metadata)] @@ -52,7 +52,7 @@ impl MetadataWasm { let inner = Metadata { block_height: block_height as u64, core_chain_locked_height: core_chain_locked_height as u64, - time_ms: time_ms as u64, + time_ms: time_ms as TimestampMillis, protocol_version: protocol_version as u64 as ProtocolVersion, }; Ok(inner.into())