From ab286d851d7690543863f99ded50aec728e5c839 Mon Sep 17 00:00:00 2001 From: askeluv Date: Thu, 14 Feb 2019 15:30:58 +0800 Subject: [PATCH] Changed Maps to EdpsWrappers --- .../src/data_sources/dex_prices/index.ts | 10 ++++++---- .../pipeline/src/parsers/slippage/index.ts | 10 +++++----- .../pipeline/src/scripts/pull_slippage.ts | 19 +++++++++++++------ .../test/parsers/slippage/index_test.ts | 12 +++++------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/packages/pipeline/src/data_sources/dex_prices/index.ts b/packages/pipeline/src/data_sources/dex_prices/index.ts index afa4db6953..a54edf5ebd 100644 --- a/packages/pipeline/src/data_sources/dex_prices/index.ts +++ b/packages/pipeline/src/data_sources/dex_prices/index.ts @@ -24,14 +24,16 @@ export class EdpsSource { /** * Call Ethereum DEX Price Service API. */ - public async getEdpsAsync(direction: string, symbol: string, amount: number): Promise> { - const edpsUrl = `${EDPS_BASE_URL}/${direction}?symbol=${symbol}&amount=${amount}`; + public async getEdpsAsync(direction: string, symbol: string, amount: number): Promise { + const edpsUrl = `${EDPS_BASE_URL}/${direction}?amount=${amount}&symbol=${symbol}&decimals=`; const resp = await fetchAsync(edpsUrl); const respJson: EdpsResponse = await resp.json(); - const allExchanges = new Map(); + const allExchanges: EdpsWrapper = {}; + // The below unwraps the response so we get 1 single EdpsWrapper object + // instead of a list of singletons for (const entry of respJson) { for (const key of Object.keys(entry)) { - allExchanges.set(key, entry[key]); + allExchanges[key] = entry[key]; } } return allExchanges; diff --git a/packages/pipeline/src/parsers/slippage/index.ts b/packages/pipeline/src/parsers/slippage/index.ts index 7f5904fb3d..38e2e6f4a8 100644 --- a/packages/pipeline/src/parsers/slippage/index.ts +++ b/packages/pipeline/src/parsers/slippage/index.ts @@ -1,6 +1,6 @@ import { BigNumber } from '@0x/utils'; -import { EdpsExchange } from '../../data_sources/dex_prices'; +import { EdpsWrapper } from '../../data_sources/dex_prices'; import { Slippage } from '../../entities'; /** @@ -16,11 +16,11 @@ import { Slippage } from '../../entities'; export function calculateSlippage( usdAmount: number, exchange: string, - buyEdps: Map, - sellEdps: Map, + buyEdps: EdpsWrapper, + sellEdps: EdpsWrapper, ): Slippage { - const b = buyEdps.get(exchange); - const s = sellEdps.get(exchange); + const b = buyEdps[exchange]; + const s = sellEdps[exchange]; const slippage = new Slippage(); if (b && s && b.avgPrice && s.avgPrice) { slippage.observedTimestamp = b.timestamp; diff --git a/packages/pipeline/src/scripts/pull_slippage.ts b/packages/pipeline/src/scripts/pull_slippage.ts index 0a0bb3360b..d344bc7489 100644 --- a/packages/pipeline/src/scripts/pull_slippage.ts +++ b/packages/pipeline/src/scripts/pull_slippage.ts @@ -22,6 +22,7 @@ const USD_AMOUNTS = [10, 100, 1000, 10000]; // TODO: fetch from database const TOKENS = ['BAT', 'DAI', 'FUN', 'MANA', 'OMG', 'REP', 'TUSD', 'ZRX', 'MKR', 'BNB', 'USDC', 'LOOM', 'DNT', 'CVC']; +//const TOKENS = ['BAT', 'DNT', 'CVC', 'MANA']; let connection: Connection; @@ -37,12 +38,18 @@ let connection: Connection; return Promise.all( USD_AMOUNTS.map(async usdAmount => { const amount = usdAmount / usdPrice; - const buyEdps = await edpsSource.getEdpsAsync('buy', symbol, amount); - const sellEdps = await edpsSource.getEdpsAsync('sell', symbol, amount); - return Array.from(buyEdps.keys()).map(exchange => { - const slippage: Slippage = calculateSlippage(usdAmount, exchange, buyEdps, sellEdps); - return slippage; - }); + try { + const buyEdps = await edpsSource.getEdpsAsync('buy', symbol, amount); + const sellEdps = await edpsSource.getEdpsAsync('sell', symbol, amount); + return Object.keys(buyEdps).map(exchange => { + const slippage: Slippage = calculateSlippage(usdAmount, exchange, buyEdps, sellEdps); + return slippage; + }); + } catch (e) { + logUtils.log(`Error getting data for symbol=${symbol}, amount=${amount}`); + logUtils.log(e); + return [new Slippage()]; + } }), ); }), diff --git a/packages/pipeline/test/parsers/slippage/index_test.ts b/packages/pipeline/test/parsers/slippage/index_test.ts index ce205b1698..892b136efd 100644 --- a/packages/pipeline/test/parsers/slippage/index_test.ts +++ b/packages/pipeline/test/parsers/slippage/index_test.ts @@ -2,7 +2,7 @@ import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; -import { EdpsExchange } from '../../../src/data_sources/dex_prices'; +import { EdpsExchange, EdpsWrapper } from '../../../src/data_sources/dex_prices'; import { Slippage } from '../../../src/entities'; import { calculateSlippage } from '../../../src/parsers/slippage'; import { chaiSetup } from '../../utils/chai_setup'; @@ -22,8 +22,8 @@ describe('slippage', () => { const sellPrice = 9; const expectedSlippage = 0.1; - const buyEdps = new Map(); - const buyOrder: EdpsExchange = { + const buyEdps: EdpsWrapper = {}; + buyEdps[exchange] = { exchangeName: exchange, totalPrice: buyPrice, tokenAmount: amount, @@ -32,10 +32,9 @@ describe('slippage', () => { timestamp: ts, error: '', }; - buyEdps.set(exchange, buyOrder); - const sellEdps = new Map(); - const sellOrder: EdpsExchange = { + const sellEdps: EdpsWrapper = {}; + sellEdps[exchange] = { exchangeName: exchange, totalPrice: sellPrice, tokenAmount: amount, @@ -44,7 +43,6 @@ describe('slippage', () => { timestamp: ts, error: '', }; - sellEdps.set(exchange, sellOrder); const expected = new Slippage(); expected.observedTimestamp = ts; expected.symbol = symbol;