Commit graph

92 commits

Author SHA1 Message Date
Bobbin Threadbare
78672585f1
chore: update crate version to 0.15.0
Some checks failed
build / Build for no-std (push) Has been cancelled
lint / clippy nightly on ubuntu-latest (push) Has been cancelled
lint / rustfmt check nightly on ubuntu-latest (push) Has been cancelled
lint / doc stable on ubuntu-latest (push) Has been cancelled
lint / check rust version consistency (push) Has been cancelled
test / test nightly on ubuntu with default (push) Has been cancelled
test / test stable on ubuntu with default (push) Has been cancelled
test / test nightly on ubuntu with no-std (push) Has been cancelled
test / test stable on ubuntu with no-std (push) Has been cancelled
test / test nightly on ubuntu with smt-hashmaps (push) Has been cancelled
test / test stable on ubuntu with smt-hashmaps (push) Has been cancelled
test / test-smt-concurrent nightly (push) Has been cancelled
test / test-smt-concurrent stable (push) Has been cancelled
2025-03-15 18:30:53 -07:00
Bobbin Threadbare
660a667de1
chore: update changelog 2025-03-15 17:33:57 -07:00
Santiago Pittella
b5c568eb12
chore: update to Rust 2024 edition (#399) 2025-03-13 13:36:22 -07:00
Santiago Pittella
d5b38a8b35
chore: update rand dependency to v0.9.0 (#398) 2025-03-13 12:13:49 -07:00
Krushimir
222197d08f
feat: optimized duplicate key detection in concurrent SMT construction (#395) 2025-03-13 01:57:27 -07:00
Bobbin Threadbare
337a57fa07
Merge branch 'next' into al-fix-falcon-sk-serialization 2025-03-10 17:48:26 -07:00
Krushimir
cd0821961d
test: adds property-based testing and fuzzing for SMT (#385)
* Adds concurrent proptests
* Adds fuzzing for SMT
* fix: concurrent mutations without mutated entries
* fix: key sorting
2025-03-10 11:51:16 -07:00
Al-Kindi-0
9acbf2f10c doc: changelog 2025-03-10 14:39:48 +01:00
Philipp Gackstatter
d0e9ead6f4
feat: filter empty values in Smt::with_entries (#383) 2025-02-18 02:18:47 -08:00
Bobbin Threadbare
0514a8316a
Merge branch 'main' into next 2025-02-18 01:14:07 -08:00
Bobbin Threadbare
8ce7b68d68
chore: increment crate version to v0.13.3 and update changelog 2025-02-18 01:09:11 -08:00
Philipp Gackstatter
535637d7fb
fix: panic in PartialMmr::untrack (#382) 2025-02-18 01:04:21 -08:00
Philipp Gackstatter
ed14eaa90c
fix: PartialSmt stale proofs not resulting in error (#381) 2025-02-17 15:40:56 -08:00
Krushimir
bbe11964b1
fix: subtree8-rand benchmark panics with debug assertions enabled (#377) (#378) 2025-02-13 11:00:16 -08:00
Bobbin Threadbare
1e59686153
Merge branch 'main' into next 2025-02-11 16:45:57 -08:00
Philipp Gackstatter
12d0eefeb2
feat: implement PartialSmt (#372) 2025-02-10 23:48:32 -08:00
Al-Kindi-0
fe7bdae430
chore: update Winterfell dependencies to v0.12.0 (#374) 2025-02-10 10:29:33 -08:00
Bobbin Threadbare
117813f48d
chore: update changelog 2025-02-06 17:58:44 -08:00
Krushimir
1b77fa8039
feat: implements concurrent Smt::compute_mutations (#365) 2025-02-06 16:51:11 -08:00
arnaucube
d569c71666
feat: remove duplicated check in falcon verification (#368) 2025-01-26 00:22:28 -08:00
Bobbin Threadbare
a424652ba7
Merge branch 'main' into next 2025-01-24 17:34:50 -08:00
polydez
2a5b8ffb21
feat: implement functionality needed for computing openings for recent blocks (#367)
* refactor: make `InnerNode` and `NodeMutation` public
* feat: implement serialization for `LeafIndex`
2025-01-24 17:32:30 -08:00
Bobbin Threadbare
0e85398732
chore: update crate version to 0.14.0 and MSRV to 1.84 2025-01-23 00:11:36 -08:00
polydez
7ee6d7fb93
feat: add support for hashmaps in Smt and SimpleSmt (#363) 2025-01-02 10:23:12 -08:00
Bobbin Threadbare
43b2954d60
Merge branch 'main' into next 2024-12-26 23:10:26 -08:00
polydez
589839fef1
feat: reverse mutations generation, mutations serialization (#355)
* feat: revert mutations generation, mutations serialization
* tests: check both `apply_mutations` and `apply_mutations_with_reversion`
* feat: add `num_leaves` method for `Smt`
* refactor: improve ad-hoc benchmarks
* chore: update crate version to v0.13.1
2024-12-26 18:16:38 -08:00
b151773b0d
feat: implement concurrent Smt construction (#341)
* merkle: add parent() helper function on NodeIndex
* smt: add pairs_to_leaf() to trait
* smt: add sorted_pairs_to_leaves() and test for it
* smt: implement single subtree-8 hashing, w/ benchmarks & tests

This will be composed into depth-8-subtree-based computation of entire
sparse Merkle trees.

* merkle: add a benchmark for constructing 256-balanced trees

This is intended for comparison with the benchmarks from the previous
commit. This benchmark represents the theoretical perfect-efficiency
performance we could possibly (but impractically) get for computing
depth-8 sparse Merkle subtrees.

* smt: test that SparseMerkleTree::build_subtree() is composable

* smt: test that subtree logic can correctly construct an entire tree

This commit ensures that `SparseMerkleTree::build_subtree()` can
correctly compose into building an entire sparse Merkle tree, without
yet getting into potential complications concurrency introduces.

* smt: implement test for basic parallelized subtree computation w/ rayon

Building on the previous commit, this commit implements a test proving
that `SparseMerkleTree::build_subtree()` can be composed into itself not
just concurrently, but in parallel, without issue.

* smt: add from_raw_parts() to trait interface

This commit adds a new required method to the SparseMerkleTree trait,
to allow generic construction from pre-computed parts.

This will be used to add a generic version of `with_entries()` in a
later commit.

* smt: add parallel constructors to Smt and SimpleSmt

What the previous few commits have been leading up to: SparseMerkleTree
now has a function to construct the tree from existing data in parallel.
This is significantly faster than the singlethreaded equivalent.
Benchmarks incoming!

---------

Co-authored-by: krushimir <krushimir@reilabs.co>
Co-authored-by: krushimir <kresimir.grofelnik@reilabs.io>
2024-12-04 10:54:41 -08:00
Bobbin Threadbare
1867f842d3
chore: update changelog 2024-11-24 22:26:51 -08:00
Al-Kindi-0
e1072ecc7f
chore: update to winterfell dependencies to 0.11 (#346) 2024-11-24 22:20:19 -08:00
Philipp Gackstatter
a27f9ad828
refactor: use thiserror to derive errors and update error messages (#344) 2024-11-21 15:52:20 -08:00
Al-Kindi-0
50dd6bda19
fix: skip using the field element containing the proof-of-work (#343) 2024-11-18 00:16:27 -08:00
Bobbin Threadbare
ee20a49953
chore: increment crate version to v0.12.0 and update changelog 2024-10-30 15:04:08 -07:00
Al-Kindi-0
0d75e3593b
chore: migrate to Winterfell v0.10.0 release (#338) 2024-10-29 15:02:46 -07:00
Bobbin Threadbare
689cc93ed1
chore: update crate version to v0.11.0 and set MSRV to 1.82 2024-10-17 23:16:41 -07:00
Bobbin Threadbare
7970d3a736
Merge branch 'main' into next 2024-10-17 20:53:09 -07:00
Al-Kindi-0
a734dace1e
feat: update RPO's padding rule to use that in the xHash paper (#318) 2024-10-17 20:49:44 -07:00
Andrey Khmuro
940cc04670
feat: add Smt::is_empty (#337) 2024-10-17 14:27:50 -07:00
Andrey Khmuro
e82baa35bb
feat: return error instead of panic during MMR verification (#335) 2024-10-17 07:23:29 -07:00
Bobbin Threadbare
876d1bf97a
chore: update crate version v0.10.3 2024-09-26 09:37:34 -07:00
Bobbin Threadbare
c2eb38c236
chore: increment crate version to v0.10.2 2024-09-25 03:05:33 -07:00
Philipp Gackstatter
a924ac6b81
feat: Add size hint for digests (#330) 2024-09-25 03:03:31 -07:00
Bobbin Threadbare
e214608c85
fix: bug introduced due to merging 2024-09-13 11:10:34 -07:00
Bobbin Threadbare
c44ccd9dec
Merge branch 'main' into next 2024-09-13 11:01:04 -07:00
Bobbin Threadbare
e34900c7d8
chore: update version to v0.10.1 2024-09-13 10:58:06 -07:00
Santiago Pittella
2b184cd4ca
feat: add de/serialization to InOrderIndex and PartialMmr (#329) 2024-09-13 08:47:46 -07:00
Qyriad
ae807a47ae
feat: implement transactional Smt insertion (#327)
* feat(smt): impl constructing leaves that don't yet exist

This commit implements 'prospective leaf construction' -- computing
sparse Merkle tree leaves for a key-value insertion without actually
performing that insertion.

For SimpleSmt, this is trivial, since the leaf type is simply the value
being inserted.

For the full Smt, the new leaf payload depends on the existing payload
in that leaf. Since almost all leaves are very small, we can just clone
the leaf and modify a copy.

This will allow us to perform more general prospective changes on Merkle
trees.

* feat(smt): export get_value() in the trait

* feat(smt): implement generic prospective insertions

This commit adds two methods to SparseMerkleTree: compute_mutations()
and apply_mutations(), which respectively create and consume a new
MutationSet type. This type represents as set of changes to a
SparseMerkleTree that haven't happened yet, and can be queried on to
ensure a set of insertions result in the correct tree root before
finalizing and committing the mutation.

This is a direct step towards issue 222, and will directly enable
removing Merkle tree clones in miden-node InnerState::apply_block().

As part of this change, SparseMerkleTree now requires its Key to be Ord
and its Leaf to be Clone (both bounds which were already met by existing
implementations). The Ord bound could instead be changed to Eq + Hash,
if MutationSet were changed to use a HashMap instead of a BTreeMap.

* chore(smt): refactor empty node construction to helper function
2024-09-11 16:49:57 -07:00
Paul-Henry Kajfasz
790846cc73
Merge next 2024-08-21 09:29:39 +01:00
Paul-Henry Kajfasz
4cb6bed428
Updated changelog + added release to no-std 2024-08-19 14:37:58 +01:00
Bobbin Threadbare
a12e62ff22
feat: improve MMR api (#324) 2024-08-18 09:35:12 -07:00
Paul-Henry Kajfasz
ac3c6976bd
Updated Changelog + pre commit 2024-08-16 16:09:51 -07:00