Skip to content

CSHLD-789: wasm-utxo v6 transparent txns support - #422

Merged
Ranjna-G merged 1 commit into
masterfrom
CSHLD-789-support-v6-transparent-txns
Oct 9, 2026
Merged

Ranjna-G merged 1 commit into
masterfrom
CSHLD-789-support-v6-transparent-txns

Conversation

@Ranjna-G

@Ranjna-G Ranjna-G commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Zcash's NU7 upgrade deactivates v4 transactions entirely, so transparent-only (t→t)
transfers must also be built, signed, and extracted in v6 wire format. This PR closes
three PCZT-presence assumptions in the v6 PSBT path that previously made a
transparent-only v6 PSBT unsignable/unextractable, all gated behind the existing
require_no_shielded_output_ever_added() helper so shielded (t→z) flows are unaffected.

Linear: CSHLD-789

Changes

  • Relax sign_ironwood_v6's ovk-derivation requirement so a transparent-only PSBT
    (no PCZT) can be signed by either key first, not just the user key
  • Fix v6_transparent_sighash to compute a bundle-less ZIP-244 digest instead of
    requiring an Ironwood PCZT to exist
  • Add extract_transparent_only_v6_tx as the PCZT-free counterpart to
    combine_ironwood_proof, exposed via extractTransparentOnlyTransaction()
  • New Rust tests (49 total in zcash_psbt.rs, 627 total in the crate) and a new
    JS/Mocha describe block in test/fixedScript/zcashIronwoodPsbt.ts (64 tests
    in that file, 1575 total repo-wide)

Test Plan

  • cargo test --lib — 627 passing, 0 failed
  • npx mocha --recursive 'test/**/*.ts' — 1575 passing, 0 failing
  • New test: build a transparent-only v6 PSBT, sign with either key first (no
    ovk-order restriction), call extractTransparentOnlyTransaction() directly
    (bypassing combineProof()), assert valid v6 bytes and correct fee accounting
  • New test: rejects extraction before the transparent input is signed
  • New test: rejects extraction for a PSBT that carries a shielded output

@linear-code

linear-code Bot commented Oct 8, 2026

Copy link
Copy Markdown

CSHLD-789

@Ranjna-G

Ranjna-G commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

@claude review

@Ranjna-G
Ranjna-G marked this pull request as ready for review October 8, 2026 09:40
@Ranjna-G
Ranjna-G requested review from a team as code owners October 8, 2026 09:40
@Ranjna-G
Ranjna-G enabled auto-merge October 8, 2026 09:40
@veetragjain

Copy link
Copy Markdown
Contributor

@claude

@veetragjain

Copy link
Copy Markdown
Contributor

Few methods of Ironwood psbt like getId and verifySignature still require a pczt to be present. These methods would throw error for a transparent to transparent transactions.

Zcash's NU7 upgrade deactivates v4 transactions entirely, so transparent-only
transfers must also build, sign, and extract in v6 wire format. Previously
only shielding (t->z) v6 flows worked; a transparent-only v6 PSBT failed
during signing and had no extraction path at all.

- Relax sign_ironwood_v6's ovk-derivation requirement so a transparent-only
  PSBT (no PCZT) can be signed by either key first, not just the user key
- Fix v6_transparent_sighash to compute a bundle-less digest instead of
  requiring an Ironwood PCZT to exist
- Add extract_transparent_only_v6_tx as the PCZT-free counterpart to
  combine_ironwood_proof, exposed via extractTransparentOnlyTransaction()
- Gate all three fixes behind the existing require_no_shielded_output_ever_added
  helper so shielded PSBTs are unaffected

Ticket: CSHLD-789
@Ranjna-G
Ranjna-G force-pushed the CSHLD-789-support-v6-transparent-txns branch from d75047f to f7d92bf Compare October 9, 2026 10:07
@Ranjna-G
Ranjna-G merged commit 885a677 into master Oct 9, 2026
14 checks passed
@Ranjna-G
Ranjna-G deleted the CSHLD-789-support-v6-transparent-txns branch October 9, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants