From c8b45fd64264ac184cf813f39dd1662a8d912821 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Tue, 10 Mar 2026 00:59:12 +0700 Subject: [PATCH 1/8] feat(drive): adapt to grovedb SubelementsDeletionBehavior per-op enum Upgrade grovedb to rev a20add8d which replaces global BatchApplyOptions fields (allow_deleting_non_empty_trees, deleting_non_empty_trees_returns_error) with per-op SubelementsDeletionBehavior on DeleteTree operations. - Use DontCheck for batch_delete_up_tree_while_empty (caller verifies emptiness) - Use DeleteChildren for delete_proposers_tree (intentionally non-empty) - Update GroveOp::DeleteTree pattern matches for new 2-field variant - Remove obsolete BatchApplyOptions fields - Update proof size assertions for latest protocol version - Update fee assertions in drive-abci tests Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 54 +++++++++---------- .../batch/tests/document/deletion.rs | 4 +- .../batch/tests/document/nft.rs | 12 ++--- .../batch/tests/document/transfer.rs | 8 +-- packages/rs-drive/Cargo.toml | 12 ++--- .../credit_pools/epochs/operations_factory.rs | 3 +- .../src/drive/initialization/v0/mod.rs | 18 +++---- .../system/penalize_shielded_pool.rs | 17 +++--- .../batch/drive_op_batch/finalize_task.rs | 6 +-- .../src/util/batch/grovedb_op_batch/mod.rs | 15 ++++-- .../v0/mod.rs | 8 +-- .../batch_remove_raw/v0/mod.rs | 2 +- .../v0/mod.rs | 2 - .../v0/mod.rs | 2 - .../grove_batch_operations_costs/v0/mod.rs | 2 - packages/rs-platform-version/Cargo.toml | 2 +- 16 files changed, 84 insertions(+), 83 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2d1533fd6a0..8d11ed7547b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2033,7 +2033,7 @@ dependencies = [ "dpp", "enum-map", "grovedb", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-epoch-based-storage-flags", "grovedb-path", "grovedb-storage", @@ -2727,15 +2727,15 @@ dependencies = [ [[package]] name = "grovedb" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "axum 0.8.8", "bincode", "bincode_derive", "blake3", "grovedb-bulk-append-tree", - "grovedb-commitment-tree 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-commitment-tree 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-dense-fixed-sized-merkle-tree", "grovedb-element", "grovedb-merk", @@ -2765,11 +2765,11 @@ dependencies = [ [[package]] name = "grovedb-bulk-append-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-dense-fixed-sized-merkle-tree", "grovedb-merkle-mountain-range", "grovedb-query", @@ -2793,11 +2793,11 @@ dependencies = [ [[package]] name = "grovedb-commitment-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "blake3", "grovedb-bulk-append-tree", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-storage", "incrementalmerkletree", "orchard", @@ -2817,7 +2817,7 @@ dependencies = [ [[package]] name = "grovedb-costs" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "integer-encoding", "intmap", @@ -2827,11 +2827,11 @@ dependencies = [ [[package]] name = "grovedb-dense-fixed-sized-merkle-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-query", "grovedb-storage", "thiserror 2.0.18", @@ -2840,7 +2840,7 @@ dependencies = [ [[package]] name = "grovedb-element" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "bincode_derive", @@ -2855,9 +2855,9 @@ dependencies = [ [[package]] name = "grovedb-epoch-based-storage-flags" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "hex", "integer-encoding", "intmap", @@ -2867,7 +2867,7 @@ dependencies = [ [[package]] name = "grovedb-merk" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "bincode_derive", @@ -2875,7 +2875,7 @@ dependencies = [ "byteorder", "colored", "ed", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-element", "grovedb-path", "grovedb-query", @@ -2893,18 +2893,18 @@ dependencies = [ [[package]] name = "grovedb-merkle-mountain-range" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-storage", ] [[package]] name = "grovedb-path" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "hex", ] @@ -2912,12 +2912,12 @@ dependencies = [ [[package]] name = "grovedb-query" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "bincode", "byteorder", "ed", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-storage", "hex", "indexmap 2.13.0", @@ -2928,10 +2928,10 @@ dependencies = [ [[package]] name = "grovedb-storage" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", "grovedb-path", "grovedb-visualize", "hex", @@ -2947,7 +2947,7 @@ dependencies = [ [[package]] name = "grovedb-version" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "thiserror 2.0.18", "versioned-feature-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2956,7 +2956,7 @@ dependencies = [ [[package]] name = "grovedb-visualize" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "hex", "itertools 0.14.0", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "grovedbg-types" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a7b878f72279a4893a7e9dc0ab2973ca0b09ce69#a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" +source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" dependencies = [ "serde", "serde_with 3.17.0", @@ -6061,7 +6061,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs index 1e014792631..cb15efd0dda 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs @@ -141,7 +141,7 @@ mod deletion_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1666860); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1963260); let issues = platform .drive @@ -482,7 +482,7 @@ mod deletion_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2762400); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3884300); let issues = platform .drive diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs index f1909d2e061..248909bdfdf 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs @@ -702,7 +702,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4080480); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4520280); assert_eq!( processing_result @@ -746,7 +746,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68691480); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69131280); } #[test] @@ -1219,7 +1219,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4345280); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4790840); assert_eq!( processing_result @@ -1263,7 +1263,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68956280); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69401840); } #[test] @@ -1601,7 +1601,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4080480); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4520280); assert_eq!( processing_result @@ -1645,7 +1645,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68691480); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69131280); } #[test] diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs index 3a16933a874..e4818314e5a 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs @@ -386,7 +386,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3369260); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3721740); let query_sender_results = platform .drive @@ -632,7 +632,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3631040); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3983520); let query_sender_results = platform .drive @@ -884,7 +884,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3369260); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3721740); let query_sender_results = platform .drive @@ -1440,7 +1440,7 @@ mod transfer_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3991900); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4431700); let query_sender_results = platform .drive diff --git a/packages/rs-drive/Cargo.toml b/packages/rs-drive/Cargo.toml index 2e7d036d953..4f29e9ae3ed 100644 --- a/packages/rs-drive/Cargo.toml +++ b/packages/rs-drive/Cargo.toml @@ -52,12 +52,12 @@ enum-map = { version = "2.0.3", optional = true } intmap = { version = "3.0.1", features = ["serde"], optional = true } chrono = { version = "0.4.35", optional = true } itertools = { version = "0.13", optional = true } -grovedb = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69", optional = true, default-features = false } -grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69", optional = true } -grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" } -grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69", optional = true } -grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" } -grovedb-epoch-based-storage-flags = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" } +grovedb = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true, default-features = false } +grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true } +grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } +grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true } +grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } +grovedb-epoch-based-storage-flags = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } [dev-dependencies] criterion = "0.5" diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/operations_factory.rs b/packages/rs-drive/src/drive/credit_pools/epochs/operations_factory.rs index 738cab59ea5..a3396005212 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/operations_factory.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/operations_factory.rs @@ -20,7 +20,7 @@ use dpp::fee::Credits; use dpp::prelude::Identifier; use dpp::util::deserializer::ProtocolVersion; use dpp::version::PlatformVersion; -use grovedb::batch::QualifiedGroveDbOp; +use grovedb::batch::{QualifiedGroveDbOp, SubelementsDeletionBehavior}; use grovedb::{Element, TransactionArg, TreeType}; /// Operations on Epochs @@ -297,6 +297,7 @@ impl EpochOperations for Epoch { self.get_path_vec(), KEY_PROPOSERS.to_vec(), TreeType::NormalTree, + SubelementsDeletionBehavior::DeleteChildren, ) } diff --git a/packages/rs-drive/src/drive/initialization/v0/mod.rs b/packages/rs-drive/src/drive/initialization/v0/mod.rs index 7b4243ace3b..87a0664faca 100644 --- a/packages/rs-drive/src/drive/initialization/v0/mod.rs +++ b/packages/rs-drive/src/drive/initialization/v0/mod.rs @@ -1360,7 +1360,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 251); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::Pools as u8]); @@ -1381,7 +1381,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 253); //it + left + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 288); //it + left + parent + sibling + parent sibling + grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::WithdrawalTransactions as u8]); @@ -1402,7 +1402,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 251); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::Votes as u8]); @@ -1423,7 +1423,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 251); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent // Merk Level 3 @@ -1490,7 +1490,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 288); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 321); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::AddressBalances as u8]); @@ -1511,7 +1511,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 252); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 287); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::SpentAssetLockTransactions as u8]); @@ -1574,7 +1574,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 251); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent let mut query = Query::new(); query.insert_key(vec![RootTree::Versions as u8]); @@ -1595,7 +1595,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 251); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent // Merk Level 4 @@ -1618,6 +1618,6 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 287); //it + parent + parent sibling + grandparent + grandparent sibling + great-grandparent + great-grandparent sibling + great-great-grandparent + assert_eq!(proof.len(), 320); //it + parent + parent sibling + grandparent + grandparent sibling + great-grandparent + great-grandparent sibling + great-great-grandparent } } diff --git a/packages/rs-drive/src/state_transition_action/action_convert_to_operations/system/penalize_shielded_pool.rs b/packages/rs-drive/src/state_transition_action/action_convert_to_operations/system/penalize_shielded_pool.rs index fee9484df0f..29a3a9d1437 100644 --- a/packages/rs-drive/src/state_transition_action/action_convert_to_operations/system/penalize_shielded_pool.rs +++ b/packages/rs-drive/src/state_transition_action/action_convert_to_operations/system/penalize_shielded_pool.rs @@ -27,14 +27,15 @@ impl DriveHighLevelOperationConverter for PenalizeShieldedPoolAction { } // 2. Deduct penalty from pool total balance - let new_total_balance = - v0.current_total_balance - .checked_sub(v0.penalty_amount) - .ok_or_else(|| { - Error::Drive(DriveError::CorruptedDriveState( - "shielded pool total balance underflow when subtracting penalty_amount".to_string(), - )) - })?; + let new_total_balance = v0 + .current_total_balance + .checked_sub(v0.penalty_amount) + .ok_or_else(|| { + Error::Drive(DriveError::CorruptedDriveState( + "shielded pool total balance underflow when subtracting penalty_amount" + .to_string(), + )) + })?; ops.push(DriveOperation::ShieldedPoolOperation( ShieldedPoolOperationType::UpdateTotalBalance { new_total_balance }, )); diff --git a/packages/rs-drive/src/util/batch/drive_op_batch/finalize_task.rs b/packages/rs-drive/src/util/batch/drive_op_batch/finalize_task.rs index b6d1e5d3d5e..4c85892dcb3 100644 --- a/packages/rs-drive/src/util/batch/drive_op_batch/finalize_task.rs +++ b/packages/rs-drive/src/util/batch/drive_op_batch/finalize_task.rs @@ -18,11 +18,7 @@ pub trait DriveOperationFinalizationTasks { } impl DriveOperationFinalizeTask { - pub fn execute( - self, - drive: &Drive, - _platform_version: &PlatformVersion, - ) -> Result<(), Error> { + pub fn execute(self, drive: &Drive, _platform_version: &PlatformVersion) -> Result<(), Error> { match self { DriveOperationFinalizeTask::RemoveDataContractFromCache { contract_id } => { drive.cache.data_contracts.remove(contract_id.to_buffer()); diff --git a/packages/rs-drive/src/util/batch/grovedb_op_batch/mod.rs b/packages/rs-drive/src/util/batch/grovedb_op_batch/mod.rs index 5c95b248bdd..6b1f8a2c60c 100644 --- a/packages/rs-drive/src/util/batch/grovedb_op_batch/mod.rs +++ b/packages/rs-drive/src/util/batch/grovedb_op_batch/mod.rs @@ -16,7 +16,10 @@ use dpp::block::epoch::Epoch; use dpp::identity::{Purpose, SecurityLevel}; use dpp::prelude::Identifier; use grovedb::batch::key_info::KeyInfo; -use grovedb::batch::{GroveDbOpConsistencyResults, GroveOp, KeyInfoPath, QualifiedGroveDbOp}; +use grovedb::batch::{ + GroveDbOpConsistencyResults, GroveOp, KeyInfoPath, QualifiedGroveDbOp, + SubelementsDeletionBehavior, +}; use grovedb::operations::proof::util::hex_to_ascii; use grovedb::{Element, TreeType}; use std::borrow::Cow; @@ -590,9 +593,15 @@ impl GroveDbOpBatchV0Methods for GroveDbOpBatch { } /// Adds a `Delete` tree operation to a list of GroveDB ops. + /// Uses `DontCheck` because callers (e.g. `batch_delete_up_tree_while_empty`) + /// have already verified the tree is empty. fn add_delete_tree(&mut self, path: Vec>, key: Vec, tree_type: TreeType) { - self.operations - .push(QualifiedGroveDbOp::delete_tree_op(path, key, tree_type)) + self.operations.push(QualifiedGroveDbOp::delete_tree_op( + path, + key, + tree_type, + SubelementsDeletionBehavior::DontCheck, + )) } /// Adds an `Insert` operation with an element to a list of GroveDB ops. diff --git a/packages/rs-drive/src/util/grove_operations/batch_insert_empty_tree_if_not_exists/v0/mod.rs b/packages/rs-drive/src/util/grove_operations/batch_insert_empty_tree_if_not_exists/v0/mod.rs index 3f1bd9b0b8b..f52c2dfe841 100644 --- a/packages/rs-drive/src/util/grove_operations/batch_insert_empty_tree_if_not_exists/v0/mod.rs +++ b/packages/rs-drive/src/util/grove_operations/batch_insert_empty_tree_if_not_exists/v0/mod.rs @@ -52,7 +52,7 @@ impl Drive { } else if let GroveOperation(grove_op) = previous_drive_operation { if grove_op.key == Some(KeyInfo::KnownKey(key.to_vec())) && grove_op.path == path - && matches!(grove_op.op, GroveOp::DeleteTree(_)) + && matches!(grove_op.op, GroveOp::DeleteTree(_, _)) { found = true; existing_operations.remove(i); @@ -119,7 +119,7 @@ impl Drive { } else if let GroveOperation(grove_op) = previous_drive_operation { if grove_op.key == Some(KeyInfo::KnownKey(key.to_vec())) && grove_op.path == path - && matches!(grove_op.op, GroveOp::DeleteTree(_)) + && matches!(grove_op.op, GroveOp::DeleteTree(_, _)) { found = true; existing_operations.remove(i); @@ -184,7 +184,7 @@ impl Drive { } else if let GroveOperation(grove_op) = previous_drive_operation { if grove_op.key == Some(KeyInfo::KnownKey(key.to_vec())) && grove_op.path == path - && matches!(grove_op.op, GroveOp::DeleteTree(_)) + && matches!(grove_op.op, GroveOp::DeleteTree(_, _)) { found = true; existing_operations.remove(i); @@ -249,7 +249,7 @@ impl Drive { } else if let GroveOperation(grove_op) = previous_drive_operation { if grove_op.key == Some(KeyInfo::KnownKey(key.to_vec())) && grove_op.path == path - && matches!(grove_op.op, GroveOp::DeleteTree(_)) + && matches!(grove_op.op, GroveOp::DeleteTree(_, _)) { found = true; existing_operations.remove(i); diff --git a/packages/rs-drive/src/util/grove_operations/batch_remove_raw/v0/mod.rs b/packages/rs-drive/src/util/grove_operations/batch_remove_raw/v0/mod.rs index c2c441cf7d4..9da64b2262c 100644 --- a/packages/rs-drive/src/util/grove_operations/batch_remove_raw/v0/mod.rs +++ b/packages/rs-drive/src/util/grove_operations/batch_remove_raw/v0/mod.rs @@ -45,7 +45,7 @@ impl Drive { "we should not be seeing internal grovedb operations", ))); } - Some(GroveOp::Delete) | Some(GroveOp::DeleteTree(_)) => false, + Some(GroveOp::Delete) | Some(GroveOp::DeleteTree(_, _)) => false, _ => true, }; diff --git a/packages/rs-drive/src/util/grove_operations/grove_apply_batch_with_add_costs/v0/mod.rs b/packages/rs-drive/src/util/grove_operations/grove_apply_batch_with_add_costs/v0/mod.rs index 79b67a77f7d..e44000512d7 100644 --- a/packages/rs-drive/src/util/grove_operations/grove_apply_batch_with_add_costs/v0/mod.rs +++ b/packages/rs-drive/src/util/grove_operations/grove_apply_batch_with_add_costs/v0/mod.rs @@ -65,8 +65,6 @@ impl Drive { Some(BatchApplyOptions { validate_insertion_does_not_override: validate, validate_insertion_does_not_override_tree: validate, - allow_deleting_non_empty_trees: false, - deleting_non_empty_trees_returns_error: true, disable_operation_consistency_check: !self.config.batching_consistency_verification, base_root_storage_is_free: true, batch_pause_height: None, diff --git a/packages/rs-drive/src/util/grove_operations/grove_apply_partial_batch_with_add_costs/v0/mod.rs b/packages/rs-drive/src/util/grove_operations/grove_apply_partial_batch_with_add_costs/v0/mod.rs index 9d7a6bc8eba..a736817ab8d 100644 --- a/packages/rs-drive/src/util/grove_operations/grove_apply_partial_batch_with_add_costs/v0/mod.rs +++ b/packages/rs-drive/src/util/grove_operations/grove_apply_partial_batch_with_add_costs/v0/mod.rs @@ -50,8 +50,6 @@ impl Drive { Some(BatchApplyOptions { validate_insertion_does_not_override: validate, validate_insertion_does_not_override_tree: validate, - allow_deleting_non_empty_trees: false, - deleting_non_empty_trees_returns_error: true, disable_operation_consistency_check: false, base_root_storage_is_free: true, batch_pause_height: None, diff --git a/packages/rs-drive/src/util/grove_operations/grove_batch_operations_costs/v0/mod.rs b/packages/rs-drive/src/util/grove_operations/grove_batch_operations_costs/v0/mod.rs index fb1f867e8d0..77d8d247a5c 100644 --- a/packages/rs-drive/src/util/grove_operations/grove_batch_operations_costs/v0/mod.rs +++ b/packages/rs-drive/src/util/grove_operations/grove_batch_operations_costs/v0/mod.rs @@ -26,8 +26,6 @@ impl Drive { Some(BatchApplyOptions { validate_insertion_does_not_override: validate, validate_insertion_does_not_override_tree: validate, - allow_deleting_non_empty_trees: false, - deleting_non_empty_trees_returns_error: true, disable_operation_consistency_check: false, base_root_storage_is_free: true, batch_pause_height: None, diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index 8a1aacfa909..8a58cc94a47 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT" thiserror = { version = "2.0.12" } bincode = { version = "=2.0.1" } versioned-feature-core = { git = "https://github.com/dashpay/versioned-feature-core", version = "1.0.0" } -grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a7b878f72279a4893a7e9dc0ab2973ca0b09ce69" } +grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } [features] mock-versions = [] From 3dae78539dbc9f02f44ef3b5932b30be8f21279f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 17:59:54 +0000 Subject: [PATCH 2/8] chore: update gRPC queries cache [skip ci] --- .github/grpc-queries-cache.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/grpc-queries-cache.json b/.github/grpc-queries-cache.json index e6ddc5013b4..d3712485f50 100644 --- a/.github/grpc-queries-cache.json +++ b/.github/grpc-queries-cache.json @@ -161,5 +161,5 @@ "status": "implemented" } }, - "last_updated": "2026-03-05T17:22:30.340784" + "last_updated": "2026-03-09T17:59:53.810832" } \ No newline at end of file From 089656d3fbb9b73e3a7ca81f76ebd2f5e1335719 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Tue, 10 Mar 2026 01:54:07 +0700 Subject: [PATCH 3/8] chore(drive): update grovedb to rev 2c9117cf Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 62 ++++++++++++------------- packages/rs-drive/Cargo.toml | 12 ++--- packages/rs-platform-version/Cargo.toml | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8d11ed7547b..9991ee19708 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2033,7 +2033,7 @@ dependencies = [ "dpp", "enum-map", "grovedb", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-epoch-based-storage-flags", "grovedb-path", "grovedb-storage", @@ -2727,15 +2727,15 @@ dependencies = [ [[package]] name = "grovedb" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "axum 0.8.8", "bincode", "bincode_derive", "blake3", "grovedb-bulk-append-tree", - "grovedb-commitment-tree 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-commitment-tree 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-dense-fixed-sized-merkle-tree", "grovedb-element", "grovedb-merk", @@ -2765,11 +2765,11 @@ dependencies = [ [[package]] name = "grovedb-bulk-append-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-dense-fixed-sized-merkle-tree", "grovedb-merkle-mountain-range", "grovedb-query", @@ -2781,10 +2781,12 @@ dependencies = [ [[package]] name = "grovedb-commitment-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b#7ecb8465fad750c7cddd5332adb6f97fcceb498b" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b)", + "grovedb-bulk-append-tree", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", + "grovedb-storage", "incrementalmerkletree", "orchard", "thiserror 2.0.18", @@ -2793,12 +2795,10 @@ dependencies = [ [[package]] name = "grovedb-commitment-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b#7ecb8465fad750c7cddd5332adb6f97fcceb498b" dependencies = [ "blake3", - "grovedb-bulk-append-tree", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", - "grovedb-storage", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b)", "incrementalmerkletree", "orchard", "thiserror 2.0.18", @@ -2807,7 +2807,7 @@ dependencies = [ [[package]] name = "grovedb-costs" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b#7ecb8465fad750c7cddd5332adb6f97fcceb498b" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "integer-encoding", "intmap", @@ -2817,7 +2817,7 @@ dependencies = [ [[package]] name = "grovedb-costs" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=7ecb8465fad750c7cddd5332adb6f97fcceb498b#7ecb8465fad750c7cddd5332adb6f97fcceb498b" dependencies = [ "integer-encoding", "intmap", @@ -2827,11 +2827,11 @@ dependencies = [ [[package]] name = "grovedb-dense-fixed-sized-merkle-tree" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-query", "grovedb-storage", "thiserror 2.0.18", @@ -2840,7 +2840,7 @@ dependencies = [ [[package]] name = "grovedb-element" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "bincode_derive", @@ -2855,9 +2855,9 @@ dependencies = [ [[package]] name = "grovedb-epoch-based-storage-flags" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "hex", "integer-encoding", "intmap", @@ -2867,7 +2867,7 @@ dependencies = [ [[package]] name = "grovedb-merk" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "bincode_derive", @@ -2875,7 +2875,7 @@ dependencies = [ "byteorder", "colored", "ed", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-element", "grovedb-path", "grovedb-query", @@ -2893,18 +2893,18 @@ dependencies = [ [[package]] name = "grovedb-merkle-mountain-range" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-storage", ] [[package]] name = "grovedb-path" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "hex", ] @@ -2912,12 +2912,12 @@ dependencies = [ [[package]] name = "grovedb-query" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "bincode", "byteorder", "ed", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-storage", "hex", "indexmap 2.13.0", @@ -2928,10 +2928,10 @@ dependencies = [ [[package]] name = "grovedb-storage" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "blake3", - "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c)", + "grovedb-costs 4.0.0 (git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84)", "grovedb-path", "grovedb-visualize", "hex", @@ -2947,7 +2947,7 @@ dependencies = [ [[package]] name = "grovedb-version" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "thiserror 2.0.18", "versioned-feature-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2956,7 +2956,7 @@ dependencies = [ [[package]] name = "grovedb-visualize" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "hex", "itertools 0.14.0", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "grovedbg-types" version = "4.0.0" -source = "git+https://github.com/dashpay/grovedb?rev=a20add8d9327b31198eebddd9d78d3cbf940367c#a20add8d9327b31198eebddd9d78d3cbf940367c" +source = "git+https://github.com/dashpay/grovedb?rev=2c9117cf3d77c2ffda060f45242d238fb01dca84#2c9117cf3d77c2ffda060f45242d238fb01dca84" dependencies = [ "serde", "serde_with 3.17.0", diff --git a/packages/rs-drive/Cargo.toml b/packages/rs-drive/Cargo.toml index 4f29e9ae3ed..5540ff48d5b 100644 --- a/packages/rs-drive/Cargo.toml +++ b/packages/rs-drive/Cargo.toml @@ -52,12 +52,12 @@ enum-map = { version = "2.0.3", optional = true } intmap = { version = "3.0.1", features = ["serde"], optional = true } chrono = { version = "0.4.35", optional = true } itertools = { version = "0.13", optional = true } -grovedb = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true, default-features = false } -grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true } -grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } -grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c", optional = true } -grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } -grovedb-epoch-based-storage-flags = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } +grovedb = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84", optional = true, default-features = false } +grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84", optional = true } +grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84" } +grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84", optional = true } +grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84" } +grovedb-epoch-based-storage-flags = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84" } [dev-dependencies] criterion = "0.5" diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index 8a58cc94a47..40966c3ba44 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT" thiserror = { version = "2.0.12" } bincode = { version = "=2.0.1" } versioned-feature-core = { git = "https://github.com/dashpay/versioned-feature-core", version = "1.0.0" } -grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "a20add8d9327b31198eebddd9d78d3cbf940367c" } +grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "2c9117cf3d77c2ffda060f45242d238fb01dca84" } [features] mock-versions = [] From 587a687308a4387bb9041122045bbb8389c905f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 18:55:02 +0000 Subject: [PATCH 4/8] chore: update gRPC queries cache [skip ci] --- .github/grpc-queries-cache.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/grpc-queries-cache.json b/.github/grpc-queries-cache.json index d3712485f50..05f9eb3ab65 100644 --- a/.github/grpc-queries-cache.json +++ b/.github/grpc-queries-cache.json @@ -161,5 +161,5 @@ "status": "implemented" } }, - "last_updated": "2026-03-09T17:59:53.810832" + "last_updated": "2026-03-09T18:55:01.909809" } \ No newline at end of file From 8f55a508914d247b284dce286ee854a43df465e0 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Tue, 10 Mar 2026 02:00:18 +0700 Subject: [PATCH 5/8] fix(drive-abci): revert processing fee assertion changes These fee changes were from an older grovedb rev and are no longer needed with rev 2c9117cf. Co-Authored-By: Claude Opus 4.6 --- .../batch/tests/document/deletion.rs | 4 ++-- .../state_transitions/batch/tests/document/nft.rs | 12 ++++++------ .../batch/tests/document/transfer.rs | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs index cb15efd0dda..1e014792631 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/deletion.rs @@ -141,7 +141,7 @@ mod deletion_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1963260); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1666860); let issues = platform .drive @@ -482,7 +482,7 @@ mod deletion_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3884300); + assert_eq!(processing_result.aggregated_fees().processing_fee, 2762400); let issues = platform .drive diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs index 248909bdfdf..f1909d2e061 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/nft.rs @@ -702,7 +702,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4520280); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4080480); assert_eq!( processing_result @@ -746,7 +746,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69131280); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68691480); } #[test] @@ -1219,7 +1219,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4790840); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4345280); assert_eq!( processing_result @@ -1263,7 +1263,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69401840); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68956280); } #[test] @@ -1601,7 +1601,7 @@ mod nft_tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4520280); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4080480); assert_eq!( processing_result @@ -1645,7 +1645,7 @@ mod nft_tests { .expect("expected that purchaser exists"); // the buyer paid 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 69131280); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 68691480); } #[test] diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs index e4818314e5a..3a16933a874 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/transfer.rs @@ -386,7 +386,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3721740); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3369260); let query_sender_results = platform .drive @@ -632,7 +632,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3983520); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3631040); let query_sender_results = platform .drive @@ -884,7 +884,7 @@ mod transfer_tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3721740); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3369260); let query_sender_results = platform .drive @@ -1440,7 +1440,7 @@ mod transfer_tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 4431700); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3991900); let query_sender_results = platform .drive From d55a3dbc76a7ff776d70fe075479382af8e44211 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 19:01:18 +0000 Subject: [PATCH 6/8] chore: update gRPC queries cache [skip ci] --- .github/grpc-queries-cache.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/grpc-queries-cache.json b/.github/grpc-queries-cache.json index 05f9eb3ab65..0c991217c36 100644 --- a/.github/grpc-queries-cache.json +++ b/.github/grpc-queries-cache.json @@ -161,5 +161,5 @@ "status": "implemented" } }, - "last_updated": "2026-03-09T18:55:01.909809" + "last_updated": "2026-03-09T19:01:18.591500" } \ No newline at end of file From aafc0f92c81cb03809fb99c257e6301f47e38e90 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Tue, 10 Mar 2026 02:04:35 +0700 Subject: [PATCH 7/8] docs(drive): annotate changed proof size assertions with explanation Each changed assertion now notes the previous value and that the increase comes from KVValueHashFeatureTypeWithChildHash in grovedb proofs. Co-Authored-By: Claude Opus 4.6 --- .../src/drive/initialization/v0/mod.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/rs-drive/src/drive/initialization/v0/mod.rs b/packages/rs-drive/src/drive/initialization/v0/mod.rs index 87a0664faca..148a47f7336 100644 --- a/packages/rs-drive/src/drive/initialization/v0/mod.rs +++ b/packages/rs-drive/src/drive/initialization/v0/mod.rs @@ -1360,7 +1360,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent (was 251, +35 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::Pools as u8]); @@ -1381,7 +1381,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 288); //it + left + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 288); //it + left + parent + sibling + parent sibling + grandparent (was 253, +35 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::WithdrawalTransactions as u8]); @@ -1402,7 +1402,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent (was 251, +35 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::Votes as u8]); @@ -1423,7 +1423,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent + assert_eq!(proof.len(), 286); //it + left + right + parent + sibling + parent sibling + grandparent (was 251, +35 from KVValueHashFeatureTypeWithChildHash) // Merk Level 3 @@ -1490,7 +1490,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 321); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 321); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent (was 288, +33 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::AddressBalances as u8]); @@ -1511,7 +1511,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 287); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 287); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent (was 252, +35 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::SpentAssetLockTransactions as u8]); @@ -1574,7 +1574,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent (was 251, +35 from KVValueHashFeatureTypeWithChildHash) let mut query = Query::new(); query.insert_key(vec![RootTree::Versions as u8]); @@ -1595,7 +1595,7 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent + assert_eq!(proof.len(), 286); //it + parent + sibling + parent sibling + grandparent + grandparent sibling + great-grandparent (was 251, +35 from KVValueHashFeatureTypeWithChildHash) // Merk Level 4 @@ -1618,6 +1618,6 @@ mod tests { drive_version, ) .expect("expected to get root elements"); - assert_eq!(proof.len(), 320); //it + parent + parent sibling + grandparent + grandparent sibling + great-grandparent + great-grandparent sibling + great-great-grandparent + assert_eq!(proof.len(), 320); //it + parent + parent sibling + grandparent + grandparent sibling + great-grandparent + great-grandparent sibling + great-great-grandparent (was 287, +33 from KVValueHashFeatureTypeWithChildHash) } } From 429feebc6276f21b3a21daf3cf20636306205c9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 19:05:07 +0000 Subject: [PATCH 8/8] chore: update gRPC queries cache [skip ci] --- .github/grpc-queries-cache.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/grpc-queries-cache.json b/.github/grpc-queries-cache.json index 0c991217c36..9612978c5d5 100644 --- a/.github/grpc-queries-cache.json +++ b/.github/grpc-queries-cache.json @@ -161,5 +161,5 @@ "status": "implemented" } }, - "last_updated": "2026-03-09T19:01:18.591500" + "last_updated": "2026-03-09T19:05:06.309464" } \ No newline at end of file