Skip to content

Commit

Permalink
fix: resolve issues from comments
Browse files Browse the repository at this point in the history
  • Loading branch information
chefburger committed Nov 29, 2024
1 parent f67aa63 commit 5d343d9
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 28 deletions.
34 changes: 15 additions & 19 deletions src/pool-bin/BinPositionManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ contract BinPositionManager is
using BinTokenLibrary for PoolId;
using BinPoolParametersHelper for bytes32;
using SlippageCheck for BalanceDelta;
using SafeCastTemp for *;
using SafeCastTemp for uint256;

IBinPoolManager public immutable override binPoolManager;

Expand Down Expand Up @@ -132,7 +132,20 @@ contract BinPositionManager is
if (action == Actions.BIN_ADD_LIQUIDITY) {
IBinPositionManager.BinAddLiquidityParams calldata liquidityParams =
params.decodeBinAddLiquidityParams();
_addLiquidity(liquidityParams);
_addLiquidity(
liquidityParams.poolKey,
liquidityParams.amount0,
liquidityParams.amount1,
liquidityParams.amount0Max,
liquidityParams.amount1Max,
liquidityParams.activeIdDesired,
liquidityParams.idSlippage,
liquidityParams.deltaIds,
liquidityParams.distributionX,
liquidityParams.distributionY,
liquidityParams.to,
liquidityParams.hookData
);
return;
} else if (action == Actions.BIN_ADD_LIQUIDITY_FROM_DELTAS) {
IBinPositionManager.BinAddLiquidityFromDeltasParams calldata liquidityParams =
Expand Down Expand Up @@ -209,23 +222,6 @@ contract BinPositionManager is
}
}

function _addLiquidity(IBinPositionManager.BinAddLiquidityParams calldata params) internal {
_addLiquidity(
params.poolKey,
params.amount0,
params.amount1,
params.amount0Max,
params.amount1Max,
params.activeIdDesired,
params.idSlippage,
params.deltaIds,
params.distributionX,
params.distributionY,
params.to,
params.hookData
);
}

