Skip to content

Conversation

@dmidem
Copy link
Contributor

@dmidem dmidem commented May 29, 2025

Motivation

  • Add the first public slice of Zcash Shielded Assets (ZSA) support to Zebra.
  • Enable parsing, (de)serialisation and cryptographic verification of ZSA transactions (V6) and Network Upgrade 7.

Solution

  • Replace core crypto crates with ZSA-capable forks (orchard, halo2, zcash_note_encryption, etc.).
  • Introduce Network Upgrade 7 and placeholder activation heights.
  • Add Transaction V6 plus generic Orchard bundle types that work for both Vanilla and ZSA variants of the Orchard protocol.
  • Update consensus rules to support Orchard ZSA bundles.
  • Asset issuance / burn state-tracking remains out of scope for now.

Tests

  • Property-based generators now emit both Vanilla and ZSA bundles.
  • Unit tests cover Transaction V6 serialization / deserialization and consensus checks.

Specifications & References

  • ZIP-226 (Transfer & Burn of ZSA)
  • ZIP-227 (Issuance of ZSA)
  • ZIP-230 (Transaction V6 format)

Follow-up Work

  • State service changes for asset issuance and burn.
  • Final Nu7 activation parameters.
  • Broader interop and fuzz tests.

PR Checklist

  • The PR name is suitable for the release notes.
  • The solution is tested.
  • The documentation is up to date.

dmidem added 30 commits October 29, 2024 15:22
…actor orchard_shielded_data_iter and orchard_shielded_data_field macros to use it
…te_commitments to merge Orchard ZSA issuance note commitments for V6 transactions
… and refactor orchard_shielded_data_iter and orchard_shielded_data_field macros to use it"

This reverts commit 2587b04.
…orchard_shielded_data macro from the reverted commit
…ns from librustzcash/zcash_primitives instead of reimplementing them
… to use the correct order of the asset burn field in V6 transaction as it's defined in ZIP 230
… now - the same as used in librustzcash to make it possible to run tests)
…add issuance_block test function there (now it simply deserialized issuance block from the test vector to check if deserialization functions work properly)
…dd checks of deserialization of transfer and burn blocks
…'re two keys now - VERIFYING_KEY_VANILLA and VERIFYING_KEY_ZSA
… use 77777777 as consensus branch id for Nu7 (to ajdust it with ones used in librustzcash)
@natalieesk natalieesk added this to Zebra Jul 9, 2025
@natalieesk natalieesk moved this to Won't Fix in Zebra Jul 9, 2025
@natalieesk natalieesk moved this from Won't Fix to Review/QA in Zebra Jul 9, 2025
@conradoplg conradoplg added do-not-merge Tells Mergify not to merge this PR and removed do-not-merge Tells Mergify not to merge this PR labels Jul 10, 2025
@conradoplg conradoplg added do-not-merge Tells Mergify not to merge this PR and removed do-not-merge Tells Mergify not to merge this PR labels Jul 22, 2025
dmidem and others added 3 commits August 4, 2025 10:12
…cashFoundation#9560) (#63)

* Quote variables in push-deploy.yaml to pass upstream actionlint checks

The actionlint job in the ZcashFoundation/zebra repository CI
reported multiple SC2086 errors. This commit quotes shell variables
in push-deploy.yaml to fix the linter failures.

* Avoid to use Into ValueCommitment for ShieldedDataFlavor::BurnType, and use compute_burn_value_commitment instead

* Rename generic const parameter N of EncryptedNote to SIZE

* Remove shielded_data::ActionCommon introduced during ZSA integration, and replace Transaction::orchard_actions() with Transaction::orchard_action_count()

* Remove Default trait constraint for BurnType, also remove FIXME comment there

* Address PR #63 review comments: make compute_burn_value_commitment non-generic and move comment to the top of the function
…test (#62)

* Rename orchard_..._zsa test vector files to orchard_zsa_..., same for structs and consts declardd there

* Add tests for empty tx v6 into zebra-chain

* Add V6 roundtrip tests based on ORCHARD_ZSA_WORKFLOW_BLOCKS test vectors to zebra-chain

* Address PR #62 review comments

* Improve OrchardZSA V6 round-trip and conversion tests
@oxarbitrage oxarbitrage added do-not-merge Tells Mergify not to merge this PR and removed do-not-merge Tells Mergify not to merge this PR labels Aug 7, 2025
@oxarbitrage oxarbitrage added do-not-merge Tells Mergify not to merge this PR and removed do-not-merge Tells Mergify not to merge this PR labels Oct 14, 2025
@arya2 arya2 added do-not-merge Tells Mergify not to merge this PR and removed do-not-merge Tells Mergify not to merge this PR labels Nov 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

No open projects
Status: Review/QA

7 participants