Skip to content

Commit ec63741

Browse files
authored
feature: merge PlaceOrder and SpotTrade; fix #145 (#152)
1 parent f06dd9c commit ec63741

39 files changed

+1469
-1226
lines changed

helper.ts/state-utils.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,18 @@ function accountState2Array(st) {
3333
function hashAccountState(st) {
3434
return hash(accountState2Array(st));
3535
}
36-
37-
const emptyOrderHash = hashOrderState({
38-
order_id: 0n,
39-
tokenbuy: 0n,
40-
tokensell: 0n,
41-
filled_sell: 0n,
42-
filled_buy: 0n,
43-
total_sell: 0n,
44-
total_buy: 0n,
45-
});
36+
function emptyOrder() {
37+
return {
38+
order_id: 0n,
39+
tokenbuy: 0n,
40+
tokensell: 0n,
41+
filled_sell: 0n,
42+
filled_buy: 0n,
43+
total_sell: 0n,
44+
total_buy: 0n,
45+
};
46+
}
47+
const emptyOrderHash = hashOrderState(emptyOrder());
4648

4749
function calculateGenesisOrderRoot(orderLevels) {
4850
return new Tree<bigint>(orderLevels, emptyOrderHash).getRoot();
@@ -72,4 +74,4 @@ function hashOrderState(st) {
7274
return hash(orderState2Array(st));
7375
}
7476

75-
export { hashAccountState, hashOrderState, emptyOrderHash, calculateGenesisOrderRoot };
77+
export { hashAccountState, hashOrderState, emptyOrder, emptyOrderHash, calculateGenesisOrderRoot };

package-lock.json

Lines changed: 7 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"printf": "^0.6.1",
2525
"scrypt-js": "^3.0.1",
2626
"shelljs": "^0.8.4",
27-
"snarkit": "git+https://github.com/fluidex/snarkit.git",
27+
"snarkit": "github:fluidex/snarkit",
2828
"snarkjs": "^0.3.55",
2929
"tmp-promise": "^3.0.2",
3030
"ts-node": "^9.1.1",

src/base_tx.circom

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ template BalanceChecker(balanceLevels, accountLevels) {
3838
}
3939

4040

41+
42+
4143
component balanceTree = CalculateRootFromMerklePath(balanceLevels);
4244
balanceTree.leaf <== balance;
4345
for (var i = 0; i < balanceLevels; i++) {
@@ -60,12 +62,10 @@ template BalanceChecker(balanceLevels, accountLevels) {
6062
accountTree.path_index[i] <== account_path_index[i];
6163
accountTree.path_elements[i][0] <== account_path_elements[i][0];
6264
}
65+
component checkEq = ForceEqualIfEnabled();
66+
checkEq.enabled <== enabled;
67+
checkEq.in[0] <== accountTree.root;
68+
checkEq.in[1] <== accountRoot;
6369

64-
component check = ForceEqualIfEnabled();
65-
check.enabled <== enabled;
66-
check.in[0] <== accountTree.root;
67-
check.in[1] <== accountRoot;
68-
69-
7070

7171
}

src/block.circom

Lines changed: 75 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ include "./deposit_to_new.circom";
66
include "./deposit_to_old.circom";
77
include "./transfer.circom";
88
include "./withdraw.circom";
9-
include "./place_order.circom";
9+
//include "./place_order.circom";
1010
include "./spot_trade.circom";
1111
include "./base_tx.circom";
1212

@@ -28,7 +28,6 @@ template Block(nTxs, balanceLevels, orderLevels, accountLevels) {
2828
signal input encodedTxs[nTxs][TxLength()];
2929

3030
// State
31-
3231
signal input balance_path_elements[nTxs][4][balanceLevels][1]; // index meanings: [tx idx][sender, receiver, sender, receiver][levels][siblings]
3332
signal input order_path_elements[nTxs][2][orderLevels][1]; // index meanings: [tx idx][order_account1, order_account2][levels][siblings]
3433
signal input account_path_elements[nTxs][2][accountLevels][1]; // index meanings: [tx idx][sender, receiver][levels][siblings]
@@ -97,7 +96,7 @@ template Block(nTxs, balanceLevels, orderLevels, accountLevels) {
9796
component processDepositToOld[nTxs];
9897
component processTransfer[nTxs];
9998
component processWithdraw[nTxs];
100-
component processPlaceOrder[nTxs];
99+
//component processPlaceOrder[nTxs];
101100
component processSpotTrade[nTxs];
102101

103102
for (var i = 0; i < nTxs; i++) {
@@ -180,9 +179,26 @@ template Block(nTxs, balanceLevels, orderLevels, accountLevels) {
180179
processTransfer[i] = Transfer(balanceLevels, accountLevels);
181180
processTransfer[i].enabled <== enableTransfer[i].out;
182181

183-
for (var j = 0; j < TxLength(); j++) {
184-
processTransfer[i].in[j] <== encodedTxs[i][j];
185-
}
182+
processTransfer[i].fromAccountID <== decodedTx[i].accountID1;
183+
processTransfer[i].toAccountID <== decodedTx[i].accountID2;
184+
processTransfer[i].tokenID <== decodedTx[i].tokenID1;
185+
processTransfer[i].amount <== decodedTx[i].amount;
186+
//processTransfer[i].nonce <== decodedTx[i].nonce1;
187+
processTransfer[i].nonce1 <== decodedTx[i].nonce1;
188+
processTransfer[i].nonce2 <== decodedTx[i].nonce2;
189+
processTransfer[i].sign1 <== decodedTx[i].sign1;
190+
processTransfer[i].sign2 <== decodedTx[i].sign2;
191+
processTransfer[i].ay1 <== decodedTx[i].ay1;
192+
processTransfer[i].ay2 <== decodedTx[i].ay2;
193+
processTransfer[i].ethAddr1 <== decodedTx[i].ethAddr1;
194+
processTransfer[i].ethAddr2 <== decodedTx[i].ethAddr2;
195+
196+
processTransfer[i].balance1 <== decodedTx[i].balance1;
197+
processTransfer[i].balance2 <== decodedTx[i].balance2;
198+
processTransfer[i].sigL2Hash <== decodedTx[i].sigL2Hash;
199+
processTransfer[i].s <== decodedTx[i].s;
200+
processTransfer[i].r8x <== decodedTx[i].r8x;
201+
processTransfer[i].r8y <== decodedTx[i].r8y;
186202

187203
processTransfer[i].orderRoot1 <== orderRoots[i][0];
188204
processTransfer[i].orderRoot2 <== orderRoots[i][1];
@@ -222,63 +238,63 @@ template Block(nTxs, balanceLevels, orderLevels, accountLevels) {
222238
processWithdraw[i].oldAccountRoot <== oldAccountRoots[i];
223239
processWithdraw[i].newAccountRoot <== newAccountRoots[i];
224240

225-
// try place_order
226-
227-
processPlaceOrder[i] = PlaceOrder(balanceLevels, orderLevels, accountLevels);
228-
processPlaceOrder[i].enabled <== enablePlaceOrder[i].out;
229-
for (var j = 0; j < TxLength(); j++) {
230-
processPlaceOrder[i].in[j] <== encodedTxs[i][j];
231-
}
232-
233-
for (var j = 0; j < balanceLevels; j++) {
234-
processPlaceOrder[i].balance_path_elements[j][0] <== balance_path_elements[i][0][j][0];
235-
}
236-
for (var j = 0; j < orderLevels; j++) {
237-
processPlaceOrder[i].order_path_elements[j][0] <== order_path_elements[i][0][j][0];
238-
}
239-
for (var j = 0; j < accountLevels; j++) {
240-
processPlaceOrder[i].account_path_elements[j][0] <== account_path_elements[i][0][j][0];
241-
}
242-
processPlaceOrder[i].oldOrderRoot <== orderRoots[i][0];
243-
processPlaceOrder[i].newOrderRoot <== orderRoots[i][1];
244-
processPlaceOrder[i].oldAccountRoot <== oldAccountRoots[i];
245-
processPlaceOrder[i].newAccountRoot <== newAccountRoots[i];
246-
247241
// try spot_trade
248242
processSpotTrade[i] = SpotTrade(balanceLevels, orderLevels, accountLevels);
249243
processSpotTrade[i].enabled <== enableSpotTrade[i].out;
250-
processSpotTrade[i].order1_pos <== decodedTx[i].tokenID3;
251-
processSpotTrade[i].order1_id <== decodedTx[i].order1_id;
252-
processSpotTrade[i].order1_tokensell <== decodedTx[i].tokenID1;
253-
processSpotTrade[i].order1_amountsell <== decodedTx[i].order1_amountsell;
254-
processSpotTrade[i].order1_tokenbuy <== decodedTx[i].tokenID2;
255-
processSpotTrade[i].order1_amountbuy <== decodedTx[i].order1_amountbuy;
256-
processSpotTrade[i].order2_pos <== decodedTx[i].tokenID4;
257-
processSpotTrade[i].order2_id <== decodedTx[i].order2_id;
258-
processSpotTrade[i].order2_tokensell <== decodedTx[i].tokenID2;
259-
processSpotTrade[i].order2_amountsell <== decodedTx[i].order2_amountsell;
260-
processSpotTrade[i].order2_tokenbuy <== decodedTx[i].tokenID1;
261-
processSpotTrade[i].order2_amountbuy <== decodedTx[i].order2_amountbuy;
262-
processSpotTrade[i].amount_2to1 <== decodedTx[i].amount2;
244+
245+
246+
processSpotTrade[i].oldOrder1ID <== decodedTx[i].oldOrder1ID;
247+
processSpotTrade[i].oldOrder1TokenSell <== decodedTx[i].oldOrder1TokenSell;
248+
processSpotTrade[i].oldOrder1FilledSell <== decodedTx[i].oldOrder1FilledSell;
249+
processSpotTrade[i].oldOrder1AmountSell <== decodedTx[i].oldOrder1AmountSell;
250+
processSpotTrade[i].oldOrder1TokenBuy <== decodedTx[i].oldOrder1TokenBuy;
251+
processSpotTrade[i].oldOrder1FilledBuy <== decodedTx[i].oldOrder1FilledBuy;
252+
processSpotTrade[i].oldOrder1AmountBuy <== decodedTx[i].oldOrder1AmountBuy;
253+
processSpotTrade[i].newOrder1ID <== decodedTx[i].newOrder1ID;
254+
processSpotTrade[i].newOrder1TokenSell <== decodedTx[i].newOrder1TokenSell;
255+
processSpotTrade[i].newOrder1FilledSell <== decodedTx[i].newOrder1FilledSell;
256+
processSpotTrade[i].newOrder1AmountSell <== decodedTx[i].newOrder1AmountSell;
257+
processSpotTrade[i].newOrder1TokenBuy <== decodedTx[i].newOrder1TokenBuy;
258+
processSpotTrade[i].newOrder1FilledBuy <== decodedTx[i].newOrder1FilledBuy;
259+
processSpotTrade[i].newOrder1AmountBuy <== decodedTx[i].newOrder1AmountBuy;
260+
processSpotTrade[i].oldOrder2ID <== decodedTx[i].oldOrder2ID;
261+
processSpotTrade[i].oldOrder2TokenSell <== decodedTx[i].oldOrder2TokenSell;
262+
processSpotTrade[i].oldOrder2FilledSell <== decodedTx[i].oldOrder2FilledSell;
263+
processSpotTrade[i].oldOrder2AmountSell <== decodedTx[i].oldOrder2AmountSell;
264+
processSpotTrade[i].oldOrder2TokenBuy <== decodedTx[i].oldOrder2TokenBuy;
265+
processSpotTrade[i].oldOrder2FilledBuy <== decodedTx[i].oldOrder2FilledBuy;
266+
processSpotTrade[i].oldOrder2AmountBuy <== decodedTx[i].oldOrder2AmountBuy;
267+
processSpotTrade[i].newOrder2ID <== decodedTx[i].newOrder2ID;
268+
processSpotTrade[i].newOrder2TokenSell <== decodedTx[i].newOrder2TokenSell;
269+
processSpotTrade[i].newOrder2FilledSell <== decodedTx[i].newOrder2FilledSell;
270+
processSpotTrade[i].newOrder2AmountSell <== decodedTx[i].newOrder2AmountSell;
271+
processSpotTrade[i].newOrder2TokenBuy <== decodedTx[i].newOrder2TokenBuy;
272+
processSpotTrade[i].newOrder2FilledBuy <== decodedTx[i].newOrder2FilledBuy;
273+
processSpotTrade[i].newOrder2AmountBuy <== decodedTx[i].newOrder2AmountBuy;
274+
275+
276+
processSpotTrade[i].order1Pos <== decodedTx[i].order1Pos;
277+
processSpotTrade[i].order1AccountID <== decodedTx[i].accountID1;
278+
processSpotTrade[i].order1AccountNonce <== decodedTx[i].nonce1;
279+
processSpotTrade[i].order1AccountSign <== decodedTx[i].sign1;
280+
processSpotTrade[i].order1AccountAy <== decodedTx[i].ay1;
281+
processSpotTrade[i].order1AccountEthAddr <== decodedTx[i].ethAddr1;
282+
283+
processSpotTrade[i].order2Pos <== decodedTx[i].order2Pos;
284+
processSpotTrade[i].order2AccountID <== decodedTx[i].accountID2;
285+
processSpotTrade[i].order2AccountNonce <== decodedTx[i].nonce2;
286+
processSpotTrade[i].order2AccountSign <== decodedTx[i].sign2;
287+
processSpotTrade[i].order2AccountAy <== decodedTx[i].ay2;
288+
processSpotTrade[i].order2AccountEthAddr <== decodedTx[i].ethAddr2;
289+
263290
processSpotTrade[i].amount_1to2 <== decodedTx[i].amount;
264-
processSpotTrade[i].order1_filledsell <== decodedTx[i].order1_filledsell;
265-
processSpotTrade[i].order1_filledbuy <== decodedTx[i].order1_filledbuy;
266-
processSpotTrade[i].order2_filledsell <== decodedTx[i].order2_filledsell;
267-
processSpotTrade[i].order2_filledbuy <== decodedTx[i].order2_filledbuy;
268-
processSpotTrade[i].order1_accountID <== decodedTx[i].accountID1;
269-
processSpotTrade[i].order2_accountID <== decodedTx[i].accountID2;
270-
processSpotTrade[i].order1_account_nonce <== decodedTx[i].nonce1;
271-
processSpotTrade[i].order2_account_nonce <== decodedTx[i].nonce2;
272-
processSpotTrade[i].order1_account_sign <== decodedTx[i].sign1;
273-
processSpotTrade[i].order2_account_sign <== decodedTx[i].sign2;
274-
processSpotTrade[i].order1_account_ay <== decodedTx[i].ay1;
275-
processSpotTrade[i].order2_account_ay <== decodedTx[i].ay2;
276-
processSpotTrade[i].order1_account_ethAddr <== decodedTx[i].ethAddr1;
277-
processSpotTrade[i].order2_account_ethAddr <== decodedTx[i].ethAddr2;
278-
processSpotTrade[i].order1_token_sell_balance <== decodedTx[i].balance1;
279-
processSpotTrade[i].order1_token_buy_balance <== decodedTx[i].balance4;
280-
processSpotTrade[i].order2_token_sell_balance <== decodedTx[i].balance3;
281-
processSpotTrade[i].order2_token_buy_balance <== decodedTx[i].balance2;
291+
processSpotTrade[i].amount_2to1 <== decodedTx[i].amount2;
292+
293+
processSpotTrade[i].order1TokenSellBalance <== decodedTx[i].balance1;
294+
processSpotTrade[i].order2TokenBuyBalance <== decodedTx[i].balance2;
295+
processSpotTrade[i].order2TokenSellBalance <== decodedTx[i].balance3;
296+
processSpotTrade[i].order1TokenBuyBalance <== decodedTx[i].balance4;
297+
282298
for (var j = 0; j < orderLevels; j++) {
283299
processSpotTrade[i].order_path_elements[0][j][0] <== order_path_elements[i][0][j][0];
284300
processSpotTrade[i].order_path_elements[1][j][0] <== order_path_elements[i][1][j][0];

src/constants.circom

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,3 @@ function TxTypeWithdraw() { return 3; }
55
function TxTypePlaceOrder() { return 4; }
66
function TxTypeSpotTrade() { return 5; }
77
function TxTypeNop() { return 6; }
8-
9-
function TxLength() { return 36; }

0 commit comments

Comments
 (0)