78 lines
3.5 KiB
TypeScript
78 lines
3.5 KiB
TypeScript
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;
|
|
},
|
|
};
|