@@ -124,22 +124,12 @@ class RingSettlementGadget : public GadgetT
124124 const VariableT tradingHistoryRootA_O;
125125 const VariableT tradingHistoryRootB_O;
126126
127- // Match orders
128- OrderMatchingGadget orderMatching;
129-
130- // Fill amounts
131- TernaryGadget uFillS_A;
132- TernaryGadget uFillS_B;
127+ // Order fills
133128 FloatGadget fillS_A;
134129 FloatGadget fillS_B;
135- RequireAccuracyGadget requireAccuracyFillS_A;
136- RequireAccuracyGadget requireAccuracyFillS_B;
137130
138- // Filled amounts
139- TernaryGadget filledA;
140- TernaryGadget filledB;
141- AddGadget filledAfterA;
142- AddGadget filledAfterB;
131+ // Match orders
132+ OrderMatchingGadget orderMatching;
143133
144134 // Calculate fees
145135 FeeCalculatorGadget feeCalculatorA;
@@ -212,22 +202,12 @@ class RingSettlementGadget : public GadgetT
212202 tradingHistoryRootA_O (make_variable(pb, FMT(prefix, " .tradingHistoryRootA_O" ))),
213203 tradingHistoryRootB_O (make_variable(pb, FMT(prefix, " .tradingHistoryRootB_O" ))),
214204
215- // Match orders
216- orderMatching (pb, constants, timestamp, orderA, orderB, FMT(prefix, " .orderMatching" )),
217-
218- // Fill amounts
219- uFillS_A (pb, orderMatching.isValid(), orderMatching.getFillA_S(), constants.zero, FMT(prefix, " .uFillS_A" )),
220- uFillS_B (pb, orderMatching.isValid(), orderMatching.getFillB_S(), constants.zero, FMT(prefix, " .uFillS_B" )),
205+ // Order fills
221206 fillS_A (pb, constants, Float24Encoding, FMT(prefix, " .fillS_A" )),
222207 fillS_B (pb, constants, Float24Encoding, FMT(prefix, " .fillS_B" )),
223- requireAccuracyFillS_A (pb, fillS_A.value(), uFillS_A.result(), Float24Accuracy, NUM_BITS_AMOUNT, FMT(prefix, " .requireAccuracyFillS_A" )),
224- requireAccuracyFillS_B (pb, fillS_B.value(), uFillS_B.result(), Float24Accuracy, NUM_BITS_AMOUNT, FMT(prefix, " .requireAccuracyFillS_B" )),
225208
226- // Filled amounts
227- filledA (pb, orderA.buy.packed, fillS_B.value(), fillS_A.value(), FMT(prefix, " .filledA" )),
228- filledB (pb, orderB.buy.packed, fillS_A.value(), fillS_B.value(), FMT(prefix, " .filledB" )),
229- filledAfterA (pb, orderA.tradeHistory.getFilled(), filledA.result(), NUM_BITS_AMOUNT, FMT(prefix, " .filledAfterA" )),
230- filledAfterB (pb, orderB.tradeHistory.getFilled(), filledB.result(), NUM_BITS_AMOUNT, FMT(prefix, " .filledAfterB" )),
209+ // Match orders
210+ orderMatching (pb, constants, timestamp, orderA, orderB, fillS_A.value(), fillS_B.value(), FMT(prefix, " .orderMatching" )),
231211
232212 // Calculate fees
233213 feeCalculatorA (pb, constants, fillS_B.value(), protocolTakerFeeBips, orderA.feeBips.packed, orderA.rebateBips.packed, FMT(prefix, " .feeCalculatorA" )),
@@ -250,7 +230,7 @@ class RingSettlementGadget : public GadgetT
250230 // Update UserA
251231 updateTradeHistory_A (pb, orderA.balanceSBefore.tradingHistory, subArray(orderA.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
252232 {orderA.tradeHistoryBefore .filled , orderA.tradeHistoryBefore .cancelled , orderA.tradeHistoryBefore .orderID },
253- {filledAfterA. result (), orderA.tradeHistory .getCancelledToStore (), orderA.tradeHistory .getOrderIDToStore ()},
233+ {orderMatching. getFilledAfter_A (), orderA.tradeHistory .getCancelledToStore (), orderA.tradeHistory .getOrderIDToStore ()},
254234 FMT (prefix, " .updateTradeHistory_A" )),
255235 updateBalanceS_A (pb, orderA.accountBefore.balancesRoot, orderA.tokenS.bits,
256236 {balanceS_A.front (), orderA.balanceSBefore .tradingHistory },
@@ -268,7 +248,7 @@ class RingSettlementGadget : public GadgetT
268248 // Update UserB
269249 updateTradeHistory_B(pb, orderB.balanceSBefore.tradingHistory, subArray(orderB.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
270250 {orderB.tradeHistoryBefore .filled , orderB.tradeHistoryBefore .cancelled , orderB.tradeHistoryBefore .orderID },
271- {filledAfterB. result (), orderB.tradeHistory .getCancelledToStore (), orderB.tradeHistory .getOrderIDToStore ()},
251+ {orderMatching. getFilledAfter_B (), orderB.tradeHistory .getCancelledToStore (), orderB.tradeHistory .getOrderIDToStore ()},
272252 FMT (prefix, " .updateTradeHistory_B" )),
273253 updateBalanceS_B(pb, orderB.accountBefore.balancesRoot, orderB.tokenS.bits,
274254 {balanceS_B.front (), orderB.balanceSBefore .tradingHistory },
@@ -329,23 +309,13 @@ class RingSettlementGadget : public GadgetT
329309 pb.val (tradingHistoryRootA_O) = ringSettlement.balanceUpdateA_O .before .tradingHistoryRoot ;
330310 pb.val (tradingHistoryRootB_O) = ringSettlement.balanceUpdateB_O .before .tradingHistoryRoot ;
331311
312+ // Order fills
313+ fillS_A.generate_r1cs_witness (ringSettlement.ring .fillS_A );
314+ fillS_B.generate_r1cs_witness (ringSettlement.ring .fillS_B );
315+
332316 // Match orders
333317 orderMatching.generate_r1cs_witness ();
334318
335- // Fill amounts
336- uFillS_A.generate_r1cs_witness ();
337- uFillS_B.generate_r1cs_witness ();
338- fillS_A.generate_r1cs_witness (toFloat (pb.val (uFillS_A.result ()), Float24Encoding));
339- fillS_B.generate_r1cs_witness (toFloat (pb.val (uFillS_B.result ()), Float24Encoding));
340- requireAccuracyFillS_A.generate_r1cs_witness ();
341- requireAccuracyFillS_B.generate_r1cs_witness ();
342-
343- // Filled amounts
344- filledA.generate_r1cs_witness ();
345- filledB.generate_r1cs_witness ();
346- filledAfterA.generate_r1cs_witness ();
347- filledAfterB.generate_r1cs_witness ();
348-
349319 // Calculate fees
350320 feeCalculatorA.generate_r1cs_witness ();
351321 feeCalculatorB.generate_r1cs_witness ();
@@ -392,22 +362,12 @@ class RingSettlementGadget : public GadgetT
392362 orderA.generate_r1cs_constraints ();
393363 orderB.generate_r1cs_constraints ();
394364
395- // Match orders
396- orderMatching.generate_r1cs_constraints ();
397-
398- // Fill amounts
399- uFillS_A.generate_r1cs_constraints ();
400- uFillS_B.generate_r1cs_constraints ();
365+ // Order fills
401366 fillS_A.generate_r1cs_constraints ();
402367 fillS_B.generate_r1cs_constraints ();
403- requireAccuracyFillS_A.generate_r1cs_constraints ();
404- requireAccuracyFillS_B.generate_r1cs_constraints ();
405-
406- // Filled amounts
407- filledA.generate_r1cs_constraints ();
408- filledB.generate_r1cs_constraints ();
409- filledAfterA.generate_r1cs_constraints ();
410- filledAfterB.generate_r1cs_constraints ();
368+
369+ // Match orders
370+ orderMatching.generate_r1cs_constraints ();
411371
412372 // Calculate fees
413373 feeCalculatorA.generate_r1cs_constraints ();
0 commit comments