ZIP: XXX
Title: Version 6 Transaction Format
Owners: Daira-Emma Hopwood <daira@jacaranda.org>
        ‹other ZODL / Valar Group authors›
Status: Draft
Category: Consensus
Created: 2026-06-13
License: MIT
Discussions-To: ‹https://github.com/zcash/zips/issues/XXXX›

Terminology

The key words “MUST”, “MUST NOT”, “SHOULD”, and “MAY” in this document are to be interpreted as described in BCP 14 1 when, and only when, they appear in all capitals.

The term “network upgrade” in this document is to be interpreted as described in ZIP 200. 2

The character § is used when referring to sections of the Zcash Protocol Specification. 3

The terms “Mainnet” and “Testnet” are to be interpreted as described in § 3.12 ‘Mainnet and Testnet’. 4

The term “Recovery Protocol” is to be interpreted as described in 5.

The terms below are to be interpreted as follows:

Orchard protocol (or Orchard shielded protocol)
The shared cryptographic design that supports the Orchard pool and the Ironwood pool, including the Pallas and Vesta curves, the Sinsemilla hash, the Action circuit (as modified by 6), the note, note commitment, nullifier, and key constructions, and the note encryption (as modified by 5) used for these two pools.
Orchard pool (or Orchard shielded pool)
The value pool, with its own note commitment tree, anchor, and chain value pool balance, that was introduced by ZIP 224 7.
Ironwood pool (or Ironwood shielded pool)
A new value pool of the Orchard protocol, introduced by this ZIP, with its own note commitment tree, anchor, and chain value pool balance, distinct from the Orchard pool.

Abstract

This ZIP defines version 6 of the Zcash transaction format, to be activated at NU6.3 8.

NU6.3 9 introduces the Ironwood shielded pool, an Orchard-protocol successor to the Orchard pool, that ensures quantum recoverability 5 and has supply integrity supported from the start by formal verification efforts 10.

This requires a new transaction version that can hold an Ironwood component: a second Orchard-protocol shielded component that commits to, and spends from, the Ironwood shielded pool, rather than the Orchard pool. The Ironwood component reuses the Orchard Action encoding and proof system unchanged. This ZIP defines the corresponding txid, signature-hash, and block-commitment changes.

The addition of the Ironwood pool does not change address structures or encodings. At the protocol level, Orchard spending-key and viewing-key material grants authority to spend or view notes in both the Orchard and Ironwood pools. However, NU6.3 enforces that outputs to the Orchard pool are sent to an Orchard-protocol-level address for which the transaction creator can authorize spends. The intent is that transfers between users will automatically create notes in the Ironwood pool. The address restriction discourages economic activity between users within the Orchard pool, and encourages faster migration to the Ironwood pool.

This ZIP specifies only the transaction format and its associated hashing. The Action circuit changes needed to restrict address usage within the Orchard pool are specified in 6, and implications for wallets are discussed in 11. Activation parameters are specified in the NU6.3 deployment ZIP 9.

Motivation

The main purpose of the NU6.3 network upgrade is to bolster confidence in Zcash’s supply integrity, after the discovery and remediation of the Orchard soundness vulnerability described in 12. The turnstile mechanism 13 ensures that the overall ZEC supply is bounded. However, since a substantial portion of ZEC was in the Orchard pool at the time this vulnerability was remediated, it is necessary to take further steps to ensure confidence in the supply by migrating funds to a new pool.

All funds in the Ironwood pool will be quantum-recoverable 5. The existing Zcash shielded protocols are dependent on the hardness of finding discrete logarithms; an adversary who can do so (via quantum computers or otherwise) would be able to steal or forge funds. In the event of needing to disable these protocols in order to prevent such attacks, it will be possible to use a Recovery Protocol to recover funds from the Ironwood pool. This Recovery Protocol is expected to remain secure against discrete-log-breaking and quantum adversaries. This change does not by itself make Zcash secure against attacks using quantum computers, but is a necessary and substantial step toward that goal.

Recovery would not be possible for funds still in the Sprout, Sapling, or Orchard pools; all such funds would be inaccessible after their respective protocols are disabled. They should be migrated to the Ironwood pool in order to take advantage of this change.

The version 6 transaction format also changes the authorization structure for all supported shielded pools (Sapling, Orchard, and Ironwood) so that anchors are considered to be authorizing data rather than effecting data. This allows a transaction to be pre-authorized and its proofs computed independently after choosing an anchor, and also improves opportunities for parallelism in transaction creation.

Privacy Implications

The turnstile mechanism reveals the amounts in each transaction that cross between pools, including the amounts migrated into the Ironwood pool. This is considered in full detail in 11.

There is no reason to believe that the soundness vulnerability described in 12 could have led to any compromise of key material associated with existing addresses. Independent of the soundness bug, we recommend address rotation for quantum privacy implications discussed in 5.

Requirements

Changes relative to v5 transactions should be minimized.

The version 6 transaction format must be able to carry an Ironwood-pool component in addition to transparent-pool, Sapling-pool, and Orchard-pool components similar to those in a version 5 transaction.

The Ironwood component must reuse the Orchard Action design and component encoding, so that implementation is shared between them to the maximum extent possible.

The transaction identifier, signature hash, and authorizing-data commitment must commit to the Ironwood-pool component when it is present, using personalizations distinct from those used for the Orchard-pool component.

The changes to the authorization structure must support pre-authorizing transactions using spending key material, and later updating the anchor and proofs (for all supported shielded pools).

Personalizations for nodes in the digest tree must be changed when what is hashed at that node changes.

The flags fields in the Orchard-pool and Ironwood-pool components must support encoding an indication of whether outputs to the Orchard pool are required to use a protocol-level address for which the transaction creator can authorize spends.

The one known Orchard-supporting hardware wallet, Keystone, must continue to be able to sign v5 tx format Orchard -> Transparent unshielding transactions, without firmware update.

Non-requirements

This ZIP does not define the Action circuit update for NU6.3 or its disableCrossAddress constraint (see 6), the activation height or consensus branch ID (see 9), or wallet behaviour associated with migration to Ironwood (see 11).

The v6 transaction format need not support ZSAs, the zip233Amount field, the explicit fee field, or per-transparent-input sighash information that appeared in the withdrawn ZIP 230 14, or those features and other extensibility affordances planned for ZIP 248 15.

The value 6 for the transaction version number need not avoid collisions with the withdrawn ZIP 230 or with the current draft of ZIP 248.

Specification

Transaction Format

A version 6 transaction is encoded as follows. Fields up to and including the Orchard component are as in the version 5 format 16, except as noted; the Ironwood component is new.

