aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/util/formatters.ts
blob: 0ad44481abeef066038c286942d92c979cc9f8a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import {BigNumber} from 'bignumber.js';
import * as _ from 'lodash';

import {Order} from './order';
import {BatchCancelOrders, BatchFillOrders, FillOrdersUpTo} from './types';

export const formatters = {
    createBatchFill(orders: Order[],
                    shouldThrowOnInsufficientBalanceOrAllowance: boolean,
                    fillTakerTokenAmounts: BigNumber[] = []) {
        const batchFill: BatchFillOrders = {
            orderAddresses: [],
            orderValues: [],
            fillTakerTokenAmounts,
            shouldThrowOnInsufficientBalanceOrAllowance,
            v: [],
            r: [],
            s: [],
        };
        _.forEach(orders, order => {
            batchFill.orderAddresses.push([order.params.maker, order.params.taker, order.params.makerToken,
                                     order.params.takerToken, order.params.feeRecipient]);
            batchFill.orderValues.push([order.params.makerTokenAmount, order.params.takerTokenAmount,
                                        order.params.makerFee, order.params.takerFee,
                                        order.params.expirationTimestampInSec, order.params.salt]);
            batchFill.v.push(order.params.v);
            batchFill.r.push(order.params.r);
            batchFill.s.push(order.params.s);
            if (fillTakerTokenAmounts.length < orders.length) {
                batchFill.fillTakerTokenAmounts.push(order.params.takerTokenAmount);
            }
        });
        return batchFill;
    },
    createFillUpTo(orders: Order[],
                   shouldThrowOnInsufficientBalanceOrAllowance: boolean,
                   fillTakerTokenAmount: BigNumber) {
        const fillUpTo: FillOrdersUpTo = {
            orderAddresses: [],
            orderValues: [],
            fillTakerTokenAmount,
            shouldThrowOnInsufficientBalanceOrAllowance,
            v: [],
            r: [],
            s: [],
        };
        orders.forEach(order => {
            fillUpTo.orderAddresses.push([order.params.maker, order.params.taker, order.params.makerToken,
                                          order.params.takerToken, order.params.feeRecipient]);
            fillUpTo.orderValues.push([order.params.makerTokenAmount, order.params.takerTokenAmount,
                                       order.params.makerFee, order.params.takerFee,
                                       order.params.expirationTimestampInSec, order.params.salt]);
            fillUpTo.v.push(order.params.v);
            fillUpTo.r.push(order.params.r);
            fillUpTo.s.push(order.params.s);
        });
        return fillUpTo;
    },
    createBatchCancel(orders: Order[], cancelTakerTokenAmounts: BigNumber[] = []) {
        const batchCancel: BatchCancelOrders = {
            orderAddresses: [],
            orderValues: [],
            cancelTakerTokenAmounts,
        };
        orders.forEach(order => {
            batchCancel.orderAddresses.push([order.params.maker, order.params.taker, order.params.makerToken,
                                       order.params.takerToken, order.params.feeRecipient]);
            batchCancel.orderValues.push([order.params.makerTokenAmount, order.params.takerTokenAmount,
                                          order.params.makerFee, order.params.takerFee,
                                          order.params.expirationTimestampInSec, order.params.salt]);
            if (cancelTakerTokenAmounts.length < orders.length) {
                batchCancel.cancelTakerTokenAmounts.push(order.params.takerTokenAmount);
            }
        });
        return batchCancel;
    },
};