diff --git a/protocol/protocol.tex b/protocol/protocol.tex index 113151e86..0fbb1bcfc 100644 --- a/protocol/protocol.tex +++ b/protocol/protocol.tex @@ -333,18 +333,18 @@ \newcommand{\PaymentAddressSecondByte}{\hexint{9A}} \newcommand{\SpendingKeyLeadByte}{\hexint{AB}} \newcommand{\SpendingKeySecondByte}{\hexint{36}} -\newcommand{\PtoSHAddressLeadByte}{\hexint{1B}} -\newcommand{\PtoSHAddressSecondByte}{\hexint{9C}} -\newcommand{\PtoPKHAddressLeadByte}{\hexint{1B}} -\newcommand{\PtoPKHAddressSecondByte}{\hexint{97}} -\newcommand{\PaymentAddressTestnetLeadByte}{\hexint{14}} -\newcommand{\PaymentAddressTestnetSecondByte}{\hexint{51}} -\newcommand{\SpendingKeyTestnetLeadByte}{\hexint{B1}} -\newcommand{\SpendingKeyTestnetSecondByte}{\hexint{EB}} -\newcommand{\PtoSHAddressTestnetLeadByte}{\hexint{1B}} -\newcommand{\PtoSHAddressTestnetSecondByte}{\hexint{9A}} -\newcommand{\PtoPKHAddressTestnetLeadByte}{\hexint{1C}} -\newcommand{\PtoPKHAddressTestnetSecondByte}{\hexint{05}} +\newcommand{\PtoSHAddressLeadByte}{\hexint{1C}} +\newcommand{\PtoSHAddressSecondByte}{\hexint{BD}} +\newcommand{\PtoPKHAddressLeadByte}{\hexint{1C}} +\newcommand{\PtoPKHAddressSecondByte}{\hexint{B8}} +\newcommand{\PaymentAddressTestnetLeadByte}{\hexint{16}} +\newcommand{\PaymentAddressTestnetSecondByte}{\hexint{B6}} +\newcommand{\SpendingKeyTestnetLeadByte}{\hexint{AC}} +\newcommand{\SpendingKeyTestnetSecondByte}{\hexint{08}} +\newcommand{\PtoSHAddressTestnetLeadByte}{\hexint{1C}} +\newcommand{\PtoSHAddressTestnetSecondByte}{\hexint{BA}} +\newcommand{\PtoPKHAddressTestnetLeadByte}{\hexint{1D}} +\newcommand{\PtoPKHAddressTestnetSecondByte}{\hexint{25}} \newcommand{\NotePlaintextLeadByte}{\hexint{00}} \newcommand{\AuthPublic}{\mathsf{a_{pk}}} \newcommand{\AuthPrivate}{\mathsf{a_{sk}}} @@ -2443,11 +2443,11 @@ \begin{pnotes} \item In \Bitcoin a single byte is used for the version field identifying the address type. In \Zcash two bytes are used. For addresses on - the production network, this fixes the first two characters of the - Base58Check encoding to be \ascii{r3} for P2SH addresses, or - \ascii{r1} for P2PKH addresses. (This does \emph{not} imply that a - \transparent \Zcash address can be parsed in the same way as a - \Bitcoin address just by removing the \ascii{r}.) + the production network, this and the encoded length cause the first + two characters of the Base58Check encoding to be fixed as \ascii{t3} + for P2SH addresses, and as \ascii{t1} for P2PKH addresses. (This does + \emph{not} imply that a \transparent \Zcash address can be parsed + identically to a \Bitcoin address just by removing the \ascii{t}.) \item \Zcash does not yet support Hierarchical Deterministic Wallet addresses \cite{BIP-32}. \end{pnotes} @@ -2489,6 +2489,13 @@ normal encoding of a Curve25519 public key \cite{Bern2006}}. \end{itemize} +\pnote{ +For addresses on the production network, the lead bytes and encoded length +cause the first two characters of the Base58Check encoding to be fixed as +\ascii{zc}. For the test network, the first two characters are fixed as +\ascii{zt}. +} + \nsubsubsection{Spending Keys} \label{spendingkeyencoding} A \spendingKey consists of $\AuthPrivate$, which is a sequence of \changed{252} bits. @@ -2519,15 +2526,21 @@ \changed{ The zero padding occupies the most significant 4 bits of the third byte. - -\pnote{ -If an implementation represents $\AuthPrivate$ -internally as a sequence of 32 bytes with the 4 bits of zero padding -intact, it will be in the correct form for use as an input to -$\PRFaddr{}$, $\PRFnf{}$, and $\PRFpk{}$ without need for bit-shifting. -Future key representations may make use of these padding bits. } + +\begin{pnotes} +\changed{ + \item If an implementation represents $\AuthPrivate$ internally as a + sequence of 32 bytes with the 4 bits of zero padding intact, + it will be in the correct form for use as an input to $\PRFaddr{}$, + $\PRFnf{}$, and $\PRFpk{}$ without need for bit-shifting. + Future key representations may make use of these padding bits. } + \item For addresses on the production network, the lead bytes and encoded + length cause the first two characters of the Base58Check encoding to + be fixed as \ascii{SK}. For the test network, the first two characters + are fixed as \ascii{ST}. +\end{pnotes} \nsubsection{\ZeroKnowledgeProvingSystem} \label{proofs} @@ -3090,30 +3103,30 @@ For testnet, $\FounderAddressList_{\mathrm{1}..\NumFounderAddresses}$ is: \begin{tabular}{@{\hskip 2.5em}l@{\;}l} -[& \ascii{2N2e2FRfP9D1dRN1oRWkH7pbFM69eGNAuQ4}, \ascii{2NBW8WsA2jUussoJbRv82UXH1BYopkjYqcd}, \\ - & \ascii{2N1MudZmwDFTcYiLCZfrcsnhHwaSTTigbcN}, \ascii{2MxfUJXWKz9D8X3mcMpVcdEJKdJ6zFukca9}, \\ - & \ascii{2N8iUwMCpU16VYpKQ1HRM6xfut5FZwGwieM}, \ascii{2N9hyafTvJVrykBvZDw79j1brozwZNySwPP}, \\ - & \ascii{2NFx7tRozsp3kT1M4w4tL9FfnEj8RovzbzN}, \ascii{2NAqoH96V1RtmK72LEZpJNX1uxhJ5yejRiK}, \\ - & \ascii{2MyV7hoV28KS8Uam2Z8nzY3xeo7R3T3TLUr}, \ascii{2N8Tn19hMoCD4EmCwpg1V8qupVkQLVVPhav}, \\ - & \ascii{2NA5UeJU9zAQkSMyy3xpDcjfp4CEyKfzXKp}, \ascii{2NBERNyXy46CfM9yewGeof4yzC3vkwYnhgS}, \\ - & \ascii{2N7fnpAswHb4mnPm2ZjWX3eKkF8hABAYBtQ}, \ascii{2N9MXGsz7uYaY5ciax6tSMDG7sjZUoLhJTC}, \\ - & \ascii{2N5PwzPQFFmLut2XWGQWAmpwKsF8VzUoPtr}, \ascii{2MvZdDpNP8hWyEqg6zKW9B62YTJqcUwjHr5}, \\ - & \ascii{2Mx4KfKJ37EDc3A43Frzof1iEjSe91JUX7d}, \ascii{2NBMSdXjZ7YqREmwxEtgGryY59KBpqMSs1d}, \\ - & \ascii{2N9RbfE4ZCJ3Nx68vPfmvH2M6Q3qicJhagb}, \ascii{2N4xwfFkFj4DR4NWNbynzP2aJmVcEFnA2DB}, \\ - & \ascii{2Mx4TyAwedmsRuDkvMNYGqrcCZfQTfCvxAp}, \ascii{2Mx4HSVsxEqXjLxn8igJzmCrFdG9XhnNvtf}, \\ - & \ascii{2MtLM4SP7LJbBZ5rA5ZG8kAVz9UNrNKuoFB}, \ascii{2N7SPq83Cbmwuwv5rjNBzVd9QtJKAxxKj8M}, \\ - & \ascii{2MwYkbE4U4p9XBsCrupDDkdcDH9L9xvc9Bn}, \ascii{2MyaeCHpVmckokUi67YP1QK9L3Dkx3Pt86F}, \\ - & \ascii{2N7URNgBPXGjqnuPHiynCa6qMMhKm6YEaHr}, \ascii{2N2eNwGVwj4WwbEdJg7YZDgrnYvDv1ZSNbB}, \\ - & \ascii{2MuWAG6BqLM1mtZc67Fv1aKgGwkNQ2akDGt}, \ascii{2N7XH82MbGwpzbc7PM2aK5CU14bSJvK7Etz}, \\ - & \ascii{2MuPX8Ke5TvDDQ1nkqpaPMgYWPyWbFp18Jn}, \ascii{2NFBST7oK9yw9PaXaq5QhdyYwp5HpHz9m81}, \\ - & \ascii{2MuSeMBUrttbjvDZAeQjTrrDeoP197qj2kG}, \ascii{2N6JU8JNGGAUFknTCuLSuDEEhZJqMfFsH88}, \\ - & \ascii{2N4P2MrwtwbiHymQm1RASoVoiH3sFrBpmXa}, \ascii{2MyhFiVXvVVxUNc8Qh9ppV7jG4NsKpnxige}, \\ - & \ascii{2N5dLXUho2GtjuHMWuqixLrHLCwUMcYxd7s}, \ascii{2N9NhfSiYBt3fhETFR6mQc3uxreEy7simSg}, \\ - & \ascii{2NBEEWPY3v38uuC7n1tMtviEY7ND2XzfgSG}, \ascii{2NCWWj6oREJiMmfJ2bV5sbm1xchMwQfAZ5r}, \\ - & \ascii{2N4ACsVCKMvJmtEb3Pd3xkqhJ3rLT4mYx1r}, \ascii{2MtmMdabcwRJmenswaYtWA675df854KhUxD}, \\ - & \ascii{2N2h27Dd87eiGcm7ajvu4hJpXjTm9GkzvLZ}, \ascii{2NGE19agRXU1EAK3PCLZWXERkpqyUexhk9r}, \\ - & \ascii{2N63112wMnBsXTaBFjbCTjW9LuyTXQmvEdw}, \ascii{2NBkHxgkYZbU56zsoLNsP5WZVfMtBK6X8WK}, \\ - & \ascii{2N5pK7NfKo6d9qBmsKggpwuvQeMxGf65SLH}, \ascii{2N5jHzgCg9a9uAcLaT2jij8WKTZzWbVNC5c}\, ] +[& \ascii{t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi}, \ascii{t2N9PH9Wk9xjqYg9iin1Ua3aekJqfAtE543}, \\ + & \ascii{t2NGQjYMQhFndDHguvUw4wZdNdsssA6K7x2}, \ascii{t27ktmq1kbeCWiQ5TZ7w5npSzcdbBmTB7v6}, \\ + & \ascii{t2GcBttAKD2WTHka8HyGc2dfvVTKYZUfHmJ}, \ascii{t2Q3vxWaD9LrdqUE8Xd9Ddjpr9pUQ2aGotK}, \\ + & \ascii{t2TTfWDsYu998fHWzVP9Gns4fgxXXRi1Wzu}, \ascii{t2KS6R4MMWdSBMjLCiw2iMyhWGRQPmyRqDn}, \\ + & \ascii{t2Q2ELrgotWv3Eec6LEtMMiiQ8dtW38u8Tj}, \ascii{t2AEgJA88vTWAKqxJDFUEJWyHUtQAZi5G1D}, \\ + & \ascii{t2HCSdmpq1TQKksuwPQevwAzPTgfJ2rkMbG}, \ascii{t2HQCPFAUQaUdJWHPhg5pPBxit7inaJzubE}, \\ + & \ascii{t2Fzqvq8Y9e6Mn3JNPb982aYsLmq4b5HmhH}, \ascii{t2HEz7YZQqDUgC5h4y2WSD3mWneqJNVRjjJ}, \\ + & \ascii{t2GCR1SCk687Eeo5NEZ23MLsms7JjVWBgfG}, \ascii{t2KyiPR9Lztq2w1w747X6W4nkUMAGL8M9KN}, \\ + & \ascii{t2UxymadyxSyVihmbq7S1yxw5dCBqJ1S4jT}, \ascii{t2AVeMy7fdmTcJhckqiKRG8B7F1vccEhSqU}, \\ + & \ascii{t26m7LwihQzD2sH7ZVhYpPJM5j7kzwbfKW9}, \ascii{t2DgwUNTe7NxuyPU6fxsB5xJXap3E4yWXrN}, \\ + & \ascii{t2U6funcXA11fC9SZehyvUL3rk3Vhuh7fzS}, \ascii{t284JhyS8LGM72Tx1porSqwrcq3CejthP1p}, \\ + & \ascii{t29egu8QcpzKeLoPLqWS6QVMnUUPQdF6eNm}, \ascii{t29LqD9p9D3B26euBwFi6mfcWu8HPA38VNs}, \\ + & \ascii{t28GsAMCxAyLy85XaasddDzaYFTtfewr86y}, \ascii{t2GV44QyaikQPLUfm6oTfZnw71LLjnR7gDG}, \\ + & \ascii{t2U2QzNLQ1jtAu4L6xxVnRXLBsQpQvGRR2g}, \ascii{t2QKGr5PNan7nrwDgseyHMN9NFeeuUjCh8b}, \\ + & \ascii{t2AfS8u6HwBeJpKpbuxztvRjupKQDXqnrwa}, \ascii{t2CTRQUViQd3CWMhnKhFnUHqDLUyTxmWhJs}, \\ + & \ascii{t2CbM9EqszNURqh1UXZBXYhwp1R4GwEhWRE}, \ascii{t2LM7uYiAsKDU42GNSnMwDxbZ8s1DowQzYH}, \\ + & \ascii{t2AgvT35LHR378AE3ouz6xKMhkTLHLJC6nD}, \ascii{t285EAQXUVyi4NMddJv2QqTrnv45GRMbP8e}, \\ + & \ascii{t2EpMRCD5b8f2DCQ37npNULcpZhkjC8muqA}, \ascii{t2BCmWXrRPiCeQTpizSWKKRPM5X6PS7umDY}, \\ + & \ascii{t2DN7X6wDFn5hYKBiBmn3Z98st419yaTVTH}, \ascii{t2QJj8HeCwQ6mHwqekxxDLZntYpZTHNU62t}, \\ + & \ascii{t2QdHBR1Yciqn4j8gpS8DcQZZtYetKvfNj3}, \ascii{t2E5cpLA1ey5VNxFNcuopeQMq2rH2NHiPdu}, \\ + & \ascii{t2EVRGtzjFAyz8CF8ndvLuiJu7qZUfDa93H}, \ascii{t2KoQDk3BSFadBkuaWdLwchFuQamzw9RE4L}, \\ + & \ascii{t2FnR3yhTmuiejEJeu6qpidWTghRd1HpjLt}, \ascii{t2BAuBAAospDc9d1u5nNGEi6x4NRJBD2PQ2}, \\ + & \ascii{t2RtKrLCGcyPkm4a4APg1YY9Wu2m4R2PgrB}, \ascii{t28aUbSteZzBq2pFgj1K1XNZRZP5mMMyakV}, \\ + & \ascii{t2Urdy1ERfkvsFuy6Z4BkhvYGzWdmivfAFR}, \ascii{t2ADinR4JrvCMd4Q1XGALPajzFrirqvhED6}\, ] \end{tabular} \renewcommand{\arraystretch}{1} @@ -3633,7 +3646,8 @@ \subparagraph{2016.0-beta-1.8} \begin{itemize} - \item Specify the lead bytes for \transparent P2SH and P2PKH addresses. + \item Revise the lead bytes for \transparent P2SH and P2PKH addresses, + and reencode the testnet \foundersReward addresses. \item Add a section on which BIPs apply to \Zcash. \item Specify that \ScriptOP{CODESEPARATOR} has been disabled, and no longer affects signature hashes.