Note Bytes Name Data Type Description
Common Transaction Fields (unchanged from v5)
\(4\) header uint32 Contains the fOverwintered flag (bit 31, always set) and version (bits 30 .. 0), which MUST be 6.
\(4\) nVersionGroupId uint32 Version group ID (nonzero); the version 6 value fixed in 9.
\(4\) nConsensusBranchId uint32 Consensus branch ID; MUST be the NU6.3 branch ID 9.
\(4\) lock_time uint32 Unix-epoch UTC time or block height, encoded as in Bitcoin.
\(4\) nExpiryHeight uint32 A block height in {1 .. 499999999} after which the transaction will expire, or 0 to disable expiry. 17
Transparent Transaction Fields (unchanged from v5)
varies tx_in_count compactSize Number of transparent inputs in tx_in.
varies tx_in tx_in Transparent inputs, encoded as in Bitcoin.
varies tx_out_count compactSize Number of transparent outputs in tx_out.
varies tx_out tx_out Transparent outputs, encoded as in Bitcoin.
Sapling Transaction Fields (unchanged from v5)
varies nSpendsSapling compactSize Number of Sapling Spend descriptions in vSpendsSapling.
\(96\,\cdot\) nSpendsSapling vSpendsSapling SpendDescriptionV5[nSpendsSapling] Sapling Spend descriptions, encoded per § 7.3 ‘Spend Description Encoding and Consensus’.
varies nOutputsSapling compactSize Number of Sapling Output descriptions in vOutputsSapling.
\(756\,\cdot\) nOutputsSapling vOutputsSapling OutputDescriptionV5[nOutputsSapling] Sapling Output descriptions, encoded per § 7.4 ‘Output Description Encoding and Consensus’.
\(8\) valueBalanceSapling int64 The net value of Sapling Spends minus Outputs.
\(32\) anchorSapling byte[32] A root of the Sapling note commitment tree at some block height in the past.
\(192\,\cdot\) nSpendsSapling vSpendProofsSapling byte[192 * nSpendsSapling] Encodings of the zk-SNARK proofs for each Sapling Spend.
\(64\,\cdot\) nSpendsSapling vSpendAuthSigsSapling byte[64 * nSpendsSapling] Authorizing signatures for each Sapling Spend.
\(192\,\cdot\) nOutputsSapling vOutputProofsSapling byte[192 * nOutputsSapling] Encodings of the zk-SNARK proofs for each Sapling Output.
\(64\) bindingSigSapling byte[64] A Sapling binding signature on the SIGHASH transaction hash.
Orchard Transaction Fields
varies nActionsOrchard compactSize The number of Orchard Action descriptions in vActionsOrchard.
\(820\,\cdot\) nActionsOrchard vActionsOrchard OrchardAction[nActionsOrchard] A sequence of Orchard Action descriptions, encoded per § 7.5 ‘Action Description Encoding and Consensus’.
§ \(1\) flagsOrchard byte An 8-bit value representing a set of flags. From LSB to MSB: enableSpends, enableOutputs, enableCrossAddress (new at NU6.3); the remaining bits MUST be 0.
§ \(8\) valueBalanceOrchard int64 The net value of Orchard spends minus outputs.
§ \(32\) anchorOrchard byte[32] A root of the Orchard note commitment tree at some block height in the past.
§ varies sizeProofsOrchard compactSize Length in bytes of proofsOrchard. Value is 2720 + 2272 * nActionsOrchard.
§ sizeProofsOrchard proofsOrchard byte[sizeProofsOrchard] Encoding of aggregated zk-SNARK proofs for Orchard Actions.
\(64\,\cdot\) nActionsOrchard vSpendAuthSigsOrchard byte[64 * nActionsOrchard] Authorizing signatures for each Orchard Action.
§ \(64\) bindingSigOrchard byte[64] An Orchard binding signature on the SIGHASH transaction hash.
Ironwood Transaction Fields (new)
varies nActionsIronwood compactSize The number of Ironwood Action descriptions in vActionsIronwood.
\(820\,\cdot\) nActionsIronwood vActionsIronwood OrchardAction[nActionsIronwood] A sequence of Ironwood Action descriptions, using the same encoding as Orchard Actions (§ 7.5).
\(1\) flagsIronwood byte The same layout as flagsOrchard, including enableCrossAddress at bit 2; the remaining bits MUST be 0.
\(8\) valueBalanceIronwood int64 The net value of Ironwood spends minus outputs.
\(32\) anchorIronwood byte[32] A root of the Ironwood note commitment tree at some block height in the past.
varies sizeProofsIronwood compactSize Length in bytes of proofsIronwood. Value is 2720 + 2272 * nActionsIronwood.
sizeProofsIronwood proofsIronwood byte[sizeProofsIronwood] Encoding of aggregated zk-SNARK proofs for Ironwood Actions.
\(64\,\cdot\) nActionsIronwood vSpendAuthSigsIronwood byte[64 * nActionsIronwood] Authorizing signatures for each Ironwood Action.
\(64\) bindingSigIronwood byte[64] An Ironwood binding signature on the SIGHASH transaction hash.

