Skip to main content

Appendix: Action Circuit Gate Constraints

This appendix lists every gate of the Orchard Action circuit: 55 source-level gates holding 193 polynomial constraints in total. Each polynomial PP vanishes on every valid assignment: P=0P = 0.

Provenance. The gates are read from the Debug rendering of the freshly configured (pre-compress_selectors) halo2_proofs::plonk::ConstraintSystem, emitted by the dump_action_constraint_system test in the orchard crate and vendored at onboarding/data/orchard-action-constraint-system.txt. Unlike the pinned verifying key, this rendering keeps every meta.create_gate(...) name, the per-constraint labels passed to Constraints::with_selector, and the original polynomials before Halo 2's selector-compression pass rewrites them. To regenerate after a circuit change, run make appendix-gates from the onboarding/ directory.

Why this shape. Grouping by source-level gate (rather than by the compressed fixed column of the verifying key) keeps the doc next to the code: each gate below is one create_gate call, each named constraint is one proof obligation, and the polynomial is the exact expression to formalise. This is the obligation list for verifying the gates one at a time.

Notation.

  • AcA_c, Ac(+r)A_c^{(+r)}, Ac(r)A_c^{(-r)}: advice column cc at the current row, rotated by +r+r or r-r.
  • FcF_c, IcI_c: fixed and instance column cc (with the same rotation notation).
  • Each constraint is enforced only when the gate's selector is active. That selector factor is peeled off and shown as "selector qnq_n" in the heading, so the polynomial below is the constraint body alone.
  • Constants are rendered in hex. Values below 0xffff are shown in full; larger values are truncated to a six-hex-digit head followed by \ldots to keep KaTeX readable.

Summary

#GateConstraintsSource
1Orchard circuit checks4Action (src/circuit.rs)
2Field element addition: c = a + b1AddChip (src/circuit/gadget/add_chip.rs)
3Short lookup bitshift1EccChip / utilities (halo2_gadgets)
4witness point2EccChip / utilities (halo2_gadgets)
5witness non-identity point1EccChip / utilities (halo2_gadgets)
6incomplete addition2EccChip / utilities (halo2_gadgets)
7complete addition12EccChip / utilities (halo2_gadgets)
8q_mul_1 == 1 checks1EccChip / utilities (halo2_gadgets)
9q_mul_2 == 1 checks6EccChip / utilities (halo2_gadgets)
10q_mul_3 == 1 checks4EccChip / utilities (halo2_gadgets)
11q_mul_1 == 1 checks1EccChip / utilities (halo2_gadgets)
12q_mul_2 == 1 checks6EccChip / utilities (halo2_gadgets)
13q_mul_3 == 1 checks4EccChip / utilities (halo2_gadgets)
14Decompose scalar for complete bits of variable-base mul2EccChip / utilities (halo2_gadgets)
15overflow checks5EccChip / utilities (halo2_gadgets)
16LSB check3EccChip / utilities (halo2_gadgets)
17range check1EccChip / utilities (halo2_gadgets)
18Running sum coordinates check3EccChip / utilities (halo2_gadgets)
19Full-width fixed-base scalar mul4EccChip / utilities (halo2_gadgets)
20Short fixed-base mul gate4EccChip / utilities (halo2_gadgets)
21Canonicity checks8EccChip / utilities (halo2_gadgets)
22full round3PoseidonChip (halo2_gadgets)
23partial rounds4PoseidonChip (halo2_gadgets)
24pad-and-add3PoseidonChip (halo2_gadgets)
25Initial y_Q1SinsemillaChip (halo2_gadgets)
26Sinsemilla gate2SinsemillaChip (halo2_gadgets)
27a' = b ⋅ swap + a ⋅ (1-swap)3MerkleChip (halo2_gadgets)
28Decomposition check4MerkleChip (halo2_gadgets)
29Initial y_Q1SinsemillaChip (halo2_gadgets)
30Sinsemilla gate2SinsemillaChip (halo2_gadgets)
31a' = b ⋅ swap + a ⋅ (1-swap)3MerkleChip (halo2_gadgets)
32Decomposition check4MerkleChip (halo2_gadgets)
33CommitIvk canonicity check14CommitIvkChip (src/circuit/commit_ivk.rs)
34NoteCommit MessagePiece b3NoteCommitChip (src/circuit/note_commit.rs)
35NoteCommit MessagePiece d3NoteCommitChip (src/circuit/note_commit.rs)
36NoteCommit MessagePiece e1NoteCommitChip (src/circuit/note_commit.rs)
37NoteCommit MessagePiece g2NoteCommitChip (src/circuit/note_commit.rs)
38NoteCommit MessagePiece h2NoteCommitChip (src/circuit/note_commit.rs)
39NoteCommit input g_d5NoteCommitChip (src/circuit/note_commit.rs)
40NoteCommit input pk_d4NoteCommitChip (src/circuit/note_commit.rs)
41NoteCommit input value1NoteCommitChip (src/circuit/note_commit.rs)
42NoteCommit input rho4NoteCommitChip (src/circuit/note_commit.rs)
43NoteCommit input psi5NoteCommitChip (src/circuit/note_commit.rs)
44y coordinate checks7NoteCommitChip (src/circuit/note_commit.rs)
45NoteCommit MessagePiece b3NoteCommitChip (src/circuit/note_commit.rs)
46NoteCommit MessagePiece d3NoteCommitChip (src/circuit/note_commit.rs)
47NoteCommit MessagePiece e1NoteCommitChip (src/circuit/note_commit.rs)
48NoteCommit MessagePiece g2NoteCommitChip (src/circuit/note_commit.rs)
49NoteCommit MessagePiece h2NoteCommitChip (src/circuit/note_commit.rs)
50NoteCommit input g_d5NoteCommitChip (src/circuit/note_commit.rs)
51NoteCommit input pk_d4NoteCommitChip (src/circuit/note_commit.rs)
52NoteCommit input value1NoteCommitChip (src/circuit/note_commit.rs)
53NoteCommit input rho4NoteCommitChip (src/circuit/note_commit.rs)
54NoteCommit input psi5NoteCommitChip (src/circuit/note_commit.rs)
55y coordinate checks7NoteCommitChip (src/circuit/note_commit.rs)

Gates by chip

  • Action (src/circuit.rs): gates 1
  • AddChip (src/circuit/gadget/add_chip.rs): gates 2
  • CommitIvkChip (src/circuit/commit_ivk.rs): gates 33
  • EccChip / utilities (halo2_gadgets): gates 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
  • MerkleChip (halo2_gadgets): gates 27, 28, 31, 32
  • NoteCommitChip (src/circuit/note_commit.rs): gates 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55
  • PoseidonChip (halo2_gadgets): gates 22, 23, 24
  • SinsemillaChip (halo2_gadgets): gates 25, 26, 29, 30

Gate 1. Orchard circuit checks

Source: Action (src/circuit.rs). 4 constraints.

v_old - v_new = magnitude * sign (selector q0q_{0})

A0+(A1)+((A2)(A3))=0A_{0} + -\left(A_{1}\right) + -\left(\left(A_{2}\right) \cdot \left(A_{3}\right)\right) = 0

Either v_old = 0, or root = anchor (selector q0q_{0})

(A0)(A4+(A5))=0\left(A_{0}\right) \cdot \left(A_{4} + -\left(A_{5}\right)\right) = 0

v_old = 0 or enable_spends = 1 (selector q0q_{0})

(A0)(0x1+(A6))=0\left(A_{0}\right) \cdot \left(\mathtt{0x1} + -\left(A_{6}\right)\right) = 0

v_new = 0 or enable_outputs = 1 (selector q0q_{0})

(A1)(0x1+(A7))=0\left(A_{1}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right) = 0

Gate 2. Field element addition: c = a + b

Source: AddChip (src/circuit/gadget/add_chip.rs). 1 constraint.

constraint 1 (selector q1q_{1})

A7+A8+(A6)=0A_{7} + A_{8} + -\left(A_{6}\right) = 0

Gate 3. Short lookup bitshift

Source: EccChip / utilities (halo2_gadgets). 1 constraint.

constraint 1 (selector q4q_{4})

(0x400(A9(1)))(A9(+1))+(A9)=0\left(\mathtt{0x400} \cdot \left(A_{9}^{(-1)}\right)\right) \cdot \left(A_{9}^{(+1)}\right) + -\left(A_{9}\right) = 0

Gate 4. witness point

Source: EccChip / utilities (halo2_gadgets). 2 constraints.

x == 0 v on_curve

((q5)(A0))((A1)(A1)+(((A0)(A0))(A0))+(0x5))=0\left(\left(q_{5}\right) \cdot \left(A_{0}\right)\right) \cdot \left(\left(A_{1}\right) \cdot \left(A_{1}\right) + -\left(\left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right) \cdot \left(A_{0}\right)\right) + -\left(\mathtt{0x5}\right)\right) = 0

