Skip to content

Commit 102c6ed

Browse files
authored
Merge pull request #1146 from daira/protocol-2025.6.3
Protocol spec version 2025.6.3
2 parents 0da3782 + a34d57f commit 102c6ed

File tree

6 files changed

+64
-49
lines changed

6 files changed

+64
-49
lines changed

.github/workflows/publish.yaml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,19 @@ jobs:
2929
uses: actions/checkout@v5.0.1
3030
with:
3131
ref: publish
32-
fetch-depth: 0
32+
fetch-depth: 100
3333
ssh-key: ${{ secrets.DEPLOY_KEY }}
3434

35+
- name: Verify nonexistence of `base_ref`
36+
shell: bash
37+
run: |
38+
if [ -e base_ref ]; then exit 1; fi
39+
40+
- name: Set base ref
41+
run: |
42+
git show --format=%H --no-notes --no-patch 'HEAD^' -- |tee base_ref
43+
if ! ( grep -E '^[0-9a-f]{40}$' base_ref ); then exit 1; fi
44+
3545
- name: Setup Pages
3646
uses: actions/configure-pages@v5
3747

@@ -48,11 +58,6 @@ jobs:
4858
# won't find it. Any existing tag of the same name will be overwritten.
4959
git tag -f "${version}-auto"
5060
51-
- name: Set base ref
52-
run: |
53-
git show --format=%H --no-notes --no-patch 'HEAD^' -- |tee base_ref
54-
if ! ( grep -E '^[0-9a-f]{40}$' base_ref ); then exit 1; fi
55-
5661
- name: Compile ZIPs and Zcash Protocol Specification
5762
uses: ./.github/actions/render-protocol
5863

.github/workflows/render.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
- name: Checkout repository
3131
uses: actions/checkout@v5.0.1
3232
with:
33-
fetch-depth: 3
33+
fetch-depth: 100
3434

3535
- name: Verify nonexistence of `rendered` and `base_ref`
3636
shell: bash

README.rst

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,24 @@ and double-check the generated ``rendered/draft-*.html`` file before filing a Pu
4343
See `here <protocol/README.rst>`__ for the project dependencies.
4444

4545

46-
NU6.1 Candidate ZIPs
47-
--------------------
46+
Settled Mainnet Network Upgrade
47+
-------------------------------
4848

