Description
There is a mismatch between the maximum keyword count enforced during contract creation vs contract update.
Creation (schema validation)
packages/rs-dpp/schema/meta_schemas/document/v0/document-meta.json line 589:
"description": "List of up to 20 descriptive keywords for the contract, used in the Keyword Search contract"
The schema enforces maxItems: 20 (implicitly via description — should verify exact constraint).
Update (Rust validation)
packages/rs-dpp/src/data_contract/methods/validate_update/v0/mod.rs lines 271-276:
if new_data_contract.keywords().len() > 50 {
return Ok(SimpleConsensusValidationResult::new_with_error(
TooManyKeywordsError::new(self.id(), new_data_contract.keywords().len() as u8).into(),
));
}
Struct documentation
packages/rs-dpp/src/data_contract/v1/data_contract.rs line 66-67:
This vector can be left empty, but if populated, it must contain unique keywords.
The maximum number of keywords is limited to 20.
Impact
A contract that was created with ≤20 keywords can be updated to have 21–50 keywords, bypassing the intended creation constraint. This is likely unintentional since the doc comment and schema both say 20.
Suggested fix
Align the Rust update validation to use 20 instead of 50 (or update the schema and docs to 50 if the higher limit is intentional).
Description
There is a mismatch between the maximum keyword count enforced during contract creation vs contract update.
Creation (schema validation)
packages/rs-dpp/schema/meta_schemas/document/v0/document-meta.jsonline 589:The schema enforces
maxItems: 20(implicitly via description — should verify exact constraint).Update (Rust validation)
packages/rs-dpp/src/data_contract/methods/validate_update/v0/mod.rslines 271-276:Struct documentation
packages/rs-dpp/src/data_contract/v1/data_contract.rsline 66-67:Impact
A contract that was created with ≤20 keywords can be updated to have 21–50 keywords, bypassing the intended creation constraint. This is likely unintentional since the doc comment and schema both say 20.
Suggested fix
Align the Rust update validation to use 20 instead of 50 (or update the schema and docs to 50 if the higher limit is intentional).