You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The generators $G, G_i, \widetilde{G}_i, H, H_i, J_0, J_1, \widetilde{H}, \widetilde{H}_i$ can be derived using a hash-to-curve method.
17
+
The generators $G, G_i, \widetilde{G}_i, H, H_i, J_0, \widetilde{H}, \widetilde{H}_i$ can be derived using a hash-to-curve method.
18
18
19
19
For a point $P$, the notations $P.x$ and $P.y$ refer to its $x$-coordinate and $y$-coordinate, respectively.
20
20
@@ -190,7 +190,7 @@ The encryption key is only used to decrypt the transactions while affirmation ke
190
190
191
191
This also allows for a situation where the investor can have a custodian who has the affirmation key and investor with only the encryption key can see all transactions created for him. Even if a malicious settlement creator and custodian collude, they cannot create a settlement involving the investor which the investor can't decrypt.
192
192
193
-
An encryption key can be shared between auditors and mediators. In that case, the $\mathrm{EK}$ appears in the asset leaf as an auditor key, and the mediator's leaf entry references it by index $\mathrm{idx}$. This way they both use the same $\mathrm{EK}$ to decrypt leg encryptions. Sharing encryption keys makes settlement creation proofs cheaper.
193
+
An encryption key can be shared between auditors and mediators. In that case, the $\mathrm{EK}$ appears in the asset leaf as an auditor key and the mediator uses it to decrypt leg encryptions. Which encryption key a mediator holds is kept private — a mediator's affirmation key is broadcast-encrypted to every $\mathrm{EK}$ of the asset, so no encryption-key index is stored in the leaf. Sharing encryption keys makes settlement creation proofs cheaper.
194
194
195
195
All public keys are in the Pallas curve.
196
196
@@ -283,16 +283,16 @@ Note that in the new state $\mathrm{State}_{i+1}$, fields $\mathrm{sk}, \mathrm{
283
283
The system uses curve trees as accumulator and has 3 curve trees.
284
284
285
285
1. Asset curve tree: Each leaf of this tree corresponds to an asset and stores the $\mathrm{asset\_id}$ and the public keys of its auditors and mediators. When issuers register a new asset, a new leaf is added to this tree. When they update existing asset, their leaf is updated accordingly.
286
-
A leaf of the asset tree is a group element in $\mathbb{G}_q$ and thus a point on Vesta curve. It is a non-hiding Pedersen commitment to the x-coordinates of several points in $\mathbb{G}_p$:
A leaf of the asset tree is a group element in $\mathbb{G}_q$ and thus a point on Vesta curve. It is a non-hiding Pedersen commitment to both coordinates of several points in $\mathbb{G}_p$ (two generators per point), followed by the mediator count $m$ committed as a scalar under one trailing generator:
where the points $P_i \in \mathbb{G}_p$ are constructed as:
289
-
- $P_0 = \mathrm{asset\_id} \cdot J_0$
289
+
- $P_0 = (\mathrm{asset\_id} + 1) \cdot J_0$ (the $+1$ offset keeps $P_0$ off the identity even when $\mathrm{asset\_id} = 0$, which committing both coordinates rejects)
290
290
- For each of the $n$ auditor (encryption) keys $\mathrm{EK}_i$: $P_i = \mathrm{EK}_i$
291
-
- For each of the $m$ mediator keys $\mathrm{MK}_j$ with its associated encryption key index $\mathrm{idx}_j$: $P_{n+j} = J_0 + J_1 \cdot \mathrm{idx}_j + \mathrm{MK}_j$
291
+
- For each of the $m$ mediator keys $\mathrm{MK}_j$: $P_{n+j} = \mathrm{MK}_j$ (the bare affirmation key)
292
292
293
-
The generators $J_0, J_1 \in \mathbb{G}_p$ are public. The $J_1 \cdot \mathrm{idx}_j$ term encodes which of the asset's encryption keys is associated with mediator $j$. Mediators have both an encryption key (shared with auditors, for decrypting the leg) and an affirmation key $\mathrm{MK}_j$ (for signing their decision). The leaf encodes both by combining them into a single point.
294
-
295
-
As with the account trees, x-coordinates are taken by adding a public $\Delta$ before taking the x-coordinate.
293
+
The generator $J_0\in \mathbb{G}_p$ is public. Mediators have both an encryption key (shared with auditors, for decrypting the leg) and an affirmation key $\mathrm{MK}_j$ (for signing their decision); the affirmation key goes in the leaf as a bare point, and which encryption key a mediator shares is not stored — only the mediator count $m$ is committed, under the trailing generator.
294
+
295
+
Unlike the account trees (whose leaves are committed by their x-coordinate after adding a public $\Delta$), the asset leaf commits both coordinates of each point and no $\Delta$ shift is used. Committing both coordinates pins each point fully; committing only $(P_i + \Delta).x$ would leave the y-sign free (see the "Pedersen Commitment to Curve Points" protocol in 4.md).
296
296
297
297
2. Fee account curve tree: Each leaf of this tree corresponds to an account state for a fee paying asset. As fee payments are done, existing states of those accounts are invalidated by revealing the nullifier (more on that later) and new states are added. A leaf of this tree is an account state as:
Note: $\mathrm{ctr}$ is a public input (part of the instance) but is not hashed into the challenge; it is bound to the proof through the Poseidon2 R1CS constraint $\rho = \mathrm{Poseidon2}(\mathrm{rho\_randomness}, \mathrm{at}\mathbin{\|}\mathrm{ctr})$, where $\mathrm{at}\mathbin{\|}\mathrm{ctr}$ is the public constant supplied by the verifier — so a wrong $\mathrm{ctr}$ fails the circuit.
137
138
13. Prover now creates responses for each sigma protocol as:
0 commit comments