Skip to content

ZSA integration (stage 1) - Tx V6, Nu7 (rebased)#60

Closed
dmidem wants to merge 204 commits intozsa1from
zsa-integration-consensus-rebased
Closed

ZSA integration (stage 1) - Tx V6, Nu7 (rebased)#60
dmidem wants to merge 204 commits intozsa1from
zsa-integration-consensus-rebased

Conversation

@dmidem
Copy link
Copy Markdown
Collaborator

@dmidem dmidem commented Jun 19, 2025

This pull request merges the changes from several incremental PRs into one cumulative set of updates on top of the zsa1 branch. It introduces ZSA-compatible crates, Network Upgrade 7 (Nu7), initial Transaction V6 support, Orchard generics for ZSA, property-based testing enhancements, note commitment handling for ZSA issuance, and initial consensus modifications for Orchard ZSA.

It does not include the final state management changes or additional tests — those come in subsequent PRs.

Below is a high-level overview of the merged changes:

  1. ZSA-Compatible Crates Integration (Step 1)
    ZSA integration (step 1): Integrate ZSA-compatible crates into Zebra while maintaining original Orchard (Vanilla) support for now [to upstream] #24:

    • Replaces core libraries (halo2, zcash_note_encryption, etc.) with QED-it’s ZSA-compatible forks.
    • Maintains full support for Orchard “Vanilla” without activating any new ZSA features yet.
  2. Network Upgrade 7 (Nu7) Support (Step 2)
    ZSA integration (step 2): Add Network Upgrade 7 (Nu7) support to Zebra #15

    • Introduces code paths and placeholders for Nu7, the upcoming network upgrade required for ZSA.
    • Adds FIXME comments where final activation heights and other specifics must be filled in.
  3. Transaction V6 Foundations (Step 3)
    ZSA integration (step 3): Add initial Transaction V6 support to Zebra (currently copies V5 behavior) #16

    • Adds a V6 variant to Zebra’s Transaction enum, initially mirroring V5 logic.
    • Sets a baseline for future ZSA-related modifications, including placeholders for relevant fields and logic.
  4. Refactor Orchard Structures to Generics (Step 4)
    ZSA integration (step 4): Refactor Orchard structures to generics and add Orchard ZSA support for Transaction V6 #17

    • Converts key Orchard data structures (e.g., ShieldedData) to generics, enabling a single code path for both Orchard Vanilla and Orchard ZSA.
    • Implements serialization/deserialization for V6 transactions, including a burn field in the ZSA flavor.
  5. Orchard Proptests with ZSA Enhancements (Step 5)
    ZSA integration (step 5): Modify Orchard proptest implementations to support ZSA #18

    • Extends the property-based testing framework to handle ZSA-specific fields and behaviors in Transaction V6.
    • Refactors code organization (e.g., extracting Burn types) for better clarity and future expansion.
  6. Integration of ZSA Issuance Commitments (Step 6)
    ZSA integration (step 6): Integrate Orchard ZSA Issuance note commitments with Shielded Data action commitments for V6 transactions #25

    • Merges issuance action note commitments with existing shielded data commitments for V6 transactions.
    • Ensures Transaction::orchard_note_commitments includes issuance note commitments when present, preserving V5 behavior.
  7. Initial ZSA Consensus Support (Step 7)
    ZSA integration (step 7): Modify zebra-consensus to support Orchard ZSA #28

    • Modifies zebra-consensus to support Orchard ZSA.

Next Steps

  • State Management & Additional Testing: Future PRs will introduce state-layer modifications, refine consensus checks, and add more comprehensive tests.

By consolidating these first several steps into a single PR, we aim to simplify the review process .

dmidem added 30 commits June 19, 2025 16:47
…l Orchard support only, without supporting and enabling ZSA features.
This commit introduces basic support for Transaction version 6 (Tx V6). This initial implementation treats Tx V6
as a simple copy of Tx V5, without yet integrating ZSA-specific features or the new transaction structure.

- Added a new V6 variant to the Transaction enum in the zebra-chain crate.
- Updated relevant code to handle the new V6 variant.

Note: Tests and additional adjustments are still pending, and will be addressed in subsequent commits.
…(without unit tests fixing for now).

- Refactored `ShieldedData` and `Action` structures to be generics parameterized by Orchard flavor
  (`OrchardVanilla` or `OrchardZSA`), enabling support for both Orchard protocols in Tx V6.
- Introduced a `burn` field in `ShieldedData` to support ZSA, with unit type for Tx V5 and a vector of burn items for Tx V6.
- Modified `Transaction` enum methods (orchard_...) to handle generics properly, ensuring compatibility with both Orchard flavors.
- Implemented serialization and deserialization for Tx V6 while avoiding code redundancy with Tx V5 wherever possible.
… with the upstream halo2/librustcash/orchard/sapling versions
1. Introduced new type `Burn` that wraps `Vec<BurnItem>`, implemented serialization/deserialization for it - put it
   into `orchard_zsa/burn.rs`, also moved `NoBurn` there from `orchard_flavor_ext.rs` for better code structuring.
2. Renamed the `EncryptedNoteTest` trait to `TestArbitrary` in `orchard_flavor_ext.rs` and used it to constrain
   `BurnType` as well.
3. Renamed `serialize.rs` to `common.rs` in the `orchard_zsa` folder.
4. Refactored transaction generation strategies for V5 and V6 in `transaction/arbitrary.rs` and
  `orchard_zsa/arbitrary.rs` to incorporate the new burn handling and proper issuance handling.
…t_desc to convert slice to vec, as slices require implementation of the serialization from scratch
dmidem added 26 commits June 19, 2025 16:47
…saction::arbitrary_with function in zebra-chain/src/transaction/arbitrary.rs
…ew variant gated by the tx-v6 feature flag. Use ValueSum from the orchard crate as the value type to support both Amount (value balance) and NoteValue (burn). Add TODO comments for future orchard crate enhancements to simplify type conversions by reusing existing APIs.
…a-test (for vanilla - restore the original names, i.e. remove vanilla suffix, for zsa - move zsa suffix to the end)
…re no such tests for Vanilla Orchard, tests from zebra-chain/src/transaction/tests/vectors.rs used instead - so we need to add ZSA related tests there)
…by converting them into verify_v5_and_v6_transaction generic. The ame for verify_v6_transaction_network_upgrade function
… make this flag non-default in Cargo.toml files and enable it by default in .cargo/config.toml
@dmidem dmidem force-pushed the zsa-integration-consensus-rebased branch from 8a53e6a to 3fbc93b Compare June 19, 2025 14:47
@dmidem dmidem changed the title Modifiy zebra-chain structures to support multiple action groups (with ZSA state support) - rebased ZSA integration (stage 1) - Tx V6, Nu7 (rebased) Jun 19, 2025
@dmidem
Copy link
Copy Markdown
Collaborator Author

dmidem commented Jun 23, 2025

Closed as #37 has been merged.

@dmidem dmidem closed this Jun 23, 2025
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.

1 participant