Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"contractKeywords": {
"type": "object",
"documentsMutable": false,
"canBeDeleted": true,
"canBeDeleted": false,
"creationRestrictionMode": 2,
"indices": [
{
Expand Down Expand Up @@ -48,7 +48,7 @@
"shortDescription": {
"type": "object",
"documentsMutable": true,
"canBeDeleted": true,
"canBeDeleted": false,
"creationRestrictionMode": 2,
"indices": [
{
Expand Down Expand Up @@ -87,7 +87,7 @@
"fullDescription": {
"type": "object",
"documentsMutable": true,
"canBeDeleted": true,
"canBeDeleted": false,
"creationRestrictionMode": 2,
"indices": [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
use crate::error::Error;
use crate::platform_types::platform::Platform;
use dpp::block::block_info::BlockInfo;
use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters;
use dpp::data_contract::associated_token::token_configuration::v0::TokenConfigurationV0;
use dpp::data_contract::associated_token::token_configuration_convention::accessors::v0::TokenConfigurationConventionV0Getters;
use dpp::data_contract::associated_token::token_configuration_convention::v0::TokenConfigurationConventionV0;
use dpp::data_contract::associated_token::token_configuration_localization::v0::TokenConfigurationLocalizationV0;
use dpp::data_contract::associated_token::token_configuration_localization::TokenConfigurationLocalization;
use dpp::data_contract::associated_token::token_distribution_rules::v0::TokenDistributionRulesV0;
use dpp::data_contract::associated_token::token_keeps_history_rules::v0::TokenKeepsHistoryRulesV0;
use dpp::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
Expand Down Expand Up @@ -30,10 +34,6 @@ use drive::grovedb::TransactionArg;
use rand::rngs::StdRng;
use rand::SeedableRng;
use std::sync::LazyLock;
use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters;
use dpp::data_contract::associated_token::token_configuration_convention::accessors::v0::TokenConfigurationConventionV0Getters;
use dpp::data_contract::associated_token::token_configuration_localization::TokenConfigurationLocalization;
use dpp::data_contract::associated_token::token_configuration_localization::v0::TokenConfigurationLocalizationV0;

const IDENTITY_ID_1: Identifier = Identifier::new([1; 32]);
const IDENTITY_ID_2: Identifier = Identifier::new([2; 32]);
Expand Down Expand Up @@ -271,14 +271,17 @@ impl<C> Platform<C> {
description: Some("Some token description".to_string()),
});

token_configuration.conventions_mut().localizations_mut().insert(
"en".to_string(),
TokenConfigurationLocalization::V0(TokenConfigurationLocalizationV0 {
should_capitalize: false,
singular_form: "cat".to_string(),
plural_form: "cats".to_string(),
}),
);
token_configuration
.conventions_mut()
.localizations_mut()
.insert(
"en".to_string(),
TokenConfigurationLocalization::V0(TokenConfigurationLocalizationV0 {
should_capitalize: false,
singular_form: "cat".to_string(),
plural_form: "cats".to_string(),
}),
);

let tokens = [
(0, token_configuration.clone()),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use std::collections::HashSet;
use dpp::consensus::basic::BasicError;
use crate::error::Error;
use dpp::consensus::basic::data_contract::{DuplicateKeywordsError, InvalidDataContractVersionError, InvalidDescriptionLengthError, InvalidKeywordLengthError, InvalidTokenBaseSupplyError, NonContiguousContractTokenPositionsError, TooManyKeywordsError};
use dpp::consensus::basic::data_contract::{
DuplicateKeywordsError, InvalidDataContractVersionError, InvalidDescriptionLengthError,
InvalidKeywordLengthError, InvalidTokenBaseSupplyError,
NonContiguousContractTokenPositionsError, TooManyKeywordsError,
};
use dpp::consensus::basic::BasicError;
use dpp::consensus::ConsensusError;
use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters;
use dpp::data_contract::{TokenContractPosition, INITIAL_DATA_CONTRACT_VERSION};
Expand All @@ -10,6 +13,7 @@ use dpp::state_transition::data_contract_create_transition::accessors::DataContr
use dpp::state_transition::data_contract_create_transition::DataContractCreateTransition;
use dpp::validation::SimpleConsensusValidationResult;
use dpp::version::PlatformVersion;
use std::collections::HashSet;

pub(in crate::execution::validation::state_transition::state_transitions::data_contract_create) trait DataContractCreateStateTransitionBasicStructureValidationV0
{
Expand Down Expand Up @@ -78,16 +82,15 @@ impl DataContractCreateStateTransitionBasicStructureValidationV0 for DataContrac
}
}


// Validate there are no more than 20 keywords
if self.data_contract().keywords().len() > 20 {
return Ok(SimpleConsensusValidationResult::new_with_error(
ConsensusError::BasicError(
BasicError::TooManyKeywordsError(TooManyKeywordsError::new(
ConsensusError::BasicError(BasicError::TooManyKeywordsError(
TooManyKeywordsError::new(
self.data_contract().id(),
self.data_contract().keywords().len() as u8,
))
)
),
)),
));
}

Expand All @@ -97,24 +100,21 @@ impl DataContractCreateStateTransitionBasicStructureValidationV0 for DataContrac
// First check keyword length
if keyword.len() < 3 || keyword.len() > 50 {
return Ok(SimpleConsensusValidationResult::new_with_error(
ConsensusError::BasicError(
BasicError::InvalidKeywordLengthError(InvalidKeywordLengthError::new(
ConsensusError::BasicError(BasicError::InvalidKeywordLengthError(
InvalidKeywordLengthError::new(
self.data_contract().id(),
keyword.to_string(),
)),
)
),
)),
));
}

// Then check uniqueness
if !seen_keywords.insert(keyword) {
return Ok(SimpleConsensusValidationResult::new_with_error(
ConsensusError::BasicError(
BasicError::DuplicateKeywordsError(DuplicateKeywordsError::new(
self.data_contract().id(),
keyword.to_string(),
)),
)
ConsensusError::BasicError(BasicError::DuplicateKeywordsError(
DuplicateKeywordsError::new(self.data_contract().id(), keyword.to_string()),
)),
));
}
}
Expand All @@ -123,19 +123,16 @@ impl DataContractCreateStateTransitionBasicStructureValidationV0 for DataContrac
if let Some(description) = self.data_contract().description() {
if !(description.len() >= 3 && description.len() <= 100) {
return Ok(SimpleConsensusValidationResult::new_with_error(
ConsensusError::BasicError(
BasicError::InvalidDescriptionLengthError(
InvalidDescriptionLengthError::new(
self.data_contract().id(),
description.to_string(),
),
ConsensusError::BasicError(BasicError::InvalidDescriptionLengthError(
InvalidDescriptionLengthError::new(
self.data_contract().id(),
description.to_string(),
),
)
)),
));
}
}


Ok(SimpleConsensusValidationResult::new())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1298,7 +1298,7 @@ mod tests {
let processing_result = platform
.platform
.process_raw_state_transitions(
&vec![tx_bytes],
&[tx_bytes],
&platform_state,
&BlockInfo::default(),
&transaction,
Expand Down Expand Up @@ -1488,7 +1488,7 @@ mod tests {
let processing_result = platform
.platform
.process_raw_state_transitions(
&vec![tx_bytes],
&[tx_bytes],
&platform_state,
&BlockInfo::default(),
&transaction,
Expand Down Expand Up @@ -1973,7 +1973,7 @@ mod tests {
.unwrap();
assert_eq!(
*fetched.contract.keywords(),
vec!["newA", "newB", "newC"]
["newA", "newB", "newC"]
.iter()
.map(|&s| s.to_string())
.collect::<Vec<String>>()
Expand Down Expand Up @@ -2301,8 +2301,8 @@ mod tests {
&identity,
&signer,
&key,
&"old1",
&platform_version,
"old1",
platform_version,
);

// verify initial docs
Expand All @@ -2316,15 +2316,15 @@ mod tests {
&identity,
&signer,
&key,
&"newA",
&platform_version,
"newA",
platform_version,
)
.expect("update should succeed");

// fetch contract – description updated?
let fetched = platform
.drive
.fetch_contract(cid.into(), None, None, None, &platform_version)
.fetch_contract(cid.into(), None, None, None, platform_version)
.value
.unwrap()
.unwrap();
Expand All @@ -2334,7 +2334,7 @@ mod tests {
);

// search‑contract docs updated?
let docs_after = description_docs_for_contract(&platform, cid, &platform_version);
let docs_after = description_docs_for_contract(&platform, cid, platform_version);
assert_eq!(docs_after, "newA".to_string());
// old docs gone
assert!(!docs_after.contains(&"old1".to_string()));
Expand Down
Loading
Loading