diff --git a/rendered/zip-0227.html b/rendered/zip-0227.html index 3039bb82a..ec14a6e17 100644 --- a/rendered/zip-0227.html +++ b/rendered/zip-0227.html @@ -75,7 +75,7 @@
Batch verification MAY be used. Precomputation MAY be used if and only if it produces equivalent results; for example, for a given verification key \(pk\) and @@ -122,7 +122,7 @@ \(k\) bytes, and \(\mathbb{B}^{\mathbb{Y}^{[\mathbb{N}]}}\) - denotes the type of byte sequences of arbitrary length, as defined in the Zcash protocol specification 23.
+ denotes the type of byte sequences of arbitrary length, as defined in the Zcash protocol specification 24.The issuance authorizing key generation algorithm and the issuance validating key derivation algorithm are defined in the Issuance Key Derivation section, while the corresponding signing and validation algorithms are defined in the Issuance Authorization Signing and Validation section.
where the \(\textit{PubKey}\) - algorithm is defined in BIP 340 22. Note that the byte representation of + algorithm is defined in BIP 340 23. Note that the byte representation of \(\mathsf{ik}\) is in big-endian order as defined in BIP 340.
It is possible for the @@ -240,7 +240,7 @@ \(\mathsf{Sign}\) algorithm is defined in BIP 340 and \(a\) - denotes the auxiliary data used in BIP 340 22. Note that + denotes the auxiliary data used in BIP 340 23. Note that \(\mathsf{IssueAuthSig.Sign}\) could return \(\bot\) @@ -264,7 +264,7 @@
where the \(\mathsf{Verify}\) - algorithm is defined in BIP 340 22.
+ algorithm is defined in BIP 340 23.The relations between the Asset Identifier, Asset Digest, and Asset Base are shown in the following diagram:
TODO: Fill this section.
+The maximum total supply of any issued Custom Asset is denoted by the constant + \(\mathsf{MAX\_ISSUE} := 2^{64} - 1\!\) + .
+An Issue Note represents that a value + \(\mathsf{v} : \{0 .. \mathsf{MAX\_ISSUE}\}\) + of a specific Custom Asset is issued to a recipient. An Issue Note is a tuple + \((\mathsf{d}, \mathsf{pk_d}, \mathsf{v}, \mathsf{AssetBase}, \text{ρ}, \mathsf{rseed})\!\) + , where:
+The complete encoding of these fields into an IssueNote
is defined in ZIP 230 16.
TO BE FILLED
+An issuance action, IssueAction
, is the instance of issuing a specific Custom Asset, and contains the following fields:
assetDescSize
: the size of the Asset description, a number between
@@ -349,7 +380,7 @@
The \(\mathsf{finalize}\) boolean is set by the Issuer to signal that there will be no further issuance of the specific Custom Asset. As we will see in Specification: Consensus Rule Changes, transactions that attempt to issue further amounts of a Custom Asset that has previously been finalized will be rejected.
-The complete encoding of these fields into an IssueAction
is defined in ZIP 230 15.
The complete encoding of these fields into an IssueAction
is defined in ZIP 230 15.
We note that the output note commitment of the recipient's notes are not included in the actual transaction, but when added to the global state of the chain, they will be added to the note commitment tree as a shielded note. This prevents future usage of the note from being linked to the issuance transaction, as the nullifier key is not known to the validators and chain observers.
The issuance bundle is added within the transaction format as a new bundle. The detailed encoding of the issuance bundle as a part of the V6 transaction format is defined in ZIP 230 16.
+The issuance bundle is added within the transaction format as a new bundle. The detailed encoding of the issuance bundle as a part of the V6 transaction format is defined in ZIP 230 17.
The issuer program performs the following operations:
@@ -495,7 +526,7 @@ .IssueAction
MUST be valid encodings of the types given in Issue Note Description, and MUST encode the same
+ IssueAction
MUST be valid encodings of the types given in Issue Note, and MUST encode the same
\(\mathsf{AssetBase}\!\)
.It is necessary to ensure that the balance of any issued Custom Asset never becomes negative within a shielded pool, along the lines of ZIP 209 8. However, unlike for the shielded ZEC pools, there is no individual transaction field that directly corresponds to both the issued and burnt amounts for a given Asset. Therefore, we require that all nodes maintain a record of the current amount in circulation for every issued Custom Asset, and update this record based on the issuance and burn transactions processed. This allows for efficient detection of balance violations for any Asset, in which scenario we specify a consensus rule to reject the transaction or block.
+It is necessary to ensure that the balance of any issued Custom Asset never becomes negative within a shielded pool, along the lines of ZIP 209 8. However, unlike for the shielded ZEC pools, there is no individual transaction field that directly corresponds to both the issued and burnt amounts for a given Asset. Therefore, we require that all nodes maintain a record of the current amount in circulation for every issued Custom Asset, and update this record based on the issuance and burn transactions processed. This allows for efficient detection of balance violations for any Asset, in which scenario we specify a consensus rule to reject the transaction or block.
We limit the total issuance of any Asset to a maximum of \(\mathsf{MAX\_ISSUE}\!\) . This is a practical limit that also allows an issuer to issue the complete supply of an Asset in a single transaction.
@@ -607,7 +638,7 @@This section details the construction of the subtree of hashes in the transaction digest that corresponds to issuance transaction data. Details of the overall changes to the transaction digest due to the OrchardZSA protocol can be found in ZIP 226 13. As in ZIP 244 18, the digests are all personalized BLAKE2b-256 hashes, and in cases where no elements are available for hashing, a personalized hash of the empty byte array is used.
+This section details the construction of the subtree of hashes in the transaction digest that corresponds to issuance transaction data. Details of the overall changes to the transaction digest due to the OrchardZSA protocol can be found in ZIP 226 13. As in ZIP 244 19, the digests are all personalized BLAKE2b-256 hashes, and in cases where no elements are available for hashing, a personalized hash of the empty byte array is used.
A new issuance transaction digest algorithm is defined that constructs the subtree of the transaction digest tree of hashes for the issuance portion of a transaction. Each branch of the subtree will correspond to a specific subset of issuance transaction data. The overall structure of the hash is as follows; each name referenced here will be described in detail below:
issuance_digest ├── issue_actions_digest @@ -676,7 +707,7 @@In case the transaction has no Issue Notes, ''issue_notes_digest'' is:
BLAKE2b-256("ZTxIdIAcNoteHash", [])T.5a.i.1: recipient
-This is the raw encoding of an Orchard shielded payment address as defined in the protocol specification 28.
+This is the raw encoding of an Orchard shielded payment address as defined in the protocol specification 30.
T.5a.i.2: value
Note value encoded as little-endian 8-byte representation of 64-bit unsigned integer (e.g. u64 in Rust) raw value.
@@ -710,7 +741,7 @@
The per-input transaction digest algorithm to generate the signature digest in ZIP 244 19 is modified so that a signature digest is produced for each transparent input, each Sapling input, each Orchard action, and additionally for each Issuance Action. For Issuance Actions, this algorithm has the exact same output as the transaction digest algorithm, thus the txid may be signed directly.
+The per-input transaction digest algorithm to generate the signature digest in ZIP 244 20 is modified so that a signature digest is produced for each transparent input, each Sapling input, each Orchard action, and additionally for each Issuance Action. For Issuance Actions, this algorithm has the exact same output as the transaction digest algorithm, thus the txid may be signed directly.
The overall structure of the hash is as follows. We highlight the changes for the OrchardZSA protocol via the [ADDED FOR ZSA]
text label, and we omit the descriptions of the sections that do not change for the OrchardZSA protocol:
signature_digest ├── header_digest @@ -725,14 +756,14 @@ S.3: sapling_digest (32-byte hash output) S.4: orchard_digest (32-byte hash output) S.5: issuance_digest (32-byte hash output) [ADDED FOR ZSA]-
The personalization field remains the same as in ZIP 244 18.
+The personalization field remains the same as in ZIP 244 19.
Identical to that specified for the transaction identifier.
In addition to the parameters defined in the Fee calculation section of ZIP 317 20, the OrchardZSA protocol upgrade defines the following additional parameters:
+In addition to the parameters defined in the Fee calculation section of ZIP 317 21, the OrchardZSA protocol upgrade defines the following additional parameters:
The other inputs to this formula are taken from transaction fields defined in the Zcash protocol specification 29 and the global state. They are defined in the Fee calculation section of ZIP 317 20. Note that +
The other inputs to this formula are taken from transaction fields defined in the Zcash protocol specification 31 and the global state. They are defined in the Fee calculation section of ZIP 317 21. Note that \(nOrchardActions\!\) , that is used in the computation of \(logical\_actions\!\) @@ -842,7 +873,7 @@
For bridging purposes, the secure method of off-boarding Assets is to burn an Asset with the burning mechanism in ZIP 226 10. Users should be aware of issuers that demand the Assets be sent to a specific address on the Zcash chain to be redeemed elsewhere, as this may not reflect the real reserve value of the specific Wrapped Asset.
+For bridging purposes, the secure method of off-boarding Assets is to burn an Asset with the burning mechanism in ZIP 226 10. Users should be aware of issuers that demand the Assets be sent to a specific address on the Zcash chain to be redeemed elsewhere, as this may not reflect the real reserve value of the specific Wrapped Asset.
The fee mechanism described in this ZIP will follow the mechanism described in ZIP 317, and is described in ZIP 230 17.
+The fee mechanism described in this ZIP will follow the mechanism described in ZIP 317, and is described in ZIP 230 18.
16 | +ZIP 230: Version 6 Transaction Format: Issue Note (IssueNote) | +
---|
17 | ZIP 230: Version 6 Transaction Format: Transaction Format |
---|
17 | +18 | ZIP 230: Version 6 Transaction Format: OrchardZSA Fee Calculation |
---|
18 | +19 | ZIP 244: Transaction Identifier Non-Malleability |
---|
19 | +20 | ZIP 244: Transaction Identifier Non-Malleability: Signature Digest |
---|
20 | +21 | ZIP 317: Proportional Transfer Fee Mechanism, Fee calculation |
---|
21 | +22 | BIP 43: Purpose Field for Deterministic Wallets |
---|
22 | +23 | BIP 340: Schnorr Signatures for secp256k1 |
---|
23 | +24 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 2: Notation |
---|
24 | +25 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.1: Payment Addresses and Keys |
---|
26 | +Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.2: Notes | +
---|
25 | +27 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 4.2.3: Orchard Key Components |
---|
26 | +28 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 4.10: SIGHASH Transaction Hashing |
---|
27 | +29 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 5.4.9.8: Group Hash into Pallas and Vesta |
---|
28 | +30 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 5.6.4.2: Orchard Raw Payment Addresses |
---|
29 | +31 | Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 7.1: Transaction Encoding and Consensus |
---|