More renaming
This commit is contained in:
@@ -7,8 +7,8 @@ import { Provider } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { constants } from './constants';
|
||||
import { ProvidedOrderFetcher } from './order_fetchers/provided_order_fetcher';
|
||||
import { StandardRelayerAPIOrderFetcher } from './order_fetchers/standard_relayer_api_order_fetcher';
|
||||
import { BasicOrderProvider } from './order_providers/basic_order_provider';
|
||||
import { StandardRelayerAPIOrderProvider } from './order_providers/standard_relayer_api_order_provider';
|
||||
import {
|
||||
AssetBuyerError,
|
||||
AssetBuyerOrdersAndFillableAmounts,
|
||||
@@ -26,7 +26,7 @@ import { orderProviderResponseProcessor } from './utils/order_provider_response_
|
||||
export class AssetBuyer {
|
||||
public readonly provider: Provider;
|
||||
public readonly assetData: string;
|
||||
public readonly orderFetcher: OrderProvider;
|
||||
public readonly orderProvider: OrderProvider;
|
||||
public readonly networkId: number;
|
||||
public readonly orderRefreshIntervalMs: number;
|
||||
private readonly _contractWrappers: ContractWrappers;
|
||||
@@ -58,8 +58,8 @@ export class AssetBuyer {
|
||||
assert.areValidProvidedOrders('feeOrders', feeOrders);
|
||||
assert.assert(orders.length !== 0, `Expected orders to contain at least one order`);
|
||||
const assetData = orders[0].makerAssetData;
|
||||
const orderFetcher = new ProvidedOrderFetcher(_.concat(orders, feeOrders));
|
||||
const assetBuyer = new AssetBuyer(provider, assetData, orderFetcher, networkId, orderRefreshIntervalMs);
|
||||
const orderProvider = new BasicOrderProvider(_.concat(orders, feeOrders));
|
||||
const assetBuyer = new AssetBuyer(provider, assetData, orderProvider, networkId, orderRefreshIntervalMs);
|
||||
return assetBuyer;
|
||||
}
|
||||
/**
|
||||
@@ -84,8 +84,8 @@ export class AssetBuyer {
|
||||
assert.isWebUri('sraApiUrl', sraApiUrl);
|
||||
assert.isNumber('networkId', networkId);
|
||||
assert.isNumber('orderRefreshIntervalMs', orderRefreshIntervalMs);
|
||||
const orderFetcher = new StandardRelayerAPIOrderFetcher(sraApiUrl);
|
||||
const assetBuyer = new AssetBuyer(provider, assetData, orderFetcher, networkId, orderRefreshIntervalMs);
|
||||
const orderProvider = new StandardRelayerAPIOrderProvider(sraApiUrl);
|
||||
const assetBuyer = new AssetBuyer(provider, assetData, orderProvider, networkId, orderRefreshIntervalMs);
|
||||
return assetBuyer;
|
||||
}
|
||||
/**
|
||||
@@ -124,7 +124,7 @@ export class AssetBuyer {
|
||||
* Instantiates a new AssetBuyer instance
|
||||
* @param provider The Provider instance you would like to use for interacting with the Ethereum network.
|
||||
* @param assetData The assetData of the desired asset to buy (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
|
||||
* @param orderFetcher An object that conforms to OrderFetcher, see type for definition.
|
||||
* @param orderProvider An object that conforms to OrderProvider, see type for definition.
|
||||
* @param networkId The ethereum network id. Defaults to 1 (mainnet).
|
||||
* @param orderRefreshIntervalMs The interval in ms that getBuyQuoteAsync should trigger an refresh of orders and order states.
|
||||
* Defaults to 10000ms (10s).
|
||||
@@ -133,18 +133,18 @@ export class AssetBuyer {
|
||||
constructor(
|
||||
provider: Provider,
|
||||
assetData: string,
|
||||
orderFetcher: OrderProvider,
|
||||
orderProvider: OrderProvider,
|
||||
networkId: number = constants.MAINNET_NETWORK_ID,
|
||||
orderRefreshIntervalMs: number = constants.DEFAULT_ORDER_REFRESH_INTERVAL_MS,
|
||||
) {
|
||||
assert.isWeb3Provider('provider', provider);
|
||||
assert.isString('assetData', assetData);
|
||||
assert.isValidOrderFetcher('orderFetcher', orderFetcher);
|
||||
assert.isValidOrderProvider('orderProvider', orderProvider);
|
||||
assert.isNumber('networkId', networkId);
|
||||
assert.isNumber('orderRefreshIntervalMs', orderRefreshIntervalMs);
|
||||
this.provider = provider;
|
||||
this.assetData = assetData;
|
||||
this.orderFetcher = orderFetcher;
|
||||
this.orderProvider = orderProvider;
|
||||
this.networkId = networkId;
|
||||
this.orderRefreshIntervalMs = orderRefreshIntervalMs;
|
||||
this._contractWrappers = new ContractWrappers(this.provider, {
|
||||
@@ -248,31 +248,31 @@ export class AssetBuyer {
|
||||
return txHash;
|
||||
}
|
||||
/**
|
||||
* Ask the order fetcher for orders and process them.
|
||||
* Ask the order Provider for orders and process them.
|
||||
*/
|
||||
private async _getLatestOrdersAndFillableAmountsAsync(): Promise<AssetBuyerOrdersAndFillableAmounts> {
|
||||
const etherTokenAssetData = this._getEtherTokenAssetDataOrThrow();
|
||||
const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow();
|
||||
// construct order fetcher requests
|
||||
const targetOrderFetcherRequest = {
|
||||
// construct order Provider requests
|
||||
const targetOrderProviderRequest = {
|
||||
makerAssetData: this.assetData,
|
||||
takerAssetData: etherTokenAssetData,
|
||||
networkId: this.networkId,
|
||||
};
|
||||
const feeOrderFetcherRequest = {
|
||||
const feeOrderProviderRequest = {
|
||||
makerAssetData: zrxTokenAssetData,
|
||||
takerAssetData: etherTokenAssetData,
|
||||
networkId: this.networkId,
|
||||
};
|
||||
const requests = [targetOrderFetcherRequest, feeOrderFetcherRequest];
|
||||
const requests = [targetOrderProviderRequest, feeOrderProviderRequest];
|
||||
// fetch orders and possible fillable amounts
|
||||
const [targetOrderFetcherResponse, feeOrderFetcherResponse] = await Promise.all(
|
||||
_.map(requests, async request => this.orderFetcher.getOrdersAsync(request)),
|
||||
const [targetOrderProviderResponse, feeOrderProviderResponse] = await Promise.all(
|
||||
_.map(requests, async request => this.orderProvider.getOrdersAsync(request)),
|
||||
);
|
||||
// process the responses into one object
|
||||
const ordersAndFillableAmounts = await orderProviderResponseProcessor.processAsync(
|
||||
targetOrderFetcherResponse,
|
||||
feeOrderFetcherResponse,
|
||||
targetOrderProviderResponse,
|
||||
feeOrderProviderResponse,
|
||||
zrxTokenAssetData,
|
||||
this._contractWrappers.orderValidator,
|
||||
);
|
||||
|
||||
@@ -3,8 +3,8 @@ export { SignedOrder } from '@0xproject/types';
|
||||
export { BigNumber } from '@0xproject/utils';
|
||||
|
||||
export { AssetBuyer } from './asset_buyer';
|
||||
export { ProvidedOrderFetcher } from './order_fetchers/provided_order_fetcher';
|
||||
export { StandardRelayerAPIOrderFetcher } from './order_fetchers/standard_relayer_api_order_fetcher';
|
||||
export { BasicOrderProvider } from './order_providers/basic_order_provider';
|
||||
export { StandardRelayerAPIOrderProvider } from './order_providers/standard_relayer_api_order_provider';
|
||||
export { StandardRelayerAPIAssetBuyerManager } from './standard_relayer_api_asset_buyer_manager';
|
||||
export {
|
||||
AssetBuyerError,
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
import { schemas } from '@0xproject/json-schemas';
|
||||
import { SignedOrder } from '@0xproject/types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { OrderProvider, OrderProviderRequest, OrderProviderResponse } from '../types';
|
||||
import { assert } from '../utils/assert';
|
||||
|
||||
export class ProvidedOrderFetcher implements OrderProvider {
|
||||
public readonly providedOrders: SignedOrder[];
|
||||
/**
|
||||
* Instantiates a new ProvidedOrderFetcher instance
|
||||
* @param providedOrders An array of objects that conform to SignedOrder to fetch from.
|
||||
* @return An instance of ProvidedOrderFetcher
|
||||
*/
|
||||
constructor(providedOrders: SignedOrder[]) {
|
||||
assert.doesConformToSchema('providedOrders', providedOrders, schemas.signedOrdersSchema);
|
||||
this.providedOrders = providedOrders;
|
||||
}
|
||||
/**
|
||||
* Given an object that conforms to OrderFetcherRequest, return the corresponding OrderFetcherResponse that satisfies the request.
|
||||
* @param orderFetchRequest An instance of OrderFetcherRequest. See type for more information.
|
||||
* @return An instance of OrderFetcherResponse. See type for more information.
|
||||
*/
|
||||
public async getOrdersAsync(orderFetchRequest: OrderProviderRequest): Promise<OrderProviderResponse> {
|
||||
assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest);
|
||||
const { makerAssetData, takerAssetData } = orderFetchRequest;
|
||||
const orders = _.filter(this.providedOrders, order => {
|
||||
return order.makerAssetData === makerAssetData && order.takerAssetData === takerAssetData;
|
||||
});
|
||||
return { orders };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import { schemas } from '@0xproject/json-schemas';
|
||||
import { SignedOrder } from '@0xproject/types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { OrderProvider, OrderProviderRequest, OrderProviderResponse } from '../types';
|
||||
import { assert } from '../utils/assert';
|
||||
|
||||
export class BasicOrderProvider implements OrderProvider {
|
||||
public readonly orders: SignedOrder[];
|
||||
/**
|
||||
* Instantiates a new BasicOrderProvider instance
|
||||
* @param orders An array of objects that conform to SignedOrder to fetch from.
|
||||
* @return An instance of BasicOrderProvider
|
||||
*/
|
||||
constructor(orders: SignedOrder[]) {
|
||||
assert.doesConformToSchema('orders', orders, schemas.signedOrdersSchema);
|
||||
this.orders = orders;
|
||||
}
|
||||
/**
|
||||
* Given an object that conforms to OrderFetcherRequest, return the corresponding OrderProviderResponse that satisfies the request.
|
||||
* @param orderProviderRequest An instance of OrderFetcherRequest. See type for more information.
|
||||
* @return An instance of OrderProviderResponse. See type for more information.
|
||||
*/
|
||||
public async getOrdersAsync(orderProviderRequest: OrderProviderRequest): Promise<OrderProviderResponse> {
|
||||
assert.isValidOrderProviderRequest('orderProviderRequest', orderProviderRequest);
|
||||
const { makerAssetData, takerAssetData } = orderProviderRequest;
|
||||
const orders = _.filter(this.orders, order => {
|
||||
return order.makerAssetData === makerAssetData && order.takerAssetData === takerAssetData;
|
||||
});
|
||||
return { orders };
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
import { assert } from '../utils/assert';
|
||||
import { orderUtils } from '../utils/order_utils';
|
||||
|
||||
export class StandardRelayerAPIOrderFetcher implements OrderProvider {
|
||||
export class StandardRelayerAPIOrderProvider implements OrderProvider {
|
||||
public readonly apiUrl: string;
|
||||
private readonly _sraClient: HttpClient;
|
||||
/**
|
||||
@@ -42,9 +42,9 @@ export class StandardRelayerAPIOrderFetcher implements OrderProvider {
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Instantiates a new StandardRelayerAPIOrderFetcher instance
|
||||
* Instantiates a new StandardRelayerAPIOrderProvider instance
|
||||
* @param apiUrl The standard relayer API base HTTP url you would like to source orders from.
|
||||
* @return An instance of StandardRelayerAPIOrderFetcher
|
||||
* @return An instance of StandardRelayerAPIOrderProvider
|
||||
*/
|
||||
constructor(apiUrl: string) {
|
||||
assert.isWebUri('apiUrl', apiUrl);
|
||||
@@ -52,13 +52,13 @@ export class StandardRelayerAPIOrderFetcher implements OrderProvider {
|
||||
this._sraClient = new HttpClient(apiUrl);
|
||||
}
|
||||
/**
|
||||
* Given an object that conforms to OrderFetcherRequest, return the corresponding OrderFetcherResponse that satisfies the request.
|
||||
* @param orderFetchRequest An instance of OrderFetcherRequest. See type for more information.
|
||||
* @return An instance of OrderFetcherResponse. See type for more information.
|
||||
* Given an object that conforms to OrderProviderRequest, return the corresponding OrderProviderResponse that satisfies the request.
|
||||
* @param orderProviderRequest An instance of OrderProviderRequest. See type for more information.
|
||||
* @return An instance of OrderProviderResponse. See type for more information.
|
||||
*/
|
||||
public async getOrdersAsync(orderFetchRequest: OrderProviderRequest): Promise<OrderProviderResponse> {
|
||||
assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest);
|
||||
const { makerAssetData, takerAssetData, networkId } = orderFetchRequest;
|
||||
public async getOrdersAsync(orderProviderRequest: OrderProviderRequest): Promise<OrderProviderResponse> {
|
||||
assert.isValidOrderProviderRequest('orderProviderRequest', orderProviderRequest);
|
||||
const { makerAssetData, takerAssetData, networkId } = orderProviderRequest;
|
||||
const orderbookRequest = { baseAssetData: makerAssetData, quoteAssetData: takerAssetData };
|
||||
const requestOpts = { networkId };
|
||||
let orderbook: OrderbookResponse;
|
||||
@@ -68,7 +68,7 @@ export class StandardRelayerAPIOrderFetcher implements OrderProvider {
|
||||
throw new Error(AssetBuyerError.StandardRelayerApiError);
|
||||
}
|
||||
const apiOrders = orderbook.asks.records;
|
||||
const orders = StandardRelayerAPIOrderFetcher._getSignedOrderWithRemainingFillableMakerAssetAmountFromApi(
|
||||
const orders = StandardRelayerAPIOrderProvider._getSignedOrderWithRemainingFillableMakerAssetAmountFromApi(
|
||||
apiOrders,
|
||||
);
|
||||
return {
|
||||
@@ -27,7 +27,7 @@ export interface SignedOrderWithRemainingFillableMakerAssetAmount extends Signed
|
||||
remainingFillableMakerAssetAmount?: BigNumber;
|
||||
}
|
||||
/**
|
||||
* Given an OrderFetchRequest, get an OrderFetchResponse.
|
||||
* Given an OrderProviderRequest, get an OrderProviderResponse.
|
||||
*/
|
||||
export interface OrderProvider {
|
||||
getOrdersAsync: (orderProviderRequest: OrderProviderRequest) => Promise<OrderProviderResponse>;
|
||||
|
||||
@@ -18,10 +18,10 @@ export const assert = {
|
||||
sharedAssert.isNumber(`${variableName}.feePercentage`, buyQuote.feePercentage);
|
||||
}
|
||||
},
|
||||
isValidOrderFetcher(variableName: string, orderFetcher: OrderProvider): void {
|
||||
isValidOrderProvider(variableName: string, orderFetcher: OrderProvider): void {
|
||||
sharedAssert.isFunction(`${variableName}.fetchOrdersAsync`, orderFetcher.getOrdersAsync);
|
||||
},
|
||||
isValidOrderFetcherRequest(variableName: string, orderFetcherRequest: OrderProviderRequest): void {
|
||||
isValidOrderProviderRequest(variableName: string, orderFetcherRequest: OrderProviderRequest): void {
|
||||
sharedAssert.isHexString(`${variableName}.makerAssetData`, orderFetcherRequest.makerAssetData);
|
||||
sharedAssert.isHexString(`${variableName}.takerAssetData`, orderFetcherRequest.takerAssetData);
|
||||
sharedAssert.isNumber(`${variableName}.networkId`, orderFetcherRequest.networkId);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { AssetBuyerError, AssetBuyerOrdersAndFillableAmounts, BuyQuote } from '.
|
||||
|
||||
import { orderUtils } from './order_utils';
|
||||
|
||||
// Calculates a buy quote for orders that have WETH as the takerAsset
|
||||
export const buyQuoteCalculator = {
|
||||
calculate(
|
||||
ordersAndFillableAmounts: AssetBuyerOrdersAndFillableAmounts,
|
||||
|
||||
Reference in New Issue
Block a user