This commit implements SparseMerkleTree::insert_ensure_root(), a version of SparseMerkleTree::insert() that prevents modification of the tree if the insert turns out to not result in the correct tree root (i.e., the transaction is not valid). This is an initial step towards issue 222. As a logical next step, generalizing this to validation of inserting multiple values at once will directly enable removing Merkle tree clones in miden-node InnerState::apply_block(). For further work, as we generalize pre-validation for mutations we will want a separate type to represent an arbitrary set of prospective mutations on the Merkle tree and their validity, like the `ChangeSet` type suggested in the issue.
4.9 KiB
4.9 KiB
0.11.0 (TBD)
- [BREAKING]: renamed
Mmr::open()
intoMmr::open_at()
andMmr::peaks()
intoMmr::peaks_at()
(#234). - Added
Mmr::open()
andMmr::peaks()
which rely onMmr::open_at()
andMmr::peaks()
respectively (#234). - Standardised CI and Makefile across Miden repos (#323).
- Added
Smt::insert_ensure_root()
for root-validated insertion (#327)
0.10.0 (2024-08-06)
- Added more
RpoDigest
andRpxDigest
conversions (#311). - [BREAKING] Migrated to Winterfell v0.9 (#315).
- Fixed encoding of Falcon secret key (#319).
0.9.3 (2024-04-24)
- Added
RpxRandomCoin
struct (#307).
0.9.2 (2024-04-21)
- Implemented serialization for the
Smt
struct (#304). - Fixed a bug in Falcon signature generation (#305).
0.9.1 (2024-04-02)
- Added
num_leaves()
method toSimpleSmt
(#302).
0.9.0 (2024-03-24)
- [BREAKING] Removed deprecated re-exports from liballoc/libstd (#290).
- [BREAKING] Refactored RpoFalcon512 signature to work with pure Rust (#285).
- [BREAKING] Added
RngCore
as supertrait forFeltRng
(#299).
0.8.4 (2024-03-17)
- Re-added unintentionally removed re-exported liballoc macros (
vec
andformat
macros).
0.8.3 (2024-03-17)
- Re-added unintentionally removed re-exported liballoc macros (#292).
0.8.2 (2024-03-17)
- Updated
no-std
approach to be in sync with winterfell v0.8.3 release (#290).
0.8.1 (2024-02-21)
- Fixed clippy warnings (#280)
0.8.0 (2024-02-14)
- Implemented the
PartialMmr
data structure (#195). - Implemented RPX hash function (#201).
- Added
FeltRng
andRpoRandomCoin
(#237). - Accelerated RPO/RPX hash functions using AVX512 instructions (#234).
- Added
inner_nodes()
method toPartialMmr
(#238). - Improved
PartialMmr::apply_delta()
(#242). - Refactored
SimpleSmt
struct (#245). - Replaced
TieredSmt
struct withSmt
struct (#254, #277). - Updated Winterfell dependency to v0.8 (#275).
0.7.1 (2023-10-10)
- Fixed RPO Falcon signature build on Windows.
0.7.0 (2023-10-05)
- Replaced
MerklePathSet
withPartialMerkleTree
(#165). - Implemented clearing of nodes in
TieredSmt
(#173). - Added ability to generate inclusion proofs for
TieredSmt
(#174). - Implemented Falcon DSA (#179).
- Added conditional `serde`` support for various structs (#180).
- Implemented benchmarking for
TieredSmt
(#182). - Added more leaf traversal methods for
MerkleStore
(#185). - Added SVE acceleration for RPO hash function (#189).
0.6.0 (2023-06-25)
- [BREAKING] Added support for recording capabilities for
MerkleStore
(#162). - [BREAKING] Refactored Merkle struct APIs to use
RpoDigest
instead ofWord
(#157). - Added initial implementation of
PartialMerkleTree
(#156).
0.5.0 (2023-05-26)
- Implemented
TieredSmt
(#152, #153). - Implemented ability to extract a subset of a
MerkleStore
(#151). - Cleaned up
SimpleSmt
interface (#149). - Decoupled hashing and padding of peaks in
Mmr
(#148). - Added
inner_nodes()
toMerkleStore
(#146).
0.4.0 (2023-04-21)
- Exported
MmrProof
from the crate (#137). - Allowed merging of leaves in
MerkleStore
(#138). - [BREAKING] Refactored how existing data structures are added to
MerkleStore
(#139).
0.3.0 (2023-04-08)
- Added
depth
parameter to SMT constructors inMerkleStore
(#115). - Optimized MMR peak hashing for Miden VM (#120).
- Added
get_leaf_depth
method toMerkleStore
(#119). - Added inner node iterators to
MerkleTree
,SimpleSmt
, andMmr
(#117, #118, #121).
0.2.0 (2023-03-24)
- Implemented
Mmr
and related structs (#67). - Implemented
MerkleStore
(#93, #94, #95, #107 #112). - Added benchmarks for
MerkleStore
vs. other structs (#97). - Added Merkle path containers (#99).
- Fixed depth handling in
MerklePathSet
(#110). - Updated Winterfell dependency to v0.6.
0.1.4 (2023-02-22)
- Re-export winter-crypto Hasher, Digest & ElementHasher (#72)
0.1.3 (2023-02-20)
- Updated Winterfell dependency to v0.5.1 (#68)
0.1.2 (2023-02-17)
- Fixed
Rpo256::hash
pad that was panicking on input (#44) - Added
MerklePath
wrapper to encapsulate Merkle opening verification and root computation (#53) - Added
NodeIndex
Merkle wrapper to encapsulate Merkle tree traversal and mappings (#54)
0.1.1 (2023-02-06)
- Introduced
merge_in_domain
for the RPO hash function, to allow using a specified domain value in the second capacity register when hashing two digests together. - Added a simple sparse Merkle tree implementation.
- Added re-exports of Winterfell RandomCoin and RandomCoinError.
0.1.0 (2022-12-02)
- Initial release on crates.io containing the cryptographic primitives used in Miden VM and the Miden Rollup.
- Hash module with the BLAKE3 and Rescue Prime Optimized hash functions.
- BLAKE3 is implemented with 256-bit, 192-bit, or 160-bit output.
- RPO is implemented with 256-bit output.
- Merkle module, with a set of data structures related to Merkle trees, implemented using the RPO hash function.