* `@0x/asset-swapper`: Add ERC20Bridge aggregator library. * `@0x/asset-swapper`: Finish off `aggregate.ts`. * `@0x/types`: Add `OrderWithoutDomain` type. * `@0x/asset-swapper`: Add testing infra for sampler/aggregator. * `@0x/types`: Add `SignedOrderWithoutDomain` type. * `@0x/asset-swapper`: Update aggregator to take and return orders with signatures. * `@0x/asset-swapper`: Fix broken aggregator tests. * `@0x/asset-swapper`: Pass the sampler contract into aggregator entry points. * `@0x/contract-artifacts`: Add `IERC20BridgeSampler` artifact. * `@0x/contract-wrappers`: Add `IERC20BridgeSampler` wrapper. * `@0x/asset-swapper`: Address review comments. * fixed testing * refactored aggregate.ts and embeded into asset-swapper * added adjusted rates for taker and maker fees * remove PrunedSignedOrders * updated contract-addresses and addressed some other todos * streamlined logic * patched in lawrences changes * renamed aggregator utils and removed market_utils.ts * added ack heartbeats * fixed bug * patches * added dummy order things * Dummy with valid sig * Tweak gas price calculation to wei * added test coverage and fixed bugs * fixed migrations * Fix CHANGELOGs and types export * Deploy latest ERC20BridgeSampler on Mainnet * `@0x/types` Revert CHANGELOG. * `@0x/asset-swapper`: Address review comments. `@0x/contract-addresses`: Make kyber lowercase. * made protocol fee multiplier async * `@0x/asset-swapper: Fix build errors and do some code cleanup. * use assetDataUtils where possible
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { BigNumber } from '@0x/utils';
|
|
import * as _ from 'lodash';
|
|
|
|
import { constants } from '../../src/constants';
|
|
import { MarketOperation, SignedOrderWithFillableAmounts, SwapQuote } from '../../src/types';
|
|
import { ProtocolFeeUtils } from '../../src/utils/protocol_fee_utils';
|
|
|
|
/**
|
|
* Creates a swap quote given orders.
|
|
*/
|
|
export async function getFullyFillableSwapQuoteWithNoFeesAsync(
|
|
makerAssetData: string,
|
|
takerAssetData: string,
|
|
orders: SignedOrderWithFillableAmounts[],
|
|
operation: MarketOperation,
|
|
gasPrice: BigNumber,
|
|
protocolFeeUtils: ProtocolFeeUtils,
|
|
): Promise<SwapQuote> {
|
|
const makerAssetFillAmount = BigNumber.sum(...[0, ...orders.map(o => o.makerAssetAmount)]);
|
|
const totalTakerAssetAmount = BigNumber.sum(...[0, ...orders.map(o => o.takerAssetAmount)]);
|
|
const quoteInfo = {
|
|
makerAssetAmount: makerAssetFillAmount,
|
|
feeTakerAssetAmount: constants.ZERO_AMOUNT,
|
|
takerAssetAmount: totalTakerAssetAmount,
|
|
totalTakerAssetAmount,
|
|
protocolFeeInWeiAmount: await protocolFeeUtils.calculateWorstCaseProtocolFeeAsync(orders, gasPrice),
|
|
};
|
|
|
|
const quoteBase = {
|
|
makerAssetData,
|
|
takerAssetData,
|
|
orders,
|
|
gasPrice,
|
|
bestCaseQuoteInfo: quoteInfo,
|
|
worstCaseQuoteInfo: quoteInfo,
|
|
};
|
|
|
|
if (operation === MarketOperation.Buy) {
|
|
return {
|
|
...quoteBase,
|
|
type: MarketOperation.Buy,
|
|
makerAssetFillAmount,
|
|
};
|
|
} else {
|
|
return {
|
|
...quoteBase,
|
|
type: MarketOperation.Sell,
|
|
takerAssetFillAmount: totalTakerAssetAmount,
|
|
};
|
|
}
|
|
}
|