Fields marked in the Note column are conditionally present:

Note Description
valueBalanceSapling and bindingSigSapling are present if and only if nSpendsSapling + nOutputsSapling > 0. If valueBalanceSapling is not present, it is taken to be 0.
anchorSapling is present if and only if nSpendsSapling > 0.
§ flagsOrchard, valueBalanceOrchard, anchorOrchard, sizeProofsOrchard, proofsOrchard, and bindingSigOrchard are present if and only if nActionsOrchard > 0. If valueBalanceOrchard is not present, it is taken to be 0.
flagsIronwood, valueBalanceIronwood, anchorIronwood, sizeProofsIronwood, proofsIronwood, and bindingSigIronwood are present if and only if nActionsIronwood > 0. If valueBalanceIronwood is not present, it is taken to be 0.

The encoding of the transparent and Sapling fields is unchanged from version 5 16. Ironwood Action descriptions use the same OrchardAction encoding as Orchard Action descriptions. Every Ironwood-pool output note uses the quantum-recoverable note plaintext format (lead byte 0x03) defined in ZIP 2005 5; no Orchard-pool output note uses that format. This is the only note-level distinction between the two pools.

Two flagsOrchard bits have been renamed relative to version 5: enableSpendsOrchardenableSpends and enableOutputsOrchardenableOutputs. In version 6 these bits —together with enableCrossAddress— are defined with the same meaning in both flagsOrchard and flagsIronwood, so the previous ...Orchard suffix would be misleading.

Consensus Rules

Version 4, version 5, and version 6 transactions are all valid from NU6.3 activation onward; this ZIP defines only the version 6 format (the version 4 and version 5 formats are unchanged). The NU6.3 consensus rules on Orchard actions apply regardless of transaction version. In particular, the Orchard-protocol cross-address restriction is enforced for every Orchard-pool Action mined from NU6.3 onward 6, so that it cannot be bypassed by using a version 5 transaction.

See 9 for additional consensus requirements that apply to all transactions from NU6.3 onward, regardless of transaction version. (Briefly and non-normatively, these are that coinbase transactions must have an empty Orchard component; that the enableCrossAddress bit of flagsOrchard must be 0; and that \(\mathsf{v}^{\textit{OrchardPoolBalance}}\) must be nonnegative.)

Transaction Identifiers, Signature Hashing, and Block Commitments

Version 6 transaction identifiers (txids), authorizing-data commitments (“auth digests”), and signature hashes are computed as in ZIP 244 18, with two changes: an Ironwood component digest is added, and for version 6 the Sapling, Orchard and Ironwood anchors move from effecting data to authorizing data. The version 5 algorithm is unchanged.

Ironwood component digest

Relative to the txid digest for v5 transactions 19, the version 6 txid digest adds an Ironwood component digest as the last child, after the Orchard component digest:

txid_digest_v6 = BLAKE2b-256("ZcashTxHash_" || consensusBranchId,
                             header_digest || transparent_digest || sapling_digest_v6 ||
                             orchard_digest_v6 || ironwood_digest_v6)

Relative to the auth digest for v5 transactions 20, the version 6 auth digest adds an Ironwood auth digest as the last child, after the Orchard one:

auth_digest_v6 = BLAKE2b-256("ZTxAuthHash_" || consensusBranchId,
                             transparent_auth_digest || sapling_auth_digest_v6 ||
                             orchard_auth_digest_v6 || ironwood_auth_digest_v6)

Anchor commitment (version 6)

In version 5, the Sapling anchor (encoded redundantly as anchor in each sapling_spends_noncompact_digest) and the Orchard anchor (anchorOrchard in orchard_digest) are part of the effecting data: they are committed to in txid_digest, while the Sapling and Orchard auth digests commit only to proofs and signatures 20.

