Update to librustzcash 0.30/0.10 cohort (zcash_primitives 0.30.0) - #1428
Open
schell wants to merge 19 commits into
Open
Update to librustzcash 0.30/0.10 cohort (zcash_primitives 0.30.0)#1428schell wants to merge 19 commits into
schell wants to merge 19 commits into
Conversation
merge dev into v0.5.0-rc
final 0.5.0-rc update
Release 0.5.0
zainod 0.4.2 → 0.5.0 zaino-state 0.3.1 → 0.4.0 zaino-common 0.2.0 → 0.3.0 zaino-serve 0.3.1 → 0.4.0 zaino-fetch 0.2.1 → 0.3.0 zaino-proto 0.1.3 (unchanged)
…-0.5.0 Bump crate versions for 0.5.0 release
The [patch.crates-io] block pinned all three zebra crates to an unreleased ZcashFoundation/zebra rev (9a27f88) for the struct-variant NonFinalizedBlocksListener API. Zaino passed an empty known_chain_tips set, making the call functionally identical to the released unit-variant API. Revert to the published crates.io zebra-state 9.0.1 / zebra-chain 10.1.0 / zebra-rpc 10.0.1 so the workspace can be published.
Patch-level bump for the zebra git-patch removal hotfix.
…t-patch Drop unreleased zebra git patch; use crates.io releases
The published zaino-proto 0.1.3 on crates.io has zebra-state = "8.0.0" behind its `heavy` feature (default-on). When cargo publish verifies zaino-state, it resolves zaino-proto from crates.io — pulling zebra-state 8.0.0 alongside zaino-state's own zebra-state 9.0.1, causing a type conflict. Bumping zaino-proto ensures the published version carries the workspace-resolved zebra-state ^9.0 dep.
…oto-for-publish Bump zaino-proto 0.1.3 → 0.1.4 for crates.io publish chain
Advance rc/0.6.0 to dev for 0.6.0-rc.3
zaino-common 0.2.0 → 0.4.0-rc.3 zaino-fetch 0.2.1 → 0.4.0-rc.3 zaino-proto 0.1.3 → 0.2.0-rc.3 zaino-serve 0.3.1 → 0.5.0-rc.3 zaino-state 0.3.1 → 0.5.0-rc.3 zainod 0.4.3-ironwood.1 → 0.6.0-rc.3 Workspace dependency version pins updated to match.
build: bump crate versions for 0.6.0-rc.3
Merge rc/0.6.0 into stable and bump all crate versions to their final stable form: zaino-common 0.4.0-rc.3 → 0.4.0 zaino-fetch 0.4.0-rc.3 → 0.4.0 zaino-proto 0.2.0-rc.3 → 0.2.0 zaino-serve 0.5.0-rc.3 → 0.5.0 zaino-state 0.5.0-rc.3 → 0.5.0 zainod 0.6.0-rc.3 → 0.6.0 Resolves stable/rc divergence from the 0.5.1 hotfix commits that were never backported to dev (zebra git patch removal, version bumps).
Release Zaino 0.6.0 (Ironwood)
Bump the librustzcash dependencies and align the Zebra crates with the same cohort, matching zallet's `update/librustzcash-0.24.0-rc.4` branch: - zcash_keys 0.15 -> 0.16 - zcash_primitives 0.29 -> 0.30 - zcash_transparent 0.9 -> 0.10 - orchard resolves to 0.15.3 (required by zcash_primitives 0.30 for the new `new_with_anchor_deferred`/`add_spend_unwitnessed` builder API) The released zebra-* crates on crates.io are built against the 0.29/0.9 librustzcash cohort. To expose the 0.30/0.10 types through zebra-chain / zebra-state / zebra-rpc, patch them to ZcashFoundation/zebra#11111 (zcash_primitives 0.30.0) head until a Zebra release ships that update. Test-only fixes, both pre-existing or upstream-prescribed and unrelated to the version bump itself: - chain_index tests: make init_tracing() idempotent. Many tests in the same binary set the global tracing dispatcher, which can only be installed once per process; the second caller panicked with SetGlobalDefaultError. Ignore the already-set error. - proptest_blockgen: zebra-chain 11.2 now generates V6 transactions for NU6.3 natively, so remove the #[should_panic] tripwire that tracked the old upstream gap (the in-source comment directs this removal on such an upgrade). cargo check --workspace is clean; cargo test -p zaino-state --lib is green (214 passed, 0 failed).
schell
added a commit
to zcash/zallet
that referenced
this pull request
Jul 27, 2026
Move the zaino backend onto the librustzcash 0.30/0.10 dependency cohort to match the rest of the workspace, and onto zaino 0.5, replacing the previous pin to zingolabs/zaino `dev`. The zaino crates are patched to the zodl-inc/zaino branch `update/librustzcash-0.24.0-rc.4` (zingolabs/zaino#1428), which bumps zaino to the same librustzcash 0.30/0.10 versions and carries the Ironwood (NU6.3) note commitment treestate needed for spendable Ironwood notes. The zebra crates are in turn pinned (here and by that zaino branch) to ZcashFoundation/zebra#11111 head, since the librustzcash-0.30 zebra builds (chain 11.2 / state 12.0 / rpc 14.0) are not yet released on crates.io; this resolves the two-zebra-state librocksdb-sys conflict by unifying on a single copy of each zebra crate. Code changes for the zaino 0.3 -> 0.5 API redesign (zaino ADR 0003): - `ChainIndexConfig::new` is now a struct literal whose `network` is a `zebra_chain::parameters::Network`; the old payload-carrying `zaino_common::Network` is gone. Both the indexer config and the `State` validator connector now take the runtime network from the existing `network_to_zebra` helper, so the `network_to_zaino` converter is removed. - `get_spendable_transparent_outputs` (zcash_client_backend 0.24.0-rc.4) gained a `lock_filter` argument; the sync spend-detection path passes `LockFilter::Unfiltered` so locked outputs are not mistaken for spent ones. The wallet-critical librustzcash crates (orchard 0.15.3, shardtree 0.7.0, zcash_note_encryption 0.4.1, zcash_primitives 0.30.0, zcash_transparent 0.10.0, ...) resolve identically to the root workspace lockfile, preserving the three-workspace lockstep invariant. Verified: `cargo check --all-targets` clean for root, backends/zebra and backends/zaino; `cargo clippy --all-targets` and `cargo fmt --check` clean in backends/zaino; `cargo test` in backends/zaino green. Co-Authored-By: ai-ron <noreply@zodl.com>
schell
marked this pull request as ready for review
July 27, 2026 23:41
Zebra has now published the librustzcash 0.30/0.10 cohort to crates.io, so drop the temporary [patch.crates-io] git pins to ZcashFoundation/zebra#11111 and consume the released versions instead: - zebra-chain 11.2 -> 11.3 (first 0.30-cohort release) - zebra-state 12.0 -> 12.0.1 - zebra-rpc 14.0 -> 15.0 (11.2 / 12.0 / 14.0 on crates.io are still the older librustzcash 0.29/0.9 builds; 11.3 / 12.0.1 / 15.0 are the first built against 0.30/0.10.) cargo check --workspace is clean; cargo test -p zaino-state --lib is green (214 passed, 0 failed).
schell
added a commit
to zcash/zallet
that referenced
this pull request
Jul 28, 2026
Zebra has now published the librustzcash 0.30/0.10 cohort to crates.io, so drop the temporary [patch.crates-io] git pins to ZcashFoundation/zebra#11111 and consume the released versions instead: - zebra-chain 11.2 -> 11.3 - zebra-state 12.0 -> 12.0.1 - zebra-rpc 14.0 -> 15.0 (11.2 / 12.0 / 14.0 on crates.io are still the older librustzcash 0.29/0.9 builds; 11.3 / 12.0.1 / 15.0 are the first built against 0.30/0.10.) This also removes the dependency on a draft Zebra PR. The zaino pin moves to the matching zodl-inc/zaino branch commit d2d06bdd, which itself now uses the released zebra crates (zingolabs/zaino#1428). The zaino crates remain a git pin because zaino 0.5 is not yet released on crates.io. Verified: cargo check --all-targets clean; cargo clippy --all-targets -D warnings and cargo fmt --check clean; cargo test green. Wallet-critical librustzcash crates resolve identically to the root lockfile (lockstep preserved); a single zebra-state 12.0.1 is used. Co-Authored-By: ai-ron <noreply@zodl.com>
nuttycom
added a commit
to zcash/zallet
that referenced
this pull request
Jul 28, 2026
Adapts to the API changes between the pinned librustzcash rev (0531f9d8) and the released 0.24.0-rc.4 / 0.22.0-rc.4 crates, and drops the [patch.crates-io] blocks now that those releases have shipped. zcash_client_backend gained advisory output locking, which reshapes several traits that `DbConnection` forwards to `WalletDb`: - `InputSource`'s selection methods take a `LockFilter`. Zallet takes no locks, so every call site is behaviour-preserving today; the filter each passes reflects what the call site means rather than what is currently observable. The reporting RPCs (`z_listunspent`, `z_getnotescount`) pass `Unfiltered`, since a locked output is still an unspent output the wallet holds. `z_shieldcoinbase`'s eligible-UTXO enumeration passes the selector's default `Exclude`, because its result is subtracted from the proposal's selected inputs and so must mirror the candidate set the selector drew from. - `WalletWrite` gained `lock_outputs`, `unlock_output`, `clear_locked_outputs` and `prune_scan_queue_below`; `WalletRead` gained `get_wallet_recover_until`; `WalletCommitmentTrees` gained the three `get_*_subtree_root` accessors. All are forwarded to `WalletDb`, including the Ironwood accessor, whose trait default would otherwise hide the tree this connection does maintain. - `propose_transfer` and `propose_shielding_coinbase` take `lock_inputs`. Both call sites pass `None`: each builds, signs and stores its transaction within a single operation, and Zallet exposes no RPC by which a caller could release a lock stranded by an operation that failed partway through. The backend manifests carry the identical version bumps, as the lockstep invariant requires, and their `orchard` pins are advanced to 0.15.3 (0.15.4 needs a newer MSRV than the pinned 1.88) for the `Builder` APIs zcash_primitives 0.30 calls. WIP: `utils/check-lockstep.sh` still fails. Removing the shared [patch.crates-io] git rev un-collapsed Zebra's librustzcash stack from the wallet's, and no published zebra-* or zaino-* tracks the 0.30 line, so both backend graphs now carry a second, older copy (zcash_primitives 0.29, zcash_keys 0.15, zcash_proofs 0.29, zcash_transparent 0.9) reachable only through zebra-*/zaino-*. Everything reachable from `zallet-core` — the whole wallet-database path — is byte-identical across all three graphs, so the invariant the check exists to protect does hold; the check compares whole- lockfile version sets and cannot currently express that. Resolving it needs either forks of zebra and zaino on the 0.30 line, or a narrowing of the check to the wallet-reachable subgraph. That decision is left open here. backends/zaino: update to zaino 0.5 / zcash_primitives 0.30 cohort Move the zaino backend onto the zcash_primitives 0.30/0.10 dependency cohort to match the rest of the workspace, and onto zaino 0.5, replacing the previous pin to zingolabs/zaino `dev`. The zaino crates are patched to the zodl-inc/zaino branch `update/librustzcash-0.24.0-rc.4` (zingolabs/zaino#1428), which bumps zaino to the same librustzcash 0.30/0.10 versions and carries the Ironwood (NU6.3) note commitment treestate needed for spendable Ironwood notes. The zebra crates are in turn pinned (here and by that zaino branch) to ZcashFoundation/zebra#11111 head, since the librustzcash-0.30 zebra builds (chain 11.2 / state 12.0 / rpc 14.0) are not yet released on crates.io; this resolves the two-zebra-state librocksdb-sys conflict by unifying on a single copy of each zebra crate. Code changes for the zaino 0.3 -> 0.5 API redesign (zaino ADR 0003): - `ChainIndexConfig::new` is now a struct literal whose `network` is a `zebra_chain::parameters::Network`; the old payload-carrying `zaino_common::Network` is gone. Both the indexer config and the `State` validator connector now take the runtime network from the existing `network_to_zebra` helper, so the `network_to_zaino` converter is removed. - `get_spendable_transparent_outputs` (zcash_client_backend 0.24.0-rc.4) gained a `lock_filter` argument; the sync spend-detection path passes `LockFilter::Unfiltered` so locked outputs are not mistaken for spent ones. backends/zebra: update to zebra-state 0.12 / zcash_primitives 0.30 Zebra has now published the librustzcash 0.30/0.10 cohort to crates.io, so drop the temporary [patch.crates-io] git pins to ZcashFoundation/zebra#11111 and consume the released versions instead: - zebra-chain 11.2 -> 11.3 - zebra-state 12.0 -> 12.0.1 - zebra-rpc 14.0 -> 15.0
nuttycom
added a commit
to zcash/zallet
that referenced
this pull request
Jul 28, 2026
Adapts to the API changes between the pinned librustzcash rev (0531f9d8) and the released 0.24.0-rc.4 / 0.22.0-rc.4 crates, and drops the [patch.crates-io] blocks that carried that rev in all three manifests, now that those releases have shipped. zcash_client_backend gained advisory output locking, which reshapes several traits that `DbConnection` forwards to `WalletDb`: - `InputSource`'s selection methods take a `LockFilter`. Zallet takes no locks, so every call site is behaviour-preserving today; the filter each passes reflects what the call site means rather than what is currently observable. The reporting RPCs (`z_listunspent`, `z_getnotescount`) pass `Unfiltered`, since a locked output is still an unspent output the wallet holds. `z_shieldcoinbase`'s eligible-UTXO enumeration passes the selector's default `Exclude`, because its result is subtracted from the proposal's selected inputs and so must mirror the candidate set the selector drew from. - `WalletWrite` gained `lock_outputs`, `unlock_output`, `clear_locked_outputs` and `prune_scan_queue_below`; `WalletRead` gained `get_wallet_recover_until`; `WalletCommitmentTrees` gained the three `get_*_subtree_root` accessors. All are forwarded to `WalletDb`, including the Ironwood accessor, whose trait default would otherwise hide the tree this connection does maintain. - `propose_transfer` and `propose_shielding_coinbase` take `lock_inputs`. Both call sites pass `None`: each builds, signs and stores its transaction within a single operation, and Zallet exposes no RPC by which a caller could release a lock stranded by an operation that failed partway through. The backend manifests carry the identical version bumps, as the lockstep invariant requires. Their `orchard` requirement is unchanged at 0.15.0, but the locked version advances 0.15.0 -> 0.15.3 for the `Builder` APIs zcash_primitives 0.30 calls; 0.15.4 is held back because it needs a newer MSRV than the pinned 1.88. `utils/check-lockstep.sh` passes: every crate it tracks, and so the whole wallet-database path, resolves identically across all three lockfiles. Vetting the new dependency versions adds `[[trusted]]` entries to the shared supply-chain/audits.toml for the zebra-* and tower-* publishers, whose crates only the backend graphs contain. cargo-vet annotates each `user-id` with a `# Name (login)` comment that it resolves solely from the current workspace's imports.lock, which in turn holds publishers only for crates in that workspace's own graph; the root workspace therefore strips the annotations the backends write, and no single checked-in rendering satisfies all three `cargo vet --locked` runs. The audits workflow now normalises the store with `cargo vet fmt` before vetting, and keeps enforcing formatting on the per-workspace config.toml and imports.lock, which that normalisation would otherwise mask. backends/zaino: update to zaino 0.5 / zcash_primitives 0.30 cohort Move the zaino backend onto the zcash_primitives 0.30/0.10 dependency cohort to match the rest of the workspace, and onto zaino 0.5 (zaino-state 0.3.1 -> 0.5.0), replacing the previous pin to zingolabs/zaino `dev`. The zaino crates are patched to the zodl-inc/zaino branch `update/librustzcash-0.24.0-rc.4` (rev d2d06bdd, zingolabs/zaino#1428), which bumps zaino to the same librustzcash 0.30/0.10 versions and carries the Ironwood (NU6.3) note commitment treestate needed for spendable Ironwood notes; an empty frontier conflicts with the wallet's advancing tree and sync fails with `CheckpointConflict`. Repoint at upstream zaino once it (and the NU6.3 work) lands in a release. The zebra crates are consumed from crates.io at the librustzcash 0.30/0.10 versions, so this backend needs no zebra [patch] either. Code changes for the zaino 0.3 -> 0.5 API redesign (zaino ADR 0003): - `ChainIndexConfig::new` is now a struct literal whose `network` is a `zebra_chain::parameters::Network`; the old payload-carrying `zaino_common::Network` is gone. Both the indexer config and the `State` validator connector now take the runtime network from the existing `network_to_zebra` helper, so the `network_to_zaino` converter is removed. - `get_spendable_transparent_outputs` (zcash_client_backend 0.24.0-rc.4) gained a `lock_filter` argument; the sync spend-detection path passes `LockFilter::Unfiltered` so locked outputs are not mistaken for spent ones. backends/zebra: update to zebra-state 12 / zcash_primitives 0.30 Zebra has published the librustzcash 0.30/0.10 cohort to crates.io, so both backends consume the released versions directly rather than a git pin: - zebra-chain 11.1.0 -> 11.3.0 - zebra-state 10.1.0 -> 12.0.1 - zebra-rpc 11.0.0 -> 15.0.0 (11.1.0 -> 15.0.0 in the zaino graph) Co-Authored-By: Schell Carl Scivally <efsubenovex@gmail.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Bumps zaino's librustzcash dependencies to the 0.30/0.10 cohort used by zallet's
update/librustzcash-0.24.0-rc.4branch:Zebra dependency
The zebra deps are consumed from crates.io at the first librustzcash
0.30/0.10 releases, which Zebra has now published:
(11.2 / 12.0 / 14.0 on crates.io are still the older librustzcash 0.29/0.9
builds.) No
[patch.crates-io]override is required.Test-only changes (not version semantics)
Two small fixes surfaced by running the suite; both are independent of the
librustzcash version bump itself:
chain_indextests:init_tracing()made idempotent. Many tests in the samebinary install the global tracing dispatcher (only allowed once per process);
subsequent tests panicked with
SetGlobalDefaultError. The already-set erroris now ignored so every test can request tracing init.
proptest_blockgen: zebra-chain 11.3 now generates V6 transactions for NU6.3natively, so the
#[should_panic]tripwire tracking the old upstream gap isremoved — exactly as its in-source comment prescribes when a zebra upgrade
closes that gap.
Verification
cargo check --workspace— clean.cargo test -p zaino-state --lib -j1— 214 passed, 0 failed.