function _addLiquidity(
PoolKey calldata poolKey,
uint128 amount0,
Expand Down
8 changes: 3 additions & 5 deletions src/pool-bin/interfaces/IBinPositionManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ interface IBinPositionManager is IPositionManager {
/// - distributionX: Distribution of tokenX with sum(distributionX) = 1e18 (100%) or 0 (0%)
/// - distributionY: Distribution of tokenY with sum(distributionY) = 1e18 (100%) or 0 (0%)
/// - to: Address of recipient
/// - deadline: Deadline of transaction
/// - hookData: Data to pass to the hook
struct BinAddLiquidityParams {
PoolKey poolKey;
uint128 amount0;
Expand All @@ -45,7 +45,7 @@ interface IBinPositionManager is IPositionManager {
/// - ids: List of bin ids to remove liquidity
/// - amounts: List of share amount to remove for each bin
/// - from: Address of NFT holder to burn the NFT
/// - deadline: Deadline of transaction
/// - hookData: Data to pass to the hook
struct BinRemoveLiquidityParams {
PoolKey poolKey;
uint128 amount0Min;
Expand All @@ -65,11 +65,9 @@ interface IBinPositionManager is IPositionManager {
/// - distributionX: Distribution of tokenX with sum(distributionX) = 1e18 (100%) or 0 (0%)
/// - distributionY: Distribution of tokenY with sum(distributionY) = 1e18 (100%) or 0 (0%)
/// - to: Address of recipient
/// - deadline: Deadline of transaction
/// - hookData: Data to pass to the hook
struct BinAddLiquidityFromDeltasParams {
PoolKey poolKey;
uint128 amount0;
uint128 amount1;
uint128 amount0Max;
uint128 amount1Max;
uint256 activeIdDesired;
Expand Down
2 changes: 1 addition & 1 deletion src/pool-bin/libraries/BinCalldataDecoder.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ library BinCalldataDecoder {
}
}

/// @dev equivalent to: abi.decode(params, (IBinPositionManager.BinAddLiquidityParams))
/// @dev equivalent to: abi.decode(params, (IBinPositionManager.BinAddLiquidityFromDeltasParams))
function decodeBinAddLiquidityFromDeltasParams(bytes calldata params)
internal
pure
Expand Down
54 changes: 51 additions & 3 deletions test/pool-bin/BinPositionManager_ModifyLiquidites.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -913,9 +913,23 @@ contract BinPositionManager_ModifyLiquidityTest is BinLiquidityHelper, GasSnapsh
planner.add(Actions.SETTLE, abi.encode(fotKey.currency1, amount1, true));

uint24[] memory binIds = getBinIds(activeId, 1);
IBinPositionManager.BinAddLiquidityParams memory param = _getAddParams(
IBinPositionManager.BinAddLiquidityParams memory _param = _getAddParams(
fotKey, binIds, uint128(amountAfterTransfer), uint128(amountAfterTransfer), activeId, address(this)
);

IBinPositionManager.BinAddLiquidityFromDeltasParams memory param = IBinPositionManager
.BinAddLiquidityFromDeltasParams({
poolKey: _param.poolKey,
amount0Max: _param.amount0Max,
amount1Max: _param.amount1Max,
activeIdDesired: _param.activeIdDesired,
idSlippage: _param.idSlippage,
deltaIds: _param.deltaIds,
distributionX: _param.distributionX,
distributionY: _param.distributionY,
to: _param.to,
hookData: _param.hookData
});
planner.add(Actions.BIN_ADD_LIQUIDITY_FROM_DELTAS, abi.encode(param));

bytes memory plan = planner.encode();
Expand Down Expand Up @@ -949,8 +963,22 @@ contract BinPositionManager_ModifyLiquidityTest is BinLiquidityHelper, GasSnapsh
planner.add(Actions.SETTLE, abi.encode(key1.currency1, amountToSend, true));

uint24[] memory binIds = getBinIds(activeId, 1);
IBinPositionManager.BinAddLiquidityParams memory param =
IBinPositionManager.BinAddLiquidityParams memory _param =
_getAddParams(key1, binIds, uint128(amountToSend), uint128(amountToSend), activeId, address(this));

IBinPositionManager.BinAddLiquidityFromDeltasParams memory param = IBinPositionManager
.BinAddLiquidityFromDeltasParams({
poolKey: _param.poolKey,
amount0Max: _param.amount0Max,
amount1Max: _param.amount1Max,
activeIdDesired: _param.activeIdDesired,
idSlippage: _param.idSlippage,
deltaIds: _param.deltaIds,
distributionX: _param.distributionX,
distributionY: _param.distributionY,
to: _param.to,
hookData: _param.hookData
});
planner.add(Actions.BIN_ADD_LIQUIDITY_FROM_DELTAS, abi.encode(param));

bytes memory plan = planner.encode();
Expand Down Expand Up @@ -1002,13 +1030,33 @@ contract BinPositionManager_ModifyLiquidityTest is BinLiquidityHelper, GasSnapsh
planner.add(Actions.SETTLE, abi.encode(fotKey.currency1, amount1, true));

uint24[] memory binIds = getBinIds(activeId, binNum);
IBinPositionManager.BinAddLiquidityParams memory param = _getAddParams(
IBinPositionManager.BinAddLiquidityParams memory _param = _getAddParams(
fotKey, binIds, uint128(amount0AfterTransfer), uint128(amount1AfterTransfer), activeId, address(this)
);
IBinPositionManager.BinAddLiquidityFromDeltasParams memory param = IBinPositionManager
.BinAddLiquidityFromDeltasParams({
poolKey: _param.poolKey,
amount0Max: _param.amount0Max,
amount1Max: _param.amount1Max,
activeIdDesired: _param.activeIdDesired,
idSlippage: _param.idSlippage,
deltaIds: _param.deltaIds,
distributionX: _param.distributionX,
distributionY: _param.distributionY,
to: _param.to,
hookData: _param.hookData
});
planner.add(Actions.BIN_ADD_LIQUIDITY_FROM_DELTAS, abi.encode(param));

bytes memory plan = planner.encode();

// if the fee is 100% and amount of normal currency is 0, the transaction will revert
if (bips == 10000 && ((isCurrency0FotToken && amount1 == 0) || (!isCurrency0FotToken && amount0 == 0))) {
vm.expectRevert();
binPm.modifyLiquidities(plan, _deadline);
return;
}

binPm.modifyLiquidities(plan, _deadline);

uint256 token0After = fotKey.currency0.balanceOf(address(this));
Expand Down

0 comments on commit 5d343d9

Please sign in to comment.