In version 6, for Sapling, Orchard, and Ironwood components, the anchor is instead part of the authorizing data. Relative to ZIP 244, for version 6 transactions:

This lets the anchor be updated (re-anchored to a more recent note commitment tree root) without changing the transaction ID, while the proofs still bind to the specific anchor used.

ironwood_digest_v6 and ironwood_auth_digest_v6 are computed with the same structure as orchard_digest_v6 and orchard_auth_digest_v6, but with Ironwood-specific 16-byte BLAKE2b-256 personalizations at each node. Also, distinct personalizations are used for Sapling and Orchard nodes where what is directly hashed has been affected as a result of moving the anchor commitments to auth data, as follows:

Node v5 personalization v6 personalization Comment for v6
\(\hspace{22em}\) Sapling
sapling_digest[_v6] ZTxIdSaplingHash ZTxIdSaplingHash not changed directly
sapling_spends_digest ZTxIdSSpendsHash ZTxIdSSpendsHash unchanged
sapling_spends_compact_digest ZTxIdSSpendCHash ZTxIdSSpendCHash unchanged
sapling_spends_noncompact_digest[_v6] ZTxIdSSpendNHash ZTxIdSSpendNH_v6 omits anchor
sapling_auth_digest[_v6] ZTxAuthSapliHash ZTxAuthSapliH_v6 includes anchorSapling
\(\hspace{22em}\) Orchard
orchard_digest[_v6] ZTxIdOrchardHash ZTxIdOrchardH_v6 omits anchorOrchard
orchard_actions_compact_digest ZTxIdOrcActCHash ZTxIdOrcActCHash unchanged
orchard_actions_memos_digest ZTxIdOrcActMHash ZTxIdOrcActMHash unchanged
orchard_actions_noncompact_digest ZTxIdOrcActNHash ZTxIdOrcActNHash unchanged
orchard_auth_digest[_v6] ZTxAuthOrchaHash ZTxAuthOrchaH_v6 includes anchorOrchard
\(\hspace{22em}\) Ironwood
ironwood_digest_v6 n/a ZTxIdIronwd_H_v6 omits anchorIronwood
ironwood_actions_compact_digest_v6 n/a ZTxIdIrnActCH_v6
ironwood_actions_memos_digest_v6 n/a ZTxIdIrnActMH_v6
ironwood_actions_noncompact_digest_v6 n/a ZTxIdIrnActNH_v6
ironwood_auth_digest_v6 n/a ZTxAuthIrnwdH_v6 includes anchorIronwood

As in the case of Sapling and Orchard, when a version 6 transaction has no Ironwood actions, ironwood_digest_v6 and ironwood_auth_digest_v6 are the hashes of empty input under the component and auth personalizations respectively, i.e. BLAKE2b-256("ZTxIdIronwd_H_v6", []) and BLAKE2b-256("ZTxAuthIrnwdH_v6", []), which are distinct from the Orchard empty-component digests.

Summary of the resulting digest structure

Below, (*) indicates a node that is directly changed relative to v5, and (+) indicates a node that is added relative to v5.

The txid digest structure becomes:

txid_digest_v6
├── header_digest
├── transparent_digest
│   ├── prevouts_digest
│   ├── sequence_digest
│   └── outputs_digest
├── sapling_digest_v6
│   ├── sapling_spends_digest_v6
│   │   ├── sapling_spends_compact_digest
│   │   └── sapling_spends_noncompact_digest_v6 (*)
│   │       ├── cv
│   │       └── rk
│   ├── sapling_outputs_digest
│   │   ├── sapling_outputs_compact_digest
│   │   ├── sapling_outputs_memos_digest
│   │   └── sapling_outputs_noncompact_digest
│   └── valueBalance
├── orchard_digest_v6 (*)
│   ├── orchard_actions_compact_digest
│   ├── orchard_actions_memos_digest
│   ├── orchard_actions_noncompact_digest
│   ├── flagsOrchard
│   └── valueBalanceOrchard
└── ironwood_digest_v6 (+)
    ├── ironwood_actions_compact_digest_v6
    ├── ironwood_actions_memos_digest_v6
    ├── ironwood_actions_noncompact_digest_v6
    ├── flagsIronwood
    └── valueBalanceIronwood

