diff --git a/protocol/protocol.tex b/protocol/protocol.tex index 2bfdd7bc..6608a3c1 100644 --- a/protocol/protocol.tex +++ b/protocol/protocol.tex @@ -8987,16 +8987,16 @@ upgrade-supporting nodes \MUST allow for this. \lsection{Consensus Changes from \BitcoinText}{consensusfrombitcoin} \vspace{-1ex} -\lsubsection{Encoding of Transactions}{txnencoding} +\extralabel{txnencoding}{\lsubsection{Transaction Encoding and Consensus}{txnencodingandconsensus}} The \Zcash{} \defining{\transaction} format is as follows (this should be read in the context of consensus rules later in the section): \begin{center} -\scalebox{\sprout{0.92}\notsprout{0.88}}{ +\scalebox{\sprout{0.87}\notsprout{0.84}}{ \notsprout{\renewcommand{\arraystretch}{1.3}} \hbadness=10000 -\begin{tabularx}{\sprout{1}\notsprout{1.08}\textwidth}{|c|c|l|p{10em}|L|} +\begin{tabularx}{\sprout{1.07}\notsprout{1.13}\textwidth}{|c|c|l|p{10em}|L|} \hline \!\!Version\!\! & \heading{Bytes} & \heading{Name} & \heading{Data Type} & \heading{Description} \\ \hhline{|=|=|=|=|=|} @@ -9031,13 +9031,13 @@ $\geq 4$ & \Varies & $\nShieldedSpend$ & \compactSize & The number of \spendDesc in $\vShieldedSpend$. \\ \hline $\geq 4$ & \Longunderstack{$384 \mult$ \\$\!\nShieldedSpend\!$} & $\vShieldedSpend$ & \type{SpendDescription} \type{[$\nShieldedSpend$]} & -A sequence of \spendDescriptions{}, each encoded as in \crossref{spendencoding}. \\ \hline +A sequence of \spendDescriptions{}, encoded as in \crossref{spendencoding}. \\ \hline $\geq 4$ & \Varies & $\nShieldedOutput\!$ & \compactSize & The number of \outputDescriptions in $\vShieldedOutput$. \\ \hline $\geq 4$ & \Longunderstack{$948 \mult$ \\$\!\nShieldedOutput\!$} & $\vShieldedOutput\!$ & \type{OutputDescription} \type{[$\nShieldedOutput$]} & -A sequence of \outputDescriptions{}, each encoded as in \crossref{outputencoding}. \\ \hline +A sequence of \outputDescriptions{}, encoded as in \crossref{outputencoding}. \\ \hline } %notsprout $\geq 2$ & \Varies & $\nJoinSplit$ & \compactSize & The number of \joinSplitDescriptions @@ -9045,14 +9045,14 @@ in $\vJoinSplit$. \\ \hline \sprout{ $\geq 2$ & \Longunderstack{$1802 \mult$ \\ $\nJoinSplit$} & $\vJoinSplit$ & \type{JoinSplitDescription}\!\! \type{[$\nJoinSplit$]} & -A \sequenceOfJoinSplitDescriptions{} using \BCTV proofs, each encoded as in \crossref{joinsplitencoding}. \\ \hline +A \sequenceOfJoinSplitDescriptions{} using \BCTV proofs, encoded as in \crossref{joinsplitencoding}. \\ \hline } %sprout \notsprout{ $\barerange{2}{3}$ & \Longunderstack{$1802 \mult$ \\ $\nJoinSplit$} & $\vJoinSplit$ & \type{JSDescriptionBCTV14}\!\! \type{[$\nJoinSplit$]} & -A \sequenceOfJoinSplitDescriptions{} using \BCTV proofs, each encoded as in \crossref{joinsplitencoding}. \\ \hline +A \sequenceOfJoinSplitDescriptions{} using \BCTV proofs, encoded as in \crossref{joinsplitencoding}. \\ \hline \setsapling $\geq 4$ &\setsapling \Longunderstack{$1698 \mult$ \\ $\nJoinSplit$} &\setsapling $\vJoinSplit$ &\textcolor{\saplingcolor}{\type{JSDescriptionGroth16}\!\! \type{[$\nJoinSplit$]}} & -\setsapling A sequence of \joinSplitDescriptions using \Groth proofs, each encoded as in \crossref{joinsplitencoding}. \\ \hline +\setsapling A sequence of \joinSplitDescriptions using \Groth proofs, encoded as in \crossref{joinsplitencoding}. \\ \hline } %notsprout $\geq 2\;\dagger$ & $32$ & $\joinSplitPubKey\!$ & \type{char[32]} & An encoding of a $\JoinSplitSig$ @@ -9138,9 +9138,9 @@ $\versionField \geq 4$ and $\nShieldedSpend + \nShieldedOutput > 0$. \item \todo{Other rules inherited from \Bitcoin.} \end{consensusrules} -In addition, consensus rules associated with each \joinSplitDescription (\crossref{joinsplitencoding})\sapling{, +Consensus rules associated with each \joinSplitDescription (\crossref{joinsplitencoding})\sapling{, each \spendDescription (\crossref{spendencoding}), and each \outputDescription (\crossref{outputencoding})} -\MUST be followed. +\MUST also be followed. \begin{pnotes} \item Previous versions of this specification defined what is now the \headerField{} field @@ -9221,7 +9221,7 @@ Software that creates \transactions{} \SHOULD use version $1$ for \transactions } \introsection -\lsubsection{Encoding of JoinSplit Descriptions}{joinsplitencoding} +\extralabel{joinsplitencoding}{\lsubsection{JoinSplit Description Encoding and Consensus}{joinsplitencodingandconsensus}} An abstract \joinSplitDescription, as described in \crossref{joinsplit}, is encoded in a \transaction as an instance of a \type{JoinSplitDescription} type as follows: @@ -9289,7 +9289,7 @@ Consensus rules applying to a \joinSplitDescription are given in \crossref{joins \sapling{ \introsection -\lsubsection{Encoding of Spend Descriptions}{spendencoding} +\extralabel{spendencoding}{\lsubsection{Spend Description Encoding and Consensus}{spendencodingandconsensus}} Let $\LEBStoOSP{}{}$ be as defined in \crossref{endian}. @@ -9335,7 +9335,7 @@ $64$ & $\spendAuthSig$ & \type{char[64]} & A signature authorizing this Spend. \ Other consensus rules applying to a \spendDescription are given in \crossref{spenddesc}. \introsection -\lsubsection{Encoding of Output Descriptions}{outputencoding} +\extralabel{outputencoding}{\lsubsection{Output Description Encoding and Consensus}{outputencodingandconsensus}} Let $\LEBStoOSP{}{}$ be as defined in \crossref{endian}. @@ -9388,7 +9388,7 @@ Other consensus rules applying to an \outputDescription are given in \crossref{o \introsection -\lsubsection{Block Header}{blockheader} +\lsubsection{Block Header Encoding and Consensus}{blockheader} The \Zcash{} \defining{\blockHeader} format is as follows (this should be read in the context of consensus rules later in the section): @@ -10083,8 +10083,8 @@ recipient address represented by $\fsAddressList_{\fsAddressIndex(\BlockHeight)} $\fsAddressList_{\,\fsAddressIndex(\BlockHeight)}$ in Base58Check form. The standard redeem script hash is specified in \cite{Bitcoin-Multisig} for 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}; - that is, following the post-\Heartwood consensus rules specified + \item The ``prescribed way" to pay a \Sapling address is as defined in \cite{ZIP-213}, + using the post-\Heartwood consensus rules specified for \Sapling outputs of \coinbaseTransactions in \crossref{txnencoding}. \end{itemize} } %canopyonward @@ -10844,6 +10844,8 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}. \item Updates to reflect \cite{ZIP-211}: add a consensus rule on $\vpubOld$ in \crossref{joinsplitdesc}, and a rule about node and wallet support for sending to \Sprout addresses in \crossref{sproutsend}. } %canopy + \item Rename sections under \crossref{consensusfrombitcoin} to clarify that these sections do not only + concern encoding, but also consensus rules. \end{itemize}