@@ -20,8 +20,8 @@ import "./utils/PionexContractLibEIP712.sol";
20
20
import "./utils/SignatureValidator.sol " ;
21
21
22
22
/// @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.
25
25
/// @author imToken Labs
26
26
contract PionexContract is IPionexContract , StrategyBase , BaseLibEIP712 , SignatureValidator , ReentrancyGuard {
27
27
using SafeMath for uint256 ;
@@ -35,7 +35,7 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
35
35
36
36
// Factors
37
37
uint256 public factorsTimeLock;
38
- uint16 public makerFeeFactor = 0 ;
38
+ uint16 public userFeeFactor = 0 ;
39
39
uint16 public pendingMakerFeeFactor;
40
40
41
41
constructor (
@@ -65,11 +65,11 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
65
65
}
66
66
67
67
/// @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 " );
71
71
72
- pendingMakerFeeFactor = _makerFeeFactor ;
72
+ pendingMakerFeeFactor = _userFeeFactor ;
73
73
74
74
factorsTimeLock = block .timestamp + factorActivateDelay;
75
75
}
@@ -79,10 +79,10 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
79
79
require (factorsTimeLock != 0 , "LimitOrder: no pending fee factors " );
80
80
require (block .timestamp >= factorsTimeLock, "LimitOrder: fee factors timelocked " );
81
81
factorsTimeLock = 0 ;
82
- makerFeeFactor = pendingMakerFeeFactor;
82
+ userFeeFactor = pendingMakerFeeFactor;
83
83
pendingMakerFeeFactor = 0 ;
84
84
85
- emit FactorsUpdated (makerFeeFactor );
85
+ emit FactorsUpdated (userFeeFactor );
86
86
}
87
87
88
88
/// @notice Only owner can call
@@ -104,69 +104,69 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
104
104
bytes32 orderHash = getEIP712Hash (PionexContractLibEIP712._getOrderStructHash (_order));
105
105
106
106
_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 );
109
109
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
112
112
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 "
115
115
);
116
116
// Check gas fee factor and pionex strategy fee factor do not exceed limit
117
117
require (
118
118
(_params.gasFeeFactor <= LibConstant.BPS_MAX) &&
119
119
(_params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX) &&
120
- (_params.gasFeeFactor + _params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX - makerFeeFactor ),
120
+ (_params.gasFeeFactor + _params.pionexStrategyFeeFactor <= LibConstant.BPS_MAX - userFeeFactor ),
121
121
"LimitOrder: Invalid pionex fee factor "
122
122
);
123
123
124
124
{
125
125
PionexContractLibEIP712.Fill memory fill = PionexContractLibEIP712.Fill ({
126
126
orderHash: orderHash,
127
- taker : _params.taker ,
127
+ pionex : _params.pionex ,
128
128
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,
132
132
expiry: _params.expiry
133
133
});
134
- _validateTraderFill (fill, _params.takerSig );
134
+ _validateTraderFill (fill, _params.pionexSig );
135
135
}
136
136
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 );
140
140
141
- uint256 makerTokenOut = _settleForTrader (
141
+ uint256 userTokenOut = _settleForTrader (
142
142
TraderSettlement ({
143
143
orderHash: orderHash,
144
144
allowFillHash: allowFillHash,
145
- trader: _params.taker ,
145
+ trader: _params.pionex ,
146
146
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 ,
153
153
remainingAmount: remainingAmount,
154
154
gasFeeFactor: _params.gasFeeFactor,
155
155
pionexStrategyFeeFactor: _params.pionexStrategyFeeFactor
156
156
})
157
157
);
158
158
159
- _recordMakerTokenFilled (orderHash, makerTokenAmount );
159
+ _recordMakerTokenFilled (orderHash, userTokenAmount );
160
160
161
- return (takerTokenAmount, makerTokenOut );
161
+ return (pionexTokenAmount, userTokenOut );
162
162
}
163
163
164
164
function _validateTraderFill (PionexContractLibEIP712.Fill memory _fill , bytes memory _fillTakerSig ) internal {
165
165
require (_fill.expiry > uint64 (block .timestamp ), "LimitOrder: Fill request is expired " );
166
166
require (_fill.recipient != address (0 ), "LimitOrder: recipient can not be zero address " );
167
167
168
168
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 " );
170
170
171
171
// Set fill seen to avoid replay attack.
172
172
// PermanentStorage would throw error if fill is already seen.
@@ -206,12 +206,12 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
206
206
bytes32 allowFillHash;
207
207
address trader;
208
208
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 ;
215
215
uint256 remainingAmount;
216
216
uint16 gasFeeFactor;
217
217
uint16 pionexStrategyFeeFactor;
@@ -222,43 +222,43 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
222
222
ISpender _spender = spender;
223
223
address _feeCollector = feeCollector;
224
224
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)
226
226
// 1. Fee for Tokenlon
227
- uint256 tokenlonFee = _mulFactor (_settlement.takerTokenAmount, makerFeeFactor );
227
+ uint256 tokenlonFee = _mulFactor (_settlement.pionexTokenAmount, userFeeFactor );
228
228
// 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);
231
231
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 );
234
234
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 );
237
237
238
- // Collect maker fee (charged in taker token)
238
+ // Collect user fee (charged in pionex token)
239
239
if (tokenlonFee > 0 ) {
240
- _spender.spendFromUserTo (_settlement.trader, address (_settlement.takerToken ), _feeCollector, tokenlonFee);
240
+ _spender.spendFromUserTo (_settlement.trader, address (_settlement.pionexToken ), _feeCollector, tokenlonFee);
241
241
}
242
242
243
243
// bypass stack too deep error
244
244
_emitLimitOrderFilledByTrader (
245
245
LimitOrderFilledByTraderParams ({
246
246
orderHash: _settlement.orderHash,
247
- maker : _settlement.maker ,
248
- taker : _settlement.trader,
247
+ user : _settlement.user ,
248
+ pionex : _settlement.trader,
249
249
allowFillHash: _settlement.allowFillHash,
250
250
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 ,
255
255
remainingAmount: _settlement.remainingAmount,
256
256
tokenlonFee: tokenlonFee,
257
257
pionexFee: pionexFee
258
258
})
259
259
);
260
260
261
- return _settlement.makerTokenAmount ;
261
+ return _settlement.userTokenAmount ;
262
262
}
263
263
264
264
/// @inheritdoc IPionexContract
@@ -269,15 +269,15 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
269
269
require (! isCancelled, "LimitOrder: Order is cancelled already " );
270
270
{
271
271
PionexContractLibEIP712.Order memory cancelledOrder = _order;
272
- cancelledOrder.takerTokenAmount = 0 ;
272
+ cancelledOrder.pionexTokenAmount = 0 ;
273
273
274
274
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 " );
276
276
}
277
277
278
278
// Set cancelled state to storage
279
279
LibPionexContractOrderStorage.getStorage ().orderHashToCancelled[orderHash] = true ;
280
- emit OrderCancelled (orderHash, _order.maker );
280
+ emit OrderCancelled (orderHash, _order.user );
281
281
}
282
282
283
283
/* order utils */
@@ -291,36 +291,36 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
291
291
bool isCancelled = LibPionexContractOrderStorage.getStorage ().orderHashToCancelled[_orderHash];
292
292
require (! isCancelled, "LimitOrder: Order is cancelled " );
293
293
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 " );
295
295
}
296
296
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 " );
300
300
}
301
301
}
302
302
303
303
function _quoteOrderFromMakerToken (
304
304
PionexContractLibEIP712.Order memory _order ,
305
305
bytes32 _orderHash ,
306
- uint256 _makerTokenAmount
306
+ uint256 _userTokenAmount
307
307
) internal view returns (uint256 , uint256 ) {
308
- uint256 makerTokenFilledAmount = LibPionexContractOrderStorage.getStorage ().orderHashToMakerTokenFilledAmount[_orderHash];
308
+ uint256 userTokenFilledAmount = LibPionexContractOrderStorage.getStorage ().orderHashToMakerTokenFilledAmount[_orderHash];
309
309
310
- require (makerTokenFilledAmount < _order.makerTokenAmount , "LimitOrder: Order is filled " );
310
+ require (userTokenFilledAmount < _order.userTokenAmount , "LimitOrder: Order is filled " );
311
311
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 );
315
315
316
- require (makerTokenQuota != 0 , "LimitOrder: zero token amount " );
317
- return (makerTokenQuota , remainingAfterFill);
316
+ require (userTokenQuota != 0 , "LimitOrder: zero token amount " );
317
+ return (userTokenQuota , remainingAfterFill);
318
318
}
319
319
320
- function _recordMakerTokenFilled (bytes32 _orderHash , uint256 _makerTokenAmount ) internal {
320
+ function _recordMakerTokenFilled (bytes32 _orderHash , uint256 _userTokenAmount ) internal {
321
321
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 );
324
324
}
325
325
326
326
/* math utils */
@@ -333,14 +333,14 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
333
333
334
334
struct LimitOrderFilledByTraderParams {
335
335
bytes32 orderHash;
336
- address maker ;
337
- address taker ;
336
+ address user ;
337
+ address pionex ;
338
338
bytes32 allowFillHash;
339
339
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 ;
344
344
uint256 remainingAmount;
345
345
uint256 tokenlonFee;
346
346
uint256 pionexFee;
@@ -349,15 +349,15 @@ contract PionexContract is IPionexContract, StrategyBase, BaseLibEIP712, Signatu
349
349
function _emitLimitOrderFilledByTrader (LimitOrderFilledByTraderParams memory _params ) internal {
350
350
emit LimitOrderFilledByTrader (
351
351
_params.orderHash,
352
- _params.maker ,
353
- _params.taker ,
352
+ _params.user ,
353
+ _params.pionex ,
354
354
_params.allowFillHash,
355
355
_params.recipient,
356
356
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 ,
361
361
remainingAmount: _params.remainingAmount,
362
362
tokenlonFee: _params.tokenlonFee,
363
363
pionexFee: _params.pionexFee
0 commit comments