y == 0 v on_curve

((q5)(A1))((A1)(A1)+(((A0)(A0))(A0))+(0x5))=0\left(\left(q_{5}\right) \cdot \left(A_{1}\right)\right) \cdot \left(\left(A_{1}\right) \cdot \left(A_{1}\right) + -\left(\left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right) \cdot \left(A_{0}\right)\right) + -\left(\mathtt{0x5}\right)\right) = 0

Gate 5. witness non-identity point

Source: EccChip / utilities (halo2_gadgets). 1 constraint.

on_curve (selector q6q_{6})

(A1)(A1)+(((A0)(A0))(A0))+(0x5)=0\left(A_{1}\right) \cdot \left(A_{1}\right) + -\left(\left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right) \cdot \left(A_{0}\right)\right) + -\left(\mathtt{0x5}\right) = 0

Gate 6. incomplete addition

Source: EccChip / utilities (halo2_gadgets). 2 constraints.

x_r (selector q7q_{7})

((A2(+1)+A2+A0)(A0+(A2)))(A0+(A2))+((A1+(A3))(A1+(A3)))=0\left(\left(A_{2}^{(+1)} + A_{2} + A_{0}\right) \cdot \left(A_{0} + -\left(A_{2}\right)\right)\right) \cdot \left(A_{0} + -\left(A_{2}\right)\right) + -\left(\left(A_{1} + -\left(A_{3}\right)\right) \cdot \left(A_{1} + -\left(A_{3}\right)\right)\right) = 0

y_r (selector q7q_{7})

(A3(+1)+A3)(A0+(A2))+((A1+(A3))(A2+(A2(+1))))=0\left(A_{3}^{(+1)} + A_{3}\right) \cdot \left(A_{0} + -\left(A_{2}\right)\right) + -\left(\left(A_{1} + -\left(A_{3}\right)\right) \cdot \left(A_{2} + -\left(A_{2}^{(+1)}\right)\right)\right) = 0

Gate 7. complete addition

Source: EccChip / utilities (halo2_gadgets). 12 constraints.

1 (selector q8q_{8})

(A2+(A0))((A2+(A0))(A4)+(A3+(A1)))=0\left(A_{2} + -\left(A_{0}\right)\right) \cdot \left(\left(A_{2} + -\left(A_{0}\right)\right) \cdot \left(A_{4}\right) + -\left(A_{3} + -\left(A_{1}\right)\right)\right) = 0

2 (selector q8q_{8})

(0x1+((A2+(A0))(A5)))(((0x2)(A1))(A4)+((0x3)((A0)(A0))))=0\left(\mathtt{0x1} + -\left(\left(A_{2} + -\left(A_{0}\right)\right) \cdot \left(A_{5}\right)\right)\right) \cdot \left(\left(\left(\mathtt{0x2}\right) \cdot \left(A_{1}\right)\right) \cdot \left(A_{4}\right) + -\left(\left(\mathtt{0x3}\right) \cdot \left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right)\right)\right) = 0

3a (selector q8q_{8})

(((A0)(A2))(A2+(A0)))((A4)(A4)+(A0)+(A2)+(A2(+1)))=0\left(\left(\left(A_{0}\right) \cdot \left(A_{2}\right)\right) \cdot \left(A_{2} + -\left(A_{0}\right)\right)\right) \cdot \left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{0}\right) + -\left(A_{2}\right) + -\left(A_{2}^{(+1)}\right)\right) = 0

3b (selector q8q_{8})

(((A0)(A2))(A2+(A0)))((A4)(A0+(A2(+1)))+(A1)+(A3(+1)))=0\left(\left(\left(A_{0}\right) \cdot \left(A_{2}\right)\right) \cdot \left(A_{2} + -\left(A_{0}\right)\right)\right) \cdot \left(\left(A_{4}\right) \cdot \left(A_{0} + -\left(A_{2}^{(+1)}\right)\right) + -\left(A_{1}\right) + -\left(A_{3}^{(+1)}\right)\right) = 0

3c (selector q8q_{8})

(((A0)(A2))(A3+A1))((A4)(A4)+(A0)+(A2)+(A2(+1)))=0\left(\left(\left(A_{0}\right) \cdot \left(A_{2}\right)\right) \cdot \left(A_{3} + A_{1}\right)\right) \cdot \left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{0}\right) + -\left(A_{2}\right) + -\left(A_{2}^{(+1)}\right)\right) = 0

3d (selector q8q_{8})

(((A0)(A2))(A3+A1))((A4)(A0+(A2(+1)))+(A1)+(A3(+1)))=0\left(\left(\left(A_{0}\right) \cdot \left(A_{2}\right)\right) \cdot \left(A_{3} + A_{1}\right)\right) \cdot \left(\left(A_{4}\right) \cdot \left(A_{0} + -\left(A_{2}^{(+1)}\right)\right) + -\left(A_{1}\right) + -\left(A_{3}^{(+1)}\right)\right) = 0

4a (selector q8q_{8})

(0x1+((A0)(A6)))(A2(+1)+(A2))=0\left(\mathtt{0x1} + -\left(\left(A_{0}\right) \cdot \left(A_{6}\right)\right)\right) \cdot \left(A_{2}^{(+1)} + -\left(A_{2}\right)\right) = 0

4b (selector q8q_{8})

(0x1+((A0)(A6)))(A3(+1)+(A3))=0\left(\mathtt{0x1} + -\left(\left(A_{0}\right) \cdot \left(A_{6}\right)\right)\right) \cdot \left(A_{3}^{(+1)} + -\left(A_{3}\right)\right) = 0

5a (selector q8q_{8})

(0x1+((A2)(A7)))(A2(+1)+(A0))=0\left(\mathtt{0x1} + -\left(\left(A_{2}\right) \cdot \left(A_{7}\right)\right)\right) \cdot \left(A_{2}^{(+1)} + -\left(A_{0}\right)\right) = 0

5b (selector q8q_{8})

(0x1+((A2)(A7)))(A3(+1)+(A1))=0\left(\mathtt{0x1} + -\left(\left(A_{2}\right) \cdot \left(A_{7}\right)\right)\right) \cdot \left(A_{3}^{(+1)} + -\left(A_{1}\right)\right) = 0

6a (selector q8q_{8})

(0x1+((A2+(A0))(A5))+((A3+A1)(A8)))(A2(+1))=0\left(\mathtt{0x1} + -\left(\left(A_{2} + -\left(A_{0}\right)\right) \cdot \left(A_{5}\right)\right) + -\left(\left(A_{3} + A_{1}\right) \cdot \left(A_{8}\right)\right)\right) \cdot \left(A_{2}^{(+1)}\right) = 0

6b (selector q8q_{8})

(0x1+((A2+(A0))(A5))+((A3+A1)(A8)))(A3(+1))=0\left(\mathtt{0x1} + -\left(\left(A_{2} + -\left(A_{0}\right)\right) \cdot \left(A_{5}\right)\right) + -\left(\left(A_{3} + A_{1}\right) \cdot \left(A_{8}\right)\right)\right) \cdot \left(A_{3}^{(+1)}\right) = 0

Gate 8. q_mul_1 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 1 constraint.

init y_a (selector q9q_{9})

A4+(0x200000((A4(+1)+A5(+1))(A3(+1)+((A4(+1))(A4(+1))+(A3(+1))+(A0(+1))))))=0A_{4} + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4}^{(+1)} + A_{5}^{(+1)}\right) \cdot \left(A_{3}^{(+1)} + -\left(\left(A_{4}^{(+1)}\right) \cdot \left(A_{4}^{(+1)}\right) + -\left(A_{3}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right)\right)\right)\right)\right) = 0

Gate 9. q_mul_2 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 6 constraints.

x_p_check (selector q10q_{10})

A0+(A0(+1))=0A_{0} + -\left(A_{0}^{(+1)}\right) = 0

y_p_check (selector q10q_{10})

A1+(A1(+1))=0A_{1} + -\left(A_{1}^{(+1)}\right) = 0

bool_check (selector q10q_{10})

(A9+(0x2(A9(1))))(0x1+(A9+(0x2(A9(1)))))=0\left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right)\right) = 0

gradient_1 (selector q10q_{10})

(A4)(A3+(A0))+(0x200000((A4+A5)(A3+((A4)(A4)+(A3)+(A0)))))+(0x2(A9+(0x2(A9(1))))+(0x1))(A1)=0\left(A_{4}\right) \cdot \left(A_{3} + -\left(A_{0}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4} + A_{5}\right) \cdot \left(A_{3} + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right) + -\left(\mathtt{0x1}\right)\right) \cdot \left(A_{1}\right) = 0

secant_line (selector q10q_{10})

(A5)(A5)+(A3(+1))+((A4)(A4)+(A3)+(A0))+(A3)=0\left(A_{5}\right) \cdot \left(A_{5}\right) + -\left(A_{3}^{(+1)}\right) + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right) + -\left(A_{3}\right) = 0

gradient_2 (selector q10q_{10})

(A5)(A3+(A3(+1)))+(0x200000((A4+A5)(A3+((A4)(A4)+(A3)+(A0)))))+(0x200000((A4(+1)+A5(+1))(A3(+1)+((A4(+1))(A4(+1))+(A3(+1))+(A0(+1))))))=0\left(A_{5}\right) \cdot \left(A_{3} + -\left(A_{3}^{(+1)}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4} + A_{5}\right) \cdot \left(A_{3} + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4}^{(+1)} + A_{5}^{(+1)}\right) \cdot \left(A_{3}^{(+1)} + -\left(\left(A_{4}^{(+1)}\right) \cdot \left(A_{4}^{(+1)}\right) + -\left(A_{3}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right)\right)\right)\right)\right) = 0

Gate 10. q_mul_3 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 4 constraints.

bool_check (selector q11q_{11})

(A9+(0x2(A9(1))))(0x1+(A9+(0x2(A9(1)))))=0\left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right)\right) = 0

gradient_1 (selector q11q_{11})

(A4)(A3+(A0))+(0x200000((A4+A5)(A3+((A4)(A4)+(A3)+(A0)))))+(0x2(A9+(0x2(A9(1))))+(0x1))(A1)=0\left(A_{4}\right) \cdot \left(A_{3} + -\left(A_{0}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4} + A_{5}\right) \cdot \left(A_{3} + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(A_{9} + -\left(\mathtt{0x2} \cdot \left(A_{9}^{(-1)}\right)\right)\right) + -\left(\mathtt{0x1}\right)\right) \cdot \left(A_{1}\right) = 0

secant_line (selector q11q_{11})

(A5)(A5)+(A3(+1))+((A4)(A4)+(A3)+(A0))+(A3)=0\left(A_{5}\right) \cdot \left(A_{5}\right) + -\left(A_{3}^{(+1)}\right) + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right) + -\left(A_{3}\right) = 0

gradient_2 (selector q11q_{11})

(A5)(A3+(A3(+1)))+(0x200000((A4+A5)(A3+((A4)(A4)+(A3)+(A0)))))+(A4(+1))=0\left(A_{5}\right) \cdot \left(A_{3} + -\left(A_{3}^{(+1)}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{4} + A_{5}\right) \cdot \left(A_{3} + -\left(\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{3}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + -\left(A_{4}^{(+1)}\right) = 0

Gate 11. q_mul_1 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 1 constraint.

init y_a (selector q12q_{12})

A8+(0x200000((A8(+1)+A2(+1))(A7(+1)+((A8(+1))(A8(+1))+(A7(+1))+(A0(+1))))))=0A_{8} + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8}^{(+1)} + A_{2}^{(+1)}\right) \cdot \left(A_{7}^{(+1)} + -\left(\left(A_{8}^{(+1)}\right) \cdot \left(A_{8}^{(+1)}\right) + -\left(A_{7}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right)\right)\right)\right)\right) = 0

Gate 12. q_mul_2 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 6 constraints.

x_p_check (selector q13q_{13})

A0+(A0(+1))=0A_{0} + -\left(A_{0}^{(+1)}\right) = 0

y_p_check (selector q13q_{13})

A1+(A1(+1))=0A_{1} + -\left(A_{1}^{(+1)}\right) = 0

bool_check (selector q13q_{13})

(A6+(0x2(A6(1))))(0x1+(A6+(0x2(A6(1)))))=0\left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right)\right) = 0

gradient_1 (selector q13q_{13})

(A8)(A7+(A0))+(0x200000((A8+A2)(A7+((A8)(A8)+(A7)+(A0)))))+(0x2(A6+(0x2(A6(1))))+(0x1))(A1)=0\left(A_{8}\right) \cdot \left(A_{7} + -\left(A_{0}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8} + A_{2}\right) \cdot \left(A_{7} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right) + -\left(\mathtt{0x1}\right)\right) \cdot \left(A_{1}\right) = 0

secant_line (selector q13q_{13})

(A2)(A2)+(A7(+1))+((A8)(A8)+(A7)+(A0))+(A7)=0\left(A_{2}\right) \cdot \left(A_{2}\right) + -\left(A_{7}^{(+1)}\right) + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right) + -\left(A_{7}\right) = 0

gradient_2 (selector q13q_{13})

(A2)(A7+(A7(+1)))+(0x200000((A8+A2)(A7+((A8)(A8)+(A7)+(A0)))))+(0x200000((A8(+1)+A2(+1))(A7(+1)+((A8(+1))(A8(+1))+(A7(+1))+(A0(+1))))))=0\left(A_{2}\right) \cdot \left(A_{7} + -\left(A_{7}^{(+1)}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8} + A_{2}\right) \cdot \left(A_{7} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8}^{(+1)} + A_{2}^{(+1)}\right) \cdot \left(A_{7}^{(+1)} + -\left(\left(A_{8}^{(+1)}\right) \cdot \left(A_{8}^{(+1)}\right) + -\left(A_{7}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right)\right)\right)\right)\right) = 0

Gate 13. q_mul_3 == 1 checks

Source: EccChip / utilities (halo2_gadgets). 4 constraints.

bool_check (selector q14q_{14})

(A6+(0x2(A6(1))))(0x1+(A6+(0x2(A6(1)))))=0\left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right)\right) = 0

gradient_1 (selector q14q_{14})

(A8)(A7+(A0))+(0x200000((A8+A2)(A7+((A8)(A8)+(A7)+(A0)))))+(0x2(A6+(0x2(A6(1))))+(0x1))(A1)=0\left(A_{8}\right) \cdot \left(A_{7} + -\left(A_{0}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8} + A_{2}\right) \cdot \left(A_{7} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(A_{6} + -\left(\mathtt{0x2} \cdot \left(A_{6}^{(-1)}\right)\right)\right) + -\left(\mathtt{0x1}\right)\right) \cdot \left(A_{1}\right) = 0

secant_line (selector q14q_{14})

(A2)(A2)+(A7(+1))+((A8)(A8)+(A7)+(A0))+(A7)=0\left(A_{2}\right) \cdot \left(A_{2}\right) + -\left(A_{7}^{(+1)}\right) + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right) + -\left(A_{7}\right) = 0

gradient_2 (selector q14q_{14})

(A2)(A7+(A7(+1)))+(0x200000((A8+A2)(A7+((A8)(A8)+(A7)+(A0)))))+(A8(+1))=0\left(A_{2}\right) \cdot \left(A_{7} + -\left(A_{7}^{(+1)}\right)\right) + -\left(\mathtt{0x200000\ldots} \cdot \left(\left(A_{8} + A_{2}\right) \cdot \left(A_{7} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{7}\right) + -\left(A_{0}\right)\right)\right)\right)\right) + -\left(A_{8}^{(+1)}\right) = 0

Gate 14. Decompose scalar for complete bits of variable-base mul

Source: EccChip / utilities (halo2_gadgets). 2 constraints.

bool_check (selector q15q_{15})

