@@ -20,8 +20,8 @@ import "./utils/PionexContractLibEIP712.sol";
2020import "./utils/SignatureValidator.sol " ;
2121
2222/// @title Pionex Contract
23- /// @notice Modified from LimitOrder contract. Maker is user, taker is Pionex agent.
24- /// @notice Order can be filled as long as the provided takerToken/makerToken ratio is better than or equal to maker 's specfied takerToken/makerToken ratio.
23+ /// @notice Modified from LimitOrder contract. Maker is user, pionex is Pionex agent.
24+ /// @notice Order can be filled as long as the provided pionexToken/userToken ratio is better than or equal to user 's specfied pionexToken/userToken ratio.
2525/// @author imToken Labs
2626contract PionexContract is IPionexContract , StrategyBase , BaseLibEIP712 , SignatureValidator , ReentrancyGuard {
2727 using SafeMath for uint256 ;
@@ -35,7 +35,7 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
3535
3636 // Factors
3737 uint256 public factorsTimeLock;
38- uint16 public makerFeeFactor = 0 ;
38+ uint16 public userFeeFactor = 0 ;
3939 uint16 public pendingMakerFeeFactor;
4040
4141 constructor (
@@ -65,11 +65,11 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
6565 }
6666
6767 /// @notice Only owner can call
68- /// @param _makerFeeFactor The new fee factor for maker
69- function setFactors (uint16 _makerFeeFactor ) external onlyOwner {
70- require (_makerFeeFactor <= LibConstant.BPS_MAX, "LimitOrder: Invalid maker fee factor " );
68+ /// @param _userFeeFactor The new fee factor for user
69+ function setFactors (uint16 _userFeeFactor ) external onlyOwner {
70+ require (_userFeeFactor <= LibConstant.BPS_MAX, "LimitOrder: Invalid user fee factor " );
7171
72- pendingMakerFeeFactor = _makerFeeFactor ;
72+ pendingMakerFeeFactor = _userFeeFactor ;
7373
7474 factorsTimeLock = block .timestamp + factorActivateDelay;
7575 }
@@ -79,10 +79,10 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
7979 require (factorsTimeLock != 0 , "LimitOrder: no pending fee factors " );
8080 require (block .timestamp >= factorsTimeLock, "LimitOrder: fee factors timelocked " );
8181 factorsTimeLock = 0 ;
82- makerFeeFactor = pendingMakerFeeFactor;
82+ userFeeFactor = pendingMakerFeeFactor;
8383 pendingMakerFeeFactor = 0 ;
8484
85- emit FactorsUpdated (makerFeeFactor );
85+ emit FactorsUpdated (userFeeFactor );
8686 }
8787
8888 /// @notice Only owner can call
@@ -104,69 +104,69 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
104104 bytes32 orderHash = getEIP712Hash (PionexContractLibEIP712._getOrderStructHash (_order));
105105
106106 _validateOrder (_order, orderHash, _orderMakerSig);
107- bytes32 allowFillHash = _validateFillPermission (orderHash, _params.takerTokenAmount , _params.taker , _crdParams);
108- _validateOrderTaker (_order, _params.taker );
107+ bytes32 allowFillHash = _validateFillPermission (orderHash, _params.pionexTokenAmount , _params.pionex , _crdParams);
108+ _validateOrderTaker (_order, _params.pionex );
109109
110- // Check provided takerToken/makerToken ratio is better than or equal to maker 's specfied takerToken/makerToken ratio
111- // -> _params.takerTokenAmount /_params.makerTokenAmount >= _order.takerTokenAmount /_order.makerTokenAmount
110+ // Check provided pionexToken/userToken ratio is better than or equal to user 's specfied pionexToken/userToken ratio
111+ // -> _params.pionexTokenAmount /_params.userTokenAmount >= _order.pionexTokenAmount /_order.userTokenAmount
112112 require (
113- _params.takerTokenAmount .mul (_order.makerTokenAmount ) >= _order.takerTokenAmount .mul (_params.makerTokenAmount ),
114- "LimitOrder: taker/maker token ratio not good enough "
113+ _params.pionexTokenAmount .mul (_order.userTokenAmount ) >= _order.pionexTokenAmount .mul (_params.userTokenAmount ),
114+ "LimitOrder: pionex/user token ratio not good enough "
115115 );
116116 // Check gas fee factor and pionex strategy fee factor do not exceed limit
117117 require (
118118 (_params.gasFeeFactor <= LibConstant.BPS_MAX) &&
119119 (_params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX) &&
120- (_params.gasFeeFactor + _params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX - makerFeeFactor ),
120+ (_params.gasFeeFactor + _params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX - userFeeFactor ),
121121 "LimitOrder: Invalid pionex fee factor "
122122 );
123123
124124 {
125125 PionexContractLibEIP712.Fill memory fill = PionexContractLibEIP712.Fill ({
126126 orderHash: orderHash,
127- taker : _params.taker ,
127+ pionex : _params.pionex ,
128128 recipient: _params.recipient,
129- makerTokenAmount : _params.makerTokenAmount ,
130- takerTokenAmount : _params.takerTokenAmount ,
131- takerSalt : _params.salt,
129+ userTokenAmount : _params.userTokenAmount ,
130+ pionexTokenAmount : _params.pionexTokenAmount ,
131+ pionexSalt : _params.salt,
132132 expiry: _params.expiry
133133 });
134- _validateTraderFill (fill, _params.takerSig );
134+ _validateTraderFill (fill, _params.pionexSig );
135135 }
136136
137- (uint256 makerTokenAmount , uint256 remainingAmount ) = _quoteOrderFromMakerToken (_order, orderHash, _params.makerTokenAmount );
138- // Calculate takerTokenAmount according to the provided takerToken/makerToken ratio
139- uint256 takerTokenAmount = makerTokenAmount .mul (_params.takerTokenAmount ).div (_params.makerTokenAmount );
137+ (uint256 userTokenAmount , uint256 remainingAmount ) = _quoteOrderFromMakerToken (_order, orderHash, _params.userTokenAmount );
138+ // Calculate pionexTokenAmount according to the provided pionexToken/userToken ratio
139+ uint256 pionexTokenAmount = userTokenAmount .mul (_params.pionexTokenAmount ).div (_params.userTokenAmount );
140140
141- uint256 makerTokenOut = _settleForTrader (
141+ uint256 userTokenOut = _settleForTrader (
142142 TraderSettlement ({
143143 orderHash: orderHash,
144144 allowFillHash: allowFillHash,
145- trader: _params.taker ,
145+ trader: _params.pionex ,
146146 recipient: _params.recipient,
147- maker : _order.maker ,
148- taker : _order.taker ,
149- makerToken : _order.makerToken ,
150- takerToken : _order.takerToken ,
151- makerTokenAmount: makerTokenAmount ,
152- takerTokenAmount: takerTokenAmount ,
147+ user : _order.user ,
148+ pionex : _order.pionex ,
149+ userToken : _order.userToken ,
150+ pionexToken : _order.pionexToken ,
151+ userTokenAmount: userTokenAmount ,
152+ pionexTokenAmount: pionexTokenAmount ,
153153 remainingAmount: remainingAmount,
154154 gasFeeFactor: _params.gasFeeFactor,
155155 pionexStrategyFeeFactor: _params.pionexStrategyFeeFactor
156156 })
157157 );
158158
159- _recordMakerTokenFilled (orderHash, makerTokenAmount );
159+ _recordMakerTokenFilled (orderHash, userTokenAmount );
160160
161- return (takerTokenAmount, makerTokenOut );
161+ return (pionexTokenAmount, userTokenOut );
162162 }
163163
164164 function _validateTraderFill (PionexContractLibEIP712.Fill memory _fill , bytes memory _fillTakerSig ) internal {
165165 require (_fill.expiry > uint64 (block .timestamp ), "LimitOrder: Fill request is expired " );
166166 require (_fill.recipient != address (0 ), "LimitOrder: recipient can not be zero address " );
167167
168168 bytes32 fillHash = getEIP712Hash (PionexContractLibEIP712._getFillStructHash (_fill));
169- require (isValidSignature (_fill.taker , fillHash, bytes ("" ), _fillTakerSig), "LimitOrder: Fill is not signed by taker " );
169+ require (isValidSignature (_fill.pionex , fillHash, bytes ("" ), _fillTakerSig), "LimitOrder: Fill is not signed by pionex " );
170170
171171 // Set fill seen to avoid replay attack.
172172 // PermanentStorage would throw error if fill is already seen.
@@ -206,12 +206,12 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
206206 bytes32 allowFillHash;
207207 address trader;
208208 address recipient;
209- address maker ;
210- address taker ;
211- IERC20 makerToken ;
212- IERC20 takerToken ;
213- uint256 makerTokenAmount ;
214- uint256 takerTokenAmount ;
209+ address user ;
210+ address pionex ;
211+ IERC20 userToken ;
212+ IERC20 pionexToken ;
213+ uint256 userTokenAmount ;
214+ uint256 pionexTokenAmount ;
215215 uint256 remainingAmount;
216216 uint16 gasFeeFactor;
217217 uint16 pionexStrategyFeeFactor;
@@ -222,43 +222,43 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
222222 ISpender _spender = spender;
223223 address _feeCollector = feeCollector;
224224
225- // Calculate maker fee (maker receives taker token so fee is charged in taker token)
225+ // Calculate user fee (user receives pionex token so fee is charged in pionex token)
226226 // 1. Fee for Tokenlon
227- uint256 tokenlonFee = _mulFactor (_settlement.takerTokenAmount, makerFeeFactor );
227+ uint256 tokenlonFee = _mulFactor (_settlement.pionexTokenAmount, userFeeFactor );
228228 // 2. Fee for Pionex, including gas fee and strategy fee
229- uint256 pionexFee = _mulFactor (_settlement.takerTokenAmount , _settlement.gasFeeFactor + _settlement.pionexStrategyFeeFactor);
230- uint256 takerTokenForMaker = _settlement.takerTokenAmount .sub (tokenlonFee).sub (pionexFee);
229+ uint256 pionexFee = _mulFactor (_settlement.pionexTokenAmount , _settlement.gasFeeFactor + _settlement.pionexStrategyFeeFactor);
230+ uint256 pionexTokenForMaker = _settlement.pionexTokenAmount .sub (tokenlonFee).sub (pionexFee);
231231
232- // trader -> maker
233- _spender.spendFromUserTo (_settlement.trader, address (_settlement.takerToken ), _settlement.maker, takerTokenForMaker );
232+ // trader -> user
233+ _spender.spendFromUserTo (_settlement.trader, address (_settlement.pionexToken ), _settlement.user, pionexTokenForMaker );
234234
235- // maker -> recipient
236- _spender.spendFromUserTo (_settlement.maker , address (_settlement.makerToken ), _settlement.recipient, _settlement.makerTokenAmount );
235+ // user -> recipient
236+ _spender.spendFromUserTo (_settlement.user , address (_settlement.userToken ), _settlement.recipient, _settlement.userTokenAmount );
237237
238- // Collect maker fee (charged in taker token)
238+ // Collect user fee (charged in pionex token)
239239 if (tokenlonFee > 0 ) {
240- _spender.spendFromUserTo (_settlement.trader, address (_settlement.takerToken ), _feeCollector, tokenlonFee);
240+ _spender.spendFromUserTo (_settlement.trader, address (_settlement.pionexToken ), _feeCollector, tokenlonFee);
241241 }
242242
243243 // bypass stack too deep error
244244 _emitLimitOrderFilledByTrader (
245245 LimitOrderFilledByTraderParams ({
246246 orderHash: _settlement.orderHash,
247- maker : _settlement.maker ,
248- taker : _settlement.trader,
247+ user : _settlement.user ,
248+ pionex : _settlement.trader,
249249 allowFillHash: _settlement.allowFillHash,
250250 recipient: _settlement.recipient,
251- makerToken : address (_settlement.makerToken ),
252- takerToken : address (_settlement.takerToken ),
253- makerTokenFilledAmount : _settlement.makerTokenAmount ,
254- takerTokenFilledAmount : _settlement.takerTokenAmount ,
251+ userToken : address (_settlement.userToken ),
252+ pionexToken : address (_settlement.pionexToken ),
253+ userTokenFilledAmount : _settlement.userTokenAmount ,
254+ pionexTokenFilledAmount : _settlement.pionexTokenAmount ,
255255 remainingAmount: _settlement.remainingAmount,
256256 tokenlonFee: tokenlonFee,
257257 pionexFee: pionexFee
258258 })
259259 );
260260
261- return _settlement.makerTokenAmount ;
261+ return _settlement.userTokenAmount ;
262262 }
263263
264264 /// @inheritdoc IPionexContract
@@ -269,15 +269,15 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
269269 require (! isCancelled, "LimitOrder: Order is cancelled already " );
270270 {
271271 PionexContractLibEIP712.Order memory cancelledOrder = _order;
272- cancelledOrder.takerTokenAmount = 0 ;
272+ cancelledOrder.pionexTokenAmount = 0 ;
273273
274274 bytes32 cancelledOrderHash = getEIP712Hash (PionexContractLibEIP712._getOrderStructHash (cancelledOrder));
275- require (isValidSignature (_order.maker , cancelledOrderHash, bytes ("" ), _cancelOrderMakerSig), "LimitOrder: Cancel request is not signed by maker " );
275+ require (isValidSignature (_order.user , cancelledOrderHash, bytes ("" ), _cancelOrderMakerSig), "LimitOrder: Cancel request is not signed by user " );
276276 }
277277
278278 // Set cancelled state to storage
279279 LibPionexContractOrderStorage.getStorage ().orderHashToCancelled[orderHash] = true ;
280- emit OrderCancelled (orderHash, _order.maker );
280+ emit OrderCancelled (orderHash, _order.user );
281281 }
282282
283283 /* order utils */
@@ -291,36 +291,36 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
291291 bool isCancelled = LibPionexContractOrderStorage.getStorage ().orderHashToCancelled[_orderHash];
292292 require (! isCancelled, "LimitOrder: Order is cancelled " );
293293
294- require (isValidSignature (_order.maker , _orderHash, bytes ("" ), _orderMakerSig), "LimitOrder: Order is not signed by maker " );
294+ require (isValidSignature (_order.user , _orderHash, bytes ("" ), _orderMakerSig), "LimitOrder: Order is not signed by user " );
295295 }
296296
297- function _validateOrderTaker (PionexContractLibEIP712.Order memory _order , address _taker ) internal pure {
298- if (_order.taker != address (0 )) {
299- require (_order.taker == _taker , "LimitOrder: Order cannot be filled by this taker " );
297+ function _validateOrderTaker (PionexContractLibEIP712.Order memory _order , address _pionex ) internal pure {
298+ if (_order.pionex != address (0 )) {
299+ require (_order.pionex == _pionex , "LimitOrder: Order cannot be filled by this pionex " );
300300 }
301301 }
302302
303303 function _quoteOrderFromMakerToken (
304304 PionexContractLibEIP712.Order memory _order ,
305305 bytes32 _orderHash ,
306- uint256 _makerTokenAmount
306+ uint256 _userTokenAmount
307307 ) internal view returns (uint256 , uint256 ) {
308- uint256 makerTokenFilledAmount = LibPionexContractOrderStorage.getStorage ().orderHashToMakerTokenFilledAmount[_orderHash];
308+ uint256 userTokenFilledAmount = LibPionexContractOrderStorage.getStorage ().orderHashToMakerTokenFilledAmount[_orderHash];
309309
310- require (makerTokenFilledAmount < _order.makerTokenAmount , "LimitOrder: Order is filled " );
310+ require (userTokenFilledAmount < _order.userTokenAmount , "LimitOrder: Order is filled " );
311311
312- uint256 makerTokenFillableAmount = _order.makerTokenAmount .sub (makerTokenFilledAmount );
313- uint256 makerTokenQuota = Math.min (_makerTokenAmount, makerTokenFillableAmount );
314- uint256 remainingAfterFill = makerTokenFillableAmount .sub (makerTokenQuota );
312+ uint256 userTokenFillableAmount = _order.userTokenAmount .sub (userTokenFilledAmount );
313+ uint256 userTokenQuota = Math.min (_userTokenAmount, userTokenFillableAmount );
314+ uint256 remainingAfterFill = userTokenFillableAmount .sub (userTokenQuota );
315315
316- require (makerTokenQuota != 0 , "LimitOrder: zero token amount " );
317- return (makerTokenQuota , remainingAfterFill);
316+ require (userTokenQuota != 0 , "LimitOrder: zero token amount " );
317+ return (userTokenQuota , remainingAfterFill);
318318 }
319319
320- function _recordMakerTokenFilled (bytes32 _orderHash , uint256 _makerTokenAmount ) internal {
320+ function _recordMakerTokenFilled (bytes32 _orderHash , uint256 _userTokenAmount ) internal {
321321 LibPionexContractOrderStorage.Storage storage stor = LibPionexContractOrderStorage.getStorage ();
322- uint256 makerTokenFilledAmount = stor.orderHashToMakerTokenFilledAmount[_orderHash];
323- stor.orderHashToMakerTokenFilledAmount[_orderHash] = makerTokenFilledAmount .add (_makerTokenAmount );
322+ uint256 userTokenFilledAmount = stor.orderHashToMakerTokenFilledAmount[_orderHash];
323+ stor.orderHashToMakerTokenFilledAmount[_orderHash] = userTokenFilledAmount .add (_userTokenAmount );
324324 }
325325
326326 /* math utils */
@@ -333,14 +333,14 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
333333
334334 struct LimitOrderFilledByTraderParams {
335335 bytes32 orderHash;
336- address maker ;
337- address taker ;
336+ address user ;
337+ address pionex ;
338338 bytes32 allowFillHash;
339339 address recipient;
340- address makerToken ;
341- address takerToken ;
342- uint256 makerTokenFilledAmount ;
343- uint256 takerTokenFilledAmount ;
340+ address userToken ;
341+ address pionexToken ;
342+ uint256 userTokenFilledAmount ;
343+ uint256 pionexTokenFilledAmount ;
344344 uint256 remainingAmount;
345345 uint256 tokenlonFee;
346346 uint256 pionexFee;
@@ -349,15 +349,15 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
349349 function _emitLimitOrderFilledByTrader (LimitOrderFilledByTraderParams memory _params ) internal {
350350 emit LimitOrderFilledByTrader (
351351 _params.orderHash,
352- _params.maker ,
353- _params.taker ,
352+ _params.user ,
353+ _params.pionex ,
354354 _params.allowFillHash,
355355 _params.recipient,
356356 FillReceipt ({
357- makerToken : _params.makerToken ,
358- takerToken : _params.takerToken ,
359- makerTokenFilledAmount : _params.makerTokenFilledAmount ,
360- takerTokenFilledAmount : _params.takerTokenFilledAmount ,
357+ userToken : _params.userToken ,
358+ pionexToken : _params.pionexToken ,
359+ userTokenFilledAmount : _params.userTokenFilledAmount ,
360+ pionexTokenFilledAmount : _params.pionexTokenFilledAmount ,
361361 remainingAmount: _params.remainingAmount,
362362 tokenlonFee: _params.tokenlonFee,
363363 pionexFee: _params.pionexFee
0 commit comments