Skip to content
This repository was archived by the owner on Aug 12, 2023. It is now read-only.

Commit f3019fc

Browse files
authored
Implement fixes and improvements related to fees (#409)
* Handle edge cases in fees gracefully * Normalize fees in fill response
1 parent a1b68d8 commit f3019fc

File tree

11 files changed

+441
-76
lines changed

11 files changed

+441
-76
lines changed

src/app/routes/v1/util/__snapshots__/transform-fill.test.js.snap

Lines changed: 62 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,38 @@ Object {
7272
],
7373
"date": "2018-09-06T10:47:38.000Z",
7474
"feeRecipient": "0xe269e891a2ec8585a378882ffa531141205e92e9",
75-
"fees": undefined,
75+
"fees": Array [
76+
Object {
77+
"amount": Object {
78+
"USD": 9.13,
79+
"token": "15",
80+
},
81+
"token": Object {
82+
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498",
83+
"id": null,
84+
"name": "0x Protocol Token",
85+
"symbol": "ZRX",
86+
"type": "erc-20",
87+
},
88+
"traderType": "maker",
89+
},
90+
Object {
91+
"amount": Object {
92+
"USD": 3.04,
93+
"token": "5",
94+
},
95+
"token": Object {
96+
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498",
97+
"id": null,
98+
"name": "0x Protocol Token",
99+
"symbol": "ZRX",
100+
"type": "erc-20",
101+
},
102+
"traderType": "taker",
103+
},
104+
],
76105
"id": "5b9107e00d05f400042e3494",
77106
"makerAddress": "0x8dd688660ec0babd0b8a2f2de3232645f73cc5eb",
78-
"makerFee": Object {
79-
"USD": 9.13,
80-
"ZRX": "15",
81-
},
82107
"orderHash": "0xd7cbdddb68cfa6216e867227a4cb8ca281e0d82921000b4b977d6038535482f5",
83108
"protocolFee": undefined,
84109
"protocolVersion": 1,
@@ -90,14 +115,6 @@ Object {
90115
"senderAddress": undefined,
91116
"status": "successful",
92117
"takerAddress": "0xe269e891a2ec8585a378882ffa531141205e92e9",
93-
"takerFee": Object {
94-
"USD": 3.04,
95-
"ZRX": "5",
96-
},
97-
"totalFees": Object {
98-
"USD": 12.170000000000002,
99-
"ZRX": "20",
100-
},
101118
"transactionHash": "0x4c69e925be055eec7bc49cc681fd5267d1aca7e1db21f687ab19ab9d75b7447c",
102119
"value": Object {
103120
"USD": 1601.76195501,
@@ -119,7 +136,7 @@ Object {
119136
"tokenSymbol": undefined,
120137
"tokenType": undefined,
121138
"traderType": "maker",
122-
"type": undefined,
139+
"type": null,
123140
}
124141
`;
125142

@@ -137,7 +154,7 @@ Object {
137154
"tokenSymbol": undefined,
138155
"tokenType": undefined,
139156
"traderType": "taker",
140-
"type": undefined,
157+
"type": null,
141158
}
142159
`;
143160

@@ -177,13 +194,38 @@ Object {
177194
],
178195
"date": "2018-09-06T10:47:38.000Z",
179196
"feeRecipient": "0xe269e891a2ec8585a378882ffa531141205e92e9",
180-
"fees": undefined,
197+
"fees": Array [
198+
Object {
199+
"amount": Object {
200+
"USD": 0.2,
201+
"token": "15",
202+
},
203+
"token": Object {
204+
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498",
205+
"id": null,
206+
"name": "0x Protocol Token",
207+
"symbol": "ZRX",
208+
"type": "erc-20",
209+
},
210+
"traderType": "maker",
211+
},
212+
Object {
213+
"amount": Object {
214+
"USD": 0.3,
215+
"token": "5",
216+
},
217+
"token": Object {
218+
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498",
219+
"id": null,
220+
"name": "0x Protocol Token",
221+
"symbol": "ZRX",
222+
"type": "erc-20",
223+
},
224+
"traderType": "taker",
225+
},
226+
],
181227
"id": "5b9107e00d05f400042e3494",
182228
"makerAddress": "0x8dd688660ec0babd0b8a2f2de3232645f73cc5eb",
183-
"makerFee": Object {
184-
"USD": 0.2,
185-
"ZRX": "15",
186-
},
187229
"orderHash": "0xd7cbdddb68cfa6216e867227a4cb8ca281e0d82921000b4b977d6038535482f5",
188230
"protocolFee": undefined,
189231
"protocolVersion": 2,
@@ -195,14 +237,6 @@ Object {
195237
"senderAddress": undefined,
196238
"status": "successful",
197239
"takerAddress": "0xe269e891a2ec8585a378882ffa531141205e92e9",
198-
"takerFee": Object {
199-
"USD": 0.3,
200-
"ZRX": "5",
201-
},
202-
"totalFees": Object {
203-
"USD": 0.5,
204-
"ZRX": "20",
205-
},
206240
"transactionHash": "0x4c69e925be055eec7bc49cc681fd5267d1aca7e1db21f687ab19ab9d75b7447c",
207241
"value": Object {
208242
"USD": 37.77675,

src/app/routes/v1/util/transform-fill.js

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
const _ = require('lodash');
22

3-
const {
4-
ETH_TOKEN_DECIMALS,
5-
ZRX_TOKEN_DECIMALS,
6-
} = require('../../../../constants');
3+
const { ETH_TOKEN_DECIMALS } = require('../../../../constants');
74
const formatFillStatus = require('../../../../fills/format-fill-status');
85
const formatTokenAmount = require('../../../../tokens/format-token-amount');
96
const getAssetsForFill = require('../../../../fills/get-assets-for-fill');
@@ -17,33 +14,6 @@ const transformFill = fill => {
1714
const fees = getFeesForFill(fill);
1815
const conversions = _.get(fill, `conversions.USD`);
1916

20-
const makerFee =
21-
fill.makerFee !== undefined
22-
? {
23-
USD: _.get(conversions, 'makerFee'),
24-
ZRX: formatTokenAmount(fill.makerFee, ZRX_TOKEN_DECIMALS),
25-
}
26-
: undefined;
27-
28-
const takerFee =
29-
fill.takerFee !== undefined
30-
? {
31-
USD: _.get(conversions, 'takerFee'),
32-
ZRX: formatTokenAmount(fill.takerFee, ZRX_TOKEN_DECIMALS),
33-
}
34-
: undefined;
35-
36-
const totalFees =
37-
takerFee !== undefined || makerFee !== undefined
38-
? {
39-
USD: makerFee.USD + takerFee.USD,
40-
ZRX:
41-
makerFee.ZRX === undefined
42-
? undefined
43-
: makerFee.ZRX.plus(takerFee.ZRX),
44-
}
45-
: undefined;
46-
4717
const protocolFee =
4818
fill.protocolFee !== undefined
4919
? {
@@ -59,16 +29,13 @@ const transformFill = fill => {
5929
feeRecipient: fill.feeRecipient,
6030
id: fill.id,
6131
makerAddress: fill.maker,
62-
makerFee,
6332
orderHash: fill.orderHash,
6433
protocolFee,
6534
protocolVersion: fill.protocolVersion,
6635
relayer: formatRelayer(fill.relayer),
6736
senderAddress: fill.senderAddress,
6837
status: formatFillStatus(fill.status),
6938
takerAddress: fill.taker,
70-
takerFee,
71-
totalFees,
7239
transactionHash: fill.transactionHash,
7340
value: _.has(conversions, 'amount')
7441
? {

src/app/routes/v1/util/transform-fill.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,15 @@ describe('transformFill', () => {
215215
amount: { token: new BigNumber('0.005'), USD: 0.3 },
216216
token: {
217217
address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
218-
id: undefined,
218+
id: null,
219219
name: 'Wrapped Ether',
220220
symbol: 'WETH',
221221
type: 'erc-20',
222222
},
223223
traderType: 'maker',
224224
},
225225
{
226-
amount: { token: new BigNumber('1'), USD: undefined },
226+
amount: { token: new BigNumber('1'), USD: null },
227227
token: {
228228
address: '0xf5b0a3efb8e8e4c201e2a935f110eaaf3ffecb8d',
229229
id: 58,

src/app/routes/v1/util/transform-token.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ it('should only return white-listed fields', () => {
2828
imageUrl: 'http://tmpuri.org/test.jpg',
2929
name: 'DAI Stablecoin',
3030
symbol: 'DAI',
31+
type: 0,
3132
};
3233
const transformed = transformToken(token);
3334

@@ -48,6 +49,7 @@ it('should only return white-listed fields', () => {
4849
},
4950
symbol: 'DAI',
5051
totalSupply: null,
52+
type: 'erc-20',
5153
});
5254
});
5355

@@ -56,6 +58,7 @@ it('should transform tokens which dont have an image url', () => {
5658
address: '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359',
5759
name: 'DAI Stablecoin',
5860
symbol: 'DAI',
61+
type: 0,
5962
};
6063
const transformed = transformToken(token);
6164

@@ -76,5 +79,6 @@ it('should transform tokens which dont have an image url', () => {
7679
},
7780
symbol: 'DAI',
7881
totalSupply: null,
82+
type: 'erc-20',
7983
});
8084
});

src/fills/get-fees-for-fill.js

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,70 @@
11
const _ = require('lodash');
22

3+
const { ZRX_TOKEN_DECIMALS } = require('../constants');
34
const formatTokenAmount = require('../tokens/format-token-amount');
45
const formatTokenType = require('../tokens/format-token-type');
56
const formatTraderType = require('../traders/format-trader-type');
67

78
const transformFee = fee => {
9+
const tokenAmount = formatTokenAmount(_.get(fee, 'amount.token'), fee.token);
10+
811
return {
912
amount: {
10-
token: formatTokenAmount(_.get(fee, 'amount.token'), fee.token),
11-
USD: _.get(fee, 'amount.USD'),
13+
token: tokenAmount,
14+
USD: _.get(fee, 'amount.USD', null),
1215
},
1316
token: {
1417
address: fee.tokenAddress,
15-
id: fee.tokenId,
16-
name: _.get(fee.token, 'name'),
17-
symbol: _.get(fee.token, 'symbol'),
18+
id: _.get(fee, 'tokenId', null),
19+
name: _.get(fee.token, 'name', null),
20+
symbol: _.get(fee.token, 'symbol', null),
1821
type: formatTokenType(_.get(fee.token, 'type')),
1922
},
2023
traderType: formatTraderType(fee.traderType),
2124
};
2225
};
2326

24-
const getFeesForFill = fill =>
25-
fill.protocolVersion < 3
26-
? undefined
27-
: _.map(fill.fees, fee => transformFee(fee));
27+
const ZRX_TOKEN = {
28+
address: '0xe41d2489571d322189246dafa5ebde1f4699f498',
29+
id: null,
30+
name: '0x Protocol Token',
31+
symbol: 'ZRX',
32+
type: 'erc-20',
33+
};
34+
35+
const getFeesForFill = fill => {
36+
const conversions = _.get(fill, `conversions.USD`, {});
37+
const makerFee = _.get(fill, 'makerFee', 0);
38+
const takerFee = _.get(fill, 'takerFee', 0);
39+
40+
if (makerFee > 0 || takerFee > 0) {
41+
return _.compact([
42+
makerFee === 0
43+
? undefined
44+
: {
45+
amount: {
46+
token: formatTokenAmount(makerFee, ZRX_TOKEN_DECIMALS),
47+
USD: _.get(conversions, 'makerFee'),
48+
},
49+
token: ZRX_TOKEN,
50+
traderType: 'maker',
51+
},
52+
takerFee === 0
53+
? undefined
54+
: {
55+
amount: {
56+
token: formatTokenAmount(takerFee, ZRX_TOKEN_DECIMALS),
57+
USD: _.get(conversions, 'takerFee'),
58+
},
59+
token: ZRX_TOKEN,
60+
traderType: 'taker',
61+
},
62+
]);
63+
}
64+
65+
return _.get(fill, 'fees', [])
66+
.filter(fee => fee.amount.token > 0)
67+
.map(transformFee);
68+
};
2869

2970
module.exports = getFeesForFill;

0 commit comments

Comments
 (0)