42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { SignedOrder } from '@0x/types';
|
|
import { BigNumber } from '@0x/utils';
|
|
import { Web3Wrapper } from '@0x/web3-wrapper';
|
|
import { AbiDefinition, ContractAbi, MethodAbi } from 'ethereum-types';
|
|
import * as _ from 'lodash';
|
|
|
|
import { constants } from '../constants';
|
|
import { OrdersAndFillableAmounts } from '../types';
|
|
|
|
// tslint:disable:no-unnecessary-type-assertion
|
|
export const utils = {
|
|
numberPercentageToEtherTokenAmountPercentage(percentage: number): BigNumber {
|
|
return Web3Wrapper.toBaseUnitAmount(constants.ONE_AMOUNT, constants.ETHER_TOKEN_DECIMALS).multipliedBy(
|
|
percentage,
|
|
);
|
|
},
|
|
getMethodAbiFromContractAbi(abi: ContractAbi, name: string): MethodAbi | undefined {
|
|
return _.find(
|
|
abi,
|
|
(def: AbiDefinition): boolean => {
|
|
if (def.type === 'function') {
|
|
const methodDef = def as MethodAbi;
|
|
return methodDef.name === name;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
) as MethodAbi | undefined;
|
|
},
|
|
isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts: OrdersAndFillableAmounts): boolean {
|
|
const { orders, remainingFillableMakerAssetAmounts } = ordersAndFillableAmounts;
|
|
return _.some(
|
|
orders,
|
|
(order: SignedOrder, index: number): boolean => {
|
|
const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index];
|
|
// If takerFee is a non zero value and order is still fillable, fee orders are required
|
|
return !order.takerFee.isZero() && !remainingFillableMakerAssetAmount.isZero();
|
|
},
|
|
);
|
|
},
|
|
};
|