Skip to content

feat: group queries #2432

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

Merged
merged 14 commits into from
Jan 20, 2025
Merged

feat: group queries #2432

merged 14 commits into from
Jan 20, 2025

Conversation

QuantumExplorer
Copy link
Member

@QuantumExplorer QuantumExplorer commented Jan 20, 2025

Summary by CodeRabbit

Based on the comprehensive summary, here are the release notes:

  • New Features

    • Added support for group action queries and verification
    • Introduced new methods for fetching and proving group action information
    • Enhanced platform capabilities for retrieving group action signers
  • Improvements

    • Consolidated group action retrieval methods
    • Improved versioning and compatibility for group-related operations
    • Streamlined error handling for group action queries
  • Changes

    • Renamed and restructured group-related method signatures
    • Updated platform version structures to support new group action features
    • Removed deprecated group action methods
  • Technical Enhancements

    • Added new verification methods for group actions and signers
    • Expanded cryptographic proof capabilities for group information
    • Introduced more granular control over group action status retrieval

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

Copy link
Contributor

coderabbitai bot commented Jan 20, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This pull request introduces significant enhancements to the group action and group action signers functionality across multiple packages in the Dash Platform repository. The changes span protocol buffer definitions, Rust implementation modules, and versioning structures. Key modifications include adding new methods for retrieving and proving group actions, implementing action status tracking, and expanding the verification capabilities for group-related operations.

Changes

File Change Summary
packages/dapi-grpc/protos/platform/v0/platform.proto Replaced getActiveGroupActions and getClosedGroupActions with a unified getGroupActions method, added getGroupActionSigners method
packages/rs-dpp/src/group/group_action_status.rs Introduced GroupActionStatus enum with ActionActive and ActionClosed variants
packages/rs-drive-abci/src/query/group_queries/ Added new query methods for group actions and group action signers
packages/rs-drive/src/drive/group/ Enhanced methods for fetching, proving, and verifying group actions and signers
packages/rs-platform-version/src/version/ Updated version structures to support new group action and signer methods

Sequence Diagram

sequenceDiagram
    participant Client
    participant DAPI
    participant Platform
    participant Drive

    Client->>DAPI: getGroupActions(request)
    DAPI->>Platform: Process request
    Platform->>Drive: Fetch group actions
    Drive-->>Platform: Return group actions
    Platform-->>DAPI: Respond with actions
    DAPI-->>Client: Return group actions

    Client->>DAPI: getGroupActionSigners(request)
    DAPI->>Platform: Process request
    Platform->>Drive: Fetch action signers
    Drive-->>Platform: Return signers
    Platform-->>DAPI: Respond with signers
    DAPI-->>Client: Return action signers
Loading

Possibly related PRs

Suggested reviewers

  • shumkov

Poem

🐰 Hopping through code with glee,
Group actions now flow free!
From active to closed with grace,
Signers tracked in every space.
A rabbit's dance of protocol delight! 🚀


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@QuantumExplorer
Copy link
Member Author

@coderabbitai review

Copy link
Contributor

coderabbitai bot commented Jan 20, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🧹 Nitpick comments (31)
packages/rs-drive/src/verify/group/verify_group_info/v0/mod.rs (1)

41-45: Improve error message for clarity

The error message "we should always get back one element" could be more informative. Consider specifying the expected and actual lengths to aid debugging.

Apply this diff to enhance the error message:

 return Err(Error::Proof(ProofError::CorruptedProof(
-    "we should always get back one element".to_string(),
+    format!("expected exactly one element, but got {}", proved_key_values.len()),
 )));
packages/rs-drive-abci/src/query/group_queries/group_actions/mod.rs (2)

23-24: Enhance error message for decoding failure

Consider providing more details in the error message to help diagnose decoding issues, such as specifying which part of the request is invalid or missing.

Apply this diff to improve the error message:

 "could not decode active group actions query".to_string(),
+"Missing 'version' field in GetGroupActionsRequest.".to_string(),

34-36: Future-proof the version handling in match expression

Currently, the match expression handles only RequestVersion::V0(_). To make the code more robust and maintainable for future versions, consider adding a wildcard arm or handling other potential versions explicitly.

Apply this diff to adjust the match expression:

 let feature_version = match &version {
     RequestVersion::V0(_) => 0,
+    //_ => return Ok(QueryValidationResult::new_with_error(
+    //    QueryError::UnsupportedQueryVersion(...)
+    //)),
 };
packages/rs-drive/src/verify/group/verify_action_signers/v0/mod.rs (1)

40-59: Enhance error handling and clarity in filter_map closure

The closure within filter_map can be improved for better readability and error handling. Explicitly handle unexpected element types and provide detailed error messages to aid in debugging.

Consider restructuring the closure as follows:

 .filter_map(|(_, key, element)| {
     let id: Identifier = match key.try_into() {
         Ok(id) => id,
         Err(_) => {
             return Some(Err(Error::Proof(ProofError::IncorrectProof(
                 "identifier was not 32 bytes long".to_string(),
             ))));
         }
     };
     match element {
         Some(SumItem(value, ..)) => {
             let signing_power: GroupMemberPower = match value.try_into() {
                 Ok(signing_power) => signing_power,
                 Err(_) => {
                     return Some(Err(Error::Proof(ProofError::IncorrectProof(
                         "signing power should be encodable as a u32 integer".to_string(),
                     ))));
                 }
             };
             Some(Ok((id, signing_power)))
         },
+        Some(unexpected_element) => {
+            return Some(Err(Error::Proof(ProofError::IncorrectProof(
+                format!("expected SumItem, found {:?}", unexpected_element),
+            ))));
+        },
         None => None,
     }
 })
packages/rs-drive/src/drive/group/fetch/fetch_action_signers/v0/mod.rs (2)

67-68: Include the original error for better debugging

In the error handling when converting value with try_into(), the original error e is being discarded. Including the original error message can provide more context and aid in debugging.

Consider modifying the error mapping to include the original error:

 Ok((
     key.try_into()?,
-    value.try_into().map_err(|e| Error::Drive(DriveError::CorruptedDriveState("signed power should be encodable on a u32 integer".to_string())))?
+    value.try_into().map_err(|e| Error::Drive(DriveError::CorruptedDriveState(format!("signed power should be encodable on a u32 integer: {}", e))))?
 ))

69-71: Enhance the error message with element details

The error message in the _ arm of the match statement provides a general description. Including the unexpected element type can help with troubleshooting.

Modify the error message to include the element type:

 Err(Error::Drive(DriveError::CorruptedDriveState(
-    "element should be a sum item representing member signed power".to_string(),
+    format!("expected SumItem representing member signed power, found {:?}", element),
 )))
