@@ -159,16 +159,14 @@ class RingSettlementGadget : public GadgetT
159159 TransferGadget protocolFeeA_from_balanceAO_to_balanceAP;
160160 TransferGadget protocolFeeB_from_balanceBO_to_balanceBP;
161161
162- // Update trading history
163- UpdateTradeHistoryGadget updateTradeHistoryA;
164- UpdateTradeHistoryGadget updateTradeHistoryB;
165-
166162 // Update UserA
163+ UpdateTradeHistoryGadget updateTradeHistory_A;
167164 UpdateBalanceGadget updateBalanceS_A;
168165 UpdateBalanceGadget updateBalanceB_A;
169166 UpdateAccountGadget updateAccount_A;
170167
171168 // Update UserB
169+ UpdateTradeHistoryGadget updateTradeHistory_B;
172170 UpdateBalanceGadget updateBalanceS_B;
173171 UpdateBalanceGadget updateBalanceB_B;
174172 UpdateAccountGadget updateAccount_B;
@@ -209,7 +207,7 @@ class RingSettlementGadget : public GadgetT
209207 balanceA_P (pb, FMT(prefix, " .balanceA_P" )),
210208 balanceB_P (pb, FMT(prefix, " .balanceB_P" )),
211209 balanceA_O (pb, FMT(prefix, " .balanceA_O" )),
212- balanceB_O (pb, FMT(prefix, " .balanceA_O " )),
210+ balanceB_O (pb, FMT(prefix, " .balanceB_O " )),
213211 // Initial trading history roots
214212 tradingHistoryRootA_O (make_variable(pb, FMT(prefix, " .tradingHistoryRootA_O" ))),
215213 tradingHistoryRootB_O (make_variable(pb, FMT(prefix, " .tradingHistoryRootB_O" ))),
@@ -249,20 +247,14 @@ class RingSettlementGadget : public GadgetT
249247 protocolFeeA_from_balanceAO_to_balanceAP (pb, balanceA_O, balanceA_P, feeCalculatorA.getProtocolFee(), FMT(prefix, " .protocolFeeA_from_balanceAO_to_balanceAP" )),
250248 protocolFeeB_from_balanceBO_to_balanceBP (pb, balanceB_O, balanceB_P, feeCalculatorB.getProtocolFee(), FMT(prefix, " .protocolFeeB_from_balanceBO_to_balanceBP" )),
251249
252- // Update trading history
253- updateTradeHistoryA (pb, orderA.balanceSBefore.tradingHistory, subArray(orderA.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
254- {orderA.tradeHistoryBefore .filled , orderA.tradeHistoryBefore .cancelled , orderA.tradeHistoryBefore .orderID },
255- {filledAfterA.result (), orderA.tradeHistory .getCancelledToStore (), orderA.tradeHistory .getOrderIDToStore ()},
256- FMT (prefix, " .updateTradeHistoryA" )),
257- updateTradeHistoryB (pb, orderB.balanceSBefore.tradingHistory, subArray(orderB.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
258- {orderB.tradeHistoryBefore .filled , orderB.tradeHistoryBefore .cancelled , orderB.tradeHistoryBefore .orderID },
259- {filledAfterB.result (), orderB.tradeHistory .getCancelledToStore (), orderB.tradeHistory .getOrderIDToStore ()},
260- FMT (prefix, " .updateTradeHistoryB" )),
261-
262250 // Update UserA
251+ updateTradeHistory_A (pb, orderA.balanceSBefore.tradingHistory, subArray(orderA.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
252+ {orderA.tradeHistoryBefore .filled , orderA.tradeHistoryBefore .cancelled , orderA.tradeHistoryBefore .orderID },
253+ {filledAfterA.result (), orderA.tradeHistory .getCancelledToStore (), orderA.tradeHistory .getOrderIDToStore ()},
254+ FMT (prefix, " .updateTradeHistory_A" )),
263255 updateBalanceS_A (pb, orderA.accountBefore.balancesRoot, orderA.tokenS.bits,
264256 {balanceS_A.front (), orderA.balanceSBefore .tradingHistory },
265- {balanceS_A.back (), updateTradeHistoryA .result ()},
257+ {balanceS_A.back (), updateTradeHistory_A .result ()},
266258 FMT (prefix, " .updateBalanceS_A" )),
267259 updateBalanceB_A(pb, updateBalanceS_A.result(), orderA.tokenB.bits,
268260 {balanceB_A.front (), orderA.balanceBBefore .tradingHistory },
@@ -274,9 +266,13 @@ class RingSettlementGadget : public GadgetT
274266 FMT (prefix, " .updateAccount_A" )),
275267
276268 // Update UserB
269+ updateTradeHistory_B(pb, orderB.balanceSBefore.tradingHistory, subArray(orderB.orderID.bits, 0 , NUM_BITS_TRADING_HISTORY),
270+ {orderB.tradeHistoryBefore .filled , orderB.tradeHistoryBefore .cancelled , orderB.tradeHistoryBefore .orderID },
271+ {filledAfterB.result (), orderB.tradeHistory .getCancelledToStore (), orderB.tradeHistory .getOrderIDToStore ()},
272+ FMT (prefix, " .updateTradeHistory_B" )),
277273 updateBalanceS_B(pb, orderB.accountBefore.balancesRoot, orderB.tokenS.bits,
278274 {balanceS_B.front (), orderB.balanceSBefore .tradingHistory },
279- {balanceS_B.back (), updateTradeHistoryB .result ()},
275+ {balanceS_B.back (), updateTradeHistory_B .result ()},
280276 FMT (prefix, " .updateBalanceS_B" )),
281277 updateBalanceB_B(pb, updateBalanceS_B.result(), orderB.tokenB.bits,
282278 {balanceB_B.front (), orderB.balanceBBefore .tradingHistory },
@@ -368,16 +364,14 @@ class RingSettlementGadget : public GadgetT
368364 protocolFeeA_from_balanceAO_to_balanceAP.generate_r1cs_witness ();
369365 protocolFeeB_from_balanceBO_to_balanceBP.generate_r1cs_witness ();
370366
371- // Update trading history
372- updateTradeHistoryA.generate_r1cs_witness (ringSettlement.tradeHistoryUpdate_A .proof );
373- updateTradeHistoryB.generate_r1cs_witness (ringSettlement.tradeHistoryUpdate_B .proof );
374-
375367 // Update UserA
368+ updateTradeHistory_A.generate_r1cs_witness (ringSettlement.tradeHistoryUpdate_A .proof );
376369 updateBalanceS_A.generate_r1cs_witness (ringSettlement.balanceUpdateS_A .proof );
377370 updateBalanceB_A.generate_r1cs_witness (ringSettlement.balanceUpdateB_A .proof );
378371 updateAccount_A.generate_r1cs_witness (ringSettlement.accountUpdate_A .proof );
379372
380373 // Update UserB
374+ updateTradeHistory_B.generate_r1cs_witness (ringSettlement.tradeHistoryUpdate_B .proof );
381375 updateBalanceS_B.generate_r1cs_witness (ringSettlement.balanceUpdateS_B .proof );
382376 updateBalanceB_B.generate_r1cs_witness (ringSettlement.balanceUpdateB_B .proof );
383377 updateAccount_B.generate_r1cs_witness (ringSettlement.accountUpdate_B .proof );
@@ -433,16 +427,14 @@ class RingSettlementGadget : public GadgetT
433427 protocolFeeA_from_balanceAO_to_balanceAP.generate_r1cs_constraints ();
434428 protocolFeeB_from_balanceBO_to_balanceBP.generate_r1cs_constraints ();
435429
436- // Update trading history
437- updateTradeHistoryA.generate_r1cs_constraints ();
438- updateTradeHistoryB.generate_r1cs_constraints ();
439-
440430 // Update UserA
431+ updateTradeHistory_A.generate_r1cs_constraints ();
441432 updateBalanceS_A.generate_r1cs_constraints ();
442433 updateBalanceB_A.generate_r1cs_constraints ();
443434 updateAccount_A.generate_r1cs_constraints ();
444435
445436 // Update UserB
437+ updateTradeHistory_B.generate_r1cs_constraints ();
446438 updateBalanceS_B.generate_r1cs_constraints ();
447439 updateBalanceB_B.generate_r1cs_constraints ();
448440 updateAccount_B.generate_r1cs_constraints ();
@@ -473,17 +465,17 @@ class RingSettlementGadget : public GadgetT
473465 };
474466 }
475467
476- const VariableT getNewAccountsRoot () const
468+ const VariableT& getNewAccountsRoot () const
477469 {
478470 return updateAccount_B.result ();
479471 }
480472
481- const VariableT getNewProtocolBalancesRoot () const
473+ const VariableT& getNewProtocolBalancesRoot () const
482474 {
483475 return updateBalanceB_P.result ();
484476 }
485477
486- const VariableT getNewOperatorBalancesRoot () const
478+ const VariableT& getNewOperatorBalancesRoot () const
487479 {
488480 return updateBalanceB_O.result ();
489481 }
@@ -662,7 +654,7 @@ class RingSettlementCircuit : public GadgetT
662654 signatureVerifier.generate_r1cs_constraints ();
663655
664656 // Check the new merkle root
665- forceEqual (pb, updateAccount_O->result (), merkleRootAfter.packed , " newMerkleRoot" );
657+ requireEqual (pb, updateAccount_O->result (), merkleRootAfter.packed , " newMerkleRoot" );
666658 }
667659
668660 bool generateWitness (const RingSettlementBlock& block)
0 commit comments