diff options
author | Paul Bouchon <mail@bitpshr.net> | 2018-11-14 03:57:43 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-14 03:57:43 +0800 |
commit | 0549782595335e8257d1b4abf7d6220020e2c8db (patch) | |
tree | 57c439742e2f608534bd8e247c6ff1bc19dcdf5b /app/scripts | |
parent | 3866222285be74c6578c830001b4896705abdb3d (diff) | |
download | tangerine-wallet-browser-0549782595335e8257d1b4abf7d6220020e2c8db.tar.gz tangerine-wallet-browser-0549782595335e8257d1b4abf7d6220020e2c8db.tar.zst tangerine-wallet-browser-0549782595335e8257d1b4abf7d6220020e2c8db.zip |
Update Balanc3 API (#5744)
* Update balanc3 API used in TokenRatesController
* Remove demo URL and use nativeCurrency when fetching token rates
Diffstat (limited to 'app/scripts')
-rw-r--r-- | app/scripts/controllers/token-rates.js | 38 | ||||
-rw-r--r-- | app/scripts/metamask-controller.js | 1 |
2 files changed, 16 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) { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 5ae0f608d..641a7ef3f 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -117,6 +117,7 @@ module.exports = class MetamaskController extends EventEmitter { // token exchange rate tracker this.tokenRatesController = new TokenRatesController({ + currency: this.currencyController.store, preferences: this.preferencesController.store, }) |