packages/rs-drive/src/verify/group/verify_active_action_infos/v0/mod.rs (2)

44-53: Simplify error handling when accessing the last path component

The current usage of let Some(last_path_component) = path.last() else { ... }; can be simplified for better readability, especially considering error handling.

Consider using match or ok_or_else for clearer control flow:

let last_path_component = path.last().ok_or_else(|| {
    Error::Proof(ProofError::IncorrectProof("last path component is empty".to_string()))
})?;

55-68: Provide more context in deserialization error

When deserialization of GroupAction fails, the error returned lacks context about the action_id and the problematic data, which can be valuable for debugging.

Enhance the error handling to include action_id and the serialization error:

match GroupAction::deserialize_from_bytes(&value) {
    Ok(active_action) => active_action,
    Err(e) => return Some(Err(Error::Proof(ProofError::InvalidData(format!(
-       "failed to deserialize GroupAction"
+       "failed to deserialize GroupAction for action ID {:?}: {}",
+       action_id, e
    ))))),
};
packages/rs-drive/src/verify/group/verify_group_info/mod.rs (1)

48-68: Prepare for future version support in verify_group_info

The current implementation only handles version 0. To ensure forward compatibility and easier maintenance, it's advisable to handle potential future versions more gracefully.

Consider implementing a match arm for future versions or using a default case:

match platform_version.drive.methods.verify.group.verify_group_info {
    0 => Self::verify_group_info_v0(
        proof,
        contract_id,
        group_contract_position,
        verify_subset_of_proof,
        platform_version,
    ),
    // Prepare for future versions
    version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
        method: "verify_group_info".to_string(),
        known_versions: vec![0],
        received: version,
    })),
}

Alternatively, if all future versions should default to the current implementation:

_ => Self::verify_group_info_v0(
    proof,
    contract_id,
    group_contract_position,
    verify_subset_of_proof,
    platform_version,
),
packages/rs-drive/src/drive/group/fetch/fetch_action_infos/v0/mod.rs (5)

70-74: Enhance Error Message for Empty Path

The error message "we should always have a path not be empty" could be more descriptive to aid in debugging. Providing more context will help identify the issue faster.

Consider updating the error message as follows:

-                    return Err(Error::Drive(DriveError::CorruptedDriveState(
-                        "we should always have a path not be empty".to_string(),
-                    )));
+                    return Err(Error::Drive(DriveError::CorruptedDriveState(
+                        "Expected non-empty path when fetching action infos but found an empty path.".to_string(),
+                    )));

75-75: Handle Potential Conversion Errors Gracefully

When converting last_path_component to an Identifier, any failure will result in an error. Consider adding context to the error to facilitate debugging.

Modify the code to include the problematic bytes in the error:

-            let action_id = Identifier::from_bytes(last_path_component)?;
+            let action_id = Identifier::from_bytes(last_path_component).map_err(|e| {
+                Error::Drive(DriveError::CorruptedDriveState(format!(
+                    "Failed to convert last path component to Identifier: {:?}, error: {}",
+                    last_path_component, e
+                )))
+            })?;

78-82: Improve Error Message for Unexpected Element Type

The error message when an unexpected element type is encountered could be more informative by specifying the actual type received.

Update the error message to include the unexpected element type:

-                _ => Err(Error::Drive(DriveError::CorruptedDriveState(
-                    "element should be an item representing the group action".to_string(),
-                ))),
+                other_element => Err(Error::Drive(DriveError::CorruptedDriveState(format!(
+                    "Expected an Item element representing the group action, but found: {}",
+                    other_element.get_element_type()
+                )))),

Ensure that get_element_type properly retrieves the element type as a string.


19-38: Consider Documenting Public Method

The public method fetch_action_infos_v0 lacks documentation. Adding a brief doc comment explaining its purpose and parameters would improve code readability and maintainability.

Add a doc comment above the method:

+    /// Fetches action infos for a given contract and group position.
     pub(super) fn fetch_action_infos_v0(

40-85: Optimize Error Handling and Code Clarity

Consider refactoring the method to improve readability and error handling by breaking down complex expressions and using helper functions where appropriate.

While the current implementation is correct, refactoring could enhance maintainability.

packages/rs-drive/src/verify/group/verify_group_infos_in_contract/v0/mod.rs (3)

41-47: Enhance Error Message for Empty Path in Proof

The error message when the path is empty could be more descriptive. Providing additional context can assist in troubleshooting.

Update the error message:

                         Some(contract_position_bytes) => contract_position_bytes,
                         None => {
                             return Err(Error::Proof(ProofError::CorruptedProof(
-                                "path can't be empty in proof".to_string(),
+                                "Expected non-empty path in proof when verifying group infos.".to_string(),
                             )))
                         }

49-57: Include Actual Size in Incorrect Value Size Error

When reporting an incorrect value size, including the actual size encountered can aid in debugging.

Modify the error handling to include the size:

                     let key_bytes: [u8; 2] = match key_bytes.clone().try_into().map_err(|_| {
                         Error::Proof(ProofError::IncorrectValueSize(
-                            "group contract position incorrect size",
+                            format!("Group contract position incorrect size: expected 2 bytes, got {}", key_bytes.len()),
                         ))
                     }) {
                         Ok(bytes) => bytes,

19-78: Add Documentation for Public Method

The method verify_group_infos_in_contract_v0 lacks documentation. Providing a doc comment will improve clarity for other developers.

Include a doc comment describing the method's purpose and parameters.

packages/rs-drive/src/verify/group/verify_group_infos_in_contract/mod.rs (1)

70-74: Ensure All Known Versions Are Handled

In the match statement for version handling, consider adding a default case or logging to handle unexpected versions more gracefully.

While the current error returned is appropriate, proactively handling future versions can improve robustness.

packages/rs-drive-abci/src/query/group_queries/group_action_signers/v0/mod.rs (1)

19-104: Ensure comprehensive validation of input parameters

The method validates contract_id, action_id, and group_contract_position, but it would be prudent to validate the status parameter as well. Although status is converted using try_into(), adding explicit validation could improve error messaging and robustness.

Consider adding validation for status:

 let group_status: GroupActionStatus =
     check_validation_result_with_data!(status.try_into().map_err(|_| {
         QueryError::InvalidArgument(
             "group action status must be Active or Closed".to_string(),
         )
     }));
+ 
+ if !matches!(group_status, GroupActionStatus::Active | GroupActionStatus::Closed) {
+     return Ok(QueryValidationResult::new_with_error(QueryError::InvalidArgument(
+         "group action status must be Active or Closed".to_string(),
+     )));
+ }
packages/rs-drive/src/drive/group/fetch/queries.rs (2)

59-66: Refactor duplicated action_status match statements into a helper function

The match statements on action_status in both group_action_infos_query and group_action_signers_query are identical. Consider refactoring this logic into a helper function to eliminate code duplication and improve maintainability.

Also applies to: 98-105


Line range hint 90-123: Add parameter documentation for group_action_signers_query

The method group_action_signers_query lacks parameter descriptions in its doc comments. For consistency and better maintainability, please add documentation for each parameter similar to the other methods in the module.

packages/rs-drive/src/drive/group/prove/prove_action_signers/v0/mod.rs (1)

85-104: Refactor Repeated Identity Setup in Tests

The identity creation code is duplicated across multiple tests (should_prove_action_signers_with_multiple_actions, should_prove_no_action_signers_for_non_existent_action, and should_prove_action_signers_for_closed_action_if_still_active). Consider refactoring this code into a helper function to enhance maintainability and reduce redundancy.

You can extract the identity setup into a helper function as follows:

+// Add this helper function outside of the tests
+fn create_test_identities(
+    platform_version: &PlatformVersion,
+) -> (Identity, Identity, Identity) {
+    let identity_1 = Identity::random_identity(3, Some(14), platform_version)
+        .expect("expected a platform identity");
+    let identity_2 = Identity::random_identity(3, Some(506), platform_version)
+        .expect("expected a platform identity");
+    let identity_3 = Identity::random_identity(3, Some(9), platform_version)
+        .expect("expected a platform identity");
+    (identity_1, identity_2, identity_3)
+}

Then, update each test to use this helper function:

-    let identity_1 = Identity::random_identity(3, Some(14), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_2 = Identity::random_identity(3, Some(506), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_3 = Identity::random_identity(3, Some(9), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_1_id = identity_1.id();
-    let identity_2_id = identity_2.id();
-    let identity_3_id = identity_3.id();
+    let (identity_1, identity_2, identity_3) = create_test_identities(platform_version);
+    let identity_1_id = identity_1.id();
+    let identity_2_id = identity_2.id();
+    let identity_3_id = identity_3.id();

Also applies to: 276-285, 364-373

packages/rs-drive/src/drive/group/prove/prove_action_infos/v0/mod.rs (1)

90-104: Refactor Repeated Identity Setup in Tests

Similar to other test modules, the identity creation code is repeated across multiple tests (should_prove_action_infos_with_multiple_actions, should_prove_no_action_infos_for_non_existent_contract, and should_fetch_and_prove_action_infos_with_start_action_id). Refactoring this code into a shared helper function would improve code reuse and readability.

Here's how you can refactor the identity creation:

+// Add this helper function outside of the tests
+fn create_test_identities(
+    platform_version: &PlatformVersion,
+) -> (Identity, Identity, Identity) {
+    let identity_1 = Identity::random_identity(3, Some(14), platform_version)
+        .expect("expected a platform identity");
+    let identity_2 = Identity::random_identity(3, Some(506), platform_version)
+        .expect("expected a platform identity");
+    let identity_3 = Identity::random_identity(3, Some(9), platform_version)
+        .expect("expected a platform identity");
+    (identity_1, identity_2, identity_3)
+}

Update the tests to use the helper function:

-    let identity_1 = Identity::random_identity(3, Some(14), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_2 = Identity::random_identity(3, Some(506), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_3 = Identity::random_identity(3, Some(9), platform_version)
-        .expect("expected a platform identity");
-
-    let identity_1_id = identity_1.id();
-    let identity_2_id = identity_2.id();
-    let identity_3_id = identity_3.id();
+    let (identity_1, identity_2, identity_3) = create_test_identities(platform_version);
+    let identity_1_id = identity_1.id();
+    let identity_2_id = identity_2.id();
+    let identity_3_id = identity_3.id();

Also applies to: 276-285, 314-326

packages/rs-dpp/src/group/group_action_status.rs (1)

9-29: Consider refactoring duplicate conversion logic and adding documentation.

  1. The conversion logic is duplicated between TryFrom<u8> and TryFrom<i32>. Consider extracting it into a private helper function.
  2. Add documentation to specify the valid values (0 for Active, 1 for Closed) to help API consumers.

Example refactor:

+ /// Represents the status of a group action.
+ ///
+ /// Valid values:
+ /// * 0 - Active
+ /// * 1 - Closed
 #[derive(Debug, PartialEq, PartialOrd, Clone, Eq)]
 pub enum GroupActionStatus {
     ActionActive,
     ActionClosed,
 }

+ fn convert_to_status(value: impl Into<i32>) -> Result<GroupActionStatus, anyhow::Error> {
+     match value.into() {
+         0 => Ok(GroupActionStatus::ActionActive),
+         1 => Ok(GroupActionStatus::ActionClosed),
+         value => bail!("unrecognized action status: {}", value),
+     }
+ }
+
 impl TryFrom<u8> for GroupActionStatus {
     type Error = anyhow::Error;
     fn try_from(value: u8) -> Result<Self, Self::Error> {
-        match value {
-            0 => Ok(Self::ActionActive),
-            1 => Ok(Self::ActionClosed),
-            value => bail!("unrecognized action status: {}", value),
-        }
+        convert_to_status(value)
     }
 }

 impl TryFrom<i32> for GroupActionStatus {
     type Error = anyhow::Error;
     fn try_from(value: i32) -> Result<Self, Self::Error> {
-        match value {
-            0 => Ok(Self::ActionActive),
-            1 => Ok(Self::ActionClosed),
-            value => bail!("unrecognized action status: {}", value),
-        }
+        convert_to_status(value)
     }
 }
packages/rs-drive-abci/src/query/group_queries/group_action_signers/mod.rs (2)

13-14: Enhance method documentation.

While the method has a basic doc comment, it would benefit from more detailed documentation including:

  • Parameter descriptions
  • Return value details
  • Possible error scenarios

Add comprehensive documentation similar to other query methods:

-    /// Querying of group action signers
+    /// Queries information about signers associated with a group action.
+    ///
+    /// # Parameters
+    /// * `request` - The request containing version information
+    /// * `platform_state` - Current state of the platform
+    /// * `platform_version` - Version information for feature compatibility
+    ///
+    /// # Returns
+    /// * `Ok(QueryValidationResult<GetGroupActionSignersResponse>)` - The query result or validation error
+    /// * `Err(Error)` - If an internal error occurs

20-26: Improve error message clarity.

The error message for decoding failure could be more specific about what failed.

-                    "could not decode active group action signers query".to_string(),
+                    "version field is required in GetGroupActionSignersRequest".to_string(),
packages/rs-drive/src/drive/tokens/system/prove_token_total_supply_and_aggregated_identity_balances/v0/mod.rs (1)

200-202: LGTM! Consider adding a comment explaining zero base supply.

The explicit initialization of base supply to 0 improves clarity. Consider adding a comment explaining why a zero base supply is used in this test case.

 TokenConfiguration::V0(
+    // Initialize with zero base supply to test empty token state
     TokenConfigurationV0::default_most_restrictive().with_base_supply(0),
 ),
packages/rs-drive/src/drive/group/prove/prove_group_infos/v0/mod.rs (3)

72-195: Test coverage could be enhanced for edge cases.

While the test covers the basic functionality of proving multiple groups, consider adding test cases for:

  • Groups with maximum number of members
  • Groups with maximum power values
  • Groups with duplicate members

197-332: Consider testing boundary conditions for pagination.

The pagination test could be enhanced by testing:

  • Maximum limit value
  • Zero limit value
  • Start position at the last group

334-366: Add more empty/error scenarios.

The empty contract test is good, but consider adding tests for:

  • Contract with deleted groups
  • Invalid contract ID
  • Invalid group positions
packages/dapi-grpc/protos/platform/v0/platform.proto (1)

Line range hint 1539-1668: Consider adding documentation for event types.

While the message structure is good, consider adding detailed documentation for:

  • Each event type's purpose and usage
  • Field constraints and validation rules
  • Example usage scenarios
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0220302 and decb2f7.

📒 Files selected for processing (57)
  • packages/dapi-grpc/protos/platform/v0/platform.proto (3 hunks)
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs (2 hunks)
  • packages/rs-dpp/src/group/group_action_status.rs (1 hunks)
  • packages/rs-dpp/src/group/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/perform_events_on_first_block_of_protocol_change/v0/mod.rs (0 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_action_signers/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_action_signers/v0/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_actions/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_actions/v0/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_info/v0/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/group_infos/v0/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/group_queries/mod.rs (1 hunks)
  • packages/rs-drive-abci/src/query/service.rs (2 hunks)
  • packages/rs-drive/src/drive/group/estimated_costs/for_add_group_action/v0/mod.rs (2 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_action_infos/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_action_infos/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_action_signers/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_action_signers/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_active_action_info/mod.rs (5 hunks)
  • packages/rs-drive/src/drive/group/fetch/fetch_active_action_info/v0/mod.rs (2 hunks)
  • packages/rs-drive/src/drive/group/fetch/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/fetch/queries.rs (4 hunks)
  • packages/rs-drive/src/drive/group/insert/add_group_action/v0/mod.rs (2 hunks)
  • packages/rs-drive/src/drive/group/paths.rs (2 hunks)
  • packages/rs-drive/src/drive/group/prove/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_action_infos/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_action_infos/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_action_signers/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_action_signers/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_group_info/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_group_info/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_group_infos/mod.rs (0 hunks)
  • packages/rs-drive/src/drive/group/prove/prove_group_infos/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/tokens/balance/queries.rs (1 hunks)
  • packages/rs-drive/src/drive/tokens/calculate_total_tokens_balance/mod.rs (0 hunks)
  • packages/rs-drive/src/drive/tokens/info/queries.rs (1 hunks)
  • packages/rs-drive/src/drive/tokens/system/prove_token_total_supply_and_aggregated_identity_balances/mod.rs (1 hunks)
  • packages/rs-drive/src/drive/tokens/system/prove_token_total_supply_and_aggregated_identity_balances/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_action_signers/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_action_signers/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_active_action_infos/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_active_action_infos/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_group_info/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_group_info/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_group_infos_in_contract/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/group/verify_group_infos_in_contract/v0/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/mod.rs (1 hunks)
  • packages/rs-drive/src/verify/tokens/verify_token_statuses/mod.rs (0 hunks)
  • packages/rs-drive/src/verify/tokens/verify_token_total_supply_and_aggregated_identity_balance/mod.rs (1 hunks)
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/mod.rs (1 hunks)
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/v1.rs (1 hunks)
  • packages/rs-platform-version/src/version/drive_versions/drive_group_method_versions/mod.rs (1 hunks)
  • packages/rs-platform-version/src/version/drive_versions/drive_group_method_versions/v1.rs (1 hunks)
  • packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/mod.rs (2 hunks)
  • packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/v1.rs (2 hunks)
  • packages/rs-platform-version/src/version/mocks/v2_test.rs (1 hunks)
💤 Files with no reviewable changes (4)
  • packages/rs-drive/src/verify/tokens/verify_token_statuses/mod.rs
  • packages/rs-drive/src/drive/tokens/calculate_total_tokens_balance/mod.rs
  • packages/rs-drive/src/drive/group/prove/prove_group_infos/mod.rs
  • packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/perform_events_on_first_block_of_protocol_change/v0/mod.rs
✅ Files skipped from review due to trivial changes (8)
  • packages/rs-dpp/src/group/mod.rs
  • packages/rs-drive-abci/src/query/group_queries/mod.rs
  • packages/rs-drive/src/drive/tokens/info/queries.rs
  • packages/rs-drive/src/drive/tokens/balance/queries.rs
  • packages/rs-drive/src/drive/group/prove/mod.rs
  • packages/rs-drive/src/drive/tokens/system/prove_token_total_supply_and_aggregated_identity_balances/mod.rs
  • packages/rs-drive/src/drive/group/fetch/fetch_active_action_info/v0/mod.rs
  • packages/rs-drive/src/verify/group/mod.rs
🔇 Additional comments (42)
packages/rs-drive/src/verify/group/verify_group_infos_in_contract/v0/mod.rs (1)

60-74: ⚠️ Potential issue

Handle Missing Elements Explicitly

In cases where element is None, it's important to handle it explicitly to avoid potential issues.

Add handling for None elements:

                     match element {
                         Some(Item(value, ..)) => {
                             // existing code...
                         }
+                        None => {
+                            return Err(Error::Proof(ProofError::CorruptedProof(
+                                "Missing element in proof for group info.".to_string(),
+                            )));
+                        }
                         Some(element) => Err(Error::Proof(ProofError::IncorrectProof(format!(
                             "Group should be in an Item, but found {}",
                             element.type_str()

Likely invalid or redundant comment.

packages/rs-drive/src/verify/group/verify_group_infos_in_contract/mod.rs (1)

47-76: Method Documentation is Comprehensive

The verify_group_infos_in_contract method is thoroughly documented, which enhances maintainability and developer understanding.

packages/rs-drive/src/drive/group/fetch/fetch_action_infos/mod.rs (2)

36-68: Implementation of fetch_action_infos is correct

The method correctly matches on platform_version and delegates to the appropriate versioned implementation. Error handling is properly implemented.


92-125: Implementation of fetch_action_infos_and_add_operations is correct

The method correctly matches on platform_version and delegates to the appropriate versioned implementation. Error handling is properly implemented.

packages/rs-drive/src/drive/group/prove/prove_action_infos/mod.rs (2)

38-68: Implementation of prove_action_infos is correct

The method correctly delegates to the versioned implementation based on the platform_version. Error handling is properly managed.


96-129: Implementation of prove_action_infos_operations is correct

The method correctly delegates to the versioned implementation based on the platform_version. Error handling is properly managed.

packages/rs-drive-abci/src/query/group_queries/group_actions/v0/mod.rs (2)

73-241: Implementation of query_group_actions_v0 is correct

The method correctly processes the request, validates input parameters, and constructs the response appropriately. The mapping of internal GroupAction events to the response types is handled correctly.


59-72: ⚠️ Potential issue

Correct the limit validation logic and error message

There is an inconsistency in the limit validation. The condition checks if limit_value as u16 is greater than config.default_query_limit, but the error message refers to config.max_query_limit. Ensure that the validation correctly enforces the maximum limit and that the error message accurately reflects the condition.

Here's the suggested correction:

                     || limit_value as u16 > config.default_query_limit
+                    || limit_value as u16 > config.max_query_limit
                 {
                     None
                 }
...
             .ok_or(drive::error::Error::Query(QuerySyntaxError::InvalidLimit(
-                format!("limit greater than max limit {}", config.max_query_limit),
+                format!("limit greater than max limit {}", config.default_query_limit),
             )))?;

Likely invalid or redundant comment.

packages/rs-drive/src/drive/group/prove/prove_action_signers/v0/mod.rs (1)

10-53: Well-Structured Implementation of Proving Action Signers

The prove_action_signers_v0 and prove_action_signers_operations_v0 methods are well-implemented. They follow consistent patterns and maintain clear separation of concerns. The use of parameters and error handling is appropriate.

packages/rs-drive/src/drive/group/prove/prove_action_infos/v0/mod.rs (1)

11-58: Consistent Implementation of Proving Action Infos

The methods prove_action_infos_v0 and prove_action_infos_operations_v0 are implemented consistently with existing patterns in the codebase. They effectively handle parameters and error scenarios, maintaining code clarity.

packages/rs-drive/src/drive/group/fetch/mod.rs (1)

4-6: Module Declarations Updated Appropriately

The addition of fetch_action_infos, fetch_action_signers, and fetch_active_action_info modules aligns with the new functionalities introduced in the codebase. The module organization remains clean and logical.

packages/rs-drive/src/verify/mod.rs (1)

13-19: LGTM! Well-structured module declarations with clear documentation.

The new module declarations for group, tokens, and voting follow the established pattern and include descriptive documentation comments that clearly state their purpose.

packages/rs-dpp/src/group/group_action_status.rs (1)

3-7: LGTM! Well-designed enum with appropriate derive traits.

The GroupActionStatus enum has clear, descriptive variants and includes all necessary derive traits for comparison and debugging.

packages/rs-platform-version/src/version/drive_versions/drive_group_method_versions/v1.rs (1)

9-15: LGTM! Consistent version initialization for new group-related methods.

The new fields for action infos and signers follow the established pattern of initializing feature versions at 0.

Also applies to: 20-21

packages/rs-platform-version/src/version/drive_versions/drive_group_method_versions/mod.rs (1)

16-22: LGTM! Well-structured version definitions for new group functionality.

The new fields for action infos and signers are well-organized and maintain consistency with the existing versioning structure.

Also applies to: 29-30

packages/rs-drive-abci/src/query/group_queries/group_action_signers/mod.rs (2)

28-47: LGTM! Version handling implementation.

The version validation logic follows the established pattern:

  1. Retrieves version bounds from platform configuration
  2. Validates the requested version against bounds
  3. Returns appropriate error for unsupported versions

49-57: LGTM! Response handling implementation.

The version-specific response handling and wrapping is implemented correctly.

packages/rs-drive/src/verify/tokens/verify_token_total_supply_and_aggregated_identity_balance/mod.rs (1)

7-7: LGTM! Import cleanup.

Good cleanup removing unused imports while retaining the essential TotalSingleTokenBalance.

packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/v1.rs (1)

32-36: LGTM! Group verification methods integration.

The new group verification methods are properly integrated into the versioning system:

  • verify_group_info
  • verify_group_infos_in_contract
  • verify_action_infos

All methods are initialized at version 0, consistent with other features.

packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/mod.rs (1)

40-41: LGTM! Group query versioning extension.

The DriveAbciQueryGroupVersions struct is properly extended with:

  • group_actions: FeatureVersionBounds
  • group_action_signers: FeatureVersionBounds

This maintains consistency with other query version structures.

packages/rs-drive-abci/src/query/group_queries/group_info/v0/mod.rs (1)

34-34: LGTM! Error message accurately reflects the parameter type.

The error message now correctly identifies that a "contract id" is being validated, improving clarity and maintainability.

packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/mod.rs (2)

10-10: LGTM! Group verification methods integrated into versioning structure.

The addition of the group field to DriveVerifyMethodVersions follows the established pattern and maintains consistency with other verification method categories.


47-52: LGTM! Well-structured group verification method versioning.

The DriveVerifyGroupMethodVersions struct provides comprehensive versioning support for group-related verification methods:

  • Group info verification
  • Contract-scoped group info verification
  • Action info verification
packages/rs-drive/src/drive/group/prove/prove_group_info/mod.rs (1)

7-7: LGTM! Clean import statement.

Unused imports have been removed while retaining only the necessary TransactionArg, improving code maintainability.

packages/rs-drive-abci/src/query/group_queries/group_infos/v0/mod.rs (3)

36-36: LGTM! Consistent error message across group query implementations.

The error message update maintains consistency with other group query implementations while accurately reflecting the parameter type.


Line range hint 1-1: Request PR description updates.

While the code changes look good, please update the PR description with:

  1. Details about testing procedures and test coverage
  2. Information about any breaking changes
  3. Complete the PR checklist items

This will help ensure proper documentation and review of the changes.


Line range hint 41-51: Verify the limit validation logic.

The limit validation includes multiple conditions:

  • Non-zero check
  • Maximum value check (u16::MAX)
  • Configuration-based limit check

Please ensure these limits align with the expected query performance characteristics and system constraints.

✅ Verification successful

Limit validation logic is correctly implemented and consistent with system constraints

The validation logic properly enforces:

  • Non-zero values to prevent empty results
  • Type safety through u16::MAX boundary check
  • Performance constraints via configuration-based limits

The implementation aligns with other group queries in the codebase and maintains consistent validation patterns.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other limit validations to ensure consistency
rg -A 5 "default_query_limit|max_query_limit" 

Length of output: 23441

packages/rs-drive/src/drive/group/fetch/fetch_active_action_info/mod.rs (2)

Line range hint 35-63: LGTM! Method renaming improves clarity.

The renaming from fetch_action_id_info to fetch_active_action_info better reflects that this method specifically deals with active group actions.


Line range hint 86-119: LGTM! Method renaming maintains consistency.

The renaming from fetch_action_id_info_and_add_operations to fetch_active_action_info_and_add_operations aligns with the previous method's renaming and maintains consistency.

packages/rs-drive/src/drive/group/paths.rs (2)

Line range hint 72-83: LGTM! Path construction is well-structured.

The renaming to group_active_action_root_path and its implementation correctly uses the GROUP_ACTIVE_ACTIONS_KEY constant.


Line range hint 86-96: LGTM! Vector path construction maintains consistency.

The renaming to group_active_action_root_path_vec aligns with the previous method and correctly implements the vector version of the path construction.

packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/v1.rs (1)

212-221: LGTM! Version bounds for new group action queries.

The addition of group_actions and group_action_signers with appropriate version bounds enables proper versioning support for the new group action queries.

packages/rs-drive/src/drive/group/prove/prove_group_info/v0/mod.rs (2)

64-141: LGTM! Comprehensive test for existing group.

The test thoroughly verifies the proof generation and verification for an existing group, including proper setup and assertions.


143-198: LGTM! Good negative test case coverage.

The test properly verifies that non-existent groups return None while still generating valid proofs with non-empty root hashes.

packages/rs-drive/src/drive/group/estimated_costs/for_add_group_action/v0/mod.rs (1)

130-133: LGTM! Path change maintains cost estimation logic.

The update to use group_active_action_root_path is consistent with the group action status changes while preserving the existing cost estimation logic.

packages/rs-platform-version/src/version/mocks/v2_test.rs (1)

350-359: LGTM! Version configuration is consistent.

The version bounds for group actions and signers follow the same pattern as other features in the platform.

packages/rs-drive-abci/src/query/service.rs (2)

683-693: LGTM! Implementation follows service patterns.

The get_group_actions implementation correctly uses handle_blocking_query and follows the established pattern of other query methods.


695-702: LGTM! Error handling is consistent.

The get_group_action_signers implementation properly integrates with the platform's error handling and metrics system.

packages/dapi-grpc/protos/platform/v0/platform.proto (2)

1515-1538: LGTM! Well-structured request message for group actions.

The GetGroupActionsRequest design is clean and includes:

  • Clear status enum for active/closed actions
  • Proper pagination support
  • Optional proof generation

1671-1709: LGTM! Clean design for action signers API.

The GetGroupActionSigners messages are well-structured and consistent with platform patterns.

packages/rs-drive/src/drive/group/insert/add_group_action/v0/mod.rs (2)

2-3: LGTM! Import changes align with active/closed group action separation.

The updated import reflects the new distinction between active and closed group actions, which is consistent with the broader changes in the PR.


136-139: Verify the impact of path changes on existing group action queries.

The renaming from group_action_root_path to group_active_action_root_path suggests a new distinction between active and closed group actions. While this change improves clarity, we should ensure that:

  1. Existing queries are updated to handle this new path structure
  2. Data migration is handled if needed for existing group actions

Let's verify the usage and potential impact:

✅ Verification successful

Path changes are properly handled across the codebase

The renaming to group_active_action_root_path is safe as the codebase already supports different action states. The query system properly handles both active and closed actions through the GroupActionStatus enum, and all operations consistently use the appropriate path construction methods.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of group action path functions
# to ensure consistent updates across the codebase

echo "Checking for any remaining uses of old path function..."
rg "group_action_root_path\(" --type rust

echo "Checking for new path function usage..."
rg "group_active_action_root_path\(" --type rust

echo "Checking for potential group action query implementations..."
rg "fn.*group.*action.*query" --type rust

Length of output: 946


Script:

#!/bin/bash
# Check implementation of query functions and path construction

echo "Checking query implementations..."
rg -A 10 "fn group_action_infos_query|fn group_action_signers_query" --type rust

echo "Checking for path-related functions in queries module..."
rg "fn.*path|path.*=|->.*path" packages/rs-drive/src/drive/group/fetch/queries.rs

echo "Checking for path construction in group modules..."
rg "path.*=.*group.*action" --type rust

Length of output: 5219

QuantumExplorer and others added 8 commits January 20, 2025 23:18
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…mod.rs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@QuantumExplorer QuantumExplorer added this to the v2.0.0 milestone Jan 20, 2025
@QuantumExplorer QuantumExplorer merged commit e5964b8 into v2.0-tokens-dev Jan 20, 2025
3 checks passed
@QuantumExplorer QuantumExplorer deleted the feat/GroupQueries1 branch January 20, 2025 16:31
@thephez thephez added the dapi-endpoint DAPI endpoint addition or modification label Jan 28, 2025
lklimek added a commit that referenced this pull request Mar 6, 2025
commit 6776651
Author: QuantumExplorer <quantum@dash.org>
Date:   Sat Mar 1 22:23:41 2025 +0700

    chore: update to latest dash core 37 (#2483)

commit 1501103
Merge: a7c7a0f da17fc5
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 27 14:21:41 2025 +0700

    chore: merge master and resolve conflicts (#2481)

commit da17fc5
Author: pshenmic <pshenmic@gmail.com>
Date:   Thu Feb 27 13:31:51 2025 +0700

    feat(js-dash-sdk): fix tests after merge

commit c7e40cb
Merge: c57e8b2 f9eb069
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 27 09:35:02 2025 +0700

    Merge remote-tracking branch 'origin/chore/merge-master' into chore/merge-master

commit c57e8b2
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 27 09:34:40 2025 +0700

    test(dpp): fix assertion with the same value

commit 045b6fa
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 27 09:32:33 2025 +0700

    chore(dpp): remove unnecessary type conversion

commit 8160ccd
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 27 09:31:32 2025 +0700

    chore: remove duplicated commented code

commit f9eb069
Merge: 05d0085 a7c7a0f
Author: pshenmic <pshenmic@gmail.com>
Date:   Wed Feb 26 20:03:00 2025 +0700

    Merge branch 'v2.0-dev' into chore/merge-master

commit a7c7a0f
Author: pshenmic <pshenmic@gmail.com>
Date:   Wed Feb 26 19:52:02 2025 +0700

    build: bump rust version to 1.85 (#2480)

commit 05d0085
Merge: bcf1785 196976c
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Feb 26 18:03:38 2025 +0700

    Merge branch 'master' into v2.0-dev

commit bcf1785
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Fri Feb 21 08:43:35 2025 +0100

    feat: wasm sdk build proof-of-concept (#2405)

    Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>

commit 5e32426
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Thu Feb 20 19:22:52 2025 +0700

    fix: token already paused unpaused and frozen validation (#2466)

commit 374a036
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 20 17:46:57 2025 +0700

    test: fix slowdown of JS SDK unit tests (#2475)

commit 1fed09b
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 20 13:46:36 2025 +0700

    fix(dpp): invalid feature flag usage (#2477)

commit 33507bb
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Thu Feb 20 13:18:55 2025 +0700

    fix: destroy frozen funds used wrong identity and proof verification (#2467)

commit 91a9766
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Feb 19 16:57:32 2025 +0700

    feat(sdk): return state transition execution error (#2454)

commit cb915a7
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Feb 19 16:46:54 2025 +0700

    test: fix token history contract tests (#2470)

commit 04276d5
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Tue Feb 18 21:00:05 2025 +0700

    fix: xss vulnerability in mocha (#2469)

commit 196976c
Author: pshenmic <pshenmic@gmail.com>
Date:   Fri Feb 14 18:50:08 2025 +0700

    fix(sdk)!: bigint for uint64 values (#2443)

commit 0bd29a6
Author: pshenmic <pshenmic@gmail.com>
Date:   Fri Feb 14 17:29:35 2025 +0700

    feat(dpp): extra methods for state transitions in wasm (#2462)

commit 1eae781
Author: pshenmic <pshenmic@gmail.com>
Date:   Fri Feb 14 15:29:17 2025 +0700

    chore(platform): npm audit fix (#2463)

commit ddf4e67
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Feb 14 11:28:08 2025 +0700

    test: fix `fetchProofForStateTransition` tests and warnings (#2460)

commit d88ea46
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Feb 14 09:52:53 2025 +0700

    fix(dpp): invalid imports and tests (#2459)

commit 82e4d4c
Merge: 125cfe7 4becf5f
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Thu Feb 13 19:05:51 2025 +0700

    fix: check if token is paused on token transfers (#2458)

commit 4becf5f
Author: pauldelucia <pauldelucia2@gmail.com>
Date:   Thu Feb 13 18:34:24 2025 +0700

    add costs

commit 907971d
Merge: 9026669 125cfe7
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Thu Feb 13 18:05:06 2025 +0700

    Merge branch 'v2.0-dev' into feat/token-paused-validation

commit 125cfe7
Merge: 91f65c6 c286ec0
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Feb 13 15:51:46 2025 +0700

    Merge branch 'v2.0-dev' into v2.0-tokens-dev

commit 9026669
Author: pauldelucia <pauldelucia2@gmail.com>
Date:   Thu Feb 13 13:41:19 2025 +0700

    feat: check if token is paused on token transfers

commit c286ec0
Author: pshenmic <pshenmic@gmail.com>
Date:   Wed Feb 12 15:41:21 2025 +0700

    feat(sdk): add option to request all keys (#2445)

commit 91f65c6
Merge: d6b40e6 1a1c50b
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Wed Feb 12 12:04:58 2025 +0700

    fix: wrong order of parameters in UnauthorizedTokenActionError (#2456)

commit 1a1c50b
Author: pauldelucia <pauldelucia2@gmail.com>
Date:   Wed Feb 12 11:51:31 2025 +0700

    fix: wrong order of parameters in UnauthorizedTokenActionError

commit 26aff36
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Tue Feb 11 13:06:54 2025 +0100

    build: bump Alpine version to 3.21 (#2074)

commit 9daa195
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Tue Feb 11 14:38:55 2025 +0700

    ci: use github-hosted arm runner for release workflow (#2452)

commit 2b1c252
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Tue Feb 4 16:40:34 2025 +0700

    fix: proof result error for credit transfers in sdk (#2451)

commit d6b40e6
Author: QuantumExplorer <quantum@dash.org>
Date:   Tue Feb 4 06:49:03 2025 +0700

    feat(platform): token distribution part two (#2450)

commit 93f7d44
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Jan 29 14:07:55 2025 +0700

    fix(dpp): invalid feature flag instructions (#2448)

commit 6d5af88
Author: QuantumExplorer <quantum@dash.org>
Date:   Mon Jan 27 16:59:39 2025 +0700

    feat(dpp): token distribution model (#2447)

commit e735313
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Mon Jan 27 14:24:26 2025 +0700

    feat: add token transitions to SDK and DAPI (#2434)

commit 0743be2
Author: pshenmic <pshenmic@gmail.com>
Date:   Sun Jan 26 22:00:40 2025 +0700

    feat(dpp): extra methods for state transitions in wasm (#2401)

commit f609bcf
Merge: 3733f56 cbddb8d
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Jan 24 18:16:38 2025 +0700

    Merge branch 'v2.0-dev' into v2.0-tokens-dev

commit cbddb8d
Author: QuantumExplorer <quantum@dash.org>
Date:   Fri Jan 24 17:59:16 2025 +0700

    chore(platform): make bls sig compatibility an optional feature (#2440)

    Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>

commit 764684b
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Jan 24 17:57:27 2025 +0700

    chore: ignore deprecated `lodash.get` (#2441)

commit 3733f56
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Jan 23 09:16:12 2025 +0700

    feat(platform)!: enhance token configuration and validation mechanisms (#2439)

commit 2480ceb
Author: QuantumExplorer <quantum@dash.org>
Date:   Wed Jan 22 16:33:13 2025 +0700

    chore: dapi grpc queries (#2437)

commit c9ab154
Author: QuantumExplorer <quantum@dash.org>
Date:   Wed Jan 22 15:50:25 2025 +0700

    feat(platform)!: improved token validation and token config update transition (#2435)

commit d9647cc
Author: QuantumExplorer <quantum@dash.org>
Date:   Tue Jan 21 10:28:58 2025 +0700

    feat: get proofs for tokens (#2433)

commit e5964b8
Author: QuantumExplorer <quantum@dash.org>
Date:   Mon Jan 20 23:31:50 2025 +0700

    feat: group queries (#2432)

commit 0220302
Author: QuantumExplorer <quantum@dash.org>
Date:   Sun Jan 19 14:43:51 2025 +0700

    feat(platform): proof verification for many queries and a few more queries (#2431)

commit cd1527d
Author: QuantumExplorer <quantum@dash.org>
Date:   Fri Jan 17 19:39:37 2025 +0700

    fix(dpp)!: wrapping overflow issue (#2430)

commit fd7ee85
Merge: d7143cc e4e156c
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Jan 16 21:45:47 2025 +0700

    Merge branch 'master' into v1.9-dev

commit e4e156c
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Jan 16 18:11:57 2025 +0700

    chore(release): update change log and release v1.8.0 (#2427)

    Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>

commit 55a1e03
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Jan 16 15:30:42 2025 +0700

    feat(platform)!: token base support (#2383)

commit 59bf0af
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Jan 16 13:10:39 2025 +0700

    chore(release): bump to v1.8.0-rc.2 (#2426)

commit 410eb09
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Jan 16 06:31:26 2025 +0700

    fix(drive-abci): rebroadcasting should not only take first 2 quorums too (#2425)

commit 2abce8e
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Jan 15 22:51:58 2025 +0700

    chore(release): update changelog and bump version to 1.8.0-rc.1 (#2423)

commit ad5f604
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Jan 15 22:14:13 2025 +0700

    chore: update bls library (#2424)

commit c6feb5b
Author: QuantumExplorer <quantum@dash.org>
Date:   Wed Jan 15 18:57:49 2025 +0700

    feat(platform)!: distribute prefunded specialized balances after vote (#2422)

    Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>

commit 94dcbb2
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Jan 15 05:51:45 2025 +0700

    chore(drive): increase withdrawal limits to 2000 Dash per day (#2287)

commit 6a0aede
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Tue Jan 14 21:42:59 2025 +0700

    chore: fix test suite configuration script (#2402)

commit e94b7bb
Author: QuantumExplorer <quantum@dash.org>
Date:   Tue Jan 14 19:23:46 2025 +0700

    fix(drive-abci): document purchase on mutable document from different epoch had issue (#2420)

commit 4ee57a6
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Tue Jan 14 19:12:20 2025 +0700

    fix(drive): more than one key was returned when expecting only one result (#2421)

commit be5cd6d
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Mon Jan 13 15:12:33 2025 +0700

    fix(sdk): failed to deserialize consensus error (#2410)

commit e07271e
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Mon Jan 13 14:57:08 2025 +0700

    chore: resolve NPM audit warnings (#2417)

commit a809df7
Author: QuantumExplorer <quantum@dash.org>
Date:   Sun Jan 12 09:21:48 2025 +0700

    test: unify identity versioned cost coverage (#2416)

commit 6d637fe
Author: Paul DeLucia <69597248+pauldelucia@users.noreply.github.com>
Date:   Fri Dec 27 09:42:04 2024 -0500

    fix: try DriveDocumentQuery from DocumentQuery start field (#2407)

commit cfd9c4d
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Dec 19 18:30:06 2024 +0700

    chore(release): update changelog and bump version to 1.8.0-dev.2 (#2404)

commit fecda31
Merge: 37d5732 fc7d994
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Dec 19 15:33:45 2024 +0700

    Merge branch 'master' into v1.8-dev

commit fc7d994
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Dec 19 14:40:44 2024 +0700

    chore(release): update changelog and bump version to 1.7.1 (#2403)

commit adcd3b8
Author: QuantumExplorer <quantum@dash.org>
Date:   Thu Dec 19 09:54:07 2024 +0300

    fix!: emergency hard fork to fix masternode voting (#2397)

commit 37d5732
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Dec 18 22:24:37 2024 +0700

    fix(dashmate): some group commands fail with mtime not found (#2400)

commit 01a5b7a
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Dec 18 20:44:44 2024 +0700

    refactor(dpp): using deprecated param to init wasm module (#2399)

commit c5f5878
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Dec 18 18:04:14 2024 +0700

    fix(dashmate): local network starting issues (#2394)

commit 71c41ff
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Wed Dec 18 18:03:55 2024 +0700

    perf(dpp): reduce JS binding size by 3x (#2396)

commit 21ec393
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Wed Dec 18 10:47:58 2024 +0100

    build!: update rust to 1.83 - backport #2393 to v1.7 (#2398)

commit d7143cc
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Wed Dec 18 08:53:53 2024 +0100

    build!: optimize for x86-64-v3 cpu microarchitecture (Haswell+) (#2374)

commit d318b1c
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Tue Dec 17 14:56:15 2024 +0100

    build: bump wasm-bindgen to 0.2.99 (#2395)

commit 889d192
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Tue Dec 17 19:25:58 2024 +0700

    chore(release): update changelog and bump version to 1.8.0-dev.1 (#2391)

commit 8185d21
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Tue Dec 17 10:47:53 2024 +0100

    feat(sdk)!: allow setting CA cert (#1924)

commit 82a6217
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Tue Dec 17 02:51:18 2024 +0100

    build!: update rust to 1.83 (#2393)

commit 494054a
Author: QuantumExplorer <quantum@dash.org>
Date:   Mon Dec 16 13:47:58 2024 +0300

    refactor(platform): replace bls library (#2257)

    Co-authored-by: Lukasz Klimek <842586+lklimek@users.noreply.github.com>

commit 4c203e4
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Mon Dec 16 10:38:34 2024 +0100

    test(sdk): generate test vectors using testnet (#2381)

commit 0ff6b27
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Mon Dec 16 10:37:35 2024 +0100

    chore: remove deprecated check_network_version.sh (#2084)

commit b265bb8
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Fri Dec 13 13:25:40 2024 +0100

    ci: fix artifact upload issue on release build (#2389)

commit 40ae73f
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Dec 13 17:35:40 2024 +0700

    chore(release): update changelog and bump version to 1.7.0 (#2387)

commit 257e3da
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Fri Dec 13 15:44:10 2024 +0700

    chore(dashmate)!: update Core to version 22 (#2384)

commit 19a4c6d
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Dec 12 18:30:14 2024 +0700

    chore(dashmate): set tenderdash version to 1 (#2385)

commit 0e9d4dc
Author: lklimek <842586+lklimek@users.noreply.github.com>
Date:   Thu Dec 12 11:39:35 2024 +0100

    chore: address vulnerabilty GHSA-mwcw-c2x4-8c55 (#2382)

    Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>

commit bdae90c
Author: Ivan Shumkov <ivan@shumkov.ru>
Date:   Thu Dec 12 13:36:04 2024 +0700

    chore(dashmate): increase subsidy for devnet (#2353)
@coderabbitai coderabbitai bot mentioned this pull request May 12, 2025
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dapi-endpoint DAPI endpoint addition or modification
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants