diff --git a/Cargo.lock b/Cargo.lock
index 3a92e2623950186ec99355183e9ac2c1e16faa98..9989bc3194084ad1686151cf18a6b2b36eab556a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -19527,7 +19527,7 @@ version = "29.0.0"
 dependencies = [
  "ahash 0.8.8",
  "array-bytes 6.1.0",
- "criterion 0.4.0",
+ "criterion 0.5.1",
  "hash-db",
  "lazy_static",
  "memory-db",
@@ -21243,11 +21243,11 @@ dependencies = [
 
 [[package]]
 name = "trie-bench"
-version = "0.38.0"
+version = "0.39.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4680cb226e31d2a096592d0edecdda91cc371743002f80c0f8cf80219819b3b"
+checksum = "3092f400e9f7e3ce8c1756016a8b6287163ab7a11dd47d82169260cb4cc2d680"
 dependencies = [
- "criterion 0.4.0",
+ "criterion 0.5.1",
  "hash-db",
  "keccak-hasher",
  "memory-db",
@@ -21259,12 +21259,11 @@ dependencies = [
 
 [[package]]
 name = "trie-db"
-version = "0.28.0"
+version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642"
+checksum = "65ed83be775d85ebb0e272914fff6462c39b3ddd6dc67b5c1c41271aad280c69"
 dependencies = [
  "hash-db",
- "hashbrown 0.13.2",
  "log",
  "rustc-hex",
  "smallvec",
diff --git a/bridges/primitives/runtime/Cargo.toml b/bridges/primitives/runtime/Cargo.toml
index cca9c21a608d7c8892a01864a7153af7e63ea520..9a9b0291687d19ac0b5698ce3ef6a591da9f86c9 100644
--- a/bridges/primitives/runtime/Cargo.toml
+++ b/bridges/primitives/runtime/Cargo.toml
@@ -29,7 +29,7 @@ sp-runtime = { path = "../../../substrate/primitives/runtime", default-features
 sp-state-machine = { path = "../../../substrate/primitives/state-machine", default-features = false }
 sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
-trie-db = { version = "0.28.0", default-features = false }
+trie-db = { version = "0.29.0", default-features = false }
 
 [dev-dependencies]
 hex-literal = "0.4"
diff --git a/cumulus/pallets/parachain-system/Cargo.toml b/cumulus/pallets/parachain-system/Cargo.toml
index a905df5b94a644ffeb69ae73ecd4f2002c10ee92..c08232cf32ac1572c09588f1b2a5d79b92d038e1 100644
--- a/cumulus/pallets/parachain-system/Cargo.toml
+++ b/cumulus/pallets/parachain-system/Cargo.toml
@@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features =
 environmental = { version = "1.1.4", default-features = false }
 impl-trait-for-tuples = "0.2.1"
 log = { workspace = true }
-trie-db = { version = "0.28.0", default-features = false }
+trie-db = { version = "0.29.0", default-features = false }
 scale-info = { version = "2.11.1", default-features = false, features = ["derive"] }
 
 # Substrate
diff --git a/substrate/primitives/state-machine/Cargo.toml b/substrate/primitives/state-machine/Cargo.toml
index aaedb500b59cc1155c61fcf50732777e4e5c8ad4..63251bbd181d4b6ef63661e1b568d1929d619a3c 100644
--- a/substrate/primitives/state-machine/Cargo.toml
+++ b/substrate/primitives/state-machine/Cargo.toml
@@ -29,7 +29,7 @@ sp-core = { path = "../core", default-features = false }
 sp-externalities = { path = "../externalities", default-features = false }
 sp-panic-handler = { path = "../panic-handler", optional = true }
 sp-trie = { path = "../trie", default-features = false }
-trie-db = { version = "0.28.0", default-features = false }
+trie-db = { version = "0.29.0", default-features = false }
 
 [dev-dependencies]
 array-bytes = "6.1"
diff --git a/substrate/primitives/trie/Cargo.toml b/substrate/primitives/trie/Cargo.toml
index 28c496d7a8e0a5fe79a8a049473842f8856a7325..6469a59e0d10b2f598dd423976136481688bea7d 100644
--- a/substrate/primitives/trie/Cargo.toml
+++ b/substrate/primitives/trie/Cargo.toml
@@ -32,7 +32,7 @@ rand = { version = "0.8", optional = true }
 scale-info = { version = "2.11.1", default-features = false, features = ["derive"] }
 thiserror = { optional = true, workspace = true }
 tracing = { version = "0.1.29", optional = true }
-trie-db = { version = "0.28.0", default-features = false }
+trie-db = { version = "0.29.0", default-features = false }
 trie-root = { version = "0.18.0", default-features = false }
 sp-core = { path = "../core", default-features = false }
 sp-externalities = { path = "../externalities", default-features = false }
@@ -40,8 +40,8 @@ schnellru = { version = "0.2.1", optional = true }
 
 [dev-dependencies]
 array-bytes = "6.1"
-criterion = "0.4.0"
-trie-bench = "0.38.0"
+criterion = "0.5.1"
+trie-bench = "0.39.0"
 trie-standardmap = "0.16.0"
 sp-runtime = { path = "../runtime" }
 
diff --git a/substrate/primitives/trie/src/lib.rs b/substrate/primitives/trie/src/lib.rs
index 0ae448aff6e13db074665dbf7500c8a35e407af5..54f202eda0c9ac3d3991c094b3f406f8d78d4c4d 100644
--- a/substrate/primitives/trie/src/lib.rs
+++ b/substrate/primitives/trie/src/lib.rs
@@ -55,8 +55,10 @@ use trie_db::proof::{generate_proof, verify_proof};
 pub use trie_db::{
 	nibble_ops,
 	node::{NodePlan, ValuePlan},
+	triedb::{TrieDBDoubleEndedIterator, TrieDBKeyDoubleEndedIterator},
 	CError, DBValue, Query, Recorder, Trie, TrieCache, TrieConfiguration, TrieDBIterator,
-	TrieDBKeyIterator, TrieDBRawIterator, TrieLayout, TrieMut, TrieRecorder,
+	TrieDBKeyIterator, TrieDBNodeDoubleEndedIterator, TrieDBRawIterator, TrieLayout, TrieMut,
+	TrieRecorder,
 };
 pub use trie_db::{proof::VerifyError, MerkleValue};
 /// The Substrate format implementation of `TrieStream`.
diff --git a/substrate/test-utils/runtime/Cargo.toml b/substrate/test-utils/runtime/Cargo.toml
index 2c91a3186ce51fd0dea0e1fc5e3ec981f53b9c52..28c1b22f976b61e1ab287be5a2700a71be1de0f9 100644
--- a/substrate/test-utils/runtime/Cargo.toml
+++ b/substrate/test-utils/runtime/Cargo.toml
@@ -43,7 +43,7 @@ pallet-timestamp = { path = "../../frame/timestamp", default-features = false }
 sp-consensus-grandpa = { path = "../../primitives/consensus/grandpa", default-features = false, features = ["serde"] }
 sp-trie = { path = "../../primitives/trie", default-features = false }
 sp-transaction-pool = { path = "../../primitives/transaction-pool", default-features = false }
-trie-db = { version = "0.28.0", default-features = false }
+trie-db = { version = "0.29.0", default-features = false }
 sc-service = { path = "../../client/service", default-features = false, features = ["test-helpers"], optional = true }
 sp-state-machine = { path = "../../primitives/state-machine", default-features = false }
 sp-externalities = { path = "../../primitives/externalities", default-features = false }
diff --git a/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml b/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
index f9a45e21ce13d3690c1efe366e1d0f480f0f9b8f..98a87b7d5b200f632cf599dd7fa741f3a804dd0b 100644
--- a/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
+++ b/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
@@ -22,7 +22,7 @@ serde = { features = ["derive"], workspace = true, default-features = true }
 sp-core = { path = "../../../../primitives/core" }
 sp-state-machine = { path = "../../../../primitives/state-machine" }
 sp-trie = { path = "../../../../primitives/trie" }
-trie-db = "0.28.0"
+trie-db = "0.29.0"
 
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }