Commit Graph

207 Commits

Author SHA1 Message Date
Kris Nuttycombe 257402db53 Address comments from review. 2023-03-20 16:12:30 -06:00
Kris Nuttycombe d7a04122ea Fix clippy complaints. 2023-03-13 11:42:57 -06:00
Kris Nuttycombe ac6e8e8212 Use direct recursion in shardtree instead of reduce/try_reduce
These more general functions weren't carrying their weight.
2023-03-09 16:29:24 -07:00
Kris Nuttycombe 664cead68b Use `bitflags` crate instead of hand-rolled `RetentionFlags` bit flags. 2023-03-09 13:51:56 -07:00
Kris Nuttycombe 37be939c0f Apply suggestions from code review
Co-authored-by: ebfull <ewillbefull@gmail.com>
2023-03-09 13:37:22 -07:00
Kris Nuttycombe fa7c6673fd Make `LocatedTree` and `LocatedPrunableTree` type aliases public. 2023-03-08 11:12:17 -07:00
Kris Nuttycombe 0cb1cec21f Add `shardtree` witness operation & implement property tests. 2023-03-08 11:12:17 -07:00
Kris Nuttycombe a7bb8bb749 Add `shardtree` batch insertion. 2023-03-08 11:12:17 -07:00
Kris Nuttycombe e209f3bf20 Add `shardtree` checkpointing & root computation. 2023-03-08 11:12:17 -07:00
Kris Nuttycombe ebe3efa135 Add ShardTree types & implement append operation. 2023-03-08 11:12:17 -07:00
Kris Nuttycombe dc5a3ed0e7 Add types & operations for individual shards.
This adds the `LocatedPrunableTree` type, which provides the complete
set of operations for individual shards within a larger tree.
2023-03-08 11:11:16 -07:00
Kris Nuttycombe 34f6bd7ce5 Add a `LocatedTree` type that pairs tree roots with address information. 2023-03-08 11:09:43 -07:00
Kris Nuttycombe 8644372c4e Add types and methods to support tree pruning.
Each leaf of the tree is annotated with retention metadata, and
ephemeral leaves can be aggressively pruned when performing insertions
into the tree.
2023-03-08 11:08:59 -07:00
Kris Nuttycombe 8864a84d19 Introduce a simple binary tree type. 2023-03-08 11:07:58 -07:00
Kris Nuttycombe 0ae9b499cc Introduce the `shardtree` crate: a sparse Merkle tree type. 2023-03-07 12:11:48 -07:00
Kris Nuttycombe 9a0e39af3a
Merge pull request #52 from nuttycom/witness_at_depth
Compute witnesses as of checkpoint depth rather than as of a root hash.
2023-03-07 12:11:07 -07:00
Kris Nuttycombe 1db85f347e Merge remote-tracking branch 'upstream/master' into witness_at_depth 2023-03-03 17:06:36 -07:00
Kris Nuttycombe 0697df7d95 Fix documentation errors. 2023-03-03 17:02:03 -07:00
Greg Pfeil 42dfd970b5
Merge pull request #60 from zcash/release-0.3.1
Merge hotfix branch for v0.3.1 back to `master`.
2023-02-28 16:03:23 -07:00
Kris Nuttycombe d467a6163d Merge remote-tracking branch 'upstream/master' into release-0.3.1 2023-02-28 14:14:35 -07:00
Kris Nuttycombe d91890d440 Release incrementalmerkletree v0.3.1 2023-02-28 14:08:25 -07:00
Kris Nuttycombe 06af5ac324
Merge pull request #57 from daira/max-altitude-bug
[0.3.1] Fix a bug on 32-bit platforms that caused `Position::max_altitude` to return the wrong value
2023-02-23 15:17:01 -07:00
Kris Nuttycombe f127aab803
Merge pull request #58 from daira/root-level-bug
Fix a bug on 32-bit platforms that caused `Position::root_level` to return the wrong value
2023-02-23 14:54:48 -07:00
Kris Nuttycombe 34551a00a7 Pin proptest dependency to 1.0.0 to avoid unstable `unarray` dep. 2023-02-23 14:52:29 -07:00
Daira Hopwood a44c2c7dbf Merge branch 'max-altitude-bug'. This fixes a bug on 32-bit platforms
that caused `Position::root_level` to return the wrong value, as a result
of assuming that `usize` is 64 bits.
fixes #56

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2023-02-23 21:32:18 +00:00
Daira Hopwood 86f0903c46 Fix a bug on 32-bit platforms that caused `Position::max_altitude` to return
the wrong value, as a result of assuming that `usize` is 64 bits.
fixes #56

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2023-02-23 21:15:57 +00:00
Kris Nuttycombe 6867240e5a Remove the `current_leaf` method from `Tree`
The notion of `current` doesn't make a lot of sense in the context of
out-of-order insertion.
2023-02-16 15:01:53 -07:00
Kris Nuttycombe 0e2329cebc Fix a missed Authpath -> Witness rename. 2023-02-16 15:01:53 -07:00
Kris Nuttycombe 14bb9c6b1b Modify test infrastructure to allow shardtree testing.
This removes the `mark` function from the `tree` interface, in favor
of always appending nodes as marked, as that's what's needed in
practice, rather than the ability to mutably mark the latest position at
arbitrary states of the tree.