49-
The following ZIPs are under consideration for inclusion in NU6.1:
49+
The most recent [settled](https://zips.z.cash/protocol/protocol.pdf#blockchain) Network Upgrade
50+
on Mainnet is NU6.1, which activated at Mainnet block height 3146400 on November 24, 2025, at
51+
19:56 UTC.
52+
53+
NU6.1 is described in `ZIP 255: Deployment of the NU6.1 Network Upgrade <zips/zip-0255.md>`__.
54+
It deployed the following ZIPs:
5055

5156
- `ZIP 1016: Community and Coinholder Funding Model <zips/zip-1016.md>`__
5257
- `ZIP 271: Deferred Dev Fund Lockbox Disbursement <zips/zip-0271.md>`__
5358

54-
This list is only provided here for easy reference; no decision has been made
55-
on whether to include each of these ZIPs.
56-
57-
`ZIP 255: Deployment of the NU6.1 Network Upgrade <zips/zip-0255.md>`__ will define which
58-
ZIPs are included in NU6.1.
59-
6059

6160
NU7 Candidate ZIPs
6261
------------------
6362

64-
The following ZIPs are under consideration for inclusion in NU7:
63+
The following ZIPs are under consideration for deployment in NU7:
6564

6665
- `ZIP 226: Transfer and Burn of Zcash Shielded Assets <zips/zip-0226.rst>`__
6766
- `ZIP 227: Issuance of Zcash Shielded Assets <zips/zip-0227.rst>`__

README.template

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,24 @@ and double-check the generated ``rendered/draft-*.html`` file before filing a Pu
4343
See `here <protocol/README.rst>`__ for the project dependencies.
4444

4545

46-
NU6.1 Candidate ZIPs
47-
--------------------
46+
Settled Mainnet Network Upgrade
47+
-------------------------------
4848

49-
The following ZIPs are under consideration for inclusion in NU6.1:
49+
The most recent [settled](https://zips.z.cash/protocol/protocol.pdf#blockchain) Network Upgrade
50+
on Mainnet is NU6.1, which activated at Mainnet block height 3146400 on November 24, 2025, at
51+
19:56 UTC.
52+
53+
NU6.1 is described in `ZIP 255: Deployment of the NU6.1 Network Upgrade <zips/zip-0255.md>`__.
54+
It deployed the following ZIPs:
5055

5156
- `ZIP 1016: Community and Coinholder Funding Model <zips/zip-1016.md>`__
5257
- `ZIP 271: Deferred Dev Fund Lockbox Disbursement <zips/zip-0271.md>`__
5358

54-
This list is only provided here for easy reference; no decision has been made
55-
on whether to include each of these ZIPs.
56-
57-
`ZIP 255: Deployment of the NU6.1 Network Upgrade <zips/zip-0255.md>`__ will define which
58-
ZIPs are included in NU6.1.
59-
6059

6160
NU7 Candidate ZIPs
6261
------------------
6362

64-
The following ZIPs are under consideration for inclusion in NU7:
63+
The following ZIPs are under consideration for deployment in NU7:
6564

6665
- `ZIP 226: Transfer and Burn of Zcash Shielded Assets <zips/zip-0226.rst>`__
6766
- `ZIP 227: Issuance of Zcash Shielded Assets <zips/zip-0227.rst>`__

protocol/Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ all: .Makefile.uptodate
3939
# Note that in Makefiles, a dollar sign must be doubled to get a literal dollar sign in *any*
4040
# context. Be very careful if refactoring this to ensure that the contents of `../base_ref`
4141
# are only expanded if they are a hash.
42-
if ( /bin/true ) || \
43-
( ! [ -e ../base_ref ] ) || \
42+
if ( ! [ -e ../base_ref ] ) || \
4443
( git diff --name-only "$$(grep -E '^[0-9a-f]{40}$$' ../base_ref).." -- |grep '^protocol/' ) || \
4544
( git status --porcelain=v1 |grep '^.[^ ] protocol/' ); then \
4645
$(MAKE) all-pdfs; fi

protocol/protocol.tex

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2708,15 +2708,14 @@
27082708
memory-hard \proofOfWork algorithm.
27092709

27102710
\vspace{1.5ex}
2711-
\newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}.}
2711+
\newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}. }
27122712
\noindent \notblossom{\sapling{\thisspecdefines{\Overwinter and \Sapling}}}%
27132713
\notheartwood{\blossom{\thisspecdefines{\Overwinter, \Sapling, and \Blossom}}}%
27142714
\notcanopy{\heartwood{\thisspecdefines{\Overwinter, \Sapling, \Blossom, and \Heartwood}}}%
27152715
\notnufive{\canopy{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, and \Canopy}}}%
27162716
\notnusix{\nufive{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive}}}%
27172717
\notnusixone{\nusix{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, and \NUSix}}}%
2718-
\nusixone{This specification defines the \Zcash consensus protocol at launch; after each of the upgrades
2719-
codenamed \Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, and \NUSix; and proposed changes for \NUSixOne.} %
2718+
\nusixone{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, \NUSix, and \NUSixOne}}%
27202719
It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.
27212720

27222721
\vspace{2ex}
@@ -2790,12 +2789,12 @@
27902789
\notbeforenusix{Changes specific to the \NUSix upgrade following \NUFive
27912790
are highlighted in \nusix{\nusixcolorname}.}
27922791

