Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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 snapshots/BinPositionManagerHelperTest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"BinPositionManagerHelper size": "6997",
"test_addLiquidities_existingPool": "1043390",
"test_addLiquidities_existingPool_nativeToken": "961664",
"test_addLiquidities_newPool": "1167369"
"BinPositionManagerHelper size": "6835",
"test_addLiquidities_existingPool": "1040161",
"test_addLiquidities_existingPool_nativeToken": "958437",
"test_addLiquidities_newPool": "1164140"
}
18 changes: 7 additions & 11 deletions src/pool-bin/BinPositionManagerHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ contract BinPositionManagerHelper is Multicall {
/// @notice Add liquidities to bin pool with slippage protection
/// @param payload - encoded actions and parameters for bin position manager
/// @param deadline - deadline for the transaction
/// @param minLiquidityParam - amount of [binId, liquidity] to mint
/// @param minLiquidityParam - amount of [binId, liquidity] on user wallet - user should check user current balance before this call as well
/// @dev This function only support 1 BIN_ADD_LIQUIDITY call
function addLiquidities(bytes calldata payload, uint256 deadline, MinLiquidityParams memory minLiquidityParam)
external
Expand All @@ -90,25 +90,21 @@ contract BinPositionManagerHelper is Multicall {
permit2.transferFrom(msg.sender, address(this), liquidityParams.amount1Max, Currency.unwrap(currency1));
_approveBinPm(currency1, liquidityParams.amount1Max);

// Step 3a: Before Check user balance before
// Step 3a: modify liquidities
binPositionManager.modifyLiquidities{value: msg.value}(payload, deadline);

// Step 3b: Check user balance after
address[] memory owners = new address[](minLiquidityParam.binIds.length);
uint256[] memory tokenIds = new uint256[](minLiquidityParam.binIds.length);
PoolId poolId = liquidityParams.poolKey.toId();
for (uint256 i = 0; i < minLiquidityParam.binIds.length; i++) {
owners[i] = msg.sender;
tokenIds[i] = poolId.toTokenId(minLiquidityParam.binIds[i]);
}
uint256[] memory balBefore = binPositionManager.balanceOfBatch(owners, tokenIds);

// Step 3b: modify liquidities
binPositionManager.modifyLiquidities{value: msg.value}(payload, deadline);

// Step 3c: Check user balance after
uint256[] memory balAfter = binPositionManager.balanceOfBatch(owners, tokenIds);
for (uint256 i = 0; i < minLiquidityParam.minLiquidities.length; i++) {
uint256 liquidityAdded = balAfter[i] - balBefore[i];
if (liquidityAdded < minLiquidityParam.minLiquidities[i]) {
revert SlippageCheck(minLiquidityParam.binIds[i], liquidityAdded);
if (balAfter[i] < minLiquidityParam.minLiquidities[i]) {
revert SlippageCheck(minLiquidityParam.binIds[i], balAfter[i]);
}
}

Expand Down