Skip to content

Commit c332570

Browse files
authored
feat: add simplest order matching (#12)
1 parent 88d348a commit c332570

File tree

5 files changed

+97
-41
lines changed

5 files changed

+97
-41
lines changed

packages/contracts/noir/lob_router/src/lib.nr

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,28 @@ mod LobRouter {
33
context: &mut common::Context,
44
seller_secret_key: Field,
55
seller_note: erc20::Erc20NoteConsumptionInputs,
6-
seller_amount: common::TokenAmount,
6+
seller_order: crate::Order,
77
seller_randomness: Field,
88
buyer_secret_key: Field,
99
buyer_note: erc20::Erc20NoteConsumptionInputs,
10-
buyer_amount: common::TokenAmount,
10+
buyer_order: crate::Order,
1111
buyer_randomness: Field,
1212
) {
13-
// TODO(security): orders must be signed by parties and the prices should match
13+
// TODO(security): orders must be signed by parties
14+
15+
assert(
16+
seller_order.sell_amount == buyer_order.buy_amount,
17+
"seller order amount does not match buyer order amount",
18+
);
19+
assert(
20+
seller_order.buy_amount == buyer_order.sell_amount,
21+
"buyer order amount does not match seller order amount",
22+
);
23+
let seller_amount = seller_order.sell_amount;
24+
let buyer_amount = seller_order.buy_amount;
25+
assert(seller_amount.token == seller_note.note.amount.token, "invalid seller note token");
26+
assert(buyer_amount.token == buyer_note.note.amount.token, "invalid buyer note token");
27+
1428
erc20::Token::transfer(
1529
context,
1630
seller_secret_key,
@@ -32,3 +46,11 @@ mod LobRouter {
3246
);
3347
}
3448
}
49+
50+
pub struct Order {
51+
pub sell_amount: common::TokenAmount,
52+
pub buy_amount: common::TokenAmount,
53+
/// Hide order contents from other parties and outside world
54+
// TODO(perf): not sure if this is needed because orders are secret shared in an MPC network
55+
pub randomness: Field,
56+
}

packages/contracts/noir/lob_router_swap/Prover1.toml

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
seller_secret_key = "0x118f09bc73ec486db2030077142f2bceba2a4d4c9e0f6147d776f8ca8ec02ff1"
2-
seller_randomness = "0x182b64fb6668fe979510b16b36a7e9468e7a5063c1912e48f7a206d28e4d8e6a"
3-
2+
seller_randomness = "0x0b0caedd7f1d06928a708301d43f00811de6c3894a1f8acfdfc3752bc32c9f91"
43

54
[tree_roots]
6-
note_hash_root = "0x25c912389a3b4dae01c0c9ce451affa51175104d34fb0741cb2ded0c690ce0c6"
5+
note_hash_root = "0x26cb85e05fd3cd1fbd91297569b8b8780a8ab5ed65107fb1e96d785c911f9fda"
76
nullifier_root = "0x0aa63c509390ad66ecd821998aabb16a818bcc5db5cf4accc0ce1821745244e9"
87

98
[seller_note]
109
note_sibling_path = [
11-
"0x127d42b3838a09a1d2a77d51d45efc2d872f7441434c8d73a2a65addeb63a26f",
10+
"0x26a278428101c2dbba8f872d9a5e3f70507c085e3df8671ac4951ac86f3440bf",
1211
"0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1",
1312
"0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290",
1413
"0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20",
@@ -52,18 +51,18 @@ note_sibling_path = [
5251
note_index = "0x0"
5352

5453
[seller_note.nullifier_low_leaf_preimage]
55-
nullifier = "3502761326491897903912307329680840616114346130080727477006195110249521578463"
56-
next_nullifier = "4622624008295404567211139969641762687984164848421786975202499265153077664709"
57-
next_index = "37"
54+
nullifier = "13830031299663409915258849247374171055586994045724027710947409933442635819679"
55+
next_nullifier = "14448247143185075808205507000294482673348150188671637055844838122639309371309"
56+
next_index = "54"
5857

5958
[seller_note.nullifier_low_leaf_membership_witness]
60-
leaf_index = "11"
59+
leaf_index = "16"
6160
sibling_path = [
62-
"9592323143927693440852487918340834996926447034477944741845172904821136138140",
63-
"5497606502829525072786717709301021256722113035609372121941390198982065775880",
64-
"12013063095546063372417655624755911539489891906351320936318682923960676894657",
65-
"10285196304867229525576259386556584044657339834734116745467765038834977104298",
66-
"2903488935950838990208405343998070456796334091752591474019785544969867651224",
61+
"18612157520988203038829918955464149978245584422880519644509407060774751013869",
62+
"12324420131452739431074831828474476646824710186358500890131801772704214614256",
63+
"6183856203401291583559187713266357947024267372151080140631247835359697422923",
64+
"13090692521104750119417174288415102276391152553208717353765562027256507892105",
65+
"5598734783864514682111263155111541308279258928439310216065335426757541199664",
6766
"3766428923666518331463526421481938811267455056246707954327363314469768904474",
6867
"796074195456137668475057404256202455048248910468542119987582633322559749494",
6968
"20567739078944838550556895816409602128127282297589578747131836752205066334747",
@@ -102,16 +101,28 @@ sibling_path = [
102101
]
103102

104103
[seller_note.note]
105-
randomness = "0x0737cddb7da2fbd46f2fa3eabafd8f7c67b0930d5a91bb86def7057e0eef6715"
104+
randomness = "0x07c1f0f96711747754a2932b1102e02b83f2eac65762db6278d447dd1f111efa"
106105

107106
[seller_note.note.owner]
108107
inner = "0x28c7eef33d7e5d31b9d2cc09c783294d91c36e05b7b815d96549f91fe0d3b0d4"
109108

110109
[seller_note.note.amount.token]
111-
inner = "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6"
110+
inner = "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318"
112111

113112
[seller_note.note.amount.amount]
114113
value = "100"
115114

116-
[seller_amount]
115+
[seller_order]
116+
randomness = "0x0b0caedd7f1d06928a708301d43f00811de6c3894a1f8acfdfc3752bc32c9f91"
117+
118+
[seller_order.sell_amount.token]
119+
inner = "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318"
120+
121+
[seller_order.sell_amount.amount]
117122
value = "70"
123+
124+
[seller_order.buy_amount.token]
125+
inner = "0x610178dA211FEF7D417bC0e6FeD39F05609AD788"
126+
127+
[seller_order.buy_amount.amount]
128+
value = "2"

packages/contracts/noir/lob_router_swap/Prover2.toml

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
buyer_secret_key = "0x2120f33c0d324bfe571a18c1d5a1c9cdc6db60621e35bc78be1ced339f936a71"
2-
buyer_randomness = "0x134fc3cd998fcbba3e4826e491da44a0b0e41072baadc927e21544b69ba7f91e"
2+
buyer_randomness = "0x1170de694d6d728817d9bb8ac5d92198e60e34c33c57e1915682e3f541461059"
33

44
[buyer_note]
55
note_sibling_path = [
6-
"0x24e551d406fc3f56d3b74a5a58c83645f9ad424e384e0fd97e5cf309a4695ab3",
6+
"0x1a0351e9ad9a380c68ef5300baabd7b40b34c912577bd9d012e2df9fef45264a",
77
"0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1",
88
"0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290",
99
"0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20",
@@ -47,19 +47,19 @@ note_sibling_path = [
4747
note_index = "0x1"
4848

4949
[buyer_note.nullifier_low_leaf_preimage]
50-
nullifier = "14955778689319551303378818347778024347630018933433821705130993688099992966438"
51-
next_nullifier = "16244632380179304245573134952201909709066181424366511358474662925880755537391"
52-
next_index = "63"
50+
nullifier = "3020367463424511551486341097408743328878406344336466401765430080394102349391"
51+
next_nullifier = "3163318570942166511124552723585457577379612198132068460434913196460425889368"
52+
next_index = "60"
5353

5454
[buyer_note.nullifier_low_leaf_membership_witness]
55-
leaf_index = "44"
55+
leaf_index = "14"
5656
sibling_path = [
57-
"19153318808262274360025480944602576430653382995793665568014074536604617664453",
58-
"12204236326854526973223496557357200239778090370172071879236879436466357624621",
59-
"405351999194507832591771161941330294949683334785194602943911205188154186380",
60-
"2959426397026183366069050464650984242887556596265649681973607242888685387779",
61-
"2492782479763675264093896873817694335040885070876443070196661113661962129135",
62-
"7997675936567769706222583500490338185379747281415057124249902920940843577209",
57+
"1513595028644017075204557416826288607860918101548629507045554740956732507395",
58+
"1697818760348717895994122047875291423154940241675140322766248342327844012824",
59+
"16835990894927923730876449688911465722193030824506892140772366596798846027145",
60+
"10285196304867229525576259386556584044657339834734116745467765038834977104298",
61+
"2903488935950838990208405343998070456796334091752591474019785544969867651224",
62+
"3766428923666518331463526421481938811267455056246707954327363314469768904474",
6363
"796074195456137668475057404256202455048248910468542119987582633322559749494",
6464
"20567739078944838550556895816409602128127282297589578747131836752205066334747",
6565
"2915761020738377646169465098196184536995852317462848975418156916828302972897",
@@ -97,16 +97,28 @@ sibling_path = [
9797
]
9898

9999
[buyer_note.note]
100-
randomness = "0x28eae219c97727f63d73b3cd468d3325302536239c824ca1bcfed2941c8d6ded"
100+
randomness = "0x1af08c095db372d1373088e89772122824ecdb13dfc27754f32b00d4974d4f01"
101101

102102
[buyer_note.note.owner]
103103
inner = "0x2b7bd70beb13e310f4593dbc807332acba0f01c4586f17cf984eedd7e1437414"
104104

105105
[buyer_note.note.amount.token]
106-
inner = "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318"
106+
inner = "0x610178dA211FEF7D417bC0e6FeD39F05609AD788"
107107

108108
[buyer_note.note.amount.amount]
109109
value = "10"
110110

111-
[buyer_amount]
112-
value = "3"
111+
[buyer_order]
112+
randomness = "0x1170de694d6d728817d9bb8ac5d92198e60e34c33c57e1915682e3f541461059"
113+
114+
[buyer_order.sell_amount.token]
115+
inner = "0x610178dA211FEF7D417bC0e6FeD39F05609AD788"
116+
117+
[buyer_order.sell_amount.amount]
118+
value = "2"
119+
120+
[buyer_order.buy_amount.token]
121+
inner = "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318"
122+
123+
[buyer_order.buy_amount.amount]
124+
value = "70"

packages/contracts/noir/lob_router_swap/src/main.nr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ fn main(
33
// seller
44
seller_secret_key: Field,
55
seller_note: erc20::Erc20NoteConsumptionInputs,
6-
seller_amount: common::TokenAmount,
6+
seller_order: lob_router::Order,
77
seller_randomness: Field,
88
// buyer
99
buyer_secret_key: Field,
1010
buyer_note: erc20::Erc20NoteConsumptionInputs,
11-
buyer_amount: common::TokenAmount,
11+
buyer_order: lob_router::Order,
1212
buyer_randomness: Field,
1313
) -> pub common::Result<4, 2> {
1414
let mut context = common::Context::from(tree_roots);
@@ -17,11 +17,11 @@ fn main(
1717
&mut context,
1818
seller_secret_key,
1919
seller_note,
20-
seller_amount,
20+
seller_order,
2121
seller_randomness,
2222
buyer_secret_key,
2323
buyer_note,
24-
buyer_amount,
24+
buyer_order,
2525
buyer_randomness,
2626
);
2727

packages/contracts/sdk/LobService.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,33 @@ export class LobService {
5656
randomness: buyerRandomness,
5757
});
5858

59+
const seller_order = {
60+
sell_amount: await params.sellerAmount.toNoir(),
61+
buy_amount: await params.buyerAmount.toNoir(),
62+
randomness: sellerRandomness,
63+
};
64+
const buyer_order = {
65+
sell_amount: await params.buyerAmount.toNoir(),
66+
buy_amount: await params.sellerAmount.toNoir(),
67+
randomness: buyerRandomness,
68+
};
69+
5970
const input = {
6071
tree_roots: await this.trees.getTreeRoots(),
6172
seller_secret_key: params.sellerSecretKey,
6273
seller_note: await this.poolErc20.toNoteConsumptionInputs(
6374
params.sellerSecretKey,
6475
params.sellerNote,
6576
),
66-
seller_amount: await params.sellerAmount.toNoir(),
77+
seller_order,
6778
seller_randomness: sellerRandomness,
6879

6980
buyer_secret_key: params.buyerSecretKey,
7081
buyer_note: await this.poolErc20.toNoteConsumptionInputs(
7182
params.buyerSecretKey,
7283
params.buyerNote,
7384
),
74-
buyer_amount: await params.buyerAmount.toNoir(),
85+
buyer_order,
7586
buyer_randomness: buyerRandomness,
7687
};
7788
const { proof } = await prove("swap", swapCircuit, input);

0 commit comments

Comments
 (0)