Skip to content

Commit c918b16

Browse files
Brechtpddong77wangdong
authored
[Loopring 3.6] Demo AMM pool (#1737)
* [protocol 3.6] AMM pool testing * [protocol 3.6] More AMM pool testing * [protocol 3.6] Improved AMM pool + testing * [protocol 3.6] Small optimizations * [protocol 3.6] Misc improvements/fixes AMM pool * unify submitBlocksCompressedWithCallbacks (#1761) * unify submitBlocksCompressedWithCallbacks * unify submitBlocksCompressedWithCallbacks * Amm approve erc20 on setup (#1762) * approve upon setup * approve upon setup * allow withdraw all tokens (#1763) * make agent explicitly inherit IAgent (#1765) * [protocol 3.6] Small fixes * [protocol 3.6] uint96 safe math (#1766) * [AMM Pool] Rename variables and extract methods (#1772) * rename variables * extract methods * extract methods * [AMM Pool] Some small improvements (#1773) * add changes based on my questions * more Co-authored-by: wangdong <[email protected]> Co-authored-by: Brechtpd <[email protected]> * [AMM pool] Changed approvals + locking logic (#1771) * [protocol 3.6] Changed approvals + locking logic * [protocol 3.6] LP tokens * [protocol 3.6] Use minPoolAmountOut for joins * [protocol 3.6] AMM pool signature assisted L1 withdrawals + fixes * [protocol 3.6] Small improvements/fixes Co-authored-by: Daniel Wang <[email protected]> Co-authored-by: wangdong <[email protected]>
1 parent e8f27f2 commit c918b16

35 files changed

+8065
-6060
lines changed

packages/loopring_v3.js/src/exchange_v3.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -675,18 +675,29 @@ export class ExchangeV3 {
675675

676676
// Get the block data from the transaction data
677677
//const submitBlocksFunctionSignature = "0x8dadd3af"; // submitBlocks
678-
const submitBlocksFunctionSignature = "0x14867212"; // submitBlocksCompressed
678+
const submitBlocksFunctionSignature = "0x78e9a4f3"; // submitBlocksWithCallbacks
679679

680680
const transaction = await this.web3.eth.getTransaction(
681681
event.transactionHash
682682
);
683683
//console.log(transaction.input);
684684
if (transaction.input.startsWith(submitBlocksFunctionSignature)) {
685685
const decodedCompressedInput = this.web3.eth.abi.decodeParameters(
686-
["bytes"],
686+
[
687+
"bool",
688+
"bytes",
689+
{
690+
"struct BlockCallback[]": {
691+
target: "address",
692+
blockIdx: "uint",
693+
txIdx: "uint",
694+
auxiliaryData: "bytes"
695+
}
696+
}
697+
],
687698
"0x" + transaction.input.slice(2 + 4 * 2)
688699
);
689-
const data = decompressZeros(decodedCompressedInput[0]);
700+
const data = decompressZeros(decodedCompressedInput[1]);
690701
// Get the inputs to commitBlock
691702
const decodedInputs = this.web3.eth.abi.decodeParameters(
692703
[

packages/loopring_v3/circuit/Circuits/TransferCircuit.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class TransferCircuit : public BaseTransactionCircuit
5454
DualVariableGadget payer_to;
5555
DualVariableGadget payee_toAccountID;
5656
DualVariableGadget maxFee;
57+
DualVariableGadget putAddressesInDA;
5758

5859
// Check if the inputs are valid
5960
EqualGadget isTransferTx;
@@ -93,6 +94,7 @@ class TransferCircuit : public BaseTransactionCircuit
9394

9495
// DA optimization
9596
OrGadget da_NeedsToAddress;
97+
OrGadget da_NeedsFromAddress;
9698
ArrayTernaryGadget da_To;
9799
ArrayTernaryGadget da_From;
98100

@@ -136,6 +138,7 @@ class TransferCircuit : public BaseTransactionCircuit
136138
payer_to(pb, NUM_BITS_ADDRESS, FMT(prefix, ".payer_to")),
137139
payee_toAccountID(pb, NUM_BITS_ACCOUNT, FMT(prefix, ".payee_toAccountID")),
138140
maxFee(pb, NUM_BITS_AMOUNT, FMT(prefix, ".maxFee")),
141+
putAddressesInDA(pb, 1, FMT(prefix, ".putAddressesInDA")),
139142

140143
// Check if the inputs are valid
141144
isTransferTx( //
@@ -256,17 +259,21 @@ class TransferCircuit : public BaseTransactionCircuit
256259
// DA optimization
257260
da_NeedsToAddress(
258261
pb,
259-
{toAccountValid.isNewAccount(), isConditional.result()},
262+
{toAccountValid.isNewAccount(), isConditional.result(), putAddressesInDA.packed},
260263
FMT(prefix, ".da_NeedsToAddress")),
261264
da_To(
262265
pb,
263266
da_NeedsToAddress.result(),
264267
to.bits,
265268
VariableArrayT(NUM_BITS_ADDRESS, state.constants._0),
266269
FMT(prefix, ".da_To")),
270+
da_NeedsFromAddress(
271+
pb,
272+
{isConditional.result(), putAddressesInDA.packed},
273+
FMT(prefix, ".da_NeedsFromAddress")),
267274
da_From(
268275
pb,
269-
isConditional.result(),
276+
da_NeedsFromAddress.result(),
270277
from.bits,
271278
VariableArrayT(NUM_BITS_ADDRESS, state.constants._0),
272279
FMT(prefix, ".da_From")),
@@ -361,6 +368,7 @@ class TransferCircuit : public BaseTransactionCircuit
361368
payer_to.generate_r1cs_witness(pb, transfer.payerTo);
362369
payee_toAccountID.generate_r1cs_witness(pb, transfer.payeeToAccountID);
363370
maxFee.generate_r1cs_witness(pb, transfer.maxFee);
371+
putAddressesInDA.generate_r1cs_witness(pb, transfer.putAddressesInDA);
364372

365373
// Check if the inputs are valid
366374
isTransferTx.generate_r1cs_witness();
@@ -401,6 +409,7 @@ class TransferCircuit : public BaseTransactionCircuit
401409
// DA optimization
402410
da_NeedsToAddress.generate_r1cs_witness();
403411
da_To.generate_r1cs_witness();
412+
da_NeedsFromAddress.generate_r1cs_witness();
404413
da_From.generate_r1cs_witness();
405414

406415
// Fee as float
@@ -438,6 +447,7 @@ class TransferCircuit : public BaseTransactionCircuit
438447
payer_to.generate_r1cs_constraints(true);
439448
payee_toAccountID.generate_r1cs_constraints(true);
440449
maxFee.generate_r1cs_constraints(true);
450+
putAddressesInDA.generate_r1cs_constraints(true);
441451

442452
// Check if the inputs are valid
443453
isTransferTx.generate_r1cs_constraints();
@@ -478,6 +488,7 @@ class TransferCircuit : public BaseTransactionCircuit
478488
// DA optimization
479489
da_NeedsToAddress.generate_r1cs_constraints();
480490
da_To.generate_r1cs_constraints();
491+
da_NeedsFromAddress.generate_r1cs_constraints();
481492
da_From.generate_r1cs_constraints();
482493

483494
// Fee as float

packages/loopring_v3/circuit/Utils/Data.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ static auto dummyTransfer = R"({
6666
"payerToAccountID": 2,
6767
"payerTo": "2",
6868
"payeeToAccountID": 2,
69-
"storageID": "0"
69+
"storageID": "0",
70+
"putAddressesInDA": false
7071
})"_json;
7172

7273
static auto dummyWithdraw = R"({
@@ -437,6 +438,7 @@ class Transfer
437438
ethsnarks::FieldT payerTo;
438439
ethsnarks::FieldT payeeToAccountID;
439440
ethsnarks::FieldT maxFee;
441+
ethsnarks::FieldT putAddressesInDA;
440442
ethsnarks::FieldT type;
441443
};
442444

@@ -457,6 +459,7 @@ static void from_json(const json &j, Transfer &transfer)
457459
transfer.payerTo = ethsnarks::FieldT(j["payerTo"].get<std::string>().c_str());
458460
transfer.payeeToAccountID = ethsnarks::FieldT(j.at("payeeToAccountID"));
459461
transfer.maxFee = ethsnarks::FieldT(j["maxFee"].get<std::string>().c_str());
462+
transfer.putAddressesInDA = ethsnarks::FieldT(j.at("putAddressesInDA").get<bool>() ? 1 : 0);
460463
transfer.type = ethsnarks::FieldT(j.at("type"));
461464
}
462465

0 commit comments

Comments
 (0)