Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions packages/loopring_v3/contracts/amm/libamm/AmmJoinProcess.sol
Original file line number Diff line number Diff line change
Expand Up @@ -173,14 +173,14 @@ library AmmJoinProcess
bool initialized = false;
for (uint i = 0; i < ctx.tokens.length; i++) {
if (ctx.tokenBalancesL2[i] > 0) {
uint amountOut = uint(join.joinAmounts[i])
uint maxMintAmount = uint(join.joinAmounts[i])
.mul(ctx.totalSupply) / uint(ctx.tokenBalancesL2[i]);

if (!initialized) {
initialized = true;
mintAmount = amountOut.toUint96();
} else if (amountOut < mintAmount) {
mintAmount = amountOut.toUint96();
mintAmount = maxMintAmount.toUint96();
} else if (mintAmount > maxMintAmount) {
mintAmount = maxMintAmount.toUint96();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,25 @@ import "./AmmExitProcess.sol";
import "./AmmJoinProcess.sol";
import "./AmmPoolToken.sol";
import "./AmmUpdateProcess.sol";
import "./AmmVirtualBalanceProcess.sol";
import "./AmmWithdrawProcess.sol";


/// @title AmmTransactionReceiver
library AmmTransactionReceiver
{
using AmmDepositProcess for AmmData.State;
using AmmExitProcess for AmmData.State;
using AmmJoinProcess for AmmData.State;
using AmmPoolToken for AmmData.State;
using AmmUtil for AmmData.State;
using AmmUpdateProcess for AmmData.State;
using AmmWithdrawProcess for AmmData.State;
using BlockReader for bytes;
using MathUint for uint;
using MathUint96 for uint96;
using SafeCast for uint;
using AmmDepositProcess for AmmData.State;
using AmmExitProcess for AmmData.State;
using AmmJoinProcess for AmmData.State;
using AmmPoolToken for AmmData.State;
using AmmUtil for AmmData.State;
using AmmUpdateProcess for AmmData.State;
using AmmVirtualBalanceProcess for AmmData.State;
using AmmWithdrawProcess for AmmData.State;
using BlockReader for bytes;
using MathUint for uint;
using MathUint96 for uint96;
using SafeCast for uint;

function onReceiveTransactions(
AmmData.State storage S,
Expand Down Expand Up @@ -106,58 +108,22 @@ library AmmTransactionReceiver
}
if (txType == AmmData.PoolTxType.JOIN) {
S.approveAmmUpdates(ctx, true);
S.processJoin(
ctx,
abi.decode(data, (AmmData.PoolJoin)),
signature
);
S.processJoin(ctx, abi.decode(data, (AmmData.PoolJoin)), signature);
S.approveAmmUpdates(ctx, false);
} else if (txType == AmmData.PoolTxType.EXIT) {
S.approveAmmUpdates(ctx, true);
S.processExit(
ctx,
abi.decode(data, (AmmData.PoolExit)),
signature
);
S.processExit(ctx, abi.decode(data, (AmmData.PoolExit)), signature);
S.approveAmmUpdates(ctx, false);
} else if (txType == AmmData.PoolTxType.SET_VIRTUAL_BALANCES) {
S.approveAmmUpdates(ctx, true);
processSetVirtualBalances(
ctx,
abi.decode(data, (AmmData.PoolVirtualBalances))
);
S.processSetVirtualBalances(ctx, abi.decode(data, (AmmData.PoolVirtualBalances)));
S.approveAmmUpdates(ctx, false);
} else if (txType == AmmData.PoolTxType.DEPOSIT) {
S.processDeposit(
ctx,
abi.decode(data, (AmmData.PoolDeposit))
);
S.processDeposit(ctx, abi.decode(data, (AmmData.PoolDeposit)));
} else if (txType == AmmData.PoolTxType.WITHDRAW) {
S.processWithdrawal(
ctx,
abi.decode(data, (AmmData.PoolWithdrawal))
);
S.processWithdrawal(ctx, abi.decode(data, (AmmData.PoolWithdrawal)));
} else {
revert("INVALID_POOL_TX_TYPE");
}
}

function processSetVirtualBalances(
AmmData.Context memory ctx,
AmmData.PoolVirtualBalances memory poolVirtualBalances
)
internal
{
require(poolVirtualBalances.vBalancesNew.length == ctx.tokens.length, "INVALID_DATA");
require(
ctx.settings.controller.authorizeVirtualBalances(
ctx.tokenBalancesL2,
ctx.vTokenBalancesL2,
poolVirtualBalances.vBalancesNew,
poolVirtualBalances.data
),
"NEW_VIRTUAL_BALANCES_NOT_AUTHORIZED"
);
ctx.vTokenBalancesL2 = poolVirtualBalances.vBalancesNew;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright 2017 Loopring Technology Limited.
pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;

import "./AmmData.sol";


/// @title AmmVirtualBalanceProcess
library AmmVirtualBalanceProcess
{
function processSetVirtualBalances(
AmmData.State storage /* S */,
AmmData.Context memory ctx,
AmmData.PoolVirtualBalances memory poolVirtualBalances
)
internal
{
require(
poolVirtualBalances.vBalancesNew.length == ctx.tokens.length,
"INVALID_DATA"
);
require(
ctx.settings.controller.authorizeVirtualBalances(
ctx.tokenBalancesL2,
ctx.vTokenBalancesL2,
poolVirtualBalances.vBalancesNew,
poolVirtualBalances.data
),
"NEW_VIRTUAL_BALANCES_NOT_AUTHORIZED"
);
ctx.vTokenBalancesL2 = poolVirtualBalances.vBalancesNew;
}
}
4 changes: 2 additions & 2 deletions packages/loopring_v3/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "loopring_v3",
"version": "3.0.0",
"description": "Loopring DEX protocol version 3.0",
"version": "3.8.0",
"description": "Loopring DEX protocol version 3.x",
"main": "index.js",
"directories": {
"test": "test"
Expand Down