Commit Graph

3274 Commits

Author SHA1 Message Date
Kris Nuttycombe fb8c3a178c zcash_client_sqlite: Ensure that fragmentation also can't occur at scan range ends. 2023-08-31 17:52:29 -06:00
Kris Nuttycombe 4fe9d61959
zcash_client_sqlite: Fix a comment on range inclusion.
Co-authored-by: str4d <thestr4d@gmail.com>
2023-08-31 15:07:07 -06:00
str4d 2ba9c25b9f
Merge pull request #928 from zcash/lightwalletd-expose-service-types
zcash_client_backend: Reduce scope of `lightwalletd-tonic` feature flag
2023-08-31 22:06:55 +01:00
Jack Grigg 3272f129e2 zcash_client_backend: Remove now-superfluous braces from build script 2023-08-31 20:32:42 +00:00
Jack Grigg 3ad07cad9e zcash_client_backend: Reduce scope of `lightwalletd-tonic` feature flag
The `zcash_client_backend::proto::service::compact_tx_streamer_client`
is now the only module controlled by that feature flag, exposing the
service types for use by parsers.
2023-08-31 20:32:04 +00:00
Kris Nuttycombe bcafb7d4b4 zcash_client_sqlite: Prevent scan range fragmentation.
Fixes #922

Co-authored-by: Sean Bowe <ewillbefull@gmail.com>
2023-08-31 14:18:30 -06:00
Jack Grigg f33c8ea418 zcash_primitives: Parse the full opcode set
This enhances the alternate `impl Debug for Script` to render unexpected
scripts correctly.
2023-08-30 20:41:27 +00:00
Jack Grigg c8e2d81f58 Render byte slices as hex more often in `Debug` impls
This is more generally useful for debugging purposes than the default
`Debug` impl for `&[u8]`.