The auth digest structure becomes:

auth_digest_v6
├── transparent_scripts_digest
├── sapling_auth_digest_v6 (*)
│   ├── vSpendProofsSapling
│   ├── vSpendAuthSigsSapling
│   ├── vOutputProofsSapling
│   ├── bindingSigSapling
│   └── anchorSapling (+)
├── orchard_auth_digest_v6 (*)
│   ├── proofsOrchard
│   ├── vSpendAuthSigsOrchard
│   ├── bindingSigOrchard
│   └── anchorOrchard (+)
└── ironwood_auth_digest_v6 (+)
    ├── proofsIronwood
    ├── vSpendAuthSigsIronwood
    ├── bindingSigIronwood
    └── anchorIronwood

Note that the nodes under each of sapling_digest_v6, orchard_digest_v6, ironwood_digest_v6, and their auth_digests are present only if the corresponding component is non-empty.

Block commitments

The hashAuthDataRoot component of hashBlockCommitments 18 incorporates the version 6 auth digest — which now includes the Ironwood auth digest, and (per the change above) the anchors — with no further structural change.

Changes to ZIP 221

The history tree that commits to chain history 21 gains Ironwood metadata, exactly as it gained Orchard metadata at NU5. The new fields are computed and aggregated identically to the corresponding ...Orchard... fields.

In the “Tree Node specification” section, after field 14 nOrchardTxCount, add:

  1. [NU6.3 onward] hashEarliestIronwoodRoot

    Leaf node Calculated as the note commitment root of the final Ironwood treestate (similar to hashEarliestOrchardRoot).

    Internal or root node Inherited from the left child.

    Serialized as char[32].

  2. [NU6.3 onward] hashLatestIronwoodRoot

    Leaf node Calculated as the note commitment root of the final Ironwood treestate (similar to hashLatestOrchardRoot).

    Internal or root node Inherited from the right child.

    Serialized as char[32].

  3. [NU6.3 onward] nIronwoodTxCount

    Leaf node The number of transactions in the leaf block where vActionsIronwood is non-empty.

    Internal or root node The sum of the nIronwoodTxCount field of both children.

    Serialized as CompactSize uint.

Replace

The fields marked “[NU5 onward]” are omitted before NU5 activation 22.

Each node, when serialized, is between 147 and 171 bytes long (between 212 and 244 bytes after NU5 activation). […]

with

The fields marked “[NU5 onward]” are omitted before NU5 activation 22. The fields marked “[NU6.3 onward]” are omitted before NU6.3 activation.

Each node, when serialized, is between 147 and 171 bytes long (between 212 and 244 bytes after NU5 activation, and between 277 and 317 bytes after NU6.3 activation). […]

The pseudocode node structure and serialize / make_leaf / make_parent functions are extended with hashEarliestIronwoodRoot, hashLatestIronwoodRoot, and nIronwoodTxCount in the same way the “# NU5 only” Orchard fields were added (present iff NU6.3 has activated; the roots inherited from the left/right child and the count summed, in internal nodes).

hashChainHistoryRoot continues to be the BLAKE2b-256 digest of the serialized root node; its value changes at NU6.3 only through the added node fields. The hashBlockCommitments header field 18 is unaffected beyond this.

Rationale

The main purpose of the NU6.3 network upgrade is to bolster confidence in Zcash’s supply integrity, after the discovery and remediation of the Orchard soundness vulnerability described in 12.

