protocol/contracts/exchange/test/utils/exchange_data_encoder.ts

60 lines
3.0 KiB
TypeScript

import { constants, provider } from '@0x/contracts-test-utils';
import { orderHashUtils } from '@0x/order-utils';
import { SignedOrder } from '@0x/types';
import { constants as exchangeConstants, ExchangeFunctionName, IExchangeContract } from '../../src';
export const exchangeDataEncoder = {
encodeOrdersToExchangeData(fnName: string, orders: SignedOrder[] = []): string {
const exchangeInstance = new IExchangeContract(constants.NULL_ADDRESS, provider);
let data;
if (exchangeConstants.SINGLE_FILL_FN_NAMES.indexOf(fnName) !== -1) {
data = (exchangeInstance as any)[fnName].getABIEncodedTransactionData(
orders[0],
orders[0].takerAssetAmount,
orders[0].signature,
);
} else if (exchangeConstants.BATCH_FILL_FN_NAMES.indexOf(fnName) !== -1) {
data = (exchangeInstance as any)[fnName].getABIEncodedTransactionData(
orders,
orders.map(order => order.takerAssetAmount),
orders.map(order => order.signature),
);
} else if (exchangeConstants.MARKET_FILL_FN_NAMES.indexOf(fnName) !== -1) {
data = (exchangeInstance as any)[fnName].getABIEncodedTransactionData(
orders,
orders.map(order => order.takerAssetAmount).reduce((prev, curr) => prev.plus(curr)),
orders.map(order => order.signature),
);
} else if (fnName === ExchangeFunctionName.MatchOrders) {
data = exchangeInstance.matchOrders.getABIEncodedTransactionData(
orders[0],
orders[1],
orders[0].signature,
orders[1].signature,
);
} else if (fnName === ExchangeFunctionName.CancelOrder) {
data = exchangeInstance.cancelOrder.getABIEncodedTransactionData(orders[0]);
} else if (fnName === ExchangeFunctionName.BatchCancelOrders) {
data = exchangeInstance.batchCancelOrders.getABIEncodedTransactionData(orders);
} else if (fnName === ExchangeFunctionName.CancelOrdersUpTo) {
data = exchangeInstance.cancelOrdersUpTo.getABIEncodedTransactionData(constants.ZERO_AMOUNT);
} else if (fnName === ExchangeFunctionName.PreSign) {
data = exchangeInstance.preSign.getABIEncodedTransactionData(orderHashUtils.getOrderHashHex(orders[0]));
} else if (fnName === ExchangeFunctionName.SetSignatureValidatorApproval) {
data = exchangeInstance.setSignatureValidatorApproval.getABIEncodedTransactionData(
constants.NULL_ADDRESS,
true,
);
} else if (fnName === ExchangeFunctionName.SetOrderValidatorApproval) {
data = exchangeInstance.setOrderValidatorApproval.getABIEncodedTransactionData(
constants.NULL_ADDRESS,
true,
);
} else {
throw new Error(`Error: ${fnName} not a supported function`);
}
return data;
},
};