We also provide an alternate `Debug` impl for `legacy::Script` that
parses and renders known opcodes. Note that we only parse a subset of
the full opcode set.
2023-08-30 20:41:27 +00:00
Jack Grigg 57a3914e3a zcash_primitives: Drop `byteorder::LittleEndian` usage in sighash 2023-08-30 19:46:38 +00:00
str4d 31e5a5188e
Merge pull request #915 from nuttycom/sbs/pre_birthday_test_refactor
Test refactorings in preparation for #907
2023-08-30 00:44:41 +01:00
Kris Nuttycombe 22b6ddd754 Apply suggestions from code review
Co-authored-by: str4d <thestr4d@gmail.com>
2023-08-29 17:02:46 -06:00
Kris Nuttycombe ff8104fa75 zcash_client_sqlite: (testing) Initialize wallets using an `AccountBirthday` struct. 2023-08-28 19:25:52 -06:00
Kris Nuttycombe a238007e14 zcash_client_sqlite: Remove `testing::network` global accessor function. 2023-08-28 17:27:23 -06:00
Kris Nuttycombe 3be55ae964 zcash_client_backend: Add test-only convenience methods for default addresses. 2023-08-28 14:05:17 -06:00
str4d 8c30c6a066
Merge pull request #916 from zcash/sqlite-testing-helper
`zcash_client_sqlite`: Introduce `TestBuilder` and `TestRunner`
2023-08-28 20:43:44 +01:00
Jack Grigg 8af74de931 `zcash_client_sqlite`: Add `TestState::propose_shielding`
Currently unused (causing an expected lint), but will be in an upcoming PR.
2023-08-28 18:58:37 +00:00
Jack Grigg 578eac15df zcash_client_sqlite: Rename `TestRunner` to `TestState` 2023-08-28 18:54:35 +00:00
Jack Grigg 84a5d5ca94 zcash_client_sqlite: Migrate all tests to `TestBuilder` 2023-08-28 16:55:51 +00:00
Jack Grigg ce3e4cd34a zcash_client_sqlite: Introduce `TestBuilder` and `TestRunner`
These provide a standard way to set up tests, and helper methods for
performing common test actions.
2023-08-28 16:55:51 +00:00
Jack Grigg 7ba36c7bd2 zcash_client_sqlite: Move testing helper functions into module 2023-08-25 23:16:37 +00:00
Kris Nuttycombe b3474724a9
Merge pull request #909 from AArnott/AArnott-patch-1
Fix API doc comment on UnifiedSpendingKey
2023-08-24 13:19:05 -06:00
Andrew Arnott 9859066c72
Fix API doc comment on UnifiedSpendingKey
This fixes a simple copy/paste error of the docs from the unified viewing key.
2023-08-24 07:47:30 -06:00
Daira Emma Hopwood b580c42bdc
Merge pull request #903 from nuttycom/sbs/scan_queue_init
zcash_client_sqlite: Initialize the scan queue as part of `init_blocks_table`
2023-08-22 14:30:55 +01:00
Kris Nuttycombe 4d6e236e23
zcash_client_sqlite: minor test documentation improvement.
Co-authored-by: Daira Emma Hopwood <daira@jacaranda.org>
2023-08-21 17:13:45 -06:00
Kris Nuttycombe 61ac79c006 Add debug logging of ignored block range in `init_blocks_table` 2023-08-21 12:26:56 -06:00
Kris Nuttycombe b3be0318c6 zcash_client_sqlite: Initialize the scan queue as part of `init_blocks_table`
Fixes #902
Fixes #898
2023-08-21 09:03:31 -06:00
str4d f61d60bb96
Merge pull request #894 from nuttycom/sbs/select_only_witnessable
zcash_client_sqlite: Only select notes for which witnesses can be constructed.
2023-08-18 01:15:50 +01:00
Kris Nuttycombe 1f8108e8da zcash_client_sqlite: Use constant for SAPLING_SHARD_HEIGHT in v_sapling_shard_unscanned_ranges 2023-08-17 16:20:54 -06:00
Kris Nuttycombe 75ca045786 zcash_client_sqlite: Note selection requires commitment tree positions to be known.
Fixes #895
2023-08-17 16:20:54 -06:00
Kris Nuttycombe 0e7ee0ebd7 zcash_client_sqlite: Ensure that the shard at the chain tip is complete to anchor height.
If the tip shard has any un-scanned range below the anchor height, we
can't compute witnesses for any of our notes.
2023-08-17 16:20:54 -06:00
Kris Nuttycombe 50ea2a5b0f zcash_client_sqlite: Only select notes for which witnesses can be constructed.
This change modifies the implementation of `get_spendable_sapling_notes`
and `select_spendable_sapling_notes` to only return notes at positions
where the associated note commitment tree shard has been fully scanned.
This is slightly more conservative than it needs to be, because
there could be cases where witnesses imported into the tree in the
`shardtree_support` migration cover the complete range of a subtree (and
hence that subtree doesn't need to be re-scanned). However, we can't
detect or depend upon that condition in general without attempting to
create a witness for each note retrieved.

A possible alternative to this approach would be to not bound our query
results on the requested total, and instead attempt to construct a
witness for each note we retrieve, skipping the note if we cannot
construct a witness. However, given that accessing the note commitment
tree can be a costly operation requiring nontrivial deserialization
costs, the more conservative database-oriented approach is perhaps
better.
2023-08-17 16:20:54 -06:00
str4d 104577c108
Merge pull request #896 from nuttycom/chain_tip_target_height
zcash_client_sqlite: Ensure that target and anchor heights are relative to the chain tip.
2023-08-17 22:29:13 +01:00
Kris Nuttycombe dee43854cb zcash_client_sqlite: Ensure that target and anchor heights are relative to the chain tip.
Prior to the scan-before-sync changes, the wallet was able to assume
that the maximum scanned block height at the time of the spend was
within a few blocks of the chain tip. However, under linear scanning
after the spend-before-sync changes this invariant no longer holds,
resulting in a situation where in linear sync conditions the wallet
could attempt to create transactions with already-past expiry heights.

This change separates the notion of "chain tip" from "max scanned
height", relying upon the `scan_queue` table to maintain the wallet's
view of the consensus chain height and using information from the
`blocks` table only in situations where the latest and/or earliest
scanned height is required.

As part of this change, the `WalletRead` interface is also modified to
disambiguate these concepts.
2023-08-16 11:53:24 -06:00
str4d d25f2bd6ab
Merge pull request #893 from zcash/scanning-bugfixes
Scanning bugfixes
2023-08-10 00:16:10 +01:00
Jack Grigg d3fc9670d5 zcash_client_backend: Fix `scan_cached_blocks` panic with genesis block
If `from_height = 0` and `limit > 1`, then the conditional being used to
initialise `continuity_check_metadata` was previously running for every
block, and would therefore panic while processing the block at height 1.
2023-08-09 17:57:00 +00:00
Jack Grigg 44abd3450b Require `BlockSource::with_blocks` fail on non-existent `from_height`
Previously this was not clearly specified, and the implementations in
`zcash_client_sqlite` behaved similarly to when `from_height = None`.

Closes zcash/librustzcash#892.
2023-08-09 17:57:00 +00:00
str4d 81d1928497
Merge pull request #890 from nuttycom/received_note_id_display
Add `Display` impl for `ReceivedNoteId`
2023-08-07 20:06:28 +01:00
Kris Nuttycombe 1c4e63718f Add `Display` impl for `ReceivedNoteId` 2023-08-07 12:24:05 -06:00
str4d f6eef20f62
Merge pull request #888 from nuttycom/feature/tx_output_note_refs
Restrict use of backend-specific note identifiers.
2023-08-07 18:55:11 +01:00
Kris Nuttycombe f602ec125d Apply suggestions from code review
Co-authored-by: str4d <thestr4d@gmail.com>
2023-08-07 11:28:28 -06:00
Kris Nuttycombe d3b7dffa3c zcash_client_backend: Restrict use of backend-specific note identifiers.
In general, it is preferable to use globally relevant identifiers where
possible. This PR removes the `WalletRead::TxRef` associated type in
favor of using `TxId` directly for the transaction identifier, and
restricts the use of the `NoteRef` type to those scenarios where the
result of one query is intended to be used directly as the input to
another query.

Closes #834
2023-08-07 11:27:38 -06:00
str4d d7bd566b21
Merge pull request #889 from nuttycom/avoid_checkpoint_add_conflict
zcash_client_sqlite: Ensure that re-adding the same checkpoint information does not cause a database conflict.
2023-08-07 18:18:53 +01:00
str4d cdb904a28c
Merge pull request #886 from nuttycom/bug/memo_row_absent
Fix a number of bugs related to the creation of change memos and storage of empty memos.
2023-08-07 15:49:30 +01:00
Kris Nuttycombe 522f1e4da0 Apply suggestions from code review
Co-authored-by: str4d <thestr4d@gmail.com>
2023-08-07 08:07:21 -06:00
Kris Nuttycombe 027b3c9af8 zcash_client_sqlite: Ensure that re-adding the same checkpoint information does not cause a database conflict.
The `add_checkpoint` method is intended to be idempotent. In the case
that we add a checkpoint at an already-checkpointed block height, we
should only raise an error in the case that the note commitment tree
position or the set of notes spent in the checkpointed block has
changed.
2023-08-04 15:12:04 -06:00
Kris Nuttycombe 0ee45e40c4 zcash_client_sqlite: Replace Either-based definition of `wallet::commitment_tree::Error` with a bespoke error type. 2023-08-04 15:01:15 -06:00
Kris Nuttycombe cb0d16cfa9 Fix clippy complaint. 2023-08-04 14:35:58 -06:00
Kris Nuttycombe 90412ebdc2 Fix SentTransactionOutput documentation. 2023-08-04 14:11:24 -06:00
Kris Nuttycombe a5a8562ddd zcash_client_backend, zcash_client_sqlite: Ensure consistency between sent & stored memos. 2023-08-04 14:05:00 -06:00
Kris Nuttycombe f0b2fc3421 zcash_client_sqlite: Store the empty memo as a single 0xf6 byte. 2023-08-02 11:35:27 -06:00