Add Ironwood support to zcash_client_memory - #17
Open
craftsoldier wants to merge 20 commits into
Open
Conversation
Update dependencies to current crates.io versions and remove the [patch.crates-io] overrides. Also bumps the Rust toolchain to 1.88. Co-Authored-By: Claude <noreply@anthropic.com>
The upstream Recipient enum was restructured in 0.24.0-rc.7: InternalAccount was split into InternalShielded and InternalTransparent. Co-Authored-By: Claude <noreply@anthropic.com>
…ction Replaces manual Note construction, note_value(), and hardcoded pool types with the upstream's pool-agnostic API from ReceivedShieldedOutput. Co-Authored-By: Claude <noreply@anthropic.com>
Ironwood outputs are Orchard-shaped but belong to a distinct pool; this processes them via the same to_wallet_note() API adopted in the prior commit. The Incoming branch stays todo!(). Co-Authored-By: Claude <noreply@anthropic.com>
Upstream renamed TransparentOutputFilter to CoinbaseFilter and added NonCoinbaseOnly; this adapts our InputSource impl, implementing the new variant as the complement of CoinbaseOnly. Co-Authored-By: Claude <noreply@anthropic.com>
Adapts balance construction to upstream's split regular/coinbase buckets, adds ironwood_balance handling, and stubs next_ironwood_subtree_index. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Add lock_expiry_height and lock_owner fields to ReceivedNote and ReceivedTransparentOutput. Update all constructors and serialization round-trips for the new lock state. Add optional proto fields to notes.proto and transparent.proto, regenerate src/proto/memwallet.rs, and add focused round-trip tests for locked and unlocked variants. Co-Authored-By: Claude <noreply@anthropic.com>
Add lock helpers (is_output_locked_at, output_lock_owner_at, is_output_eligible_under_lock_filter, account_for_output_ref, is_output_lockable_by) and implement the OutputLockStore trait methods by mutating the lock fields on received notes and transparent outputs. Fix the Self::Error / Self::AccountId ambiguity in the WalletWrite impl that results from OutputLockStore becoming a supertrait of WalletWrite. Co-Authored-By: Claude <noreply@anthropic.com>
Add lock_filter: LockFilter<'_> to InputSource spendable-note and transparent-output queries, and thread it through note_is_spendable and utxo_is_spendable via is_output_eligible_under_lock_filter. This ensures locked outputs are excluded from (or selectively included in) input selection per the caller's LockedInputPolicy. Co-Authored-By: Claude <noreply@anthropic.com>
Classify locked notes and transparent UTXOs as add_locked_value instead of add_spendable_value in get_wallet_summary and get_transparent_balances. Balance queries use LockFilter::Unfiltered because classification is based on raw lock state, not the caller's selection policy. Co-Authored-By: Claude <noreply@anthropic.com>
Adds Ironwood variants to PoolType and ShieldedProtocol and Ironwood fields to ChainState, MemoryWallet, and WalletBlock. Updates existing serialization glue and renames RecipientType.InternalAccount to RecipientType.InternalShielded. Co-Authored-By: Claude <noreply@anthropic.com>
Adds an Ironwood ShardTree with serialization, summary integration, and WalletCommitmentTrees methods. Also fixes put_orchard_subtree_roots to use ORCHARD_SHARD_HEIGHT and adds the missing Sapling/Orchard subtree-root accessors. Co-Authored-By: Claude <noreply@anthropic.com>
Extend MemoryWalletDb to track Ironwood nullifiers; this detects funding accounts, marks notes spent, persists per-block nullifier maps, and recognizes Ironwood bundles for scan detection. Co-Authored-By: Claude <noreply@anthropic.com>
Add the Ironwood path through block ingestion: spent-note marking, received output insertion, and block metadata. Include helper constructors for received Ironwood notes. Tree advancement is deferred to the next commit. Co-Authored-By: Claude <noreply@anthropic.com>
Wire the Ironwood ShardTree into put_blocks: collect Ironwood commitments, build subtrees, reconcile three-pool checkpoint heights, and insert the frontier and subtrees into the Ironwood tree. Also include Ironwood checkpoints in truncate_to_height reorg handling. Co-Authored-By: Claude <noreply@anthropic.com>
Implement anchor computability for the Ironwood pool and include Ironwood note metadata in InputSource::get_account_metadata. Co-Authored-By: Claude <noreply@anthropic.com>
Wire three upstream Ironwood-specific test wrappers into a new src/testing/pool/ironwood.rs module. Two are marked #[ignore] due to pre-existing bugs in store_decrypted_tx (fee overwrite on enhancement, and unimplemented TransferType::Incoming path) that affect all pools.
craftsoldier
marked this pull request as ready for review
August 21, 2026 21:58
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.
Closes #16
Summary
Adds Ironwood support to
zcash_client_memoryacross:This also updates the crate for the corresponding
zcash_client_backendAPI changes.Deliberately unchanged
MemoryWalletDbhas a pre-existing incomplete API surface and a set of ignored tests. This PR does not attempt a broad backend rehabilitation.Two newly wired Ironwood tests remain ignored because they exercise shared, pre-existing transaction-enhancement limitations:
None;store_decrypted_txdoes not yet persistIncomingshielded outputs.These limitations already exist for the older shielded pools.
Verification
cargo test --all-featurescargo clippy --all-features --all-targets -- -D warningscargo check --all-featuresgit diff --checkAI assistance disclosure: This PR description was drafted with Codex (OpenAI).