-
Notifications
You must be signed in to change notification settings - Fork 44
feat(platform)!: creator id and improved verification of document uniqueness before insertion #2790
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughAdds creator_id support to DocumentV0 (field, accessors, CBOR/JSON and v2 serialization), threads data-contract system/config version into DocumentType schema builders and try_from_schema, implements versioned system_property/creator logic, and propagates these through state transitions, Drive uniqueness validation, platform versions, SDK/FFI, and tests. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Client
participant SDK
participant DPP as DPP
participant ST as StateTransition
participant Drive as Drive
participant PV as PlatformVersion
Client->>SDK: Build DocumentCreateTransition
SDK->>DPP: Construct DocumentV0 (creator_id optional)
SDK->>ST: try_from_create_transition(..., contract, document_type, PV)
ST->>DPP: should_use_creator_id(contract_system_ver, contract_config_ver, PV)
DPP-->>ST: bool
alt true
ST->>DPP: Insert $creatorId = owner_id into document/properties
end
ST->>Drive: validate_uniqueness_of_data_v1(request with creator_id)
Drive-->>ST: Ok / DuplicateUniqueIndexError
ST-->>Client: Transition result
sequenceDiagram
autonumber
participant DC as DataContract
participant DTP as DocumentType
participant PV as PlatformVersion
DC->>DTP: create_document_types_from_document_schemas(id, system_ver, config_ver, schemas...)
DTP->>DTP: try_from_schema(system_ver, config_ver, name, schema...)
DTP->>DTP: system_properties_contains(system_ver, config_ver, transferable, trade_mode, prop, PV)
alt should_add_creator_id enabled
DTP-->>DC: treat CREATOR_ID as system property (disallow/index logic)
else
DTP-->>DC: default system properties only
end
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ gRPC Query Coverage Report
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
packages/rs-dpp/src/data_contract/v0/serialization/mod.rs (2)
79-119
: Potential compilation error:data_contract_data
used after destructuring.At line 97,
data_contract_data.config.version()
is referenced, butdata_contract_data
was already destructured at lines 85-92. This should cause a compilation error sincedata_contract_data
is no longer available after being moved/destructured.Apply this fix:
let document_types = DocumentType::create_document_types_from_document_schemas( id, 0, - data_contract_data.config.version(), + config.version(), document_schemas, schema_defs.as_ref(), &BTreeMap::new(),
121-162
: Potential compilation error:data_contract_data
used after destructuring.At line 140,
data_contract_data.config.version()
is referenced, butdata_contract_data
was already destructured at lines 127-135. This should cause a compilation error sincedata_contract_data
is no longer available after being moved/destructured.Apply this fix:
let document_types = DocumentType::create_document_types_from_document_schemas( id, 0, - data_contract_data.config.version(), + config.version(), document_schemas, schema_defs.as_ref(), &BTreeMap::new(),packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/mod.rs (1)
27-32
: Complete the parameter documentation.The docstring at line 27 documents
data_contract_system_version
but line 42 addscontract_config_version
without corresponding documentation. Add a docstring entry forcontract_config_version
to maintain consistency.Apply this diff to complete the documentation:
/// * `data_contract_system_version`: The version of the data contract +/// * `contract_config_version`: The version of the contract configuration /// * `contract_document_types_raw`: Vector representing the raw contract document types.
🧹 Nitpick comments (13)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/mod.rs (1)
4687-4753
: LGTM! Test correctly validates backward compatibility.This test ensures that data contracts using the creator_id index fail appropriately on protocol version 9, which does not support this feature. The test structure is clear and follows established patterns.
Optional refactor: The two tests in this module share significant boilerplate. If you add more protocol-version tests in the future, consider extracting a helper function to reduce duplication.
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (1)
677-920
: LGTM! Test correctly validates v0 contract compatibility.The test appropriately verifies that when using a v0 contract config (even with the latest platform version), the system correctly omits creatorId to maintain compatibility with v0 document serialization. The fee assertions match the pre-creatorId test, confirming consistent behavior.
Note: This test shares significant code with
test_document_transfer_on_document_type_that_is_transferable_before_creator_id
. Consider extracting common setup/assertion logic into a helper function to reduce duplication.packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
14-14
: Add documentation comment for system_version_type method.The new
system_version_type
method is missing a documentation comment, while all other methods in theDataContractV0Getters
trait have doc comments (e.g., lines 10-11, 16-17, 19-20). This makes the purpose and return values unclear to users of the trait.Apply this diff to add documentation:
fn id_ref(&self) -> &Identifier; + /// Returns the system version type of the data contract (0 for V0, 1 for V1). fn system_version_type(&self) -> u16;
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
157-163
: Consider extracting duplicated creator ID logic.The same creator ID insertion logic appears in both
try_from_owned_create_transition_action_v0
(lines 157-163) andtry_from_create_transition_action_v0
(lines 286-292). Consider extracting this into a helper function to reduce duplication and improve maintainability.For example, introduce a helper in this module:
fn maybe_insert_creator_id( data: &mut BTreeMap<String, Value>, document_type: &DocumentType, system_version: u16, config_version: u16, owner_id: Identifier, platform_version: &PlatformVersion, ) -> Result<(), ProtocolError> { if document_type.should_use_creator_id(system_version, config_version, platform_version)? { data.insert(CREATOR_ID.to_string(), owner_id.into()); } Ok(()) }Then call it in both functions:
- if document_type.should_use_creator_id( - data_contract.contract.system_version_type(), - data_contract.contract.config().version(), - platform_version, - )? { - data.insert(CREATOR_ID.to_string(), owner_id.into()); - } + maybe_insert_creator_id( + &mut data, + &document_type, + data_contract.contract.system_version_type(), + data_contract.contract.config().version(), + owner_id, + platform_version, + )?;Also applies to: 286-292
packages/rs-dpp/src/util/json_schema.rs (1)
185-186
: Consider documenting the hardcoded system version.The hardcoded literal
1
fordata_contract_system_version
may benefit from a brief comment explaining its choice in this test context.let document_type = DocumentType::try_from_schema( Identifier::random(), + // System version 1 used for this test 1, config.version(), "doc",
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs (2)
201-201
: Minor: Consider documenting the mutability change.The
data
variable is now mutable (owned path) andproperties
is introduced (non-owned path) to support conditionalCREATOR_ID
insertion. This is a subtle but important change in the data flow.Consider adding a brief inline comment explaining why
data
must be mutable:// Make data mutable to conditionally insert CREATOR_ID before constructing the document let DocumentCreateTransitionV0 { base, mut data, .. } = v0;Also applies to: 314-314
190-215
: Add rs-dpp tests for$creatorId
insertion
- Cover
should_use_creator_id
behavior for protocol versions 0 and 1 in DocumentCreateTransition v0.$creatorId
is defined indocument/fields.rs
and only inserted when the DataContract schema includes that system property, with downstream validation still applied.- Insertion deliberately overrides any user‐supplied
$creatorId
; confirm this matches the protocol specification.packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs (1)
108-113
: Good: Sanitizing CREATOR_ID from user input before validation.The code correctly:
- Clones the data to avoid mutating the original
- Removes
CREATOR_ID
to prevent user manipulation- Validates only the user-defined properties
This ensures
CREATOR_ID
is system-managed and not user-settable during document creation.Minor: Consider performance impact of cloning.
The
.clone()
on line 108 creates a copy of the entire data map just to remove one entry. If the data is large, this could be inefficient.If performance becomes a concern, consider passing a sanitization predicate to the validation function instead:
// Alternative approach (if the validation API supports it): data_contract .validate_document_properties_filtered( document_type_name, self.data(), |key| key != CREATOR_ID, platform_version ) .map_err(Error::Protocol)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs (1)
99-118
: Consider the data cloning cost.Similar to the create transition validation, the code clones the entire data map on line 99. For large documents, this could have performance implications.
If the transition's data is not used elsewhere after this point, consider taking ownership or using a mutable reference to avoid the clone. Alternatively, if performance profiling shows this is a hotspot, the data structure could be modified in-place if ownership allows.
packages/rs-sdk/tests/fetch/common.rs (1)
40-41
: Parameterize test utility’s system version
Replace the hardcoded1
inDocumentType::try_from_schema
with the current constant (PlatformVersionCurrentVersion::VERSION
) or accept it as an argument, ensuring tests automatically track future protocol version bumps. (common.rs)packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs (1)
23-30
: Consider simplifying the parameter list.The function signature takes 6 parameters, several of which are only used in the version 1 branch. Consider whether
transferable
andtrade_mode
could be combined into a single enum or struct to reduce parameter count and improve maintainability.packages/strategy-tests/src/operations.rs (1)
429-442
: Call site correctly updated, but error handling could be improved.The
DocumentType::try_from_schema
call correctly includes the two new version parameters (contract.system_version_type()
andcontract.config().version()
) before thename_str
argument, aligning with the updated signature.However, the
.expect()
on line 442 will panic on deserialization failure. Consider propagating the error properly instead:let document_type = deserialized.document_type.and_then(|value| { match value { Value::Map(map) => { - map.into_iter() + let result: Result<Option<DocumentType>, ProtocolError> = map.into_iter() .map(|(name, schema_json)| { let name_str = name.to_str().expect( "Couldn't convert document type name to str in deserialization", ); let owner_id = contract.owner_id(); DocumentType::try_from_schema( owner_id, contract.system_version_type(), contract.config().version(), name_str, schema_json, None, contract.tokens(), contract.config(), full_validation, &mut vec![], platform_version, ) - .expect("Failed to reconstruct DocumentType from schema") }) - .next() + .next() + .transpose(); + result.ok()? } _ => None, } });Or return the error from the outer function if this deserialization failure should be fatal.
packages/rs-dpp/src/document/extended_document/v0/mod.rs (1)
385-387
: Keep the conditional for "$creatorId" and add testsThe conditional is correct — Value::replace_at_path can error if the key is missing and serialize.rs treats $creatorId as optional. Add unit tests covering both presence and absence of "$creatorId" (from_untrusted_platform_value path and serialization round-trip).
Files to check: packages/rs-dpp/src/document/extended_document/v0/mod.rs, packages/rs-platform-value/src/replace.rs, packages/rs-dpp/src/document/v0/serialize.rs.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
Cargo.lock
is excluded by!**/*.lock
📒 Files selected for processing (56)
packages/rs-dpp/src/data_contract/accessors/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/config/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/mod.rs
(4 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs
(3 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs
(2 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/should_use_creator_id/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs
(4 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v0/mod.rs
(8 hunks)packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v1/mod.rs
(8 hunks)packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs
(22 hunks)packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
(2 hunks)packages/rs-dpp/src/data_contract/methods/validate_document/v0/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/v0/methods/schema.rs
(3 hunks)packages/rs-dpp/src/data_contract/v0/serialization/mod.rs
(2 hunks)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/v1/methods/schema.rs
(3 hunks)packages/rs-dpp/src/data_contract/v1/serialization/mod.rs
(2 hunks)packages/rs-dpp/src/document/document_factory/v0/mod.rs
(0 hunks)packages/rs-dpp/src/document/extended_document/v0/mod.rs
(1 hunks)packages/rs-dpp/src/document/fields.rs
(1 hunks)packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs
(1 hunks)packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs
(1 hunks)packages/rs-dpp/src/document/specialized_document_factory/v0/mod.rs
(0 hunks)packages/rs-dpp/src/document/v0/serialize.rs
(8 hunks)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs
(7 hunks)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
(7 hunks)packages/rs-dpp/src/util/json_schema.rs
(1 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs
(2 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_replace_transition_action/advanced_structure_v0/mod.rs
(2 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
(6 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
(3 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/mod.rs
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-format-version-0.json
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable.json
(2 hunks)packages/rs-drive/src/query/conditions.rs
(1 hunks)packages/rs-drive/src/query/test_index.rs
(1 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs
(3 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
(2 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
(4 hunks)packages/rs-drive/src/util/object_size_info/document_info.rs
(1 hunks)packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
(1 hunks)packages/rs-drive/tests/query_tests.rs
(3 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/mod.rs
(2 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v1.rs
(1 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v2.rs
(1 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v3.rs
(1 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/mod.rs
(1 hunks)packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/v3.rs
(1 hunks)packages/rs-platform-version/src/version/v10.rs
(2 hunks)packages/rs-sdk/tests/fetch/common.rs
(1 hunks)packages/strategy-tests/src/operations.rs
(1 hunks)packages/wasm-sdk/Cargo.toml
(1 hunks)
💤 Files with no reviewable changes (2)
- packages/rs-dpp/src/document/document_factory/v0/mod.rs
- packages/rs-dpp/src/document/specialized_document_factory/v0/mod.rs
🧰 Additional context used
📓 Path-based instructions (5)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs
: Format Rust code with cargo fmt
Run Clippy linter for Rust code
Files:
packages/rs-dpp/src/document/fields.rs
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs
packages/rs-dpp/src/data_contract/accessors/v0/mod.rs
packages/rs-dpp/src/data_contract/v0/accessors/mod.rs
packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
packages/rs-dpp/src/document/extended_document/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/mod.rs
packages/rs-dpp/src/data_contract/accessors/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v2.rs
packages/rs-drive/src/query/conditions.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v1.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs
packages/rs-dpp/src/data_contract/v1/accessors/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v0/mod.rs
packages/rs-dpp/src/data_contract/config/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/util/object_size_info/document_info.rs
packages/rs-dpp/src/data_contract/v0/serialization/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_replace_transition_action/advanced_structure_v0/mod.rs
packages/rs-drive/tests/query_tests.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v1/mod.rs
packages/strategy-tests/src/operations.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/mod.rs
packages/rs-drive/src/query/test_index.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v3.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
packages/rs-sdk/tests/fetch/common.rs
packages/rs-dpp/src/data_contract/v1/methods/schema.rs
packages/rs-platform-version/src/version/v10.rs
packages/rs-dpp/src/data_contract/methods/validate_document/v0/mod.rs
packages/rs-dpp/src/data_contract/v0/methods/schema.rs
packages/rs-dpp/src/util/json_schema.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/v3.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/should_use_creator_id/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs
packages/rs-dpp/src/data_contract/v1/serialization/mod.rs
packages/rs-dpp/src/document/v0/serialize.rs
packages/rs-*/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
packages/rs-*/**/*.rs
: Use rustfmt defaults for Rust code (format via cargo fmt --all)
Keep Rust code clippy-clean (cargo clippy)
Name Rust modules in snake_case
Use PascalCase for Rust types
Use SCREAMING_SNAKE_CASE for Rust constants
Files:
packages/rs-dpp/src/document/fields.rs
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs
packages/rs-dpp/src/data_contract/accessors/v0/mod.rs
packages/rs-dpp/src/data_contract/v0/accessors/mod.rs
packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
packages/rs-dpp/src/document/extended_document/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/mod.rs
packages/rs-dpp/src/data_contract/accessors/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v2.rs
packages/rs-drive/src/query/conditions.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v1.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs
packages/rs-dpp/src/data_contract/v1/accessors/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v0/mod.rs
packages/rs-dpp/src/data_contract/config/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/util/object_size_info/document_info.rs
packages/rs-dpp/src/data_contract/v0/serialization/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_replace_transition_action/advanced_structure_v0/mod.rs
packages/rs-drive/tests/query_tests.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v1/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/mod.rs
packages/rs-drive/src/query/test_index.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_contract_versions/v3.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
packages/rs-sdk/tests/fetch/common.rs
packages/rs-dpp/src/data_contract/v1/methods/schema.rs
packages/rs-platform-version/src/version/v10.rs
packages/rs-dpp/src/data_contract/methods/validate_document/v0/mod.rs
packages/rs-dpp/src/data_contract/v0/methods/schema.rs
packages/rs-dpp/src/util/json_schema.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
packages/rs-platform-version/src/version/dpp_versions/dpp_document_versions/v3.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/should_use_creator_id/mod.rs
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs
packages/rs-dpp/src/data_contract/v1/serialization/mod.rs
packages/rs-dpp/src/document/v0/serialize.rs
packages/wasm-sdk/**
📄 CodeRabbit inference engine (CLAUDE.md)
Keep WASM SDK docs in sync (run generate_docs.py) when updating the WASM SDK
Files:
packages/wasm-sdk/Cargo.toml
packages/**/tests/**
📄 CodeRabbit inference engine (AGENTS.md)
Place unit and integration tests alongside each package in packages//tests
Files:
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable.json
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/tests/query_tests.rs
packages/rs-sdk/tests/fetch/common.rs
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-format-version-0.json
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
📄 CodeRabbit inference engine (AGENTS.md)
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
: Name tests descriptively, starting with “should …”
Unit/integration tests must not perform network calls; mock dependencies instead
Files:
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/tests/query_tests.rs
packages/rs-sdk/tests/fetch/common.rs
🧠 Learnings (4)
📓 Common learnings
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
📚 Learning: 2024-11-03T10:38:00.762Z
Learnt from: shumkov
PR: dashpay/platform#2305
File: packages/rs-drive-abci/src/abci/handler/info.rs:0-0
Timestamp: 2024-11-03T10:38:00.762Z
Learning: In this context, using `.unwrap()?` on the result of `root_hash` is acceptable and will not cause a panic.
Applied to files:
packages/rs-drive/tests/query_tests.rs
📚 Learning: 2025-04-11T09:08:05.652Z
Learnt from: pauldelucia
PR: dashpay/platform#2523
File: packages/rs-drive/src/drive/contract/update/update_contract/v1/update_description/v1/mod.rs:147-151
Timestamp: 2025-04-11T09:08:05.652Z
Learning: Description length validation for data contracts is already handled in the data contract validation process, specifically in packages/rs-dpp/src/data_contract/methods/validate_update/v0/mod.rs.
Applied to files:
packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs
📚 Learning: 2025-04-11T09:08:05.652Z
Learnt from: pauldelucia
PR: dashpay/platform#2523
File: packages/rs-drive/src/drive/contract/update/update_contract/v1/update_description/v1/mod.rs:147-151
Timestamp: 2025-04-11T09:08:05.652Z
Learning: Description length validation for data contracts (ensuring it's between 3 and 100 characters) is already handled at the data contract validation level in packages/rs-dpp/src/data_contract/methods/validate_update/v0/mod.rs, making additional checks in the update operations redundant.
Applied to files:
packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs
🧬 Code graph analysis (27)
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs (1)
packages/rs-dpp/src/document/v0/serialize.rs (4)
serialize_v2
(490-711)document_type
(883-915)document_type
(1106-1131)document_type
(1347-1372)
packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (3)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
system_version_type
(41-46)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
system_version_type
(24-26)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
system_version_type
(33-35)
packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (2)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
system_version_type
(41-46)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
system_version_type
(33-35)
packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs (1)
packages/rs-drive/src/query/mod.rs (2)
contract
(1040-1045)contract
(1143-1148)
packages/rs-dpp/src/data_contract/accessors/mod.rs (3)
packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
system_version_type
(14-14)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
system_version_type
(24-26)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
system_version_type
(33-35)
packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (3)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
system_version_type
(41-46)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
system_version_type
(14-14)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
system_version_type
(24-26)
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v0/mod.rs (3)
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs (1)
system_properties_contains
(23-56)packages/rs-dpp/src/data_contract/document_type/accessors/mod.rs (6)
documents_transferable
(140-145)documents_transferable
(357-362)documents_transferable
(520-525)trade_mode
(147-152)trade_mode
(364-369)trade_mode
(527-532)packages/rs-dpp/src/data_contract/document_type/v0/accessors.rs (2)
documents_transferable
(90-92)trade_mode
(94-96)
packages/rs-dpp/src/data_contract/config/mod.rs (5)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
version
(48-53)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
version
(17-17)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
version
(28-30)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
version
(37-39)packages/rs-dpp/src/data_contract/serialized_version/mod.rs (1)
version
(137-142)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (11)
packages/rs-dpp/src/data_contract/accessors/mod.rs (4)
system_version_type
(41-46)config
(128-133)version
(48-53)id
(27-32)packages/rs-dpp/src/data_contract/config/mod.rs (1)
version
(30-35)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/mod.rs (1)
setup_identity
(135-191)packages/rs-dpp/src/data_contract/document_type/v1/accessors.rs (1)
documents_mutable
(85-87)packages/rs-dpp/src/data_contract/document_type/accessors/mod.rs (3)
documents_mutable
(126-131)documents_mutable
(343-348)documents_mutable
(506-511)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (2)
new_document_creation_transition_from_document
(93-134)new_document_transfer_transition_from_document
(179-220)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/v0_methods.rs (2)
new_document_creation_transition_from_document
(102-143)new_document_transfer_transition_from_document
(230-271)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (2)
new_document_creation_transition_from_document
(91-145)new_document_transfer_transition_from_document
(204-260)packages/rs-drive-abci/src/platform_types/state_transitions_processing_result/mod.rs (4)
valid_count
(89-91)invalid_paid_count
(79-81)invalid_unpaid_count
(84-86)aggregated_fees
(99-101)packages/rs-drive/src/query/mod.rs (1)
from_sql_expr
(824-982)packages/rs-dpp/src/fee/fee_result/refunds.rs (1)
calculate_refunds_amount_for_identity
(155-164)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs (1)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
data
(55-55)
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs (1)
packages/rs-dpp/src/document/v0/serialize.rs (4)
from_bytes_v2
(1155-1397)document_type
(883-915)document_type
(1106-1131)document_type
(1347-1372)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_replace_transition_action/advanced_structure_v0/mod.rs (1)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
data
(55-55)
packages/rs-dpp/src/data_contract/document_type/class_methods/mod.rs (1)
packages/rs-dpp/src/data_contract/document_type/class_methods/should_use_creator_id/mod.rs (3)
should_use_creator_id
(11-24)should_use_creator_id
(30-43)should_use_creator_id
(49-62)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs (1)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
data
(55-55)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (4)
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs (1)
data_contract
(14-67)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs (1)
data_contract
(14-68)packages/rs-dpp/src/data_contract/v0/serialization/mod.rs (3)
data_contract
(49-77)data_contract
(79-119)data_contract
(121-162)packages/rs-dpp/src/data_contract/v1/serialization/mod.rs (3)
data_contract
(48-76)data_contract
(78-127)data_contract
(129-191)
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/v1/mod.rs (2)
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs (1)
system_properties_contains
(23-56)packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)
packages/rs-drive/src/query/test_index.rs (4)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
config
(43-43)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
config
(98-100)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
config
(107-109)
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs (4)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
config
(43-43)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
config
(98-100)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
config
(107-109)
packages/rs-dpp/src/data_contract/document_type/methods/validate_update/v0/mod.rs (4)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
config
(43-43)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
config
(98-100)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
config
(107-109)
packages/rs-sdk/tests/fetch/common.rs (4)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
config
(43-43)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
config
(98-100)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
config
(107-109)
packages/rs-dpp/src/data_contract/v1/methods/schema.rs (2)
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs (1)
data_contract
(14-68)packages/rs-dpp/src/data_contract/v1/serialization/mod.rs (3)
data_contract
(48-76)data_contract
(78-127)data_contract
(129-191)
packages/rs-dpp/src/data_contract/v0/methods/schema.rs (3)
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs (1)
data_contract
(14-67)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs (1)
data_contract
(14-68)packages/rs-dpp/src/data_contract/v0/serialization/mod.rs (3)
data_contract
(49-77)data_contract
(79-119)data_contract
(121-162)
packages/rs-dpp/src/util/json_schema.rs (4)
packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
config
(128-133)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
config
(43-43)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
config
(98-100)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (1)
config
(107-109)
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs (4)
packages/rs-dpp/src/data_contract/v0/serialization/mod.rs (3)
data_contract
(49-77)data_contract
(79-119)data_contract
(121-162)packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
owner_id
(55-60)packages/rs-dpp/src/data_contract/accessors/v0/mod.rs (1)
owner_id
(20-20)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
owner_id
(32-34)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/mod.rs (1)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs (18)
execution
(146-157)execution
(159-215)execution
(217-258)execution
(260-316)execution
(364-440)execution
(442-475)execution
(477-548)execution
(550-564)execution
(566-669)execution
(671-758)execution
(760-775)execution
(788-871)execution
(873-944)execution
(946-979)execution
(982-1016)None
(1044-1044)None
(1054-1054)None
(1399-1399)
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs (4)
packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v0/mod.rs (1)
data_contract
(14-67)packages/rs-dpp/src/data_contract/document_type/class_methods/create_document_types_from_document_schemas/v1/mod.rs (1)
data_contract
(14-68)packages/rs-dpp/src/data_contract/v0/serialization/mod.rs (3)
data_contract
(49-77)data_contract
(79-119)data_contract
(121-162)packages/rs-dpp/src/data_contract/v1/serialization/mod.rs (3)
data_contract
(48-76)data_contract
(78-127)data_contract
(129-191)
packages/rs-dpp/src/document/v0/serialize.rs (2)
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs (1)
serialize_v2
(26-26)packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs (1)
from_bytes_v2
(31-37)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (21)
- GitHub Check: Rust packages (drive) / Tests
- GitHub Check: Rust packages (drive) / Unused dependencies
- GitHub Check: Rust packages (drive) / Formatting
- GitHub Check: Rust packages (drive) / Linting
- GitHub Check: Rust packages (wasm-dpp) / Tests
- GitHub Check: Rust packages (rs-sdk-ffi) / Tests
- GitHub Check: Rust packages (dash-sdk) / Unused dependencies
- GitHub Check: Rust packages (wasm-sdk) / Unused dependencies
- GitHub Check: Rust packages (dash-sdk) / Linting
- GitHub Check: Rust packages (dash-sdk) / Check each feature
- GitHub Check: Rust packages (dash-sdk) / Tests
- GitHub Check: Rust packages (wasm-sdk) / Tests
- GitHub Check: Rust packages (wasm-sdk) / Linting
- GitHub Check: Build Docker images (Dashmate helper, dashmate-helper, dashmate-helper) / Build Dashmate helper image
- GitHub Check: Build Docker images (DAPI, dapi, dapi) / Build DAPI image
- GitHub Check: Build Docker images (Drive, drive, drive-abci) / Build Drive image
- GitHub Check: Build JS packages / Build JS
- GitHub Check: Rust crates security audit
- GitHub Check: Build rs-sdk-ffi for iOS targets (aarch64-apple-ios)
- GitHub Check: Build rs-sdk-ffi for iOS targets (aarch64-apple-ios-sim)
- GitHub Check: Swift SDK and Example build (warnings as errors)
.../batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
Outdated
Show resolved
Hide resolved
} | ||
} | ||
version => Err(ProtocolError::UnknownVersionMismatch { | ||
method: "DocumentType::system_properties".to_string(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Invlid method name
contract_config_version: u16, | ||
transferable: Transferable, | ||
trade_mode: TradeMode, | ||
index_name: &str, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
property_name ?
} | ||
|
||
let mut data = self.data().clone(); | ||
data.remove(CREATOR_ID); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we remove it here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We remove it because it's not part of the schema. So it would cause a validation issue if we would try to validate with it there.
} | ||
|
||
let mut data = self.data().clone(); | ||
data.remove(CREATOR_ID); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
removed and did things a bit cleaner
}; | ||
|
||
let mut data = data.clone(); | ||
if let Some(original_creator_id) = original_creator_id { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
System field is not supposed to be in data by design, isn't?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well... if it's part of the overlying struct... we would need a new document structure version. Seemed like this was easier.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed things around. This basically means that we probably should not have DocumentV0, and should just have Document since they serialize a special way.
data_contract.contract.config().version(), | ||
platform_version, | ||
)? { | ||
data.insert(CREATOR_ID.to_string(), owner_id.into()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we insert to data?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
answered above.
platform_version: &PlatformVersion, | ||
) -> Result<SimpleConsensusValidationResult, ProtocolError> { | ||
// Make sure that the document type is defined in the contract | ||
let Some(document_type) = self.document_type_optional_for_name(name) else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we remove it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It wasn't actually being used.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean validate_document_v0
is calling or we already have these checks self.validate_document_properties_v0 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
packages/wasm-sdk/src/state_transitions/documents/mod.rs (2)
930-945
: Preserve creator_id in document_delete.The
document_delete
method fetches the existing document (line 907-909) to get the current revision but doesn't preserve thecreator_id
when constructing the deletion document. Thecreator_id
should be copied fromexisting_doc
to maintain consistency.Apply this diff:
let document = Document::V0(DocumentV0 { id: doc_id, owner_id: owner_identifier, properties: Default::default(), revision: Some(current_revision), // Use the actual current revision created_at: None, updated_at: None, transferred_at: None, created_at_block_height: None, updated_at_block_height: None, transferred_at_block_height: None, created_at_core_block_height: None, updated_at_core_block_height: None, transferred_at_core_block_height: None, - creator_id: None, + creator_id: existing_doc.creator_id(), });
601-620
: Preserve the original creator_id in document replace transitions.
In packages/wasm-sdk/src/state_transitions/documents/mod.rs (around theDocument::V0
instantiation), replace the hard-codedcreator_id: None
with the original document’screator_id
(e.g. fetch the existing document and use its.creator_id()
) so that immutable creator metadata isn’t inadvertently cleared.
🧹 Nitpick comments (2)
packages/rs-dpp/src/data_contract/document_type/random_document.rs (1)
351-351
: Consider parameterizing or randomizingcreator_id
for comprehensive test coverage.The field is hardcoded to
None
. While this is correct for backwards compatibility and the simplest implementation, a random document generator might benefit from optionally populatingcreator_id
to test creator_id-aware code paths. Consider:
- Adding an optional
creator_id
parameter torandom_document_with_params
- Randomly generating a creator_id when
document_field_fill_type == FillIfNotRequired
- Consulting
should_use_creator_id
logic (mentioned in PR context) to conditionally populate the fieldThis would enable more comprehensive testing of the new creator_id functionality across the platform.
Example parameterization:
fn random_document_with_params( &self, owner_id: Identifier, entropy: Bytes32, + creator_id: Option<Identifier>, time_ms: Option<TimestampMillis>, block_height: Option<BlockHeight>, core_block_height: Option<CoreBlockHeight>, document_field_fill_type: DocumentFieldFillType, document_field_fill_size: DocumentFieldFillSize, rng: &mut StdRng, platform_version: &PlatformVersion, ) -> Result<Document, ProtocolError> { // ... 0 => Ok(DocumentV0 { id, properties, owner_id, revision, created_at, updated_at, transferred_at: None, created_at_block_height, updated_at_block_height, transferred_at_block_height: None, created_at_core_block_height, updated_at_core_block_height, transferred_at_core_block_height: None, - creator_id: None, + creator_id, }And update call sites to pass
None
or a random identifier as needed.packages/rs-sdk-ffi/src/document/purchase.rs (1)
398-398
: Consider settingcreator_id
to a realistic value in test mocks.While
None
is acceptable for these tests, real documents typically have acreator_id
. For purchase scenarios,creator_id
should remain unchanged when ownership transfers, so setting it toSome(owner_id)
or a different identifier would better reflect production behavior.Example:
- creator_id: None, + creator_id: Some(owner_id), // In practice, creator is typically set
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (57)
packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs
(1 hunks)packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
(7 hunks)packages/rs-dpp/src/data_contract/document_type/random_document.rs
(1 hunks)packages/rs-dpp/src/document/accessors/mod.rs
(2 hunks)packages/rs-dpp/src/document/accessors/v0/mod.rs
(2 hunks)packages/rs-dpp/src/document/document_factory/v0/mod.rs
(1 hunks)packages/rs-dpp/src/document/document_methods/get_raw_for_document_type/v0/mod.rs
(1 hunks)packages/rs-dpp/src/document/extended_document/mod.rs
(1 hunks)packages/rs-dpp/src/document/v0/accessors.rs
(2 hunks)packages/rs-dpp/src/document/v0/cbor_conversion.rs
(5 hunks)packages/rs-dpp/src/document/v0/json_conversion.rs
(2 hunks)packages/rs-dpp/src/document/v0/mod.rs
(3 hunks)packages/rs-dpp/src/document/v0/serialize.rs
(8 hunks)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
(10 hunks)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs
(8 hunks)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs
(6 hunks)packages/rs-dpp/src/tests/json_document.rs
(1 hunks)packages/rs-dpp/src/tokens/token_event.rs
(1 hunks)packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/common.rs
(1 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs
(0 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs
(2 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
(21 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
(2 hunks)packages/rs-drive-abci/src/query/document_query/v0/mod.rs
(5 hunks)packages/rs-drive-abci/src/test/helpers/fee_pools.rs
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-unique-creator-id-index.json
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-unique-creator-id-with-owner-id-index.json
(1 hunks)packages/rs-drive/src/drive/contract/insert/add_description/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/contract/insert/add_new_keywords/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
(1 hunks)packages/rs-drive/src/query/mod.rs
(1 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs
(4 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
(1 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
(6 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
(2 hunks)packages/rs-drive/src/state_transition_action/identity/identity_credit_withdrawal/v0/transformer.rs
(2 hunks)packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
(2 hunks)packages/rs-sdk-ffi/src/document/create.rs
(1 hunks)packages/rs-sdk-ffi/src/document/delete.rs
(1 hunks)packages/rs-sdk-ffi/src/document/price.rs
(1 hunks)packages/rs-sdk-ffi/src/document/purchase.rs
(1 hunks)packages/rs-sdk-ffi/src/document/put.rs
(1 hunks)packages/rs-sdk-ffi/src/document/replace.rs
(1 hunks)packages/rs-sdk-ffi/src/document/transfer.rs
(1 hunks)packages/rs-sdk/src/platform/documents/transitions/delete.rs
(1 hunks)packages/rs-sdk/src/platform/documents/transitions/purchase.rs
(1 hunks)packages/rs-sdk/src/platform/documents/transitions/set_price.rs
(1 hunks)packages/rs-sdk/src/platform/documents/transitions/transfer.rs
(1 hunks)packages/rs-sdk/src/platform/dpns_usernames/mod.rs
(2 hunks)packages/wasm-sdk/src/state_transitions/documents/mod.rs
(5 hunks)
💤 Files with no reviewable changes (1)
- packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/action_validation/document/document_create_transition_action/advanced_structure_v0/mod.rs
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
- packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
- packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
- packages/rs-dpp/src/data_contract/document_type/class_methods/system_properties/mod.rs
- packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs
🧰 Additional context used
📓 Path-based instructions (7)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs
: Format Rust code with cargo fmt
Run Clippy linter for Rust code
Files:
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs
packages/rs-dpp/src/document/accessors/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/transfer.rs
packages/rs-dpp/src/document/v0/json_conversion.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-dpp/src/document/accessors/mod.rs
packages/rs-dpp/src/document/v0/mod.rs
packages/rs-dpp/src/document/extended_document/mod.rs
packages/rs-dpp/src/data_contract/document_type/random_document.rs
packages/rs-sdk-ffi/src/document/delete.rs
packages/rs-sdk-ffi/src/document/replace.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/delete.rs
packages/rs-dpp/src/tokens/token_event.rs
packages/rs-sdk-ffi/src/document/create.rs
packages/rs-sdk/src/platform/dpns_usernames/mod.rs
packages/rs-sdk-ffi/src/document/purchase.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-sdk-ffi/src/document/transfer.rs
packages/rs-drive-abci/src/query/document_query/v0/mod.rs
packages/rs-sdk-ffi/src/document/price.rs
packages/rs-drive/src/query/mod.rs
packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/common.rs
packages/rs-sdk-ffi/src/document/put.rs
packages/rs-dpp/src/document/v0/cbor_conversion.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-drive/src/drive/contract/insert/add_new_keywords/v0/mod.rs
packages/rs-dpp/src/tests/json_document.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs
packages/rs-drive/src/state_transition_action/identity/identity_credit_withdrawal/v0/transformer.rs
packages/wasm-sdk/src/state_transitions/documents/mod.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
packages/rs-drive/src/drive/contract/insert/add_description/v0/mod.rs
packages/rs-dpp/src/document/document_methods/get_raw_for_document_type/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/purchase.rs
packages/rs-dpp/src/document/v0/accessors.rs
packages/rs-dpp/src/document/document_factory/v0/mod.rs
packages/rs-dpp/src/document/v0/serialize.rs
packages/rs-drive-abci/src/test/helpers/fee_pools.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/set_price.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
packages/rs-*/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
packages/rs-*/**/*.rs
: Use rustfmt defaults for Rust code (format via cargo fmt --all)
Keep Rust code clippy-clean (cargo clippy)
Name Rust modules in snake_case
Use PascalCase for Rust types
Use SCREAMING_SNAKE_CASE for Rust constants
Files:
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs
packages/rs-dpp/src/document/accessors/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/transfer.rs
packages/rs-dpp/src/document/v0/json_conversion.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-dpp/src/document/accessors/mod.rs
packages/rs-dpp/src/document/v0/mod.rs
packages/rs-dpp/src/document/extended_document/mod.rs
packages/rs-dpp/src/data_contract/document_type/random_document.rs
packages/rs-sdk-ffi/src/document/delete.rs
packages/rs-sdk-ffi/src/document/replace.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/delete.rs
packages/rs-dpp/src/tokens/token_event.rs
packages/rs-sdk-ffi/src/document/create.rs
packages/rs-sdk/src/platform/dpns_usernames/mod.rs
packages/rs-sdk-ffi/src/document/purchase.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-sdk-ffi/src/document/transfer.rs
packages/rs-drive-abci/src/query/document_query/v0/mod.rs
packages/rs-sdk-ffi/src/document/price.rs
packages/rs-drive/src/query/mod.rs
packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/common.rs
packages/rs-sdk-ffi/src/document/put.rs
packages/rs-dpp/src/document/v0/cbor_conversion.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-drive/src/drive/contract/insert/add_new_keywords/v0/mod.rs
packages/rs-dpp/src/tests/json_document.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs
packages/rs-drive/src/state_transition_action/identity/identity_credit_withdrawal/v0/transformer.rs
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs
packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs
packages/rs-drive/src/drive/contract/insert/add_description/v0/mod.rs
packages/rs-dpp/src/document/document_methods/get_raw_for_document_type/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/purchase.rs
packages/rs-dpp/src/document/v0/accessors.rs
packages/rs-dpp/src/document/document_factory/v0/mod.rs
packages/rs-dpp/src/document/v0/serialize.rs
packages/rs-drive-abci/src/test/helpers/fee_pools.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
packages/rs-sdk/src/platform/documents/transitions/set_price.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
packages/rs-sdk-ffi/**/*.{h,rs}
📄 CodeRabbit inference engine (CLAUDE.md)
Follow unified SDK function prefixes: dash_core_sdk_* for Core, dash_sdk_* for Platform, dash_unified_sdk_* for unified APIs
Files:
packages/rs-sdk-ffi/src/document/delete.rs
packages/rs-sdk-ffi/src/document/replace.rs
packages/rs-sdk-ffi/src/document/create.rs
packages/rs-sdk-ffi/src/document/purchase.rs
packages/rs-sdk-ffi/src/document/transfer.rs
packages/rs-sdk-ffi/src/document/price.rs
packages/rs-sdk-ffi/src/document/put.rs
packages/rs-sdk-ffi/**
📄 CodeRabbit inference engine (AGENTS.md)
Keep iOS/FFI Rust SDK artifacts in packages/rs-sdk-ffi
Files:
packages/rs-sdk-ffi/src/document/delete.rs
packages/rs-sdk-ffi/src/document/replace.rs
packages/rs-sdk-ffi/src/document/create.rs
packages/rs-sdk-ffi/src/document/purchase.rs
packages/rs-sdk-ffi/src/document/transfer.rs
packages/rs-sdk-ffi/src/document/price.rs
packages/rs-sdk-ffi/src/document/put.rs
packages/**/tests/**
📄 CodeRabbit inference engine (AGENTS.md)
Place unit and integration tests alongside each package in packages//tests
Files:
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-unique-creator-id-with-owner-id-index.json
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-unique-creator-id-index.json
packages/rs-dpp/src/tests/json_document.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
📄 CodeRabbit inference engine (AGENTS.md)
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
: Name tests descriptively, starting with “should …”
Unit/integration tests must not perform network calls; mock dependencies instead
Files:
packages/rs-dpp/src/tests/json_document.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/wasm-sdk/**
📄 CodeRabbit inference engine (CLAUDE.md)
Keep WASM SDK docs in sync (run generate_docs.py) when updating the WASM SDK
Files:
packages/wasm-sdk/src/state_transitions/documents/mod.rs
🧠 Learnings (3)
📓 Common learnings
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
📚 Learning: 2024-10-09T00:22:57.778Z
Learnt from: shumkov
PR: dashpay/platform#2201
File: packages/rs-platform-version/src/version/v2.rs:1186-1188
Timestamp: 2024-10-09T00:22:57.778Z
Learning: In the `IdentityTransitionVersions` structure within `packages/rs-platform-version/src/version/v2.rs`, the field `credit_withdrawal` does not need the `identity_` prefix since it is already encompassed within identity state transitions.
Applied to files:
packages/rs-drive/src/state_transition_action/identity/identity_credit_withdrawal/v0/transformer.rs
📚 Learning: 2025-09-30T03:30:59.551Z
Learnt from: QuantumExplorer
PR: dashpay/platform#2790
File: packages/rs-dpp/src/document/v0/serialize.rs:502-502
Timestamp: 2025-09-30T03:30:59.551Z
Learning: The `$creatorId` system property should NOT be added to NOT_ALLOWED_SYSTEM_PROPERTIES because it needs to be indexable. Only `$id` is banned from user schemas. System properties like `$creatorId`, `$ownerId`, `$transferredAt`, etc. can all be referenced in index definitions while remaining system-managed.
Applied to files:
packages/rs-dpp/src/document/v0/serialize.rs
🧬 Code graph analysis (18)
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs (5)
packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/document/accessors/v0/mod.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (2)
creator_id
(114-118)set_creator_id
(211-215)packages/rs-dpp/src/document/v0/accessors.rs (2)
creator_id
(160-162)set_creator_id
(290-292)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/document/v0/json_conversion.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (4)
transferred_at
(72-76)transferred_at_block_height
(90-94)transferred_at_core_block_height
(108-112)creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (4)
transferred_at
(34-34)transferred_at_block_height
(46-46)transferred_at_core_block_height
(49-49)creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (4)
transferred_at
(73-75)transferred_at_block_height
(124-126)transferred_at_core_block_height
(151-153)creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (4)
transferred_at
(58-62)transferred_at_block_height
(78-82)transferred_at_core_block_height
(98-102)creator_id
(116-120)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/document/accessors/mod.rs (4)
packages/rs-dpp/src/document/accessors/v0/mod.rs (2)
creator_id
(50-50)set_creator_id
(160-160)packages/rs-dpp/src/document/v0/accessors.rs (2)
creator_id
(160-162)set_creator_id
(290-292)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/document/v0/mod.rs (3)
packages/rs-dpp/src/document/accessors/mod.rs (4)
transferred_at
(72-76)transferred_at_block_height
(90-94)transferred_at_core_block_height
(108-112)creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (4)
transferred_at
(34-34)transferred_at_block_height
(46-46)transferred_at_core_block_height
(49-49)creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (4)
transferred_at
(73-75)transferred_at_block_height
(124-126)transferred_at_core_block_height
(151-153)creator_id
(160-162)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (2)
creator_id
(114-118)owner_id
(24-28)packages/rs-dpp/src/document/v0/accessors.rs (2)
creator_id
(160-162)owner_id
(20-22)packages/rs-dpp/src/data_contract/accessors/mod.rs (1)
owner_id
(55-60)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (1)
owner_id
(32-34)
packages/rs-dpp/src/document/v0/cbor_conversion.rs (5)
packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/tests/json_document.rs (3)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
data
(55-55)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
data
(104-108)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
data
(78-78)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/creation.rs (4)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/mod.rs (1)
setup_identity
(135-191)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (1)
new_document_creation_transition_from_document
(93-134)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (1)
new_document_creation_transition_from_document
(91-145)packages/rs-drive-abci/src/platform_types/state_transitions_processing_result/mod.rs (1)
invalid_paid_count
(79-81)
packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs (5)
packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/data_contract/document_type/methods/versioned_methods.rs (7)
packages/rs-dpp/src/document/accessors/mod.rs (2)
creator_id
(114-118)properties
(36-40)packages/rs-dpp/src/document/accessors/v0/mod.rs (2)
creator_id
(50-50)properties
(19-19)packages/rs-dpp/src/document/v0/accessors.rs (2)
creator_id
(160-162)properties
(28-30)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (2)
creator_id
(116-120)data
(104-108)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (2)
creator_id
(83-83)data
(78-78)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_create_transition_action/v0/mod.rs (1)
data
(55-55)packages/rs-dpp/src/document/extended_document/v0/mod.rs (1)
properties
(151-153)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs (1)
packages/wasm-sdk/src/state_transitions/documents/mod.rs (1)
document
(1157-1159)
packages/rs-dpp/src/document/v0/accessors.rs (4)
packages/rs-dpp/src/document/accessors/mod.rs (2)
creator_id
(114-118)set_creator_id
(211-215)packages/rs-dpp/src/document/accessors/v0/mod.rs (2)
creator_id
(50-50)set_creator_id
(160-160)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
creator_id
(116-120)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (1)
creator_id
(83-83)
packages/rs-dpp/src/document/v0/serialize.rs (4)
packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/serialize/v0/mod.rs (1)
serialize_v2
(26-26)packages/rs-dpp/src/document/accessors/mod.rs (2)
creator_id
(114-118)id
(12-16)packages/rs-dpp/src/document/v0/accessors.rs (2)
creator_id
(160-162)id
(12-14)packages/rs-dpp/src/document/serialization_traits/platform_serialization_conversion/deserialize/v0/mod.rs (1)
from_bytes_v2
(31-37)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (9)
packages/rs-dpp/src/tests/json_document.rs (1)
json_document_to_contract
(66-74)packages/rs-dpp/src/data_contract/accessors/mod.rs (5)
system_version_type
(41-46)config
(128-133)version
(48-53)id
(27-32)tokens
(219-224)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/mod.rs (1)
setup_identity
(135-191)packages/rs-dpp/src/data_contract/document_type/accessors/mod.rs (3)
documents_mutable
(126-131)documents_mutable
(343-348)documents_mutable
(506-511)packages/rs-drive/src/query/mod.rs (1)
from_sql_expr
(824-982)packages/rs-dpp/src/fee/fee_result/refunds.rs (1)
calculate_refunds_amount_for_identity
(155-164)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/v0_methods.rs (3)
new_document_creation_transition_from_document
(102-143)new_document_transfer_transition_from_document
(230-271)new_document_deletion_transition_from_document
(188-227)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (3)
new_document_creation_transition_from_document
(93-134)new_document_transfer_transition_from_document
(179-220)new_document_deletion_transition_from_document
(223-262)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (3)
new_document_creation_transition_from_document
(91-145)new_document_transfer_transition_from_document
(204-260)new_document_deletion_transition_from_document
(263-315)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(63-232)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: Rust packages (dapi-grpc) / Tests
- GitHub Check: Rust packages (wasm-dpp) / Tests
- GitHub Check: Build Docker images (Dashmate helper, dashmate-helper, dashmate-helper) / Build Dashmate helper image
- GitHub Check: Build Docker images (Drive, drive, drive-abci) / Build Drive image
- GitHub Check: Build Docker images (DAPI, dapi, dapi) / Build DAPI image
- GitHub Check: Build JS packages / Build JS
- GitHub Check: Rust crates security audit
- GitHub Check: Build rs-sdk-ffi for iOS targets (aarch64-apple-ios-sim)
- GitHub Check: Build rs-sdk-ffi for iOS targets (aarch64-apple-ios)
{ | ||
"name": "owner_creator", | ||
"properties": [ | ||
{ | ||
"$ownerId": "asc" | ||
}, | ||
{ | ||
"$creatorId": "asc" | ||
} | ||
], | ||
"unique": true | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Verify the unique constraint semantics for transferable documents.
The owner_creator
index enforces uniqueness on the combination of $ownerId
and $creatorId
. For transferable documents, this constraint would prevent a single owner from holding multiple cards created by the same creator, even after legitimate transfers.
Scenario:
- Creator A creates card1 → transfers to Owner B
- Creator A creates card2 → transfers to Owner B
- Both cards now have (Owner B, Creator A) → unique constraint violation
This constraint typically makes sense only for non-transferable documents where creator = owner initially and transfers aren't allowed. For a transferable card game, you likely want to remove the unique: true
constraint from this index to allow owners to collect multiple cards from the same creator.
If the unique constraint is intentional (e.g., limiting one card per creator per owner as a game mechanic), please add a comment in the test explaining this business rule.
🤖 Prompt for AI Agents
In
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-all-transferable-unique-creator-id-with-owner-id-index.json
around lines 70 to 81, the "owner_creator" index currently sets "unique": true
which will incorrectly prevent an owner from holding multiple transferable cards
from the same creator; remove the "unique": true property from this index to
allow multiple transferable documents with the same ($ownerId, $creatorId) pair,
or if the one-card-per-creator rule is intentional, keep the constraint but add
a clear comment in the test file explaining that this is a deliberate game
mechanic enforcing one card per creator per owner.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No this is just for tests and is correct.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@QuantumExplorer, understood! Thank you for clarifying that the unique constraint on the owner_creator
index is intentional for this test scenario. The filename itself (crypto-card-game-all-transferable-unique-creator-id-with-owner-id-index.json
) makes it clear this is specifically testing the unique combination of owner and creator IDs, which is exactly what's implemented here.
🧠 Learnings used
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Nitpick comments (3)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs (1)
65-74
: Derive changed fields from the transition (avoid hardcoding "price").Prefer using the action’s reported changed data set to keep logic in sync if schema evolves. If the API exposes it, switch to a borrowed set; otherwise keep current.
Example (if available):
- changed_data_values: Cow::Owned(BTreeSet::from(["price".to_string()])), + changed_data_values: Cow::Borrowed( + document_update_price_transition.changed_data_fields() + ),packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
318-325
: Usecontains
for set membership.Replace
changed_data_values.get(&property.name).is_some()
withchanged_data_values.contains(&property.name)
for clarity.- if changed_data_values.get(&property.name).is_some() + if changed_data_values.contains(&property.name) { allow_original = false; }packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs (1)
30-30
: Reconsider#[inline(always)]
unless there's a measured performance reason.The
#[inline(always)]
attribute forces inlining regardless of the compiler's heuristics. For a function of this size (nearly 100 lines), forced inlining can bloat binary size and potentially degrade performance if this code path isn't hot enough to justify the trade-off. Unless profiling has shown a clear win, consider removing this attribute or using#[inline]
to let the compiler decide.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (36)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
(21 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/query.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/strategy.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
(5 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
(2 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
(3 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
(7 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
(3 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v1.rs
(0 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/mod.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/v5.rs
(1 hunks)packages/rs-platform-version/src/version/v10.rs
(4 hunks)
💤 Files with no reviewable changes (4)
- packages/rs-drive/src/drive/document/index_uniqueness/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
- packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v1.rs
✅ Files skipped from review due to trivial changes (1)
- packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
🚧 Files skipped from review as they are similar to previous changes (4)
- packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
🧰 Additional context used
📓 Path-based instructions (4)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs
: Format Rust code with cargo fmt
Run Clippy linter for Rust code
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
packages/rs-platform-version/src/version/drive_versions/mod.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-platform-version/src/version/v10.rs
packages/rs-platform-version/src/version/drive_versions/v5.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
packages/rs-*/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
packages/rs-*/**/*.rs
: Use rustfmt defaults for Rust code (format via cargo fmt --all)
Keep Rust code clippy-clean (cargo clippy)
Name Rust modules in snake_case
Use PascalCase for Rust types
Use SCREAMING_SNAKE_CASE for Rust constants
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
packages/rs-platform-version/src/version/drive_versions/mod.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-platform-version/src/version/v10.rs
packages/rs-platform-version/src/version/drive_versions/v5.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
packages/**/tests/**
📄 CodeRabbit inference engine (AGENTS.md)
Place unit and integration tests alongside each package in packages//tests
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
📄 CodeRabbit inference engine (AGENTS.md)
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
: Name tests descriptively, starting with “should …”
Unit/integration tests must not perform network calls; mock dependencies instead
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
🧠 Learnings (4)
📓 Common learnings
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
📚 Learning: 2024-10-08T13:28:03.529Z
Learnt from: QuantumExplorer
PR: dashpay/platform#2227
File: packages/rs-drive-abci/src/platform_types/platform_state/mod.rs:141-141
Timestamp: 2024-10-08T13:28:03.529Z
Learning: When converting `PlatformStateV0` to `PlatformStateForSavingV1` in `packages/rs-drive-abci/src/platform_types/platform_state/mod.rs`, only version `0` needs to be handled in the match on `platform_state_for_saving_structure_default` because the changes are retroactive.
Applied to files:
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
📚 Learning: 2024-10-09T00:22:57.778Z
Learnt from: shumkov
PR: dashpay/platform#2201
File: packages/rs-platform-version/src/version/v2.rs:1186-1188
Timestamp: 2024-10-09T00:22:57.778Z
Learning: In the `IdentityTransitionVersions` structure within `packages/rs-platform-version/src/version/v2.rs`, the field `credit_withdrawal` does not need the `identity_` prefix since it is already encompassed within identity state transitions.
Applied to files:
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
📚 Learning: 2024-10-09T00:22:57.778Z
Learnt from: shumkov
PR: dashpay/platform#2206
File: packages/rs-drive-abci/tests/strategy_tests/main.rs:1162-1162
Timestamp: 2024-10-09T00:22:57.778Z
Learning: In the Rust test file `packages/rs-drive-abci/tests/strategy_tests/main.rs`, specific protocol versions like `PROTOCOL_VERSION_1` are intentionally used in tests instead of `PROTOCOL_VERSION_LATEST`.
Applied to files:
packages/rs-platform-version/src/version/v10.rs
🧬 Code graph analysis (18)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (4)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (2)
document_type
(62-224)index
(70-166)packages/rs-dpp/src/data_contract/document_type/index/mod.rs (1)
property_names
(318-323)packages/rs-dpp/src/validation/validation_result.rs (2)
new_with_error
(104-109)merge_many_errors
(71-79)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (3)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (3)
changed_data_fields
(83-83)data_owned
(85-85)creator_id
(88-88)packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs (1)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs (1)
original_document
(878-880)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (8)
packages/rs-dpp/src/tests/json_document.rs (1)
json_document_to_contract
(66-74)packages/rs-dpp/src/data_contract/accessors/mod.rs (5)
system_version_type
(41-46)config
(128-133)version
(48-53)id
(27-32)tokens
(219-224)packages/rs-dpp/src/data_contract/document_type/accessors/mod.rs (3)
documents_mutable
(126-131)documents_mutable
(343-348)documents_mutable
(506-511)packages/rs-drive/src/query/mod.rs (1)
from_sql_expr
(824-982)packages/rs-drive-abci/src/platform_types/state_transitions_processing_result/mod.rs (5)
invalid_paid_count
(79-81)invalid_unpaid_count
(84-86)valid_count
(89-91)aggregated_fees
(99-101)execution_results
(109-111)packages/rs-dpp/src/fee/fee_result/refunds.rs (1)
calculate_refunds_amount_for_identity
(155-164)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (1)
new_document_transfer_transition_from_document
(179-220)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (1)
new_document_transfer_transition_from_document
(204-260)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs (3)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)packages/rs-dpp/src/data_contract/document_type/index/mod.rs (1)
property_names
(318-323)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs (3)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)packages/rs-dpp/src/document/accessors/mod.rs (4)
revision
(54-58)updated_at
(66-70)updated_at_block_height
(84-88)updated_at_core_block_height
(102-106)packages/rs-dpp/src/document/v0/accessors.rs (4)
revision
(46-48)updated_at
(64-66)updated_at_block_height
(115-117)updated_at_core_block_height
(142-144)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (4)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (3)
changed_data_fields
(110-114)data_owned
(116-120)creator_id
(122-126)packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (16)
- GitHub Check: Rust packages (drive) / Detect immutable structure changes
- GitHub Check: Rust packages (wasm-dpp) / Tests
- GitHub Check: Rust packages (drive) / Unused dependencies
- GitHub Check: Rust packages (drive) / Tests
- GitHub Check: Rust packages (drive) / Linting
- GitHub Check: Rust packages (dpp) / Check each feature
- GitHub Check: Rust packages (dpp) / Unused dependencies
- GitHub Check: Rust packages (dpp) / Formatting
- GitHub Check: Rust packages (dpp) / Tests
- GitHub Check: Rust packages (dpp) / Linting
- GitHub Check: Swift SDK and Example build (warnings as errors)
- GitHub Check: Build Docker images (Dashmate helper, dashmate-helper, dashmate-helper) / Build Dashmate helper image
- GitHub Check: Build Docker images (DAPI, dapi, dapi) / Build DAPI image
- GitHub Check: Build Docker images (Drive, drive, drive-abci) / Build Drive image
- GitHub Check: Build JS packages / Build JS
- GitHub Check: Rust crates security audit
🔇 Additional comments (53)
packages/rs-drive-abci/tests/strategy_tests/query.rs (1)
836-836
: LGTM! Good cleanup of unused variable.Prefixing
root_hash
with an underscore correctly signals that the value is intentionally unused. The test only needsfinalized_epoch_infos
(used in lines 847-852), so this silences the unused variable warning without changing behavior.packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs (1)
1-72
: LGTM! Clear versioning constant with good documentation.The new
DRIVE_DOCUMENT_METHOD_VERSIONS_V2
constant is well-structured. The doc comment clearly explains the protocol v10 context and the "Changed" annotations on lines 66-70 make it easy to identify the delta from v1 (index_uniqueness methods bumped to version 1).packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs (2)
4-4
: LGTM! Module addition is correct.The new
v2
module addition follows the existing pattern (v1 already exists on line 3).
83-89
: No remaining references to removed fields. Searches for.validate_document_uniqueness\b
and.validate_uniqueness_of_data\b
yielded no field‐access occurrences in the codebase—only module/function names were matched previously. Removal is safe.packages/rs-platform-version/src/version/drive_versions/mod.rs (1)
30-30
: LGTM! Module addition follows the established pattern.The new
v5
module addition is consistent with the existing versioning scheme (v1-v4 already present on lines 26-29).packages/rs-platform-version/src/version/v10.rs (2)
3-3
: LGTM! Import updates are consistent with the version bumps.The imports for
CONTRACT_VERSIONS_V3
,DOCUMENT_VERSIONS_V3
, andDRIVE_VERSION_V5
correctly reflect the versioning changes made in this PR.Also applies to: 5-5, 23-23
35-35
: Approve version updates. Verified that DRIVE_VERSION_V5, CONTRACT_VERSIONS_V3, and DOCUMENT_VERSIONS_V3 are defined and documented, aligning with the creator_id feature enhancements.packages/rs-platform-version/src/version/drive_versions/v5.rs (1)
1-108
: LGTM! Comprehensive drive version constant with clear documentation.The new
DRIVE_VERSION_V5
constant properly defines all drive method versions for protocol v10. The doc comment (lines 22-23) provides clear context, and the "Changed" annotation on line 52 highlights the key update (DRIVE_DOCUMENT_METHOD_VERSIONS_V2
). The structure is consistent with the existing versioning pattern and integrates withGROVE_V2
.packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (2)
3-3
: LGTM!The addition of
BTreeSet
to the imports is necessary for the newchanged_data_fields
accessor.
110-126
: LGTM!The two new accessor methods (
changed_data_fields
andcreator_id
) are correctly implemented and follow the established pattern of delegating to the V0 variant. These additions align with the broader creator_id support being added throughout the codebase.packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs (1)
718-726
: LGTM!The refactoring to pass the entire
original_document
instead of individual timestamp parameters simplifies the signature and allows the callee to extract all necessary fields (includingcreator_id
) from the document. This approach is cleaner and aligns with the broader creator_id propagation throughout the PR.packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs (1)
4-4
: LGTM!The signature change to accept
original_document: &Document
is consistent with the calling site and allows for cleaner extraction of document metadata including the newcreator_id
field. The necessary imports are correctly added.Also applies to: 20-20, 36-36
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (9)
181-422
: Good test coverage for backward compatibility.This test verifies that document transfers work correctly with contract v0 (which does not support creator_id serialization). The test is well-structured and includes proper validation of state before and after the transfer.
Note: The fee assertions use exact values (e.g.,
processing_fee == 3369260
), which may require updates if fee calculation logic changes in the future.
515-574
: LGTM! Excellent coverage of creator_id persistence.The test properly validates that:
- Documents can be queried by
$creatorId
- The
creator_id
remains unchanged after transfer (still points to the original creator)- Both owner and creator queries return the expected results after transfer
This is critical for ensuring creator attribution is immutable.
Also applies to: 642-657
678-920
: LGTM! Important test for contract v0 behavior.The test and inline comments clearly document that contract v0 (and config v0) should not include creator_id because document serialization v0 cannot handle it. This ensures proper version handling and backward compatibility.
1091-1112
: LGTM! Proper validation of transfer restrictions.The test correctly verifies that documents with
Transferable::Never
cannot be transferred, and that the state remains unchanged after the failed transfer attempt.
1116-1263
: LGTM! Good edge case coverage.The test validates that attempting to transfer a non-existent document fails appropriately, with processing fees charged but no state changes made. This is an important edge case.
1462-1510
: Verify test expectations for document deletion after transfer.The test shows that after transferring a document to the receiver, when the receiver attempts to delete it, the deletion fails (
invalid_paid_count = 1
,valid_count = 0
).This seems unexpected behavior for a transferable document type - typically the new owner should be able to delete their document. Please verify:
- Is this the intended behavior (deletion not allowed after transfer)?
- Or is there an issue with how the deletion transition is being constructed?
If the document type has specific deletion restrictions beyond transferability, consider adding a comment explaining the expected behavior.
1530-1774
: LGTM! Excellent coverage of token payment transfers.This test thoroughly validates the token payment functionality for document transfers, including:
- Token contract setup
- Document creation with token payment
- Document transfer with token payment
- Token balance tracking and verification
The test is well-structured and comprehensive.
1777-2284
: Excellent test with outstanding documentation!This test thoroughly validates the unique
creator_id
index constraint throughout the complete document lifecycle. The extensive inline comments explain:
- The purpose and use cases for unique creator_id constraints
- Each step in the test sequence
- Why each operation should succeed or fail
This level of documentation makes the test easy to understand and maintain.
2287-2850
: Outstanding test for compound unique index!This test validates the complex behavior of a compound unique index on
(owner_id, creator_id)
with excellent inline documentation. The test demonstrates:
- Multiple documents from same creator with different owners
- Transfer constraints when compound uniqueness would be violated
- Proper freeing of constraints upon deletion
The comprehensive comments explain the business logic and make this complex scenario clear.
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (5)
9-9
: LGTM!The addition of
BTreeSet
to imports is necessary for the newchanged_data_fields
field.
41-44
: LGTM!The two new fields are properly documented and typed:
changed_data_fields: BTreeSet<String>
for tracking modified fieldscreator_id: Option<Identifier>
for immutable creator attributionThese additions align with the broader creator_id support in the PR.
82-88
: LGTM!The new trait accessor methods are correctly defined with appropriate documentation and follow the established pattern of other accessors in the trait.
148-149
: LGTM!The
creator_id
is correctly extracted in the destructuring pattern and properly propagated (with dereferencing) into theDocumentV0
construction. The use of..
to ignorechanged_data_fields
is appropriate since it's not needed for document construction.Also applies to: 173-173
202-203
: LGTM!The owned path correctly extracts and propagates
creator_id
without dereferencing (since values are moved). The implementation is consistent with the borrowed path and follows the established pattern.Also applies to: 227-227
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs (5)
2-2
: LGTM: Imports correctly extended for new functionality.The added imports (
Document
,DocumentV0Getters
,BTreeSet
) are all necessary to support passing the original document and calculating changed fields.Also applies to: 4-4
92-110
: LGTM: Field extraction from original document is correct.The code properly extracts all necessary fields from
original_document
using the accessor methods, including the newcreator_id
field which is central to this PR's feature.
112-137
: LGTM: Changed fields calculation is comprehensive and correct.The logic correctly identifies modified, added, and removed fields by:
- Comparing each new data field with the original using
equal_underlying_data
- Detecting fields present in the original but absent in the new data
Using
BTreeSet
ensures deterministic ordering, which is important for consensus.
139-162
: LGTM: Extracted values correctly used in action construction.All extracted values from the original document (including the new
creator_id
andchanged_data_fields
) are properly assigned to theDocumentReplaceTransitionActionV0
instance. This correctly implements the PR's objective of preserving creator ID during document replace transitions.
22-25
: All call sites updated. Verified that the sole invocation in packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs passes original_document correctly.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs (1)
56-75
: Version 1 dispatch wiring looks solid.Adding the v1 arm with matching parameters and updating the known_versions list keeps the replace-transition uniqueness validator aligned with the new platform_version metadata. Nice and consistent with the other uniqueness modules.
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs (1)
56-75
: Consistent v1 hookup.The new v1 branch forwards the same arguments and keeps the UnknownVersionMismatch list current, matching the broader creator_id rollout.
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs (1)
56-75
: Create-path v1 dispatch matches the pattern.Routing to the v1 implementation with the existing argument set and adjusting the known_versions vector keeps the create transition validator aligned with the new versioning strategy.
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs (1)
73-73
: Known versions updated correctly.The
known_versions
array now includes[0, 1]
, matching the newly added v1 dispatch arm.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs (1)
2-2
: V1 dispatch and versioning implemented correctly.The v1 module is added, dispatch logic extended to handle version 1, and
known_versions
updated to[0, 1]
. The v1 signature maintains parameter parity with v0, which differs from the transfer transition's approach (where v1 extractsowner_id
internally).Also applies to: 64-71, 74-74
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs (1)
5-5
: Type migration to versioned request structure implemented correctly.The change from
UniquenessOfDataRequest
toUniquenessOfDataRequestV0
and the addition of.into()
at line 62 correctly adapt this path to the new versioned dispatch mechanism. Thevalidate_uniqueness_of_data
function now accepts aUniquenessOfDataRequest
enum that wraps V0/V1 variants, so the.into()
conversion is necessary.Also applies to: 33-62
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs (1)
5-5
: Type migration to versioned request structure implemented correctly.Same versioning migration as the purchase v0 path:
UniquenessOfDataRequestV0
with.into()
conversion aligns with the new enum-based dispatch invalidate_uniqueness_of_data
.Also applies to: 33-62
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs (2)
36-36
: Creator ID support added correctly.The inclusion of
creator_id
viadocument_transfer_transition.document().creator_id()
implements the core feature of this PR. The v1 uniqueness validation can now check indexes that include theCREATOR_ID
property.
60-60
: No update required: ChangedDocument is appropriate for transfer transitions. It correctly flags onlyowner
andtransferred_at
as changed while preserving uniqueness checks for other properties.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs (1)
35-66
: LGTM; consistent flags and borrowed changed fields.Request assembly matches replace semantics; using
Cow::Borrowed(document_replace_transition.changed_data_fields())
avoids allocation.packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
351-412
: Behavioral note: collects all index errors (intentional).Aggregating per-index results via
merge_many_errors
is helpful for users. No change requested.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs (5)
1-26
: LGTM!The imports are comprehensive and appropriate for the v1 uniqueness validation logic.
40-56
: LGTM!The logic correctly determines which system property fields are required based on the document type schema.
60-68
: LGTM! Key new feature for creator_id support.The logic correctly determines whether to populate
creator_id
by consulting the document type'sshould_use_creator_id
method with the contract's system version, config version, and platform version. Settingcreator_id
toowner_id
at creation time is semantically correct, as the creator is the initial owner.
70-123
: LGTM!The
UniquenessOfDataRequestV1
construction correctly populates all fields conditionally based on the document type's required fields, uses appropriate block info values, and sets the update type toNewDocument
as expected for a create transition.
124-124
: LGTM!The call to
validate_uniqueness_of_data
correctly converts the V1 request using.into()
and passes the transaction and platform version.packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (6)
1-19
: LGTM!The addition of the
v1
module and new imports (Cow
,From
,BTreeSet
) correctly supports the new versioned uniqueness validation infrastructure.
21-25
: LGTM!The
UniquenessOfDataRequest
enum correctly introduces versioned dispatch with V0 and V1 variants, and theFrom
derive enables ergonomic conversion.
36-68
: LGTM!The
UniquenessOfDataRequestV0
struct correctly preserves the previous single-version structure while being renamed to V0 for the new versioned dispatch.
77-131
: LGTM! Key addition:creator_id
support.The
UniquenessOfDataRequestV1
struct correctly extends the validation capabilities with:
- The new
creator_id
field (lines 90-92) to support creator tracking across the platform.- The
update_type
field (line 130) for more granular uniqueness validation based on which fields changed.The comprehensive doc comments clearly explain each field's purpose.
133-165
: LGTM! Well-designed update type enum.The
UniquenessOfDataRequestUpdateType
enum correctly distinguishes between new and changed documents for uniqueness validation. TheChangedDocument
variant's design—tracking which fields changed—enables the validation logic to determine whether a unique index coupling should already exist in state, improving the accuracy of uniqueness checks.
184-197
: LGTM!The dispatch logic correctly routes
UniquenessOfDataRequest::V0
andV1
variants to their respective implementation methods, cleanly separating the versioned validation paths.
.../document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
Show resolved
Hide resolved
...ive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
Show resolved
Hide resolved
update_type: UniquenessOfDataRequestUpdateType::ChangedDocument { | ||
changed_owner_id: true, | ||
changed_updated_at: false, | ||
changed_transferred_at: true, | ||
changed_updated_at_block_height: false, | ||
changed_transferred_at_block_height: true, | ||
changed_updated_at_core_block_height: false, | ||
changed_transferred_at_core_block_height: true, | ||
changed_data_values: Default::default(), | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
🧩 Analysis chain
Verify changed flags match transfer semantics.
The changed_*
flags accurately reflect transfer operation semantics:
changed_owner_id: true
– ownership changes ✓changed_transferred_at: true
– transfer timestamp updates ✓changed_transferred_at_block_height: true
– transfer block height updates ✓changed_transferred_at_core_block_height: true
– transfer core block height updates ✓changed_updated_at: false
– transfer doesn't update the "updated" timestamp ✓changed_data_values: Default::default()
– no data properties change ✓
Confirm that transfer operations indeed leave updated_at
unchanged and don't modify any data properties. If transfers can optionally update data fields, changed_data_values
would need to be computed rather than defaulted.
🏁 Script executed:
#!/bin/bash
# Search for transfer semantics and what fields are modified during transfer
echo "=== DocumentTransferTransitionAction structure and field updates ==="
ast-grep --pattern 'struct DocumentTransferTransitionAction {
$$$
}'
echo -e "\n=== Transfer action processing - looking for field updates ==="
rg -C 5 'document_transfer_transition|DocumentTransferTransitionAction' packages/rs-drive*/src/ -g '*.rs' | rg -C 3 'updated_at|transferred_at|owner_id'
echo -e "\n=== Check if transfer can modify document data ==="
rg -C 3 'transfer.*data|data.*transfer' packages/rs-drive*/src/ -g '*.rs' | rg -i 'property|properties|data'
Length of output: 47118
🏁 Script executed:
#!/bin/bash
# Inspect setter calls in transformer V0 for DocumentTransferTransitionAction
rg -n "modified_document\.set_" -C3 packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_transfer_transition_action/v0/transformer.rs
Length of output: 913
Compute changed_data_values
to include the removed PRICE
property
In v1/mod.rs
, the transfer transformer invokes properties_mut().remove(PRICE)
, so changed_data_values
must be computed to capture this removal instead of using Default::default()
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because the price goes to None, and because a None in a unique index makes the index not unique, well we don't need set price as changed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@QuantumExplorer, thank you for the clarification! That makes perfect sense—if None
values don't participate in unique index checks, then removing the PRICE
property (setting it to None
) won't affect uniqueness validation. The changed_data_values: Default::default()
is therefore correct as-is, since the removal doesn't need to be tracked for uniqueness purposes.
This aligns well with the other changed_*
flags that only track fields that actually participate in uniqueness constraints during a transfer operation.
🧠 Learnings used
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs (1)
17-24
: Update all call sites for the new parameters and add ownership checks
- In
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
, update the call to
DocumentReplaceTransitionAction::try_from_borrowed_document_replace_transition(
to passoriginal_document
,block_info
,user_fee_increase
, andget_data_contract
.- In
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
, do the same for
DocumentReplaceTransitionActionV0::try_from_borrowed_document_replace_transition(
.- Inside each implementation, add
debug_assert_eq!(transition.document_id(), original_document.id());
and
debug_assert_eq!(owner_id, original_document.owner_id());
Optional: wrap parameters into a small context struct to eliminate the clippy allow and consider adding a tracing span with the document ID.packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
170-179
: Doc param mismatch: DriveVersion vs PlatformVersion.Update the docstring to reflect the actual parameter name/type.
- /// * `drive_version` - A `DriveVersion` object representing the version of the Drive. + /// * `platform_version` - A `PlatformVersion` object representing the platform version.
🧹 Nitpick comments (31)
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-with-owner-id-index.json (2)
135-142
: Requiring transfer system fields may block creates.
$transferredAt
,$transferredAtBlockHeight
,$transferredAtCoreBlockHeight
are typically set on transfer. If documents can be created before any transfer, this requirement will fail validation. If creation always coincides with transfer in this test, ignore; otherwise consider dropping them fromrequired
."required": [ "name", - "$transferredAt", - "$transferredAtBlockHeight", - "$transferredAtCoreBlockHeight", "attack", "defense" ],
26-33
: Optional: tightenimageUrl
validation.If helpful for tests, restrict to allowed schemes: http/https (or ipfs).
"imageUrl": { "type": "string", "description": "URL of the image associated with the card", "maxLength": 2048, - "format": "uri", + "format": "uri", + "pattern": "^(https?|ipfs)://" "position": 2 },packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (10)
8-178
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_transfer_document_on_transferable_type_with_no_owner_indices()This improves readability and aligns with the project's testing conventions.
As per coding guidelines.
180-422
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_transfer_document_on_transferable_type_before_creator_id()As per coding guidelines.
424-675
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_transfer_document_on_transferable_type()As per coding guidelines.
677-920
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_transfer_document_on_transferable_type_with_contract_v0()As per coding guidelines.
922-1113
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_reject_transfer_on_non_transferable_document_type()As per coding guidelines.
1115-1263
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_reject_transfer_of_non_existent_document()As per coding guidelines.
1265-1528
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_reject_delete_after_transfer()Additionally, line 1422 uses
BlockInfo::default_with_time(50000000)
. Consider adding a comment explaining why a specific time is used, if it's significant to the test logic.As per coding guidelines.
1529-1774
: Consider renaming test to follow "should" pattern.Coding guidelines recommend naming tests descriptively, starting with "should …". For example:
fn should_transfer_document_with_token_payment()As per coding guidelines.
1776-2284
: Excellent documentation and test coverage.The extensive comments (lines 1777-1809) clearly explain the test's purpose and scenario, making it easy to understand the complex interaction between creator_id, ownership, and unique constraints. This is a model example of well-documented test code.
However, consider renaming the test to follow the "should" pattern per coding guidelines:
fn should_enforce_unique_creator_id_index_during_transfer_and_deletion()As per coding guidelines.
2286-2850
: Excellent documentation and comprehensive test coverage.The extensive comments (lines 2287-2327) clearly explain the test's purpose and the complex scenario involving compound unique indexes on (owner_id, creator_id). This is exemplary documentation that makes the test's intent and logic immediately clear.
However, consider renaming the test to follow the "should" pattern per coding guidelines:
fn should_enforce_unique_owner_creator_compound_index_during_transfer()As per coding guidelines.
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs (1)
1-1
: Import path consistency for FeatureVersion.This file uses
use versioned_feature_core::FeatureVersion;
while others usecrate::version::FeatureVersion
. Consider unifying on the crate re-export for consistency and easier future changes.-use versioned_feature_core::FeatureVersion; +use crate::version::FeatureVersion;packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs (1)
12-64
: Explicit zeros across nested structs — acceptable, but consider a helper in non-const code.Given const context, explicit literals are fine. If you introduce a non-const builder later, a small constructor could reduce duplication. No change required now.
packages/rs-platform-version/src/version/drive_versions/v5.rs (1)
52-52
: Inline “// Changed” comment.Optional: move change rationale to module-level doc or commit message; the code already denotes the version.
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-index.json (1)
132-139
: Requiring$transferredAt*
on all docs—validate against create flow.With these required, every create must include
$transferredAt
,$transferredAtBlockHeight
, and$transferredAtCoreBlockHeight
. For “direct purchase” this may be intended; otherwise, creation could fail before transfer. If not strictly needed at create time, make them optional and enforce presence on transfer.Option if needed:
- "required": [ - "name", - "$transferredAt", - "$transferredAtBlockHeight", - "$transferredAtCoreBlockHeight", - "attack", - "defense" - ], + "required": [ + "name", + "attack", + "defense" + ],Add/verify tests for both create and transfer transitions that assert required system fields at the right phase.
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs (3)
3380-3391
: Standardize first buyer nonce to 1 (and keep monotonic).Earlier tests typically start a new buyer at nonce 1. These use 2 (and deletion 3). Aligning reduces nonce‑related flakiness.
Apply these diffs:
@@ - &buyer_key, - 2, + &buyer_key, + 1, @@ - &buyer_key, - 3, + &buyer_key, + 2,@@ - &buyer1_key, - 2, + &buyer1_key, + 1,@@ - &buyer2_key, - 2, + &buyer2_key, + 1, @@ - &buyer2_key, - 3, + &buyer2_key, + 2,Also applies to: 3514-3521, 3940-3953, 4150-4163, 4201-4212
3423-3446
: Assert creator_id immutability after purchase.Add a direct check that the buyer‑held document still has creator_id == creator.id().
Example:
let doc = query_buyer_results.documents().first().unwrap(); assert_eq!(doc.owner_id(), buyer.id()); assert_eq!(doc.creator_id(), Some(creator.id()));Also applies to: 4244-4278
3288-3311
: Optional: DRY the “process + commit” pattern into a small helper.Reduces repeated boilerplate and makes failures easier to instrument.
Sketch:
fn process_and_commit( platform: &mut TempPlatform<MockCoreRPCLike>, st_bytes: Vec<Vec<u8>>, platform_state: &PlatformState, block: BlockInfo, platform_version: &PlatformVersion, ) -> ProcessingResult { let tx = platform.drive.grove.start_transaction(); let res = platform.platform.process_raw_state_transitions( &st_bytes, platform_state, &block, &tx, platform_version, false, None, ).expect("process"); platform.drive.grove.commit_transaction(tx).unwrap().expect("commit"); res }Also applies to: 3398-3422, 3484-3509, 3532-3556, 3851-3872, 4071-4094, 4171-4195, 4219-4243
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs (1)
64-70
: v1 dispatch correctly drops owner_id param.
Matches v1 signature (owner_id sourced from the document). Please update the method doc to note: "owner_id is used only in v0; v1 derives it from the transition’s document," and rename “drive_version” to “platform_version” in the docs above.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs (1)
64-71
: v1 dispatch parameters are consistent with v0.
All args (including owner_id) forwarded; LGTM. Consider updating the doc above to say “platform_version” instead of “drive_version.”packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs (1)
32-70
: Refactor: cache doc/base to reduce repeated calls.
Small readability/micro‑perf win; fewer method calls, easier to scan.- let request = UniquenessOfDataRequestV1 { + let doc = document_transfer_transition.document(); + let base = document_transfer_transition.base(); + let request = UniquenessOfDataRequestV1 { contract, document_type, - owner_id: document_transfer_transition.document().owner_id(), - creator_id: document_transfer_transition.document().creator_id(), - document_id: document_transfer_transition.base().id(), - created_at: document_transfer_transition.document().created_at(), - updated_at: document_transfer_transition.document().updated_at(), - transferred_at: document_transfer_transition.document().transferred_at(), - created_at_block_height: document_transfer_transition - .document() - .created_at_block_height(), - updated_at_block_height: document_transfer_transition - .document() - .updated_at_block_height(), - transferred_at_block_height: document_transfer_transition - .document() - .transferred_at_block_height(), - created_at_core_block_height: document_transfer_transition - .document() - .created_at_core_block_height(), - updated_at_core_block_height: document_transfer_transition - .document() - .updated_at_core_block_height(), - transferred_at_core_block_height: document_transfer_transition - .document() - .transferred_at_core_block_height(), - data: document_transfer_transition.document().properties(), + owner_id: doc.owner_id(), + creator_id: doc.creator_id(), + document_id: base.id(), + created_at: doc.created_at(), + updated_at: doc.updated_at(), + transferred_at: doc.transferred_at(), + created_at_block_height: doc.created_at_block_height(), + updated_at_block_height: doc.updated_at_block_height(), + transferred_at_block_height: doc.transferred_at_block_height(), + created_at_core_block_height: doc.created_at_core_block_height(), + updated_at_core_block_height: doc.updated_at_core_block_height(), + transferred_at_core_block_height: doc.transferred_at_core_block_height(), + data: doc.properties(), update_type: UniquenessOfDataRequestUpdateType::ChangedDocument { changed_owner_id: true, changed_updated_at: false, changed_transferred_at: true, changed_updated_at_block_height: false, changed_transferred_at_block_height: true, changed_updated_at_core_block_height: false, changed_transferred_at_core_block_height: true, changed_data_values: Default::default(), }, };packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs (2)
39-41
: Creator ID source differs across modulesHere you use
document_replace_transition.creator_id()
, while v1 purchase/update_price use...document().creator_id()
. Validate both return the same logical value for documents with creator_id indexes; otherwise uniqueness checks referencing creator_id may be skipped.Optionally standardize on one accessor style across v1 validators for consistency.
Also applies to: 41-49
55-62
: Derivechanged_*
flags from the transitionFlags are hard-coded (e.g.,
changed_updated_at: true
). Ifupdated_at
(or corresponding block/core heights) is absent/unchanged, this can unnecessarily flipallow_original
and also cause early-exit on indexes including that field. Prefer computing these from the transition’s actual diff.Would you like me to draft a helper that derives these flags from the transition?
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs (1)
65-74
: Compute flags dynamically from the transition action
Static flags (price
,updated_at
,updated_at_block_height
,updated_at_core_block_height
, no transfers) match the currentDocumentUpdatePriceTransitionActionV0
logic, but derive allchanged_*
flags andchanged_data_values
programmatically from its diff rather than hardcoding, to prevent drift if mutation semantics evolve.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs (1)
65-74
: Changed_data_values including "price" is correct
The purchase transformer explicitly removes theprice
property from the document, so listing"price"
inchanged_data_values
is required for accurate uniqueness checks.
Consider deriving theUniquenessOfDataRequestUpdateType
flags dynamically—by diffing old vs. new document fields—instead of hard-coding them.packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs (1)
40-57
: Trim duplication for required_ probes (optional).*Nine contains(...) checks could be grouped (e.g., small helper/closure or array map) to cut repetition and reduce drift if system fields change.
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (4)
319-325
: Use contains() for clarity.Use changed_data_values.contains(&property.name) instead of get(...).is_some().
- if changed_data_values.get(&property.name).is_some() { + if changed_data_values.contains(&property.name) {
173-180
: Avoid duplicate String clones (micro).property.name is cloned twice (map key and WhereClause.field). Capture once and reuse.
- Some(( - property.name.clone(), - WhereClause { - field: property.name.clone(), + let name = property.name.clone(); + Some(( + name.clone(), + WhereClause { + field: name, operator: WhereOperator::Equal, value, }, ))Also applies to: 334-340
73-184
: Consider a small helper to build WhereClause per property.Both NewDocument and ChangedDocument branches repeat large match arms. A local helper (closure) returning Option<(String, WhereClause)> would reduce duplication and future drift.
Also applies to: 185-348
373-380
: Operational note: add lightweight observability.The TODO about cost is valid. Consider debug-level timing/metrics around query_documents to spot hot contracts/indexes.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (39)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
(1 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
(21 hunks)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/query.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/strategy.rs
(1 hunks)packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-index.json
(1 hunks)packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-with-owner-id-index.json
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
(5 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
(0 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
(2 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
(3 hunks)packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
(1 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
(2 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
(3 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
(7 hunks)packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
(3 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v1.rs
(0 hunks)packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/mod.rs
(1 hunks)packages/rs-platform-version/src/version/drive_versions/v5.rs
(1 hunks)packages/rs-platform-version/src/version/v10.rs
(4 hunks)
💤 Files with no reviewable changes (4)
- packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v1.rs
- packages/rs-drive/src/drive/document/index_uniqueness/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_uniqueness/mod.rs
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v0/mod.rs
- packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v0/mod.rs
- packages/rs-platform-version/src/version/v10.rs
🧰 Additional context used
📓 Path-based instructions (4)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs
: Format Rust code with cargo fmt
Run Clippy linter for Rust code
Files:
packages/rs-platform-version/src/version/drive_versions/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
packages/rs-platform-version/src/version/drive_versions/v5.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/rs-*/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
packages/rs-*/**/*.rs
: Use rustfmt defaults for Rust code (format via cargo fmt --all)
Keep Rust code clippy-clean (cargo clippy)
Name Rust modules in snake_case
Use PascalCase for Rust types
Use SCREAMING_SNAKE_CASE for Rust constants
Files:
packages/rs-platform-version/src/version/drive_versions/mod.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/mod.rs
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-platform-version/src/version/drive_versions/drive_document_method_versions/v2.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs
packages/rs-platform-version/src/version/drive_versions/v5.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs
packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs
packages/**/tests/**
📄 CodeRabbit inference engine (AGENTS.md)
Place unit and integration tests alongside each package in packages//tests
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-with-owner-id-index.json
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
packages/rs-drive-abci/tests/supporting_files/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-index.json
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
📄 CodeRabbit inference engine (AGENTS.md)
packages/**/tests/**/*.{js,ts,jsx,tsx,rs}
: Name tests descriptively, starting with “should …”
Unit/integration tests must not perform network calls; mock dependencies instead
Files:
packages/rs-drive-abci/tests/strategy_tests/query.rs
packages/rs-drive-abci/tests/strategy_tests/strategy.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs
packages/rs-drive-abci/tests/strategy_tests/token_tests.rs
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
🧠 Learnings (2)
📓 Common learnings
Learnt from: QuantumExplorer
PR: dashpay/platform#2257
File: packages/rs-drive-abci/src/mimic/test_quorum.rs:159-164
Timestamp: 2024-11-20T16:16:01.830Z
Learning: QuantumExplorer prefers not to receive auto-generated messages asking to post on social media.
📚 Learning: 2024-10-08T13:28:03.529Z
Learnt from: QuantumExplorer
PR: dashpay/platform#2227
File: packages/rs-drive-abci/src/platform_types/platform_state/mod.rs:141-141
Timestamp: 2024-10-08T13:28:03.529Z
Learning: When converting `PlatformStateV0` to `PlatformStateForSavingV1` in `packages/rs-drive-abci/src/platform_types/platform_state/mod.rs`, only version `0` needs to be handled in the match on `platform_state_for_saving_structure_default` because the changes are retroactive.
Applied to files:
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs
🧬 Code graph analysis (20)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v1/mod.rs (3)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (4)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (2)
document_type
(62-224)index
(70-166)packages/rs-dpp/src/data_contract/document_type/index/mod.rs (1)
property_names
(318-323)packages/rs-dpp/src/validation/validation_result.rs (2)
new_with_error
(104-109)merge_many_errors
(71-79)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_purchase_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (1)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (3)
changed_data_fields
(83-83)data_owned
(85-85)creator_id
(88-88)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs (12)
packages/rs-dpp/src/tests/json_document.rs (1)
json_document_to_contract
(66-74)packages/rs-dpp/src/data_contract/accessors/mod.rs (5)
system_version_type
(41-46)config
(128-133)version
(48-53)id
(27-32)tokens
(219-224)packages/rs-dpp/src/data_contract/v0/accessors/mod.rs (4)
system_version_type
(24-26)config
(98-100)version
(28-30)id
(16-18)packages/rs-dpp/src/data_contract/v1/accessors/mod.rs (5)
system_version_type
(33-35)config
(107-109)version
(37-39)id
(25-27)tokens
(161-163)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/mod.rs (1)
setup_identity
(135-191)packages/rs-dpp/src/data_contract/document_type/accessors/mod.rs (3)
documents_mutable
(126-131)documents_mutable
(343-348)documents_mutable
(506-511)packages/rs-drive/src/query/mod.rs (1)
from_sql_expr
(824-982)packages/rs-drive-abci/src/platform_types/state_transitions_processing_result/mod.rs (5)
invalid_paid_count
(79-81)invalid_unpaid_count
(84-86)valid_count
(89-91)aggregated_fees
(99-101)execution_results
(109-111)packages/rs-dpp/src/fee/fee_result/refunds.rs (1)
calculate_refunds_amount_for_identity
(155-164)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/v0_methods.rs (3)
new_document_creation_transition_from_document
(102-143)new_document_transfer_transition_from_document
(230-271)new_document_deletion_transition_from_document
(188-227)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (3)
new_document_creation_transition_from_document
(93-134)new_document_transfer_transition_from_document
(179-220)new_document_deletion_transition_from_document
(223-262)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (3)
new_document_creation_transition_from_document
(91-145)new_document_transfer_transition_from_document
(204-260)new_document_deletion_transition_from_document
(263-315)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_update_price_transition_action_uniqueness/v1/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/transformer.rs (1)
packages/rs-dpp/src/document/accessors/mod.rs (4)
revision
(54-58)updated_at
(66-70)updated_at_block_height
(84-88)updated_at_core_block_height
(102-106)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/v1/mod.rs (3)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)packages/rs-dpp/src/data_contract/document_type/index/mod.rs (1)
property_names
(318-323)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_create_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs (7)
packages/rs-dpp/src/tests/json_document.rs (1)
json_document_to_contract
(66-74)packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/mod.rs (1)
setup_identity
(135-191)packages/rs-dpp/src/data_contract/document_type/v1/accessors.rs (1)
documents_mutable
(85-87)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/v0_methods.rs (1)
new_document_purchase_transition_from_document
(318-359)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/v0_methods.rs (1)
new_document_purchase_transition_from_document
(309-350)packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/methods/mod.rs (1)
new_document_purchase_transition_from_document
(377-435)packages/rs-drive/src/query/mod.rs (1)
from_sql_expr
(824-982)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/transformer.rs (1)
packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/mod.rs (1)
original_document
(878-880)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_replace_transition_action_uniqueness/v0/mod.rs (1)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/mod.rs (1)
drive
(184-198)
packages/rs-drive/src/drive/document/index_uniqueness/validate_document_transfer_transition_action_uniqueness/mod.rs (2)
packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v0/mod.rs (1)
document_type
(62-224)packages/rs-drive/src/drive/document/index_uniqueness/internal/validate_uniqueness_of_data/v1/mod.rs (1)
document_type
(65-407)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/v0/mod.rs (4)
packages/rs-drive/src/state_transition_action/batch/batched_transition/document_transition/document_replace_transition_action/mod.rs (3)
changed_data_fields
(110-114)data_owned
(116-120)creator_id
(122-126)packages/rs-dpp/src/document/accessors/mod.rs (1)
creator_id
(114-118)packages/rs-dpp/src/document/accessors/v0/mod.rs (1)
creator_id
(50-50)packages/rs-dpp/src/document/v0/accessors.rs (1)
creator_id
(160-162)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: Rust packages (wasm-dpp) / Tests
- GitHub Check: Rust packages (dpp) / Unused dependencies
- GitHub Check: Rust packages (dpp) / Tests
- GitHub Check: Rust packages (dpp) / Check each feature
- GitHub Check: Rust packages (wasm-sdk) / Linting
- GitHub Check: Rust packages (drive-abci) / Tests
- GitHub Check: Rust packages (wasm-sdk) / Unused dependencies
- GitHub Check: Rust packages (wasm-sdk) / Tests
- GitHub Check: Rust packages (drive-abci) / Check each feature
- GitHub Check: Rust packages (drive) / Tests
- GitHub Check: Rust packages (rs-sdk-ffi) / Linting
- GitHub Check: Rust packages (rs-sdk-ffi) / Tests
- GitHub Check: Build JS packages / Build JS
- GitHub Check: Swift SDK and Example build (warnings as errors)
...abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs
Show resolved
Hide resolved
...iles/contract/crypto-card-game/crypto-card-game-direct-purchase-unique-creator-id-index.json
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
Checklist:
For repository code-owners and collaborators only
Summary by CodeRabbit
New Features
Improvements
SDK/WASM
Tests