Skip to content

Commit 07720fd

Browse files
committed
refactor LiquidityMaker
1 parent 6701983 commit 07720fd

File tree

1 file changed

+100
-12
lines changed

1 file changed

+100
-12
lines changed

contracts/LiquidityMaker.sol

+100-12
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,28 @@
22

33
pragma solidity ^0.8.19;
44

5-
import "./ISwapsERC20.sol";
5+
import "./IWETH.sol";
66
import "./ISwapsPair.sol";
77
import "./ISwapsRouter.sol";
88
import "./ISwapsFactory.sol";
9+
import "./LiquidityHelper.sol";
910

10-
contract LiquidityMaker {
11+
contract LiquidityMaker is LiquidityHelper {
1112

13+
address immutable WETH_ADDRESS;
1214
address immutable ROUTER_ADDRESS;
1315

16+
IWETH public immutable WETH;
1417
ISwapsRouter public immutable ROUTER;
1518
ISwapsFactory public immutable FACTORY;
1619

20+
event SwapResults(
21+
uint256 amountIn,
22+
uint256 amountOUt
23+
);
24+
1725
event LiquidityAdded(
18-
uint256 amount
26+
uint256 amountAdded
1927
);
2028

2129
constructor(
@@ -28,6 +36,12 @@ contract LiquidityMaker {
2836

2937
ROUTER = _router;
3038
FACTORY = _factory;
39+
40+
WETH_ADDRESS = ROUTER.WETH();
41+
42+
WETH = IWETH(
43+
WETH_ADDRESS
44+
);
3145
}
3246

3347
/**
@@ -37,6 +51,37 @@ contract LiquidityMaker {
3751
* 2. Adds liquidity for token A and token B pair
3852
*/
3953
function makeLiquidity(
54+
address _tokenB,
55+
uint256 _expectedAmountB,
56+
uint256 _minEther,
57+
uint256 _minToken
58+
)
59+
external
60+
payable
61+
returns (uint256)
62+
{
63+
_wrapEther(
64+
msg.value
65+
);
66+
67+
return _makeLiquidity(
68+
WETH_ADDRESS,
69+
_tokenB,
70+
msg.value,
71+
_expectedAmountB,
72+
_minEther,
73+
_minToken,
74+
msg.sender
75+
);
76+
}
77+
78+
/**
79+
* @dev
80+
* Optimal one-sided supply
81+
* 1. Swaps optimal amount from token A to token B
82+
* 2. Adds liquidity for token A and token B pair
83+
*/
84+
function makeLiquidityDual(
4085
address _tokenA,
4186
address _tokenB,
4287
uint256 _depositAmountA,
@@ -45,14 +90,45 @@ contract LiquidityMaker {
4590
uint256 _minTokenB
4691
)
4792
external
48-
returns (uint256 swapAmount)
93+
payable
94+
returns (uint256)
4995
{
50-
ISwapsERC20(_tokenA).transferFrom(
96+
_safeTransferFrom(
97+
_tokenA,
5198
msg.sender,
5299
address(this),
53100
_depositAmountA
54101
);
55102

103+
return _makeLiquidity(
104+
_tokenA,
105+
_tokenB,
106+
_depositAmountA,
107+
_expectedAmountB,
108+
_minTokenA,
109+
_minTokenB,
110+
msg.sender
111+
);
112+
}
113+
114+
/**
115+
* @dev
116+
* Optimal one-sided supply
117+
* 1. Swaps optimal amount from token A to token B
118+
* 2. Adds liquidity for token A and token B pair
119+
*/
120+
function _makeLiquidity(
121+
address _tokenA,
122+
address _tokenB,
123+
uint256 _depositAmountA,
124+
uint256 _expectedAmountB,
125+
uint256 _minTokenA,
126+
uint256 _minTokenB,
127+
address _beneficiary
128+
)
129+
internal
130+
returns (uint256)
131+
{
56132
ISwapsPair pair = _getPair(
57133
_tokenA,
58134
_tokenB
@@ -63,24 +139,37 @@ contract LiquidityMaker {
63139
uint256 reserve1,
64140
) = pair.getReserves();
65141

66-
swapAmount = pair.token0() == _tokenA
142+
uint256 swapAmount = pair.token0() == _tokenA
67143
? getSwapAmount(reserve0, _depositAmountA)
68144
: getSwapAmount(reserve1, _depositAmountA);
69145

70-
_swap(
146+
// uint256[] memory swapResult =
147+
148+
uint256[] memory swapResults = _swap(
71149
_tokenA,
72150
_tokenB,
73151
swapAmount,
74152
_expectedAmountB
75153
);
76154

77-
_addLiquidity(
155+
emit SwapResults(
156+
swapResults[0],
157+
swapResults[1]
158+
);
159+
160+
uint256 lpTokenAmount = _addLiquidity(
78161
_tokenA,
79162
_tokenB,
80-
_minTokenA,
81-
_minTokenB,
82-
msg.sender
163+
_minTokenA, // swapResult[0],
164+
_minTokenB, // swapResult[1],
165+
_beneficiary
83166
);
167+
168+
emit LiquidityAdded(
169+
lpTokenAmount
170+
);
171+
172+
return swapAmount;
84173
}
85174

86175
function stakeLiquidity(
@@ -135,7 +224,6 @@ contract LiquidityMaker {
135224
);
136225

137226
// _farmDeposit(
138-
// liquidity
139227
// );
140228
}
141229

0 commit comments

Comments
 (0)