aboutsummaryrefslogblamecommitdiffstats
path: root/packages/contracts/util/formatters.ts
blob: e16fe8d45d9fb179fb32b829f409981a7e11e599 (plain) (tree)
1
2
3
4
5
6
7
                                             

                            

                                                                             

                           




                                                             









                                                        














                                                      


                                                       





                                                                                    




                                                             









                                                        














                                                      


                                                      









                                                                                   














                                                      





                                                                                        
  
import { BigNumber } from '@0xproject/utils';
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 as number);
            batchFill.r.push(order.params.r as string);
            batchFill.s.push(order.params.s as string);
            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 as number);
            fillUpTo.r.push(order.params.r as string);
            fillUpTo.s.push(order.params.s as string);
        });
        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;
    },
};