diff --git a/CHANGELOG.md b/CHANGELOG.md index 43ea1dc..8f7a0c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ - [BREAKING] Increment minimum supported Rust version to 1.84. +## 0.13.2 (2025-01-24) + +- Made `InnerNode` and `NodeMutation` public. Implemented (de)serialization of `LeafIndex` (#367). + + ## 0.13.1 (2024-12-26) - Generate reverse mutations set on applying of mutations set, implemented serialization of `MutationsSet` (#355). diff --git a/src/merkle/mod.rs b/src/merkle/mod.rs index 2fdbc6b..95a404d 100644 --- a/src/merkle/mod.rs +++ b/src/merkle/mod.rs @@ -24,8 +24,8 @@ mod smt; #[cfg(feature = "internal")] pub use smt::build_subtree_for_bench; pub use smt::{ - LeafIndex, MutationSet, SimpleSmt, Smt, SmtLeaf, SmtLeafError, SmtProof, SmtProofError, - SubtreeLeaf, SMT_DEPTH, SMT_MAX_DEPTH, SMT_MIN_DEPTH, + InnerNode, LeafIndex, MutationSet, NodeMutation, SimpleSmt, Smt, SmtLeaf, SmtLeafError, + SmtProof, SmtProofError, SubtreeLeaf, SMT_DEPTH, SMT_MAX_DEPTH, SMT_MIN_DEPTH, }; mod mmr; diff --git a/src/merkle/smt/mod.rs b/src/merkle/smt/mod.rs index ec43957..ffa60a2 100644 --- a/src/merkle/smt/mod.rs +++ b/src/merkle/smt/mod.rs @@ -643,17 +643,29 @@ impl TryFrom for LeafIndex { } } +impl Serializable for LeafIndex { + fn write_into(&self, target: &mut W) { + self.index.write_into(target); + } +} + +impl Deserializable for LeafIndex { + fn read_from(source: &mut R) -> Result { + Ok(Self { index: source.read()? }) + } +} + // MUTATIONS // ================================================================================================ -/// A change to an inner node of a [`SparseMerkleTree`] that hasn't yet been applied. +/// A change to an inner node of a sparse Merkle tree that hasn't yet been applied. /// [`MutationSet`] stores this type in relation to a [`NodeIndex`] to keep track of what changes /// need to occur at which node indices. #[derive(Debug, Clone, PartialEq, Eq)] pub enum NodeMutation { - /// Corresponds to [`SparseMerkleTree::remove_inner_node()`]. + /// Node needs to be removed. Removal, - /// Corresponds to [`SparseMerkleTree::insert_inner_node()`]. + /// Node needs to be inserted. Addition(InnerNode), }