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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions grovedb-element/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ readme = "../README.md"
documentation = "https://docs.rs/grovedb"

[dependencies]
bincode = { version = "=2.0.0-rc.3" }
bincode_derive = { version = "=2.0.0-rc.3" }
bincode = { version = "=2.0.1" }
bincode_derive = { version = "=2.0.1" }
serde = { version = "1.0.228", features = ["derive"], optional = true }
hex = "0.4.3"
integer-encoding = "4.1.0"
Expand All @@ -26,4 +26,4 @@ default = ["verify", "constructor"]
verify = []
constructor = []
serde = ["dep:serde"]
visualize = ["dep:grovedb-visualize"]
visualize = ["dep:grovedb-visualize"]
28 changes: 15 additions & 13 deletions grovedb/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
name = "grovedb"
description = "Fully featured database using balanced hierarchical authenticated data structures"
version = "4.0.0"
authors = ["Samuel Westrich <sam@dash.org>", "Wisdom Ogwu <wisdom@dash.org", "Evgeny Fomin <evgeny.fomin@dash.org>"]
authors = [
"Samuel Westrich <sam@dash.org>",
"Wisdom Ogwu <wisdom@dash.org",
"Evgeny Fomin <evgeny.fomin@dash.org>",
]
edition = "2021"
license = "MIT"
homepage = "https://www.grovedb.org"
Expand All @@ -11,7 +15,7 @@ readme = "../README.md"
documentation = "https://docs.rs/grovedb"

[dependencies]
grovedb-costs = { version = "4.0.0", path = "../costs" , optional = true }
grovedb-costs = { version = "4.0.0", path = "../costs", optional = true }
grovedbg-types = { version = "4.0.0", path = "../grovedbg-types", optional = true }
grovedb-merk = { version = "4.0.0", path = "../merk", optional = true, default-features = false }
grovedb-path = { version = "4.0.0", path = "../path" }
Expand All @@ -21,8 +25,8 @@ grovedb-visualize = { version = "4.0.0", path = "../visualize", optional = true
grovedb-element = { version = "4.0.0", path = "../grovedb-element" }

axum = { version = "0.8", features = ["macros"], optional = true }
bincode = { version = "=2.0.0-rc.3" }
bincode_derive = { version = "=2.0.0-rc.3" }
bincode = { version = "=2.0.1" }
bincode_derive = { version = "=2.0.1" }
Comment on lines +28 to +29
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

bincode 2.0.1 crates.io release

💡 Result:

bincode 2.0.1 was released on March 10, 2025. [1][2]

Sources:
[1] Lib.rs release listing for bincode (2.0.1 — Mar 10, 2025).
[2] docs.rs build page showing bincode 2.0.1 (build date Mar 10, 2025).


🌐 Web query:

bincode 2.0.1 changelog migration from rc3

💡 Result:

Short summary of what changed / how to migrate from 2.0.0-rc.3 → 2.0.1

  • Release info: bincode 2.0.1 is the published stable release following the 2.0 release candidates (rc.3). (lib.rs)
  • Key migration points (rc → 2.x stable are covered by the bincode 2 migration guide):
    • Options → Configuration: the old Options trait is replaced by bincode::config::Configuration; use config::legacy() (and .with_variable_int_encoding() if you need bincode‑1.3+ compatibility). (docs.rs)
    • API renames: deserialize/serialize functions moved into bincode::serde::* (e.g. serialize(T) → serde::encode_to_vec(T, Configuration), deserialize_from(Read) → serde::decode_from_std_read(Read, Configuration), etc.). See the migration table in the docs. (docs.rs)
    • Derives: bincode now has its own derive crate/macros (bincode_derive). If you disabled default features for serde, enable the derive feature (or keep using serde_derive). Replace #[derive(serde::Serialize/Deserialize)] with #[derive(bincode::Encode)] / #[derive(bincode::Decode)] or keep serde when using the serde feature. (docs.rs)
  • Practical steps to migrate:
    1. Change Cargo.toml to bincode = "2.0.1" (or "2.0") and enable features you need (serde, derive, std/alloc). (lib.rs)
    2. Replace Options usage with config::legacy() (and add .with_variable_int_encoding() if you relied on 1.3+ behavior). (docs.rs)
    3. Replace serialize/deserialize calls with the bincode::serde functions (or use the new Encode/Decode traits and encode/decode functions). (docs.rs)
    4. Update derives to bincode::Encode / bincode::Decode or enable serde compatibility as needed. (docs.rs)

If you want the exact release changelog/commit list for 2.0.1 (diff vs rc.3) I can fetch the crate repo / release tags and show the commits or CHANGELOG entries.

Citations:


Bincode 2.0.1 release confirmed, but codebase migration to new API must be verified.

bincode 2.0.1 exists (released March 10, 2025) and is the stable release following rc.3. However, the migration from rc.3 to 2.0.1 includes breaking API changes that require codebase updates:

  • Options trait → Configuration: Replace Options usage with config::legacy() and related configuration methods
  • API renames: serialize/deserialize functions moved to bincode::serde::* namespace (e.g., serialize()serde::encode_to_vec(), deserialize_from()serde::decode_from_std_read())
  • Derives: Update #[derive(serde::Serialize/Deserialize)] to #[derive(bincode::Encode/bincode::Decode)] or enable serde compatibility mode

Verify that grovedb's codebase has been updated to use the new API signatures and derive macros. The exact version pinning is appropriate, but the code migration must be completed to successfully use bincode 2.0.1.

🤖 Prompt for AI Agents
In `@grovedb/Cargo.toml` around lines 28 - 29, Cargo.toml now pins bincode =
"2.0.1" but the codebase likely still uses the pre-2.0 API; search for usages of
the Options trait, serialize/deserialize, serialize_into/deserialize_from, and
#[derive(serde::Serialize/Deserialize)] and update them: replace Options-based
configuration with bincode::config::legacy() or the appropriate bincode::config
constructor, replace serialize()/deserialize()/deserialize_from() calls with
bincode::serde::encode_to_vec()/decode_from_std_read() (or the matching serde
helpers), and swap serde derives to bincode::Encode / bincode::Decode or enable
serde compatibility mode where needed; update any imports and fully-qualify
bincode::serde or bincode::config references (e.g., functions/methods in modules
that call serialize/deserialize, structs with serde derives, and any config
creation sites) so the code compiles against 2.0.1.

blake3 = "1.8.1"
hex = "0.4.3"
indexmap = "2.7.0"
Expand All @@ -32,7 +36,10 @@ itertools = { version = "0.14.0", optional = true }
tempfile = { version = "3.23.0", optional = true }
thiserror = { version = "2.0.17", optional = true }
tokio-util = { version = "0.7.17", optional = true }
tokio = { version = "1.48.0", features = ["rt-multi-thread", "net"], optional = true }
tokio = { version = "1.48.0", features = [
"rt-multi-thread",
"net",
], optional = true }
tower-http = { version = "0.6.8", features = ["fs"], optional = true }
zip-extensions = { version = "0.13.0", optional = true }
serde = { version = "1.0.219", features = ["derive"], optional = true }
Expand Down Expand Up @@ -60,10 +67,7 @@ harness = false
default = ["full", "estimated_costs"]
proof_debug = ["grovedb-merk/proof_debug"]
serde = ["dep:serde", "grovedb-merk/serde", "indexmap/serde"]
full = [
"grovedb-merk/full",
"minimal",
]
full = ["grovedb-merk/full", "minimal"]
minimal = [
"grovedb-merk/minimal",
"thiserror",
Expand All @@ -75,9 +79,7 @@ minimal = [
"grovedb-costs",
"intmap",
]
visualize = [
"grovedb-visualize",
]
visualize = ["grovedb-visualize"]
verify = [
"grovedb-merk/verify",
"grovedb-costs",
Expand All @@ -94,7 +96,7 @@ grovedbg = [
"axum",
"tower-http",
"zip-extensions",
"tempfile"
"tempfile",
]

[build-dependencies]
Expand Down
8 changes: 8 additions & 0 deletions grovedb/benches/insertion_benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ use criterion::{criterion_group, criterion_main, Criterion};
use grovedb::{Element, GroveDb};
use grovedb_path::SubtreePath;
#[cfg(feature = "minimal")]
use grovedb_version::version::GroveVersion;
#[cfg(feature = "minimal")]
use rand::Rng;
#[cfg(feature = "minimal")]
use tempfile::TempDir;
Expand All @@ -47,6 +49,7 @@ const EMPTY_PATH: SubtreePath<'static, [u8; 0]> = SubtreePath::empty();
/// without a transaction
#[cfg(feature = "minimal")]
pub fn insertion_benchmark_without_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let test_leaf: &[u8] = b"leaf1";
Expand Down Expand Up @@ -84,6 +87,7 @@ pub fn insertion_benchmark_without_transaction(c: &mut Criterion) {
/// with a transaction
#[cfg(feature = "minimal")]
pub fn insertion_benchmark_with_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let test_leaf: &[u8] = b"leaf1";
Expand Down Expand Up @@ -122,6 +126,7 @@ pub fn insertion_benchmark_with_transaction(c: &mut Criterion) {
/// Benchmark function to insert 10 root leaves without a transaction
#[cfg(feature = "minimal")]
pub fn root_leaf_insertion_benchmark_without_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let keys = std::iter::repeat_with(|| rand::thread_rng().gen::<[u8; 32]>()).take(10);
Expand All @@ -147,6 +152,7 @@ pub fn root_leaf_insertion_benchmark_without_transaction(c: &mut Criterion) {
/// Benchmark function to insert 10 root leaves with a transaction
#[cfg(feature = "minimal")]
pub fn root_leaf_insertion_benchmark_with_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let keys = std::iter::repeat_with(|| rand::thread_rng().gen::<[u8; 32]>()).take(10);
Expand Down Expand Up @@ -175,6 +181,7 @@ pub fn root_leaf_insertion_benchmark_with_transaction(c: &mut Criterion) {
/// and insert key-values into it without a transaction
#[cfg(feature = "minimal")]
pub fn deeply_nested_insertion_benchmark_without_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let mut nested_subtrees: Vec<[u8; 32]> = Vec::new();
Expand Down Expand Up @@ -216,6 +223,7 @@ pub fn deeply_nested_insertion_benchmark_without_transaction(c: &mut Criterion)
/// and insert key-values into it with a transaction
#[cfg(feature = "minimal")]
pub fn deeply_nested_insertion_benchmark_with_transaction(c: &mut Criterion) {
let grove_version = GroveVersion::latest();
let dir = TempDir::new().unwrap();
let db = GroveDb::open(dir.path()).unwrap();
let mut nested_subtrees: Vec<[u8; 32]> = Vec::new();
Expand Down
34 changes: 17 additions & 17 deletions merk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
name = "grovedb-merk"
description = "Merkle key/value store adapted for GroveDB"
version = "4.0.0"
authors = ["Samuel Westrich <sam@dash.org>", "Wisdom Ogwu <wisdom@dash.org", "Evgeny Fomin <evgeny.fomin@dash.org>", "Matt Bell <mappum@gmail.com>"]
authors = [
"Samuel Westrich <sam@dash.org>",
"Wisdom Ogwu <wisdom@dash.org>",
"Evgeny Fomin <evgeny.fomin@dash.org>",
"Matt Bell <mappum@gmail.com>",
]
edition = "2021"
license = "MIT"
homepage = "https://www.grovedb.org"
Expand All @@ -18,8 +23,8 @@ grovedb-version = { version = "4.0.0", path = "../grovedb-version" }
grovedb-visualize = { version = "4.0.0", path = "../visualize" }
grovedb-element = { version = "4.0.0", path = "../grovedb-element" }

bincode = { version = "=2.0.0-rc.3" }
bincode_derive = { version = "=2.0.0-rc.3" }
bincode = { version = "=2.0.1" }
bincode_derive = { version = "=2.0.1" }
hex = "0.4.3"
indexmap = "2.2.6"
integer-encoding = "4.1.0"
Expand All @@ -36,23 +41,18 @@ colored = { version = "3.0.0", optional = true }
default = ["full"]
proof_debug = []
serde = ["dep:serde", "indexmap/serde"]
minimal = ["num_cpus",
"ed",
"blake3",
"grovedb-storage",
"grovedb-storage/rocksdb_storage",
"grovedb-element/visualize"
]
full = ["minimal",
"test_utils",
"colored_debug",
minimal = [
"num_cpus",
"ed",
"blake3",
"grovedb-storage",
"grovedb-storage/rocksdb_storage",
"grovedb-element/visualize",
]
full = ["minimal", "test_utils", "colored_debug"]
test_utils = ["rand"]
colored_debug = ["colored"]
verify = [
"ed",
"blake3"
]
verify = ["ed", "blake3"]
grovedbg = ["full"]

[dev-dependencies]
Expand Down
3 changes: 2 additions & 1 deletion merk/benches/branch_queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ use std::{
time::{Duration, Instant},
};

use grovedb_costs::{CostsExt, OperationCost};
use grovedb_costs::OperationCost;
use grovedb_element::Element;
use grovedb_merk::{
proofs::{Node, Op},
Expand Down Expand Up @@ -228,6 +228,7 @@ fn get_key_from_node(node: &Node) -> Option<Vec<u8>> {
Node::KVValueHash(key, ..) => Some(key.clone()),
Node::KVValueHashFeatureType(key, ..) => Some(key.clone()),
Node::KVDigest(key, _) => Some(key.clone()),
Node::KVDigestCount(key, ..) => Some(key.clone()),
Node::KVRefValueHash(key, ..) => Some(key.clone()),
Node::KVCount(key, ..) => Some(key.clone()),
Node::KVRefValueHashCount(key, ..) => Some(key.clone()),
Expand Down
Loading
Loading