(A9(+1)+((0x2)(A9(1))))(0x1+(A9(+1)+((0x2)(A9(1)))))=0\left(A_{9}^{(+1)} + -\left(\left(\mathtt{0x2}\right) \cdot \left(A_{9}^{(-1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{9}^{(+1)} + -\left(\left(\mathtt{0x2}\right) \cdot \left(A_{9}^{(-1)}\right)\right)\right)\right) = 0

y_switch (selector q15q_{15})

(A9(+1)+((0x2)(A9(1))))(A9+(A1(1)))+(0x1+(A9(+1)+((0x2)(A9(1)))))(A9+A1(1))=0\left(A_{9}^{(+1)} + -\left(\left(\mathtt{0x2}\right) \cdot \left(A_{9}^{(-1)}\right)\right)\right) \cdot \left(A_{9} + -\left(A_{1}^{(-1)}\right)\right) + \left(\mathtt{0x1} + -\left(A_{9}^{(+1)} + -\left(\left(\mathtt{0x2}\right) \cdot \left(A_{9}^{(-1)}\right)\right)\right)\right) \cdot \left(A_{9} + A_{1}^{(-1)}\right) = 0

Gate 15. overflow checks

Source: EccChip / utilities (halo2_gadgets). 5 constraints.

s_check (selector q16q_{16})

A8+(A7+(A7(1))((0x100000)(0x40)))=0A_{8} + -\left(A_{7} + \left(A_{7}^{(-1)}\right) \cdot \left(\left(\mathtt{0x100000\ldots}\right) \cdot \left(\mathtt{0x40}\right)\right)\right) = 0

recovery (selector q16q_{16})

A6(1)+(A7)+(0x224698)=0A_{6}^{(-1)} + -\left(A_{7}\right) + -\left(\mathtt{0x224698\ldots}\right) = 0

lo_zero (selector q16q_{16})

(A7(1))(A6+(0x100000))=0\left(A_{7}^{(-1)}\right) \cdot \left(A_{6} + -\left(\mathtt{0x100000\ldots}\right)\right) = 0

s_minus_lo_130_check (selector q16q_{16})

(A7(1))(A7(+1))=0\left(A_{7}^{(-1)}\right) \cdot \left(A_{7}^{(+1)}\right) = 0

canonicity (selector q16q_{16})

((0x1+(A7(1)))(0x1+((A6)(A6(+1)))))(A7(+1))=0\left(\left(\mathtt{0x1} + -\left(A_{7}^{(-1)}\right)\right) \cdot \left(\mathtt{0x1} + -\left(\left(A_{6}\right) \cdot \left(A_{6}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{7}^{(+1)}\right) = 0

Gate 16. LSB check

Source: EccChip / utilities (halo2_gadgets). 3 constraints.

bool_check (selector q17q_{17})

(A9(+1)+(0x2(A9)))(0x1+(A9(+1)+(0x2(A9))))=0\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right)\right) = 0

lsb_x (selector q17q_{17})

(A9(+1)+(0x2(A9)))(A0)+(0x1+(A9(+1)+(0x2(A9))))(A0+(A0(+1)))=0\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right) \cdot \left(A_{0}\right) + \left(\mathtt{0x1} + -\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right)\right) \cdot \left(A_{0} + -\left(A_{0}^{(+1)}\right)\right) = 0

lsb_y (selector q17q_{17})

(A9(+1)+(0x2(A9)))(A1)+(0x1+(A9(+1)+(0x2(A9))))(A1+A1(+1))=0\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right) \cdot \left(A_{1}\right) + \left(\mathtt{0x1} + -\left(A_{9}^{(+1)} + -\left(\mathtt{0x2} \cdot \left(A_{9}\right)\right)\right)\right) \cdot \left(A_{1} + A_{1}^{(+1)}\right) = 0

Gate 17. range check

Source: EccChip / utilities (halo2_gadgets). 1 constraint.

constraint 1 (selector q18q_{18})

(((((((A4+(0x8(A4(+1))))(0x1+(A4+(0x8(A4(+1))))))(0x2+(A4+(0x8(A4(+1))))))(0x3+(A4+(0x8(A4(+1))))))(0x4+(A4+(0x8(A4(+1))))))(0x5+(A4+(0x8(A4(+1))))))(0x6+(A4+(0x8(A4(+1))))))(0x7+(A4+(0x8(A4(+1)))))=0\left(\left(\left(\left(\left(\left(\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x2} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x3} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x4} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x5} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x6} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right)\right) \cdot \left(\mathtt{0x7} + -\left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) = 0

Gate 18. Running sum coordinates check

Source: EccChip / utilities (halo2_gadgets). 3 constraints.

check x (selector q18q_{18})

