ZIP 311: Use length(a) instead of a.len()

This commit is contained in:
Jack Grigg 2021-01-25 11:04:26 +00:00
parent 28bc4e1611
commit fa4b1ddcf0
2 changed files with 41 additions and 30 deletions

View File

@ -175,7 +175,7 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
<span class="math">\(b\)</span>
.</li>
<li>
<span class="math">\(a\text{.len}()\)</span>
<span class="math">\(\mathsf{length}(a)\)</span>
means the length of the vector
<span class="math">\(a\)</span>
.</li>
@ -189,11 +189,14 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
<li><cite>msg</cite>: A message field, which could contain a challenge value from the party to whom the payment disclosure is directed.</li>
<li>
<span class="math">\(\mathsf{saplingOutputs}\)</span>
: A vector of the Sapling Outputs that we are disclosing [0..tx.shieldedOutputs.len()]
: A vector of the Sapling Outputs that we are disclosing
<span class="math">\([0..\mathsf{length}(\mathsf{tx.shieldedOutputs})]\)</span>
<ul>
<li>
<span class="math">\(\mathsf{index}\)</span>
: An index into <cite>tx.shieldedOutputs</cite>.</li>
: An index into
<span class="math">\(\mathsf{tx.shieldedOutputs}\)</span>
.</li>
<li>
<span class="math">\(\mathsf{ock}\)</span>
: The outgoing cipher key that allows this output to be recovered. <a id="id4" class="footnote_reference" href="#protocol-saplingencrypt">5</a></li>
@ -201,11 +204,14 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
</li>
<li>
<span class="math">\(\mathsf{saplingSpends}\)</span>
: A vector of the Sapling Spends for which we are proving spend authority [0..tx.shieldedSpends.len()]
: A vector of the Sapling Spends for which we are proving spend authority
<span class="math">\([0..\mathsf{length}(\mathsf{tx.shieldedSpends})]\)</span>
<ul>
<li>
<span class="math">\(\mathsf{index}\)</span>
: An index into <cite>tx.shieldedSpends</cite>.</li>
: An index into
<span class="math">\(\mathsf{tx.shieldedSpends}\)</span>
.</li>
<li>
<span class="math">\(\mathsf{cv}\)</span>
: A value commitment to the spent note.</li>
@ -237,11 +243,14 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
</li>
<li>
<span class="math">\(\mathsf{transparentInputs}\)</span>
: A vector of the transparent inputs for which we are proving spend authority [0..tx.vin.len()]
: A vector of the transparent inputs for which we are proving spend authority
<span class="math">\([0..\mathsf{length}(\mathsf{tx.vin})]\)</span>
<ul>
<li>
<span class="math">\(\mathsf{index}\)</span>
: An index into <cite>tx.vin</cite>.</li>
: An index into
<span class="math">\(\mathsf{tx.vin}\)</span>
.</li>
<li>
<span class="math">\(\mathsf{sig}\)</span>
: A BIP 322 signature. <a id="id6" class="footnote_reference" href="#bip-0322">8</a>
@ -282,7 +291,9 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
<ul>
<li>
<span class="math">\(\mathsf{index}\)</span>
: An index into <cite>tx.vin</cite>.</li>
: An index into
<span class="math">\(\mathsf{tx.vin}\)</span>
.</li>
<li>The inputs to a BIP 322 signature (excluding <cite>message_data</cite>).</li>
</ul>
</li>
@ -357,13 +368,13 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
<li>Vector length correctness:
<ul>
<li>
<span class="math">\(\mathsf{pd.saplingOutputs.len}() \leq \mathsf{tx.shieldedOutputs.len}()\)</span>
<span class="math">\(\mathsf{length}(\mathsf{pd.saplingOutputs}) \leq \mathsf{length}(\mathsf{tx.shieldedOutputs})\)</span>
</li>
<li>
<span class="math">\(\mathsf{pd.saplingSpends.len}() \leq \mathsf{tx.shieldedSpends.len}()\)</span>
<span class="math">\(\mathsf{length}(\mathsf{pd.saplingSpends}) \leq \mathsf{length}(\mathsf{tx.shieldedSpends})\)</span>
</li>
<li>
<span class="math">\(\mathsf{pd.transparentInputs.len}() \leq \mathsf{tx.vin.len}()\)</span>
<span class="math">\(\mathsf{length}(\mathsf{pd.transparentInputs}) \leq \mathsf{length}(\mathsf{tx.vin})\)</span>
</li>
</ul>
</li>
@ -399,26 +410,26 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/387">https://g
in
<span class="math">\(\mathsf{pd.saplingOutputs}\)</span>
,
<span class="math">\(\mathsf{output.index} &lt; \mathsf{tx.shieldedOutputs.len}()\)</span>
<span class="math">\(\mathsf{output.index} &lt; \mathsf{length}(\mathsf{tx.shieldedOutputs})\)</span>
</li>
<li>For every
<span class="math">\(\mathsf{spend}\)</span>
in
<span class="math">\(\mathsf{pd.saplingSpends}\)</span>
,
<span class="math">\(\mathsf{spend.index} &lt; \mathsf{tx.shieldedSpends.len}()\)</span>
<span class="math">\(\mathsf{spend.index} &lt; \mathsf{length}(\mathsf{tx.shieldedSpends})\)</span>
</li>
<li>For every
<span class="math">\(\mathsf{input}\)</span>
in
<span class="math">\(\mathsf{pd.transparentInputs}\)</span>
,
<span class="math">\(\mathsf{input.index} &lt; \mathsf{tx.vin.len}()\)</span>
<span class="math">\(\mathsf{input.index} &lt; \mathsf{length}(\mathsf{tx.vin})\)</span>
</li>
</ul>
</li>
<li>
<span class="math">\(\mathsf{pd.saplingSpends.len}() + \mathsf{pd.transparentInputs.len}() &gt; 0\)</span>
<span class="math">\(\mathsf{length}(\mathsf{pd.saplingSpends}) + \mathsf{length}(\mathsf{pd.transparentInputs}) &gt; 0\)</span>
</li>
</ul>
</li>

View File

@ -160,7 +160,7 @@ We also define the following notation here:
- :math:`[a..b]` means the sequence of values inclusive of :math:`a` and exclusive of
:math:`b`.
- :math:`a\text{.len}()` means the length of the vector :math:`a`.
- :math:`\mathsf{length}(a)` means the length of the vector :math:`a`.
Specification
@ -177,16 +177,16 @@ A payment disclosure has the following fields:
the payment disclosure is directed.
- :math:`\mathsf{saplingOutputs}`: A vector of the Sapling Outputs that we are disclosing
[0..tx.shieldedOutputs.len()]
:math:`[0..\mathsf{length}(\mathsf{tx.shieldedOutputs})]`
- :math:`\mathsf{index}`: An index into `tx.shieldedOutputs`.
- :math:`\mathsf{index}`: An index into :math:`\mathsf{tx.shieldedOutputs}`.
- :math:`\mathsf{ock}`: The outgoing cipher key that allows this output to be recovered.
[#protocol-saplingencrypt]_
- :math:`\mathsf{saplingSpends}`: A vector of the Sapling Spends for which we are proving
spend authority [0..tx.shieldedSpends.len()]
spend authority :math:`[0..\mathsf{length}(\mathsf{tx.shieldedSpends})]`
- :math:`\mathsf{index}`: An index into `tx.shieldedSpends`.
- :math:`\mathsf{index}`: An index into :math:`\mathsf{tx.shieldedSpends}`.
- :math:`\mathsf{cv}`: A value commitment to the spent note.
- :math:`\mathsf{rk}`: A randomized public key linked to the spent note.
- :math:`\mathsf{zkproof_{spend}}`: A Sapling spend proof.
@ -199,9 +199,9 @@ A payment disclosure has the following fields:
- :math:`\mathsf{spendAuthSig}`
- :math:`\mathsf{transparentInputs}`: A vector of the transparent inputs for which we are
proving spend authority [0..tx.vin.len()]
proving spend authority :math:`[0..\mathsf{length}(\mathsf{tx.vin})]`
- :math:`\mathsf{index}`: An index into `tx.vin`.
- :math:`\mathsf{index}`: An index into :math:`\mathsf{tx.vin}`.
- :math:`\mathsf{sig}`: A BIP 322 signature. [#bip-0322]_
- TODO: `zcashd` currently only supports the legacy format defined in BIP 322. We may
@ -232,7 +232,7 @@ The inputs to a payment disclosure are:
- A vector of transparent input tuples (which may be empty) containing:
- :math:`\mathsf{index}`: An index into `tx.vin`.
- :math:`\mathsf{index}`: An index into :math:`\mathsf{tx.vin}`.
- The inputs to a BIP 322 signature (excluding `message_data`).
The caller MUST provide at least one input tuple of any type (either a Sapling spend tuple
@ -291,9 +291,9 @@ by the caller), the verifier proceeds as follows:
- Vector length correctness:
- :math:`\mathsf{pd.saplingOutputs.len}() \leq \mathsf{tx.shieldedOutputs.len}()`
- :math:`\mathsf{pd.saplingSpends.len}() \leq \mathsf{tx.shieldedSpends.len}()`
- :math:`\mathsf{pd.transparentInputs.len}() \leq \mathsf{tx.vin.len}()`
- :math:`\mathsf{length}(\mathsf{pd.saplingOutputs}) \leq \mathsf{length}(\mathsf{tx.shieldedOutputs})`
- :math:`\mathsf{length}(\mathsf{pd.saplingSpends}) \leq \mathsf{length}(\mathsf{tx.shieldedSpends})`
- :math:`\mathsf{length}(\mathsf{pd.transparentInputs}) \leq \mathsf{length}(\mathsf{tx.vin})`
- Index uniqueness:
@ -307,13 +307,13 @@ by the caller), the verifier proceeds as follows:
- Index correctness:
- For every :math:`\mathsf{output}` in :math:`\mathsf{pd.saplingOutputs}`,
:math:`\mathsf{output.index} < \mathsf{tx.shieldedOutputs.len}()`
:math:`\mathsf{output.index} < \mathsf{length}(\mathsf{tx.shieldedOutputs})`
- For every :math:`\mathsf{spend}` in :math:`\mathsf{pd.saplingSpends}`,
:math:`\mathsf{spend.index} < \mathsf{tx.shieldedSpends.len}()`
:math:`\mathsf{spend.index} < \mathsf{length}(\mathsf{tx.shieldedSpends})`
- For every :math:`\mathsf{input}` in :math:`\mathsf{pd.transparentInputs}`,
:math:`\mathsf{input.index} < \mathsf{tx.vin.len}()`
:math:`\mathsf{input.index} < \mathsf{length}(\mathsf{tx.vin})`
- :math:`\mathsf{pd.saplingSpends.len}() + \mathsf{pd.transparentInputs.len}() > 0`
- :math:`\mathsf{length}(\mathsf{pd.saplingSpends}) + \mathsf{length}(\mathsf{pd.transparentInputs}) > 0`
- Let :math:`unsignedPaymentDisclosure` be the encoding of the payment disclosure without
signatures.