The urgency of this motivation called for an accelerated timeline, which necessitated a high bar for feature inclusion. Therefore, even fairly straightforward improvements (such as 23, which had been “queued” for inclusion in the next transaction format update), were omitted from this upgrade.

Reuse of the Orchard protocol with minimal changes

Carrying the Ironwood pool as a second Orchard-protocol component, rather than defining a new shielded protocol, keeps the transaction-format and implementation surface small: the Action encoding, proving system, authorization, and note encryption (modulo the new note plaintext format defined by 5) are inherited unchanged. The pools are distinguished by their note commitment trees, nullifier sets, value pool balances, and component position, not by separate circuits.

Separate state

Giving the Ironwood pool its own note commitment tree, anchor, and nullifier set creates a state boundary from the Orchard pool, so that their chain value pool balance can be accounted for independently.

enableCrossAddress polarity

This flag is encoded in the enabled sense (1 = cross-address transfers enabled, the normal case for Ironwood-pool actions; 0 = action outputs restricted to use the same protocol-level address as the action’s spend), with bit 2 reserved as 0 before NU6.3. This is backward-compatible: an Orchard-pool spend after NU6.3 requires the restricted state, which is bit 2 = 0 — exactly the value that signers treating bit 2 as a reserved-zero bit already produce. The in-circuit constraint and the equivalent internal disableCrossAddress instance value are discussed in 6.

Deployment

This transaction format is deployed at NU6.3. Activation heights, the version 6 version group ID, and the NU6.3 consensus branch ID are specified in 9.

Acknowledgements

We thank the developers of Penumbra 24 for demonstrating the advantages of treating the note commitment tree anchor as authorizing data rather than effecting data.

References


  1. Information on BCP 14 — “RFC 2119: Key words for use in RFCs to Indicate Requirement Levels” and “RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”  ↩︎

  2. ZIP 200: Network Upgrade Mechanism  ↩︎

  3. Zcash Protocol Specification, Version 2025.6.3 [NU6.1] or later  ↩︎

  4. Zcash Protocol Specification, Version 2025.6.3 [NU6.1]. Section 3.12: Mainnet and Testnet  ↩︎

  5. ZIP 2005: Ironwood Quantum Recoverability  ↩︎

  6. NU6.3 Updates to the Orchard-protocol Action Circuit (draft)  ↩︎

  7. ZIP 224: Orchard Shielded Protocol  ↩︎

  8. zip-0258  ↩︎

  9. Deployment of the NU6.3 Network Upgrade (draft)  ↩︎

  10. GitHub repository zcash/ironwood: Formal Verification of the Zcash Protocol and Documentation for the Ironwood Pool  ↩︎

  11. Wallet Considerations for NU6.3 and Migration to the Ironwood Pool (draft)  ↩︎

  12. ZIP 257: Deployment of the Orchard Temporary Vulnerability Mitigation and NU6.2 Network Upgrade  ↩︎

  13. ZIP 209: Prohibit Negative Shielded Chain Value Pool Balances  ↩︎

  14. ZIP 230: Withdrawn Version 6 Transaction Format  ↩︎

  15. ZIP 248: Extensible Transaction Format (unmerged; PR at https://github.com/zcash/zips/pull/1156)  ↩︎

  16. ZIP 225: Version 5 Transaction Format  ↩︎

  17. ZIP 203: Transaction Expiry  ↩︎

  18. ZIP 244: Transaction Identifier Non-Malleability  ↩︎

  19. ZIP 244: Transaction Identifier Non-Malleability — TxId Digest  ↩︎

  20. ZIP 244: Transaction Identifier Non-Malleability — Authorizing Data Commitment  ↩︎

  21. ZIP 221: FlyClient - Consensus-Layer Changes  ↩︎

  22. ZIP 252: Deployment of the NU5 Network Upgrade  ↩︎

  23. ZIP 2002: Explicit Fees  ↩︎

  24. The Penumbra Protocol  ↩︎