diff options
author | brunobar79 <brunobar79@gmail.com> | 2018-11-14 06:21:15 +0800 |
---|---|---|
committer | brunobar79 <brunobar79@gmail.com> | 2018-11-14 06:21:15 +0800 |
commit | 484aa6801ea50fb08253fd08559710c53e0c189d (patch) | |
tree | 2a7876d3800e57aafab39a6beebe00abf7fc26ba /app/scripts/controllers/token-rates.js | |
parent | c651212025ab7cd0309d96be6687c1eba35ab9fa (diff) | |
parent | 0549782595335e8257d1b4abf7d6220020e2c8db (diff) | |
download | tangerine-wallet-browser-484aa6801ea50fb08253fd08559710c53e0c189d.tar.gz tangerine-wallet-browser-484aa6801ea50fb08253fd08559710c53e0c189d.tar.zst tangerine-wallet-browser-484aa6801ea50fb08253fd08559710c53e0c189d.zip |
Merge branch 'develop' into trezor-v5
Diffstat (limited to 'app/scripts/controllers/token-rates.js')
-rw-r--r-- | app/scripts/controllers/token-rates.js | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/app/scripts/controllers/token-rates.js b/app/scripts/controllers/token-rates.js index b6f084841..a8936f13b 100644 --- a/app/scripts/controllers/token-rates.js +++ b/app/scripts/controllers/token-rates.js @@ -14,8 +14,9 @@ class TokenRatesController { * * @param {Object} [config] - Options to configure controller */ - constructor ({ interval = DEFAULT_INTERVAL, preferences } = {}) { + constructor ({ interval = DEFAULT_INTERVAL, currency, preferences } = {}) { this.store = new ObservableStore() + this.currency = currency this.preferences = preferences this.interval = interval } @@ -26,33 +27,24 @@ class TokenRatesController { async updateExchangeRates () { if (!this.isActive) { return } const contractExchangeRates = {} - // copy array to ensure its not modified during iteration - const tokens = this._tokens.slice() - for (const token of tokens) { - if (!token) return log.error(`TokenRatesController - invalid tokens state:\n${JSON.stringify(tokens, null, 2)}`) - const address = token.address - contractExchangeRates[address] = await this.fetchExchangeRate(address) + const nativeCurrency = this.currency ? this.currency.getState().nativeCurrency.toUpperCase() : 'ETH' + const pairs = this._tokens.map(token => `pairs[]=${token.address}/${nativeCurrency}`) + const query = pairs.join('&') + if (this._tokens.length > 0) { + try { + const response = await fetch(`https://exchanges.balanc3.net/pie?${query}&autoConversion=true`) + const { prices = [] } = await response.json() + prices.forEach(({ pair, price }) => { + contractExchangeRates[pair.split('/')[0]] = typeof price === 'number' ? price : 0 + }) + } catch (error) { + log.warn(`MetaMask - TokenRatesController exchange rate fetch failed.`, error) + } } this.store.putState({ contractExchangeRates }) } /** - * Fetches a token exchange rate by address - * - * @param {String} address - Token contract address - */ - async fetchExchangeRate (address) { - try { - const response = await fetch(`https://metamask.balanc3.net/prices?from=${address}&to=ETH&autoConversion=false&summaryOnly=true`) - const json = await response.json() - return json && json.length ? json[0].averagePrice : 0 - } catch (error) { - log.warn(`MetaMask - TokenRatesController exchange rate fetch failed for ${address}.`, error) - return 0 - } - } - - /** * @type {Number} */ set interval (interval) { |