mirror of https://github.com/zcash/zips.git
Merge pull request #209 from str4d/zips-207-208
Update protocol spec with ZIPs 207 and 208
This commit is contained in:
commit
9c65d64012
|
@ -57,7 +57,7 @@ auxblossom:
|
||||||
$(LATEXMK) -jobname=blossom -auxdir=aux -outdir=aux protocol
|
$(LATEXMK) -jobname=blossom -auxdir=aux -outdir=aux protocol
|
||||||
|
|
||||||
.PHONY: blossom
|
.PHONY: blossom
|
||||||
sapling:
|
blossom:
|
||||||
$(MAKE) auxblossom
|
$(MAKE) auxblossom
|
||||||
mv -f aux/blossom.pdf .
|
mv -f aux/blossom.pdf .
|
||||||
|
|
||||||
|
|
|
@ -1238,16 +1238,30 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
|
||||||
\newcommand{\BlockSubsidy}{\mathsf{BlockSubsidy}}
|
\newcommand{\BlockSubsidy}{\mathsf{BlockSubsidy}}
|
||||||
\newcommand{\MinerSubsidy}{\mathsf{MinerSubsidy}}
|
\newcommand{\MinerSubsidy}{\mathsf{MinerSubsidy}}
|
||||||
\newcommand{\FoundersReward}{\mathsf{FoundersReward}}
|
\newcommand{\FoundersReward}{\mathsf{FoundersReward}}
|
||||||
|
\newcommand{\FundingStreamFund}[1]{\mathsf{FundingStream}_{#1}}
|
||||||
|
\newcommand{\FundingStreamFraction}[1]{\FundingStreamFund{#1}\mathsf{.Fraction}}
|
||||||
|
\newcommand{\FundingStreamStartHeight}[1]{\FundingStreamFund{#1}\mathsf{.StartHeight}}
|
||||||
|
\newcommand{\FundingStreamEndHeight}[1]{\FundingStreamFund{#1}\mathsf{.EndHeight}}
|
||||||
|
\newcommand{\FundingStreamValue}[1]{\FundingStreamFund{#1}\mathsf{.Value}}
|
||||||
|
\newcommand{\FundingStreamAddressList}[1]{\FundingStreamFund{#1}\mathsf{.AddressList}}
|
||||||
|
\newcommand{\FundingStreamAddressIndex}[1]{\FundingStreamFund{#1}\mathsf{.AddressIndex}}
|
||||||
|
\newcommand{\FundingStreamNumAddresses}[1]{\FundingStreamFund{#1}\mathsf{.NumAddresses}}
|
||||||
|
\newcommand{\MaxFundingStreams}{\mathsf{MaxFundingStreams}}
|
||||||
\newcommand{\SlowStartInterval}{\mathsf{SlowStartInterval}}
|
\newcommand{\SlowStartInterval}{\mathsf{SlowStartInterval}}
|
||||||
\newcommand{\SlowStartShift}{\mathsf{SlowStartShift}}
|
\newcommand{\SlowStartShift}{\mathsf{SlowStartShift}}
|
||||||
\newcommand{\SlowStartRate}{\mathsf{SlowStartRate}}
|
\newcommand{\SlowStartRate}{\mathsf{SlowStartRate}}
|
||||||
\newcommand{\HalvingInterval}{\mathsf{HalvingInterval}}
|
\newcommand{\PreBlossomHalvingInterval}{\mathsf{\notbeforeblossom{PreBlossom}HalvingInterval}}
|
||||||
|
\newcommand{\PostBlossomHalvingInterval}{\mathsf{PostBlossomHalvingInterval}}
|
||||||
\newcommand{\MaxBlockSubsidy}{\mathsf{MaxBlockSubsidy}}
|
\newcommand{\MaxBlockSubsidy}{\mathsf{MaxBlockSubsidy}}
|
||||||
\newcommand{\NumFounderAddresses}{\mathsf{NumFounderAddresses}}
|
\newcommand{\NumFounderAddresses}{\mathsf{NumFounderAddresses}}
|
||||||
\newcommand{\FounderAddressChangeInterval}{\mathsf{FounderAddressChangeInterval}}
|
\newcommand{\FounderAddressChangeInterval}{\mathsf{FounderAddressChangeInterval}}
|
||||||
\newcommand{\FoundersFraction}{\mathsf{FoundersFraction}}
|
\newcommand{\FoundersFraction}{\mathsf{FoundersFraction}}
|
||||||
|
\newcommand{\FundingStreamAddressChangeInterval}{\mathsf{FundingStreamAddressChangeInterval}}
|
||||||
|
\newcommand{\FundingStreamAddressPeriod}{\mathsf{FundingStreamAddressPeriod}}
|
||||||
\newcommand{\BlockHeight}{\mathsf{height}}
|
\newcommand{\BlockHeight}{\mathsf{height}}
|
||||||
\newcommand{\Halving}{\mathsf{Halving}}
|
\newcommand{\Halving}{\mathsf{Halving}}
|
||||||
|
\newcommand{\HalvingNum}{\mathsf{halving}}
|
||||||
|
\newcommand{\HeightForHalving}{\mathsf{HeightForHalving}}
|
||||||
\newcommand{\FounderAddress}{\mathsf{FounderAddress}}
|
\newcommand{\FounderAddress}{\mathsf{FounderAddress}}
|
||||||
\newcommand{\FounderAddressList}{\mathsf{FounderAddressList}}
|
\newcommand{\FounderAddressList}{\mathsf{FounderAddressList}}
|
||||||
\newcommand{\FounderAddressIndex}{\mathsf{FounderAddressIndex}}
|
\newcommand{\FounderAddressIndex}{\mathsf{FounderAddressIndex}}
|
||||||
|
@ -1255,17 +1269,24 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
|
||||||
|
|
||||||
\newcommand{\blockSubsidy}{\term{block subsidy}}
|
\newcommand{\blockSubsidy}{\term{block subsidy}}
|
||||||
\newcommand{\minerSubsidy}{\term{miner subsidy}}
|
\newcommand{\minerSubsidy}{\term{miner subsidy}}
|
||||||
|
\newcommand{\fundingStream}{\term{funding stream}}
|
||||||
|
\newcommand{\fundingStreams}{\term{funding streams}}
|
||||||
\newcommand{\foundersReward}{\term{Founders' Reward}}
|
\newcommand{\foundersReward}{\term{Founders' Reward}}
|
||||||
\newcommand{\slowStartPeriod}{\term{slow-start period}}
|
\newcommand{\slowStartPeriod}{\term{slow-start period}}
|
||||||
\newcommand{\halvingInterval}{\term{halving interval}}
|
\newcommand{\halvingInterval}{\term{halving interval}}
|
||||||
|
|
||||||
|
\newcommand{\BlossomActivationHeight}{\mathsf{BlossomActivationHeight}}
|
||||||
|
\newcommand{\IsBlossomActivated}{\mathsf{IsBlossomActivated}}
|
||||||
\newcommand{\PoWLimit}{\mathsf{PoWLimit}}
|
\newcommand{\PoWLimit}{\mathsf{PoWLimit}}
|
||||||
\newcommand{\PoWAveragingWindow}{\mathsf{PoWAveragingWindow}}
|
\newcommand{\PoWAveragingWindow}{\mathsf{PoWAveragingWindow}}
|
||||||
\newcommand{\PoWMedianBlockSpan}{\mathsf{PoWMedianBlockSpan}}
|
\newcommand{\PoWMedianBlockSpan}{\mathsf{PoWMedianBlockSpan}}
|
||||||
\newcommand{\PoWMaxAdjustDown}{\mathsf{PoWMaxAdjustDown}}
|
\newcommand{\PoWMaxAdjustDown}{\mathsf{PoWMaxAdjustDown}}
|
||||||
\newcommand{\PoWMaxAdjustUp}{\mathsf{PoWMaxAdjustUp}}
|
\newcommand{\PoWMaxAdjustUp}{\mathsf{PoWMaxAdjustUp}}
|
||||||
\newcommand{\PoWDampingFactor}{\mathsf{PoWDampingFactor}}
|
\newcommand{\PoWDampingFactor}{\mathsf{PoWDampingFactor}}
|
||||||
\newcommand{\PoWTargetSpacing}{\mathsf{PoWTargetSpacing}}
|
\newcommand{\PreBlossomPoWTargetSpacing}{\mathsf{\notbeforeblossom{PreBlossom}PoWTargetSpacing}}
|
||||||
|
\newcommand{\PostBlossomPoWTargetSpacing}{\mathsf{PostBlossomPoWTargetSpacing}}
|
||||||
|
\newcommand{\BlossomPoWTargetSpacingRatio}{\mathsf{BlossomPoWTargetSpacingRatio}}
|
||||||
|
\newcommand{\PoWTargetSpacingFunc}{\mathsf{PoWTargetSpacing}}
|
||||||
\newcommand{\MeanTarget}{\mathsf{MeanTarget}}
|
\newcommand{\MeanTarget}{\mathsf{MeanTarget}}
|
||||||
\newcommand{\MedianTime}{\mathsf{MedianTime}}
|
\newcommand{\MedianTime}{\mathsf{MedianTime}}
|
||||||
\newcommand{\AveragingWindowTimespan}{\mathsf{AveragingWindowTimespan}}
|
\newcommand{\AveragingWindowTimespan}{\mathsf{AveragingWindowTimespan}}
|
||||||
|
@ -1732,6 +1753,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
|
||||||
\newcommand{\overwinteronlyitem}[1]{\overwinter{\item {[\Overwinter only, pre-\Sapling\!]}\, {#1}}}
|
\newcommand{\overwinteronlyitem}[1]{\overwinter{\item {[\Overwinter only, pre-\Sapling\!]}\, {#1}}}
|
||||||
\newcommand{\overwinteronwarditem}[1]{\overwinter{\item {[\Overwinter onward]}\, {#1}}}
|
\newcommand{\overwinteronwarditem}[1]{\overwinter{\item {[\Overwinter onward]}\, {#1}}}
|
||||||
\newcommand{\sproutspecific}[1]{\notsprout{[\Sprout\!]\,} {#1}}
|
\newcommand{\sproutspecific}[1]{\notsprout{[\Sprout\!]\,} {#1}}
|
||||||
|
\newcommand{\preblossom}[1]{\notbeforeblossom{[Pre-\Blossom\!]\,} {#1}}
|
||||||
|
\newcommand{\blossomonward}[1]{\blossom{[\Blossom onward]\, {#1}}}
|
||||||
\newcommand{\presapling}[1]{\notsprout{[Pre-\Sapling\!]\,} {#1}}
|
\newcommand{\presapling}[1]{\notsprout{[Pre-\Sapling\!]\,} {#1}}
|
||||||
\newcommand{\saplingonward}[1]{\sapling{[\Sapling onward]\, {#1}}}
|
\newcommand{\saplingonward}[1]{\sapling{[\Sapling onward]\, {#1}}}
|
||||||
\newcommand{\preoverwinter}[1]{\notsprout{[Pre-\Overwinter\!]\,} {#1}}
|
\newcommand{\preoverwinter}[1]{\notsprout{[Pre-\Overwinter\!]\,} {#1}}
|
||||||
|
@ -2245,9 +2268,10 @@ The following integer constants will be instantiated in \crossref{constants}:
|
||||||
$\NoteCommitRandLength$, \changed{$\RandomSeedLength$,} $\AuthPrivateLength$,
|
$\NoteCommitRandLength$, \changed{$\RandomSeedLength$,} $\AuthPrivateLength$,
|
||||||
\changed{$\NoteAddressPreRandLength$,}\sapling{ $\SpendingKeyLength$, $\DiversifierLength$,
|
\changed{$\NoteAddressPreRandLength$,}\sapling{ $\SpendingKeyLength$, $\DiversifierLength$,
|
||||||
$\InViewingKeyLength$, $\OutViewingKeyLength$, $\ScalarLength$,}
|
$\InViewingKeyLength$, $\OutViewingKeyLength$, $\ScalarLength$,}
|
||||||
$\MAXMONEY$, $\SlowStartInterval$, $\HalvingInterval$, $\MaxBlockSubsidy$,
|
$\MAXMONEY$, $\SlowStartInterval$, $\PreBlossomHalvingInterval$, \blossom{$\PostBlossomHalvingInterval$,}
|
||||||
|
$\MaxBlockSubsidy$,
|
||||||
$\NumFounderAddresses$, $\PoWLimit$, $\PoWAveragingWindow$, $\PoWMedianBlockSpan$,
|
$\NumFounderAddresses$, $\PoWLimit$, $\PoWAveragingWindow$, $\PoWMedianBlockSpan$,
|
||||||
$\PoWDampingFactor$, and $\PoWTargetSpacing$.
|
$\PoWDampingFactor$, \notblossom{and }$\PreBlossomPoWTargetSpacing$\blossom{, and $\PostBlossomPoWTargetSpacing$}.
|
||||||
\end{flushleft}
|
\end{flushleft}
|
||||||
\end{formulae}
|
\end{formulae}
|
||||||
|
|
||||||
|
@ -2760,24 +2784,34 @@ considered disjoint, even if they have the same bit pattern.}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Block Subsidy and Founders' Reward} \label{subsidyconcepts}
|
\subsection{Block Subsidy\blossom{, Funding Streams,} and Founders' Reward} \label{subsidyconcepts}
|
||||||
|
|
||||||
Like \Bitcoin, \Zcash creates currency when \blocks are mined. The value created on
|
Like \Bitcoin, \Zcash creates currency when \blocks are mined. The value created on
|
||||||
mining a \block is called the \blockSubsidy. It is composed of a \minerSubsidy and a
|
mining a \block is called the \blockSubsidy.
|
||||||
\foundersReward. As in \Bitcoin, the miner of a \block also receives \transactionFees.
|
|
||||||
|
|
||||||
The calculations of the \blockSubsidy, \minerSubsidy, and \foundersReward depend on
|
\preblossom{The \blockSubsidy is composed of a \minerSubsidy and a \foundersReward.}
|
||||||
the \blockHeight, as defined in \crossref{blockchain}.
|
|
||||||
|
|
||||||
These calculations are described in \crossref{subsidies}.
|
\blossomonward{The \blockSubsidy is composed of a \minerSubsidy and a series of \fundingStreams.
|
||||||
|
The \fundingStreams introduced in the Blossom upgrade correspond exactly to the \foundersReward.}
|
||||||
|
|
||||||
|
As in \Bitcoin, the miner of a \block also receives \transactionFees.
|
||||||
|
|
||||||
|
The calculations of the \blockSubsidy, \minerSubsidy,\blossom{ \fundingStreams,} and \foundersReward
|
||||||
|
depend on the \blockHeight, as defined in \crossref{blockchain}. These calculations are described in \\
|
||||||
|
\crossref{subsidies}.
|
||||||
|
|
||||||
|
|
||||||
\subsection{\CoinbaseTransactions}
|
\subsection{\CoinbaseTransactions} \label{coinbasetransactions}
|
||||||
|
|
||||||
The first (and only the first) \transaction in a block is a \coinbaseTransaction,
|
The first (and only the first) \transaction in a block is a \coinbaseTransaction,
|
||||||
which collects and spends any \minerSubsidy and \transactionFees paid by \transactions
|
which collects and spends any \minerSubsidy and \transactionFees paid by \transactions
|
||||||
included in this \block. The \coinbaseTransaction{} \MUST also pay the \foundersReward
|
included in this \block.
|
||||||
as described in \crossref{foundersreward}.
|
|
||||||
|
\preblossom{The \coinbaseTransaction{} \MUST also pay the \foundersReward as described in \\
|
||||||
|
\crossref{foundersreward}.}
|
||||||
|
|
||||||
|
\blossomonward{The \coinbaseTransaction \MUST also pay the \fundingStreams as described in \\
|
||||||
|
\crossref{fundingstreams}.}
|
||||||
|
|
||||||
|
|
||||||
\intropart
|
\intropart
|
||||||
|
@ -5583,11 +5617,17 @@ Define:
|
||||||
\item $\UncommittedSapling \typecolon \bitseq{\MerkleHashLengthSapling} := \ItoLEBSPOf{\MerkleHashLengthSapling}{1}$
|
\item $\UncommittedSapling \typecolon \bitseq{\MerkleHashLengthSapling} := \ItoLEBSPOf{\MerkleHashLengthSapling}{1}$
|
||||||
} %sapling
|
} %sapling
|
||||||
\item $\MAXMONEY \typecolon \Nat := \changed{2.1 \smult 10^{15}}$ (\zatoshi)
|
\item $\MAXMONEY \typecolon \Nat := \changed{2.1 \smult 10^{15}}$ (\zatoshi)
|
||||||
|
\blossom{
|
||||||
|
\item $\BlossomActivationHeight \typecolon \Nat := 640000$
|
||||||
|
} %blossom
|
||||||
\item $\SlowStartInterval \typecolon \Nat := 20000$
|
\item $\SlowStartInterval \typecolon \Nat := 20000$
|
||||||
\item $\HalvingInterval \typecolon \Nat := 840000$
|
\item $\PreBlossomHalvingInterval \typecolon \Nat := 840000$
|
||||||
\item $\MaxBlockSubsidy \typecolon \Nat := 1.25 \smult 10^9$ (\zatoshi)
|
\item $\MaxBlockSubsidy \typecolon \Nat := 1.25 \smult 10^9$ (\zatoshi)
|
||||||
\item $\NumFounderAddresses \typecolon \Nat := 48$
|
\item $\NumFounderAddresses \typecolon \Nat := 48$
|
||||||
\item $\FoundersFraction \typecolon \Rat := \frac{1}{5}$
|
\item $\FoundersFraction \typecolon \Rat := \frac{1}{5}$
|
||||||
|
\blossom{
|
||||||
|
\item $\MaxFundingStreams \typecolon \Nat := 8$
|
||||||
|
} %blossom
|
||||||
\item $\PoWLimit \typecolon \Nat := \begin{cases}
|
\item $\PoWLimit \typecolon \Nat := \begin{cases}
|
||||||
2^{243} - 1,&\squash\text{for the production network} \\
|
2^{243} - 1,&\squash\text{for the production network} \\
|
||||||
2^{251} - 1,&\squash\text{for the test network}
|
2^{251} - 1,&\squash\text{for the test network}
|
||||||
|
@ -5597,7 +5637,10 @@ Define:
|
||||||
\item $\PoWMaxAdjustDown \typecolon \Rat := \frac{32}{100}$
|
\item $\PoWMaxAdjustDown \typecolon \Rat := \frac{32}{100}$
|
||||||
\item $\PoWMaxAdjustUp \typecolon \Rat := \frac{16}{100}$
|
\item $\PoWMaxAdjustUp \typecolon \Rat := \frac{16}{100}$
|
||||||
\item $\PoWDampingFactor \typecolon \Nat := 4$
|
\item $\PoWDampingFactor \typecolon \Nat := 4$
|
||||||
\item $\PoWTargetSpacing \typecolon \Nat := 150$ (seconds).
|
\item $\PreBlossomPoWTargetSpacing \typecolon \Nat := 150$ (seconds).
|
||||||
|
\blossom{
|
||||||
|
\item $\PostBlossomPoWTargetSpacing \typecolon \Nat := 75$ (seconds).
|
||||||
|
} %blossom
|
||||||
\end{formulae}
|
\end{formulae}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8956,8 +8999,10 @@ with simplifications and altered parameters, to adjust difficulty to target
|
||||||
the desired 2.5-minute block time.
|
the desired 2.5-minute block time.
|
||||||
Unlike \Bitcoin, the difficulty adjustment occurs after every block.
|
Unlike \Bitcoin, the difficulty adjustment occurs after every block.
|
||||||
|
|
||||||
The constants $\PoWLimit$, $\PoWAveragingWindow$, $\PoWMaxAdjustDown$, $\PoWMaxAdjustUp$,
|
\notbeforeblossom{The constants }$\PoWLimit$, $\PreBlossomHalvingInterval$, $\PoWAveragingWindow$,
|
||||||
$\PoWDampingFactor$, and $\PoWTargetSpacing$ are instantiated in \crossref{constants}.
|
$\PoWMaxAdjustDown$, $\PoWMaxAdjustUp$, $\PoWDampingFactor$,\notblossom{ and}
|
||||||
|
$\PreBlossomPoWTargetSpacing$\blossom{, and $\PostBlossomPoWTargetSpacing$}
|
||||||
|
are specified in section \crossref{constants}.
|
||||||
|
|
||||||
Let $\ToCompact$ and $\ToTarget$ be as defined in \crossref{nbits}.
|
Let $\ToCompact$ and $\ToTarget$ be as defined in \crossref{nbits}.
|
||||||
|
|
||||||
|
@ -8982,15 +9027,26 @@ Define:
|
||||||
\floor{x},&\caseif x \geq 0 \\
|
\floor{x},&\caseif x \geq 0 \\
|
||||||
-\floor{-x},&\caseotherwise
|
-\floor{-x},&\caseotherwise
|
||||||
\end{cases}$
|
\end{cases}$
|
||||||
|
\blossom{
|
||||||
|
\item $\IsBlossomActivated(\BlockHeight) := (\BlockHeight \geq \BlossomActivationHeight)$
|
||||||
|
\item $\BlossomPoWTargetSpacingRatio := \hfrac{\PreBlossomPoWTargetSpacing}{\PostBlossomPoWTargetSpacing}$
|
||||||
|
\item $\PostBlossomHalvingInterval := \floor{\PreBlossomHalvingInterval \mult \BlossomPoWTargetSpacingRatio}$
|
||||||
|
\item $\PoWTargetSpacingFunc(\BlockHeight) := \begin{cases}
|
||||||
|
\PreBlossomPoWTargetSpacing,&\caseif \text{not } \IsBlossomActivated(\BlockHeight) \\
|
||||||
|
\PostBlossomPoWTargetSpacing,&\caseotherwise
|
||||||
|
\end{cases}$
|
||||||
|
} %blossom
|
||||||
|
|
||||||
\item $\AveragingWindowTimespan := \PoWAveragingWindow \mult \PoWTargetSpacing$
|
\item $\AveragingWindowTimespan\blossom{(\BlockHeight)} := \PoWAveragingWindow \mult \PoWTargetSpacingFunc\blossom{(\BlockHeight)}$
|
||||||
\item $\MinActualTimespan := \floor{\AveragingWindowTimespan \mult (1 - \PoWMaxAdjustUp)}$
|
\item $\MinActualTimespan\blossom{(\BlockHeight)} := \floor{\AveragingWindowTimespan\blossom{(\BlockHeight)} \mult (1 - \PoWMaxAdjustUp)}$
|
||||||
\item $\MaxActualTimespan := \floor{\AveragingWindowTimespan \mult (1 + \PoWMaxAdjustDown)}$
|
\item $\MaxActualTimespan\blossom{(\BlockHeight)} := \floor{\AveragingWindowTimespan\blossom{(\BlockHeight)} \mult (1 + \PoWMaxAdjustDown)}$
|
||||||
\item $\MedianTime(\BlockHeight) := \median(\listcomp{\nTime(i) \for i \from
|
\item $\MedianTime(\BlockHeight) := \median(\listcomp{\nTime(i) \for i \from
|
||||||
\maximum(0, \BlockHeight - \PoWMedianBlockSpan) \upto \BlockHeight - 1})$
|
\maximum(0, \BlockHeight - \PoWMedianBlockSpan) \upto \BlockHeight - 1})$
|
||||||
\item $\ActualTimespan(\BlockHeight) := \MedianTime(\BlockHeight) - \MedianTime(\BlockHeight - \PoWAveragingWindow)$
|
\item $\ActualTimespan(\BlockHeight) := \MedianTime(\BlockHeight) - \MedianTime(\BlockHeight - \PoWAveragingWindow)$
|
||||||
\item $\ActualTimespanDamped(\BlockHeight) := \AveragingWindowTimespan + \trunc{\scalebox{0.98}{\hfrac{\ActualTimespan(\BlockHeight) - \AveragingWindowTimespan}{\PoWDampingFactor}}}$
|
\item $\ActualTimespanDamped(\BlockHeight) :=$
|
||||||
\item $\ActualTimespanBounded(\BlockHeight) := \bound{\MinActualTimespan}{\MaxActualTimespan}(\ActualTimespanDamped(\BlockHeight))$
|
\vspace{-0.5ex}
|
||||||
|
\item \tab $\AveragingWindowTimespan\blossom{(\BlockHeight)} + \trunc{\scalebox{0.98}{\hfrac{\ActualTimespan(\BlockHeight) - \AveragingWindowTimespan\blossom{(\BlockHeight)}}{\PoWDampingFactor}}}$
|
||||||
|
\item $\ActualTimespanBounded(\BlockHeight) := \bound{\MinActualTimespan\blossom{(\BlockHeight)}}{\MaxActualTimespan\blossom{(\BlockHeight)}}(\ActualTimespanDamped(\BlockHeight))$
|
||||||
\item $\MeanTarget(\BlockHeight) := \begin{cases}
|
\item $\MeanTarget(\BlockHeight) := \begin{cases}
|
||||||
\PoWLimit, \hspace{16em}\text{if } \BlockHeight \leq \PoWAveragingWindow \\
|
\PoWLimit, \hspace{16em}\text{if } \BlockHeight \leq \PoWAveragingWindow \\
|
||||||
\mean(\listcomp{\ToTarget(\nBits(i)) \for i \from \BlockHeight - \PoWAveragingWindow \upto \BlockHeight - 1}),\\
|
\mean(\listcomp{\ToTarget(\nBits(i)) \for i \from \BlockHeight - \PoWAveragingWindow \upto \BlockHeight - 1}),\\
|
||||||
|
@ -9056,29 +9112,63 @@ in its \blockHeader is defined as $\floor{\hfrac{2^{256}}{\ToTarget(\nBits) + 1}
|
||||||
|
|
||||||
|
|
||||||
\introlist
|
\introlist
|
||||||
\subsection{Calculation of Block Subsidy and Founders' Reward} \label{subsidies}
|
\subsection{Calculation of Block Subsidy\blossom{, Funding Streams,} and Founders' Reward} \label{subsidies}
|
||||||
|
|
||||||
\crossref{subsidyconcepts} defines the \blockSubsidy, \minerSubsidy, and \foundersReward.
|
\crossref{subsidyconcepts} defines the \blockSubsidy, \minerSubsidy,\blossom{ \fundingStreams,} and
|
||||||
Their amounts in \zatoshi are calculated from the \blockHeight using
|
\foundersReward. Their amounts in \zatoshi are calculated from the \blockHeight using
|
||||||
the formulae below. The constants $\SlowStartInterval$, $\HalvingInterval$,
|
the formulae below.\notbeforeblossom{
|
||||||
$\MaxBlockSubsidy$, and $\FoundersFraction$ are instantiated in \crossref{constants}.
|
|
||||||
|
|
||||||
|
}The constants $\SlowStartInterval$, $\MaxBlockSubsidy$, $\FoundersFraction$,\notblossom{ and} $\PreBlossomHalvingInterval$,
|
||||||
|
\blossom{$\MaxFundingStreams$, $\PostBlossomHalvingInterval$, and $\BlossomActivationHeight$} are instantiated in \crossref{constants}.
|
||||||
|
\blossom{The per \fundingStream constants $\FundingStreamFraction{i}$, $\FundingStreamStartHeight{i}$,
|
||||||
|
and $\FundingStreamEndHeight{i}$ are instantiated in \crossref{fundingstreams}.}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
\begin{formulae}
|
\begin{formulae}
|
||||||
\item $\SlowStartShift \typecolon \Nat := \hfrac{\SlowStartInterval}{2}$
|
\item $\SlowStartShift \typecolon \Nat := \hfrac{\SlowStartInterval}{2}$
|
||||||
\item $\SlowStartRate \typecolon \Nat := \hfrac{\MaxBlockSubsidy}{\SlowStartInterval}$
|
\item $\SlowStartRate \typecolon \Nat := \hfrac{\MaxBlockSubsidy}{\SlowStartInterval}$
|
||||||
\item $\Halving(\BlockHeight) := \floor{\hfrac{\BlockHeight - \SlowStartShift}{\HalvingInterval}}$
|
\vspace{0.5ex}
|
||||||
|
\item $\Halving(\BlockHeight) := \notblossom{\floor{\hfrac{\BlockHeight - \SlowStartShift}{\PreBlossomHalvingInterval}}}
|
||||||
|
\notbeforeblossom{\begin{cases}
|
||||||
|
\floor{\hfrac{\BlockHeight - \SlowStartShift}{\PreBlossomHalvingInterval}},\hspace{1em}\blossom{\caseif \text{not } \IsBlossomActivated(\BlockHeight)} \\[1.4ex]
|
||||||
|
\blossom{\floor{\hfrac{\BlossomActivationHeight - \SlowStartShift}{\PreBlossomHalvingInterval} + \hfrac{\BlockHeight - \BlossomActivationHeight}{\PostBlossomHalvingInterval}},}&\blossom{\caseotherwise}
|
||||||
|
\end{cases}}$
|
||||||
|
\vspace{0.5ex}
|
||||||
\item $\BlockSubsidy(\BlockHeight) := \begin{cases}
|
\item $\BlockSubsidy(\BlockHeight) := \begin{cases}
|
||||||
\SlowStartRate \mult \BlockHeight,&\caseif \BlockHeight < \hfrac{\SlowStartInterval}{2} \\[1.4ex]
|
\SlowStartRate \mult \BlockHeight,&\caseif \BlockHeight < \hfrac{\SlowStartInterval}{2} \\[1.4ex]
|
||||||
\SlowStartRate \mult (\BlockHeight + 1),&\caseif \hfrac{\SlowStartInterval}{2} \leq \BlockHeight < \SlowStartInterval \\[1.4ex]
|
\SlowStartRate \mult (\BlockHeight + 1),&\caseif \hfrac{\SlowStartInterval}{2} \leq \BlockHeight \\[1.4ex]
|
||||||
\floor{\hfrac{\MaxBlockSubsidy}{2^{\Halving(\BlockHeight)}}},&\caseotherwise
|
&\text{ and } \BlockHeight < \SlowStartInterval \\[1.4ex]
|
||||||
|
\floor{\hfrac{\MaxBlockSubsidy}{2^{\Halving(\BlockHeight)}}},&\notblossom{\caseotherwise}\notbeforeblossom{\caseif \SlowStartInterval \leq \BlockHeight} \\
|
||||||
|
\notbeforeblossom {
|
||||||
|
&\blossom{\text{ and not } \IsBlossomActivated(\BlockHeight}) \\[1.4ex]
|
||||||
|
\blossom{\floor{\hfrac{\MaxBlockSubsidy}{\BlossomPoWTargetSpacingRatio \mult 2^{\Halving(\BlockHeight)}}},}&\blossom{\caseotherwise}
|
||||||
|
} %notbeforeblossom
|
||||||
\end{cases}$
|
\end{cases}$
|
||||||
|
|
||||||
|
\blossom {
|
||||||
|
\vspace{0.5ex}
|
||||||
|
\item $\FundingStreamValue{i}(\BlockHeight) :=$
|
||||||
|
\vspace{-0.5ex}
|
||||||
|
\item \tab $\begin{cases}
|
||||||
|
0,&\caseif \BlockHeight < \BlossomActivationHeight \\
|
||||||
|
\floor{\BlockSubsidy(\BlockHeight) \mult \FundingStreamFraction{i}},&\caseif \FundingStreamStartHeight{i} \leq \BlockHeight \\
|
||||||
|
&\text{ and } \BlockHeight < \FundingStreamEndHeight{i} \\
|
||||||
|
0,&\caseotherwise
|
||||||
|
\end{cases}$
|
||||||
|
} %blossom
|
||||||
|
|
||||||
\item $\FoundersReward(\BlockHeight) := \begin{cases}
|
\item $\FoundersReward(\BlockHeight) := \begin{cases}
|
||||||
\BlockSubsidy(\BlockHeight) \mult \FoundersFraction,&\caseif \BlockHeight < \SlowStartShift + \HalvingInterval \\
|
\BlockSubsidy(\BlockHeight) \mult \FoundersFraction,&\caseif \Halving(\BlockHeight) = 0 \\
|
||||||
|
\notbeforeblossom {
|
||||||
|
&\blossom{\text{ and } \BlockHeight < \BlossomActivationHeight} \\
|
||||||
|
} %notbeforeblossom
|
||||||
0,&\caseotherwise
|
0,&\caseotherwise
|
||||||
\end{cases}$
|
\end{cases}$
|
||||||
|
|
||||||
\item $\MinerSubsidy(\BlockHeight) := \BlockSubsidy(\BlockHeight) - \FoundersReward(\BlockHeight)$.
|
\item $\MinerSubsidy(\BlockHeight) :=$
|
||||||
|
\vspace{-1.5ex}
|
||||||
|
\item \tab $\BlockSubsidy(\BlockHeight) - \FoundersReward(\BlockHeight)
|
||||||
|
\blossom{\,- \ssum{i = 1}{\MaxFundingStreams} \FundingStreamValue{i}(\BlockHeight)}$.
|
||||||
\end{formulae}
|
\end{formulae}
|
||||||
|
|
||||||
\introsection
|
\introsection
|
||||||
|
@ -9168,33 +9258,418 @@ Let $\SlowStartShift$ be defined as in the previous section.
|
||||||
Define:
|
Define:
|
||||||
|
|
||||||
\begin{formulae}
|
\begin{formulae}
|
||||||
\item $\FounderAddressChangeInterval := \ceiling{\hfrac{\SlowStartShift + \HalvingInterval}{\NumFounderAddresses}}$
|
\item $\FounderAddressChangeInterval := \ceiling{\hfrac{\SlowStartShift + \PreBlossomHalvingInterval}{\NumFounderAddresses}}$
|
||||||
\item $\FounderAddressIndex(\BlockHeight) := 1 + \floor{\hfrac{\BlockHeight}{\FounderAddressChangeInterval}}$.
|
\item $\FounderAddressIndex(\BlockHeight) := 1 + \floor{\hfrac{\BlockHeight}{\FounderAddressChangeInterval}}$.
|
||||||
\end{formulae}
|
\end{formulae}
|
||||||
|
|
||||||
Let $\RedeemScriptHash(\BlockHeight)$ be the standard redeem script hash, as defined in
|
Let $\RedeemScriptHash(\BlockHeight)$ be the standard redeem script hash, as defined in
|
||||||
\cite{Bitcoin-Multisig}, for the P2SH multisig address with Base58Check representation
|
\cite{Bitcoin-Multisig}, for the P2SH multisig address with Base58Check form
|
||||||
given by $\FounderAddressList_{\,\FounderAddressIndex(\BlockHeight)}$.
|
given by $\FounderAddressList_{\,\FounderAddressIndex(\BlockHeight)}$.
|
||||||
|
|
||||||
\consensusrule{
|
\consensusrule{
|
||||||
A \coinbaseTransaction for \blockHeight $\BlockHeight \in \range{1}{\SlowStartShift + \HalvingInterval - 1}$
|
A \coinbaseTransaction for \blockHeight $\BlockHeight \in \range{1}{\notblossom{\SlowStartShift + \PreBlossomHalvingInterval}\blossom{\BlossomActivationHeight} - 1}$
|
||||||
\MUST include at least one output that pays exactly $\FoundersReward(\BlockHeight)$ \zatoshi
|
\MUST include at least one output that pays exactly $\FoundersReward(\BlockHeight)$ \zatoshi
|
||||||
with a standard P2SH script of the form \ScriptOP{HASH160} \;$\RedeemScriptHash(\BlockHeight)$\; \ScriptOP{EQUAL}
|
with a standard P2SH script of the form \ScriptOP{HASH160} \;$\RedeemScriptHash(\BlockHeight)$\; \ScriptOP{EQUAL}
|
||||||
as its $\scriptPubKey$.
|
as its $\scriptPubKey$.
|
||||||
}
|
}
|
||||||
|
|
||||||
\begin{pnotes}
|
\begin{pnotes}
|
||||||
\item No \foundersReward is required to be paid for $\BlockHeight \geq \SlowStartShift + \HalvingInterval$
|
\item No \foundersReward is required to be paid for $\BlockHeight \geq$
|
||||||
(i.e.\ after the first halving), or for $\BlockHeight = 0$ (i.e.\ the \genesisBlock).
|
\notblossom{$\SlowStartShift + \PreBlossomHalvingInterval$
|
||||||
|
(i.e.\ after the first halving)}\blossom{$\BlossomActivationHeight$},
|
||||||
|
or for $\BlockHeight = 0$ (i.e.\ the \genesisBlock).
|
||||||
\item The \foundersReward addresses are not treated specially in any other way, and
|
\item The \foundersReward addresses are not treated specially in any other way, and
|
||||||
there can be other outputs to them, in \coinbaseTransactions or otherwise.
|
there can be other outputs to them, in \coinbaseTransactions or otherwise.
|
||||||
In particular, it is valid for a \coinbaseTransaction with
|
In particular, it is valid for a \coinbaseTransaction with
|
||||||
$\BlockHeight \in \range{1}{\SlowStartShift + \HalvingInterval - 1}$ to have
|
$\BlockHeight \in \range{1}{\SlowStartShift + \PreBlossomHalvingInterval - 1}$ to have
|
||||||
other outputs, possibly to the same address, that do not meet the criterion
|
other outputs, possibly to the same address, that do not meet the criterion
|
||||||
in the above consensus rule, as long as at least one output meets it.
|
in the above consensus rule, as long as at least one output meets it.
|
||||||
\end{pnotes}
|
\end{pnotes}
|
||||||
|
|
||||||
|
|
||||||
|
\blossom{
|
||||||
|
\subsection{Payment of Funding Streams} \label{fundingstreams}
|
||||||
|
|
||||||
|
The \fundingStreams are paid by \transparent outputs in the \coinbaseTransaction, to
|
||||||
|
one of a pre-defined set of \transparent addresses, depending on the \blockHeight.
|
||||||
|
|
||||||
|
The $i$th \fundingStream is defined by three constants:
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{i} \typecolon \Rat$
|
||||||
|
\item $\FundingStreamStartHeight{i} \typecolon \Nat$
|
||||||
|
\item $\FundingStreamEndHeight{i} \typecolon \Nat$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
Define $\HeightForHalving(\HalvingNum)$ so that $\HeightForHalving(\HalvingNum) = \BlockHeight$
|
||||||
|
where $\BlockHeight$ is the least \blockHeight such that $\Halving(\BlockHeight) = \HalvingNum$.
|
||||||
|
|
||||||
|
Define:
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamAddressChangeInterval := \PostBlossomHalvingInterval / 48$
|
||||||
|
\item $\FundingStreamAddressPeriod(\BlockHeight) :=
|
||||||
|
\floor{\hfrac{\BlockHeight - (\HeightForHalving(1) - \PostBlossomHalvingInterval)}{\FundingStreamAddressChangeInterval}}$
|
||||||
|
\item $\FundingStreamAddressIndex{i}(\BlockHeight) :=$
|
||||||
|
\vspace{-0.5ex}
|
||||||
|
\item \tab $1 + \FundingStreamAddressPeriod(\BlockHeight) - \FundingStreamAddressPeriod(\FundingStreamStartHeight{i})$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
The number of \transparent addresses per \fundingStream is therefore:
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamNumAddresses{i} := \FundingStreamAddressIndex{i}(\FundingStreamEndHeight{i})$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
Let $\FundingStreamAddressList{i}_j$ be the $j$th address for the $i$th \fundingStream.
|
||||||
|
Each address representation in $\FundingStreamAddressList{i}_{\oneto{\FundingStreamNumAddresses{i}}}$
|
||||||
|
denotes a \transparent P2SH multisig address.
|
||||||
|
|
||||||
|
Let $\RedeemScriptHash_i(\BlockHeight)$ be the standard redeem script hash, as defined in
|
||||||
|
\cite{Bitcoin-Multisig}, for the P2SH multisig address with Base58Check form
|
||||||
|
given by $\FundingStreamAddressList{i}_{\,\FundingStreamAddressIndex{i}(\BlockHeight)}$.
|
||||||
|
|
||||||
|
Recall from \crossref{subsidies} the definition of $\FundingStreamValue{i}$.
|
||||||
|
|
||||||
|
\consensusrule{
|
||||||
|
In each \coinbaseTransaction for \blockHeight $\BlockHeight$, for every
|
||||||
|
$i \in \range{1}{\MaxFundingStreams}$ such that $\FundingStreamValue{i}(\BlockHeight) \neq 0$,
|
||||||
|
the \transaction{} \MUST include at least one output that pays exactly
|
||||||
|
$\FundingStreamValue{i}(\BlockHeight)$ \zatoshi with a standard P2SH script
|
||||||
|
of the form \ScriptOP{HASH160} \;$\RedeemScriptHash_i(\BlockHeight)$\; \ScriptOP{EQUAL}
|
||||||
|
as its $\scriptPubKey$.
|
||||||
|
}
|
||||||
|
|
||||||
|
\begin{pnotes}
|
||||||
|
\item The \fundingStream addresses are not treated specially in any other way, and
|
||||||
|
there can be other outputs to them, in \coinbaseTransactions or otherwise.
|
||||||
|
In particular, it is valid for a \coinbaseTransaction to have
|
||||||
|
other outputs, possibly to the same address, that do not meet the criterion
|
||||||
|
in the above consensus rule, as long as at least one output meets it.
|
||||||
|
\end{pnotes}
|
||||||
|
|
||||||
|
\subsubsection{ZIP 207 Funding Streams} \label{zip207fundingstreams}
|
||||||
|
|
||||||
|
\cite{ZIP-207} defined eight \fundingStreams. They are reproduced below.
|
||||||
|
|
||||||
|
\renewcommand{\arraystretch}{1}
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 1} \label{zip207fundingstream1}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{1} := \frac{3}{40}$
|
||||||
|
\item $\FundingStreamStartHeight{1} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{1} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{1}_{\oneto{\FundingStreamNumAddresses{1}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS1INVALIDADDRESS00}, \ascii{tFS1INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS02}, \ascii{tFS1INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS04}, \ascii{tFS1INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS06}, \ascii{tFS1INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS08}, \ascii{tFS1INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS10}, \ascii{tFS1INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{1}_{\oneto{\FundingStreamNumAddresses{1}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS1INVALIDADDRESS00}, \ascii{tFS1INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS02}, \ascii{tFS1INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS04}, \ascii{tFS1INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS06}, \ascii{tFS1INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS08}, \ascii{tFS1INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS1INVALIDADDRESS10}, \ascii{tFS1INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 2} \label{zip207fundingstream2}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{2} := \frac{1}{25}$
|
||||||
|
\item $\FundingStreamStartHeight{2} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{2} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{2}_{\oneto{\FundingStreamNumAddresses{2}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS2INVALIDADDRESS00}, \ascii{tFS2INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS02}, \ascii{tFS2INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS04}, \ascii{tFS2INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS06}, \ascii{tFS2INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS08}, \ascii{tFS2INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS10}, \ascii{tFS2INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{2}_{\oneto{\FundingStreamNumAddresses{2}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS2INVALIDADDRESS00}, \ascii{tFS2INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS02}, \ascii{tFS2INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS04}, \ascii{tFS2INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS06}, \ascii{tFS2INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS08}, \ascii{tFS2INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS2INVALIDADDRESS10}, \ascii{tFS2INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 3} \label{zip207fundingstream3}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{3} := \frac{1}{40}$
|
||||||
|
\item $\FundingStreamStartHeight{3} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{3} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{3}_{\oneto{\FundingStreamNumAddresses{3}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS3INVALIDADDRESS00}, \ascii{tFS3INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS02}, \ascii{tFS3INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS04}, \ascii{tFS3INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS06}, \ascii{tFS3INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS08}, \ascii{tFS3INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS10}, \ascii{tFS3INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{3}_{\oneto{\FundingStreamNumAddresses{3}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS3INVALIDADDRESS00}, \ascii{tFS3INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS02}, \ascii{tFS3INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS04}, \ascii{tFS3INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS06}, \ascii{tFS3INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS08}, \ascii{tFS3INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS3INVALIDADDRESS10}, \ascii{tFS3INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 4} \label{zip207fundingstream4}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{4} := \frac{1}{50}$
|
||||||
|
\item $\FundingStreamStartHeight{4} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{4} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{4}_{\oneto{\FundingStreamNumAddresses{4}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS4INVALIDADDRESS00}, \ascii{tFS4INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS02}, \ascii{tFS4INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS04}, \ascii{tFS4INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS06}, \ascii{tFS4INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS08}, \ascii{tFS4INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS10}, \ascii{tFS4INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{4}_{\oneto{\FundingStreamNumAddresses{4}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS4INVALIDADDRESS00}, \ascii{tFS4INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS02}, \ascii{tFS4INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS04}, \ascii{tFS4INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS06}, \ascii{tFS4INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS08}, \ascii{tFS4INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS4INVALIDADDRESS10}, \ascii{tFS4INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 5} \label{zip207fundingstream5}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{5} := \frac{1}{80}$
|
||||||
|
\item $\FundingStreamStartHeight{5} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{5} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{5}_{\oneto{\FundingStreamNumAddresses{5}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS5INVALIDADDRESS00}, \ascii{tFS5INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS02}, \ascii{tFS5INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS04}, \ascii{tFS5INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS06}, \ascii{tFS5INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS08}, \ascii{tFS5INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS10}, \ascii{tFS5INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{5}_{\oneto{\FundingStreamNumAddresses{5}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS5INVALIDADDRESS00}, \ascii{tFS5INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS02}, \ascii{tFS5INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS04}, \ascii{tFS5INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS06}, \ascii{tFS5INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS08}, \ascii{tFS5INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS5INVALIDADDRESS10}, \ascii{tFS5INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 6} \label{zip207fundingstream6}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{6} := \frac{1}{80}$
|
||||||
|
\item $\FundingStreamStartHeight{6} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{6} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{6}_{\oneto{\FundingStreamNumAddresses{6}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS6INVALIDADDRESS00}, \ascii{tFS6INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS02}, \ascii{tFS6INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS04}, \ascii{tFS6INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS06}, \ascii{tFS6INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS08}, \ascii{tFS6INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS10}, \ascii{tFS6INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{6}_{\oneto{\FundingStreamNumAddresses{6}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS6INVALIDADDRESS00}, \ascii{tFS6INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS02}, \ascii{tFS6INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS04}, \ascii{tFS6INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS06}, \ascii{tFS6INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS08}, \ascii{tFS6INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS6INVALIDADDRESS10}, \ascii{tFS6INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 7} \label{zip207fundingstream7}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{7} := \frac{1}{100}$
|
||||||
|
\item $\FundingStreamStartHeight{7} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{7} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{7}_{\oneto{\FundingStreamNumAddresses{7}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS7INVALIDADDRESS00}, \ascii{tFS7INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS02}, \ascii{tFS7INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS04}, \ascii{tFS7INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS06}, \ascii{tFS7INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS08}, \ascii{tFS7INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS10}, \ascii{tFS7INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{7}_{\oneto{\FundingStreamNumAddresses{7}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS7INVALIDADDRESS00}, \ascii{tFS7INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS02}, \ascii{tFS7INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS04}, \ascii{tFS7INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS06}, \ascii{tFS7INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS08}, \ascii{tFS7INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS7INVALIDADDRESS10}, \ascii{tFS7INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\introsection
|
||||||
|
\subsubsubsection{Funding Stream 8} \label{zip207fundingstream8}
|
||||||
|
|
||||||
|
\begin{formulae}
|
||||||
|
\item $\FundingStreamFraction{8} := \frac{1}{200}$
|
||||||
|
\item $\FundingStreamStartHeight{8} := \BlossomActivationHeight$
|
||||||
|
\item $\FundingStreamEndHeight{8} := \HeightForHalving(1)$.
|
||||||
|
\end{formulae}
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the production network, $\FundingStreamAddressList{8}_{\oneto{\FundingStreamNumAddresses{8}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.95}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS8INVALIDADDRESS00}, \ascii{tFS8INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS02}, \ascii{tFS8INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS04}, \ascii{tFS8INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS06}, \ascii{tFS8INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS08}, \ascii{tFS8INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS10}, \ascii{tFS8INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\vspace{1ex}
|
||||||
|
\introlist
|
||||||
|
For the test network, $\FundingStreamAddressList{8}_{\oneto{\FundingStreamNumAddresses{8}}}$ is:
|
||||||
|
|
||||||
|
\scalebox{0.96}{
|
||||||
|
\begin{tabular}{@{\hskip 2.5em}l@{\;}l}
|
||||||
|
[& \ascii{tFS8INVALIDADDRESS00}, \ascii{tFS8INVALIDADDRESS01}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS02}, \ascii{tFS8INVALIDADDRESS03}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS04}, \ascii{tFS8INVALIDADDRESS05}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS06}, \ascii{tFS8INVALIDADDRESS07}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS08}, \ascii{tFS8INVALIDADDRESS09}, \\
|
||||||
|
& \ascii{tFS8INVALIDADDRESS10}, \ascii{tFS8INVALIDADDRESS11}\, ]
|
||||||
|
\end{tabular}
|
||||||
|
} %scalebox
|
||||||
|
|
||||||
|
\renewcommand{\arraystretch}{\defaultarraystretch}
|
||||||
|
} %blossom
|
||||||
|
|
||||||
|
|
||||||
\subsection{Changes to the Script System} \label{scripts}
|
\subsection{Changes to the Script System} \label{scripts}
|
||||||
|
|
||||||
The \ScriptOP{CODESEPARATOR} opcode has been disabled. This opcode also no longer
|
The \ScriptOP{CODESEPARATOR} opcode has been disabled. This opcode also no longer
|
||||||
|
@ -9866,6 +10341,32 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
|
||||||
\section{Change History}
|
\section{Change History}
|
||||||
|
|
||||||
|
|
||||||
|
\subparagraph{2019.0-beta-38}
|
||||||
|
2019-02-23
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item No changes to \Sprout.
|
||||||
|
\sapling{
|
||||||
|
\item No changes to \Sapling.
|
||||||
|
}
|
||||||
|
\blossom{
|
||||||
|
\item Update the following sections to match the current draft of \cite{ZIP-208}:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \crossref{diffadjustment}
|
||||||
|
\item \crossref{subsidies}
|
||||||
|
\end{itemize}
|
||||||
|
\item Specify \fundingStreams, along with the draft \fundingStreams defined
|
||||||
|
in the current draft of \cite{ZIP-207}.
|
||||||
|
\item Update the following sections to match the current draft of \cite{ZIP-207}:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \crossref{subsidyconcepts}
|
||||||
|
\item \crossref{coinbasetransactions}
|
||||||
|
\item \crossref{subsidies}
|
||||||
|
\item \crossref{foundersreward}
|
||||||
|
\end{itemize}
|
||||||
|
}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\subparagraph{2019.0-beta-37}
|
\subparagraph{2019.0-beta-37}
|
||||||
2019-02-22
|
2019-02-22
|
||||||
|
|
||||||
|
|
|
@ -872,6 +872,24 @@ Last revised February~5, 2018.}
|
||||||
urldate={2019-02-08}
|
urldate={2019-02-08}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{ZIP-207,
|
||||||
|
presort={ZIP-0207},
|
||||||
|
author={Jack Grigg},
|
||||||
|
title={Split Founders' Reward},
|
||||||
|
howpublished={Zcash Improvement Proposal 207. Created January~4, 2019.},
|
||||||
|
url={https://github.com/zcash/zips/blob/master/zip-0207.rst},
|
||||||
|
urldate={2019-02-23}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{ZIP-208,
|
||||||
|
presort={ZIP-0208},
|
||||||
|
author={Simon Liu and Daira Hopwood},
|
||||||
|
title={Shorter Block Target Spacing},
|
||||||
|
howpublished={Zcash Improvement Proposal 208. Created January~10, 2019.},
|
||||||
|
url={https://github.com/zcash/zips/blob/master/zip-0208.rst},
|
||||||
|
urldate={2019-02-23}
|
||||||
|
}
|
||||||
|
|
||||||
@misc{ZIP-243,
|
@misc{ZIP-243,
|
||||||
presort={ZIP-0243},
|
presort={ZIP-0243},
|
||||||
author={Jack Grigg and Daira Hopwood},
|
author={Jack Grigg and Daira Hopwood},
|
||||||
|
|
Loading…
Reference in New Issue