2793-
\notbeforenusixone{Changes specific to the proposed \NUSixOne upgrade following \NUSix
2792+
\notbeforenusixone{Changes specific to the \NUSixOne upgrade following \NUSix
27942793
are highlighted in \nusixone{\nusixonecolorname}.}
27952794

27962795
All of these are also changes from \Zerocash.
2797-
The name \Sprout is used for the \Zcash protocol prior to \Sapling
2798-
(both before and after \Overwinter), and in particular its \shieldedProtocol.
2796+
2797+
The name \Sprout is used for the \shieldedProtocol defined prior to the \Sapling upgrade.
27992798

28002799
\vspace{1ex}
28012800
\introlist
@@ -2890,9 +2889,11 @@
28902889

28912890
In each \shieldedTransfer, the \nullifiers of the input \notes are revealed (preventing
28922891
them from being spent again) and the commitments of the output \notes are revealed
2893-
(allowing them to be spent in future). A \transaction also includes computationally sound
2894-
\zkSNARK proofs and signatures, which prove that all of the following hold except
2895-
with insignificant probability:
2892+
(allowing them to be spent in future).
2893+
2894+
\introlist
2895+
A \transaction also includes computationally sound \zkSNARK proofs and signatures,
2896+
which prove that all of the following hold except with insignificant probability:
28962897

28972898
For each \shieldedInput,
28982899

@@ -3212,15 +3213,15 @@
32123213
\end{center}}
32133214

