From 285e406dcde0cc62c0bf672420f1da57e71b087b Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Tue, 18 Sep 2018 12:30:37 +0300 Subject: [PATCH] POA tokens support - including of poa-contract-metadata package --- .circleci/config.yml | 42 +++++++++---------- .nvmrc | 2 +- old-ui/app/add-token.js | 10 ++--- old-ui/lib/icon-factory.js | 1 + package-lock.json | 4 ++ package.json | 5 ++- .../token-search/token-search.component.js | 41 ++++++++++-------- ui/app/components/token-list.js | 23 ++++------ ui/lib/icon-factory.js | 1 + 9 files changed, 68 insertions(+), 61 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 64aaa2674..88a19cfbd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -96,7 +96,7 @@ workflows: jobs: prep-deps-npm: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -111,7 +111,7 @@ jobs: - node_modules prep-deps-firefox: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -126,7 +126,7 @@ jobs: prep-build: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -145,7 +145,7 @@ jobs: prep-docs: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -160,7 +160,7 @@ jobs: prep-scss: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -179,7 +179,7 @@ jobs: test-lint: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -190,7 +190,7 @@ jobs: test-deps: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -201,7 +201,7 @@ jobs: test-e2e-chrome: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -217,7 +217,7 @@ jobs: test-e2e-firefox: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -238,7 +238,7 @@ jobs: test-e2e-beta-chrome: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -254,7 +254,7 @@ jobs: test-e2e-beta-firefox: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -275,7 +275,7 @@ jobs: job-screens: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -292,7 +292,7 @@ jobs: job-publish-prerelease: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -319,7 +319,7 @@ jobs: job-publish-release: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -332,7 +332,7 @@ jobs: job-publish-postrelease: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -355,7 +355,7 @@ jobs: test-unit: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -368,7 +368,7 @@ jobs: environment: browsers: '["Firefox"]' docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -392,7 +392,7 @@ jobs: environment: browsers: '["Chrome"]' docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -411,7 +411,7 @@ jobs: environment: browsers: '["Firefox"]' docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -435,7 +435,7 @@ jobs: environment: browsers: '["Chrome"]' docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - checkout - restore_cache: @@ -452,7 +452,7 @@ jobs: all-tests-pass: docker: - - image: circleci/node:8.11.4-browsers + - image: circleci/node:8.12.0-browsers steps: - run: name: All Tests Passed diff --git a/.nvmrc b/.nvmrc index 08df4d99f..368fe859d 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v8.11.4 +v8.12.0 diff --git a/old-ui/app/add-token.js b/old-ui/app/add-token.js index ed21a5a81..e01562192 100644 --- a/old-ui/app/add-token.js +++ b/old-ui/app/add-token.js @@ -115,7 +115,8 @@ class AddTokenScreen extends Component { const { network } = this.props const networkID = parseInt(network) let views = [] - networkID === 1 ? views = [h(TabBar, { + const isProdNetwork = networkID === 1 || networkID === 99 + isProdNetwork ? views = [h(TabBar, { tabs: [ { content: 'Search', key: SEARCH_TAB }, { content: 'Custom', key: CUSTOM_TOKEN_TAB }, @@ -279,15 +280,14 @@ class AddTokenScreen extends Component { } renderTabBar () { - const props = this.props - const state = this.state - const { tokenSelectorError, selectedTokens, searchResults } = state - const { clearPendingTokens, goHome } = props + const { tokenSelectorError, selectedTokens, searchResults } = this.state + const { clearPendingTokens, goHome, network } = this.props return h('div', [ h('.add-token__search-token', [ h(TokenSearch, { onSearch: ({ results = [] }) => this.setState({ searchResults: results }), error: tokenSelectorError, + network: network }), h('.add-token__token-list', { style: { diff --git a/old-ui/lib/icon-factory.js b/old-ui/lib/icon-factory.js index 12533ca44..35568660c 100644 --- a/old-ui/lib/icon-factory.js +++ b/old-ui/lib/icon-factory.js @@ -2,6 +2,7 @@ var iconFactory const isValidAddress = require('ethereumjs-util').isValidAddress const toChecksumAddress = require('ethereumjs-util').toChecksumAddress const contractMap = require('eth-contract-metadata') +const contractMapPOA = require('poa-contract-metadata') const colors = require('../../colors') module.exports = function (jazzicon) { diff --git a/package-lock.json b/package-lock.json index 686c31651..cffa91618 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23820,6 +23820,10 @@ "integrity": "sha1-HMfCEjA6yr50Jj7DrHgAlYAkLZM=", "dev": true }, + "poa-contract-metadata": { + "version": "github:poanetwork/poa-contract-metadata#daee2eab58db1cb2aad50cd58c45374f614f029e", + "from": "github:poanetwork/poa-contract-metadata#master" + }, "pojo-migrator": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pojo-migrator/-/pojo-migrator-2.1.0.tgz", diff --git a/package.json b/package.json index e9383019d..aae6564a5 100644 --- a/package.json +++ b/package.json @@ -161,6 +161,7 @@ "percentile": "^1.2.0", "pify": "^3.0.0", "ping-pong-stream": "^1.0.0", + "poa-contract-metadata": "github:poanetwork/poa-contract-metadata#master", "pojo-migrator": "^2.1.0", "polyfill-crypto.getrandomvalues": "^1.0.0", "post-message-stream": "^3.0.0", @@ -318,7 +319,7 @@ "watchify": "^3.11.0" }, "engines": { - "node": "8.11.4", - "npm": "^6.1.0" + "node": "8.12.0", + "npm": "^6.4.1" } } diff --git a/ui/app/components/pages/add-token/token-search/token-search.component.js b/ui/app/components/pages/add-token/token-search/token-search.component.js index a24c01c52..f08263d09 100644 --- a/ui/app/components/pages/add-token/token-search/token-search.component.js +++ b/ui/app/components/pages/add-token/token-search/token-search.component.js @@ -1,26 +1,13 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' -import contractMap from 'eth-contract-metadata' +import contractMapETH from 'eth-contract-metadata' +import contractMapPOA from 'poa-contract-metadata' import Fuse from 'fuse.js' import InputAdornment from '@material-ui/core/InputAdornment' import TextField from '../../../text-field' -const contractList = Object.entries(contractMap) - .map(([ _, tokenData]) => tokenData) - .filter(tokenData => Boolean(tokenData.erc20)) - -const fuse = new Fuse(contractList, { - shouldSort: true, - threshold: 0.45, - location: 0, - distance: 100, - maxPatternLength: 32, - minMatchCharLength: 1, - keys: [ - { name: 'name', weight: 0.5 }, - { name: 'symbol', weight: 0.5 }, - ], -}) +let contractList +let fuse export default class TokenSearch extends Component { static contextTypes = { @@ -42,6 +29,26 @@ export default class TokenSearch extends Component { this.state = { searchQuery: '', } + + const networkID = parseInt(props.network) + const contractMap = networkID === 1 ? contractMapETH : contractMapPOA + + contractList = Object.entries(contractMap) + .map(([ _, tokenData]) => tokenData) + .filter(tokenData => Boolean(tokenData.erc20)) + + fuse = new Fuse(contractList, { + shouldSort: true, + threshold: 0.45, + location: 0, + distance: 100, + maxPatternLength: 32, + minMatchCharLength: 1, + keys: [ + { name: 'name', weight: 0.5 }, + { name: 'symbol', weight: 0.5 }, + ], + }) } handleSearch (searchQuery) { diff --git a/ui/app/components/token-list.js b/ui/app/components/token-list.js index 522fbeaf2..866f6f455 100644 --- a/ui/app/components/token-list.js +++ b/ui/app/components/token-list.js @@ -17,7 +17,13 @@ function mapStateToProps (state) { } const defaultTokens = [] -const contracts = require('eth-contract-metadata') +const contractsETH = require('eth-contract-metadata') +const contractsPOA = require('poa-contract-metadata') +let contracts + +// const { network } = this.props +// contracts = network === 1 ? contractsETH : contractsPOA +contracts = contractsETH for (const address in contracts) { const contract = contracts[address] if (contract.erc20) { @@ -169,17 +175,4 @@ TokenList.prototype.componentWillUnmount = function () { this.tracker.stop() this.tracker.removeListener('update', this.balanceUpdater) this.tracker.removeListener('error', this.showError) -} - -// function uniqueMergeTokens (tokensA, tokensB = []) { -// const uniqueAddresses = [] -// const result = [] -// tokensA.concat(tokensB).forEach((token) => { -// const normal = normalizeAddress(token.address) -// if (!uniqueAddresses.includes(normal)) { -// uniqueAddresses.push(normal) -// result.push(token) -// } -// }) -// return result -// } +} \ No newline at end of file diff --git a/ui/lib/icon-factory.js b/ui/lib/icon-factory.js index a1170bf4d..ebdcb78c8 100644 --- a/ui/lib/icon-factory.js +++ b/ui/lib/icon-factory.js @@ -2,6 +2,7 @@ var iconFactory const isValidAddress = require('ethereumjs-util').isValidAddress const { checksumAddress } = require('../app/util') const contractMap = require('eth-contract-metadata') +const contractMapPOA = require('poa-contract-metadata') const colors = require('../../colors') module.exports = function (jazzicon) {