Skip to content

Commit b039fd6

Browse files
committed
refactor bnb liquidity
1 parent 2511b39 commit b039fd6

File tree

2 files changed

+55
-34
lines changed

2 files changed

+55
-34
lines changed

contracts/BNBPartyLiquidity.sol

+7-34
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.0;
33

4-
import "./BNBPartyCreation.sol";
4+
import "./BNBPartyLiquidityHelper.sol";
55
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
66

77
/// @title BNBPartyLiquidity
8-
/// @notice This abstract contract manages handling of liquidity pools within the BNB Party system.
9-
abstract contract BNBPartyLiquidity is BNBPartyCreation {
8+
/// @notice This abstract contract manages the creation and handling of liquidity pools within the BNB Party system.
9+
abstract contract BNBPartyLiquidity is BNBPartyLiquidityHelper {
1010
/// @notice Handles liquidity by decreasing the liquidity, collecting tokens, and creating a new liquidity pool.
1111
/// @param recipient Address receiving the bonus BNB
1212
/// @dev Decreases liquidity, collects tokens, creates a new pool, and sends bonuses
@@ -18,24 +18,7 @@ abstract contract BNBPartyLiquidity is BNBPartyCreation {
1818
uint128 liquidity = pool.liquidity();
1919

2020
// Decrease liquidity and collect tokens
21-
(uint256 amount0, uint256 amount1) = BNBPositionManager.decreaseLiquidity(
22-
INonfungiblePositionManager.DecreaseLiquidityParams({
23-
tokenId: lpToTokenId[msg.sender],
24-
liquidity: liquidity,
25-
amount0Min: 0,
26-
amount1Min: 0,
27-
deadline: block.timestamp
28-
})
29-
);
30-
31-
BNBPositionManager.collect(
32-
INonfungiblePositionManager.CollectParams({
33-
tokenId: lpToTokenId[msg.sender],
34-
recipient: address(this),
35-
amount0Max: uint128(amount0),
36-
amount1Max: uint128(amount1)
37-
})
38-
);
21+
(uint256 amount0, uint256 amount1) = _decreaseAndCollect(lpToTokenId[msg.sender], liquidity);
3922

4023
uint256 unwrapAmount = party.bonusTargetReach + party.bonusPartyCreator + party.targetReachFee;
4124
uint160 newSqrtPriceX96;
@@ -59,24 +42,14 @@ abstract contract BNBPartyLiquidity is BNBPartyCreation {
5942
);
6043
}
6144

62-
IERC20(token0).approve(address(positionManager), amount0);
63-
IERC20(token1).approve(address(positionManager), amount1);
45+
// Approve tokens for the new liquidity pool creation
46+
_approveTokens(token0, token1, amount0, amount1);
6447
// Create new Liquidity Pool
6548
_createLP(positionManager, token0, token1, amount0, amount1, newSqrtPriceX96, party.lpFee, party.lpTicks);
6649

6750
// Send bonuses
6851
_unwrapAndSendBNB(recipient, unwrapAmount);
6952
// burn meme tokens
70-
if(token0 == address(WBNB)) {
71-
_burnMemeToken(token1);
72-
}
73-
else {
74-
_burnMemeToken(token0);
75-
}
76-
}
77-
78-
function _burnMemeToken(address token) internal {
79-
uint256 balance = IERC20(token).balanceOf(address(this));
80-
ERC20Burnable(token).burn(balance);
53+
_burnMemeToken(token0 == address(WBNB) ? token1 : token0);
8154
}
8255
}

contracts/BNBPartyLiquidityHelper.sol

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import "./BNBPartyCreation.sol";
5+
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
6+
7+
/// @title BNBPartyLiquidityHelper
8+
/// @notice This abstract contract manages the liquidity helper functions within the BNB Party system.
9+
abstract contract BNBPartyLiquidityHelper is BNBPartyCreation {
10+
function _decreaseAndCollect(
11+
uint256 tokenId,
12+
uint128 liquidity
13+
) internal returns (uint256 amount0, uint256 amount1) {
14+
(amount0, amount1) = BNBPositionManager.decreaseLiquidity(
15+
INonfungiblePositionManager.DecreaseLiquidityParams({
16+
tokenId: tokenId,
17+
liquidity: liquidity,
18+
amount0Min: 0,
19+
amount1Min: 0,
20+
deadline: block.timestamp
21+
})
22+
);
23+
24+
BNBPositionManager.collect(
25+
INonfungiblePositionManager.CollectParams({
26+
tokenId: tokenId,
27+
recipient: address(this),
28+
amount0Max: uint128(amount0),
29+
amount1Max: uint128(amount1)
30+
})
31+
);
32+
}
33+
34+
function _approveTokens(
35+
address token0,
36+
address token1,
37+
uint256 amount0,
38+
uint256 amount1
39+
) internal {
40+
IERC20(token0).approve(address(positionManager), amount0);
41+
IERC20(token1).approve(address(positionManager), amount1);
42+
}
43+
44+
function _burnMemeToken(address token) internal {
45+
uint256 balance = IERC20(token).balanceOf(address(this));
46+
ERC20Burnable(token).burn(balance);
47+
}
48+
}

0 commit comments

Comments
 (0)