32143215
\sproutspecific{
3215-
\defining{The \receivingKey $\TransmitPrivate$, \incomingViewingKey
3216+
\defining{A \Sprout \receivingKey $\TransmitPrivate$, \incomingViewingKey
32163217
$\InViewingKey = (\AuthPublic, \TransmitPrivate)$, and \shieldedPaymentAddress
32173218
$\PaymentAddress = (\AuthPublic, \TransmitPublic)$ are derived from the
32183219
\spendingKey $\AuthPrivate$, as described in \crossref{sproutkeycomponents}.}
32193220
} %sproutspecific
32203221

32213222
\vspace{1ex}
32223223
\saplingonward{
3223-
\defining{An \expandedSpendingKey is composed of a \authSigningKey $\AuthSignPrivate$,
3224+
\defining{A \Sapling \expandedSpendingKey is composed of a \authSigningKey $\AuthSignPrivate$,
32243225
a \authNullifierKey $\AuthProvePrivate$, and an \outgoingViewingKey $\OutViewingKey$.
32253226
From these components we can derive a \authProvingKey $(\AuthSignPublic, \AuthProvePrivate)$,
32263227
a \fullViewingKey $(\AuthSignPublic, \NullifierKey, \OutViewingKey)$,
@@ -3676,7 +3677,7 @@
36763677
that potentially risks \Mainnet funds or displays \Mainnet \transaction information
36773678
to a user \MUST do so only for a \blockChain that includes the \activationBlock of
36783679
the most recent \settled \networkUpgrade, with the corresponding \activationBlock hash.
3679-
Currently, there is social consensus that \NUSix has activated on the \Zcash \Mainnet
3680+
Currently, there is social consensus that \NUSixOne has activated on the \Zcash \Mainnet
36803681
and \Testnet with the \activationBlock hashes given in \crossref{networks}.
36813682

36823683
A \fullValidator \MAY impose a limit on the number of \blocks it will ``roll back'' when
@@ -4025,17 +4026,19 @@
40254026

40264027
\lsubsection{Mainnet and Testnet}{networks}
40274028

4028-
The production \Zcash{} \defining{\network}, which supports the \ZEC token, is called \Mainnet. Governance of its
4029-
protocol is by agreement between the Electric Coin Company and the Zcash Foundation \cite{ECCZF2019}.
4030-
Subject to errors and omissions, each version of this document intends to describe some version
4031-
(or planned version) of that agreed protocol.
4029+
The production \Zcash{} \defining{\network}, which supports the \ZEC token, is called \Mainnet.
4030+
Governance of its protocol is by social consensus on which \fullValidator implementations are
4031+
considered to be faithful implementations of the intended \Mainnet consensus rules (currently,
4032+
\zebra maintained by the Zcash Foundation, and \zcashd maintained by the Electric Coin Company),
4033+
and on how those implementations should be modified. Subject to errors and omissions, each version
4034+
of this document intends to describe some version (or planned version) of the \Zcash protocol.
40324035

40334036
\defining{All \blockHashes given in this section are in \rpcByteOrder (that is, byte-reversed
40344037
relative to the normal order for a $\SHAFull$ hash).}
40354038

40364039
\Mainnet \genesisBlock: $\mathtt{00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08}$
40374040

4038-
\Mainnet \NUSix \activationBlock: $\mathtt{000000000032935a403a29822df72549d9a201e08cfbd5b3c770bb0d66615247}$
4041+
\Mainnet \NUSixOne \activationBlock: $\mathtt{0000000000b98a7d8f390793fa113bf6755935f0c14ea817af07d2c16f2c3ef4}$
40394042

40404043
\introlist
40414044
There is also a public test \network called \Testnet. It supports a \TAZ token which is intended to
@@ -4046,7 +4049,7 @@
40464049

40474050
\Testnet \genesisBlock: $\mathtt{05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38}$
40484051

4049-
\Testnet \NUSix \activationBlock: $\mathtt{0017d56ed80077f45eb88f11d50f4306ee1fbf95892c9a9cb7a9538e72ceabc1}$
4052+
\Testnet \NUSixOne \activationBlock: $\mathtt{01b947c7556b23040dc6840e9d3e4c6d9478c67a87b9737a83be848729d6e0af}$
40504053

40514054
We call the smallest units of currency (on either \network) \zatoshi.\footnote{\definingquotedterm{tazoshi}
40524055
may be used for the smallest units of currency on Testnet, but it is usually more convenient to use a
@@ -15285,6 +15288,16 @@
1528515288
\intropart
1528615289
\lsection{Change History}{changehistory}
1528715290

15291+
\historyentry{2025.6.3}{2025-12-02}
15292+
15293+
\begin{itemize}
15294+
\nusixone{
15295+
\item Specify in \crossref{blockchain} that \NUSixOne is the most recent \settled \networkUpgrade
15296+
on \Testnet and \Mainnet.
15297+
} %nusixone
15298+
\item Update the description in \crossref{networks} of protocol governance.
15299+
\end{itemize}
15300+
1528815301

1528915302
\historyentry{2025.6.2}{2025-11-11}
1529015303

@@ -16091,7 +16104,7 @@
1609116104
\item Add a caveat in \crossref{orchardkeycomponents} about reuse of $\CommitIvkRand$
1609216105
between $\PRFexpand{}$ and $\CommitIvk{}$.
1609316106
\item Expand the set of ZIPs associated with \NUFive in \crossref{networkupgrades}, and
16094-
reference \cite{Zcash-Orchard} and \cite{Zcash-halo2} there.
16107+
reference \cite{Zcash-halo2} and \cite{Zcash-Orchard} there.
1609516108
\item Section \crossref{concreteorchardkdf} should be in \nufivecolorname.
1609616109
\item Explicitly note that the end of the \cite{ZIP-212} grace period precedes \NUFive activation.
1609716110
\item Change the condition for presence of $\anchorField{Sapling}$ in a version 5 \transaction
@@ -16347,7 +16360,7 @@
1634716360
\item \textbf{Retrospective note:}
1634816361
Changing $\KAPublicPrimeOrder{Sapling}$ to $\KA{Sapling}\mathsf{.PublicPrimeSubgroup}$
1634916362
was a mistake and has since been reverted in specification version \historyref{2025.6.0}.
16350-
As discussed in notes added in \historyref{2023.4.0} at \crossref{decryptovk},
16363+
As discussed in notes added in version \historyref{2023.4.0} at \crossref{decryptovk},
1635116364
\librustzcash changed in \cite{librustzcash-109} to enforce that $\DiversifiedTransmitPublic$
1635216365
is not $\ZeroJ$. \zcashd also used a different implementation for a consensus check on \shielded
1635316366
coinbase outputs. The missing check on $\DiversifiedTransmitPublic$ for the latter was corrected

0 commit comments

Comments
 (0)