0+(0x1)(F3)+((0x1)(A4+(0x8(A4(+1)))))(F4)+(((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F5)+((((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F6)+(((((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F7)+((((((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F8)+(((((((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F9)+((((((((0x1)(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(A4+(0x8(A4(+1)))))(F10)+(A0)=00 + \left(\mathtt{0x1}\right) \cdot \left(F_{3}\right) + \left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{4}\right) + \left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{5}\right) + \left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{6}\right) + \left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{7}\right) + \left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{8}\right) + \left(\left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{9}\right) + \left(\left(\left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(A_{4} + -\left(\mathtt{0x8} \cdot \left(A_{4}^{(+1)}\right)\right)\right)\right) \cdot \left(F_{10}\right) + -\left(A_{0}\right) = 0

check y (selector q18q_{18})

(A5)(A5)+(A1)+(F11)=0\left(A_{5}\right) \cdot \left(A_{5}\right) + -\left(A_{1}\right) + -\left(F_{11}\right) = 0

on-curve (selector q18q_{18})

(A1)(A1)+(((A0)(A0))(A0))+(0x5)=0\left(A_{1}\right) \cdot \left(A_{1}\right) + -\left(\left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right) \cdot \left(A_{0}\right)\right) + -\left(\mathtt{0x5}\right) = 0

Gate 19. Full-width fixed-base scalar mul

Source: EccChip / utilities (halo2_gadgets). 4 constraints.

check x (selector q19q_{19})

0+(0x1)(F3)+((0x1)(A4))(F4)+(((0x1)(A4))(A4))(F5)+((((0x1)(A4))(A4))(A4))(F6)+(((((0x1)(A4))(A4))(A4))(A4))(F7)+((((((0x1)(A4))(A4))(A4))(A4))(A4))(F8)+(((((((0x1)(A4))(A4))(A4))(A4))(A4))(A4))(F9)+((((((((0x1)(A4))(A4))(A4))(A4))(A4))(A4))(A4))(F10)+(A0)=00 + \left(\mathtt{0x1}\right) \cdot \left(F_{3}\right) + \left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{4}\right) + \left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{5}\right) + \left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{6}\right) + \left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{7}\right) + \left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{8}\right) + \left(\left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{9}\right) + \left(\left(\left(\left(\left(\left(\left(\left(\mathtt{0x1}\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(A_{4}\right)\right) \cdot \left(F_{10}\right) + -\left(A_{0}\right) = 0

check y (selector q19q_{19})

(A5)(A5)+(A1)+(F11)=0\left(A_{5}\right) \cdot \left(A_{5}\right) + -\left(A_{1}\right) + -\left(F_{11}\right) = 0

on-curve (selector q19q_{19})

(A1)(A1)+(((A0)(A0))(A0))+(0x5)=0\left(A_{1}\right) \cdot \left(A_{1}\right) + -\left(\left(\left(A_{0}\right) \cdot \left(A_{0}\right)\right) \cdot \left(A_{0}\right)\right) + -\left(\mathtt{0x5}\right) = 0

window range check (selector q19q_{19})

(((((((A4)(0x1+(A4)))(0x2+(A4)))(0x3+(A4)))(0x4+(A4)))(0x5+(A4)))(0x6+(A4)))(0x7+(A4))=0\left(\left(\left(\left(\left(\left(\left(A_{4}\right) \cdot \left(\mathtt{0x1} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x2} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x3} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x4} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x5} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x6} + -\left(A_{4}\right)\right)\right) \cdot \left(\mathtt{0x7} + -\left(A_{4}\right)\right) = 0

Gate 20. Short fixed-base mul gate

Source: EccChip / utilities (halo2_gadgets). 4 constraints.

last_window_check (selector q20q_{20})

(A5)(0x1+(A5))=0\left(A_{5}\right) \cdot \left(\mathtt{0x1} + -\left(A_{5}\right)\right) = 0

sign_check (selector q20q_{20})

(A4)(A4)+(0x1)=0\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(\mathtt{0x1}\right) = 0

y_check (selector q20q_{20})

(A1+(A3))(A1+A3)=0\left(A_{1} + -\left(A_{3}\right)\right) \cdot \left(A_{1} + A_{3}\right) = 0

negation_check (selector q20q_{20})

(A4)(A1)+(A3)=0\left(A_{4}\right) \cdot \left(A_{1}\right) + -\left(A_{3}\right) = 0

Gate 21. Canonicity checks

Source: EccChip / utilities (halo2_gadgets). 8 constraints.

MSB = 1 => alpha_1 = 0 (selector q21q_{21})

(A8)(A7)=0\left(A_{8}\right) \cdot \left(A_{7}\right) = 0

MSB = 1 => alpha_0_hi_120 = 0 (selector q21q_{21})

(A8)(A7(+1)+((A8(1))(0x100000)))=0\left(A_{8}\right) \cdot \left(A_{7}^{(+1)} + -\left(\left(A_{8}^{(-1)}\right) \cdot \left(\mathtt{0x100000\ldots}\right)\right)\right) = 0

MSB = 1 => a_43 = 0 or 1 (selector q21q_{21})

(A8)((A8(+1)+(0x8(A7(+1))))(0x1+(A8(+1)+(0x8(A7(+1))))))=0\left(A_{8}\right) \cdot \left(\left(A_{8}^{(+1)} + -\left(\mathtt{0x8} \cdot \left(A_{7}^{(+1)}\right)\right)\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}^{(+1)} + -\left(\mathtt{0x8} \cdot \left(A_{7}^{(+1)}\right)\right)\right)\right)\right) = 0

MSB = 1 => z_13_alpha_0_prime = 0 (selector q21q_{21})

(A8)(A6(+1))=0\left(A_{8}\right) \cdot \left(A_{6}^{(+1)}\right) = 0

alpha_1_range_check (selector q21q_{21})

(((A7)(0x1+(A7)))(0x2+(A7)))(0x3+(A7))=0\left(\left(\left(A_{7}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right)\right) \cdot \left(\mathtt{0x2} + -\left(A_{7}\right)\right)\right) \cdot \left(\mathtt{0x3} + -\left(A_{7}\right)\right) = 0

alpha_2_range_check (selector q21q_{21})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

z_84_alpha_check (selector q21q_{21})

A8(1)+(A7+0x4(A8))=0A_{8}^{(-1)} + -\left(A_{7} + \mathtt{0x4} \cdot \left(A_{8}\right)\right) = 0

alpha_0_prime check (selector q21q_{21})

A6+(A6(1)+(0x100000(A8(1)))+0x400000+(0x224698))=0A_{6} + -\left(A_{6}^{(-1)} + -\left(\mathtt{0x100000\ldots} \cdot \left(A_{8}^{(-1)}\right)\right) + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right)\right) = 0

Gate 22. full round

Source: PoseidonChip (halo2_gadgets). 3 constraints.

constraint 1 (selector q22q_{22})

0xab5e5b((((A6+F5)(A6+F5))((A6+F5)(A6+F5)))(A6+F5))+0x319166((((A7+F6)(A7+F6))((A7+F6)(A7+F6)))(A7+F6))+0x7c045d((((A8+F7)(A8+F7))((A8+F7)(A8+F7)))(A8+F7))+(A6(+1))=0\mathtt{0xab5e5b\ldots} \cdot \left(\left(\left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right) \cdot \left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right)\right) \cdot \left(A_{6} + F_{5}\right)\right) + \mathtt{0x319166\ldots} \cdot \left(\left(\left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right) \cdot \left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right)\right) \cdot \left(A_{7} + F_{6}\right)\right) + \mathtt{0x7c045d\ldots} \cdot \left(\left(\left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right) \cdot \left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right)\right) \cdot \left(A_{8} + F_{7}\right)\right) + -\left(A_{6}^{(+1)}\right) = 0

constraint 2 (selector q22q_{22})

0x233162((((A6+F5)(A6+F5))((A6+F5)(A6+F5)))(A6+F5))+0x25cae2((((A7+F6)(A7+F6))((A7+F6)(A7+F6)))(A7+F6))+0x22f5b5((((A8+F7)(A8+F7))((A8+F7)(A8+F7)))(A8+F7))+(A7(+1))=0\mathtt{0x233162\ldots} \cdot \left(\left(\left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right) \cdot \left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right)\right) \cdot \left(A_{6} + F_{5}\right)\right) + \mathtt{0x25cae2\ldots} \cdot \left(\left(\left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right) \cdot \left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right)\right) \cdot \left(A_{7} + F_{6}\right)\right) + \mathtt{0x22f5b5\ldots} \cdot \left(\left(\left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right) \cdot \left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right)\right) \cdot \left(A_{8} + F_{7}\right)\right) + -\left(A_{7}^{(+1)}\right) = 0

constraint 3 (selector q22q_{22})

0x2e29dd((((A6+F5)(A6+F5))((A6+F5)(A6+F5)))(A6+F5))+0x1d1aab((((A7+F6)(A7+F6))((A7+F6)(A7+F6)))(A7+F6))+0x3bf763((((A8+F7)(A8+F7))((A8+F7)(A8+F7)))(A8+F7))+(A8(+1))=0\mathtt{0x2e29dd\ldots} \cdot \left(\left(\left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right) \cdot \left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right)\right) \cdot \left(A_{6} + F_{5}\right)\right) + \mathtt{0x1d1aab\ldots} \cdot \left(\left(\left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right) \cdot \left(\left(A_{7} + F_{6}\right) \cdot \left(A_{7} + F_{6}\right)\right)\right) \cdot \left(A_{7} + F_{6}\right)\right) + \mathtt{0x3bf763\ldots} \cdot \left(\left(\left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right) \cdot \left(\left(A_{8} + F_{7}\right) \cdot \left(A_{8} + F_{7}\right)\right)\right) \cdot \left(A_{8} + F_{7}\right)\right) + -\left(A_{8}^{(+1)}\right) = 0

Gate 23. partial rounds

Source: PoseidonChip (halo2_gadgets). 4 constraints.

constraint 1 (selector q23q_{23})

(((A6+F5)(A6+F5))((A6+F5)(A6+F5)))(A6+F5)+(A5)=0\left(\left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right) \cdot \left(\left(A_{6} + F_{5}\right) \cdot \left(A_{6} + F_{5}\right)\right)\right) \cdot \left(A_{6} + F_{5}\right) + -\left(A_{5}\right) = 0

constraint 2 (selector q23q_{23})

(((0xab5e5b(A5)+0x319166(A7+F6)+0x7c045d(A8+F7)+F8)(0xab5e5b(A5)+0x319166(A7+F6)+0x7c045d(A8+F7)+F8))((0xab5e5b(A5)+0x319166(A7+F6)+0x7c045d(A8+F7)+F8)(0xab5e5b(A5)+0x319166(A7+F6)+0x7c045d(A8+F7)+F8)))(0xab5e5b(A5)+0x319166(A7+F6)+0x7c045d(A8+F7)+F8)+(0x2cc057(A6(+1))+0x32e7c4(A7(+1))+0x2eae5d(A8(+1)))=0\left(\left(\left(\mathtt{0xab5e5b\ldots} \cdot \left(A_{5}\right) + \mathtt{0x319166\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x7c045d\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{8}\right) \cdot \left(\mathtt{0xab5e5b\ldots} \cdot \left(A_{5}\right) + \mathtt{0x319166\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x7c045d\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{8}\right)\right) \cdot \left(\left(\mathtt{0xab5e5b\ldots} \cdot \left(A_{5}\right) + \mathtt{0x319166\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x7c045d\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{8}\right) \cdot \left(\mathtt{0xab5e5b\ldots} \cdot \left(A_{5}\right) + \mathtt{0x319166\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x7c045d\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{8}\right)\right)\right) \cdot \left(\mathtt{0xab5e5b\ldots} \cdot \left(A_{5}\right) + \mathtt{0x319166\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x7c045d\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{8}\right) + -\left(\mathtt{0x2cc057\ldots} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x32e7c4\ldots} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x2eae5d\ldots} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

constraint 3 (selector q23q_{23})

0x233162(A5)+0x25cae2(A7+F6)+0x22f5b5(A8+F7)+F9+(0x7bf368(A6(+1))+0x2aec69(A7(+1))+0x952e02(A8(+1)))=0\mathtt{0x233162\ldots} \cdot \left(A_{5}\right) + \mathtt{0x25cae2\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x22f5b5\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{9} + -\left(\mathtt{0x7bf368\ldots} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x2aec69\ldots} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x952e02\ldots} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

constraint 4 (selector q23q_{23})

0x2e29dd(A5)+0x1d1aab(A7+F6)+0x3bf763(A8+F7)+F10+(0x2fcbba(A6(+1))+0x1ec737(A7(+1))+0xd0c2ef(A8(+1)))=0\mathtt{0x2e29dd\ldots} \cdot \left(A_{5}\right) + \mathtt{0x1d1aab\ldots} \cdot \left(A_{7} + F_{6}\right) + \mathtt{0x3bf763\ldots} \cdot \left(A_{8} + F_{7}\right) + F_{10} + -\left(\mathtt{0x2fcbba\ldots} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x1ec737\ldots} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0xd0c2ef\ldots} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 24. pad-and-add

Source: PoseidonChip (halo2_gadgets). 3 constraints.

constraint 1 (selector q24q_{24})

A6(1)+A6+(A6(+1))=0A_{6}^{(-1)} + A_{6} + -\left(A_{6}^{(+1)}\right) = 0

constraint 2 (selector q24q_{24})

A7(1)+A7+(A7(+1))=0A_{7}^{(-1)} + A_{7} + -\left(A_{7}^{(+1)}\right) = 0

constraint 3 (selector q24q_{24})

A8(1)+(A8(+1))=0A_{8}^{(-1)} + -\left(A_{8}^{(+1)}\right) = 0

Gate 25. Initial y_Q

Source: SinsemillaChip (halo2_gadgets). 1 constraint.

init_y_q_check (selector q26q_{26})

0x2(F3)+((A3+A4)(A0+((A3)(A3)+(A0)+(A1))))=0\mathtt{0x2} \cdot \left(F_{3}\right) + -\left(\left(A_{3} + A_{4}\right) \cdot \left(A_{0} + -\left(\left(A_{3}\right) \cdot \left(A_{3}\right) + -\left(A_{0}\right) + -\left(A_{1}\right)\right)\right)\right) = 0

Gate 26. Sinsemilla gate

Source: SinsemillaChip (halo2_gadgets). 2 constraints.

Secant line (selector q25q_{25})

(A4)(A4)+(A0(+1)+(A3)(A3)+(A0)+(A1)+A0)=0\left(A_{4}\right) \cdot \left(A_{4}\right) + -\left(A_{0}^{(+1)} + \left(A_{3}\right) \cdot \left(A_{3}\right) + -\left(A_{0}\right) + -\left(A_{1}\right) + A_{0}\right) = 0

y check (selector q25q_{25})

(0x4(A4))(A0+(A0(+1)))+(0x2((A3+A4)(A0+((A3)(A3)+(A0)+(A1))))+(0x2+((F12)(F12+(0x1))))((A3(+1)+A4(+1))(A0(+1)+((A3(+1))(A3(+1))+(A0(+1))+(A1(+1)))))+(0x2((F12)(F12+(0x1))))(A3(+1)))=0\left(\mathtt{0x4} \cdot \left(A_{4}\right)\right) \cdot \left(A_{0} + -\left(A_{0}^{(+1)}\right)\right) + -\left(\mathtt{0x2} \cdot \left(\left(A_{3} + A_{4}\right) \cdot \left(A_{0} + -\left(\left(A_{3}\right) \cdot \left(A_{3}\right) + -\left(A_{0}\right) + -\left(A_{1}\right)\right)\right)\right) + \left(\mathtt{0x2} + -\left(\left(F_{12}\right) \cdot \left(F_{12} + -\left(\mathtt{0x1}\right)\right)\right)\right) \cdot \left(\left(A_{3}^{(+1)} + A_{4}^{(+1)}\right) \cdot \left(A_{0}^{(+1)} + -\left(\left(A_{3}^{(+1)}\right) \cdot \left(A_{3}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right) + -\left(A_{1}^{(+1)}\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(\left(F_{12}\right) \cdot \left(F_{12} + -\left(\mathtt{0x1}\right)\right)\right)\right) \cdot \left(A_{3}^{(+1)}\right)\right) = 0

Gate 27. a' = b ⋅ swap + a ⋅ (1-swap)

Source: MerkleChip (halo2_gadgets). 3 constraints.

a check (selector q27q_{27})

A2+((A4)(A1)+(0x1+(A4))(A0))=0A_{2} + -\left(\left(A_{4}\right) \cdot \left(A_{1}\right) + \left(\mathtt{0x1} + -\left(A_{4}\right)\right) \cdot \left(A_{0}\right)\right) = 0

b check (selector q27q_{27})

A3+((A4)(A0)+(0x1+(A4))(A1))=0A_{3} + -\left(\left(A_{4}\right) \cdot \left(A_{0}\right) + \left(\mathtt{0x1} + -\left(A_{4}\right)\right) \cdot \left(A_{1}\right)\right) = 0

swap is bool (selector q27q_{27})

(A4)(0x1+(A4))=0\left(A_{4}\right) \cdot \left(\mathtt{0x1} + -\left(A_{4}\right)\right) = 0

Gate 28. Decomposition check

Source: MerkleChip (halo2_gadgets). 4 constraints.

l_check (selector q28q_{28})

A0+(0x400(A0(+1)))+(A4(+1))=0A_{0} + -\left(\mathtt{0x400} \cdot \left(A_{0}^{(+1)}\right)\right) + -\left(A_{4}^{(+1)}\right) = 0

left_check (selector q28q_{28})

A0(+1)+0x100000(A1+(0x400(A1(+1)))+0x400(A2(+1)))+(A3)=0A_{0}^{(+1)} + \mathtt{0x100000\ldots} \cdot \left(A_{1} + -\left(\mathtt{0x400} \cdot \left(A_{1}^{(+1)}\right)\right) + \mathtt{0x400} \cdot \left(A_{2}^{(+1)}\right)\right) + -\left(A_{3}\right) = 0

right_check (selector q28q_{28})

A3(+1)+0x20(A2)+(A4)=0A_{3}^{(+1)} + \mathtt{0x20} \cdot \left(A_{2}\right) + -\left(A_{4}\right) = 0

b1_b2_check (selector q28q_{28})

A1(+1)+(A2(+1)+0x20(A3(+1)))=0A_{1}^{(+1)} + -\left(A_{2}^{(+1)} + \mathtt{0x20} \cdot \left(A_{3}^{(+1)}\right)\right) = 0

Gate 29. Initial y_Q

Source: SinsemillaChip (halo2_gadgets). 1 constraint.

init_y_q_check (selector q30q_{30})

0x2(F4)+((A8+A9)(A5+((A8)(A8)+(A5)+(A6))))=0\mathtt{0x2} \cdot \left(F_{4}\right) + -\left(\left(A_{8} + A_{9}\right) \cdot \left(A_{5} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{5}\right) + -\left(A_{6}\right)\right)\right)\right) = 0

Gate 30. Sinsemilla gate

Source: SinsemillaChip (halo2_gadgets). 2 constraints.

Secant line (selector q29q_{29})

(A9)(A9)+(A5(+1)+(A8)(A8)+(A5)+(A6)+A5)=0\left(A_{9}\right) \cdot \left(A_{9}\right) + -\left(A_{5}^{(+1)} + \left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{5}\right) + -\left(A_{6}\right) + A_{5}\right) = 0

y check (selector q29q_{29})

(0x4(A9))(A5+(A5(+1)))+(0x2((A8+A9)(A5+((A8)(A8)+(A5)+(A6))))+(0x2+((F13)(F13+(0x1))))((A8(+1)+A9(+1))(A5(+1)+((A8(+1))(A8(+1))+(A5(+1))+(A6(+1)))))+(0x2((F13)(F13+(0x1))))(A8(+1)))=0\left(\mathtt{0x4} \cdot \left(A_{9}\right)\right) \cdot \left(A_{5} + -\left(A_{5}^{(+1)}\right)\right) + -\left(\mathtt{0x2} \cdot \left(\left(A_{8} + A_{9}\right) \cdot \left(A_{5} + -\left(\left(A_{8}\right) \cdot \left(A_{8}\right) + -\left(A_{5}\right) + -\left(A_{6}\right)\right)\right)\right) + \left(\mathtt{0x2} + -\left(\left(F_{13}\right) \cdot \left(F_{13} + -\left(\mathtt{0x1}\right)\right)\right)\right) \cdot \left(\left(A_{8}^{(+1)} + A_{9}^{(+1)}\right) \cdot \left(A_{5}^{(+1)} + -\left(\left(A_{8}^{(+1)}\right) \cdot \left(A_{8}^{(+1)}\right) + -\left(A_{5}^{(+1)}\right) + -\left(A_{6}^{(+1)}\right)\right)\right)\right) + \left(\mathtt{0x2} \cdot \left(\left(F_{13}\right) \cdot \left(F_{13} + -\left(\mathtt{0x1}\right)\right)\right)\right) \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 31. a' = b ⋅ swap + a ⋅ (1-swap)

Source: MerkleChip (halo2_gadgets). 3 constraints.

a check (selector q31q_{31})

A7+((A9)(A6)+(0x1+(A9))(A5))=0A_{7} + -\left(\left(A_{9}\right) \cdot \left(A_{6}\right) + \left(\mathtt{0x1} + -\left(A_{9}\right)\right) \cdot \left(A_{5}\right)\right) = 0

b check (selector q31q_{31})

A8+((A9)(A5)+(0x1+(A9))(A6))=0A_{8} + -\left(\left(A_{9}\right) \cdot \left(A_{5}\right) + \left(\mathtt{0x1} + -\left(A_{9}\right)\right) \cdot \left(A_{6}\right)\right) = 0

swap is bool (selector q31q_{31})

(A9)(0x1+(A9))=0\left(A_{9}\right) \cdot \left(\mathtt{0x1} + -\left(A_{9}\right)\right) = 0

Gate 32. Decomposition check

Source: MerkleChip (halo2_gadgets). 4 constraints.

l_check (selector q32q_{32})

A5+(0x400(A5(+1)))+(A9(+1))=0A_{5} + -\left(\mathtt{0x400} \cdot \left(A_{5}^{(+1)}\right)\right) + -\left(A_{9}^{(+1)}\right) = 0

left_check (selector q32q_{32})

A5(+1)+0x100000(A6+(0x400(A6(+1)))+0x400(A7(+1)))+(A8)=0A_{5}^{(+1)} + \mathtt{0x100000\ldots} \cdot \left(A_{6} + -\left(\mathtt{0x400} \cdot \left(A_{6}^{(+1)}\right)\right) + \mathtt{0x400} \cdot \left(A_{7}^{(+1)}\right)\right) + -\left(A_{8}\right) = 0

right_check (selector q32q_{32})

A8(+1)+0x20(A7)+(A9)=0A_{8}^{(+1)} + \mathtt{0x20} \cdot \left(A_{7}\right) + -\left(A_{9}\right) = 0

b1_b2_check (selector q32q_{32})

A6(+1)+(A7(+1)+0x20(A8(+1)))=0A_{6}^{(+1)} + -\left(A_{7}^{(+1)} + \mathtt{0x20} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 33. CommitIvk canonicity check

Source: CommitIvkChip (src/circuit/commit_ivk.rs). 14 constraints.

b1_bool_check (selector q33q_{33})

(A4)(0x1+(A4))=0\left(A_{4}\right) \cdot \left(\mathtt{0x1} + -\left(A_{4}\right)\right) = 0

d1_bool_check (selector q33q_{33})

(A4(+1))(0x1+(A4(+1)))=0\left(A_{4}^{(+1)}\right) \cdot \left(\mathtt{0x1} + -\left(A_{4}^{(+1)}\right)\right) = 0

b_decomposition_check (selector q33q_{33})

A2+(A3+0x10(A4)+0x20(A5))=0A_{2} + -\left(A_{3} + \mathtt{0x10} \cdot \left(A_{4}\right) + \mathtt{0x20} \cdot \left(A_{5}\right)\right) = 0

d_decomposition_check (selector q33q_{33})

A2(+1)+(A3(+1)+0x200(A4(+1)))=0A_{2}^{(+1)} + -\left(A_{3}^{(+1)} + \mathtt{0x200} \cdot \left(A_{4}^{(+1)}\right)\right) = 0

ak_decomposition_check (selector q33q_{33})

A1+0x400000(A3)+0x400000(A4)+(A0)=0A_{1} + \mathtt{0x400000\ldots} \cdot \left(A_{3}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{4}\right) + -\left(A_{0}\right) = 0

nk_decomposition_check (selector q33q_{33})

A5+0x20(A1(+1))+0x200000(A3(+1))+0x400000(A4(+1))+(A0(+1))=0A_{5} + \mathtt{0x20} \cdot \left(A_{1}^{(+1)}\right) + \mathtt{0x200000\ldots} \cdot \left(A_{3}^{(+1)}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{4}^{(+1)}\right) + -\left(A_{0}^{(+1)}\right) = 0

b0_canon_check (selector q33q_{33})

(A4)(A3)=0\left(A_{4}\right) \cdot \left(A_{3}\right) = 0

z13_a_check (selector q33q_{33})

(A4)(A6)=0\left(A_{4}\right) \cdot \left(A_{6}\right) = 0

a_prime_check (selector q33q_{33})

A1+0x400000+(0x224698)+(A7)=0A_{1} + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{7}\right) = 0

z13_a_prime (selector q33q_{33})

(A4)(A8)=0\left(A_{4}\right) \cdot \left(A_{8}\right) = 0

c0_canon_check (selector q33q_{33})

(A4(+1))(A3(+1))=0\left(A_{4}^{(+1)}\right) \cdot \left(A_{3}^{(+1)}\right) = 0

z13_c_check (selector q33q_{33})

(A4(+1))(A6(+1))=0\left(A_{4}^{(+1)}\right) \cdot \left(A_{6}^{(+1)}\right) = 0

b2_c_prime_check (selector q33q_{33})

A5+0x20(A1(+1))+0x100000+(0x224698)+(A7(+1))=0A_{5} + \mathtt{0x20} \cdot \left(A_{1}^{(+1)}\right) + \mathtt{0x100000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{7}^{(+1)}\right) = 0

z14_b2_c_prime (selector q33q_{33})

(A4(+1))(A8(+1))=0\left(A_{4}^{(+1)}\right) \cdot \left(A_{8}^{(+1)}\right) = 0

Gate 34. NoteCommit MessagePiece b

Source: NoteCommitChip (src/circuit/note_commit.rs). 3 constraints.

bool_check b_1 (selector q34q_{34})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

bool_check b_2 (selector q34q_{34})

(A7(+1))(0x1+(A7(+1)))=0\left(A_{7}^{(+1)}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}^{(+1)}\right)\right) = 0

decomposition (selector q34q_{34})

A6+(A7+0x10(A8)+0x20(A7(+1))+0x40(A8(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x20} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x40} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 35. NoteCommit MessagePiece d

Source: NoteCommitChip (src/circuit/note_commit.rs). 3 constraints.

bool_check d_0 (selector q35q_{35})

(A7)(0x1+(A7))=0\left(A_{7}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right) = 0

bool_check d_1 (selector q35q_{35})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

decomposition (selector q35q_{35})

A6+(A7+0x2(A8)+0x4(A7(+1))+0x400(A8(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x2} \cdot \left(A_{8}\right) + \mathtt{0x4} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x400} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 36. NoteCommit MessagePiece e

Source: NoteCommitChip (src/circuit/note_commit.rs). 1 constraint.

decomposition (selector q36q_{36})

A6+(A7+0x40(A8))=0A_{6} + -\left(A_{7} + \mathtt{0x40} \cdot \left(A_{8}\right)\right) = 0

Gate 37. NoteCommit MessagePiece g

Source: NoteCommitChip (src/circuit/note_commit.rs). 2 constraints.

bool_check g_0 (selector q37q_{37})

(A7)(0x1+(A7))=0\left(A_{7}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right) = 0

decomposition (selector q37q_{37})

A6+(A7+0x2(A6(+1))+0x400(A7(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x2} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x400} \cdot \left(A_{7}^{(+1)}\right)\right) = 0

Gate 38. NoteCommit MessagePiece h

Source: NoteCommitChip (src/circuit/note_commit.rs). 2 constraints.

bool_check h_1 (selector q38q_{38})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

decomposition (selector q38q_{38})

A6+(A7+0x20(A8))=0A_{6} + -\left(A_{7} + \mathtt{0x20} \cdot \left(A_{8}\right)\right) = 0

Gate 39. NoteCommit input g_d

Source: NoteCommitChip (src/circuit/note_commit.rs). 5 constraints.

decomposition (selector q39q_{39})

A8+0x400000(A7)+0x400000(A7(+1))+(A6)=0A_{8} + \mathtt{0x400000\ldots} \cdot \left(A_{7}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

a_prime_check (selector q39q_{39})

A8+0x400000+(0x224698)+(A8(+1))=0A_{8} + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

b_1 = 1 => b_0 (selector q39q_{39})

(A7(+1))(A7)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{7}\right) = 0

b_1 = 1 => z13_a (selector q39q_{39})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

b_1 = 1 => z13_a_prime (selector q39q_{39})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 40. NoteCommit input pk_d

Source: NoteCommitChip (src/circuit/note_commit.rs). 4 constraints.

decomposition (selector q40q_{40})

A7+0x10(A8)+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

b3_c_prime_check (selector q40q_{40})

A7+0x10(A8)+0x100000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x100000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

d_0 = 1 => z13_c (selector q40q_{40})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

d_0 = 1 => z14_b3_c_prime (selector q40q_{40})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 41. NoteCommit input value

Source: NoteCommitChip (src/circuit/note_commit.rs). 1 constraint.

value_check (selector q41q_{41})

A7+0x100(A8)+0x400000(A9)+(A6)=0A_{7} + \mathtt{0x100} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{9}\right) + -\left(A_{6}\right) = 0

Gate 42. NoteCommit input rho

Source: NoteCommitChip (src/circuit/note_commit.rs). 4 constraints.

decomposition (selector q42q_{42})

A7+0x10(A8)+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

e1_f_prime_check (selector q42q_{42})

A7+0x10(A8)+0x100000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x100000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

g_0 = 1 => z13_f (selector q42q_{42})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

g_0 = 1 => z14_e1_f_prime (selector q42q_{42})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 43. NoteCommit input psi

Source: NoteCommitChip (src/circuit/note_commit.rs). 5 constraints.

decomposition (selector q43q_{43})

A7+0x200(A8)+0x200000(A6(+1))+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x200} \cdot \left(A_{8}\right) + \mathtt{0x200000\ldots} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

g1_g2_prime_check (selector q43q_{43})

A7+0x200(A8)+0x400000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x200} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

h_1 = 1 => h_0 (selector q43q_{43})

(A7(+1))(A6(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{6}^{(+1)}\right) = 0

h_1 = 1 => z13_g (selector q43q_{43})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

h_1 = 1 => z13_g1_g2_prime (selector q43q_{43})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 44. y coordinate checks

Source: NoteCommitChip (src/circuit/note_commit.rs). 7 constraints.

k3_check (selector q44q_{44})

(A9)(0x1+(A9))=0\left(A_{9}\right) \cdot \left(\mathtt{0x1} + -\left(A_{9}\right)\right) = 0

j_check (selector q44q_{44})

A5(+1)+(A6+0x2(A7)+0x400(A6(+1)))=0A_{5}^{(+1)} + -\left(A_{6} + \mathtt{0x2} \cdot \left(A_{7}\right) + \mathtt{0x400} \cdot \left(A_{6}^{(+1)}\right)\right) = 0

y_check (selector q44q_{44})

A5+(A5(+1)+0x400000(A8)+0x400000(A9))=0A_{5} + -\left(A_{5}^{(+1)} + \mathtt{0x400000\ldots} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{9}\right)\right) = 0

j_prime_check (selector q44q_{44})

A5(+1)+0x400000+(0x224698)+(A8(+1))=0A_{5}^{(+1)} + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

k_3 = 1 => k_2 = 0 (selector q44q_{44})

(A9)(A8)=0\left(A_{9}\right) \cdot \left(A_{8}\right) = 0

k_3 = 1 => z13_j = 0 (selector q44q_{44})

(A9)(A7(+1))=0\left(A_{9}\right) \cdot \left(A_{7}^{(+1)}\right) = 0

k_3 = 1 => z13_j_prime = 0 (selector q44q_{44})

(A9)(A9(+1))=0\left(A_{9}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 45. NoteCommit MessagePiece b

Source: NoteCommitChip (src/circuit/note_commit.rs). 3 constraints.

bool_check b_1 (selector q45q_{45})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

bool_check b_2 (selector q45q_{45})

(A7(+1))(0x1+(A7(+1)))=0\left(A_{7}^{(+1)}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}^{(+1)}\right)\right) = 0

decomposition (selector q45q_{45})

A6+(A7+0x10(A8)+0x20(A7(+1))+0x40(A8(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x20} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x40} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 46. NoteCommit MessagePiece d

Source: NoteCommitChip (src/circuit/note_commit.rs). 3 constraints.

bool_check d_0 (selector q46q_{46})

(A7)(0x1+(A7))=0\left(A_{7}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right) = 0

bool_check d_1 (selector q46q_{46})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

decomposition (selector q46q_{46})

A6+(A7+0x2(A8)+0x4(A7(+1))+0x400(A8(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x2} \cdot \left(A_{8}\right) + \mathtt{0x4} \cdot \left(A_{7}^{(+1)}\right) + \mathtt{0x400} \cdot \left(A_{8}^{(+1)}\right)\right) = 0

Gate 47. NoteCommit MessagePiece e

Source: NoteCommitChip (src/circuit/note_commit.rs). 1 constraint.

decomposition (selector q47q_{47})

A6+(A7+0x40(A8))=0A_{6} + -\left(A_{7} + \mathtt{0x40} \cdot \left(A_{8}\right)\right) = 0

Gate 48. NoteCommit MessagePiece g

Source: NoteCommitChip (src/circuit/note_commit.rs). 2 constraints.

bool_check g_0 (selector q48q_{48})

(A7)(0x1+(A7))=0\left(A_{7}\right) \cdot \left(\mathtt{0x1} + -\left(A_{7}\right)\right) = 0

decomposition (selector q48q_{48})

A6+(A7+0x2(A6(+1))+0x400(A7(+1)))=0A_{6} + -\left(A_{7} + \mathtt{0x2} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x400} \cdot \left(A_{7}^{(+1)}\right)\right) = 0

Gate 49. NoteCommit MessagePiece h

Source: NoteCommitChip (src/circuit/note_commit.rs). 2 constraints.

bool_check h_1 (selector q49q_{49})

(A8)(0x1+(A8))=0\left(A_{8}\right) \cdot \left(\mathtt{0x1} + -\left(A_{8}\right)\right) = 0

decomposition (selector q49q_{49})

A6+(A7+0x20(A8))=0A_{6} + -\left(A_{7} + \mathtt{0x20} \cdot \left(A_{8}\right)\right) = 0

Gate 50. NoteCommit input g_d

Source: NoteCommitChip (src/circuit/note_commit.rs). 5 constraints.

decomposition (selector q50q_{50})

A8+0x400000(A7)+0x400000(A7(+1))+(A6)=0A_{8} + \mathtt{0x400000\ldots} \cdot \left(A_{7}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

a_prime_check (selector q50q_{50})

A8+0x400000+(0x224698)+(A8(+1))=0A_{8} + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

b_1 = 1 => b_0 (selector q50q_{50})

(A7(+1))(A7)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{7}\right) = 0

b_1 = 1 => z13_a (selector q50q_{50})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

b_1 = 1 => z13_a_prime (selector q50q_{50})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 51. NoteCommit input pk_d

Source: NoteCommitChip (src/circuit/note_commit.rs). 4 constraints.

decomposition (selector q51q_{51})

A7+0x10(A8)+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

b3_c_prime_check (selector q51q_{51})

A7+0x10(A8)+0x100000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x100000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

d_0 = 1 => z13_c (selector q51q_{51})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

d_0 = 1 => z14_b3_c_prime (selector q51q_{51})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 52. NoteCommit input value

Source: NoteCommitChip (src/circuit/note_commit.rs). 1 constraint.

value_check (selector q52q_{52})

A7+0x100(A8)+0x400000(A9)+(A6)=0A_{7} + \mathtt{0x100} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{9}\right) + -\left(A_{6}\right) = 0

Gate 53. NoteCommit input rho

Source: NoteCommitChip (src/circuit/note_commit.rs). 4 constraints.

decomposition (selector q53q_{53})

A7+0x10(A8)+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

e1_f_prime_check (selector q53q_{53})

A7+0x10(A8)+0x100000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x10} \cdot \left(A_{8}\right) + \mathtt{0x100000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

g_0 = 1 => z13_f (selector q53q_{53})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

g_0 = 1 => z14_e1_f_prime (selector q53q_{53})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 54. NoteCommit input psi

Source: NoteCommitChip (src/circuit/note_commit.rs). 5 constraints.

decomposition (selector q54q_{54})

A7+0x200(A8)+0x200000(A6(+1))+0x400000(A7(+1))+(A6)=0A_{7} + \mathtt{0x200} \cdot \left(A_{8}\right) + \mathtt{0x200000\ldots} \cdot \left(A_{6}^{(+1)}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{7}^{(+1)}\right) + -\left(A_{6}\right) = 0

g1_g2_prime_check (selector q54q_{54})

A7+0x200(A8)+0x400000+(0x224698)+(A8(+1))=0A_{7} + \mathtt{0x200} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

h_1 = 1 => h_0 (selector q54q_{54})

(A7(+1))(A6(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{6}^{(+1)}\right) = 0

h_1 = 1 => z13_g (selector q54q_{54})

(A7(+1))(A9)=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}\right) = 0

h_1 = 1 => z13_g1_g2_prime (selector q54q_{54})

(A7(+1))(A9(+1))=0\left(A_{7}^{(+1)}\right) \cdot \left(A_{9}^{(+1)}\right) = 0

Gate 55. y coordinate checks

Source: NoteCommitChip (src/circuit/note_commit.rs). 7 constraints.

k3_check (selector q55q_{55})

(A9)(0x1+(A9))=0\left(A_{9}\right) \cdot \left(\mathtt{0x1} + -\left(A_{9}\right)\right) = 0

j_check (selector q55q_{55})

A5(+1)+(A6+0x2(A7)+0x400(A6(+1)))=0A_{5}^{(+1)} + -\left(A_{6} + \mathtt{0x2} \cdot \left(A_{7}\right) + \mathtt{0x400} \cdot \left(A_{6}^{(+1)}\right)\right) = 0

y_check (selector q55q_{55})

A5+(A5(+1)+0x400000(A8)+0x400000(A9))=0A_{5} + -\left(A_{5}^{(+1)} + \mathtt{0x400000\ldots} \cdot \left(A_{8}\right) + \mathtt{0x400000\ldots} \cdot \left(A_{9}\right)\right) = 0

j_prime_check (selector q55q_{55})

A5(+1)+0x400000+(0x224698)+(A8(+1))=0A_{5}^{(+1)} + \mathtt{0x400000\ldots} + -\left(\mathtt{0x224698\ldots}\right) + -\left(A_{8}^{(+1)}\right) = 0

k_3 = 1 => k_2 = 0 (selector q55q_{55})

(A9)(A8)=0\left(A_{9}\right) \cdot \left(A_{8}\right) = 0

k_3 = 1 => z13_j = 0 (selector q55q_{55})

(A9)(A7(+1))=0\left(A_{9}\right) \cdot \left(A_{7}^{(+1)}\right) = 0

k_3 = 1 => z13_j_prime = 0 (selector q55q_{55})

(A9)(A9(+1))=0\left(A_{9}\right) \cdot \left(A_{9}^{(+1)}\right) = 0