Commit Graph

239 Commits

Author SHA1 Message Date
Kris Nuttycombe 247b38f336 Invert the relationship between shardtree errors and storage errors. 2023-05-10 20:44:57 -06:00
Kris Nuttycombe 0e502e3832 Add `Display` impl for `shardtree::InsertionError` 2023-05-10 20:43:56 -06:00
Kris Nuttycombe 10e5ee59a4 Distinguish between creating a new empty tree and loading data for an existing tree. 2023-05-10 20:43:20 -06:00
Kris Nuttycombe e15440bd37 Add checkpoint management APIs to `ShardStore`. 2023-05-10 20:43:20 -06:00
Kris Nuttycombe ed78bc2e56 Add dedicated `MemoryShardStore` type. 2023-05-10 20:43:18 -06:00
Kris Nuttycombe 62acf235a7
Merge pull request #68 from nuttycom/u64_positions
Use `u64` for the internal state of `Position` and `Address::index`
2023-05-10 20:34:59 -06:00
Kris Nuttycombe 951d61b27b
Merge pull request #66 from nuttycom/shardstore_blanket_mut_impl
Add a blanket implementation of ShardStore for mutable references to ShardStores
2023-05-10 20:34:49 -06:00
Kris Nuttycombe 34d9aa25bc Use `u64` for the internal state of `Position` and `Address::index` 2023-05-10 16:46:23 -06:00
Kris Nuttycombe 465f2ff0d8 Add a blanket implementation of ShardStore for mutable references to ShardStores. 2023-05-04 13:46:02 -06:00
Kris Nuttycombe b4bebd497e
Merge pull request #65 from nuttycom/improve_enumerate
Avoid a few usize->u8 comparisons.
2023-05-04 13:20:30 -06:00
Kris Nuttycombe 667c57a835 Avoid a few usize-u8 comparisons. 2023-05-04 12:49:16 -06:00
Kris Nuttycombe ea1686e8f8
Merge pull request #64 from nuttycom/typed_merkle_path
Use `MerklePath` when returning witnesses.
2023-04-11 09:40:27 -06:00
Kris Nuttycombe 69d444c439 Apply suggestions from code review
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2023-04-10 21:05:22 -06:00
Kris Nuttycombe 873a72ff98 Return `MerklePath` from `ShardTree::witness` 2023-04-06 19:48:10 -06:00
Kris Nuttycombe d2d945edcb Expose `MerklePath` type without a feature flag. 2023-04-06 17:07:20 -06:00
Kris Nuttycombe be81d67cef
Merge pull request #62 from nuttycom/add_librustzcash_types
Move `bridgetree::Frontier` to `incrementalmerkletree` and add `librustzcash` types.
2023-04-04 10:37:16 -06:00
Kris Nuttycombe ebbd2e3d2d Apply suggestions from code review.
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2023-03-31 19:43:25 -06:00
Kris Nuttycombe 9c0c9aa245 Merge remote-tracking branch 'upstream/master' into add_librustzcash_types 2023-03-31 16:02:59 -06:00
Kris Nuttycombe 02341ece26 Ensure that `BridgeTree` state is checkpointed when constructing from a frontier. 2023-03-27 09:54:21 -06:00
Kris Nuttycombe 739441a892
Merge pull request #63 from nuttycom/bridgetree_checkpoint_id
Make `bridgetree` polymorphic in checkpoint identifier type.
2023-03-24 09:00:25 -06:00
Kris Nuttycombe f7931ec31f Apply suggestions from code review. 2023-03-24 08:38:11 -06:00
Kris Nuttycombe 0d1c3e6512
Merge pull request #59 from nuttycom/fix_premature_tracking
Do not eagerly track marked nodes in the current bridge.
2023-03-24 08:29:38 -06:00
Kris Nuttycombe 978da59c67 Merge branch 'bridgetree_checkpoint_id' into add_librustzcash_types 2023-03-23 16:18:32 -06:00
Kris Nuttycombe 650edd0fc7 Make `bridgetree` polymorphic in checkpoint identifier type. 2023-03-23 16:02:40 -06:00
Kris Nuttycombe 53139f4f9c
Merge pull request #50 from nuttycom/shardtree
Add `shardtree` crate.
2023-03-23 13:12:00 -06:00
Kris Nuttycombe 30a1b7b62b Fix clippy complaints. 2023-03-21 12:15:22 -06:00
Kris Nuttycombe 71557cc0e3 Expose operations on `legacy-api` types required for serialization & testing. 2023-03-21 12:15:22 -06:00
Kris Nuttycombe 7cb2bdcc8f Add legacy `CommitmentTree` and `IncrementalWitness` types.
These types were previously part of the `zcash_primitives` crate and are
being included here to provide a migration path for when these types are
removed from `zcash_primitives`.
2023-03-21 12:15:22 -06:00
Kris Nuttycombe 4e3c6a6378 Move frontier types from `bridgetree` to `incrementalmerkletree`
These types are reusable outside of the context of the `bridgetree`
crate.
2023-03-21 12:15:22 -06:00
Kris Nuttycombe ff8095b7ed Remove `serde` serialization & deserialization
The structure of the `incrementalmerkletree` and `bridgetree` types has
not historically been stable, and as such it is not appropriate to
automatically derive serialization for these types.
2023-03-21 12:15:22 -06:00
Kris Nuttycombe 3077e94301 Merge branch 'fix_premature_tracking' 2023-03-21 12:14:54 -06:00
Kris Nuttycombe 22c2c019cc Do not eagerly track marked nodes in the current bridge.
This fixes a minor compatibility issue with respect to possible
deserialization of the `incrementalmerkletree-0.3.0` `MerkleBridge`
type. It is not necessary to track a marked leaf in the current
bridge *unless* the marked position is the bridge's starting position
and the prior bridge ended at a checkpoint.
2023-03-21 11:59:36 -06:00
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