This removal does mean that a few patterns of interleaved mark and
checkpoint operations are no longer being tested in the shared test
suite; however, such interleaving of operations is not something that
we should need to support anyway.
2023-02-16 15:01:53 -07:00
Kris Nuttycombe 07a88c34ac Adds a `Retention` enum to the `incrementalmerkletree` crate.
This will be necessary in order to make the testing infrastructure
reusable for shardtree.
2023-02-16 15:01:53 -07:00
Kris Nuttycombe aa1d59f47a `witness` now witnesses at a checkpoint, rather than a root.
This change exposed an inconsistency in how `BridgeTree` and
`CompleteTree` were tracking `Mark` operations, which has now also been
fixed.

The behavior of the "unmark" operation has been simplified, such that it
now ensures that a marked node will be made eligible for garbage
collection when the checkpoint for the tree state in which the mark was
forgotten rolls off the back of the checkpoint queue.
2023-02-16 15:01:53 -07:00
Kris Nuttycombe 92121642b0
Merge pull request #54 from nuttycom/improve_addrs
Add `Address` methods to facilitate tree traversal.
2023-02-16 15:01:29 -07:00
Kris Nuttycombe 2e9043ef82 Add `Address` methods to facilitate tree traversal. 2023-02-16 14:32:54 -07:00
str4d 3c19b5320f
Merge pull request #55 from nuttycom/update_msrv_1.60
Update MSRV to 1.60
2023-02-16 18:22:49 +00:00
Kris Nuttycombe 39fe209e21
Apply suggestions from code review
Co-authored-by: str4d <thestr4d@gmail.com>
2023-02-16 11:02:47 -07:00
Kris Nuttycombe dff6be7221 Update MSRV to 1.60
The transitive dependency we have on `unarray` is forcing this update.
Also, update CI actions to eliminate dependencies on the unmaintained
`actions-rs` Rust CI tools.
2023-02-16 10:51:41 -07:00
str4d da9ab5a71d
Merge pull request #49 from nuttycom/workspace_refactor
Move common utilities to the incrementalmerkletree crate & turn into a workspace.
2023-01-06 09:22:30 +00:00
Kris Nuttycombe 8998f839ce Change `append` to take ownership of the value being appended.
It is now up to the caller to clone the value if necessary.
2023-01-04 14:08:11 -07:00
Kris Nuttycombe 0dde92c699 Move `testing::lazy_root` to `testing::complete_tree::root` & make crate-private
The former name didnt make sense anyway, because there's nothing lazy
about the result.
2022-12-21 14:48:53 -07:00
Kris Nuttycombe 50779d2bd5 Consolidate bridgetree tests. 2022-12-21 12:53:17 -07:00
Kris Nuttycombe 4e2883c707 Move CombinedTree to incrementalmerkletree::testing 2022-12-21 12:53:17 -07:00
Kris Nuttycombe 3f88ac3af2 Move complete_tree testing module to incrementalmerkletree 2022-12-21 12:53:17 -07:00
Kris Nuttycombe a8c5ce1c98 Move `check_operations` to `incrementalmerkletree::testing` 2022-12-21 12:53:17 -07:00
Kris Nuttycombe 02a33c5c32 Refactor check_operations to generalize usage. 2022-12-21 12:53:17 -07:00
Kris Nuttycombe 6b4bcda423 Move shared example tests to incrementalmerkletree::testing 2022-12-21 12:53:17 -07:00
Kris Nuttycombe 6b6d108de6 Move randomized test generators to incrementalmerkletree 2022-12-21 12:53:17 -07:00
Kris Nuttycombe eb3413837e Move `Tree` and `Frontier` traits to `incementalmerkletree::testing` 2022-12-21 12:53:17 -07:00
Kris Nuttycombe c5c6c65799 Move position & hashable types to incrementalmerkletree root. 2022-12-21 12:52:57 -07:00
Kris Nuttycombe b2a68215a0 Move the `bridgetree` crate to a workspace. 2022-12-21 11:59:43 -07:00
Kris Nuttycombe 8f6056c73e
Merge pull request #51 from nuttycom/master
Release bridgetree v0.2.0.
2022-12-20 17:30:23 -07:00