Add a section \crossref{txnidentifiers} on how to compute transaction IDs and \wtxids.

Split the transaction-related consensus rules into their own subsection \crossref{txnconsensus},
for more precise cross-referencing.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2021-06-29 18:02:00 +01:00
parent 4c118b813e
commit b3aad58459
1 changed files with 34 additions and 16 deletions

View File

@ -5381,7 +5381,7 @@ where
\vspace{-1.5ex} \vspace{-1.5ex}
\pnote{The $\rt{Orchard}$, $\enableSpends$, and $\enableOutputs$ components are the same for all \pnote{The $\rt{Orchard}$, $\enableSpends$, and $\enableOutputs$ components are the same for all
\actionTransfers in a \transaction. They are encoded once in the \transaction body (see \actionTransfers in a \transaction. They are encoded once in the \transaction body (see
\crossref{txnencodingandconsensus}), not in the $\type{ActionDescription}$ structure. \crossref{txnencoding}), not in the $\type{ActionDescription}$ structure.
$\Proof{}$ is aggregated with other Action proofs and encoded in the $\proofsOrchard$ field of a $\Proof{}$ is aggregated with other Action proofs and encoded in the $\proofsOrchard$ field of a
\transaction.} \transaction.}
@ -5989,7 +5989,7 @@ non-\Zcash-specific parts of the \transaction.
In \Zcash, all \sighashTypes are extended to cover the \Zcash-specific In \Zcash, all \sighashTypes are extended to cover the \Zcash-specific
fields $\nJoinSplit$, $\vJoinSplit$, and if present $\joinSplitPubKey$. These fields fields $\nJoinSplit$, $\vJoinSplit$, and if present $\joinSplitPubKey$. These fields
are described in \crossref{txnencodingandconsensus}. The hash \emph{does not} cover the field $\joinSplitSig$. are described in \crossref{txnencoding}. The hash \emph{does not} cover the field $\joinSplitSig$.
\overwinter{After \Overwinter activation, all \sighashTypes are also extended to cover \transaction fields \overwinter{After \Overwinter activation, all \sighashTypes are also extended to cover \transaction fields
introduced in that upgrade\sapling{, and similarly after \Sapling activation}\nufive{ and introduced in that upgrade\sapling{, and similarly after \Sapling activation}\nufive{ and
after \NUFive activation}. after \NUFive activation}.
@ -6126,7 +6126,7 @@ For a v4 \transaction, $\vBalance{Sapling}$ is always explicitly encoded.
For a v5 \transaction, $\vBalance{Sapling}$ is implicitly zero if the \transaction has For a v5 \transaction, $\vBalance{Sapling}$ is implicitly zero if the \transaction has
no \spendDescriptions or \outputDescriptions. no \spendDescriptions or \outputDescriptions.
} %nufive } %nufive
Transaction fields are described in \crossref{txnencodingandconsensus}. Transaction fields are described in \crossref{txnencoding}.
A positive $\saplingBalancingValue$ takes value from the \defining{\SaplingTxValuePool} A positive $\saplingBalancingValue$ takes value from the \defining{\SaplingTxValuePool}
and adds it to the \transparentTxValuePool. A negative $\saplingBalancingValue$ does the and adds it to the \transparentTxValuePool. A negative $\saplingBalancingValue$ does the
@ -12184,7 +12184,7 @@ upgrade-supporting nodes \MUST allow for this.
\lsection{Consensus Changes from \BitcoinText}{consensusfrombitcoin} \lsection{Consensus Changes from \BitcoinText}{consensusfrombitcoin}
\vspace{-1ex} \vspace{-1ex}
\extralabel{txnencoding}{\lsubsection{Transaction Encoding and Consensus}{txnencodingandconsensus}} \extralabel{txnencodingandconsensus}{\lsubsection{Transaction Encoding and Consensus}{txnencoding}}
The \Zcash{} \defining{\transaction} format up to and including \transactionVersion $4$ is as follows The \Zcash{} \defining{\transaction} format up to and including \transactionVersion $4$ is as follows
(this should be read in the context of consensus rules later in the section): (this should be read in the context of consensus rules later in the section):
@ -12412,6 +12412,19 @@ is defined to be $0$.
\raggedright\!\!\Transactionversion 5 does not support \joinSplitTransfers. \raggedright\!\!\Transactionversion 5 does not support \joinSplitTransfers.
Several fields are reordered and/or renamed relative to prior versions.}} %scalebox %nufive Several fields are reordered and/or renamed relative to prior versions.}} %scalebox %nufive
\lsubsubsection{Transaction Identifiers}{txnidentifiers}
The \transactionID of a \sapling{version 4} or earlier \transaction is the \shadHash hash
of the \transaction encoding in the \notbeforenufive{pre-v5} format described above.
\nufive{
The \transactionID of a version 5 \transaction is as defined in \cite{ZIP-244}. A v5
\transaction also has a \wtxid (used for example in the peer-to-peer protocol) as defined
in \cite{ZIP-239}.
} %nufive
\lsubsubsection{Transaction Consensus Rules}{txnconsensus}
\begin{consensusrules} \begin{consensusrules}
\item The \defining{\transactionVersionNumber} \MUST be greater than or equal to $1$. \item The \defining{\transactionVersionNumber} \MUST be greater than or equal to $1$.
\preoverwinteritem{The \fOverwintered{} flag \MUSTNOT be set.} \preoverwinteritem{The \fOverwintered{} flag \MUSTNOT be set.}
@ -12517,6 +12530,8 @@ Several fields are reordered and/or renamed relative to prior versions.}} %scale
\item \todo{Other rules inherited from \Bitcoin.} \item \todo{Other rules inherited from \Bitcoin.}
\end{consensusrules} \end{consensusrules}
The types specified in \crossref{txnencoding} are part of the consensus rules.
Consensus rules associated with each \joinSplitDescription\, (\crossref{joinsplitencodingandconsensus})\sapling{,\, Consensus rules associated with each \joinSplitDescription\, (\crossref{joinsplitencodingandconsensus})\sapling{,\,
each \spendDescription\, (\crossref{spendencodingandconsensus}),\,\notnufive{ and} each \outputDescription\, each \spendDescription\, (\crossref{spendencodingandconsensus}),\,\notnufive{ and} each \outputDescription\,
(\crossref{outputencodingandconsensus})}\nufive{,\, and each \actionDescription\, (\crossref{actionencodingandconsensus})} (\crossref{outputencodingandconsensus})}\nufive{,\, and each \actionDescription\, (\crossref{actionencodingandconsensus})}
@ -12739,9 +12754,9 @@ A signature authorizing this Spend. \\ \hline
\vspace{-1.5ex} \vspace{-1.5ex}
\nufive{$\dagger$ The $\anchorField{}$, $\zkproof$, and $\spendAuthSigField$ fields are only present in a \nufive{$\dagger$ The $\anchorField{}$, $\zkproof$, and $\spendAuthSigField$ fields are only present in a
\spendDescription if the \transactionVersion is $4$. For v5 \transactions, all \spendDescriptions share \spendDescription if the \transactionVersion is $4$. For v5 \transactions, all \spendDescriptions share
the same \anchor, which is encoded once as the $\anchorField{Sapling}$ field of the \transaction as described in the same \anchor, which is encoded once as the $\anchorField{Sapling}$ field of the \transaction as
\crossref{txnencodingandconsensus}. The $\zkproof$ and $\spendAuthSigField$ fields have been described in \crossref{txnencoding}. The $\zkproof$ and $\spendAuthSigField$ fields have been moved into
moved into $\vSpendProofsSapling$ and $\vSpendAuthSigs{Sapling}$ respectively for v5.} $\vSpendProofsSapling$ and $\vSpendAuthSigs{Sapling}$ respectively for v5.}
\vspace{-2ex} \vspace{-2ex}
\consensusrule{$\LEOStoIPOf{256}{\anchorField{Sapling}}$\nufive{, if present,} \MUST be less than $\ParamJ{q}$.} \consensusrule{$\LEOStoIPOf{256}{\anchorField{Sapling}}$\nufive{, if present,} \MUST be less than $\ParamJ{q}$.}
@ -13618,8 +13633,8 @@ recipient address represented by $\fsAddressList_{\fsAddressIndex(\BlockHeight)}
standard redeem script hash is specified in \cite{Bitcoin-Multisig} for standard redeem script hash is specified in \cite{Bitcoin-Multisig} for
P2SH multisig addresses, or \cite{Bitcoin-P2SH} for other P2SH addresses. P2SH multisig addresses, or \cite{Bitcoin-P2SH} for other P2SH addresses.
\item The ``prescribed way" to pay a \Sapling address is as defined in \cite{ZIP-213}, \item The ``prescribed way" to pay a \Sapling address is as defined in \cite{ZIP-213},
using the post-\Heartwood consensus rules specified using the post-\Heartwood consensus rules specified for \Sapling outputs of
for \Sapling outputs of \coinbaseTransactions in \crossref{txnencodingandconsensus}. \coinbaseTransactions in \crossref{txnconsensus}.
\end{itemize} \end{itemize}
} %canopyonward } %canopyonward
} %consensusrule } %consensusrule
@ -13710,8 +13725,8 @@ be ignored:
\cite{BIP-66}. \cite{BIP-66}.
The effect of \cite{BIP-34} has been incorporated into the consensus rules The effect of \cite{BIP-34} has been incorporated into the consensus rules
(\crossref{txnencodingandconsensus}). This excludes the \Mainnet and \Testnet{} (\crossref{txnconsensus}). This excludes the \Mainnet and \Testnet{} \genesisBlocks,
\genesisBlocks, for which the ``height in coinbase'' was inadvertently omitted. for which the ``height in coinbase'' was inadvertently omitted.
\cite{BIP-13} applies with the changes to address version bytes described \cite{BIP-13} applies with the changes to address version bytes described
in \crossref{transparentaddrencoding}. in \crossref{transparentaddrencoding}.
@ -14414,10 +14429,13 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\historyentry{2021.2.8}{} \historyentry{2021.2.8}{}
\begin{itemize} \begin{itemize}
\nufive{ \nufive{
\item Change one of the \sapling{[\Sapling onward]} consensus rules in \crossref{txnencodingandconsensus} \item Change one of the \sapling{[\Sapling onward]} consensus rules in \crossref{txnconsensus}
to have the correct applicability: \sapling{[\Sapling to \Canopy inclusive, \nufive{pre-\NUFive}]}. to have the correct applicability: \sapling{[\Sapling to \Canopy inclusive, \nufive{pre-\NUFive}]}.
} % nufive } % nufive
\item Describe \transactionIDs\nufive{ and \wtxids} in \crossref{transactions}. \item Describe \transactionIDs\nufive{ and \wtxids} in \crossref{transactions}.
\item Add a section \crossref{txnidentifiers} on how to compute \transactionIDs\nufive{ and \wtxids}.
\item Split the \transaction-related consensus rules into their own subsection
\crossref{txnconsensus}, for more precise cross-referencing.
\end{itemize} \end{itemize}
@ -14439,7 +14457,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\nufive{ \nufive{
\item Require that from \NUFive activation, the \nExpiryHeight field of a \coinbaseTransaction \item Require that from \NUFive activation, the \nExpiryHeight field of a \coinbaseTransaction
is set to the \blockHeight. This is needed to maintain the property that all \transactions is set to the \blockHeight. This is needed to maintain the property that all \transactions
have unique \transactionIDs, as explained in a note in \crossref{txnencodingandconsensus}. have unique \transactionIDs, as explained in a note in \crossref{txnconsensus}.
In order to avoid the \blockHeight being limited to $499999999$, we also remove that bound In order to avoid the \blockHeight being limited to $499999999$, we also remove that bound
on \nExpiryHeight{} for \coinbaseTransactions. on \nExpiryHeight{} for \coinbaseTransactions.
\item Remove the recommendation to support $63$-bit \blockHeights in \crossref{blockchain} \item Remove the recommendation to support $63$-bit \blockHeights in \crossref{blockchain}
@ -14474,7 +14492,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\historyentry{2021.2.4}{2021-06-08} \historyentry{2021.2.4}{2021-06-08}
\begin{itemize} \begin{itemize}
\nufive{ \nufive{
\item Add an explicit consensus rule in \crossref{txnencodingandconsensus} that the \item Add an explicit consensus rule in \crossref{txnconsensus} that the
reserved bits of the \flagsOrchard{} field \MUST be zero. reserved bits of the \flagsOrchard{} field \MUST be zero.
\item Correct a cut-and-paste error in the algorithm for \crossref{orcharddummynotes}, \item Correct a cut-and-paste error in the algorithm for \crossref{orcharddummynotes},
which should refer to the \actionStatement rather than the \spendStatement. which should refer to the \actionStatement rather than the \spendStatement.
@ -14526,7 +14544,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\historyentry{2021.2.1}{2021-05-20} \historyentry{2021.2.1}{2021-05-20}
\begin{itemize} \begin{itemize}
\nufive{ \nufive{
\item Correct the size of \vActionsOrchard{} in \crossref{txnencodingandconsensus}. \item Correct the size of \vActionsOrchard{} in \crossref{txnencoding}.
\item Change the type of \Orchard Merkle \merkleHashes to $\MerkleHashOrchard$, with \item Change the type of \Orchard Merkle \merkleHashes to $\MerkleHashOrchard$, with
a corresponding change to the signature of $\MerkleCRH{Orchard}$. Add a note to a corresponding change to the signature of $\MerkleCRH{Orchard}$. Add a note to
\crossref{merklepath} clarifying that \nonCanonicalFieldElement encodings are \crossref{merklepath} clarifying that \nonCanonicalFieldElement encodings are
@ -14822,7 +14840,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\item Add macros and \Makefile support for building the \NUFive draft specification. \item Add macros and \Makefile support for building the \NUFive draft specification.
\item Clarify the encoding of \blockHeights for the ``height in coinbase'' rule. \item Clarify the encoding of \blockHeights for the ``height in coinbase'' rule.
The description of this rule has also moved from \shortcrossref{blockheader} to The description of this rule has also moved from \shortcrossref{blockheader} to
\crossref{txnencodingandconsensus}. \crossref{txnconsensus}.
\item Include the activation dates of \Heartwood and \Canopy in \crossref{networkupgrades}. \item Include the activation dates of \Heartwood and \Canopy in \crossref{networkupgrades}.
\item Section links in the \Heartwood and \Canopy versions of the specification now go to \item Section links in the \Heartwood and \Canopy versions of the specification now go to
the correct document URL. the correct document URL.