diff --git a/zip-0316.html b/zip-0316.html index 4fd6440d3..6cc68afa1 100644 --- a/zip-0316.html +++ b/zip-0316.html @@ -24,7 +24,7 @@ License: MIT Discussions-To: <https://github.com/zcash/zips/issues/482>

Terminology

-

The key words "MUST", "MUST NOT", "SHOULD", "RECOMMENDED", and "MAY" in this document are to be interpreted as described in BCP 14 1 when, and only when, they appear in all capitals.

+

The key words "MUST", "MUST NOT", "SHOULD", and "MAY" in this document are to be interpreted as described in BCP 14 1 when, and only when, they appear in all capitals.

The terms below are to be interpreted as follows:

Recipient
@@ -67,8 +67,6 @@
An encoding of a UA/UVK as a QR code, intended for display and transfer by Zcash end-users in situations where usability advantages of a 2D bar code may be relevant.
Address Encoding
The externally visible encoding of an Address (e.g. as a string of characters or a QR code).
-
Unix Epoch Time
-
An integer representing a UTC time in seconds relative to the Unix Epoch of 1970-01-01T00:00:00Z.

Notation for sequences, conversions, and arithmetic operations follows the Zcash protocol specification 3.

@@ -82,8 +80,8 @@
  • Sprout Addresses
  • Sapling Addresses
  • -

    Each of these has its own Address Encodings, as a string and as a QR code. (Since the QR code is derivable from the string encoding as described in 9, for many purposes it suffices to consider the string encoding.)

    -

    The Orchard proposal 26 adds a new Address type, Orchard Addresses.

    +

    Each of these has its own Address Encodings, as a string and as a QR code. (Since the QR code is derivable from the string encoding as described in 8, for many purposes it suffices to consider the string encoding.)

    +

    The Orchard proposal 24 adds a new Address type, Orchard Addresses.

    The difficulty with defining new Address Encodings for each Address type, is that end-users are forced to be aware of the various types, and in particular which types are supported by a given Consumer or Recipient. In order to make sure that transfers are completed successfully, users may be forced to explicitly generate Addresses of different types and re-distribute encodings of them, which adds significant friction and cognitive overhead to understanding and using Zcash.

    The goals for a Unified Address standard are as follows:

    -

    The Human-Readable Parts (as defined in 35) of Unified Viewing Keys are defined as follows:

    +

    The Human-Readable Parts (as defined in 33) of Unified Viewing Keys are defined as follows:

    -

    Since an external P2PKH FVK encodes the chain code and public key at the Account level, we can derive both external and internal child keys from it, as described in BIP 44 33. It is possible to derive an internal P2PKH FVK from the external P2PKH FVK (i.e. its parent) without having the external spending key, because child derivation at the Change level is non-hardened.

    +

    Since an external P2PKH FVK encodes the chain code and public key at the Account level, we can derive both external and internal child keys from it, as described in BIP 44 31. It is possible to derive an internal P2PKH FVK from the external P2PKH FVK (i.e. its parent) without having the external spending key, because child derivation at the Change level is non-hardened.

    Deriving a UIVK from a UFVK

    -

    As a consequence of the specification in MUST-understand Typecodes, as of Revision 1 a Consumer of a UFVK MUST understand the meaning of all "MUST-understand" Metadata Item Typecodes present in the UFVK in order to derive a UIVK from it.

    -

    For Metadata Items recognised by the Consumer, the processing of the Item when deriving a UIVK is specified in the section or ZIP describing that Item.

    The following derivations are applied to each component FVK:

    In each case, the Typecode remains the same as in the FVK.

    -

    Items (including Metadata Items that are not "MUST-understand") that are unrecognised by a given Consumer, or that are specified in experiments that the user has not opted into (see Experimental Usage), MUST be dropped when deriving a UIVK from a UFVK.

    +

    Items (including Metadata Items) that are unrecognized by a given Consumer, or that are specified in experiments that the user has not opted into (see Experimental Usage), MUST be dropped when deriving a UIVK from a UFVK.

    Deriving a Unified Address from a UIVK

    -

    As a consequence of the specification in MUST-understand Typecodes, as of Revision 1 a Consumer of a UIVK MUST understand the meaning of all "MUST-understand" Metadata Item Typecodes present in the UIVK in order to derive a Unified Address from it.

    -

    For Metadata Items recognised by the Consumer, the processing of the Item when deriving a Unified Address is specified in the section or ZIP describing that Item.

    To derive a Unified Address from a UIVK we need to choose a diversifier index, which MUST be valid for all of the Viewing Key Types in the UIVK. That is,

    The following derivations are applied to each component IVK using the diversifier index:

    In each case, the Typecode remains the same as in the IVK.

    -

    Items (including Metadata Items that are not "MUST-understand") that are unrecognised by a given Consumer, or that are specified in experiments that the user has not opted into (see Experimental Usage), MUST be dropped when deriving a Unified Address from a UIVK.

    -

    See Address Expiration Metadata for discussion of potential linking of Diversified Unified Addresses via their metadata.

    +

    Items (including Metadata Items) that are unrecognized by a given Consumer, or that are specified in experiments that the user has not opted into (see Experimental Usage), MUST be dropped when deriving a Receiver from a UIVK.

    Usage of Outgoing Viewing Keys

    -

    When a Sender constructs a transaction that creates Sapling or Orchard notes, it uses an outgoing viewing key, as described in 6 and 7, to encrypt an outgoing ciphertext. Decryption with the outgoing viewing key allows recovering the sent note plaintext, including destination address, amount, and memo. The intention is that this outgoing viewing key should be associated with the source of the funds.

    -

    However, the specification of which outgoing viewing key should be used is left somewhat open in 6 and 7; in particular, it was unclear whether transfers should be considered as being sent from an address, or from a ZIP 32 account 21. The adoption of multiple shielded protocols that support outgoing viewing keys (i.e. Sapling and Orchard) further complicates this question, since from NU5 activation, nothing at the consensus level prevents a wallet from spending both Sapling and Orchard notes in the same transaction. (Recommendations about wallet usage of multiple pools will be given in ZIP 315 27.)

    +

    When a Sender constructs a transaction that creates Sapling or Orchard notes, it uses an outgoing viewing key, as described in 6 and 7, to encrypt an outgoing ciphertext. Decryption with the outgoing viewing key allows recovering the sent note plaintext, including destination address, amount, and memo. The intention is that this outgoing viewing key should be associated with the source of the funds.

    +

    However, the specification of which outgoing viewing key should be used is left somewhat open in 6 and 7; in particular, it was unclear whether transfers should be considered as being sent from an address, or from a ZIP 32 account 20. The adoption of multiple shielded protocols that support outgoing viewing keys (i.e. Sapling and Orchard) further complicates this question, since from NU5 activation, nothing at the consensus level prevents a wallet from spending both Sapling and Orchard notes in the same transaction. (Recommendations about wallet usage of multiple pools will be given in ZIP 315 25.)

    Here we refine the protocol specification in order to allow more precise determination of viewing authority for UFVKs.

    A Sender will attempt to determine a "sending Account" for each transfer. The preferred approach is for the API used to perform a transfer to directly specify a sending Account. Otherwise, if the Sender can ascertain that all funds used in the transfer are from addresses associated with some Account, then it SHOULD treat that as the sending Account. If not, then the sending Account is undetermined.

    The Sender also determines a "preferred sending protocol" —one of "transparent", "Sapling", or "Orchard"— corresponding to the most preferred Receiver Type (as given in Encoding of Unified Addresses) of any funds sent in the transaction.

    @@ -802,11 +740,11 @@ - +
    - +
    2Zcash Protocol Specification, Version 2023.4.0 or laterZcash Protocol Specification, Version 2022.2.19 or later [NU5 proposal]
    @@ -814,7 +752,7 @@ 3 - Zcash Protocol Specification, Version 2023.4.0. Section 2: Notation + Zcash Protocol Specification, Version 2022.2.19. Section 2: Notation @@ -822,7 +760,7 @@ 4 - Zcash Protocol Specification, Version 2023.4.0. Section 4.2.2: Sapling Key Components + Zcash Protocol Specification, Version 2022.2.19. Section 4.2.2: Sapling Key Components @@ -830,7 +768,7 @@ 5 - Zcash Protocol Specification, Version 2023.4.0. Section 4.2.3: Orchard Key Components + Zcash Protocol Specification, Version 2022.2.19. Section 4.2.3: Orchard Key Components @@ -838,7 +776,7 @@ 6 - Zcash Protocol Specification, Version 2023.4.0. Section 4.7.2: Sending Notes (Sapling) + Zcash Protocol Specification, Version 2022.2.19. Section 4.7.2: Sending Notes (Sapling) @@ -846,62 +784,54 @@ 7 - Zcash Protocol Specification, Version 2023.4.0. Section 4.7.3: Sending Notes (Orchard) - - - - - - - - +
    8Zcash Protocol Specification, Version 2023.4.0. Section 5.4.1.6: DiversifyHash^Sapling and DiversifyHash^Orchard Hash FunctionsZcash Protocol Specification, Version 2022.2.19. Section 4.7.3: Sending Notes (Orchard)
    - - + +
    9Zcash Protocol Specification, Version 2023.4.0. Section 5.6: Encodings of Addresses and Keys8Zcash Protocol Specification, Version 2022.2.19. Section 5.6: Encodings of Addresses and Keys
    - - + +
    10Zcash Protocol Specification, Version 2023.4.0. Section 5.6.3.1: Sapling Payment Addresses9Zcash Protocol Specification, Version 2022.2.19. Section 5.6.3.1: Sapling Payment Addresses
    - - + +
    11Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.2: Orchard Raw Payment Addresses10Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.2: Orchard Raw Payment Addresses
    - - + +
    12Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.3: Orchard Raw Incoming Viewing Keys11Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.3: Orchard Raw Incoming Viewing Keys
    - - + +
    13Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.4: Orchard Raw Full Viewing Keys12Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.4: Orchard Raw Full Viewing Keys
    - + @@ -909,7 +839,7 @@
    1413 ZIP 0: ZIP Process
    - + @@ -917,7 +847,7 @@
    1514 ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling helper functions
    - + @@ -925,7 +855,7 @@
    1615 ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling extended full viewing keys
    - + @@ -933,7 +863,7 @@
    1716 ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling diversifier derivation
    - + @@ -941,7 +871,7 @@
    1817 ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling internal key derivation
    - + @@ -949,7 +879,7 @@
    1918 ZIP 32: Shielded Hierarchical Deterministic Wallets — Orchard child key derivation
    - + @@ -957,7 +887,7 @@
    2019 ZIP 32: Shielded Hierarchical Deterministic Wallets — Orchard internal key derivation
    - + @@ -965,7 +895,7 @@
    2120 ZIP 32: Shielded Hierarchical Deterministic Wallets — Specification: Wallet usage
    - + @@ -973,23 +903,15 @@
    2221 ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling key path
    - +
    2322 ZIP 32: Shielded Hierarchical Deterministic Wallets — Orchard key path
    - - - - - - - -
    24ZIP 203: Transaction Expiry — Changes for Blossom
    - + @@ -997,7 +919,7 @@
    2523 ZIP 211: Disabling Addition of New Value to the Sprout Chain Value Pool
    - + @@ -1005,7 +927,7 @@
    2624 ZIP 224: Orchard Shielded Protocol
    - + @@ -1013,7 +935,7 @@
    2725 ZIP 315: Best Practices for Wallet Handling of Multiple Pools
    - + @@ -1021,7 +943,7 @@
    2826 ZIP 321: Payment Request URIs
    - + @@ -1029,7 +951,7 @@
    2927 BIP 32: Hierarchical Deterministic Wallets
    - + @@ -1037,7 +959,7 @@
    3028 BIP 32: Hierarchical Deterministic Wallets — Serialization Format
    - + @@ -1045,7 +967,7 @@
    3129 BIP 32: Hierarchical Deterministic Wallets — Child key derivation (CKD) functions: Public parent key → public child key
    - + @@ -1053,7 +975,7 @@
    3230 BIP 44: Multi-Account Hierarchy for Deterministic Wallets
    - + @@ -1061,7 +983,7 @@
    3331 BIP 44: Multi-Account Hierarchy for Deterministic Wallets — Path levels: Change
    - + @@ -1069,7 +991,7 @@
    3432 BIP 44: Multi-Account Hierarchy for Deterministic Wallets — Path levels: Index
    - + @@ -1077,7 +999,7 @@
    3533 BIP 350: Bech32m format for v1+ witness addresses
    - + @@ -1085,7 +1007,7 @@
    3634 Transactions: P2PKH Script Validation — Bitcoin Developer Guide
    - + @@ -1093,7 +1015,7 @@
    3735 Transactions: P2SH Scripts — Bitcoin Developer Guide
    - + diff --git a/zip-0316.rst b/zip-0316.rst index ef5c83b2f..19f6d13b5 100644 --- a/zip-0316.rst +++ b/zip-0316.rst @@ -21,9 +21,9 @@ Terminology =========== -The key words "MUST", "MUST NOT", "SHOULD", "RECOMMENDED", and "MAY" in this -document are to be interpreted as described in BCP 14 [#BCP14]_ when, and only -when, they appear in all capitals. +The key words "MUST", "MUST NOT", "SHOULD", and "MAY" in this document are +to be interpreted as described in BCP 14 [#BCP14]_ when, and only when, they +appear in all capitals. The terms below are to be interpreted as follows: @@ -90,9 +90,6 @@ Unified QR Encoding Address Encoding The externally visible encoding of an Address (e.g. as a string of characters or a QR code). -Unix Epoch Time - An integer representing a UTC time in seconds relative to the Unix Epoch - of 1970-01-01T00:00:00Z. Notation for sequences, conversions, and arithmetic operations follows the Zcash protocol specification [#protocol-notation]_. @@ -218,9 +215,9 @@ Receivers --------- Every wallet must properly *parse* encodings of a Unified Address or -Unified Viewing Key containing unrecognised Items. +Unified Viewing Key containing unrecognized Items. -A wallet may process unrecognised Items by indicating to the user their +A wallet may process unrecognized Items by indicating to the user their presence or similar information for usability or diagnostic purposes. Transport Encoding @@ -247,7 +244,7 @@ The encoding must support sufficiently many Recipient Types to allow for reasonable future expansion. The encoding must allow all wallets to safely and correctly parse out -unrecognised Receiver Types well enough to ignore them. +unrecognized Receiver Types well enough to ignore them. Transfers --------- @@ -255,7 +252,7 @@ Transfers When executing a Transfer the Sender selects a Receiver via a Selection process. -Given a valid UA, Selection must treat any unrecognised Item as though +Given a valid UA, Selection must treat any unrecognized Item as though it were absent. - This property is crucial for forward compatibility to ensure users @@ -284,7 +281,7 @@ Viewing Keys A Unified Full Viewing Key (resp. Unified Incoming Viewing Key) can be used in a similar way to a Full Viewing Key (resp. Incoming Viewing Key) -as described in the Zcash Protocol Specification [#protocol]_. +as described in the Zcash Protocol Specification [#protocol-nu5]_. For a Transparent P2PKH Address that is derived according to BIP 32 [#bip-0032]_ and BIP 44 [#bip-0044]_, the nearest equivalent to a @@ -303,12 +300,6 @@ Open Issues and Known Concerns Privacy impacts of transparent or cross-pool transactions, and the associated UX issues, will be addressed in ZIP 315 (in preparation). -Revision History -================ - -.. _`Revision 1`: - -* Revision 1: `MUST-understand Typecodes`_ and `Address Expiration Metadata`_ Specification ============= @@ -447,7 +438,7 @@ The following FVK or IVK Encodings are used in place of the P2SH Address in a UFVK or UIVK (because P2SH Addresses cannot be diversified in an unlinkable way). The Typecode :math:`\mathtt{0x01}` MUST NOT be included in a UFVK or UIVK by Producers, and MUST be - treated as unrecognised by Consumers. + treated as unrecognized by Consumers. * For Transparent P2PKH Addresses that are derived according to BIP 32 [#bip-0032]_ and BIP 44 [#bip-0044]_, the FVK and IVK Encodings have @@ -521,7 +512,7 @@ Requirements for both Unified Addresses and Unified Viewing Keys pool, this would not be generally useful. * Consumers MUST ignore constituent Items with Typecodes they do not - recognise. + recognize. * Consumers MUST reject Unified Addresses/Viewing Keys in which the same Typecode appears more than once, or that include both P2SH and @@ -531,7 +522,7 @@ Requirements for both Unified Addresses and Unified Viewing Keys * Consumers MUST reject Unified Addresses/Viewing Keys in which *any* constituent Item does not meet the validation requirements of its encoding, as specified in this ZIP and the Zcash Protocol Specification - [#protocol]_. + [#protocol-nu5]_. * Consumers MUST reject Unified Addresses/Viewing Keys in which the constituent Items are not ordered in ascending Typecode order. Note @@ -556,7 +547,7 @@ Rationale for Item ordering The rationale for requiring Items to be canonically ordered by Typecode is that it enables implementations to use an in-memory representation that discards ordering, while retaining the same round-trip serialization -of a UA / UVK (provided that unrecognised Items are retained). +of a UA / UVK (provided that unrecognized Items are retained). .. raw:: html @@ -613,114 +604,15 @@ are reserved to indicate Metadata Items other than Receivers or Viewing Keys. These Items MAY affect the overall interpretation of the UA / UVK (for example, by specifying an expiration date). -.. _`MUST-understand Typecodes`: - -As of `Revision 1`_, the subset of Metadata Typecodes in the range -:math:`mathtt{0xE0}` to :math:`mathtt{0xEF}` inclusive are designated -as "MUST-understand": if a Consumer is unable to recognise the meaning -of a Metadata Item with a Typecode in this range, then it MUST regard -the entire UA/UVK as unsupported and not process it further. - Since Metadata Items are not Receivers, they MUST NOT be selected by a Sender when choosing a Receiver to send to, and since they are not Viewing Keys, they MUST NOT provide additional authority to view information about transactions. -New Metadata Types SHOULD be introduced either by a modification to this -ZIP or by a new ZIP, in accordance with the ZIP Process [#zip-0000]_. +Currently no Metadata Types are defined. New Metadata Types SHOULD be +introduced either by a modification to this ZIP or by a new ZIP, in +accordance with the ZIP Process [#zip-0000]_. -Address Expiration Metadata ---------------------------- - -As of `Revision 1`_, Typecodes :math:`\mathtt{0xE0}` and :math:`\mathtt{0xE1}` -are reserved for optional address expiry metadata. A producer MAY choose to -generate Unified Addresses containing either or both of the following Metadata -Item Types, or none. - -The value of a :math:`\mathtt{0xE0}` item MUST be an unsigned 32-bit integer in -little-endian order specifying the Address Expiry Height, a block height of the -Zcash chain associated with the UA/UVK. A Unified Address containing metadata -Typecode :math:`\mathtt{0xE0}` MUST be considered expired when the height of -the Zcash chain is greater than this value. - -The value of a :math:`\mathtt{0xE1}` item MUST be an unsigned 64-bit integer in -little-endian order specifying a Unix Epoch Time, hereafter referred to as the -Address Expiry Time. A Unified Address containing Metadata Typecode -:math:`\mathtt{0xE1}` MUST be considered expired when the current time is -after the Address Expiry Time. - -A Sender that supports `Revision 1`_ of this specification MUST set -a non-zero ``nExpiryHeight`` field in transactions that it creates. If the -``nExpiryHeight`` normally constructed by the Sender would be greater than the -Address Expiry Height, then the transaction MUST NOT be sent. If only an -Address Expiry Time is specified, then the Sender SHOULD choose a value for -``nExpiryHeight`` such that the transaction will expire no more than 24 hours -after the current time. If both :math:`\mathtt{0xE0}` and :math:`\mathtt{0xE1}` -Metadata Items are present, then both restrictions apply. - -If wallet user attempts to send to an expired address, the error presented to -the user by the wallet SHOULD include a suggestion that the user should -attempt to obtain a currently-valid address for the intended recipient. A -wallet MUST NOT send to an address that it knows to have expired. - -Address expiration imposes no constraints on the Producer of an address. A -Producer MAY generate multiple Unified Addresses with the same Receivers but -different expiration metadata and/or any number of distinct Diversified Unified -Addresses with the same or different expiry metadata, in any combination. - -When deriving a UIVK from a UFVK containing Typecodes :math:`\mathtt{0xE0}` -and/or :math:`\mathtt{0xE1}`, these Metadata Items MUST be retained unmodified -in the derived UIVK. - -When deriving a Unified Address from a UFVK or UIVK containing a Metadata Item -having Typecode :math:`\mathtt{0xE0}`, the derived Unified Address MUST contain -a Metadata Item having Typecode :math:`\mathtt{0xE0}` such that the Address -Expiry Height of the resulting address is less than or equal to the Expiry Height -of the viewing key. - -When deriving a Unified Address from a UFVK or UIVK containing a Metadata Item -having Typecode :math:`\mathtt{0xE1}`, the derived Unified Address MUST contain -a Metadata Item having Typecode :math:`\mathtt{0xE1}` such that the Address -Expiry Time of the resulting address is less than or equal to the Expiry Time -of the viewing key. - -Producers of Diversified Unified Addresses should be aware that the expiration -metadata could potentially be used to link addresses from the same source. -Normally, if Diversified Unified Addresses derived from the same UIVK contain -only Sapling and/or Orchard Receivers and no Metadata Items, they will be -unlinkable as described in [#protocol-concretediversifyhash]_; this property -does not hold when Metadata Items are present. It is RECOMMENDED that when -deriving Unified Addresses from a UFVK or UIVK containing expiry metadata that -the Expiry Height and Expiry Time of each distinct address vary from one -another, so as to reduce the likelihood that addresses may be linked via their -expiry metadata. - -Rationale -''''''''' - -The intent of this specification is that Consumers of Unified Addresses must -not send to expired addresses. If only an Address Expiry Time is specified, a -transaction to the associated address could be mined after the Address Expiry -Time within a 24-hour window. - -The reason that the transaction MUST NOT be sent when its ``nExpiryHeight`` as -normally constructed is greater than the Address Expiry Height is to avoid -unnecessary information leakage in that field about which address was used as -the destination. If a sender were to instead use the expiry height to directly -set the ``nExpiryHeight`` field, this would leak the expiry information of the -destination address, which may then be identifiable. - -When honoring an Address Expiry Time, the reason that a sender SHOULD choose a -``nExpiryHeight`` that is expected to occur within 24 hours of the time of -transaction construction is to, when possible, ensure that the expiry time is -respected to within a day. Address Expiry Times are advisory and do not -represent hard bounds because computer clocks often disagree, but every effort -should be made to ensure that transactions expire instead of being mined more -than 24 hours after a recipient address's expiry time. When chain height -information is available to the Sender, it is both permissible and advisable to -set this bound more tightly; a common expiry delta used by many wallets is 40 -blocks from the current chain tip, as suggested in ZIP 203 -[#zip-0203-default-expiry]_. Deriving Internal Keys ---------------------- @@ -772,15 +664,6 @@ Change level is non-hardened. Deriving a UIVK from a UFVK --------------------------- -As a consequence of the specification in `MUST-understand Typecodes`_, -as of `Revision 1`_ a Consumer of a UFVK MUST understand the meaning of -all "MUST-understand" Metadata Item Typecodes present in the UFVK in -order to derive a UIVK from it. - -For Metadata Items recognised by the Consumer, the processing of the -Item when deriving a UIVK is specified in the section or ZIP describing -that Item. - The following derivations are applied to each component FVK: * For a Sapling FVK, the corresponding Sapling IVK is obtained as @@ -795,24 +678,15 @@ The following derivations are applied to each component FVK: In each case, the Typecode remains the same as in the FVK. -Items (including Metadata Items that are not "MUST-understand") that -are unrecognised by a given Consumer, or that are specified in experiments -that the user has not opted into (see `Experimental Usage`_), MUST be -dropped when deriving a UIVK from a UFVK. +Items (including Metadata Items) that are unrecognized by a given +Consumer, or that are specified in experiments that the user has not +opted into (see `Experimental Usage`_), MUST be dropped when deriving +a UIVK from a UFVK. Deriving a Unified Address from a UIVK -------------------------------------- -As a consequence of the specification in `MUST-understand Typecodes`_, -as of `Revision 1`_ a Consumer of a UIVK MUST understand the meaning of -all "MUST-understand" Metadata Item Typecodes present in the UIVK in -order to derive a Unified Address from it. - -For Metadata Items recognised by the Consumer, the processing of the -Item when deriving a Unified Address is specified in the section or -ZIP describing that Item. - To derive a Unified Address from a UIVK we need to choose a diversifier index, which MUST be valid for all of the Viewing Key Types in the UIVK. That is, @@ -847,13 +721,11 @@ diversifier index: In each case, the Typecode remains the same as in the IVK. -Items (including Metadata Items that are not "MUST-understand") that -are unrecognised by a given Consumer, or that are specified in experiments -that the user has not opted into (see `Experimental Usage`_), MUST be -dropped when deriving a Unified Address from a UIVK. +Items (including Metadata Items) that are unrecognized by a given +Consumer, or that are specified in experiments that the user has not +opted into (see `Experimental Usage`_), MUST be dropped when deriving +a Receiver from a UIVK. -See `Address Expiration Metadata`_ for discussion of potential linking of -Diversified Unified Addresses via their metadata. Usage of Outgoing Viewing Keys ------------------------------ @@ -1158,18 +1030,17 @@ References ========== .. [#BCP14] `Information on BCP 14 — "RFC 2119: Key words for use in RFCs to Indicate Requirement Levels" and "RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words" `_ -.. [#protocol] `Zcash Protocol Specification, Version 2023.4.0 or later `_ -.. [#protocol-notation] `Zcash Protocol Specification, Version 2023.4.0. Section 2: Notation `_ -.. [#protocol-saplingkeycomponents] `Zcash Protocol Specification, Version 2023.4.0. Section 4.2.2: Sapling Key Components `_ -.. [#protocol-orchardkeycomponents] `Zcash Protocol Specification, Version 2023.4.0. Section 4.2.3: Orchard Key Components `_ -.. [#protocol-saplingsend] `Zcash Protocol Specification, Version 2023.4.0. Section 4.7.2: Sending Notes (Sapling) `_ -.. [#protocol-orchardsend] `Zcash Protocol Specification, Version 2023.4.0. Section 4.7.3: Sending Notes (Orchard) `_ -.. [#protocol-concretediversifyhash] `Zcash Protocol Specification, Version 2023.4.0. Section 5.4.1.6: DiversifyHash^Sapling and DiversifyHash^Orchard Hash Functions `_ -.. [#protocol-addressandkeyencoding] `Zcash Protocol Specification, Version 2023.4.0. Section 5.6: Encodings of Addresses and Keys `_ -.. [#protocol-saplingpaymentaddrencoding] `Zcash Protocol Specification, Version 2023.4.0. Section 5.6.3.1: Sapling Payment Addresses `_ -.. [#protocol-orchardpaymentaddrencoding] `Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.2: Orchard Raw Payment Addresses `_ -.. [#protocol-orchardinviewingkeyencoding] `Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.3: Orchard Raw Incoming Viewing Keys `_ -.. [#protocol-orchardfullviewingkeyencoding] `Zcash Protocol Specification, Version 2023.4.0. Section 5.6.4.4: Orchard Raw Full Viewing Keys `_ +.. [#protocol-nu5] `Zcash Protocol Specification, Version 2022.2.19 or later [NU5 proposal] `_ +.. [#protocol-notation] `Zcash Protocol Specification, Version 2022.2.19. Section 2: Notation `_ +.. [#protocol-saplingkeycomponents] `Zcash Protocol Specification, Version 2022.2.19. Section 4.2.2: Sapling Key Components `_ +.. [#protocol-orchardkeycomponents] `Zcash Protocol Specification, Version 2022.2.19. Section 4.2.3: Orchard Key Components `_ +.. [#protocol-saplingsend] `Zcash Protocol Specification, Version 2022.2.19. Section 4.7.2: Sending Notes (Sapling) `_ +.. [#protocol-orchardsend] `Zcash Protocol Specification, Version 2022.2.19. Section 4.7.3: Sending Notes (Orchard) `_ +.. [#protocol-addressandkeyencoding] `Zcash Protocol Specification, Version 2022.2.19. Section 5.6: Encodings of Addresses and Keys `_ +.. [#protocol-saplingpaymentaddrencoding] `Zcash Protocol Specification, Version 2022.2.19. Section 5.6.3.1: Sapling Payment Addresses `_ +.. [#protocol-orchardpaymentaddrencoding] `Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.2: Orchard Raw Payment Addresses `_ +.. [#protocol-orchardinviewingkeyencoding] `Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.3: Orchard Raw Incoming Viewing Keys `_ +.. [#protocol-orchardfullviewingkeyencoding] `Zcash Protocol Specification, Version 2022.2.19. Section 5.6.4.4: Orchard Raw Full Viewing Keys `_ .. [#zip-0000] `ZIP 0: ZIP Process `_ .. [#zip-0032-sapling-helper-functions] `ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling helper functions `_ .. [#zip-0032-sapling-extfvk] `ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling extended full viewing keys `_ @@ -1180,7 +1051,6 @@ References .. [#zip-0032-specification-wallet-usage] `ZIP 32: Shielded Hierarchical Deterministic Wallets — Specification: Wallet usage `_ .. [#zip-0032-sapling-key-path] `ZIP 32: Shielded Hierarchical Deterministic Wallets — Sapling key path `_ .. [#zip-0032-orchard-key-path] `ZIP 32: Shielded Hierarchical Deterministic Wallets — Orchard key path `_ -.. [#zip-0203-default-expiry] `ZIP 203: Transaction Expiry — Changes for Blossom `_ .. [#zip-0211] `ZIP 211: Disabling Addition of New Value to the Sprout Chain Value Pool `_ .. [#zip-0224] `ZIP 224: Orchard Shielded Protocol `_ .. [#zip-0315] `ZIP 315: Best Practices for Wallet Handling of Multiple Pools `_
    3836 Variable length integer. Bitcoin Wiki