From e92f3d4445c8304230dbc36730441c860b622ba5 Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Tue, 10 Sep 2019 20:05:57 +0100 Subject: [PATCH 01/41] chore: fix lint (#991) --- .../app/src/components/BalanceToken.js | 8 +++++- .../LocalIdentityBadge/LocalIdentityBadge.js | 4 ++- apps/finance/app/src/components/Transfers.js | 6 +++- apps/voting/app/src/components/VoteActions.js | 5 ++-- apps/voting/app/src/components/VoteText.js | 28 +++++++++---------- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/apps/finance/app/src/components/BalanceToken.js b/apps/finance/app/src/components/BalanceToken.js index 3ff9a44340..b337d35051 100644 --- a/apps/finance/app/src/components/BalanceToken.js +++ b/apps/finance/app/src/components/BalanceToken.js @@ -20,7 +20,13 @@ const splitAmount = amount => { ) } -const BalanceToken = ({ amount, compact, symbol, verified, convertedAmount = -1 }) => { +const BalanceToken = ({ + amount, + compact, + symbol, + verified, + convertedAmount = -1, +}) => { const theme = useTheme() return ( diff --git a/apps/finance/app/src/components/LocalIdentityBadge/LocalIdentityBadge.js b/apps/finance/app/src/components/LocalIdentityBadge/LocalIdentityBadge.js index fcaf5b34c9..c151279e6e 100644 --- a/apps/finance/app/src/components/LocalIdentityBadge/LocalIdentityBadge.js +++ b/apps/finance/app/src/components/LocalIdentityBadge/LocalIdentityBadge.js @@ -18,7 +18,9 @@ const LocalIdentityBadge = ({ entity, ...props }) => { label: , onClick: handleClick, }} - popoverTitle={label ? : undefined} + popoverTitle={ + label ? : undefined + } {...props} /> ) diff --git a/apps/finance/app/src/components/Transfers.js b/apps/finance/app/src/components/Transfers.js index ca785b7c69..66432d2e38 100644 --- a/apps/finance/app/src/components/Transfers.js +++ b/apps/finance/app/src/components/Transfers.js @@ -22,7 +22,11 @@ import { useTheme, useToast, } from '@aragon/ui' -import { useConnectedAccount, useCurrentApp, useNetwork } from '@aragon/api-react' +import { + useConnectedAccount, + useCurrentApp, + useNetwork, +} from '@aragon/api-react' import { saveAs } from 'file-saver' import * as TransferTypes from '../transfer-types' import { addressesEqual, toChecksumAddress } from '../lib/web3-utils' diff --git a/apps/voting/app/src/components/VoteActions.js b/apps/voting/app/src/components/VoteActions.js index 168c952cc9..d38bb25b13 100644 --- a/apps/voting/app/src/components/VoteActions.js +++ b/apps/voting/app/src/components/VoteActions.js @@ -223,9 +223,8 @@ const TokenReference = ({ {userBalance} {tokenSymbol} {' '} - due to the snapshot taken at block{' '} - {snapshotBlock}{' '} - at {formatDate(startDate)}.{' '} + due to the snapshot taken at block {snapshotBlock} at{' '} + {formatDate(startDate)}.{' '} {userBalance !== userBalanceNow ? ( Your current balance is{' '} diff --git a/apps/voting/app/src/components/VoteText.js b/apps/voting/app/src/components/VoteText.js index f8c8f5229e..b03a5b0d51 100644 --- a/apps/voting/app/src/components/VoteText.js +++ b/apps/voting/app/src/components/VoteText.js @@ -27,21 +27,19 @@ const VoteText = React.memo( > {text.split('\n').map((line, i) => ( - {transformAddresses( - line, - (part, isAddress, index) => - isAddress ? ( - - {' '} - {' '} - - ) : ( - {part} - ) + {transformAddresses(line, (part, isAddress, index) => + isAddress ? ( + + {' '} + {' '} + + ) : ( + {part} + ) )}
From 65df4d0122a8c9045019e3451eb9b325aab8cf5a Mon Sep 17 00:00:00 2001 From: Jorge Izquierdo Date: Wed, 11 Sep 2019 11:42:50 +0100 Subject: [PATCH 02/41] Agent: fix coming soon URL (#992) --- apps/agent/app/src/components/ComingSoon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/agent/app/src/components/ComingSoon.js b/apps/agent/app/src/components/ComingSoon.js index fb78bc78fb..3e9e67358c 100644 --- a/apps/agent/app/src/components/ComingSoon.js +++ b/apps/agent/app/src/components/ComingSoon.js @@ -47,7 +47,7 @@ function ComingSoon() { We are currently working on the full version of this app. You’ll soon be able to browse Agent interactions with other Ethereum applications from here. - Learn how you can start using it today + Learn how you can start using it today ) From 58b984d3fc2dad1b5d6925658ebd6d13b2b6b1e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Iv=C3=A1n=20Cuende?= Date: Mon, 16 Sep 2019 12:55:40 +0200 Subject: [PATCH 03/41] Fixes voting status progress being backwards (https://github.com/aragon/aragon/issues/1066) (#996) --- apps/voting/app/src/screens/VoteDetail.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/voting/app/src/screens/VoteDetail.js b/apps/voting/app/src/screens/VoteDetail.js index 1a134a99a8..ab2e7a0fa3 100644 --- a/apps/voting/app/src/screens/VoteDetail.js +++ b/apps/voting/app/src/screens/VoteDetail.js @@ -221,8 +221,8 @@ function VoteDetail({ vote, onBack, onVote, onExecute }) {
Date: Mon, 16 Sep 2019 11:57:27 +0100 Subject: [PATCH 04/41] Change Tokens app copy (#993) mint -> create tokens burn -> remove --- .../app/src/components/Panels/TokenPanelContent.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/token-manager/app/src/components/Panels/TokenPanelContent.js b/apps/token-manager/app/src/components/Panels/TokenPanelContent.js index f942e4eef6..415aa05928 100644 --- a/apps/token-manager/app/src/components/Panels/TokenPanelContent.js +++ b/apps/token-manager/app/src/components/Panels/TokenPanelContent.js @@ -166,8 +166,8 @@ class TokenPanelContent extends React.Component { title="Action" text={`This action will ${ mode === 'assign' - ? 'mint tokens to the recipient below' - : 'burn tokens from the account below' + ? 'create tokens and transfer them to the recipient below' + : 'remove tokens from the account below' }.`} /> Date: Tue, 17 Sep 2019 08:07:52 +0200 Subject: [PATCH 05/41] Memoize DataView deps (#995) * Transfers: memoize sorted transfers * Transfers: update code format * Transfers: memoize sorted transfers * Transfers: update code format * Holders: memoize holders * Transfers: remove react namespace from method Co-Authored-By: Pierre Bertet --- apps/agent/app/src/components/Transfers.js | 52 ++++++----- apps/finance/app/src/components/Transfers.js | 92 +++++++++++-------- apps/token-manager/app/src/screens/Holders.js | 9 +- 3 files changed, 89 insertions(+), 64 deletions(-) diff --git a/apps/agent/app/src/components/Transfers.js b/apps/agent/app/src/components/Transfers.js index 8ac30cc5a3..fa2314fa5a 100644 --- a/apps/agent/app/src/components/Transfers.js +++ b/apps/agent/app/src/components/Transfers.js @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react' +import React, { useMemo, useCallback } from 'react' import styled from 'styled-components' import PropTypes from 'prop-types' import { compareDesc, format } from 'date-fns' @@ -72,6 +72,14 @@ const Transfers = React.memo(({ dao, tokens, transactions }) => { dao, }) const symbols = tokens.map(({ symbol }) => symbol) + const sortedTransfers = useMemo( + () => + filteredTransfers.sort(({ date: dateLeft }, { date: dateRight }) => + // Sort by date descending + compareDesc(dateLeft, dateRight) + ), + [filteredTransfers, compareDesc] + ) return ( {
Transfers @@ -130,11 +138,7 @@ const Transfers = React.memo(({ dao, tokens, transactions }) => { { label: 'Amount', priority: 4 }, ] } - entries={filteredTransfers.sort( - ({ date: dateLeft }, { date: dateRight }) => - // Sort by date descending - compareDesc(dateLeft, dateRight) - )} + entries={sortedTransfers} renderEntryExpansion={({ tokenTransfers }) => { if (tokenTransfers.length === 1) { return @@ -216,12 +220,11 @@ const Transfers = React.memo(({ dao, tokens, transactions }) => { ` display: inline-flex; max-width: 150px; - `} - ${layoutName === 'large' && + `} ${layoutName === 'large' && ` display: inline-flex; max-width: 'unset'; - `} + `}; `} > { color: ${theme.surfaceContent}; `} > - {uniqueTokens} token{uniqueTokens > 1 ? 's' : ''} + {uniqueTokens} token + {uniqueTokens > 1 ? 's' : ''}
) } @@ -328,8 +332,7 @@ const InnerEntryColumn = styled.div` max-width: 250px; width: 250px; ` - : ''} - ${({ layoutName }) => + : ''} ${({ layoutName }) => layoutName === 'large' ? ` /* max possible length of custom label + from length + some spacing */ @@ -337,19 +340,22 @@ const InnerEntryColumn = styled.div` max-width: unset; width: unset; ` - : ''} + : ''}; ` const ContextMenuViewTransaction = ({ transactionHash, network, theme }) => { - const handleViewTransaction = useCallback(() => { - window.open( - blockExplorerUrl('transaction', transactionHash, { - networkType: network.type, - }), - '_blank', - 'noopener' - ) - }, [transactionHash, network]) + const handleViewTransaction = useCallback( + () => { + window.open( + blockExplorerUrl('transaction', transactionHash, { + networkType: network.type, + }), + '_blank', + 'noopener' + ) + }, + [transactionHash, network] + ) return ( diff --git a/apps/finance/app/src/components/Transfers.js b/apps/finance/app/src/components/Transfers.js index 66432d2e38..ebbbb1ec94 100644 --- a/apps/finance/app/src/components/Transfers.js +++ b/apps/finance/app/src/components/Transfers.js @@ -1,4 +1,4 @@ -import React, { useState, useCallback } from 'react' +import React, { useMemo, useState, useCallback } from 'react' import PropTypes from 'prop-types' import { compareDesc, @@ -151,12 +151,15 @@ const Transfers = React.memo(({ tokens, transactions }) => { }, [setPage, setSelectedTransferType] ) - const handleClearFilters = useCallback(() => { - setPage(0) - setSelectedTransferType(UNSELECTED_TRANSFER_TYPE_FILTER) - setSelectedToken(UNSELECTED_TOKEN_FILTER) - setSelectedDateRange(INITIAL_DATE_RANGE) - }, [setPage, setSelectedTransferType, setSelectedToken, setSelectedDateRange]) + const handleClearFilters = useCallback( + () => { + setPage(0) + setSelectedTransferType(UNSELECTED_TRANSFER_TYPE_FILTER) + setSelectedToken(UNSELECTED_TOKEN_FILTER) + setSelectedDateRange(INITIAL_DATE_RANGE) + }, + [setPage, setSelectedTransferType, setSelectedToken, setSelectedDateRange] + ) const filteredTransfers = getFilteredTransfers({ transactions, selectedToken: selectedToken > 0 ? tokens[selectedToken - 1] : null, @@ -166,23 +169,26 @@ const Transfers = React.memo(({ tokens, transactions }) => { const symbols = tokens.map(({ symbol }) => symbol) const tokenDetails = tokens.reduce(getTokenDetails, {}) const { resolve: resolveAddress } = React.useContext(IdentityContext) - const handleDownload = React.useCallback(async () => { - if (!currentApp || !currentApp.appAddress) { - return - } + const handleDownload = useCallback( + async () => { + if (!currentApp || !currentApp.appAddress) { + return + } - const data = await getDownloadData( - filteredTransfers, - tokenDetails, - resolveAddress - ) - const filename = getDownloadFilename( - currentApp.appAddress, - selectedDateRange - ) - saveAs(new Blob([data], { type: 'text/csv;charset=utf-8' }), filename) - toast('Transfers data exported') - }, [currentApp, filteredTransfers, tokenDetails, resolveAddress]) + const data = await getDownloadData( + filteredTransfers, + tokenDetails, + resolveAddress + ) + const filename = getDownloadFilename( + currentApp.appAddress, + selectedDateRange + ) + saveAs(new Blob([data], { type: 'text/csv;charset=utf-8' }), filename) + toast('Transfers data exported') + }, + [currentApp, filteredTransfers, tokenDetails, resolveAddress] + ) const emptyResultsViaFilters = !filteredTransfers.length && (selectedToken !== 0 || @@ -192,6 +198,15 @@ const Transfers = React.memo(({ tokens, transactions }) => { const compactMode = layoutName === 'small' + const sortedTransfers = useMemo( + () => + filteredTransfers.sort(({ date: dateLeft }, { date: dateRight }) => + // Sort by date descending + compareDesc(dateLeft, dateRight) + ), + [filteredTransfers, compareDesc] + ) + if (!transactions.length) { return } @@ -213,7 +228,7 @@ const Transfers = React.memo(({ tokens, transactions }) => {
Transfers @@ -258,11 +273,7 @@ const Transfers = React.memo(({ tokens, transactions }) => { { label: 'Amount', priority: 2 }, ] } - entries={filteredTransfers.sort( - ({ date: dateLeft }, { date: dateRight }) => - // Sort by date descending - compareDesc(dateLeft, dateRight) - )} + entries={sortedTransfers} renderEntry={({ date, entity, @@ -293,7 +304,7 @@ const Transfers = React.memo(({ tokens, transactions }) => { display: inline-flex; max-width: ${layoutName === 'large' ? 'unset' : '150px'}; ` - : ''} + : ''}; `} > { const ContextMenuViewTransaction = ({ transactionHash, network }) => { const theme = useTheme() - const handleViewTransaction = useCallback(() => { - window.open( - blockExplorerUrl('transaction', transactionHash, { - networkType: network.type, - }), - '_blank', - 'noopener' - ) - }, [transactionHash, network]) + const handleViewTransaction = useCallback( + () => { + window.open( + blockExplorerUrl('transaction', transactionHash, { + networkType: network.type, + }), + '_blank', + 'noopener' + ) + }, + [transactionHash, network] + ) return ( diff --git a/apps/token-manager/app/src/screens/Holders.js b/apps/token-manager/app/src/screens/Holders.js index 82070bd90d..5599e179e4 100644 --- a/apps/token-manager/app/src/screens/Holders.js +++ b/apps/token-manager/app/src/screens/Holders.js @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react' +import React, { useMemo, useCallback } from 'react' import PropTypes from 'prop-types' import BN from 'bn.js' import { useConnectedAccount } from '@aragon/api-react' @@ -34,13 +34,18 @@ function Holders({ tokenTransfersEnabled, }) { const connectedAccount = useConnectedAccount() + const mappedEntries = useMemo( + () => holders.map(({ address, balance }) => [address, balance]), + [holders] + ) + return ( [address, balance])} + entries={mappedEntries} renderEntry={([address, balance]) => { const isCurrentUser = addressesEqual(address, connectedAccount) From 7c1680fc47785ccf3efd6958d3c376a44cbe9f1e Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Tue, 17 Sep 2019 12:50:26 +0100 Subject: [PATCH 06/41] Voting: support external apps as target (#999) --- apps/voting/app/src/hooks/useVotes.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/voting/app/src/hooks/useVotes.js b/apps/voting/app/src/hooks/useVotes.js index 22f5ab0521..f0e47fde3a 100644 --- a/apps/voting/app/src/hooks/useVotes.js +++ b/apps/voting/app/src/hooks/useVotes.js @@ -40,6 +40,7 @@ function useDecoratedVotes() { if (!targetApp) { targetApp = { appAddress: targetAddress, + icon: () => null, name: 'External', } } @@ -47,11 +48,11 @@ function useDecoratedVotes() { let executionTargetData = {} if (targetApp) { - const { appAddress, name, identifier } = targetApp + const { appAddress, icon, identifier, name } = targetApp executionTargetData = { address: appAddress, name, - iconSrc: targetApp.icon(24), + iconSrc: icon(24), identifier, } } From e90e917693c7c1b65772e02755b69f7dc79e01b7 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Thu, 19 Sep 2019 14:24:55 +0100 Subject: [PATCH 07/41] Voting: tolerate undefined executionTargets (#1006) --- apps/voting/app/src/hooks/useVotes.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/voting/app/src/hooks/useVotes.js b/apps/voting/app/src/hooks/useVotes.js index f0e47fde3a..1aa2c76670 100644 --- a/apps/voting/app/src/hooks/useVotes.js +++ b/apps/voting/app/src/hooks/useVotes.js @@ -5,6 +5,12 @@ import { VOTE_ABSENT } from '../vote-types' import { EMPTY_ADDRESS } from '../web3-utils' import useNow from './useNow' +// Temporary fix to make sure executionTargets always returns an array, until +// we find out the reason why it can sometimes be missing in the cached data. +function getVoteExecutionTargets(vote) { + return vote.data.executionTargets || [] +} + // Decorate the votes array with more information relevant to the frontend function useDecoratedVotes() { const { votes, connectedAccountVotes } = useAppState() @@ -16,7 +22,7 @@ function useDecoratedVotes() { return [[], []] } const decoratedVotes = votes.map((vote, i) => { - const { executionTargets } = vote.data + const executionTargets = getVoteExecutionTargets(vote) let targetApp if (!executionTargets.length) { @@ -67,7 +73,9 @@ function useDecoratedVotes() { // Reduce the list of installed apps to just those that have been targetted by apps const executionTargets = installedApps .filter(app => - votes.some(vote => vote.data.executionTargets.includes(app.appAddress)) + votes.some(vote => + getVoteExecutionTargets(vote).includes(app.appAddress) + ) ) .map(({ appAddress, identifier, name }) => ({ appAddress, From c685c43a99750cb995faaa21754a23b7c7a6cd7c Mon Sep 17 00:00:00 2001 From: Gorka Ludlow Date: Thu, 3 Oct 2019 11:50:11 +0200 Subject: [PATCH 08/41] Holders: set max width on smaller screens (#1016) --- apps/token-manager/app/src/screens/Holders.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/token-manager/app/src/screens/Holders.js b/apps/token-manager/app/src/screens/Holders.js index 5599e179e4..b3f0509c06 100644 --- a/apps/token-manager/app/src/screens/Holders.js +++ b/apps/token-manager/app/src/screens/Holders.js @@ -11,6 +11,7 @@ import { IconRemove, Split, GU, + useLayout, useTheme, } from '@aragon/ui' import { formatBalance } from '../utils' @@ -33,6 +34,8 @@ function Holders({ tokenSymbol, tokenTransfersEnabled, }) { + const { layoutName } = useLayout() + const compact = layoutName === 'small' const connectedAccount = useConnectedAccount() const mappedEntries = useMemo( () => holders.map(({ address, balance }) => [address, balance]), @@ -54,6 +57,7 @@ function Holders({ css={` display: flex; align-items: center; + max-width: ${compact ? '50vw' : 'unset'}; `} > Date: Thu, 10 Oct 2019 00:43:34 +0200 Subject: [PATCH 09/41] Voting: do not display the sync indicator with the empty state (#1020) The empty state also contains a sync indicator. --- apps/voting/app/src/App.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/voting/app/src/App.js b/apps/voting/app/src/App.js index 5b3ce1bbaa..7fb1a61711 100644 --- a/apps/voting/app/src/App.js +++ b/apps/voting/app/src/App.js @@ -50,11 +50,10 @@ const App = React.memo(function App() { return ( - - {!votes.length && ( + {votes.length === 0 && (
)} - {!!votes.length && ( + {votes.length > 0 && ( +
Date: Fri, 18 Oct 2019 01:23:08 +0200 Subject: [PATCH 10/41] Voting: fix a text overflow issue with descriptions (#1021) --- apps/voting/app/src/components/AutoLink.js | 12 +++++- .../app/src/components/VoteCard/VoteCard.js | 22 +++++------ apps/voting/app/src/components/VoteText.js | 37 ++++++++++++------- apps/voting/app/src/screens/VoteDetail.js | 9 ++--- 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/apps/voting/app/src/components/AutoLink.js b/apps/voting/app/src/components/AutoLink.js index db4884d733..b89ea717b8 100644 --- a/apps/voting/app/src/components/AutoLink.js +++ b/apps/voting/app/src/components/AutoLink.js @@ -2,8 +2,18 @@ import React from 'react' import Linkify from 'react-linkify' import { Link } from '@aragon/ui' +const InlineLink = props => ( + +) + const AutoLink = ({ children }) => ( - {children} + {children} ) export default AutoLink diff --git a/apps/voting/app/src/components/VoteCard/VoteCard.js b/apps/voting/app/src/components/VoteCard/VoteCard.js index 7272952843..a9d6443a76 100644 --- a/apps/voting/app/src/components/VoteCard/VoteCard.js +++ b/apps/voting/app/src/components/VoteCard/VoteCard.js @@ -81,8 +81,8 @@ const VoteCard = ({ vote, onOpen }) => { display: inline-flex; align-items: center; justify-content: center; - width: 20px; - height: 20px; + width: ${2.5 * GU}px; + height: ${2.5 * GU}px; border-radius: 50%; background: ${theme.infoSurface.alpha(0.08)}; color: ${theme.info}; @@ -92,21 +92,21 @@ const VoteCard = ({ vote, onOpen }) => {
)} -
#{voteId}: } + text={description || metadata} + title={`#${voteId}: ${description || metadata}`} css={` + overflow: hidden; ${textStyle('body1')}; - /* lines per font size per line height */ - /* shorter texts align to the top */ - height: 84px; + line-height: ${27}px; // 27px = line-height of textstyle('body1') + height: ${27 * 3}px; // 27px * 3 = line-height * 3 lines display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; - overflow: hidden; `} - > - #{voteId}:{' '} - -
+ />
{ + function VoteText({ disabled, text, prefix, ...props }) { // If there is no text, the component doesn’t render anything. if (!text.trim()) { return null } + const TextComponent = disabled ? 'span' : AutoLink return ( - - +
+ {prefix} + {text.split('\n').map((line, i) => ( + {i > 0 &&
} {transformAddresses(line, (part, isAddress, index) => isAddress ? ( @@ -41,11 +46,10 @@ const VoteText = React.memo( {part} ) )} -
))} - -
+ +
) }, (prevProps, nextProps) => prevProps.text === nextProps.text @@ -54,6 +58,11 @@ const VoteText = React.memo( VoteText.propTypes = { disabled: PropTypes.bool, text: PropTypes.string, + prefix: PropTypes.node, +} + +VoteText.defaultProps = { + text: '', } export default VoteText diff --git a/apps/voting/app/src/screens/VoteDetail.js b/apps/voting/app/src/screens/VoteDetail.js index ab2e7a0fa3..c894444c4d 100644 --- a/apps/voting/app/src/screens/VoteDetail.js +++ b/apps/voting/app/src/screens/VoteDetail.js @@ -129,15 +129,12 @@ function VoteDetail({ vote, onBack, onVote, onExecute }) { > Description -
- -
+ />

Date: Thu, 24 Oct 2019 02:10:55 +0200 Subject: [PATCH 11/41] Voting: specify which newVote() override to use (#1025) --- apps/voting/app/src/App.js | 1 - apps/voting/app/src/app-logic.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/voting/app/src/App.js b/apps/voting/app/src/App.js index 7fb1a61711..b0463cad38 100644 --- a/apps/voting/app/src/App.js +++ b/apps/voting/app/src/App.js @@ -5,7 +5,6 @@ import { IconPlus, Main, SyncIndicator, - GU, useLayout, } from '@aragon/ui' import NewVotePanel from './components/NewVotePanel' diff --git a/apps/voting/app/src/app-logic.js b/apps/voting/app/src/app-logic.js index 0f4b441946..53b017ba9a 100644 --- a/apps/voting/app/src/app-logic.js +++ b/apps/voting/app/src/app-logic.js @@ -39,7 +39,7 @@ export function useCreateVoteAction(onDone = noop) { question => { if (api) { // Don't care about response - api.newVote(EMPTY_CALLSCRIPT, question).toPromise() + api['newVote(bytes,string)'](EMPTY_CALLSCRIPT, question).toPromise() onDone() } }, From 28594d03e8a952b5db2b86d9ccf79e6eeb7d7475 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Thu, 24 Oct 2019 02:49:14 +0200 Subject: [PATCH 12/41] Voting: fix a crash that was happening in certain cases (#1012) * Ensure icon() only gets called when it exists * Voting: log warning message if no executionTargets exist * Voting: simplify logic for finding execution target's icon * Voting: avoid showing execution target app badge if not available --- .../app/src/components/VoteCard/VoteCard.js | 16 ++++++++------ apps/voting/app/src/hooks/useVotes.js | 22 +++++++++---------- apps/voting/app/src/screens/VoteDetail.js | 14 +++++++----- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/apps/voting/app/src/components/VoteCard/VoteCard.js b/apps/voting/app/src/components/VoteCard/VoteCard.js index a9d6443a76..a0743308d4 100644 --- a/apps/voting/app/src/components/VoteCard/VoteCard.js +++ b/apps/voting/app/src/components/VoteCard/VoteCard.js @@ -68,13 +68,15 @@ const VoteCard = ({ vote, onOpen }) => { margin-bottom: ${1 * GU}px; `} > - + {executionTargetData && ( + + )} {youVoted && (
{ - const executionTargets = getVoteExecutionTargets(vote) + const executionTargets = vote.data.executionTargets let targetApp - if (!executionTargets.length) { + if (!executionTargets) { + console.warn( + `Voting: vote #${vote.voteId} does not list any execution targets. The app's cache is likely corrupted and needs to be reset.` + ) + } else if (!executionTargets.length) { // If there's no execution target, consider it targetting this Voting app targetApp = { ...currentApp, @@ -46,19 +44,19 @@ function useDecoratedVotes() { if (!targetApp) { targetApp = { appAddress: targetAddress, - icon: () => null, name: 'External', } } } - let executionTargetData = {} + let executionTargetData = null if (targetApp) { const { appAddress, icon, identifier, name } = targetApp executionTargetData = { address: appAddress, name, - iconSrc: icon(24), + // Only try to get the icon if it's available + iconSrc: typeof icon === 'function' ? icon(24) : null, identifier, } } @@ -74,7 +72,7 @@ function useDecoratedVotes() { const executionTargets = installedApps .filter(app => votes.some(vote => - getVoteExecutionTargets(vote).includes(app.appAddress) + (vote.data.executionTargets || []).includes(app.appAddress) ) ) .map(({ appAddress, identifier, name }) => ({ diff --git a/apps/voting/app/src/screens/VoteDetail.js b/apps/voting/app/src/screens/VoteDetail.js index c894444c4d..974b79e50c 100644 --- a/apps/voting/app/src/screens/VoteDetail.js +++ b/apps/voting/app/src/screens/VoteDetail.js @@ -85,12 +85,14 @@ function VoteDetail({ vote, onBack, onVote, onExecute }) { justify-content: space-between; `} > - + {executionTargetData && ( + + )} {youVoted && ( } label="Voted" /> )} From 52243a90a9226ef3b40bd7ee28fb852f69155df1 Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Thu, 24 Oct 2019 03:00:55 +0200 Subject: [PATCH 13/41] Finance, Tokens, Voting: guard accesses to network.type (#1026) --- apps/finance/app/src/components/Transfers.js | 68 ++++++++----------- .../app/src/components/InfoBoxes.js | 2 +- apps/voting/app/src/screens/VoteDetail.js | 2 +- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/apps/finance/app/src/components/Transfers.js b/apps/finance/app/src/components/Transfers.js index ebbbb1ec94..ec2a5d63d7 100644 --- a/apps/finance/app/src/components/Transfers.js +++ b/apps/finance/app/src/components/Transfers.js @@ -122,7 +122,6 @@ const getDownloadFilename = (appAddress, { start, end }) => { const Transfers = React.memo(({ tokens, transactions }) => { const connectedAccount = useConnectedAccount() const currentApp = useCurrentApp() - const network = useNetwork() const toast = useToast() const theme = useTheme() const { layoutName } = useLayout() @@ -151,15 +150,12 @@ const Transfers = React.memo(({ tokens, transactions }) => { }, [setPage, setSelectedTransferType] ) - const handleClearFilters = useCallback( - () => { - setPage(0) - setSelectedTransferType(UNSELECTED_TRANSFER_TYPE_FILTER) - setSelectedToken(UNSELECTED_TOKEN_FILTER) - setSelectedDateRange(INITIAL_DATE_RANGE) - }, - [setPage, setSelectedTransferType, setSelectedToken, setSelectedDateRange] - ) + const handleClearFilters = useCallback(() => { + setPage(0) + setSelectedTransferType(UNSELECTED_TRANSFER_TYPE_FILTER) + setSelectedToken(UNSELECTED_TOKEN_FILTER) + setSelectedDateRange(INITIAL_DATE_RANGE) + }, [setPage, setSelectedTransferType, setSelectedToken, setSelectedDateRange]) const filteredTransfers = getFilteredTransfers({ transactions, selectedToken: selectedToken > 0 ? tokens[selectedToken - 1] : null, @@ -169,26 +165,23 @@ const Transfers = React.memo(({ tokens, transactions }) => { const symbols = tokens.map(({ symbol }) => symbol) const tokenDetails = tokens.reduce(getTokenDetails, {}) const { resolve: resolveAddress } = React.useContext(IdentityContext) - const handleDownload = useCallback( - async () => { - if (!currentApp || !currentApp.appAddress) { - return - } + const handleDownload = useCallback(async () => { + if (!currentApp || !currentApp.appAddress) { + return + } - const data = await getDownloadData( - filteredTransfers, - tokenDetails, - resolveAddress - ) - const filename = getDownloadFilename( - currentApp.appAddress, - selectedDateRange - ) - saveAs(new Blob([data], { type: 'text/csv;charset=utf-8' }), filename) - toast('Transfers data exported') - }, - [currentApp, filteredTransfers, tokenDetails, resolveAddress] - ) + const data = await getDownloadData( + filteredTransfers, + tokenDetails, + resolveAddress + ) + const filename = getDownloadFilename( + currentApp.appAddress, + selectedDateRange + ) + saveAs(new Blob([data], { type: 'text/csv;charset=utf-8' }), filename) + toast('Transfers data exported') + }, [currentApp, filteredTransfers, tokenDetails, resolveAddress]) const emptyResultsViaFilters = !filteredTransfers.length && (selectedToken !== 0 || @@ -331,10 +324,7 @@ const Transfers = React.memo(({ tokens, transactions }) => { }} renderEntryActions={({ entity, transactionHash }) => ( - + )} @@ -370,10 +360,11 @@ const ContextMenuItemCustomLabel = ({ entity }) => { ) } -const ContextMenuViewTransaction = ({ transactionHash, network }) => { +const ContextMenuViewTransaction = ({ transactionHash }) => { const theme = useTheme() - const handleViewTransaction = useCallback( - () => { + const network = useNetwork() + const handleViewTransaction = useCallback(() => { + if (network && network.type) { window.open( blockExplorerUrl('transaction', transactionHash, { networkType: network.type, @@ -381,9 +372,8 @@ const ContextMenuViewTransaction = ({ transactionHash, network }) => { '_blank', 'noopener' ) - }, - [transactionHash, network] - ) + } + }, [transactionHash, network]) return ( diff --git a/apps/token-manager/app/src/components/InfoBoxes.js b/apps/token-manager/app/src/components/InfoBoxes.js index 62569d8828..03a170729a 100644 --- a/apps/token-manager/app/src/components/InfoBoxes.js +++ b/apps/token-manager/app/src/components/InfoBoxes.js @@ -62,7 +62,7 @@ function InfoBoxes({ address={tokenAddress} name={tokenName} symbol={tokenSymbol} - networkType={network.type} + networkType={network && network.type} />, ], ].map(([label, content], index) => ( diff --git a/apps/voting/app/src/screens/VoteDetail.js b/apps/voting/app/src/screens/VoteDetail.js index 974b79e50c..791d6b9ac0 100644 --- a/apps/voting/app/src/screens/VoteDetail.js +++ b/apps/voting/app/src/screens/VoteDetail.js @@ -298,7 +298,7 @@ function Status({ vote }) { {executionTransaction && (
Date: Thu, 24 Oct 2019 17:58:36 -0400 Subject: [PATCH 14/41] TokenManager: fix initialize()'s radspec for transferability (#1027) --- apps/token-manager/contracts/TokenManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/token-manager/contracts/TokenManager.sol b/apps/token-manager/contracts/TokenManager.sol index 7ddcf173ed..f96dd51653 100644 --- a/apps/token-manager/contracts/TokenManager.sol +++ b/apps/token-manager/contracts/TokenManager.sol @@ -71,7 +71,7 @@ contract TokenManager is ITokenController, IForwarder, AragonApp { } /** - * @notice Initialize Token Manager for `_token.symbol(): string`, whose tokens are `_transferable ? 'not' : ''` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''` + * @notice Initialize Token Manager for `_token.symbol(): string`, whose tokens are `_transferable ? '' : 'not'` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''` * @param _token MiniMeToken address for the managed token (Token Manager instance must be already set as the token controller) * @param _transferable whether the token can be transferred by holders * @param _maxAccountTokens Maximum amount of tokens an account can have (0 for infinite tokens) From 2e30be67e85bb823bb5c3d44c2badb83444a6923 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Mon, 4 Nov 2019 16:29:26 +0100 Subject: [PATCH 15/41] Tokens: fix the text overflow in the header (#1031) --- apps/token-manager/app/src/App.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/token-manager/app/src/App.js b/apps/token-manager/app/src/App.js index 50e38336be..e13054fab8 100644 --- a/apps/token-manager/app/src/App.js +++ b/apps/token-manager/app/src/App.js @@ -129,6 +129,8 @@ class App extends React.PureComponent { css={` display: flex; align-items: center; + flex: 1 1 auto; + width: 0; `} >

Tokens

- {tokenSymbol && {tokenSymbol}} +
+ {tokenSymbol && {tokenSymbol}} +
} secondary={ From 51260c12232018021970b9a0e2cb563fdc0e7663 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Fri, 8 Nov 2019 18:03:44 +0100 Subject: [PATCH 16/41] Voting: app paths (#1029) --- apps/voting/app/package.json | 4 +-- apps/voting/app/src/App.js | 2 ++ apps/voting/app/src/app-logic.js | 42 +++++++++++++++++++++----------- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/apps/voting/app/package.json b/apps/voting/app/package.json index 39db778687..8d89b2e76c 100644 --- a/apps/voting/app/package.json +++ b/apps/voting/app/package.json @@ -4,8 +4,8 @@ "private": true, "license": "AGPL-3.0-or-later", "dependencies": { - "@aragon/api": "^2.0.0-beta.6", - "@aragon/api-react": "^2.0.0-beta.6", + "@aragon/api": "^2.0.0-beta.8", + "@aragon/api-react": "^2.0.0-beta.8", "@aragon/ui": "^1.0.0-alpha.23", "bn.js": "^4.11.8", "date-fns": "2.0.0-alpha.22", diff --git a/apps/voting/app/src/App.js b/apps/voting/app/src/App.js index b0463cad38..c69f1156ed 100644 --- a/apps/voting/app/src/App.js +++ b/apps/voting/app/src/App.js @@ -27,9 +27,11 @@ const App = React.memo(function App() { selectVote, votes, } = useAppLogic() + const { layoutName } = useLayout() const compactMode = layoutName === 'small' const handleBack = useCallback(() => selectVote(-1), [selectVote]) + const { filteredVotes, voteStatusFilter, diff --git a/apps/voting/app/src/app-logic.js b/apps/voting/app/src/app-logic.js index 53b017ba9a..611fc1f488 100644 --- a/apps/voting/app/src/app-logic.js +++ b/apps/voting/app/src/app-logic.js @@ -1,5 +1,5 @@ import React, { useCallback, useMemo, useState } from 'react' -import { AragonApi, useApi, useAppState } from '@aragon/api-react' +import { AragonApi, useApi, useAppState, usePath } from '@aragon/api-react' import appStateReducer from './app-state-reducer' import { EMPTY_CALLSCRIPT } from './evmscript-utils' import usePanelState from './hooks/usePanelState' @@ -7,29 +7,43 @@ import useVotes from './hooks/useVotes' import { noop } from './utils' import { VOTE_YEA } from './vote-types' +const VOTE_ID_PATH_RE = /^\/vote\/([0-9]+)\/?$/ +const NO_VOTE_ID = '-1' + +function voteIdFromPath(path) { + if (!path) { + return NO_VOTE_ID + } + const matches = path.match(VOTE_ID_PATH_RE) + return matches ? matches[1] : NO_VOTE_ID +} + // Get the vote currently selected, or null otherwise. export function useSelectedVote(votes) { - const [selectedVoteId, setSelectedVoteId] = useState('-1') + const [path, requestPath] = usePath() const { ready } = useAppState() // The memoized vote currently selected. const selectedVote = useMemo(() => { - // The `ready` check prevents a vote to be selected - // until the app state is fully ready. - if (!ready || selectedVoteId === '-1') { + const voteId = voteIdFromPath(path) + + // The `ready` check prevents a vote to be + // selected until the app state is fully ready. + if (!ready || voteId === NO_VOTE_ID) { return null } - return votes.find(vote => vote.voteId === selectedVoteId) || null - }, [selectedVoteId, votes, ready]) - return [ - selectedVote, + return votes.find(vote => vote.voteId === voteId) || null + }, [path, ready, votes]) + + const selectVote = useCallback( + voteId => { + requestPath(String(voteId) === NO_VOTE_ID ? '' : `/vote/${voteId}/`) + }, + [requestPath] + ) - // setSelectedVoteId() is exported directly: since `selectedVoteId` is - // set in the `selectedVote` dependencies, it means that the useMemo() - // will be updated every time `selectedVoteId` changes. - setSelectedVoteId, - ] + return [selectedVote, selectVote] } // Create a new vote From e3105a8b2abdda31db0bcace478a0c484a168149 Mon Sep 17 00:00:00 2001 From: Gorka Ludlow Date: Tue, 12 Nov 2019 16:54:43 +0100 Subject: [PATCH 17/41] VoteCard: add animation to you voted info (#1019) --- .../app/src/components/VoteCard/VoteCard.js | 52 ++++++++------- .../src/components/VoteCard/VotedIndicator.js | 63 +++++++++++++++++++ 2 files changed, 88 insertions(+), 27 deletions(-) create mode 100644 apps/voting/app/src/components/VoteCard/VotedIndicator.js diff --git a/apps/voting/app/src/components/VoteCard/VoteCard.js b/apps/voting/app/src/components/VoteCard/VoteCard.js index a0743308d4..c87d6781af 100644 --- a/apps/voting/app/src/components/VoteCard/VoteCard.js +++ b/apps/voting/app/src/components/VoteCard/VoteCard.js @@ -1,15 +1,15 @@ -import React, { useCallback, useMemo } from 'react' -import styled from 'styled-components' -import { Card, GU, IconCheck, Timer, textStyle, useTheme } from '@aragon/ui' +import React, { useState, useCallback, useMemo } from 'react' +import { Card, GU, Timer, textStyle, useTheme } from '@aragon/ui' import { noop } from '../../utils' import { VOTE_YEA, VOTE_NAY } from '../../vote-types' import LocalLabelAppBadge from '..//LocalIdentityBadge/LocalLabelAppBadge' import VoteOptions from './VoteOptions' +import VotedIndicator from './VotedIndicator' import VoteStatus from '../VoteStatus' import VoteText from '../VoteText' import You from '../You' -const VoteCard = ({ vote, onOpen }) => { +function VoteCard({ vote, onOpen }) { const theme = useTheme() const { connectedAccountVote, @@ -44,15 +44,21 @@ const VoteCard = ({ vote, onOpen }) => { ], [yea, nay, theme, connectedAccountVote] ) - const youVoted = + const hasConnectedAccountVoted = connectedAccountVote === VOTE_YEA || connectedAccountVote === VOTE_NAY + const handleOpen = useCallback(() => { onOpen(voteId) }, [voteId, onOpen]) + // “highlighted” means either focused or hovered + const [highlighted, setHighlighted] = useState(false) + return ( setHighlighted(true)} + onMouseLeave={() => setHighlighted(false)} css={` display: grid; grid-template-columns: 100%; @@ -77,22 +83,7 @@ const VoteCard = ({ vote, onOpen }) => { label={executionTargetData.name} /> )} - {youVoted && ( -
- -
- )} + {hasConnectedAccountVoted && }
+ ) +} export default VoteCard diff --git a/apps/voting/app/src/components/VoteCard/VotedIndicator.js b/apps/voting/app/src/components/VoteCard/VotedIndicator.js new file mode 100644 index 0000000000..c55d6aeebd --- /dev/null +++ b/apps/voting/app/src/components/VoteCard/VotedIndicator.js @@ -0,0 +1,63 @@ +import React from 'react' +import { useTheme, IconCheck, GU, textStyle, springs } from '@aragon/ui' +import { Spring } from 'react-spring' + +const VotedIndicator = React.memo(function VotedIndicator({ expand }) { + const theme = useTheme() + return ( + + {({ width, opacity }) => ( +
+
+ +
+
+ voted +
+
+ )} +
+ ) +}) + +export default VotedIndicator From 0b1a4213f3953ac2e99866bee382ff8ca1ca3534 Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Fri, 15 Nov 2019 15:53:11 +0100 Subject: [PATCH 18/41] Agent: fix radspec for execute with value (#1037) --- apps/agent/contracts/Agent.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/agent/contracts/Agent.sol b/apps/agent/contracts/Agent.sol index cd10e00f5c..455fe93ab3 100644 --- a/apps/agent/contracts/Agent.sol +++ b/apps/agent/contracts/Agent.sol @@ -58,7 +58,7 @@ contract Agent is IERC165, ERC1271Bytes, IForwarder, IsContract, Vault { event SetDesignatedSigner(address indexed sender, address indexed oldSigner, address indexed newSigner); /** - * @notice Execute '`@radspec(_target, _data)`' on `_target``_ethValue == 0 ? '' : ' (Sending' + @tokenAmount(0x0000000000000000000000000000000000000000, _ethValue) + ')'` + * @notice Execute '`@radspec(_target, _data)`' on `_target``_ethValue == 0 ? '' : ' (Sending ' + @tokenAmount(0x0000000000000000000000000000000000000000, _ethValue) + ')'` * @param _target Address where the action is being executed * @param _ethValue Amount of ETH from the contract that is sent with the action * @param _data Calldata for the action @@ -86,7 +86,7 @@ contract Agent is IERC165, ERC1271Bytes, IForwarder, IsContract, Vault { } /** - * @notice Execute '`@radspec(_target, _data)`' on `_target` ensuring that protected tokens can't be spent + * @notice Execute '`@radspec(_target, _data)`' on `_target`, ensuring that protected tokens can't be spent * @param _target Address where the action is being executed * @param _data Calldata for the action * @return Exits call frame forwarding the return data of the executed call (either error or success data) From 34884c3026bb25eff2eee017ef817253412ac505 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Fri, 22 Nov 2019 01:04:11 +0100 Subject: [PATCH 19/41] Agent: update aragonUI to 1.0.0 (#1044) --- apps/agent/app/package.json | 2 +- apps/agent/app/src/components/TransfersFilters.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/agent/app/package.json b/apps/agent/app/package.json index f2945375e4..37a20fdc12 100644 --- a/apps/agent/app/package.json +++ b/apps/agent/app/package.json @@ -7,7 +7,7 @@ "@aragon/api": "^2.0.0-beta.6", "@aragon/api-react": "^2.0.0-beta.6", "@aragon/templates-tokens": "^1.2.0", - "@aragon/ui": "^1.0.0-alpha.23", + "@aragon/ui": "^1.0.0", "@babel/polyfill": "^7.0.0", "date-fns": "2.0.0-alpha.22", "file-saver": "^2.0.2", diff --git a/apps/agent/app/src/components/TransfersFilters.js b/apps/agent/app/src/components/TransfersFilters.js index 3980f1b4ea..fa0479085a 100644 --- a/apps/agent/app/src/components/TransfersFilters.js +++ b/apps/agent/app/src/components/TransfersFilters.js @@ -1,5 +1,5 @@ import React from 'react' -import { _DateRange as DateRange, DropDown, GU } from '@aragon/ui' +import { DateRangePicker, DropDown, GU } from '@aragon/ui' const TransfersFilters = ({ compactMode, @@ -37,7 +37,7 @@ const TransfersFilters = ({ onChange={onTokenChange} />

diff --git a/apps/finance/app/src/components/ToggleContent.js b/apps/finance/app/src/components/ToggleContent.js index 5d2032d983..059932ee10 100644 --- a/apps/finance/app/src/components/ToggleContent.js +++ b/apps/finance/app/src/components/ToggleContent.js @@ -1,6 +1,6 @@ import React from 'react' import styled from 'styled-components' -import { font, springs } from '@aragon/ui' +import { springs, GU } from '@aragon/ui' import { Transition, animated } from 'react-spring' import arrow from './assets/arrow.svg' @@ -37,13 +37,13 @@ class ToggleContent extends React.Component { const Label = styled.button.attrs({ type: 'button' })` cursor: pointer; - ${font({ weight: 'bold' })}; + font-weight: 600; background: none; border: 0; outline: 0; padding: 0; img { - margin-left: 10px; + margin-left: ${1 * GU}px; } ` const Content = styled(animated.div)` diff --git a/apps/finance/app/src/components/Transfers.js b/apps/finance/app/src/components/Transfers.js index ec2a5d63d7..38315b244b 100644 --- a/apps/finance/app/src/components/Transfers.js +++ b/apps/finance/app/src/components/Transfers.js @@ -32,7 +32,6 @@ import * as TransferTypes from '../transfer-types' import { addressesEqual, toChecksumAddress } from '../lib/web3-utils' import { formatTokenAmount } from '../lib/utils' import TransfersFilters from './TransfersFilters' -import EmptyFilteredTransfers from './EmptyFilteredTransfers' import EmptyTransactions from './EmptyTransactions' import { useIdentity, IdentityContext } from './IdentityManager/IdentityManager' import LocalIdentityBadge from './LocalIdentityBadge/LocalIdentityBadge' @@ -206,8 +205,10 @@ const Transfers = React.memo(({ tokens, transactions }) => { return (
{ transferTypes={TRANSFER_TYPES_STRING} /> )} - {emptyResultsViaFilters && ( - - )} } - fields={ - emptyResultsViaFilters - ? [] - : [ - { label: 'Date', priority: 2 }, - { label: 'Source/recipient', priority: 3 }, - { label: 'Reference', priority: 1 }, - { label: 'Amount', priority: 2 }, - ] - } + fields={[ + { label: 'Date', priority: 2 }, + { label: 'Source/recipient', priority: 3 }, + { label: 'Reference', priority: 1 }, + { label: 'Amount', priority: 2 }, + ]} entries={sortedTransfers} renderEntry={({ date, From cae0988eaa32fbe05d331fa10da3fdda38554aea Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Sat, 23 Nov 2019 12:32:45 +0100 Subject: [PATCH 25/41] Finance: MCD DAI migration (#1048) * Finance, Tokens: update verified tokens * Finance: upgrade to MCD DAI and use tokenIconUrl() for token icons * Finance: only show token icons on test networks for known test tokens --- .../app/src/components/BalanceToken.js | 8 +- apps/finance/app/src/components/Balances.js | 1 + .../app/src/components/NewTransfer/Deposit.js | 46 ++- .../components/NewTransfer/TokenSelector.js | 2 +- .../NewTransfer/TokenSelectorInstance.js | 93 ++--- apps/finance/app/src/lib/icon-utils.js | 19 + apps/finance/app/src/lib/token-utils.js | 26 +- apps/finance/app/src/lib/verified-tokens.js | 324 ++++++++++++++---- apps/finance/app/src/script.js | 45 ++- apps/token-manager/app/src/verified-tokens.js | 324 ++++++++++++++---- 10 files changed, 643 insertions(+), 245 deletions(-) create mode 100644 apps/finance/app/src/lib/icon-utils.js diff --git a/apps/finance/app/src/components/BalanceToken.js b/apps/finance/app/src/components/BalanceToken.js index b337d35051..fc5a532da9 100644 --- a/apps/finance/app/src/components/BalanceToken.js +++ b/apps/finance/app/src/components/BalanceToken.js @@ -1,5 +1,7 @@ import React from 'react' import { GU, textStyle, useTheme } from '@aragon/ui' +import { useNetwork } from '@aragon/api-react' +import { tokenIconUrl } from '../lib/icon-utils' import { formatTokenAmount } from '../lib/utils' const splitAmount = amount => { @@ -21,6 +23,7 @@ const splitAmount = amount => { } const BalanceToken = ({ + address, amount, compact, symbol, @@ -28,6 +31,7 @@ const BalanceToken = ({ convertedAmount = -1, }) => { const theme = useTheme() + const network = useNetwork() return (
@@ -41,12 +45,12 @@ const BalanceToken = ({ text-transform: uppercase; `} > - {verified && symbol && ( + {verified && address && ( '-1') - const decimalsFallback = - tokenDataFallback(address, 'decimals', network.type) || '0' - const symbolFallback = - tokenDataFallback(address, 'symbol', network.type) || '' - - const tokenData = { - userBalance, - decimals: parseInt(decimalsFallback, 10), - loading: false, - symbol: symbolFallback, + const fetchSymbol = async () => { + const override = tokenDataOverride(address, 'symbol', network.type) + return override || getTokenSymbol(api, address).catch(() => '') + } + const fetchDecimals = async () => { + const override = tokenDataOverride(address, 'decimals', network.type) + const decimals = + override || + (await token + .decimals() + .toPromise() + .catch(() => '0')) + return parseInt(decimals, 10) } const [tokenSymbol, tokenDecimals] = await Promise.all([ - getTokenSymbol(api, address).catch(() => ''), - token - .decimals() - .toPromise() - .then(decimals => parseInt(decimals, 10)) - .catch(() => ''), + fetchSymbol(), + fetchDecimals(), ]) - // If symbol or decimals are resolved, overwrite the fallbacks - if (tokenSymbol) { - tokenData.symbol = tokenSymbol - } - if (tokenDecimals) { - tokenData.decimals = tokenDecimals + return { + userBalance, + decimals: tokenDecimals, + loading: false, + symbol: tokenSymbol, } - - return tokenData } validateInputs({ amount, selectedToken } = {}) { if ( diff --git a/apps/finance/app/src/components/NewTransfer/TokenSelector.js b/apps/finance/app/src/components/NewTransfer/TokenSelector.js index 6621d6b203..c5e3a48633 100644 --- a/apps/finance/app/src/components/NewTransfer/TokenSelector.js +++ b/apps/finance/app/src/components/NewTransfer/TokenSelector.js @@ -40,7 +40,7 @@ class TokenSelector extends React.Component { // Use the verified token address if provided a symbol and it matches // The symbols in the verified map are all capitalized const resolvedAddress = - !isAddress(value) && network.type === 'main' + !isAddress(value) && network && network.type === 'main' ? ETHER_TOKEN_VERIFIED_BY_SYMBOL.get(value.toUpperCase()) || '' : value diff --git a/apps/finance/app/src/components/NewTransfer/TokenSelectorInstance.js b/apps/finance/app/src/components/NewTransfer/TokenSelectorInstance.js index b826efa78b..a7a7d713d6 100644 --- a/apps/finance/app/src/components/NewTransfer/TokenSelectorInstance.js +++ b/apps/finance/app/src/components/NewTransfer/TokenSelectorInstance.js @@ -1,52 +1,65 @@ import React from 'react' import styled from 'styled-components' import { GU } from '@aragon/ui' +import { useNetwork } from '@aragon/api-react' import LocalIdentityBadge from '../LocalIdentityBadge/LocalIdentityBadge' +import { tokenIconUrl } from '../../lib/icon-utils' import { ETHER_TOKEN_FAKE_ADDRESS } from '../../lib/token-utils' import { addressesEqual } from '../../lib/web3-utils' -class TokenSelectorInstance extends React.PureComponent { - render() { - const { address, name, symbol, showIcon = true } = this.props - return ( -
- {showIcon ? ( - - ) : ( - - )} - {symbol && {symbol}} - {name && ({name})} - {!addressesEqual(address, ETHER_TOKEN_FAKE_ADDRESS) && ( - - )} -
- ) - } -} - -const Main = styled.div` - display: flex; - align-items: center; -` +const TokenSelectorInstance = React.memo(function TokenSelectorInstance({ + address, + name, + symbol, + showIcon = true, +}) { + const network = useNetwork() + return ( +
+ {showIcon ? ( + + ) : ( +
+ )} + {symbol && ( + + {symbol} + + )} + {name && ( + + ({name}) + + )} + {!addressesEqual(address, ETHER_TOKEN_FAKE_ADDRESS) && ( + + )} +
+ ) +}) const Icon = styled.img.attrs({ alt: '', width: '16', height: '16' })` margin-right: ${1 * GU}px; ` -const IconSpacer = styled.div` - width: ${3 * GU}px; -` - -const TokenName = styled.span` - max-width: 110px; - margin-right: ${1 * GU}px; - overflow: hidden; - text-overflow: ellipsis; -` - -const TokenSymbol = styled.span` - margin-right: ${1 * GU}px; -` - -export default TokenSelectorInstance +export default React.memo(TokenSelectorInstance) diff --git a/apps/finance/app/src/lib/icon-utils.js b/apps/finance/app/src/lib/icon-utils.js new file mode 100644 index 0000000000..2bd50607af --- /dev/null +++ b/apps/finance/app/src/lib/icon-utils.js @@ -0,0 +1,19 @@ +import { tokenIconUrl as _tokenIconUrl } from '@aragon/ui' +import { getTestTokenAddresses } from '../testnet' +import { ETHER_TOKEN_VERIFIED_BY_SYMBOL } from './verified-tokens' + +// Small shim on top of @aragon/ui's tokenIconUrl, to handle our testnet tokens +export const tokenIconUrl = (tokenAddress, tokenSymbol, networkType) => { + if (networkType === 'main') { + return _tokenIconUrl(tokenAddress) + } + + // On other networks, only pretend known test tokens are legit + const testTokens = new Set(getTestTokenAddresses(networkType)) + if (testTokens.has(tokenAddress.toLowerCase())) { + const mainnetEquivalent = ETHER_TOKEN_VERIFIED_BY_SYMBOL.get(tokenSymbol) + return mainnetEquivalent ? _tokenIconUrl(mainnetEquivalent) : '' + } + + return '' +} diff --git a/apps/finance/app/src/lib/token-utils.js b/apps/finance/app/src/lib/token-utils.js index 9097b548cf..e8c0125b01 100644 --- a/apps/finance/app/src/lib/token-utils.js +++ b/apps/finance/app/src/lib/token-utils.js @@ -5,8 +5,9 @@ import tokenSymbolBytesAbi from '../abi/token-symbol-bytes.json' import tokenNameAbi from '../abi/token-name.json' import tokenNameBytesAbi from '../abi/token-name-bytes.json' -const ANT_MAINNET_TOKEN_ADDRESS = '0x960b236A07cf122663c4303350609A66A7B288C0' -const DAI_MAINNET_TOKEN_ADDRESS = '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359' +const ANT_MAINNET_TOKEN_ADDRESS = '0x960b236a07cf122663c4303350609a66a7b288c0' +const DAI_MAINNET_TOKEN_ADDRESS = '0x6b175474e89094c44da98b954eedeac495271d0f' +const SAI_MAINNET_TOKEN_ADDRESS = '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359' export const ETHER_TOKEN_FAKE_ADDRESS = '0x0000000000000000000000000000000000000000' @@ -18,21 +19,22 @@ const PRESET_TOKENS = new Map([ ETHER_TOKEN_FAKE_ADDRESS, ANT_MAINNET_TOKEN_ADDRESS, DAI_MAINNET_TOKEN_ADDRESS, + SAI_MAINNET_TOKEN_ADDRESS, ], ], ]) // Some known tokens don’t strictly follow ERC-20 and it would be difficult to -// adapt to every situation. The data listed in this map is used as a fallback +// adapt to every situation. The data listed in this map is used as an override // if either some part of their interface doesn't conform to a standard we // support. -const KNOWN_TOKENS_FALLBACK = new Map([ +const KNOWN_TOKENS_OVERRIDE = new Map([ [ 'main', new Map([ [ - DAI_MAINNET_TOKEN_ADDRESS, - { symbol: 'DAI', name: 'Dai Stablecoin v1.0', decimals: '18' }, + SAI_MAINNET_TOKEN_ADDRESS, + { symbol: 'SAI', name: 'Sai Stablecoin v1.0', decimals: '18' }, ], ]), ], @@ -44,18 +46,18 @@ export const isTokenVerified = (tokenAddress, networkType) => ? ETHER_TOKEN_VERIFIED_ADDRESSES.has(tokenAddress.toLowerCase()) : true -export const tokenDataFallback = (tokenAddress, fieldName, networkType) => { - // The fallback list is without checksums +export const tokenDataOverride = (tokenAddress, fieldName, networkType) => { + // The override list is without checksums const addressWithoutChecksum = tokenAddress.toLowerCase() - const fallbacksForNetwork = KNOWN_TOKENS_FALLBACK.get(networkType) + const overridesForNetwork = KNOWN_TOKENS_OVERRIDE.get(networkType) if ( - fallbacksForNetwork == null || - !fallbacksForNetwork.has(addressWithoutChecksum) + overridesForNetwork == null || + !overridesForNetwork.has(addressWithoutChecksum) ) { return null } - return fallbacksForNetwork.get(addressWithoutChecksum)[fieldName] || null + return overridesForNetwork.get(addressWithoutChecksum)[fieldName] || null } export async function getTokenSymbol(app, address) { diff --git a/apps/finance/app/src/lib/verified-tokens.js b/apps/finance/app/src/lib/verified-tokens.js index b02bdfe1b6..41bc03ed41 100644 --- a/apps/finance/app/src/lib/verified-tokens.js +++ b/apps/finance/app/src/lib/verified-tokens.js @@ -18,14 +18,18 @@ const VERIFIED_TOKENS = [ ['2DC', '0x9fc0583220eb44faee9e2dc1e63f39204ddd9090'], ['300', '0xaec98a708810414878c3bcdf46aad31ded4a4557'], ['3LT', '0x430241368c1d293fda21dba8bb7af32007c59109'], + ['599GTO1', '0x5d9776472483ee2c2b204775547bff6db5a30fed'], ['A18', '0xbde8f7820b5544a49d34f9ddeacabedc7c0b5adc'], ['A18 (1)', '0xba7dcba2ade319bc772db4df75a76ba00dfb31b0'], ['ABCH', '0xcc7d26d8ea6281bb363c8448515f2c61f7bc19f0'], + ['ABDX', '0xb348cb0638b2399ae598b5575d5c12e0f15d3690'], + ['ABPT', '0xcb03bec536843d338ac138205a6689d4cdc11046'], ['ABT', '0xb98d4c97425d9908e66e53a6fdf673acca0be986'], ['ABYSS', '0x0e8d6b471e332f140e7d9dbb99e5e3822f728da6'], ['ACC', '0x13f1b7fdfbe1fc66676d56483e21b1ecb40b58e2'], ['ACE', '0x06147110022b768ba8f99a8f385df11a151a9cc8'], ['ADB', '0x2baac9330cf9ac479d819195794d79ad0c7616e3'], + ['ADC$', '0x827fe1736cee36f7737be6cf502434af294cf137'], ['ADH', '0xe69a353b3152dd7b706ff7dd40fe1d18b7802d31'], ['ADI', '0x8810c63470d38639954c6b41aac545848c46484a'], ['ADL', '0x660e71483785f66133548b10f6926dc332b06e61'], @@ -36,6 +40,7 @@ const VERIFIED_TOKENS = [ ['AEUR', '0xc994a2deb02543db1f48688438b9903c4b305ce3'], ['AFA', '0xfb48e0dea837f9438309a7e9f0cfe7ee3353a84e'], ['AGI', '0x8eb24319393716668d768dcec29356ae9cffe285'], + ['AGS', '0x7db5454f3500f28171d1f9c7a38527c9cf94e6b2'], ['AI', '0x5121e348e897daef1eef23959ab290e5557cf274'], ['AID', '0x37e8789bb9996cac9156cd5f5fd32599e6b91289'], ['AION', '0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466'], @@ -48,10 +53,12 @@ const VERIFIED_TOKENS = [ ['ALTS', '0x638ac149ea8ef9a1286c41b977017aa7359e6cfa'], ['ALX', '0x49b127bc33ce7e1586ec28cec6a65b112596c822'], ['AMB', '0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce'], + ['AMGO', '0xf1ac7a375429719de0dde33528e2639b9a206eba'], ['AMIS', '0x949bed886c739f1a3273629b3320db0c5024c719'], ['AMLT', '0xca0e7269600d353f70b14ad118a49575455c0f2f'], ['AMN', '0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c'], ['AMO', '0x38c87aa89b2b8cd9b95b736e1fa7b612ea972169'], + ['AMPL', '0xd46ba6d942050d489dbd938a2c909a5d5039a161'], ['AMTC', '0x84936cf7630aa3e27dd9aff968b140d5aee49f5a'], ['ANT', '0x960b236a07cf122663c4303350609a66a7b288c0'], ['AOA', '0x9ab165d795019b6d8b3e971dda91071421305e5a'], @@ -69,6 +76,8 @@ const VERIFIED_TOKENS = [ ['ARY', '0xa5f8fc0921880cb7342368bd128eb8050442b1a1'], ['AST', '0x27054b13b1b798b345b591a4d22e6562d47ea75a'], ['ASTRO', '0x7b22938ca841aa392c93dbb7f4c42178e3d65e88'], + ['ASY', '0x017b584acfd16d767541ae9e80cdc702f4527b0b'], + ['ATG', '0x98d0cde5c3d79531613e18f0912127bf172bd7aa'], ['ATH', '0x17052d51e954592c1046320c2371abab6c73ef10'], ['ATH (AIgatha Token)', '0x1543d0f83489e82a1344df6827b23d541f235a50'], ['ATL', '0x78b7fada55a64dd895d8c8c35779dd8b67fa8a05'], @@ -80,6 +89,7 @@ const VERIFIED_TOKENS = [ ['ATX', '0x1a0f2ab46ec630f9fd638029027b552afa64b94c'], ['AUC', '0xc12d099be31567add4e4e4d0d45691c3f58f5663'], ['AURA', '0xcdcfc0f66c522fd086a1b725ea3c0eeb9f9e8814'], + ['AUS', '0x5fb9e9c359cc7191b0293d2faf1cc41ce3688d75'], ['AUTO', '0x622dffcc4e83c64ba959530a5a5580687a57581b'], ['AVA', '0xed247980396b10169bb1d36f6e278ed16700a60f'], ['AVT', '0x0d88ed6e74bbfd96b831231638b66c05571e824f'], @@ -87,6 +97,7 @@ const VERIFIED_TOKENS = [ ['AXP', '0x9af2c6b1a28d3d6bc084bd267f70e90d49741d5b'], ['AXPR', '0xc39e626a04c5971d770e319760d7926502975e47'], ['B2BX', '0x5d51fcced3114a8bb5e90cdd0f9d682bcbcc5393'], + ['BAC', '0x062e3be6a7c56a395b1881a0cd69a4923ade4fa2'], ['BANCA', '0x998b3b82bc9dba173990be7afb772788b5acb8bd'], ['BANX', '0xf87f0d9153fea549c728ad61cb801595a68b73de'], ['BAR', '0xc73f2474001ad1d6aed615af53631148cf98de6b'], @@ -111,11 +122,13 @@ const VERIFIED_TOKENS = [ ['BDG', '0x1961b3331969ed52770751fc718ef530838b6dee'], ['BEE', '0x4d8fc1453a0f359e99c9675954e656d80d996fbf'], ['BeerCoin', '0x74c1e4b8cae59269ec1d85d3d4f324396048f4ac'], + ['BEFX', '0xb91c2a2b953d72f3ef890490669a0a41b0add5f7'], ['BERRY', '0x6aeb95f06cda84ca345c2de0f3b7f96923a44f4c'], ['BET', '0x8aa33a7899fcc8ea5fbe6a608a109c3893a1b8b2'], ['BETHER', '0x14c926f2290044b647e1bf2072e67b495eff1905'], ['BETR', '0x763186eb8d4856d536ed4478302971214febc6a9'], ['BEZ', '0x3839d8ba312751aa0248fed6a8bacb84308e20ed'], + ['BFT', '0x01ff50f8b7f74e4f00580d9596cd3d0d6d6e326f'], ['BHPC', '0xee74110fb5a1007b06282e0de5d73a61bf41d9cd'], ['BHR', '0xfe5d908c9ad85f651185daa6a4770726e2b27d09'], ['BIT', '0x089b85fa15f72c1088cbbef23a49db80b91dd521'], @@ -123,8 +136,9 @@ const VERIFIED_TOKENS = [ ['BITPARK', '0xf3d29fb98d2dc5e78c87198deef99377345fd6f1'], ['BIX', '0xb3104b4b9da82025e8b9f8fb28b3553ce2f67069'], ['BKB', '0x5c39bc68e58a242a624e4fc96be77a383c52002d'], - ['BKB (BetKing Bankroll Token)', '0xb2bfeb70b903f1baac7f2ba2c62934c7e5b974c4'], + ['BKB (1)', '0xb2bfeb70b903f1baac7f2ba2c62934c7e5b974c4'], ['BKC', '0xc88be04c809856b75e3dfe19eb4dcf0a3b15317a'], + ['BKN', '0xbee6edf5fa7e862ed2ea9b9f42cb0849184aae85'], ['BKRx', '0x3cf9e0c385a5abec9fd2a71790aa344c4e8e3570'], ['BKX', '0x45245bc59219eeaaf6cd3f382e078a461ff9de7b'], ['BLN', '0xca29db4221c111888a7e80b12eac8a266da3ee0d'], @@ -139,18 +153,23 @@ const VERIFIED_TOKENS = [ ['BMX', '0x986ee2b944c42d017f52af21c4c69b84dbea35d8'], ['BNB', '0xb8c77482e45f1f44de1745f52c74426c631bdd52'], ['BNC', '0xef51c9377feb29856e61625caf9390bd0b67ea18'], - ['BNC (BNC)', '0xdd6bf56ca2ada24c683fac50e37783e55b57af9f'], + ['BNC (1)', '0xdd6bf56ca2ada24c683fac50e37783e55b57af9f'], ['BNFT', '0xda2c424fc98c741c2d4ef2f42897cefed897ca75'], ['BNN', '0xda80b20038bdf968c7307bb5907a469482cf6251'], + ['BNP', '0xd27d76a1ba55ce5c0291ccd04febbe793d22ebf4'], ['BNT', '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c'], ['BNTY', '0xd2d6158683aee4cc838067727209a0aaf4359de3'], + ['BOA', '0x746dda2ea243400d5a63e0700f190ab79f06489e'], + ['BOA (1)', '0xfb6becd99282d7ca14d0890f3e4f073d9dd522e9'], ['BOB', '0xdf347911910b6c9a4286ba8e2ee5ea4a39eb2134'], + ['BOK', '0x27c743954bce1bfaef8bcbd685527531001d88d7'], + ['BOLT', '0x9f235d23354857efe6c541db92a9ef1877689bcb'], ['BON', '0xcc34366e3842ca1bd36c1f324d15257960fcc801'], ['BOP', '0x7f1e2c7d6a69bf34824d72c53b4550e895c0d8c2'], ['BOU', '0xc2c63f23ec5e97efbd7565df9ec764fdc7d4e91d'], ['BOUTS', '0x139d9397274bb9e2c29a9aa8aa0b5874d30d62e3'], - ['BOX', '0xe1a178b681bd05964d3e3ed33ae731577d9d96dd'], - ['BOX (ContentBox)', '0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f'], + ['BOX', '0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f'], + ['BOX (1)', '0xe1a178b681bd05964d3e3ed33ae731577d9d96dd'], ['BOXX', '0x780116d91e5592e58a3b3c76a351571b39abcec6'], ['BPT', '0x327682779bab2bf4d1337e8974ab9de8275a7ca8'], ['BQX', '0x5af2be193a6abca9c8817001f45744777db30756'], @@ -172,22 +191,28 @@ const VERIFIED_TOKENS = [ ['BTL (Battle)', '0x2accab9cb7a48c3e82286f0b2f8798d201f4ec3f'], ['BTL (Bitlle)', '0x92685e93956537c25bb75d5d47fca4266dd628b8'], ['BTM', '0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750'], + ['BTNG', '0xd6b107d3e45b959b6d13faf1bb2a2cf8fc7025e6'], ['BTO', '0x36905fc93280f52362a1cbab151f25dc46742fb5'], + ['BTP', '0x20900587e569e3d0b2609bca6fb3469765ed0920'], ['BTQ', '0x16b0e62ac13a2faed36d18bce2356d25ab3cfad3'], - ['BTR', '0xcbf15fb8246f679f9df0135881cb29a3746f734b'], - ['BTR (1)', '0x499a6b77bc25c26bcf8265e2102b1b3dd1617024'], + ['BTR', '0x499a6b77bc25c26bcf8265e2102b1b3dd1617024'], + ['BTR (1)', '0xcbf15fb8246f679f9df0135881cb29a3746f734b'], ['BTRN', '0x03c780cd554598592b97b7256ddaad759945b125'], ['BTT', '0x080aa07e2c7185150d7e4da98838a8d2feac3dfc'], ['BTTX', '0xfa456cf55250a839088b27ee32a424d7dacb54ff'], ['BTU', '0xb683d83a532e2cb7dfa5275eed3698436371cc9f'], + ['BTY', '0x9eecec130fb665d03a37289ee34c818ee7f79926'], ['BTZ', '0xe5f867de1ea81346df5181b8b48dd6b0bb3357b0'], ['BUC', '0xca3c18a65b802ec267f8f4802545e7f53d24c75e'], + ['BUSD', '0x4fabb145d64652a948d72533023f6e7a623c7c53'], + ['BWN', '0x51a4f65463597ca4609c9a90ea3d5ab219fbc85d'], ['BWX', '0xbd168cbf9d3a375b38dc51a202b5e8a4e52069ed'], ['BZ', '0x4375e7ad8a01b8ec3ed041399f62d9cd120e0063'], ['BZNT', '0xe1aee98495365fc179699c1bb3e761fa716bee62'], ['C20', '0x26e75307fc0c021472feb8f727839531f112f317'], ['C8', '0xd42debe4edc92bd5a3fbb4243e1eccf6d63a4a5d'], ['CAG', '0x7d4b8cce0591c9044a22ee543533b72e976e36c3'], + ['CALL', '0xbbe761ea1447a20b75aa485b7bcad4837415d7d7'], ['CAN', '0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0'], ['CAPP', '0x04f2e7221fdb1b52a68169b25793e51478ff0329'], ['CAR', '0x423e4322cdda29156b49a17dfbd2acc4b280600d'], @@ -198,12 +223,13 @@ const VERIFIED_TOKENS = [ ['CARD (1)', '0x954b890704693af242613edef1b603825afcd708'], ['CARD (2)', '0xb07ec2c28834b889b1ce527ca0f19364cd38935c'], ['CARE', '0xbf18f246b9301f231e9561b35a3879769bb46375'], - ['CAS', '0xe8780b48bdb05f928697a5e8155f672ed91462f7'], - ['CAS (CAS Coin)', '0x779492d3644ddf4495aa2d80c468e1b7be6af1d2'], + ['CAS', '0x779492d3644ddf4495aa2d80c468e1b7be6af1d2'], + ['CAS (1)', '0xe8780b48bdb05f928697a5e8155f672ed91462f7'], ['CAT (BitClave)', '0x1234567461d3f8db7496581774bd869c83d51c93'], ['CAT (BlockCAT)', '0x56ba2ee7890461f463f7be02aac3099f6d5811a8'], ['CATS', '0x8293bbd92c42608b20af588620a76128a33e4de9'], ['CATs (BitClave)_Old', '0x68e14bb5a45b9681327e16e528084b9d962c1a39'], + ['cBAT', '0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e'], ['CBC', '0x26db5439f651caf491a87d48799da81f191bdb6b'], ['CBIX', '0x05c3617cbf1304b9260aa61ec960f115d67becea'], ['CBM', '0x95efd1fe6099f65a7ed524def487483221094947'], @@ -216,13 +242,16 @@ const VERIFIED_TOKENS = [ ['CCO', '0x679badc551626e01b23ceecefbc9b877ea18fc46'], ['CCS', '0x315ce59fafd3a8d562b7ec1c8542382d2710b06c'], ['CCT', '0x336f646f87d9f6bc6ed42dd46e8b3fd9dbd15c22'], + ['cDai', '0xf5dce57282a584d2746faf1593d3121fcac444dc'], ['CDL', '0x8a95ca448a52c0adf0054bb3402dc5e09cd6b232'], ['CDT', '0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af'], ['CDX', '0x2cb101d7da0ebaa57d3f2fef46d7ffb7bb64592b'], - ['CDX (Commodity Ad Network)', '0x6fff3806bbac52a20e0d79bc538d527f6a22c96b'], + ['CDX (1)', '0x6fff3806bbac52a20e0d79bc538d527f6a22c96b'], ['CEEK', '0xb056c38f6b7dc4064367403e26424cd2c60655e1'], + ['CEN', '0x0bc61dded5f6710c637cf8288eb6058766ce1921'], ['CENNZ', '0x1122b6a0e00dce0563082b6e2953f3a943855c1f'], ['CET', '0xf660ca1e228e7be1fa8b4f5583145e31147fb577'], + ['cETH', '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5'], ['CFC', '0x5dff89a2caa4d76bc286f74d67bd718eb834da61'], ['CFI', '0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e'], ['CFTY', '0x6956983f8b3ce173b4ab84361aa0ad52f38d936f'], @@ -247,28 +276,32 @@ const VERIFIED_TOKENS = [ ['CO2', '0xb4b1d2c217ec0776584ce08d3dd98f90ededa44b'], ['CO2Bit', '0x574b36bced443338875d171cc377e691f7d4f887'], ['COB', '0xb2f7eb1f2c37645be61d73953035360e768d81e6'], + ['COBR', '0x933dfc5622792b41245ab8313416caf0ba885ae7'], ['COFI', '0x3136ef851592acf49ca4c825131e364170fa32b3'], ['COIL', '0x0c91b015aba6f7b4738dcd36e7410138b29adc29'], ['COIN', '0x5e8f855966d638135a968861e80dda722291b06d'], - ['COIN (Coinvest V3 Token)', '0xeb547ed1d8a3ff1461abaa7f0022fed4836e00a4'], + ['COIN (1)', '0xeb547ed1d8a3ff1461abaa7f0022fed4836e00a4'], ['CORI', '0x725b190bc077ffde17cf549aa8ba25e298550b18'], ['COSM', '0xc4bcd64cb216d49fd3c643a32762f34626b45a1a'], ['COSS', '0x65292eeadf1426cd2df1c4793a3d7519f253913b'], ['COSS (1)', '0x9e96604445ec19ffed9a5e8dd7b50a29c899a10c'], ['COV', '0xe2fb6529ef566a080e6d23de0bd351311087d567'], + ['CPAL', '0x31910aff5545784755970ae1fbe7fe65d5f0eea2'], ['CPAY', '0x0ebb614204e47c09b6c3feb9aaecad8ee060e23e'], ['CPC', '0xfae4ee59cdd86e3be9e8b90b53aa866327d7c090'], ['CPEX', '0xb787d4eac8899730bb8c57fc3c998c49c5244ec0'], ['CPLO', '0x7064aab39a0fcf7221c3396719d0917a65e35515'], - ['CPT', '0x9b62513c8a27290cf6a7a9e29386e600245ea819'], - ['CPT (Cryptaur)', '0x88d50b466be55222019d71f9e8fae17f5f45fca1'], + ['CPT', '0x88d50b466be55222019d71f9e8fae17f5f45fca1'], + ['CPT (1)', '0x9b62513c8a27290cf6a7a9e29386e600245ea819'], ['CPY', '0xf44745fbd41f6a1ba151df190db0564c5fcc4410'], + ['CR1', '0x0d9a10a0466b7e9ad693e24993f5105bfdb240e3'], ['CR7', '0x7f585b9130c64e9e9f470b618a7badd03d79ca7e'], ['CRB', '0xaef38fbfbf932d1aef3b808bc8fbd8cd8e1f8bc5'], ['CRBT', '0x2cf618c19041d9db330d8222b860a624021f30fb'], ['CRC', '0xf41e5fbc2f6aac200dd8619e121ce1f05d150077'], ['CRED', '0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd'], ['CREDO', '0x4e0603e2a27a30480e5e3a4fe548e29ef12f64be'], + ['cREP', '0x158079ee67fce2f58472a96584a73c7ab9ac95c1'], ['CRGO', '0xf49cdd50ad408d387d611f88a647179c3de3492b'], ['CRMT', '0x9238bfb781a55eacc3cf05f7df94038c198cd9b9'], ['CRPT', '0x80a7e048f37a50500351c204cb407766fa3bae7f'], @@ -282,22 +315,29 @@ const VERIFIED_TOKENS = [ ['CTGC', '0x9e7d29bd499b6c7da2a5b2eafcf4a39d3bd845d1'], ['CTL', '0xbf4cfd7d1edeeea5f6600827411b41a21eb08abd'], ['CTR', '0x96a65609a7b84e8842732deb08f56c3e21ac6f8a'], - ['CTT', '0xe3fa177acecfb86721cf6f9f4206bd3bd672d7d5'], + ['CTT', '0x1a4743cf1af4c289351390a2b3fe7c13d2f7c235'], + ['CTT (1)', '0xe3fa177acecfb86721cf6f9f4206bd3bd672d7d5'], ['CTX', '0x662abcad0b7f345ab7ffb1b1fbb9df7894f18e66'], ['CTXC', '0xea11755ae41d889ceec39a63e6ff75a02bc1c00d'], + ['CUR8', '0x490dbf7884b8e13c2161448b83dd2d8909db48ed'], + ['CURA', '0x1dabf6ab0eb8e4208e7e9302cec7a014068952e4'], + ['cUSDC', '0x39aa39c021dfbae8fac545936693ac917d5e7563'], ['cV', '0xda6cb58a0d0c01610a29c5a65c303e13e885887c'], ['CVC', '0x41e5560054824ea6b0732e656e3ad64e20e94e45'], + ['CVS', '0xdb56448fe2635f7912287cd619e7ed3d93180f25'], ['CVT', '0xbe428c3867f05dea2a89fc76a102b544eac7f772'], ['CXC', '0x2134057c0b461f898d375cead652acae62b59541'], ['CXO', '0xb6ee9668771a79be7967ee29a63d4184f8097143'], + ['CYCLE', '0xfe831929098b5ff5d736105bd68ba9460ef07207'], ['CYFM', '0x3f06b5d78406cd97bdf10f5c420b241d32759c80'], ['CYMT', '0x78c292d1445e6b9558bf42e8bc369271ded062ea'], ['CZR', '0x0223fc70574214f65813fe336d870ac47e147fae'], + ['cZRX', '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407'], ['DAB', '0xdab0c31bf34c897fb0fe90d12ec9401caf5c36ec'], ['DACS', '0xa31108e5bab5494560db34c95492658af239357c'], ['DADI', '0xfb2f26f266fb2805a387230f2aa0a331b4d96fba'], - ['DAI', '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359'], ['DALC', '0x07d9e49ea402194bf48a8276dafb16e4ed633317'], + ['DAI', '0x6b175474e89094c44da98b954eedeac495271d0f'], ['DAN', '0x9b70740e708a083c6ff38df52297020f5dfaa5ee'], ['DAO', '0xbb9bc244d798123fde783fcc1c72d3bb8c189413'], ['DAT', '0x81c9151de0c8bafcd325a57e3db5a5df1cebf79c'], @@ -323,6 +363,7 @@ const VERIFIED_TOKENS = [ ['Devcon2 Token', '0xdd94de9cfe063577051a5eb7465d08317d8808b6'], ['DEW', '0x20e94867794dba030ee287f1406e100d03c84cd3'], ['DEX', '0x497baef294c11a5f0f5bea3f2adb3073db448b56'], + ['DF', '0x431ad2ff6a9c365805ebad47ee021148d6f7dbe0'], ['DGD', '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a'], ['DGPT', '0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1'], ['DGS', '0x6aedbf8dff31437220df351950ba2a3362168d1b'], @@ -345,12 +386,13 @@ const VERIFIED_TOKENS = [ ['DOW', '0x76974c7b79dc8a6a109fd71fd7ceb9e40eff5382'], ['DOW (1)', '0xeef6e90034eea89e31eb4b8eacd323f28a92eae4'], ['DPP', '0x01b3ec4aae1b8729529beb4965f27d008788b0eb'], + ['DRC', '0xc2e3ed7f61d338755bf7b6fb4baa0fffada4ac28'], ['DREAM', '0x82f4ded9cec9b5750fbff5c2185aee35afc16587'], ['DRGN', '0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e'], ['DROP', '0x3c75226555fc496168d48b88df83b95f16771f37'], ['DROP (dropil)', '0x4672bad527107471cb5067a887f4656d585a8a31'], ['DRP', '0x2799d90c6d44cb9aa5fbc377177f16c33e056b82'], - ['DRP (DCorp)', '0x621d78f2ef2fd937bfca696cabaf9a779f59b3ed'], + ['DRP (1)', '0x621d78f2ef2fd937bfca696cabaf9a779f59b3ed'], ['DRPU', '0xe30e02f049957e2a5907589e06ba646fb2c321ba'], ['DRT', '0x9af4f26941677c706cfecf6d3379ff01bb85d5ab'], ['DRVH', '0x62d4c04644314f35868ba4c65cc27a77681de7a9'], @@ -363,9 +405,9 @@ const VERIFIED_TOKENS = [ ['DTT', '0xf9f7c29cfdf19fcf1f2aa6b84aa367bcf1bd1676'], ['DTx', '0x82fdedfb7635441aa5a92791d001fa7388da8025'], ['DTX', '0x765f0c16d1ddc279295c1a7c24b0883f62d33f75'], - ['DUBI', '0xd4cffeef10f60eca581b5e1146b5aca4194a4c3b'], - ['DUBI (1)', '0x9c6fa42209169bcea032e401188a6fc3e9c9f59c'], - ['DUBI (DUBI)', '0xed7fea78c393cf7b17b152a8c2d0cd97ac31790b'], + ['DUBI', '0x9c6fa42209169bcea032e401188a6fc3e9c9f59c'], + ['DUBI (1)', '0xd4cffeef10f60eca581b5e1146b5aca4194a4c3b'], + ['DUBI (2)', '0xed7fea78c393cf7b17b152a8c2d0cd97ac31790b'], ['DXT', '0x8db54ca569d3019a2ba126d03c37c44b5ef81ef6'], ['E₹', '0xb67734521eabbe9c773729db73e16cc2dfb20a58'], ['E4ROW', '0xce5c603c78d047ef43032e96b5b785324f753a4f'], @@ -377,15 +419,18 @@ const VERIFIED_TOKENS = [ ['ECN', '0xa578acc0cb7875781b7880903f4594d13cfa8b98'], ['ECO2', '0x17f93475d2a978f527c3f7c44abf44adfba60d5c'], ['ECOM', '0x171d750d42d661b62c277a6b486adb82348c3eca'], - ['ECP', '0xaea1c18a992984831002d0cf90e291fb52d72649'], - ['ECP (ECrypto Coin)', '0x8869b1f9bc8b246a4d7220f834e56ddfdd8255e7'], + ['ECP', '0x8869b1f9bc8b246a4d7220f834e56ddfdd8255e7'], + ['ECP (1)', '0xaea1c18a992984831002d0cf90e291fb52d72649'], ['EDC', '0xfa1de2ee97e4c10c94c91cb2b5062b89fb140b82'], ['EDG', '0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c'], ['EDO', '0xced4e93198734ddaff8492d525bd258d49eb388e'], ['EDR', '0xc528c28fec0a90c083328bc45f587ee215760a0f'], ['EDU', '0x2a22e5cca00a3d63308fa39f29202eb1b39eef52'], + ['EDX', '0xbf8d8f1242b95dfbae532af6b0f4463905415cc1'], ['eGAS', '0xb53a96bcbdd9cf78dff20bab6c2be7baec8f00f8'], + ['EGG', '0x999aa6488f076e6765448f090aba83fbb470fc99'], ['EGT', '0x8e1b448ec7adfc7fa35fc2e885678bd323176e34'], + ['EGX', '0xa19bbef64eff0d060a653e4df10a57b6d8006d3e'], ['EHT', '0xf9f0fc7167c311dd2f1e21e9204f87eba9012fb2'], ['EKO', '0xa6a840e50bcaa50da017b91a0d86b8b2d41156ee'], ['EKT', '0xbab165df9455aa0f2aed1f2565520b91ddadb4c8'], @@ -403,35 +448,46 @@ const VERIFIED_TOKENS = [ ['ENG', '0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4'], ['ENGT', '0x5dbac24e98e2a4f43adc0dc82af403fca063ce2c'], ['ENJ', '0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c'], + ['ENQ', '0x16ea01acb4b0bca2000ee5473348b6937ee6f72f'], ['ENTRP', '0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3'], ['EOS', '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0'], ['eosDAC', '0x7e9e431a0b8c4d532c745b1043c7fa29a48d4fba'], + ['EPH', '0x875089a734213ca39f0d93c2bbb8209827ec5e9f'], ['EPX', '0x35baa72038f127f9f8c8f9b491049f64f377914d'], ['EPY', '0x50ee674689d75c0f88e8f83cfe8c4b69e8fd590d'], ['EQL', '0x47dd62d4d075dead71d0e00299fc56a2d747bebb'], ['ERO', '0x74ceda77281b339142a36817fa5f9e29412bab85'], ['ERT', '0x92a5b04d0ed5d94d7a193d1d334d3d16996f4e13'], + ['ESB', '0x369760ebf89d577a734d927a9599c1921397a152'], ['ESZ', '0xe8a1df958be379045e2b46a31a98b93a2ecdfded'], ['ETBS', '0x1b9743f556d65e757c4c650b4555baf354cb8bd3'], ['ETCH', '0xdd74a7a3769fa72561b3a69e65968f49748c690c'], ['ETG', '0x28c8d01ff633ea9cd8fc6a451d7457889e698de6'], ['ETHB', '0x3a26746ddb79b1b8e4450e3f4ffe3285a307387e'], ['ETHD', '0xdbfb423e9bbf16294388e07696a5120e4ceba0c5'], + ['ETHPAY', '0xe52e75e8a97546f40991b489e92c68ebb386dc97'], ['ETK', '0x3c4a3ffd813a107febd57b2f01bc344264d90fde'], ['ETR', '0x6927c69fb4daf2043fbb1cb7b86c5661416bea29'], + ['EUCX', '0xd99298985902c9a69bf4c8a0895fa10721204ecc'], ['EURS', '0xdb25f211ab05b1c97d595516f45794528a807ad8'], ['EURT', '0xabdf147870235fcfc34153828c769a70b3fae01f'], ['eUSD', '0x523630976eb6147621b5c31c781ebe2ec2a806e0'], ['EVC', '0xb62d18dea74045e822352ce4b3ee77319dc5ff2f'], + ['EVCO', '0xaa5c28be0f1173612ea3fcc9e461ccb7b9390213'], ['EVE', '0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c'], + ['EVED', '0x5aaefe84e0fb3dd1f0fcff6fa7468124986b91bd'], + ['EVF', '0xa26c4caaaea8b88ef49bf8c380488f66c2d807ae'], ['EVN', '0x68909e586eeac8f47315e84b4c9788dd54ef65bb'], - ['EVN (Envion AG)', '0xd780ae2bf04cd96e577d3d014762f831d97129d0'], + ['EVN (1)', '0xd780ae2bf04cd96e577d3d014762f831d97129d0'], + ['EVO', '0x442d985efebc633b8bfd14ff99e860a5609a6484'], ['EVX', '0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8'], ['EWO', '0x444997b7e7fc830e20089afea3078cd518fcf2a2'], - ['EXC', '0x9e4c143bfe35f855624b3f84465ab7401a17a120'], - ['EXC (Eximchain Token)', '0x00c4b398500645eb5da00a1a379a88b11683ba01'], + ['EXC', '0x00c4b398500645eb5da00a1a379a88b11683ba01'], + ['EXC (1)', '0x9e4c143bfe35f855624b3f84465ab7401a17a120'], + ['EXE', '0x0d9a653f681168f410d14d19b7743c041eafc58a'], ['EXMR', '0xc98e0639c6d2ec037a615341c369666b110e80e5'], ['EXRN', '0xe469c4473af82217b30cf17b10bcdb6c8c796e75'], + ['EXU', '0xe06af951086ec3c488b50e31be29c07f8a260ca3'], ['EXY', '0x5c743a35e903f6c584514ec617acee0611cf44f3'], ['EZT', '0x5e6016ae7d7c49d347dcf834860b9f3ee282812b'], ['FABA', '0x0a1d2ff7156a48131553cf381f220bbedb4efa37'], @@ -441,7 +497,9 @@ const VERIFIED_TOKENS = [ ['FANX', '0x7dcb3b2356c822d3577d4d060d0d5d78c860488c'], ['FANX (1)', '0x7f6715c3fc4740a02f70de85b9fd50ac6001fed9'], ['FAR', '0x7cf6dc769482abee2ff75795d000f381a8062dec'], + ['FARM', '0x41f723448433367be140d528d35efecd3e023db6'], ['FDZ', '0x23352036e911a22cfc692b5e2e196692658aded9'], + ['FER', '0x4e594479fa417a1e9c5790a413575802d393010f'], ['FGP', '0xd9a8cfe21c232d485065cb62a96866799d4645f7'], ['FID', '0x52fb36c83ad33c1824912fc81071ca5eeb8ab390'], ['FIH', '0xdfc3e857c8ccea7657e0ed98ab92e048e38dee0f'], @@ -462,44 +520,57 @@ const VERIFIED_TOKENS = [ ['FOOD', '0x2a093bcf0c98ef744bb6f69d74f2f85605324290'], ['FORK', '0x5bb1632fa0023e1aa76a1ae92b4635c8dba49fa2'], ['FOTA', '0x4270bb238f6dd8b1c3ca01f96ca65b2647c06d3c'], + ['FOX', '0xc770eefad204b5180df6a14ee197d99d808ee52d'], ['FR8', '0x8c39afdf7b17f12c553208555e51ab86e69c35aa'], ['FRD', '0x0abefb7611cb3a01ea3fad85f33c3c934f8e2cf4'], ['FREC', '0x17e67d1cb4e349b9ca4bc3e17c7df2a397a7bb64'], + ['FRECNX', '0xd8b8e1eca89da014e67fdbc2014eaa8e171079bf'], ['FRV', '0x48df4e0296f908ceab0428a5182d19b31fc037d6'], + ['FRX', '0x36a73557f5bde5195ec39eca82d28b8a36d21141'], ['FSN', '0xd0352a019e9ab9d757776f532377aaebd36fd541'], ['FT', '0x78a73b6cbc5d183ce56e786f6e905cadec63547b'], ['FTC', '0xe6f74dcfa0e20883008d8c16b6d9a329189d0c30'], + ['ftchain', '0x26ac29dc25806199373cb4884aa9e077a0587c5b'], ['FTI', '0x943ed852dadb5c3938ecdc6883718df8142de4c8'], ['FTR', '0x2023dcf7c438c8c8c0b0f28dbae15520b4f3ee20'], ['FTT', '0x2aec18c5500f21359ce1bea5dc1777344df4c0dc'], ['FTX', '0xd559f20296ff4895da39b5bd9add54b442596a61'], ['FTXT', '0x41875c2332b0877cdfaa699b641402b7d4642c32'], ['FUCK', '0x65be44c747988fbf606207698c944df4442efe19'], - ['FUCK (FinallyUsableCryptoKarma)', '0xab16e0d25c06cb376259cc18c1de4aca57605589'], + ['FUCK (1)', '0xab16e0d25c06cb376259cc18c1de4aca57605589'], ['FUEL', '0xea38eaa3c86c8f9b751533ba2e562deb9acded40'], ['FUN', '0x419d0d8bdd9af5e606ae2232ed285aff190e711b'], - ['FXC', '0xc92d6e3e64302c59d734f3292e2a13a13d7e1817'], - ['FXC (Flexacoin)', '0x4a57e687b9126435a9b19e4a802113e266adebde'], + ['FXC', '0x4a57e687b9126435a9b19e4a802113e266adebde'], + ['FXC (1)', '0xc92d6e3e64302c59d734f3292e2a13a13d7e1817'], ['FXT', '0x1829aa045e21e0d59580024a951db48096e01782'], ['FYN', '0x88fcfbc22c6d3dbaa25af478c578978339bde77a'], ['FYP', '0x8f0921f30555624143d427b340b1156914882c10'], ['Fzcoin', '0xe5aee163513119f4f750376c718766b40fa37a5f'], + ['G-CRE', '0xa3ee21c306a700e682abcdfe9baa6a08f3820419'], ['GAM', '0xf67451dc8421f0e0afeb52faa8101034ed081ed9'], ['GANA', '0x6754e21b9eaa053c62d7854dd6561ae451b0cbcf'], ['GANA (1)', '0xc0ea6306f6360fe7dcab65d16bf1a3af92c79aa2'], ['GAT', '0x687174f8c49ceb7729d925c3a961507ea4ac7b28'], ['GAVEL', '0x708876f486e448ee89eb332bfbc8e593553058b9'], + ['GBO', '0xcc2a74b28e786fac86be3ca354b1941c25ab3eab'], ['GBT', '0x7585f835ae2d522722d2684323a0ba83401f32f5'], ['GBX', '0x12fcd6463e66974cf7bbc24ffc4d40d6be458283'], + ['GC', '0x8eb38715604b938812dec25a0a1bc05b4becb9ca'], + ['GCG', '0x1778fffbd431be2ac3d69e64d1d819c786b2bee0'], ['GCP', '0xdb0f69306ff8f949f258e83f6b87ee5d052d0b23'], + ['GCU', '0xa4ec83c8907888d006a37debf755ee39766f38ae'], + ['GCX', '0x44a67c8570a61a28bafd0035042f2f0a73a64428'], ['GEE', '0x4f4f0db4de903b88f2b1a2847971e231d54f8fd3'], ['GELD', '0x24083bb30072643c3bb90b44b7285860a755e687'], ['GEM', '0xc7bba5b765581efb2cdd2679db5bea9ee79b201f'], ['GEN', '0x543ff227f64aa17ea132bf9886cab5db55dcaddf'], ['GENE', '0x6dd4e4aad29a40edd6a409b9c1625186c9855b4d'], ['GET', '0x8a854288a5976036a725879164ca3e91d30c6a1b'], + ['GFN', '0x3930e4ddb4d24ef2f4cb54c1f009a3694b708428'], + ['GGC', '0x7f969c4d388ca0ae39a4fddb1a6f89878ca2fbf8'], ['GIF', '0xfcd862985628b254061f7a918035b80340d045d3'], ['GIM', '0xae4f56f072c34c0a65b3ae3e4db797d831439d93'], + ['GIRL', '0x9aa7d119bdf77f65a7284581a211d8c44ffb04b4'], ['GLA', '0x71d01db8d6a2fbea7f8d434599c237980c234e4c'], ['GMT', '0xb3bd49e28f8f832b8d1e246106991e546c323502'], ['GNO', '0x6810e776880c02933d47db1b9fc05908e5386b96'], @@ -508,6 +579,7 @@ const VERIFIED_TOKENS = [ ['GNY', '0x247551f2eb3362e222c742e9c788b8957d9bc87e'], ['GOLDX', '0xeab43193cf0623073ca89db9b712796356fa7414'], ['GOT', '0x423b5f62b328d0d6d44870f4eee316befa0b2df5'], + ['GRG', '0x4fbb350052bca5417566f188eb2ebce5b19bc964'], ['GRID', '0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd'], ['GRMD', '0xb444208cb0516c150178fcf9a52604bc04a1acea'], ['GROO', '0xc17195bde49d70cefcf8a9f2ee1759ffc27bf0b1'], @@ -527,6 +599,7 @@ const VERIFIED_TOKENS = [ ['GZB', '0x9dae8b7f6d37ea8e5d32c6c3e856a6d8a1d3b363'], ['GZE', '0x8c65e992297d5f092a756def24f4781a280198ff'], ['GZR', '0xe638dc39b6adbee8526b5c22380b4b45daf46d8e'], + ['HABS', '0x5bfc1ff7f9e087c64fefb34f2e7cf24e5570919f'], ['HAK', '0x93a7174dafd31d13400cd9fa01f4e5b5baa00d39'], ['HAND', '0x48c1b2f3efa85fbafb2ab951bf4ba860a08cdbb7'], ['HAPPY', '0x5a567e28dbfa2bbd3ef13c0a01be114745349657'], @@ -536,6 +609,7 @@ const VERIFIED_TOKENS = [ ['HBZ', '0xe34e1944e776f39b9252790a0527ebda647ae668'], ['HDG', '0xffe8196bc259e8dedc544d935786aa4709ec3e64'], ['HDL', '0x95c4be8534d69c248c0623c4c9a7a2a001c17337'], + ['HDLRE', '0x86a63063b3a60652fb070f23cbb4a9833fdbbff8'], ['Hdp', '0xe9ff07809ccff05dae74990e25831d0bc5cbe575'], ['Hdp.ф', '0x84543f868ec1b1fac510d49d13c069f64cd2d5f9'], ['HER', '0x491c9a23db85623eed455a8efdd6aba9b911c5df'], @@ -543,6 +617,7 @@ const VERIFIED_TOKENS = [ ['HGT', '0xba2184520a1cc49a6159c57e61e1844e085615b6'], ['HIBT', '0x9bb1db1445b83213a56d90d331894b3f26218e4e'], ['HIG', '0xa9240fbcac1f0b9a6adfb04a53c8e3b0cc1d1444'], + ['HIN', '0x7fccadee21660425fdec86029b6362845ffc052c'], ['HKG', '0x14f37b574242d366558db61f3335289a5035c506'], ['HKN', '0x9e6b2b11542f2bc52f3029077ace37e8fd838d7f'], ['HKY', '0x88ac94d5d175130347fc95e109d77ac09dbf5ab7'], @@ -557,27 +632,34 @@ const VERIFIED_TOKENS = [ ['HPB', '0x38c6a68304cdefb9bec48bbfaaba5c5b47818bb2'], ['HST', '0x554c20b7c486beee439277b4540a434566dc4c02'], ['HT', '0x6f259637dcd74c767781e37bc6133cd6a68aa161'], + ['HTX', '0x46ae264bf6d9dc6dd84c31064551f961c67a755c'], + ['HUBS', '0x001fc4a7f2f586596308091c7b296d4535a25a90'], + ['HUSL', '0x56be94d29e1125d2d61d06629c1b251d72c1b3b3'], ['HV', '0x141abb03f001deded9a0223d4ff26d929117b72e'], ['HVN', '0xc0eb85285d83217cd7c891702bcbc0fc401e2d9d'], ['HYDRO', '0xebbdf302c940c6bfd49c6b165f457fdb324649bc'], ['IAD', '0xc1e2097d788d33701ba3cc2773bf67155ec93fc4'], + ['ICD', '0x3c20d67b6b1ae0985f913abb7397babc2fbb1a1f'], ['ICE', '0x5a84969bb663fb64f6d015dcf9f622aedc796750'], ['ICN', '0x888666ca69e0f178ded6d75b5726cee99a87d698'], ['ICO', '0xa33e729bf4fdeb868b534e1f20523463d9c46bee'], ['ICOS', '0x014b50466590340d41307cc54dcee990c8d58aa8'], ['ICX', '0xb5a5f22694352c15b00323844ad545abb2b11028'], + ['ID7', '0x6bc4375083d3ad563de91cad8438f629841448a5'], ['IDEA', '0x814cafd4782d2e728170fda68257983f03321c58'], ['IDH', '0x5136c98a80811c3f46bdda8b5c4555cfd9f812f0'], + ['IDRT', '0x998ffe1e43facffb941dc337dd0468d52ba5b48a'], ['IDXM', '0xcc13fc627effd6e35d2d2706ea3c4d7396c610ea'], ['IETH', '0x859a9c0b44cb7066d956a958b0b82e54c9e44b4b'], ['IFT', '0x7654915a1b82d6d2d0afc37c52af556ea8983c7e'], ['IG', '0x8a88f04e0c905054d2f33b26bb3a46d7091a039a'], + ['IGI', '0x449c640b6c7fce4f8ad2e3dcd900d13be40174af'], ['IHT', '0xeda8b016efa8b1161208cf041cd86972eee0f31e'], ['IIC', '0x16662f73df3e79e54c6c5938b4313f92c524c120'], ['IKB', '0x88ae96845e157558ef59e9ff90e766e22e480390'], ['IMC', '0xe3831c5a982b279a198456d577cfb90424cb6340'], ['IMT', '0x13119e34e140097a507b07a5564bde1bc375d9e6'], - ['IMT (IMT)', '0x22e5f62d0fa19974749faa194e3d3ef6d89c08d7'], + ['IMT (1)', '0x22e5f62d0fa19974749faa194e3d3ef6d89c08d7'], ['IND', '0xf8e386eda857484f5a12e4b5daa9984e06e73705'], ['ING', '0x24ddff6d8b8a42d835af3b440de91f3386554aa4'], ['INRM', '0x48e5413b73add2434e47504e2a22d14940dbfe78'], @@ -592,44 +674,56 @@ const VERIFIED_TOKENS = [ ['IPL', '0x64cdf819d3e75ac8ec217b3496d7ce167be42e80'], ['IPSX', '0x001f0aa5da15585e5b2305dbab2bac425ea71007'], ['IQN', '0x0db8d8b76bc361bacbb72e2c491e06085a97ab31'], + ['ISL', '0x1969442391737025812c2215e77e676d7fa84847'], ['IST34', '0x0cf713b11c9b986ec40d65bd4f7fbd50f6ff2d64'], ['ITC', '0x5e6b6d9abad9093fdc861ea1600eba1b355cd940'], ['ITT', '0x0aef06dcccc531e581f0440059e6ffcc206039ee'], ['IVY', '0xa4ea687a2a7f29cf2dc66b39c68e4411c0d00c49'], ['IXT', '0xfca47962d45adfdfd1ab2d972315db4ce7ccf094'], ['J8T', '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4'], - ['JBX', '0x884e3902c4d5cfa86de4ace7a96aa91ebc25c0ff'], - ['JBX (JBX)', '0x0aaf561eff5bd9c8f911616933f84166a17cfe0c'], + ['JBD', '0x9a3619499825fbae63329aa8bcb3f10cd5958e1c'], + ['JBX', '0x0aaf561eff5bd9c8f911616933f84166a17cfe0c'], + ['JBX (1)', '0x884e3902c4d5cfa86de4ace7a96aa91ebc25c0ff'], ['JC', '0xe2d82dc7da0e6f882e96846451f4fabcc8f90528'], ['JET', '0x8727c112c712c4a03371ac87a74dd6ab104af768'], ['JetCoins', '0x773450335ed4ec3db45af74f34f2c85348645d39'], ['JNT', '0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7'], + ['JOB', '0x17280da053596e097604839c61a2ef5efb7d493f'], ['JOT', '0xdb455c71c1bc2de4e80ca451184041ef32054001'], ['JOY', '0xdde12a12a6f67156e0da672be05c374e1b0a3e57'], + ['JSE', '0x2d184014b5658c453443aa87c8e9c4d57285620b'], ['KAN', '0x1410434b0346f5be678d0fb554e5c7ab620f8f4a'], + ['KAPA', '0xe15254a13d34f9700320330abcb7c7f857af2fb7'], ['KC', '0x0d6dd9f68d24ec1d5fe2174f3ec8dab52b52baf5'], + ['KCS', '0x039b5649a59967e3e936d7471f9c3700100ee1ab'], ['KEE', '0x72d32ac1c5e66bfc5b08806271f8eef915545164'], ['KEY', '0x4cc19356f2d37338b9802aa8e8fc58b0373296e7'], - ['KEY (BihuKey)', '0x4cd988afbad37289baaf53c13e98e2bd46aaea8c'], + ['KEY (1)', '0x4cd988afbad37289baaf53c13e98e2bd46aaea8c'], ['KICK', '0x27695e09149adc738a978e9a678f99e4c39e9eb9'], + ['KICK (1)', '0xc12d1c73ee7dc3615ba4e37e4abfdbddfa38907e'], ['KIN', '0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5'], ['KIND', '0x4618519de4c304f3444ffa7f812dddc2971cc688'], + ['KLOWN', '0xc97a5cdf41bafd51c8dbe82270097e704d748b92'], + ['KMTBA', '0x2bdd6c9bf1bf396a37501aae53751b9946b503da'], ['KNC', '0xdd974d5c2e2928dea5f71b9825b8b646686bd200'], ['KNDC', '0x8e5610ab5e39d26828167640ea29823fe1dd5843'], ['KNT', '0xff5c25d2f40b47c4a37f989de933e26562ef0ac0'], ['KPR', '0xb5c33f965c8899d255c34cdd2a3efa8abcbb3dea'], + ['KRI', '0xeef8102a0d46d508f171d7323bceffc592835f13'], ['KRL', '0x464ebe77c293e473b48cfe96ddcf88fcf7bfdac0'], ['KRTY', '0xbd4ab8b9c26c4888e2792cac6d5793efea9ebb20'], + ['KRW-G', '0x4cc8486f2f3dce2d3b5e27057cf565e16906d12d'], ['KUE', '0xdf1338fbafe7af1789151627b886781ba556ef9a'], ['KWATT', '0x241ba672574a78a3a604cdd0a94429a73a84a324'], ['KZN', '0x9541fd8b9b5fa97381783783cebf2f5fa793c262'], ['LA', '0xe50365f5d679cb98a1dd62d6f6e58e59321bcddf'], ['LALA', '0xfd107b473ab90e8fbd89872144a3dc92c40fa8c9'], + ['LAMB', '0x8971f9fd7196e5cee2c1032b50f656855af7dd26'], ['LATX', '0x2f85e502a988af76f7ee6d83b7db8d6c0a823bf9'], ['LBA', '0xfe5f141bf94fe84bc28ded0ab966c16b17490657'], ['LCS', '0xaa19961b6b858d9f18a115f25aa1d98abc1fdba8'], - ['LCT', '0x4a37a91eec4c97f9090ce66d21d3b3aadf1ae5ad'], - ['LCT (LendConnect)', '0x05c7065d644096a4e4c3fe24af86e36de021074b'], + ['LCT', '0x05c7065d644096a4e4c3fe24af86e36de021074b'], + ['LCT (1)', '0x4a37a91eec4c97f9090ce66d21d3b3aadf1ae5ad'], ['LDC', '0x5102791ca02fc3595398400bfe0e33d7b6c82267'], ['LDX', '0x9efa0e2387e4cba02a6e4e6594b8f4dd209a0b93'], ['LEDU', '0x5b26c5d0772e5bbac8b3182ae9a13f9bb2d03765'], @@ -637,10 +731,13 @@ const VERIFIED_TOKENS = [ ['LEMO (1)', '0xb5ae848edb296c21259b7467331467d2647eecdf'], ['LEMO (2)', '0xd6e354f07319e2474491d8c7c712137bee6862a2'], ['LEND', '0x80fb784b7ed66730e8b1dbd9820afd29931aab03'], + ['LEO', '0xf97b5d65da6b0468b90d531ddae2a69843e6797d'], ['LEV', '0x0f4ca92660efad97a9a70cb0fe969c755439772c'], ['LFR', '0xc798cd1c49db0e297312e4c682752668ce1db2ad'], - ['LG', '0xc520f3ac303a107d8f4b08b326b6ea66a4f961cd'], - ['LGO', '0x123ab195dd38b1b40510d467a6a359b201af056f'], + ['LG', '0x6fe536a1d595c12cbb407c5b2c03999f658a5c72'], + ['LG (1)', '0xc520f3ac303a107d8f4b08b326b6ea66a4f961cd'], + ['LGO', '0x0a50c93c762fdd6e56d86215c24aaad43ab629aa'], + ['LGO (old)', '0x123ab195dd38b1b40510d467a6a359b201af056f'], ['LGR', '0x2eb86e8fc520e0f6bb5d9af08f924fe70558ab89'], ['LIBER', '0xe6dfbf1faca95036b8e76e1fb28933d025b76cc0'], ['LIF', '0xeb9951021698b42e4399f9cbb6267aa35f82d59d'], @@ -660,12 +757,16 @@ const VERIFIED_TOKENS = [ ['LOK', '0x21ae23b882a340a22282162086bc98d3e2b73018'], ['LOOK', '0x253c7dd074f4bacb305387f922225a4f737c08bd'], ['LOOM', '0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0'], + ['LOVE', '0x5a276aeb77bcfdac8ac6f31bbc7416ae1a85eef2'], ['LPT', '0x58b6a8a3302369daec383334672404ee733ab239'], - ['LRC', '0xef68e7c694f40c8202821edf525de3782458639f'], + ['LQD', '0xd29f0b5b3f50b07fe9a9511f7d86f4f4bac3f8c4'], + ['LRC', '0xbbbbca6a901c926f240b89eacb641d8aec7aeafd'], + ['LRC (old)', '0xef68e7c694f40c8202821edf525de3782458639f'], ['LUC', '0x5dbe296f97b23c4a6aa6183d73e574d02ba5c719'], ['LUCK', '0xfb12e3cca983b9f59d90912fd17f8d745a8b2953'], ['LUM', '0xa89b5934863447f6e4fc53b315a93e873bda69a3'], ['LUN', '0xfa05a73ffe78ef8f1a739473e462c54bae6567d9'], + ['LVN', '0xc8cac7672f4669685817cf332a33eb249f085475'], ['LYM', '0x57ad67acf9bf015e4820fbd66ea1a21bed8852ec'], ['LYM (1)', '0xc690f7c7fcffa6a82b79fab7508c466fefdfc8c5'], ['LYS', '0xdd41fbd1ae95c5d9b198174a28e04be6b3d1aa27'], @@ -675,6 +776,7 @@ const VERIFIED_TOKENS = [ ['MANA', '0x0f5d2fb29fb7d3cfee444a200298f468908cc942'], ['MART', '0xfdcc07ab60660de533b5ad26e1457b565a9d59bd'], ['MAS', '0x23ccc43365d9dd3882eab88f43d515208f832430'], + ['MBC', '0xb63ffe88c2903080ccf9ab14efa56a11e3e01273'], ['MBCASH', '0xefbb3f1058fd8e0c9d7204f532e17d7572affc3e'], ['MBRS', '0x386467f1f3ddbe832448650418311a479eecfc57'], ['MCAP', '0x93e682107d1e9defb0b5ee701c71707a4b2e46bc'], @@ -682,10 +784,12 @@ const VERIFIED_TOKENS = [ ['MCO', '0xb63b606ac810a52cca15e44bb630fd42d8d1d83d'], ['MDA', '0x51db5ad35c671a87207d88fc11d593ac0c8415bd'], ['MDS', '0x66186008c1050627f979d464eabb258860563dbe'], + ['MDS (1)', '0x92b7e4409dcf8c439f313ed1f05fdc0550d18ddd'], ['MDT', '0x814e0908b12a99fecf5bc101bb5d0b8b5cdf7d26'], ['MEDX', '0xfd1e80508f243e64ce234ea88a5fd2827c71d4b7'], - ['MESH', '0xf03045a4c8077e38f3b8e2ed33b8aee69edf869f'], - ['MESH (Meshbox)', '0x01f2acf2914860331c1cb1a9acecda7475e06af8'], + ['MESG', '0x420167d87d35c3a249b32ef6225872fbd9ab85d2'], + ['MESH', '0x01f2acf2914860331c1cb1a9acecda7475e06af8'], + ['MESH (1)', '0xf03045a4c8077e38f3b8e2ed33b8aee69edf869f'], ['MEST', '0x5b8d43ffde4a2982b9a5387cdf21d54ead64ac8d'], ['MET', '0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e'], ['METM', '0xfef3884b603c33ef8ed4183346e093a173c94da6'], @@ -693,10 +797,12 @@ const VERIFIED_TOKENS = [ ['MFT', '0xdf2c7238198ad8b389666574f2d8bc411a4b7428'], ['MFTU', '0x05d412ce18f24040bb3fa45cf2c69e506586d8e8'], ['MGO', '0x40395044ac3c0c57051906da938b54bd6557f212'], + ['MHLK', '0xe3d0a162fcc5c02c9448274d7c58e18e1811385f'], ['MIC', '0x3a1237d38d0fb94513f85d61679cad7f38507242'], ['MILC', '0xd717b75404022fb1c8582adf1c66b9a553811754'], ['MIT', '0xe23cd160761f63fc3a1cf78aa034b6cdf97d3e0c'], ['MIT (Mychatcoin)', '0xad8dd4c725de1d31b9e8f8d146089e9dc6882093'], + ['MITH', '0x3893b9422cd5d70a81edeffe3d5a1c6a978310bb'], ['MITX', '0x4a527d8fc13c5203ab24ba0944f4cb14658d1db6'], ['MKR', '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2'], ['MKT', '0x7939882b54fcf0bcae6b53dec39ad6e806176442'], @@ -707,8 +813,8 @@ const VERIFIED_TOKENS = [ ['MNTP', '0x83cee9e086a77e492ee0bb93c2b0437ad6fdeccc'], ['MOC', '0x865ec58b06bf6305b886793aa20a2da31d034e68'], ['MOD', '0x957c30ab0426e0c93cd8241e2c60392d08c6ac8e'], - ['MORE', '0x59061b6f26bb4a9ce5828a19d35cfd5a4b80f056'], - ['MORE (Mithril Ore)', '0x501262281b2ba043e2fbf14904980689cddb0c78'], + ['MORE', '0x501262281b2ba043e2fbf14904980689cddb0c78'], + ['MORE (1)', '0x59061b6f26bb4a9ce5828a19d35cfd5a4b80f056'], ['MOT', '0x263c618480dbe35c300d8d5ecda19bbb986acaed'], ['MOZO', '0x44bf22949f9cc84b61b9328a9d885d1b5c806b41'], ['MRK', '0xf453b5b9d4e0b5c62ffb256bb2378cc2bc8e8a89'], @@ -717,7 +823,7 @@ const VERIFIED_TOKENS = [ ['MRV', '0xab6cf87a50f17d7f5e1feaf81b6fe9ffbe8ebf84'], ['MSP', '0x68aa3f232da9bdc2343465545794ef3eea5209bd'], ['MTC', '0x905e337c6c8645263d3521205aa37bf4d034e745'], - ['MTC (MTC Mesh Network)', '0xdfdc0d82d96f8fd40ca0cfb4a288955becec2088'], + ['MTC (1)', '0xdfdc0d82d96f8fd40ca0cfb4a288955becec2088'], ['MTH', '0xaf4dce16da2877f8c9e00544c93b62ac40631f16'], ['MTL', '0xf433089366899d83a9f26a773d59ec7ecf30355e'], ['MTN', '0x41dbecc1cdc5517c6f76f6a6e836adbee2754de3'], @@ -726,6 +832,7 @@ const VERIFIED_TOKENS = [ ['MTX', '0x0af44e2784637218dd1d32a322d44e603a8f0c6a'], ['MUSD', '0xa52383b665b91dce42dd4b6d1e0fb37d3effe489'], ['MUXE', '0x515669d308f887fd83a471c7764f5d084886d34d'], + ['MVG', '0x71396a6410249725c5609646c4e449c6c4d41e27'], ['MVL', '0xa849eaae994fb86afa73382e9bd88c2b6b18dc71'], ['MVP', '0x8a77e40936bbc27e80e9a3f526368c967869c86d'], ['MWAT', '0x6425c6be902d692ae2db752b3c268afadb099d3b'], @@ -738,8 +845,8 @@ const VERIFIED_TOKENS = [ ['NBAI', '0x17f8afb63dfcdcc90ebe6e84f060cc306a98257d'], ['NBC', '0x9f195617fa8fbad9540c5d113a99a0a0172aaedc'], ['NCASH', '0x809826cceab68c387726af962713b64cb5cb3cca'], - ['NCC', '0x9344b383b1d59b5ce3468b234dab43c7190ba735'], - ['NCC (NeuroChain)', '0x5d48f293baed247a2d0189058ba37aa238bd4725'], + ['NCC', '0x5d48f293baed247a2d0189058ba37aa238bd4725'], + ['NCC (1)', '0x9344b383b1d59b5ce3468b234dab43c7190ba735'], ['NCT', '0x9e46a38f5daabe8683e10793b06749eef7d733d1'], ['NDC', '0xa54ddc7b3cce7fc8b1e3fa0256d0db80d2c10970'], ['NDX', '0x1966d718a565566e8e202792658d7b5ff4ece469'], @@ -752,6 +859,8 @@ const VERIFIED_TOKENS = [ ['NGC', '0x72dd4b6bd852a3aa172be4d6c5a6dbec588cf131'], ['NIMFA', '0xe26517a9967299453d3f1b48aa005e6127e67210'], ['NIO', '0x5554e04e76533e1d14c52f05beef6c9d329e1e30'], + ['NIO (1)', '0xcc2ad789f459bc73e5fb33364964b658a62c1ee7'], + ['NLYA', '0xcee4019fd41ecdc8bae9efdd20510f4b6faa6197'], ['NMR', '0x1776e1f26f98b1a5df9cd347953a26dd3cb46671'], ['NOAH', '0x58a4884182d9e835597f405e5f258290e46ae7c2'], ['NOBS', '0xf4faea455575354d2699bc209b0a65ca99f69982'], @@ -760,12 +869,14 @@ const VERIFIED_TOKENS = [ ['NPER', '0x4ce6b362bc77a24966dda9078f9cef81b3b886a7'], ['NPX', '0x28b5e12cce51f15594b0b91d5b5adaa70f684a02'], ['NPXS', '0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3'], + ['NRM', '0x000000085824f23a070c2474442ed014c0e46b58'], ['NTK', '0x5d4d57cd06fa7fe99e26fdc481b468f77f05073c'], - ['NTK (Neurotoken)', '0x69beab403438253f13b6e92db91f7fb849258263'], + ['NTK (1)', '0x69beab403438253f13b6e92db91f7fb849258263'], ['NTO', '0x8a99ed8a1b204903ee46e733f2c1286f6d20b177'], ['NTWK', '0x2233799ee2683d75dfefacbcd2a26c78d34b470d'], ['NUG', '0x245ef47d4d0505ecf3ac463f4d81f41ade8f1fd1'], ['NULS', '0xb91318f35bdb262e9423bc7c7c2a3a93dd93c92c'], + ['NUSD', '0x0c6144c16af288948c8fdb37fd8fec94bff3d1d9'], ['NxC', '0x45e42d659d9f9466cd5df622506033145a9b89bc'], ['NXX', '0x7627de4b93263a6a7570b8dafa64bae812e5c394'], ['NXX OLD', '0x5c6183d10a00cd747a6dbb5f658ad514383e9419'], @@ -774,11 +885,14 @@ const VERIFIED_TOKENS = [ ['OCC', '0x0235fe624e044a05eed7a43e16e3083bc8a4287a'], ['OCN', '0x4092678e4e78230f46a1534c0fbc8fa39780892b'], ['ODE', '0xbf52f2ab39e26e0951d2a02b49b7702abe30406a'], + ['OGK', '0x5f4506db5b568e103532f84d32a285cdd5aa5751'], ['OGN', '0x8207c1ffc5b6804f6024322ccf34f29c3541ae26'], ['OHNI', '0x6f539a9456a5bcb6334a1a41207c3788f5825207'], - ['OHNI (OHNI)', '0x7f2176ceb16dcb648dc924eff617c3dc2befd30d'], + ['OHNI (1)', '0x7f2176ceb16dcb648dc924eff617c3dc2befd30d'], + ['OIKOS', '0x21e13cb3f3f26f92a62ac7adab4093e8997d1fb1'], ['OJX', '0xbeef546ac8a4e0a80dc1e2d696968ef54138f1d4'], ['OLD_MKR', '0xc66ea802717bfb9833400264dd12c2bceaa34a6d'], + ['OLDPCL', '0x3618516f45cd3c913f81f9987af41077932bc40d'], ['OLE', '0x9d9223436ddd466fc247e9dbbd20207e640fef58'], ['OLT', '0x64a60493d888728cf42616e034a0dfeae38efcf0'], ['OMG', '0xd26114cd6ee289accf82350c8d8487fedb8a0c07'], @@ -790,41 +904,48 @@ const VERIFIED_TOKENS = [ ['ONL', '0x6863be0e7cf7ce860a574760e9020d519a8bdc47'], ['ONOT', '0xb31c219959e06f9afbeb36b388a4bad13e802725'], ['OPEN', '0x69c4bb240cf05d51eeab6985bab35527d04a8c64'], - ['OPEN (OPEN)', '0xe9de1c630753a15d7021cc563429c21d4887506f'], + ['OPEN (1)', '0xe9de1c630753a15d7021cc563429c21d4887506f'], + ['OPQ', '0x77599d2c6db170224243e255e6669280f11f1473'], ['OPT', '0x4355fc160f74328f9b383df2ec589bb3dfd82ba0'], ['OPTI', '0x832904863978b94802123106e6eb491bdf0df928'], + ['OR', '0x3ff9cebbeaa7bcc48a952a011a02a22a1fdd1c62'], ['ORBS', '0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa'], ['ORCA', '0x6f59e0461ae5e2799f1fb3847f05a63b16d0dbf8'], ['ORI', '0xd2fa8f92ea72abb35dbd6deca57173d22db2ba49'], ['ORME', '0x516e5436bafdc11083654de7bb9b95382d08d5de'], ['ORME (1)', '0xc96df921009b790dffca412375251ed1a2b75c60'], ['ORS', '0xeb9a4b185816c354db92db09cc3b50be60b901b6'], + ['ORX', '0x4e84a65b5664d33b67750771f8beaec458bd6729'], ['OST', '0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca'], ['OTN', '0x881ef48211982d01e2cb7092c915e647cd40d85c'], ['OWN', '0x170b275ced089fffaebfe927f445a350ed9160dc'], ['OWT', '0xc2494604e9dcefa2a70dcebf81e6d7be064a334e'], ['Ox Fina', '0x65a15014964f2102ff58647e16a16a6b9e14bcf6'], + ['P2PS', '0x4527a3b4a8a150403090a99b87effc96f2195047'], ['PAI', '0xb9bb08ab7e9fa0a1356bd4a39ec0ca267e03b0b3'], ['PAL', '0xfedae5642668f8636a11987ff386bfd215f942ee'], ['PARETO', '0xea5f88e54d982cbb0c441cde4e79bc305e5b43bc'], - ['PASS', '0xee4458e052b533b1aabd493b5f8c4d85d7b263dc'], - ['PASS (PASS Token)', '0x77761e63c05aee6648fdaeaa9b94248351af9bcd'], + ['PASS', '0x77761e63c05aee6648fdaeaa9b94248351af9bcd'], + ['PASS (1)', '0xee4458e052b533b1aabd493b5f8c4d85d7b263dc'], ['PAT', '0xf3b3cad094b89392fce5fafd40bc03b80f2bc624'], ['PATENTS', '0x694404595e3075a942397f466aacd462ff1a7bd0'], ['PATH', '0xf813f3902bbc00a6dce378634d3b79d84f9803d7'], ['PATR', '0x9fba684d77d2d6a1408c24b60a1f5534e71f5b75'], ['PAX', '0x8e870d67f660d95d5be530380d0ec0bd388289e1'], + ['PAXG', '0x45804880de22913dafe09f4980848ece6ecbaf78'], ['PAY', '0xb97048628db6b661d4c2aa833e95dbe1a905b280'], ['PBL', '0x55648de19836338549130b1af587f16bea46f66b'], ['PBT', '0xf4c07b1865bc326a3c01339492ca7538fd038cc0'], ['PCH', '0xe3f4b4a5d91e5cb9435b947f090a319737036312'], - ['PCH (PITCH)', '0xfcac7a7515e9a9d7619fa77a1fa738111f66727e'], - ['PCL', '0x3618516f45cd3c913f81f9987af41077932bc40d'], + ['PCH (1)', '0xfcac7a7515e9a9d7619fa77a1fa738111f66727e'], + ['PCL', '0x0f02e27745e3b6e9e1310d19469e2b5d7b5ec99a'], ['PCLOLD', '0x53148bb4551707edf51a1e8d7a93698d18931225'], ['PDATA', '0x0db03b6cde0b2d427c64a04feafd825938368f1f'], ['PEG', '0x8ae56a6850a7cbeac3c3ab2cb311e7620167eac8'], ['PEP', '0xbb0ef9e617faddf54b8d16e29046f72b4d3ec77f'], + ['PESO', '0x30fef258d2728f9d1edf038059c725faf785697e'], ['PET', '0x5884969ec0480556e11d119980136a4c17edded1'], + ['PETH', '0xf53ad2c6851052a81b42133467480961b2321c09'], ['PETRO', '0xec18f898b4076a3e18f1089d33376cc380bde61d'], ['PEXT', '0x55c2a0c171d920843560594de3d6eecc09efc098'], ['PFR', '0x2fa32a39fc1c399e0cc7b2935868f5165de7ce97'], @@ -858,14 +979,16 @@ const VERIFIED_TOKENS = [ ['PRG', '0x7728dfef5abd468669eb7f9b48a7f70a501ed29d'], ['PRIX', '0x3adfc4999f77d04c8341bac5f3a76f58dff5b37a'], ['PRL', '0x1844b21593262668b7248d0f57a220caaba46ab9'], - ['PRO', '0x9041fe5b3fdea0f5e4afdc17e75180738d877a01'], - ['PRO (Propy)', '0x226bb599a12c826476e3a771454697ea52e9e220'], + ['PRO', '0x226bb599a12c826476e3a771454697ea52e9e220'], + ['PRO (1)', '0x9041fe5b3fdea0f5e4afdc17e75180738d877a01'], ['PRON', '0xa3149e0fa0061a9007faf307074cdcd290f0e2fd'], - ['PRPS', '0xd94f2778e2b3913c53637ae60647598be588c570'], + ['PROPS', '0x6fe56c0bcdd471359019fcbc48863d6c3e9d4f41'], + ['PRPS', '0x7641b2ca9ddd58addf6e3381c1f994aac5f1a32f'], ['PRPS (1)', '0xe40c374d8805b1dd58cdceff998a2f6920cb52fd'], - ['PRPS (2)', '0x7641b2ca9ddd58addf6e3381c1f994aac5f1a32f'], + ['PRPS (2)', '0xd94f2778e2b3913c53637ae60647598be588c570'], ['PRS', '0x163733bcc28dbf26b41a8cfa83e369b5b3af741b'], ['PRSP', '0x0c04d4f331da8df75f9e2e271e3f3f1494c66c36'], + ['PSDN', '0x5f85c60187ab233ca6e750731d15e7efd061fbde'], ['PST', '0x5d4abc77b8405ad177d8ac6682d584ecbfd46cec'], ['PT', '0x66497a283e0a007ba3974e837784c6ae323447de'], ['PTC', '0x2a8e98e256f32259b5e5cb55dd63c8e891950666'], @@ -880,7 +1003,8 @@ const VERIFIED_TOKENS = [ ['PYLNT', '0x7703c35cffdc5cda8d27aa3df2f9ba6964544b6e'], ['QASH', '0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6'], ['QAU', '0x671abbe5ce652491985342e85428eb1b07bc6c64'], - ['QBIT', '0xcb5ea3c190d8f82deadf7ce5af855ddbf33e3962'], + ['QBIT', '0x1602af2c782cc03f9241992e243290fccf73bb13'], + ['QBIT (Old)', '0xcb5ea3c190d8f82deadf7ce5af855ddbf33e3962'], ['QBX', '0x2467aa6b5a2351416fd4c3def8462d841feeecec'], ['QKC', '0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664'], ['QNT', '0x4a220e6096b25eadb88358cb44068a3248254675'], @@ -892,12 +1016,13 @@ const VERIFIED_TOKENS = [ ['QUN', '0x264dc2dedcdcbb897561a57cba5085ca416fb7b4'], ['QVT', '0x1183f92a5624d68e85ffb9170f16bf0443b4c242'], ['R', '0x48f775efbe4f5ece6e0df2f7b5932df56823b990'], + ['RAE', '0xe5a3229ccb22b6484594973a03a3851dcd948756'], ['RAO', '0x45edb535942a8c84d9f4b5d37e1b25f91ea4804c'], ['RATING', '0xe8663a64a96169ff4d95b4299e7ae9a76b905b31'], ['RBLX', '0xfc2c4d8f95002c14ed0a7aa65102cac9e5953b5e'], ['RCN', '0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6'], - ['RCT', '0x2a3aa9eca41e720ed46b5a70d6c37efa47f768ac'], - ['RCT (RealChain)', '0x13f25cd52b21650caa8225c9942337d914c9b030'], + ['RCT', '0x13f25cd52b21650caa8225c9942337d914c9b030'], + ['RCT (1)', '0x2a3aa9eca41e720ed46b5a70d6c37efa47f768ac'], ['RDN', '0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6'], ['REA', '0x767ba2915ec344015a7938e3eedfec2785195d05'], ['REAL', '0x9214ec02cb71cba0ada6896b8da260736a67ab10'], @@ -909,9 +1034,11 @@ const VERIFIED_TOKENS = [ ['REMI', '0x13cb85823f78cff38f0b0e90d3e975b8cb3aad64'], ['REN', '0x408e41876cccdc0f92210600ef50372656052a38'], ['REP', '0x1985365e9f78359a9b6ad760e32412f4a445e862'], + ['REP (1)', '0xe94327d07fc17907b4db788e5adf2ed424addff6'], ['REQ', '0x8f8221afbb33998d8584a2b05749ba73c37a938a'], ['REX', '0xf05a9382a4c3f29e2784502754293d88b835109c'], ['RFR', '0xd0929d411954c47438dc1d871dd6081f5c5e149c'], + ['RFX', '0xf4c571fb6dd704e58561cdd275fa4b80cfe82f76'], ['RGS', '0x4c383bdcae52a6e1cb810c76c70d6f31a249ec9b'], ['RHOC', '0x168296bb09e24a88805cb9c33356536b980d3fc5'], ['RING', '0x86e56f3c89a14528858e58b3de48c074538baf2c'], @@ -934,23 +1061,28 @@ const VERIFIED_TOKENS = [ ['ROCK2PAY', '0x0e3de3b0e3d617fd8d1d8088639ba877feb4d742'], ['ROK', '0xc9de4b7f0c3d991e967158e4d4bfa4b51ec0b114'], ['ROUND', '0x4993cb95c7443bdc06155c5f5688be9d8f6999a5'], + ['RPE', '0xccc85aa8999505d6f886a32da4a107bbe0d1de9e'], ['RPL', '0xb4efd85c19999d84251304bda99e90b92300bd93'], ['RTB', '0xec491c1088eae992b7a214efb0a266ad0927a72a'], + ['RTC', '0x7a5599b97e8c4abb5dd06eba0e9d1f75af818db9'], ['RTH', '0x3fd8f39a962efda04956981c31ab89fab5fb8bc8'], ['RTN', '0x54b293226000ccbfc04df902eec567cb4c35a903'], ['RUFF', '0xf278c1ca969095ffddded020290cf8b5c424ace2'], ['RUNE', '0xdee02d94be4929d26f67b64ada7acf1914007f10'], ['RVL', '0x41f615e24fabd2b097a320e9e6c1f448cb40521c'], ['RVT', '0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244'], + ['RYLT', '0xd30a2e9347ad48ea208ee563a9cdfd80e962a727'], ['S-A-PAT', '0x1ec8fe51a9b6a3a6c427d17d9ecc3060fbc4a45c'], ['S-ETH', '0x3eb91d237e491e0dee8582c402d85cb440fb6b54'], ['SAC', '0xabc1280a0187a2020cc675437aed400185f86db6'], + ['SAI', '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359'], ['SALT', '0x4156d3342d5c385a87d264f90653733592000581'], ['SAN', '0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098'], ['SCANDI', '0x78fe18e41f436e1981a3a60d1557c8a7a9370461'], ['SCL', '0xd7631787b4dcc87b1254cfd1e5ce48e96823dee8'], ['SCRL', '0x24dcc881e7dd730546834452f21872d5cb4b5293'], ['SEELE', '0xb1eef147028e9f480dbc5ccaa3277d417d1b85f0'], + ['SELF', '0x67ab11058ef23d0a19178f61a050d3c38f81ae21'], ['SENC', '0xa13f0743951b4f6e3e3aa039f682e17279f52bc3'], ['SenSatorI', '0x4ca74185532dc1789527194e5b9c866dd33f4e82'], ['SENSE', '0x6745fab6801e376cd24f03572b9c9b0d4edddccf'], @@ -962,30 +1094,32 @@ const VERIFIED_TOKENS = [ ['SGP', '0x33c623a2baafeb8d15dfaf3ce44095efec83d72c'], ['SGR', '0xcb5a05bef3257613e984c17dbcf039952b6d883f'], ['SGT', '0x37427576324fe1f3625c9102674772d7cf71377d'], - ['SGT (SGT)', '0xd248b0d48e44aaf9c49aea0312be7e13a6dc1468'], + ['SGT (1)', '0xd248b0d48e44aaf9c49aea0312be7e13a6dc1468'], ['SHIP', '0xe25b0bba01dc5630312b6a21927e578061a13f55'], ['SHIT', '0xef2e9966eb61bb494e5375d5df8d67b7db8a780d'], ['SHL', '0x8542325b72c6d9fc0ad2ca965a78435413a915a0'], ['SHP', '0xef2463099360a085f1f10b076ed72ef625497a06'], + ['SIBU', '0x980e45ab37c6bcaf93fe911b3e207e08a3a60b5e'], ['SIFT', '0x8a187d5285d316bcbc9adafc08b51d70a0d8e000'], ['SIG', '0x6888a16ea9792c15a4dcf2f6c623d055c8ede792'], ['SKB', '0x4af328c52921706dcb739f25786210499169afe6'], ['SKE', '0x13db74b3cf512f65c4b91683940b4f3955e05085'], ['SKIN', '0x2bdc0d42996017fce214b21607a515da41a9e0c5'], - ['SKM', '0xd99b8a7fa48e25cce83b81812220a3e03bf64e5f'], + ['SKM', '0x048fe49be32adfc9ed68c37d32b5ec9df17b3603'], + ['SKM (1)', '0xd99b8a7fa48e25cce83b81812220a3e03bf64e5f'], ['SKO1', '0x4994e81897a920c0fea235eb8cedeed3c6fff697'], ['SKR', '0x4c382f8e09615ac86e08ce58266cc227e7d4d913'], - ['SKRP', '0xfdfe8b7ab6cf1bd1e3d14538ef40686296c42052'], - ['SKRP (1)', '0x324a48ebcbb46e61993931ef9d35f6697cd2901b'], - ['SKRP (2)', '0x6e34d8d84764d40f6d7b39cd569fd017bf53177d'], + ['SKRP', '0x324a48ebcbb46e61993931ef9d35f6697cd2901b'], + ['SKRP (1)', '0x6e34d8d84764d40f6d7b39cd569fd017bf53177d'], + ['SKRP (2)', '0xfdfe8b7ab6cf1bd1e3d14538ef40686296c42052'], ['SKYM', '0x7297862b9670ff015192799cc849726c88bf1d77'], ['SLT', '0x7a5ff295dc8239d5c2374e4d894202aaf029cab6'], ['SLY', '0x7928c8abf1f74ef9f96d4d0a44e3b4209d360785'], ['SMART', '0x6f6deb5db0c4994a8283a01d6cfeeb27fc3bbe9c'], ['SMS', '0x39013f961c378f02c2b82a6e1d31e9812786fd9d'], - ['SMT', '0x78eb8dc641077f049f910659b6d580e80dc4d237'], - ['SMT (Smart Node)', '0x2dcfaac11c9eebd8c6c42103fe9e2a6ad237af27'], - ['SMT (SmartMesh)', '0x55f93985431fc9304077687a35a1ba103dc1e081'], + ['SMT', '0x2dcfaac11c9eebd8c6c42103fe9e2a6ad237af27'], + ['SMT (1)', '0x55f93985431fc9304077687a35a1ba103dc1e081'], + ['SMT (2)', '0x78eb8dc641077f049f910659b6d580e80dc4d237'], ['SNBL', '0x198a87b3114143913d4229fb0f6d4bcb44aa8aff'], ['SNC', '0xf4134146af2d511dd5ea8cdb1c4ac88c57d60404'], ['SND', '0xf333b2ace992ac2bbd8798bf57bc65a06184afba'], @@ -1005,13 +1139,17 @@ const VERIFIED_TOKENS = [ ['SPANK', '0x42d6622dece394b54999fbd73d108123806f6a18'], ['SPARC', '0x58bf7df57d9da7113c4ccb49d8463d4908c735cb'], ['SPARTA', '0x24aef3bf1a47561500f9430d74ed4097c47f51f2'], + ['SPAZ', '0x8f9bfe5b6a5c3fea8c64ad41a5cf6f60ec4aa47c'], + ['SPC', '0x8069080a922834460c3a092fb2c1510224dc066b'], ['SPD', '0x1dea979ae76f26071870f824088da78979eb91c8'], ['SPF', '0x85089389c14bd9c77fc2b8f0c3d1dc3363bf06ef'], ['SPHTX', '0x3833dda0aeb6947b98ce454d89366cba8cc55528'], ['SPICE', '0x0324dd195d0cd53f9f07bee6a48ee7a20bad738f'], + ['SPIRIT', '0x92d7a89405ea3cc605a467e834236e09df60bf16'], ['SPN', '0x20f7a3ddf244dc9299975b4da1c39f8d5d75f05a'], ['SPX', '0x05aaaa829afa407d83315cded1d45eb16025910c'], ['SRN', '0x68d57c9a1c35f63e2c83ee8e49a64e9d70528d25'], + ['SRX', '0x32f3b8a00b6912d0314be212fe9538b7b9430c12'], ['SS', '0xb15fe5a123e647ba594cea7a1e648646f95eb4aa'], ['SS (1)', '0xbbff862d906e348e9946bfb2132ecb157da3d4b4'], ['SSH', '0x6e2050cbfb3ed8a4d39b64cc9f47e711a03a5a89'], @@ -1023,6 +1161,8 @@ const VERIFIED_TOKENS = [ ['STB', '0x09bca6ebab05ee2ae945be4eda51393d94bf7b99'], ['STC', '0x629aee55ed49581c33ab27f9403f7992a289ffd5'], ['STK', '0xae73b38d1c9a8b274127ec30160a4927c4d71824'], + ['STL', '0xc1ad68c43508dd5addb8d0ac0927dbe752d149d6'], + ['STM', '0x302ce6674a16b54ba1b8a49fed64c471ede6c174'], ['STN', '0x599346779e90fc3f5f997b5ea715349820f91571'], ['STORJ', '0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac'], ['STORM', '0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433'], @@ -1037,40 +1177,53 @@ const VERIFIED_TOKENS = [ ['SUR', '0xe120c1ecbfdfea7f0a8f0ee30063491e8c26fedf'], ['sUSD', '0x57ab1e02fee23774580c119740129eac7081e9d3'], ['SVD', '0xbdeb4b83251fb146687fa19d1c660f99411eefe3'], + ['SWAP', '0xc958e9fb59724f8b0927426a8836f1158f0d03cf'], ['SWFTC', '0x0bb217e40f8a5cb79adf04e1aab60e5abd0dfc1e'], ['SWM', '0x9e88613418cf03dca54d6a2cf6ad934a78c7a17a'], ['SWT', '0xb9e7f8568e08d5659f5d29c4997173d84cdf2607'], ['SXDT', '0x12b306fa98f4cbb8d4457fdff3a0a0a56f07ccdf'], + ['SXR', '0xfcdae8771f8d28e3b9027ab58f4a20749767a097'], ['SXUT', '0x2c82c73d5b34aa015989462b2948cd616a37641f'], ['SYN', '0x10b123fddde003243199aad03522065dc05827a0'], ['TaaS', '0xe7775a6e9bcf904eb39da2b68c5efb4f9360e08c'], ['TALAO', '0x1d4ccc31dab6ea20f461d329a0562c1c58412515'], ['TAN', '0x2c36204a0712a2a50e54a62f7c4f01867e78cb53'], ['TAU', '0xc27a2f05fa577a83ba0fdb4c38443c0718356501'], + ['TAUD', '0x00006100f7090010005f1bd7ae6122c3c2cf0090'], + ['TAUR', '0x64786063a352b399d44de2875909d1229f120ebe'], + ['TBC', '0x627974847450c45b60b3fe3598f4e6e4cf945b9a'], ['TBC2', '0xfaccd5fc83c3e4c3c1ac1ef35d15adf06bcf209c'], ['TBT', '0xafe60511341a37488de25bef351952562e31fcc1'], ['TBX', '0x3a92bd396aef82af98ebc0aa9030d25a23b11c6b'], ['TCA', '0xfa0ef5e034cae1ae752d59bdb8adcde37ed7ab97'], + ['TCAD', '0x00000100f2a2bd000715001920eb70d229700085'], ['TCH', '0x9972a0f24194447e73a7e8b6cd26a52e02ddfad5'], ['TCNX', '0x28d7f432d24ba6020d1cbd4f28bedc5a82f24320'], + ['TCST', '0x9910f4aed4a7550a4120ad7da8df8b56e91197fa'], + ['TCT', '0xed82730312babb41367e060911f798002ffa445f'], ['TDH', '0x2a1dbabe65c595b0022e75208c34014139d5d357'], ['TEAM', '0x1c79ab32c66acaa1e9e81952b8aaa581b43e54e7'], + ['TECH', '0xa1ba7186eec1be5114b0cf49b95b23adc4131b51'], ['TEL', '0x85e076361cc813a908ff672f9bad1541474402b2'], - ['TEL (Meditel)', '0xec32a9725c59855d841ba7d8d9c99c84ff754688'], + ['TEL (1)', '0xec32a9725c59855d841ba7d8d9c99c84ff754688'], ['TEN', '0xdd16ec0f66e54d453e6756713e533355989040e4'], + ['TENX', '0x515ba0a2e286af10115284f151cf398688a69170'], ['TFD', '0xe5f166c0d8872b68790061317bb6cca04582c912'], ['TFL', '0xa7f976c360ebbed4465c2855684d1aae5271efa9'], ['TGAME', '0xf8e06e4e4a80287fdca5b02dccecaa9d0954840f'], + ['TGBP', '0x00000000441378008ea67f4284a57932b1c000a5'], ['TGT', '0xac3da587eac229c9896d919abc235ca4fd7f72c1'], + ['TGT (1)', '0xf96aa656ec0e0ac163590db372b430cf3c0d61ca'], ['Thar', '0x96c30d5499ef6ea96a9c221bc18bc39d29c97f27'], ['THETA', '0x3883f5e181fccaf8410fa61e12b59bad963fb645'], + ['THKD', '0x0000852600ceb001e08e00bc008be620d60031f2'], ['THR', '0x1cb3209d45b2a60b7fbca1ccdbf87f674237a4aa'], ['THRT', '0x4f27053f32eda8af84956437bc00e5ffa7003287'], ['THUG', '0xfe7b915a0baa0e79f85c5553266513f7c1c03ed0'], - ['TIC', '0x72430a612adc007c50e3b6946dbb1bb0fd3101d1'], - ['TIC (Trust Invest)', '0x614b9802d45aa1bc2282651dc1408632f9027a6e'], - ['TICO', '0xa5db1d6f7a0d5bccc17d0bfd39d7af32d5e5edc6'], - ['TICO (1)', '0x7f4b2a690605a7cbb66f7aa6885ebd906a5e2e9e'], + ['TIC', '0x614b9802d45aa1bc2282651dc1408632f9027a6e'], + ['TIC (1)', '0x72430a612adc007c50e3b6946dbb1bb0fd3101d1'], + ['TICO', '0x7f4b2a690605a7cbb66f7aa6885ebd906a5e2e9e'], + ['TICO (1)', '0xa5db1d6f7a0d5bccc17d0bfd39d7af32d5e5edc6'], ['TIE', '0x999967e2ec8a74b7c8e9db19e039d920b31d39d0'], ['TIG', '0xeee2d00eb7deb8dd6924187f5aa3496b7d06e62a'], ['TIME', '0x6531f133e6deebe7f2dce5a0441aa7ef330b4e53'], @@ -1083,6 +1236,7 @@ const VERIFIED_TOKENS = [ ['TLX', '0xb3616550abc8af79c7a5902def9efa3bc9a95200'], ['TMT', '0x3209f98bebf0149b769ce26d71f7aea8e435efea'], ['TMTG', '0x10086399dd8c1e3de736724af52587a2044c9fa2'], + ['TNB', '0xf7920b0768ecb20a123fac32311d07d193381d6f'], ['TNS', '0xb0280743b44bf7db4b6be482b2ba7b75e5da096c'], ['TNT', '0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8'], ['TOK', '0x9a49f02e128a8e989b443a8f94843c0918bf45e7'], @@ -1091,6 +1245,7 @@ const VERIFIED_TOKENS = [ ['TRAC', '0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f'], ['TRAK', '0x12759512d326303b45f1cec8f7b6fd96f387778e'], ['TRC', '0xcb3f902bf97626391bf8ba87264bbc3dc13469be'], + ['TRC (1)', '0xdb52a87cda28eda00f8add1c79c9db4a50a70457'], ['TRCN', '0x566fd7999b1fc3988022bd38507a48f0bcf22c77'], ['TRCT', '0x30cecb5461a449a90081f5a5f55db4e048397bab'], ['TRDT', '0x33f90dee07c6e8b9682dd20f73e6c358b2ed0f03'], @@ -1105,8 +1260,10 @@ const VERIFIED_TOKENS = [ ['TUSD (OLD)', '0x8dd5fbce2f6a956c3022ba3663759011dd51e73e'], ['TWN', '0x2ef1ab8a26187c58bb8aaeb11b2fc6d25c5c0716'], ['TWNKL', '0xfbd0d1c77b501796a35d86cf91d65d9778eee695'], + ['UBEX', '0x6704b673c70de9bf74c8fba4b4bd748f0e2190e1'], ['UBT', '0x8400d94a5cb0fa0d041a3788e395285d61c9ee5e'], ['UCASH', '0x92e52a1a235d9a103d970901066ce910aacefd37'], + ['UCBI', '0x2adba23cf1252de095aced801e758b369ec10426'], ['UCN', '0xaaf37055188feee4869de63464937e683d61b2a1'], ['UFR', '0xea097a2b1db00627b2fa17460ad260c016016977'], ['UKG', '0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b'], @@ -1117,14 +1274,18 @@ const VERIFIED_TOKENS = [ ['UPP', '0xc86d054809623432210c107af2e3f619dcfbf652'], ['UQC', '0xd01db73e047855efb414e6202098c4be4cd2423b'], ['URB', '0x931684139f756c24ec0731e9f74fe50e5548ddef'], + ['USD-G', '0xfb0aaa0432112779d9ac483d9d5e3961ece18eec'], ['USDC', '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], ['USDM', '0xd760addfb24d9c01fe4bfea7475c5e3636684058'], ['USDS', '0xa4bdb11dc0a2bec88d24a3aa1e6bb17201112ebe'], ['USDT', '0xdac17f958d2ee523a2206206994597c13d831ec7'], + ['USDx', '0xeb269732ab75a6fd61ea60b06fe994cd32a83549'], ['UTK', '0x70a72833d6bf7f508c8224ce59ea1ef3d0ea3a38'], ['UTNP', '0x9e3319636e2126e3c0bc9e3134aec5e1508a46c7'], ['UTT', '0x16f812be7fff02caf662b85d5d58a5da6572d4df'], ['UUU', '0x3543638ed4a9006e4840b105944271bcea15605d'], + ['VALOR', '0x297e4e5e59ad72b1b0a2fd446929e76117be0e0a'], + ['VBX', '0x6dccf9c0ab71dac26b7f7886e43a2b433806c590'], ['VD', '0x9a9bb9b4b11bf8eccff84b58a6ccccd4058a7f0d'], ['VDG', '0x57c75eccc8557136d32619a191fbcdc88560d711'], ['VDOC', '0x82bd526bdb718c6d4dd2291ed013a5186cae2dca'], @@ -1133,9 +1294,11 @@ const VERIFIED_TOKENS = [ ['VEN', '0xd850942ef8811f2a866692a623011bde52a462c1'], ['VENUS', '0xebed4ff9fe34413db8fc8294556bbd1528a4daca'], ['VERI', '0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374'], + ['VERSI', '0x1b879d3812f2ade1214264655b473910e0caf1e6'], ['VIB', '0x2c974b2d0ba1716e644c1fc59982a89ddd2ff724'], ['VIBE', '0xe8ff5c9c75deb346acac493c463c8950be03dfba'], ['VIBEX', '0x882448f83d90b2bf477af2ea79327fdea1335d93'], + ['VID', '0x2c9023bbc572ff8dc1228c7858a280046ea8c9e5'], ['VIDT', '0x445f51299ef3307dbd75036dd896565f5b4bf7a5'], ['VIEW', '0xf03f8d65bafa598611c3495124093c56e8f638f0'], ['VIKKY', '0xd2946be786f35c3cc402c29b323647abda799071'], @@ -1144,6 +1307,8 @@ const VERIFIED_TOKENS = [ ['VITE', '0x1b793e49237758dbd8b752afc9eb4b329d5da016'], ['VIU', '0x519475b31653e46d20cd09f9fdcf3b12bdacb4f5'], ['VLD', '0x922ac473a3cc241fd3a0049ed14536452d58d73c'], + ['VMC', '0xd811250b7fe83150cbb3d70a892fce6189fb3e08'], + ['VNTY', '0xc650f5514ae1a3a27930922145ce49e8a91b91ab'], ['VOC', '0xc3bc9eb71f75ec439a6b6c8e8b746fcf5b62f703'], ['VOISE', '0x83eea00d838f92dec4d1475697b9f4d3537b56e3'], ['VRE', '0xf722b01910f93b84eda9ca128b9f05821a41eae1'], @@ -1158,6 +1323,7 @@ const VERIFIED_TOKENS = [ ['WAK', '0x9f6513ed2b0de89218e97db4a5115ba04be449f1'], ['WATT', '0x829a4ca1303383f1082b6b1fb937116e4b3b5605'], ['WAX', '0x39bb259f66e1c59d5abef88375979b4d20d98022'], + ['WAY', '0x217f96737b39f9b9211767cb6aef5dbae2fe9402'], ['WBA', '0x74951b677de32d596ee851a233336926e6a2cd09'], ['WBTC', '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'], ['WCN', '0x8f936fe0faf0604c9c0ef2406bde0a65365515d6'], @@ -1177,16 +1343,18 @@ const VERIFIED_TOKENS = [ ['WMK', '0xbfbe5332f172d77811bc6c272844f3e54a7b23bb'], ['WNK', '0xd73a66b8fb26be8b0acd7c52bd325054ac7d468b'], ['WOC', '0xf9d9702d031407f425a4412682fdc56b07d05262'], - ['WOLK', '0xf6b55acbbc49f4524aa48d19281a9a77c54de10f'], - ['WOLK (WOLK)', '0x728781e75735dc0962df3a51d7ef47e798a7107e'], + ['WOLK', '0x728781e75735dc0962df3a51d7ef47e798a7107e'], + ['WOLK (1)', '0xf6b55acbbc49f4524aa48d19281a9a77c54de10f'], ['WORK', '0xa686514faf7d54289266f483d1e4852c99e13ec7'], - ['WORK (workTOKEN)', '0xd18e454d844eb0009d32e07a0cde89e18d64cfb4'], + ['WORK (1)', '0xd18e454d844eb0009d32e07a0cde89e18d64cfb4'], ['WPC', '0x62087245087125d3db5b9a3d713d78e7bbc31e54'], ['WPR', '0x4cf488387f035ff08c371515562cba712f9015d4'], ['WRC', '0x72adadb447784dd7ab1f472467750fc485e4cb2d'], ['WRK', '0x71e8d74ff1c923e369d0e70dfb09866629c4dd35'], + ['WSS', '0x1d9a3cef66b01d44003b9db0e00ec3fd44746988'], ['WTC', '0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74'], ['WTT', '0x84119cb33e8f590d75c2d6ea4e6b0741a7494eda'], + ['WWX', '0x8a91eecd3f6b6b7833fd6961e7f654c3d016a068'], ['WYS', '0xd8950fdeaa10304b7a7fd03a2fc66bc39f3c711a'], ['WYV', '0x056017c55ae7ae32d12aef7c679df83a85ca75ff'], ['X8X', '0x910dfc18d6ea3d6a7124a6f8b5458f281060fa4c'], @@ -1205,6 +1373,7 @@ const VERIFIED_TOKENS = [ ['XGM', '0x533ef0984b2faa227acc620c67cce12aa39cd8cd'], ['XGT', '0x30f4a3e0ab7a76733d8b60b89dd93c3d0b4c9e2f'], ['XID', '0xb110ec7b1dcb8fab8dedbf28f53bc63ea5bedd84'], + ['XLX', '0x1d086b868d78040635cb8600ba733f12db48cb42'], ['XMCT', '0x44449fa4d607f807d1ed4a69ad942971728391c8'], ['XMX', '0x0f8c45b896784a1e408526b9300519ef8660209c'], ['XNK', '0xbc86727e770de68b1060c91f6bb6945c73e10388'], @@ -1213,20 +1382,24 @@ const VERIFIED_TOKENS = [ ['XOV', '0x153ed9cc1b792979d2bde0bbf45cc2a7e436a5f9'], ['XPA', '0x90528aeb3a2b736b780fd1b6c478bb7e1d643170'], ['XPAT', '0xbb1fa4fdeb3459733bf67ebc6f893003fa976a82'], + ['XPAY', '0xbc7ed0c8cf986ae62337fc8df3b02c6ec87310ed'], ['XRL', '0xb24754be79281553dc1adc160ddf5cd9b74361a4'], ['XSC', '0x0f513ffb4926ff82d7f60a05069047aca295c413'], ['XYO', '0x55296f69f40ea6d20e478533c15a6b08b654e758'], ['YEE', '0x922105fad8153f516bcfb829f56dc097a0e1d705'], ['YEED', '0x6f7a4bac3315b5082f793161a22e26666d22717f'], - ['YEED (YGGDRASH)', '0xca2796f9f61dc7b238aab043971e49c6164df375'], + ['YEED (1)', '0xca2796f9f61dc7b238aab043971e49c6164df375'], ['YNN', '0x1bc7c1de0ac6ef4fdec35c053030d90cf54c7e9a'], ['YOYOW', '0xcbeaec699431857fdb4d37addbbdc20e132d4903'], + ['YTRO', '0x534546c490a4ed2a9d0c3555447bb9b4b01bcb9e'], ['YUP', '0xd9a12cde03a86e800496469858de8581d3a5353d'], ['YUPIE', '0x0f33bb20a282a7649c7b3aff644f084a9348e933'], ['ZAP', '0x6781a0f84c7e9e846dcb84a9a5bd49333067b104'], ['ZCN', '0xb9ef770b6a5e12e45983c5d80545258aa38f3b78'], ['ZCO', '0x2008e3057bd734e10ad13c9eae45ff132abc1722'], ['ZCS', '0x7a41e0517a5eca4fdbc7fbeba4d4c47b9ff6dc63'], + ['ZDC', '0x7a2810d3d859ed03ede523eb801a3b43b5e8979c'], + ['ZERA', '0x8188e51bc678f0070531f0e782718df0027452de'], ['ZEUS', '0xe7e4279b80d319ede2889855135a22021baf0907'], ['ZIL', '0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27'], ['ZINC', '0x4aac461c86abfa71e9d00d9a2cde8d74e4e1aeea'], @@ -1234,6 +1407,7 @@ const VERIFIED_TOKENS = [ ['ZIPT', '0xedd7c94fd7b4971b916d15067bc454b9e1bad980'], ['ZIX', '0xf3c092ca8cd6d3d4ca004dc1d0f1fe8ccab53599'], ['ZLA', '0xfd8971d5e8e1740ce2d0a84095fca4de729d0c16'], + ['ZMAN', '0xe25faab5821ce70ba4179a70c1d481ba45b9d0c9'], ['ZMN', '0x554ffc77f4251a9fb3c0e3590a6a205f8d4e067d'], ['ZPR', '0xb5b8f5616fe42d5ceca3e87f3fddbdd8f496d760'], ['ZRX', '0xe41d2489571d322189246dafa5ebde1f4699f498'], @@ -1243,4 +1417,6 @@ const VERIFIED_TOKENS = [ ] export const ETHER_TOKEN_VERIFIED_BY_SYMBOL = new Map(VERIFIED_TOKENS) -export const ETHER_TOKEN_VERIFIED_ADDRESSES = new Set(ETHER_TOKEN_VERIFIED_BY_SYMBOL.values()) +export const ETHER_TOKEN_VERIFIED_ADDRESSES = new Set( + ETHER_TOKEN_VERIFIED_BY_SYMBOL.values() +) diff --git a/apps/finance/app/src/script.js b/apps/finance/app/src/script.js index c6acb53135..01cd414559 100644 --- a/apps/finance/app/src/script.js +++ b/apps/finance/app/src/script.js @@ -7,7 +7,7 @@ import { getTokenSymbol, getTokenName, isTokenVerified, - tokenDataFallback, + tokenDataOverride, } from './lib/token-utils' import { addressesEqual } from './lib/web3-utils' import tokenDecimalsAbi from './abi/token-decimals.json' @@ -191,20 +191,20 @@ const initializeState = settings => async cachedState => { ), vaultAddress: settings.vault.address, } - const withTokenBalances = await loadTokenBalances( + const withInitialTokens = await loadInitialTokens( newState, getPresetTokens(settings.network.type), // always immediately load some tokens settings ) const withTestnetState = await loadTestnetTokenBalances( - withTokenBalances, + withInitialTokens, settings ) return withTestnetState } -async function loadTokenBalances(state, includedTokenAddresses, settings) { +async function loadInitialTokens(state, includedTokenAddresses, settings) { let newState = { ...state, } @@ -222,7 +222,9 @@ async function loadTokenBalances(state, includedTokenAddresses, settings) { .concat(includedTokenAddresses || []) ) for (const address of addresses) { - newBalances = await updateBalances(newBalances, address, settings) + newBalances = await updateBalances(newBalances, address, settings, { + reloadEntireToken: true, + }) } return { @@ -290,7 +292,12 @@ async function newTransaction( * * ***********************/ -async function updateBalances(balances, tokenAddress, settings) { +async function updateBalances( + balances, + tokenAddress, + settings, + { reloadEntireToken } = {} +) { const newBalances = Array.from(balances || []) const tokenContract = tokenContracts.has(tokenAddress) @@ -306,9 +313,14 @@ async function updateBalances(balances, tokenAddress, settings) { await newBalanceEntry(tokenContract, tokenAddress, settings) ) } else { + const updatedState = reloadEntireToken + ? await newBalanceEntry(tokenContract, tokenAddress, settings) + : { + amount: await loadTokenBalance(tokenAddress, settings), + } newBalances[balancesIndex] = { ...newBalances[balancesIndex], - amount: await loadTokenBalance(tokenAddress, settings), + ...updatedState, } return newBalances } @@ -369,16 +381,15 @@ async function loadTokenDecimals(tokenContract, tokenAddress, { network }) { return tokenDecimals.get(tokenContract) } - const fallback = - tokenDataFallback(tokenAddress, 'decimals', network.type) || '0' + const override = tokenDataOverride(tokenAddress, 'decimals', network.type) let decimals try { - decimals = (await tokenContract.decimals().toPromise()) || fallback + decimals = override || (await tokenContract.decimals().toPromise()) tokenDecimals.set(tokenContract, decimals) } catch (err) { // decimals is optional - decimals = fallback + decimals = '0' } return decimals } @@ -387,15 +398,15 @@ async function loadTokenName(tokenContract, tokenAddress, { network }) { if (tokenNames.has(tokenContract)) { return tokenNames.get(tokenContract) } - const fallback = tokenDataFallback(tokenAddress, 'name', network.type) || '' + const override = tokenDataOverride(tokenAddress, 'name', network.type) let name try { - name = (await getTokenName(app, tokenAddress)) || fallback + name = override || (await getTokenName(app, tokenAddress)) tokenNames.set(tokenContract, name) } catch (err) { // name is optional - name = fallback + name = '' } return name } @@ -404,15 +415,15 @@ async function loadTokenSymbol(tokenContract, tokenAddress, { network }) { if (tokenSymbols.has(tokenContract)) { return tokenSymbols.get(tokenContract) } - const fallback = tokenDataFallback(tokenAddress, 'symbol', network.type) || '' + const override = tokenDataOverride(tokenAddress, 'symbol', network.type) let symbol try { - symbol = (await getTokenSymbol(app, tokenAddress)) || fallback + symbol = override || (await getTokenSymbol(app, tokenAddress)) tokenSymbols.set(tokenContract, symbol) } catch (err) { // symbol is optional - symbol = fallback + symbol = '' } return symbol } diff --git a/apps/token-manager/app/src/verified-tokens.js b/apps/token-manager/app/src/verified-tokens.js index b02bdfe1b6..41bc03ed41 100644 --- a/apps/token-manager/app/src/verified-tokens.js +++ b/apps/token-manager/app/src/verified-tokens.js @@ -18,14 +18,18 @@ const VERIFIED_TOKENS = [ ['2DC', '0x9fc0583220eb44faee9e2dc1e63f39204ddd9090'], ['300', '0xaec98a708810414878c3bcdf46aad31ded4a4557'], ['3LT', '0x430241368c1d293fda21dba8bb7af32007c59109'], + ['599GTO1', '0x5d9776472483ee2c2b204775547bff6db5a30fed'], ['A18', '0xbde8f7820b5544a49d34f9ddeacabedc7c0b5adc'], ['A18 (1)', '0xba7dcba2ade319bc772db4df75a76ba00dfb31b0'], ['ABCH', '0xcc7d26d8ea6281bb363c8448515f2c61f7bc19f0'], + ['ABDX', '0xb348cb0638b2399ae598b5575d5c12e0f15d3690'], + ['ABPT', '0xcb03bec536843d338ac138205a6689d4cdc11046'], ['ABT', '0xb98d4c97425d9908e66e53a6fdf673acca0be986'], ['ABYSS', '0x0e8d6b471e332f140e7d9dbb99e5e3822f728da6'], ['ACC', '0x13f1b7fdfbe1fc66676d56483e21b1ecb40b58e2'], ['ACE', '0x06147110022b768ba8f99a8f385df11a151a9cc8'], ['ADB', '0x2baac9330cf9ac479d819195794d79ad0c7616e3'], + ['ADC$', '0x827fe1736cee36f7737be6cf502434af294cf137'], ['ADH', '0xe69a353b3152dd7b706ff7dd40fe1d18b7802d31'], ['ADI', '0x8810c63470d38639954c6b41aac545848c46484a'], ['ADL', '0x660e71483785f66133548b10f6926dc332b06e61'], @@ -36,6 +40,7 @@ const VERIFIED_TOKENS = [ ['AEUR', '0xc994a2deb02543db1f48688438b9903c4b305ce3'], ['AFA', '0xfb48e0dea837f9438309a7e9f0cfe7ee3353a84e'], ['AGI', '0x8eb24319393716668d768dcec29356ae9cffe285'], + ['AGS', '0x7db5454f3500f28171d1f9c7a38527c9cf94e6b2'], ['AI', '0x5121e348e897daef1eef23959ab290e5557cf274'], ['AID', '0x37e8789bb9996cac9156cd5f5fd32599e6b91289'], ['AION', '0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466'], @@ -48,10 +53,12 @@ const VERIFIED_TOKENS = [ ['ALTS', '0x638ac149ea8ef9a1286c41b977017aa7359e6cfa'], ['ALX', '0x49b127bc33ce7e1586ec28cec6a65b112596c822'], ['AMB', '0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce'], + ['AMGO', '0xf1ac7a375429719de0dde33528e2639b9a206eba'], ['AMIS', '0x949bed886c739f1a3273629b3320db0c5024c719'], ['AMLT', '0xca0e7269600d353f70b14ad118a49575455c0f2f'], ['AMN', '0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c'], ['AMO', '0x38c87aa89b2b8cd9b95b736e1fa7b612ea972169'], + ['AMPL', '0xd46ba6d942050d489dbd938a2c909a5d5039a161'], ['AMTC', '0x84936cf7630aa3e27dd9aff968b140d5aee49f5a'], ['ANT', '0x960b236a07cf122663c4303350609a66a7b288c0'], ['AOA', '0x9ab165d795019b6d8b3e971dda91071421305e5a'], @@ -69,6 +76,8 @@ const VERIFIED_TOKENS = [ ['ARY', '0xa5f8fc0921880cb7342368bd128eb8050442b1a1'], ['AST', '0x27054b13b1b798b345b591a4d22e6562d47ea75a'], ['ASTRO', '0x7b22938ca841aa392c93dbb7f4c42178e3d65e88'], + ['ASY', '0x017b584acfd16d767541ae9e80cdc702f4527b0b'], + ['ATG', '0x98d0cde5c3d79531613e18f0912127bf172bd7aa'], ['ATH', '0x17052d51e954592c1046320c2371abab6c73ef10'], ['ATH (AIgatha Token)', '0x1543d0f83489e82a1344df6827b23d541f235a50'], ['ATL', '0x78b7fada55a64dd895d8c8c35779dd8b67fa8a05'], @@ -80,6 +89,7 @@ const VERIFIED_TOKENS = [ ['ATX', '0x1a0f2ab46ec630f9fd638029027b552afa64b94c'], ['AUC', '0xc12d099be31567add4e4e4d0d45691c3f58f5663'], ['AURA', '0xcdcfc0f66c522fd086a1b725ea3c0eeb9f9e8814'], + ['AUS', '0x5fb9e9c359cc7191b0293d2faf1cc41ce3688d75'], ['AUTO', '0x622dffcc4e83c64ba959530a5a5580687a57581b'], ['AVA', '0xed247980396b10169bb1d36f6e278ed16700a60f'], ['AVT', '0x0d88ed6e74bbfd96b831231638b66c05571e824f'], @@ -87,6 +97,7 @@ const VERIFIED_TOKENS = [ ['AXP', '0x9af2c6b1a28d3d6bc084bd267f70e90d49741d5b'], ['AXPR', '0xc39e626a04c5971d770e319760d7926502975e47'], ['B2BX', '0x5d51fcced3114a8bb5e90cdd0f9d682bcbcc5393'], + ['BAC', '0x062e3be6a7c56a395b1881a0cd69a4923ade4fa2'], ['BANCA', '0x998b3b82bc9dba173990be7afb772788b5acb8bd'], ['BANX', '0xf87f0d9153fea549c728ad61cb801595a68b73de'], ['BAR', '0xc73f2474001ad1d6aed615af53631148cf98de6b'], @@ -111,11 +122,13 @@ const VERIFIED_TOKENS = [ ['BDG', '0x1961b3331969ed52770751fc718ef530838b6dee'], ['BEE', '0x4d8fc1453a0f359e99c9675954e656d80d996fbf'], ['BeerCoin', '0x74c1e4b8cae59269ec1d85d3d4f324396048f4ac'], + ['BEFX', '0xb91c2a2b953d72f3ef890490669a0a41b0add5f7'], ['BERRY', '0x6aeb95f06cda84ca345c2de0f3b7f96923a44f4c'], ['BET', '0x8aa33a7899fcc8ea5fbe6a608a109c3893a1b8b2'], ['BETHER', '0x14c926f2290044b647e1bf2072e67b495eff1905'], ['BETR', '0x763186eb8d4856d536ed4478302971214febc6a9'], ['BEZ', '0x3839d8ba312751aa0248fed6a8bacb84308e20ed'], + ['BFT', '0x01ff50f8b7f74e4f00580d9596cd3d0d6d6e326f'], ['BHPC', '0xee74110fb5a1007b06282e0de5d73a61bf41d9cd'], ['BHR', '0xfe5d908c9ad85f651185daa6a4770726e2b27d09'], ['BIT', '0x089b85fa15f72c1088cbbef23a49db80b91dd521'], @@ -123,8 +136,9 @@ const VERIFIED_TOKENS = [ ['BITPARK', '0xf3d29fb98d2dc5e78c87198deef99377345fd6f1'], ['BIX', '0xb3104b4b9da82025e8b9f8fb28b3553ce2f67069'], ['BKB', '0x5c39bc68e58a242a624e4fc96be77a383c52002d'], - ['BKB (BetKing Bankroll Token)', '0xb2bfeb70b903f1baac7f2ba2c62934c7e5b974c4'], + ['BKB (1)', '0xb2bfeb70b903f1baac7f2ba2c62934c7e5b974c4'], ['BKC', '0xc88be04c809856b75e3dfe19eb4dcf0a3b15317a'], + ['BKN', '0xbee6edf5fa7e862ed2ea9b9f42cb0849184aae85'], ['BKRx', '0x3cf9e0c385a5abec9fd2a71790aa344c4e8e3570'], ['BKX', '0x45245bc59219eeaaf6cd3f382e078a461ff9de7b'], ['BLN', '0xca29db4221c111888a7e80b12eac8a266da3ee0d'], @@ -139,18 +153,23 @@ const VERIFIED_TOKENS = [ ['BMX', '0x986ee2b944c42d017f52af21c4c69b84dbea35d8'], ['BNB', '0xb8c77482e45f1f44de1745f52c74426c631bdd52'], ['BNC', '0xef51c9377feb29856e61625caf9390bd0b67ea18'], - ['BNC (BNC)', '0xdd6bf56ca2ada24c683fac50e37783e55b57af9f'], + ['BNC (1)', '0xdd6bf56ca2ada24c683fac50e37783e55b57af9f'], ['BNFT', '0xda2c424fc98c741c2d4ef2f42897cefed897ca75'], ['BNN', '0xda80b20038bdf968c7307bb5907a469482cf6251'], + ['BNP', '0xd27d76a1ba55ce5c0291ccd04febbe793d22ebf4'], ['BNT', '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c'], ['BNTY', '0xd2d6158683aee4cc838067727209a0aaf4359de3'], + ['BOA', '0x746dda2ea243400d5a63e0700f190ab79f06489e'], + ['BOA (1)', '0xfb6becd99282d7ca14d0890f3e4f073d9dd522e9'], ['BOB', '0xdf347911910b6c9a4286ba8e2ee5ea4a39eb2134'], + ['BOK', '0x27c743954bce1bfaef8bcbd685527531001d88d7'], + ['BOLT', '0x9f235d23354857efe6c541db92a9ef1877689bcb'], ['BON', '0xcc34366e3842ca1bd36c1f324d15257960fcc801'], ['BOP', '0x7f1e2c7d6a69bf34824d72c53b4550e895c0d8c2'], ['BOU', '0xc2c63f23ec5e97efbd7565df9ec764fdc7d4e91d'], ['BOUTS', '0x139d9397274bb9e2c29a9aa8aa0b5874d30d62e3'], - ['BOX', '0xe1a178b681bd05964d3e3ed33ae731577d9d96dd'], - ['BOX (ContentBox)', '0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f'], + ['BOX', '0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f'], + ['BOX (1)', '0xe1a178b681bd05964d3e3ed33ae731577d9d96dd'], ['BOXX', '0x780116d91e5592e58a3b3c76a351571b39abcec6'], ['BPT', '0x327682779bab2bf4d1337e8974ab9de8275a7ca8'], ['BQX', '0x5af2be193a6abca9c8817001f45744777db30756'], @@ -172,22 +191,28 @@ const VERIFIED_TOKENS = [ ['BTL (Battle)', '0x2accab9cb7a48c3e82286f0b2f8798d201f4ec3f'], ['BTL (Bitlle)', '0x92685e93956537c25bb75d5d47fca4266dd628b8'], ['BTM', '0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750'], + ['BTNG', '0xd6b107d3e45b959b6d13faf1bb2a2cf8fc7025e6'], ['BTO', '0x36905fc93280f52362a1cbab151f25dc46742fb5'], + ['BTP', '0x20900587e569e3d0b2609bca6fb3469765ed0920'], ['BTQ', '0x16b0e62ac13a2faed36d18bce2356d25ab3cfad3'], - ['BTR', '0xcbf15fb8246f679f9df0135881cb29a3746f734b'], - ['BTR (1)', '0x499a6b77bc25c26bcf8265e2102b1b3dd1617024'], + ['BTR', '0x499a6b77bc25c26bcf8265e2102b1b3dd1617024'], + ['BTR (1)', '0xcbf15fb8246f679f9df0135881cb29a3746f734b'], ['BTRN', '0x03c780cd554598592b97b7256ddaad759945b125'], ['BTT', '0x080aa07e2c7185150d7e4da98838a8d2feac3dfc'], ['BTTX', '0xfa456cf55250a839088b27ee32a424d7dacb54ff'], ['BTU', '0xb683d83a532e2cb7dfa5275eed3698436371cc9f'], + ['BTY', '0x9eecec130fb665d03a37289ee34c818ee7f79926'], ['BTZ', '0xe5f867de1ea81346df5181b8b48dd6b0bb3357b0'], ['BUC', '0xca3c18a65b802ec267f8f4802545e7f53d24c75e'], + ['BUSD', '0x4fabb145d64652a948d72533023f6e7a623c7c53'], + ['BWN', '0x51a4f65463597ca4609c9a90ea3d5ab219fbc85d'], ['BWX', '0xbd168cbf9d3a375b38dc51a202b5e8a4e52069ed'], ['BZ', '0x4375e7ad8a01b8ec3ed041399f62d9cd120e0063'], ['BZNT', '0xe1aee98495365fc179699c1bb3e761fa716bee62'], ['C20', '0x26e75307fc0c021472feb8f727839531f112f317'], ['C8', '0xd42debe4edc92bd5a3fbb4243e1eccf6d63a4a5d'], ['CAG', '0x7d4b8cce0591c9044a22ee543533b72e976e36c3'], + ['CALL', '0xbbe761ea1447a20b75aa485b7bcad4837415d7d7'], ['CAN', '0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0'], ['CAPP', '0x04f2e7221fdb1b52a68169b25793e51478ff0329'], ['CAR', '0x423e4322cdda29156b49a17dfbd2acc4b280600d'], @@ -198,12 +223,13 @@ const VERIFIED_TOKENS = [ ['CARD (1)', '0x954b890704693af242613edef1b603825afcd708'], ['CARD (2)', '0xb07ec2c28834b889b1ce527ca0f19364cd38935c'], ['CARE', '0xbf18f246b9301f231e9561b35a3879769bb46375'], - ['CAS', '0xe8780b48bdb05f928697a5e8155f672ed91462f7'], - ['CAS (CAS Coin)', '0x779492d3644ddf4495aa2d80c468e1b7be6af1d2'], + ['CAS', '0x779492d3644ddf4495aa2d80c468e1b7be6af1d2'], + ['CAS (1)', '0xe8780b48bdb05f928697a5e8155f672ed91462f7'], ['CAT (BitClave)', '0x1234567461d3f8db7496581774bd869c83d51c93'], ['CAT (BlockCAT)', '0x56ba2ee7890461f463f7be02aac3099f6d5811a8'], ['CATS', '0x8293bbd92c42608b20af588620a76128a33e4de9'], ['CATs (BitClave)_Old', '0x68e14bb5a45b9681327e16e528084b9d962c1a39'], + ['cBAT', '0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e'], ['CBC', '0x26db5439f651caf491a87d48799da81f191bdb6b'], ['CBIX', '0x05c3617cbf1304b9260aa61ec960f115d67becea'], ['CBM', '0x95efd1fe6099f65a7ed524def487483221094947'], @@ -216,13 +242,16 @@ const VERIFIED_TOKENS = [ ['CCO', '0x679badc551626e01b23ceecefbc9b877ea18fc46'], ['CCS', '0x315ce59fafd3a8d562b7ec1c8542382d2710b06c'], ['CCT', '0x336f646f87d9f6bc6ed42dd46e8b3fd9dbd15c22'], + ['cDai', '0xf5dce57282a584d2746faf1593d3121fcac444dc'], ['CDL', '0x8a95ca448a52c0adf0054bb3402dc5e09cd6b232'], ['CDT', '0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af'], ['CDX', '0x2cb101d7da0ebaa57d3f2fef46d7ffb7bb64592b'], - ['CDX (Commodity Ad Network)', '0x6fff3806bbac52a20e0d79bc538d527f6a22c96b'], + ['CDX (1)', '0x6fff3806bbac52a20e0d79bc538d527f6a22c96b'], ['CEEK', '0xb056c38f6b7dc4064367403e26424cd2c60655e1'], + ['CEN', '0x0bc61dded5f6710c637cf8288eb6058766ce1921'], ['CENNZ', '0x1122b6a0e00dce0563082b6e2953f3a943855c1f'], ['CET', '0xf660ca1e228e7be1fa8b4f5583145e31147fb577'], + ['cETH', '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5'], ['CFC', '0x5dff89a2caa4d76bc286f74d67bd718eb834da61'], ['CFI', '0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e'], ['CFTY', '0x6956983f8b3ce173b4ab84361aa0ad52f38d936f'], @@ -247,28 +276,32 @@ const VERIFIED_TOKENS = [ ['CO2', '0xb4b1d2c217ec0776584ce08d3dd98f90ededa44b'], ['CO2Bit', '0x574b36bced443338875d171cc377e691f7d4f887'], ['COB', '0xb2f7eb1f2c37645be61d73953035360e768d81e6'], + ['COBR', '0x933dfc5622792b41245ab8313416caf0ba885ae7'], ['COFI', '0x3136ef851592acf49ca4c825131e364170fa32b3'], ['COIL', '0x0c91b015aba6f7b4738dcd36e7410138b29adc29'], ['COIN', '0x5e8f855966d638135a968861e80dda722291b06d'], - ['COIN (Coinvest V3 Token)', '0xeb547ed1d8a3ff1461abaa7f0022fed4836e00a4'], + ['COIN (1)', '0xeb547ed1d8a3ff1461abaa7f0022fed4836e00a4'], ['CORI', '0x725b190bc077ffde17cf549aa8ba25e298550b18'], ['COSM', '0xc4bcd64cb216d49fd3c643a32762f34626b45a1a'], ['COSS', '0x65292eeadf1426cd2df1c4793a3d7519f253913b'], ['COSS (1)', '0x9e96604445ec19ffed9a5e8dd7b50a29c899a10c'], ['COV', '0xe2fb6529ef566a080e6d23de0bd351311087d567'], + ['CPAL', '0x31910aff5545784755970ae1fbe7fe65d5f0eea2'], ['CPAY', '0x0ebb614204e47c09b6c3feb9aaecad8ee060e23e'], ['CPC', '0xfae4ee59cdd86e3be9e8b90b53aa866327d7c090'], ['CPEX', '0xb787d4eac8899730bb8c57fc3c998c49c5244ec0'], ['CPLO', '0x7064aab39a0fcf7221c3396719d0917a65e35515'], - ['CPT', '0x9b62513c8a27290cf6a7a9e29386e600245ea819'], - ['CPT (Cryptaur)', '0x88d50b466be55222019d71f9e8fae17f5f45fca1'], + ['CPT', '0x88d50b466be55222019d71f9e8fae17f5f45fca1'], + ['CPT (1)', '0x9b62513c8a27290cf6a7a9e29386e600245ea819'], ['CPY', '0xf44745fbd41f6a1ba151df190db0564c5fcc4410'], + ['CR1', '0x0d9a10a0466b7e9ad693e24993f5105bfdb240e3'], ['CR7', '0x7f585b9130c64e9e9f470b618a7badd03d79ca7e'], ['CRB', '0xaef38fbfbf932d1aef3b808bc8fbd8cd8e1f8bc5'], ['CRBT', '0x2cf618c19041d9db330d8222b860a624021f30fb'], ['CRC', '0xf41e5fbc2f6aac200dd8619e121ce1f05d150077'], ['CRED', '0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd'], ['CREDO', '0x4e0603e2a27a30480e5e3a4fe548e29ef12f64be'], + ['cREP', '0x158079ee67fce2f58472a96584a73c7ab9ac95c1'], ['CRGO', '0xf49cdd50ad408d387d611f88a647179c3de3492b'], ['CRMT', '0x9238bfb781a55eacc3cf05f7df94038c198cd9b9'], ['CRPT', '0x80a7e048f37a50500351c204cb407766fa3bae7f'], @@ -282,22 +315,29 @@ const VERIFIED_TOKENS = [ ['CTGC', '0x9e7d29bd499b6c7da2a5b2eafcf4a39d3bd845d1'], ['CTL', '0xbf4cfd7d1edeeea5f6600827411b41a21eb08abd'], ['CTR', '0x96a65609a7b84e8842732deb08f56c3e21ac6f8a'], - ['CTT', '0xe3fa177acecfb86721cf6f9f4206bd3bd672d7d5'], + ['CTT', '0x1a4743cf1af4c289351390a2b3fe7c13d2f7c235'], + ['CTT (1)', '0xe3fa177acecfb86721cf6f9f4206bd3bd672d7d5'], ['CTX', '0x662abcad0b7f345ab7ffb1b1fbb9df7894f18e66'], ['CTXC', '0xea11755ae41d889ceec39a63e6ff75a02bc1c00d'], + ['CUR8', '0x490dbf7884b8e13c2161448b83dd2d8909db48ed'], + ['CURA', '0x1dabf6ab0eb8e4208e7e9302cec7a014068952e4'], + ['cUSDC', '0x39aa39c021dfbae8fac545936693ac917d5e7563'], ['cV', '0xda6cb58a0d0c01610a29c5a65c303e13e885887c'], ['CVC', '0x41e5560054824ea6b0732e656e3ad64e20e94e45'], + ['CVS', '0xdb56448fe2635f7912287cd619e7ed3d93180f25'], ['CVT', '0xbe428c3867f05dea2a89fc76a102b544eac7f772'], ['CXC', '0x2134057c0b461f898d375cead652acae62b59541'], ['CXO', '0xb6ee9668771a79be7967ee29a63d4184f8097143'], + ['CYCLE', '0xfe831929098b5ff5d736105bd68ba9460ef07207'], ['CYFM', '0x3f06b5d78406cd97bdf10f5c420b241d32759c80'], ['CYMT', '0x78c292d1445e6b9558bf42e8bc369271ded062ea'], ['CZR', '0x0223fc70574214f65813fe336d870ac47e147fae'], + ['cZRX', '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407'], ['DAB', '0xdab0c31bf34c897fb0fe90d12ec9401caf5c36ec'], ['DACS', '0xa31108e5bab5494560db34c95492658af239357c'], ['DADI', '0xfb2f26f266fb2805a387230f2aa0a331b4d96fba'], - ['DAI', '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359'], ['DALC', '0x07d9e49ea402194bf48a8276dafb16e4ed633317'], + ['DAI', '0x6b175474e89094c44da98b954eedeac495271d0f'], ['DAN', '0x9b70740e708a083c6ff38df52297020f5dfaa5ee'], ['DAO', '0xbb9bc244d798123fde783fcc1c72d3bb8c189413'], ['DAT', '0x81c9151de0c8bafcd325a57e3db5a5df1cebf79c'], @@ -323,6 +363,7 @@ const VERIFIED_TOKENS = [ ['Devcon2 Token', '0xdd94de9cfe063577051a5eb7465d08317d8808b6'], ['DEW', '0x20e94867794dba030ee287f1406e100d03c84cd3'], ['DEX', '0x497baef294c11a5f0f5bea3f2adb3073db448b56'], + ['DF', '0x431ad2ff6a9c365805ebad47ee021148d6f7dbe0'], ['DGD', '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a'], ['DGPT', '0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1'], ['DGS', '0x6aedbf8dff31437220df351950ba2a3362168d1b'], @@ -345,12 +386,13 @@ const VERIFIED_TOKENS = [ ['DOW', '0x76974c7b79dc8a6a109fd71fd7ceb9e40eff5382'], ['DOW (1)', '0xeef6e90034eea89e31eb4b8eacd323f28a92eae4'], ['DPP', '0x01b3ec4aae1b8729529beb4965f27d008788b0eb'], + ['DRC', '0xc2e3ed7f61d338755bf7b6fb4baa0fffada4ac28'], ['DREAM', '0x82f4ded9cec9b5750fbff5c2185aee35afc16587'], ['DRGN', '0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e'], ['DROP', '0x3c75226555fc496168d48b88df83b95f16771f37'], ['DROP (dropil)', '0x4672bad527107471cb5067a887f4656d585a8a31'], ['DRP', '0x2799d90c6d44cb9aa5fbc377177f16c33e056b82'], - ['DRP (DCorp)', '0x621d78f2ef2fd937bfca696cabaf9a779f59b3ed'], + ['DRP (1)', '0x621d78f2ef2fd937bfca696cabaf9a779f59b3ed'], ['DRPU', '0xe30e02f049957e2a5907589e06ba646fb2c321ba'], ['DRT', '0x9af4f26941677c706cfecf6d3379ff01bb85d5ab'], ['DRVH', '0x62d4c04644314f35868ba4c65cc27a77681de7a9'], @@ -363,9 +405,9 @@ const VERIFIED_TOKENS = [ ['DTT', '0xf9f7c29cfdf19fcf1f2aa6b84aa367bcf1bd1676'], ['DTx', '0x82fdedfb7635441aa5a92791d001fa7388da8025'], ['DTX', '0x765f0c16d1ddc279295c1a7c24b0883f62d33f75'], - ['DUBI', '0xd4cffeef10f60eca581b5e1146b5aca4194a4c3b'], - ['DUBI (1)', '0x9c6fa42209169bcea032e401188a6fc3e9c9f59c'], - ['DUBI (DUBI)', '0xed7fea78c393cf7b17b152a8c2d0cd97ac31790b'], + ['DUBI', '0x9c6fa42209169bcea032e401188a6fc3e9c9f59c'], + ['DUBI (1)', '0xd4cffeef10f60eca581b5e1146b5aca4194a4c3b'], + ['DUBI (2)', '0xed7fea78c393cf7b17b152a8c2d0cd97ac31790b'], ['DXT', '0x8db54ca569d3019a2ba126d03c37c44b5ef81ef6'], ['E₹', '0xb67734521eabbe9c773729db73e16cc2dfb20a58'], ['E4ROW', '0xce5c603c78d047ef43032e96b5b785324f753a4f'], @@ -377,15 +419,18 @@ const VERIFIED_TOKENS = [ ['ECN', '0xa578acc0cb7875781b7880903f4594d13cfa8b98'], ['ECO2', '0x17f93475d2a978f527c3f7c44abf44adfba60d5c'], ['ECOM', '0x171d750d42d661b62c277a6b486adb82348c3eca'], - ['ECP', '0xaea1c18a992984831002d0cf90e291fb52d72649'], - ['ECP (ECrypto Coin)', '0x8869b1f9bc8b246a4d7220f834e56ddfdd8255e7'], + ['ECP', '0x8869b1f9bc8b246a4d7220f834e56ddfdd8255e7'], + ['ECP (1)', '0xaea1c18a992984831002d0cf90e291fb52d72649'], ['EDC', '0xfa1de2ee97e4c10c94c91cb2b5062b89fb140b82'], ['EDG', '0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c'], ['EDO', '0xced4e93198734ddaff8492d525bd258d49eb388e'], ['EDR', '0xc528c28fec0a90c083328bc45f587ee215760a0f'], ['EDU', '0x2a22e5cca00a3d63308fa39f29202eb1b39eef52'], + ['EDX', '0xbf8d8f1242b95dfbae532af6b0f4463905415cc1'], ['eGAS', '0xb53a96bcbdd9cf78dff20bab6c2be7baec8f00f8'], + ['EGG', '0x999aa6488f076e6765448f090aba83fbb470fc99'], ['EGT', '0x8e1b448ec7adfc7fa35fc2e885678bd323176e34'], + ['EGX', '0xa19bbef64eff0d060a653e4df10a57b6d8006d3e'], ['EHT', '0xf9f0fc7167c311dd2f1e21e9204f87eba9012fb2'], ['EKO', '0xa6a840e50bcaa50da017b91a0d86b8b2d41156ee'], ['EKT', '0xbab165df9455aa0f2aed1f2565520b91ddadb4c8'], @@ -403,35 +448,46 @@ const VERIFIED_TOKENS = [ ['ENG', '0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4'], ['ENGT', '0x5dbac24e98e2a4f43adc0dc82af403fca063ce2c'], ['ENJ', '0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c'], + ['ENQ', '0x16ea01acb4b0bca2000ee5473348b6937ee6f72f'], ['ENTRP', '0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3'], ['EOS', '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0'], ['eosDAC', '0x7e9e431a0b8c4d532c745b1043c7fa29a48d4fba'], + ['EPH', '0x875089a734213ca39f0d93c2bbb8209827ec5e9f'], ['EPX', '0x35baa72038f127f9f8c8f9b491049f64f377914d'], ['EPY', '0x50ee674689d75c0f88e8f83cfe8c4b69e8fd590d'], ['EQL', '0x47dd62d4d075dead71d0e00299fc56a2d747bebb'], ['ERO', '0x74ceda77281b339142a36817fa5f9e29412bab85'], ['ERT', '0x92a5b04d0ed5d94d7a193d1d334d3d16996f4e13'], + ['ESB', '0x369760ebf89d577a734d927a9599c1921397a152'], ['ESZ', '0xe8a1df958be379045e2b46a31a98b93a2ecdfded'], ['ETBS', '0x1b9743f556d65e757c4c650b4555baf354cb8bd3'], ['ETCH', '0xdd74a7a3769fa72561b3a69e65968f49748c690c'], ['ETG', '0x28c8d01ff633ea9cd8fc6a451d7457889e698de6'], ['ETHB', '0x3a26746ddb79b1b8e4450e3f4ffe3285a307387e'], ['ETHD', '0xdbfb423e9bbf16294388e07696a5120e4ceba0c5'], + ['ETHPAY', '0xe52e75e8a97546f40991b489e92c68ebb386dc97'], ['ETK', '0x3c4a3ffd813a107febd57b2f01bc344264d90fde'], ['ETR', '0x6927c69fb4daf2043fbb1cb7b86c5661416bea29'], + ['EUCX', '0xd99298985902c9a69bf4c8a0895fa10721204ecc'], ['EURS', '0xdb25f211ab05b1c97d595516f45794528a807ad8'], ['EURT', '0xabdf147870235fcfc34153828c769a70b3fae01f'], ['eUSD', '0x523630976eb6147621b5c31c781ebe2ec2a806e0'], ['EVC', '0xb62d18dea74045e822352ce4b3ee77319dc5ff2f'], + ['EVCO', '0xaa5c28be0f1173612ea3fcc9e461ccb7b9390213'], ['EVE', '0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c'], + ['EVED', '0x5aaefe84e0fb3dd1f0fcff6fa7468124986b91bd'], + ['EVF', '0xa26c4caaaea8b88ef49bf8c380488f66c2d807ae'], ['EVN', '0x68909e586eeac8f47315e84b4c9788dd54ef65bb'], - ['EVN (Envion AG)', '0xd780ae2bf04cd96e577d3d014762f831d97129d0'], + ['EVN (1)', '0xd780ae2bf04cd96e577d3d014762f831d97129d0'], + ['EVO', '0x442d985efebc633b8bfd14ff99e860a5609a6484'], ['EVX', '0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8'], ['EWO', '0x444997b7e7fc830e20089afea3078cd518fcf2a2'], - ['EXC', '0x9e4c143bfe35f855624b3f84465ab7401a17a120'], - ['EXC (Eximchain Token)', '0x00c4b398500645eb5da00a1a379a88b11683ba01'], + ['EXC', '0x00c4b398500645eb5da00a1a379a88b11683ba01'], + ['EXC (1)', '0x9e4c143bfe35f855624b3f84465ab7401a17a120'], + ['EXE', '0x0d9a653f681168f410d14d19b7743c041eafc58a'], ['EXMR', '0xc98e0639c6d2ec037a615341c369666b110e80e5'], ['EXRN', '0xe469c4473af82217b30cf17b10bcdb6c8c796e75'], + ['EXU', '0xe06af951086ec3c488b50e31be29c07f8a260ca3'], ['EXY', '0x5c743a35e903f6c584514ec617acee0611cf44f3'], ['EZT', '0x5e6016ae7d7c49d347dcf834860b9f3ee282812b'], ['FABA', '0x0a1d2ff7156a48131553cf381f220bbedb4efa37'], @@ -441,7 +497,9 @@ const VERIFIED_TOKENS = [ ['FANX', '0x7dcb3b2356c822d3577d4d060d0d5d78c860488c'], ['FANX (1)', '0x7f6715c3fc4740a02f70de85b9fd50ac6001fed9'], ['FAR', '0x7cf6dc769482abee2ff75795d000f381a8062dec'], + ['FARM', '0x41f723448433367be140d528d35efecd3e023db6'], ['FDZ', '0x23352036e911a22cfc692b5e2e196692658aded9'], + ['FER', '0x4e594479fa417a1e9c5790a413575802d393010f'], ['FGP', '0xd9a8cfe21c232d485065cb62a96866799d4645f7'], ['FID', '0x52fb36c83ad33c1824912fc81071ca5eeb8ab390'], ['FIH', '0xdfc3e857c8ccea7657e0ed98ab92e048e38dee0f'], @@ -462,44 +520,57 @@ const VERIFIED_TOKENS = [ ['FOOD', '0x2a093bcf0c98ef744bb6f69d74f2f85605324290'], ['FORK', '0x5bb1632fa0023e1aa76a1ae92b4635c8dba49fa2'], ['FOTA', '0x4270bb238f6dd8b1c3ca01f96ca65b2647c06d3c'], + ['FOX', '0xc770eefad204b5180df6a14ee197d99d808ee52d'], ['FR8', '0x8c39afdf7b17f12c553208555e51ab86e69c35aa'], ['FRD', '0x0abefb7611cb3a01ea3fad85f33c3c934f8e2cf4'], ['FREC', '0x17e67d1cb4e349b9ca4bc3e17c7df2a397a7bb64'], + ['FRECNX', '0xd8b8e1eca89da014e67fdbc2014eaa8e171079bf'], ['FRV', '0x48df4e0296f908ceab0428a5182d19b31fc037d6'], + ['FRX', '0x36a73557f5bde5195ec39eca82d28b8a36d21141'], ['FSN', '0xd0352a019e9ab9d757776f532377aaebd36fd541'], ['FT', '0x78a73b6cbc5d183ce56e786f6e905cadec63547b'], ['FTC', '0xe6f74dcfa0e20883008d8c16b6d9a329189d0c30'], + ['ftchain', '0x26ac29dc25806199373cb4884aa9e077a0587c5b'], ['FTI', '0x943ed852dadb5c3938ecdc6883718df8142de4c8'], ['FTR', '0x2023dcf7c438c8c8c0b0f28dbae15520b4f3ee20'], ['FTT', '0x2aec18c5500f21359ce1bea5dc1777344df4c0dc'], ['FTX', '0xd559f20296ff4895da39b5bd9add54b442596a61'], ['FTXT', '0x41875c2332b0877cdfaa699b641402b7d4642c32'], ['FUCK', '0x65be44c747988fbf606207698c944df4442efe19'], - ['FUCK (FinallyUsableCryptoKarma)', '0xab16e0d25c06cb376259cc18c1de4aca57605589'], + ['FUCK (1)', '0xab16e0d25c06cb376259cc18c1de4aca57605589'], ['FUEL', '0xea38eaa3c86c8f9b751533ba2e562deb9acded40'], ['FUN', '0x419d0d8bdd9af5e606ae2232ed285aff190e711b'], - ['FXC', '0xc92d6e3e64302c59d734f3292e2a13a13d7e1817'], - ['FXC (Flexacoin)', '0x4a57e687b9126435a9b19e4a802113e266adebde'], + ['FXC', '0x4a57e687b9126435a9b19e4a802113e266adebde'], + ['FXC (1)', '0xc92d6e3e64302c59d734f3292e2a13a13d7e1817'], ['FXT', '0x1829aa045e21e0d59580024a951db48096e01782'], ['FYN', '0x88fcfbc22c6d3dbaa25af478c578978339bde77a'], ['FYP', '0x8f0921f30555624143d427b340b1156914882c10'], ['Fzcoin', '0xe5aee163513119f4f750376c718766b40fa37a5f'], + ['G-CRE', '0xa3ee21c306a700e682abcdfe9baa6a08f3820419'], ['GAM', '0xf67451dc8421f0e0afeb52faa8101034ed081ed9'], ['GANA', '0x6754e21b9eaa053c62d7854dd6561ae451b0cbcf'], ['GANA (1)', '0xc0ea6306f6360fe7dcab65d16bf1a3af92c79aa2'], ['GAT', '0x687174f8c49ceb7729d925c3a961507ea4ac7b28'], ['GAVEL', '0x708876f486e448ee89eb332bfbc8e593553058b9'], + ['GBO', '0xcc2a74b28e786fac86be3ca354b1941c25ab3eab'], ['GBT', '0x7585f835ae2d522722d2684323a0ba83401f32f5'], ['GBX', '0x12fcd6463e66974cf7bbc24ffc4d40d6be458283'], + ['GC', '0x8eb38715604b938812dec25a0a1bc05b4becb9ca'], + ['GCG', '0x1778fffbd431be2ac3d69e64d1d819c786b2bee0'], ['GCP', '0xdb0f69306ff8f949f258e83f6b87ee5d052d0b23'], + ['GCU', '0xa4ec83c8907888d006a37debf755ee39766f38ae'], + ['GCX', '0x44a67c8570a61a28bafd0035042f2f0a73a64428'], ['GEE', '0x4f4f0db4de903b88f2b1a2847971e231d54f8fd3'], ['GELD', '0x24083bb30072643c3bb90b44b7285860a755e687'], ['GEM', '0xc7bba5b765581efb2cdd2679db5bea9ee79b201f'], ['GEN', '0x543ff227f64aa17ea132bf9886cab5db55dcaddf'], ['GENE', '0x6dd4e4aad29a40edd6a409b9c1625186c9855b4d'], ['GET', '0x8a854288a5976036a725879164ca3e91d30c6a1b'], + ['GFN', '0x3930e4ddb4d24ef2f4cb54c1f009a3694b708428'], + ['GGC', '0x7f969c4d388ca0ae39a4fddb1a6f89878ca2fbf8'], ['GIF', '0xfcd862985628b254061f7a918035b80340d045d3'], ['GIM', '0xae4f56f072c34c0a65b3ae3e4db797d831439d93'], + ['GIRL', '0x9aa7d119bdf77f65a7284581a211d8c44ffb04b4'], ['GLA', '0x71d01db8d6a2fbea7f8d434599c237980c234e4c'], ['GMT', '0xb3bd49e28f8f832b8d1e246106991e546c323502'], ['GNO', '0x6810e776880c02933d47db1b9fc05908e5386b96'], @@ -508,6 +579,7 @@ const VERIFIED_TOKENS = [ ['GNY', '0x247551f2eb3362e222c742e9c788b8957d9bc87e'], ['GOLDX', '0xeab43193cf0623073ca89db9b712796356fa7414'], ['GOT', '0x423b5f62b328d0d6d44870f4eee316befa0b2df5'], + ['GRG', '0x4fbb350052bca5417566f188eb2ebce5b19bc964'], ['GRID', '0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd'], ['GRMD', '0xb444208cb0516c150178fcf9a52604bc04a1acea'], ['GROO', '0xc17195bde49d70cefcf8a9f2ee1759ffc27bf0b1'], @@ -527,6 +599,7 @@ const VERIFIED_TOKENS = [ ['GZB', '0x9dae8b7f6d37ea8e5d32c6c3e856a6d8a1d3b363'], ['GZE', '0x8c65e992297d5f092a756def24f4781a280198ff'], ['GZR', '0xe638dc39b6adbee8526b5c22380b4b45daf46d8e'], + ['HABS', '0x5bfc1ff7f9e087c64fefb34f2e7cf24e5570919f'], ['HAK', '0x93a7174dafd31d13400cd9fa01f4e5b5baa00d39'], ['HAND', '0x48c1b2f3efa85fbafb2ab951bf4ba860a08cdbb7'], ['HAPPY', '0x5a567e28dbfa2bbd3ef13c0a01be114745349657'], @@ -536,6 +609,7 @@ const VERIFIED_TOKENS = [ ['HBZ', '0xe34e1944e776f39b9252790a0527ebda647ae668'], ['HDG', '0xffe8196bc259e8dedc544d935786aa4709ec3e64'], ['HDL', '0x95c4be8534d69c248c0623c4c9a7a2a001c17337'], + ['HDLRE', '0x86a63063b3a60652fb070f23cbb4a9833fdbbff8'], ['Hdp', '0xe9ff07809ccff05dae74990e25831d0bc5cbe575'], ['Hdp.ф', '0x84543f868ec1b1fac510d49d13c069f64cd2d5f9'], ['HER', '0x491c9a23db85623eed455a8efdd6aba9b911c5df'], @@ -543,6 +617,7 @@ const VERIFIED_TOKENS = [ ['HGT', '0xba2184520a1cc49a6159c57e61e1844e085615b6'], ['HIBT', '0x9bb1db1445b83213a56d90d331894b3f26218e4e'], ['HIG', '0xa9240fbcac1f0b9a6adfb04a53c8e3b0cc1d1444'], + ['HIN', '0x7fccadee21660425fdec86029b6362845ffc052c'], ['HKG', '0x14f37b574242d366558db61f3335289a5035c506'], ['HKN', '0x9e6b2b11542f2bc52f3029077ace37e8fd838d7f'], ['HKY', '0x88ac94d5d175130347fc95e109d77ac09dbf5ab7'], @@ -557,27 +632,34 @@ const VERIFIED_TOKENS = [ ['HPB', '0x38c6a68304cdefb9bec48bbfaaba5c5b47818bb2'], ['HST', '0x554c20b7c486beee439277b4540a434566dc4c02'], ['HT', '0x6f259637dcd74c767781e37bc6133cd6a68aa161'], + ['HTX', '0x46ae264bf6d9dc6dd84c31064551f961c67a755c'], + ['HUBS', '0x001fc4a7f2f586596308091c7b296d4535a25a90'], + ['HUSL', '0x56be94d29e1125d2d61d06629c1b251d72c1b3b3'], ['HV', '0x141abb03f001deded9a0223d4ff26d929117b72e'], ['HVN', '0xc0eb85285d83217cd7c891702bcbc0fc401e2d9d'], ['HYDRO', '0xebbdf302c940c6bfd49c6b165f457fdb324649bc'], ['IAD', '0xc1e2097d788d33701ba3cc2773bf67155ec93fc4'], + ['ICD', '0x3c20d67b6b1ae0985f913abb7397babc2fbb1a1f'], ['ICE', '0x5a84969bb663fb64f6d015dcf9f622aedc796750'], ['ICN', '0x888666ca69e0f178ded6d75b5726cee99a87d698'], ['ICO', '0xa33e729bf4fdeb868b534e1f20523463d9c46bee'], ['ICOS', '0x014b50466590340d41307cc54dcee990c8d58aa8'], ['ICX', '0xb5a5f22694352c15b00323844ad545abb2b11028'], + ['ID7', '0x6bc4375083d3ad563de91cad8438f629841448a5'], ['IDEA', '0x814cafd4782d2e728170fda68257983f03321c58'], ['IDH', '0x5136c98a80811c3f46bdda8b5c4555cfd9f812f0'], + ['IDRT', '0x998ffe1e43facffb941dc337dd0468d52ba5b48a'], ['IDXM', '0xcc13fc627effd6e35d2d2706ea3c4d7396c610ea'], ['IETH', '0x859a9c0b44cb7066d956a958b0b82e54c9e44b4b'], ['IFT', '0x7654915a1b82d6d2d0afc37c52af556ea8983c7e'], ['IG', '0x8a88f04e0c905054d2f33b26bb3a46d7091a039a'], + ['IGI', '0x449c640b6c7fce4f8ad2e3dcd900d13be40174af'], ['IHT', '0xeda8b016efa8b1161208cf041cd86972eee0f31e'], ['IIC', '0x16662f73df3e79e54c6c5938b4313f92c524c120'], ['IKB', '0x88ae96845e157558ef59e9ff90e766e22e480390'], ['IMC', '0xe3831c5a982b279a198456d577cfb90424cb6340'], ['IMT', '0x13119e34e140097a507b07a5564bde1bc375d9e6'], - ['IMT (IMT)', '0x22e5f62d0fa19974749faa194e3d3ef6d89c08d7'], + ['IMT (1)', '0x22e5f62d0fa19974749faa194e3d3ef6d89c08d7'], ['IND', '0xf8e386eda857484f5a12e4b5daa9984e06e73705'], ['ING', '0x24ddff6d8b8a42d835af3b440de91f3386554aa4'], ['INRM', '0x48e5413b73add2434e47504e2a22d14940dbfe78'], @@ -592,44 +674,56 @@ const VERIFIED_TOKENS = [ ['IPL', '0x64cdf819d3e75ac8ec217b3496d7ce167be42e80'], ['IPSX', '0x001f0aa5da15585e5b2305dbab2bac425ea71007'], ['IQN', '0x0db8d8b76bc361bacbb72e2c491e06085a97ab31'], + ['ISL', '0x1969442391737025812c2215e77e676d7fa84847'], ['IST34', '0x0cf713b11c9b986ec40d65bd4f7fbd50f6ff2d64'], ['ITC', '0x5e6b6d9abad9093fdc861ea1600eba1b355cd940'], ['ITT', '0x0aef06dcccc531e581f0440059e6ffcc206039ee'], ['IVY', '0xa4ea687a2a7f29cf2dc66b39c68e4411c0d00c49'], ['IXT', '0xfca47962d45adfdfd1ab2d972315db4ce7ccf094'], ['J8T', '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4'], - ['JBX', '0x884e3902c4d5cfa86de4ace7a96aa91ebc25c0ff'], - ['JBX (JBX)', '0x0aaf561eff5bd9c8f911616933f84166a17cfe0c'], + ['JBD', '0x9a3619499825fbae63329aa8bcb3f10cd5958e1c'], + ['JBX', '0x0aaf561eff5bd9c8f911616933f84166a17cfe0c'], + ['JBX (1)', '0x884e3902c4d5cfa86de4ace7a96aa91ebc25c0ff'], ['JC', '0xe2d82dc7da0e6f882e96846451f4fabcc8f90528'], ['JET', '0x8727c112c712c4a03371ac87a74dd6ab104af768'], ['JetCoins', '0x773450335ed4ec3db45af74f34f2c85348645d39'], ['JNT', '0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7'], + ['JOB', '0x17280da053596e097604839c61a2ef5efb7d493f'], ['JOT', '0xdb455c71c1bc2de4e80ca451184041ef32054001'], ['JOY', '0xdde12a12a6f67156e0da672be05c374e1b0a3e57'], + ['JSE', '0x2d184014b5658c453443aa87c8e9c4d57285620b'], ['KAN', '0x1410434b0346f5be678d0fb554e5c7ab620f8f4a'], + ['KAPA', '0xe15254a13d34f9700320330abcb7c7f857af2fb7'], ['KC', '0x0d6dd9f68d24ec1d5fe2174f3ec8dab52b52baf5'], + ['KCS', '0x039b5649a59967e3e936d7471f9c3700100ee1ab'], ['KEE', '0x72d32ac1c5e66bfc5b08806271f8eef915545164'], ['KEY', '0x4cc19356f2d37338b9802aa8e8fc58b0373296e7'], - ['KEY (BihuKey)', '0x4cd988afbad37289baaf53c13e98e2bd46aaea8c'], + ['KEY (1)', '0x4cd988afbad37289baaf53c13e98e2bd46aaea8c'], ['KICK', '0x27695e09149adc738a978e9a678f99e4c39e9eb9'], + ['KICK (1)', '0xc12d1c73ee7dc3615ba4e37e4abfdbddfa38907e'], ['KIN', '0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5'], ['KIND', '0x4618519de4c304f3444ffa7f812dddc2971cc688'], + ['KLOWN', '0xc97a5cdf41bafd51c8dbe82270097e704d748b92'], + ['KMTBA', '0x2bdd6c9bf1bf396a37501aae53751b9946b503da'], ['KNC', '0xdd974d5c2e2928dea5f71b9825b8b646686bd200'], ['KNDC', '0x8e5610ab5e39d26828167640ea29823fe1dd5843'], ['KNT', '0xff5c25d2f40b47c4a37f989de933e26562ef0ac0'], ['KPR', '0xb5c33f965c8899d255c34cdd2a3efa8abcbb3dea'], + ['KRI', '0xeef8102a0d46d508f171d7323bceffc592835f13'], ['KRL', '0x464ebe77c293e473b48cfe96ddcf88fcf7bfdac0'], ['KRTY', '0xbd4ab8b9c26c4888e2792cac6d5793efea9ebb20'], + ['KRW-G', '0x4cc8486f2f3dce2d3b5e27057cf565e16906d12d'], ['KUE', '0xdf1338fbafe7af1789151627b886781ba556ef9a'], ['KWATT', '0x241ba672574a78a3a604cdd0a94429a73a84a324'], ['KZN', '0x9541fd8b9b5fa97381783783cebf2f5fa793c262'], ['LA', '0xe50365f5d679cb98a1dd62d6f6e58e59321bcddf'], ['LALA', '0xfd107b473ab90e8fbd89872144a3dc92c40fa8c9'], + ['LAMB', '0x8971f9fd7196e5cee2c1032b50f656855af7dd26'], ['LATX', '0x2f85e502a988af76f7ee6d83b7db8d6c0a823bf9'], ['LBA', '0xfe5f141bf94fe84bc28ded0ab966c16b17490657'], ['LCS', '0xaa19961b6b858d9f18a115f25aa1d98abc1fdba8'], - ['LCT', '0x4a37a91eec4c97f9090ce66d21d3b3aadf1ae5ad'], - ['LCT (LendConnect)', '0x05c7065d644096a4e4c3fe24af86e36de021074b'], + ['LCT', '0x05c7065d644096a4e4c3fe24af86e36de021074b'], + ['LCT (1)', '0x4a37a91eec4c97f9090ce66d21d3b3aadf1ae5ad'], ['LDC', '0x5102791ca02fc3595398400bfe0e33d7b6c82267'], ['LDX', '0x9efa0e2387e4cba02a6e4e6594b8f4dd209a0b93'], ['LEDU', '0x5b26c5d0772e5bbac8b3182ae9a13f9bb2d03765'], @@ -637,10 +731,13 @@ const VERIFIED_TOKENS = [ ['LEMO (1)', '0xb5ae848edb296c21259b7467331467d2647eecdf'], ['LEMO (2)', '0xd6e354f07319e2474491d8c7c712137bee6862a2'], ['LEND', '0x80fb784b7ed66730e8b1dbd9820afd29931aab03'], + ['LEO', '0xf97b5d65da6b0468b90d531ddae2a69843e6797d'], ['LEV', '0x0f4ca92660efad97a9a70cb0fe969c755439772c'], ['LFR', '0xc798cd1c49db0e297312e4c682752668ce1db2ad'], - ['LG', '0xc520f3ac303a107d8f4b08b326b6ea66a4f961cd'], - ['LGO', '0x123ab195dd38b1b40510d467a6a359b201af056f'], + ['LG', '0x6fe536a1d595c12cbb407c5b2c03999f658a5c72'], + ['LG (1)', '0xc520f3ac303a107d8f4b08b326b6ea66a4f961cd'], + ['LGO', '0x0a50c93c762fdd6e56d86215c24aaad43ab629aa'], + ['LGO (old)', '0x123ab195dd38b1b40510d467a6a359b201af056f'], ['LGR', '0x2eb86e8fc520e0f6bb5d9af08f924fe70558ab89'], ['LIBER', '0xe6dfbf1faca95036b8e76e1fb28933d025b76cc0'], ['LIF', '0xeb9951021698b42e4399f9cbb6267aa35f82d59d'], @@ -660,12 +757,16 @@ const VERIFIED_TOKENS = [ ['LOK', '0x21ae23b882a340a22282162086bc98d3e2b73018'], ['LOOK', '0x253c7dd074f4bacb305387f922225a4f737c08bd'], ['LOOM', '0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0'], + ['LOVE', '0x5a276aeb77bcfdac8ac6f31bbc7416ae1a85eef2'], ['LPT', '0x58b6a8a3302369daec383334672404ee733ab239'], - ['LRC', '0xef68e7c694f40c8202821edf525de3782458639f'], + ['LQD', '0xd29f0b5b3f50b07fe9a9511f7d86f4f4bac3f8c4'], + ['LRC', '0xbbbbca6a901c926f240b89eacb641d8aec7aeafd'], + ['LRC (old)', '0xef68e7c694f40c8202821edf525de3782458639f'], ['LUC', '0x5dbe296f97b23c4a6aa6183d73e574d02ba5c719'], ['LUCK', '0xfb12e3cca983b9f59d90912fd17f8d745a8b2953'], ['LUM', '0xa89b5934863447f6e4fc53b315a93e873bda69a3'], ['LUN', '0xfa05a73ffe78ef8f1a739473e462c54bae6567d9'], + ['LVN', '0xc8cac7672f4669685817cf332a33eb249f085475'], ['LYM', '0x57ad67acf9bf015e4820fbd66ea1a21bed8852ec'], ['LYM (1)', '0xc690f7c7fcffa6a82b79fab7508c466fefdfc8c5'], ['LYS', '0xdd41fbd1ae95c5d9b198174a28e04be6b3d1aa27'], @@ -675,6 +776,7 @@ const VERIFIED_TOKENS = [ ['MANA', '0x0f5d2fb29fb7d3cfee444a200298f468908cc942'], ['MART', '0xfdcc07ab60660de533b5ad26e1457b565a9d59bd'], ['MAS', '0x23ccc43365d9dd3882eab88f43d515208f832430'], + ['MBC', '0xb63ffe88c2903080ccf9ab14efa56a11e3e01273'], ['MBCASH', '0xefbb3f1058fd8e0c9d7204f532e17d7572affc3e'], ['MBRS', '0x386467f1f3ddbe832448650418311a479eecfc57'], ['MCAP', '0x93e682107d1e9defb0b5ee701c71707a4b2e46bc'], @@ -682,10 +784,12 @@ const VERIFIED_TOKENS = [ ['MCO', '0xb63b606ac810a52cca15e44bb630fd42d8d1d83d'], ['MDA', '0x51db5ad35c671a87207d88fc11d593ac0c8415bd'], ['MDS', '0x66186008c1050627f979d464eabb258860563dbe'], + ['MDS (1)', '0x92b7e4409dcf8c439f313ed1f05fdc0550d18ddd'], ['MDT', '0x814e0908b12a99fecf5bc101bb5d0b8b5cdf7d26'], ['MEDX', '0xfd1e80508f243e64ce234ea88a5fd2827c71d4b7'], - ['MESH', '0xf03045a4c8077e38f3b8e2ed33b8aee69edf869f'], - ['MESH (Meshbox)', '0x01f2acf2914860331c1cb1a9acecda7475e06af8'], + ['MESG', '0x420167d87d35c3a249b32ef6225872fbd9ab85d2'], + ['MESH', '0x01f2acf2914860331c1cb1a9acecda7475e06af8'], + ['MESH (1)', '0xf03045a4c8077e38f3b8e2ed33b8aee69edf869f'], ['MEST', '0x5b8d43ffde4a2982b9a5387cdf21d54ead64ac8d'], ['MET', '0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e'], ['METM', '0xfef3884b603c33ef8ed4183346e093a173c94da6'], @@ -693,10 +797,12 @@ const VERIFIED_TOKENS = [ ['MFT', '0xdf2c7238198ad8b389666574f2d8bc411a4b7428'], ['MFTU', '0x05d412ce18f24040bb3fa45cf2c69e506586d8e8'], ['MGO', '0x40395044ac3c0c57051906da938b54bd6557f212'], + ['MHLK', '0xe3d0a162fcc5c02c9448274d7c58e18e1811385f'], ['MIC', '0x3a1237d38d0fb94513f85d61679cad7f38507242'], ['MILC', '0xd717b75404022fb1c8582adf1c66b9a553811754'], ['MIT', '0xe23cd160761f63fc3a1cf78aa034b6cdf97d3e0c'], ['MIT (Mychatcoin)', '0xad8dd4c725de1d31b9e8f8d146089e9dc6882093'], + ['MITH', '0x3893b9422cd5d70a81edeffe3d5a1c6a978310bb'], ['MITX', '0x4a527d8fc13c5203ab24ba0944f4cb14658d1db6'], ['MKR', '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2'], ['MKT', '0x7939882b54fcf0bcae6b53dec39ad6e806176442'], @@ -707,8 +813,8 @@ const VERIFIED_TOKENS = [ ['MNTP', '0x83cee9e086a77e492ee0bb93c2b0437ad6fdeccc'], ['MOC', '0x865ec58b06bf6305b886793aa20a2da31d034e68'], ['MOD', '0x957c30ab0426e0c93cd8241e2c60392d08c6ac8e'], - ['MORE', '0x59061b6f26bb4a9ce5828a19d35cfd5a4b80f056'], - ['MORE (Mithril Ore)', '0x501262281b2ba043e2fbf14904980689cddb0c78'], + ['MORE', '0x501262281b2ba043e2fbf14904980689cddb0c78'], + ['MORE (1)', '0x59061b6f26bb4a9ce5828a19d35cfd5a4b80f056'], ['MOT', '0x263c618480dbe35c300d8d5ecda19bbb986acaed'], ['MOZO', '0x44bf22949f9cc84b61b9328a9d885d1b5c806b41'], ['MRK', '0xf453b5b9d4e0b5c62ffb256bb2378cc2bc8e8a89'], @@ -717,7 +823,7 @@ const VERIFIED_TOKENS = [ ['MRV', '0xab6cf87a50f17d7f5e1feaf81b6fe9ffbe8ebf84'], ['MSP', '0x68aa3f232da9bdc2343465545794ef3eea5209bd'], ['MTC', '0x905e337c6c8645263d3521205aa37bf4d034e745'], - ['MTC (MTC Mesh Network)', '0xdfdc0d82d96f8fd40ca0cfb4a288955becec2088'], + ['MTC (1)', '0xdfdc0d82d96f8fd40ca0cfb4a288955becec2088'], ['MTH', '0xaf4dce16da2877f8c9e00544c93b62ac40631f16'], ['MTL', '0xf433089366899d83a9f26a773d59ec7ecf30355e'], ['MTN', '0x41dbecc1cdc5517c6f76f6a6e836adbee2754de3'], @@ -726,6 +832,7 @@ const VERIFIED_TOKENS = [ ['MTX', '0x0af44e2784637218dd1d32a322d44e603a8f0c6a'], ['MUSD', '0xa52383b665b91dce42dd4b6d1e0fb37d3effe489'], ['MUXE', '0x515669d308f887fd83a471c7764f5d084886d34d'], + ['MVG', '0x71396a6410249725c5609646c4e449c6c4d41e27'], ['MVL', '0xa849eaae994fb86afa73382e9bd88c2b6b18dc71'], ['MVP', '0x8a77e40936bbc27e80e9a3f526368c967869c86d'], ['MWAT', '0x6425c6be902d692ae2db752b3c268afadb099d3b'], @@ -738,8 +845,8 @@ const VERIFIED_TOKENS = [ ['NBAI', '0x17f8afb63dfcdcc90ebe6e84f060cc306a98257d'], ['NBC', '0x9f195617fa8fbad9540c5d113a99a0a0172aaedc'], ['NCASH', '0x809826cceab68c387726af962713b64cb5cb3cca'], - ['NCC', '0x9344b383b1d59b5ce3468b234dab43c7190ba735'], - ['NCC (NeuroChain)', '0x5d48f293baed247a2d0189058ba37aa238bd4725'], + ['NCC', '0x5d48f293baed247a2d0189058ba37aa238bd4725'], + ['NCC (1)', '0x9344b383b1d59b5ce3468b234dab43c7190ba735'], ['NCT', '0x9e46a38f5daabe8683e10793b06749eef7d733d1'], ['NDC', '0xa54ddc7b3cce7fc8b1e3fa0256d0db80d2c10970'], ['NDX', '0x1966d718a565566e8e202792658d7b5ff4ece469'], @@ -752,6 +859,8 @@ const VERIFIED_TOKENS = [ ['NGC', '0x72dd4b6bd852a3aa172be4d6c5a6dbec588cf131'], ['NIMFA', '0xe26517a9967299453d3f1b48aa005e6127e67210'], ['NIO', '0x5554e04e76533e1d14c52f05beef6c9d329e1e30'], + ['NIO (1)', '0xcc2ad789f459bc73e5fb33364964b658a62c1ee7'], + ['NLYA', '0xcee4019fd41ecdc8bae9efdd20510f4b6faa6197'], ['NMR', '0x1776e1f26f98b1a5df9cd347953a26dd3cb46671'], ['NOAH', '0x58a4884182d9e835597f405e5f258290e46ae7c2'], ['NOBS', '0xf4faea455575354d2699bc209b0a65ca99f69982'], @@ -760,12 +869,14 @@ const VERIFIED_TOKENS = [ ['NPER', '0x4ce6b362bc77a24966dda9078f9cef81b3b886a7'], ['NPX', '0x28b5e12cce51f15594b0b91d5b5adaa70f684a02'], ['NPXS', '0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3'], + ['NRM', '0x000000085824f23a070c2474442ed014c0e46b58'], ['NTK', '0x5d4d57cd06fa7fe99e26fdc481b468f77f05073c'], - ['NTK (Neurotoken)', '0x69beab403438253f13b6e92db91f7fb849258263'], + ['NTK (1)', '0x69beab403438253f13b6e92db91f7fb849258263'], ['NTO', '0x8a99ed8a1b204903ee46e733f2c1286f6d20b177'], ['NTWK', '0x2233799ee2683d75dfefacbcd2a26c78d34b470d'], ['NUG', '0x245ef47d4d0505ecf3ac463f4d81f41ade8f1fd1'], ['NULS', '0xb91318f35bdb262e9423bc7c7c2a3a93dd93c92c'], + ['NUSD', '0x0c6144c16af288948c8fdb37fd8fec94bff3d1d9'], ['NxC', '0x45e42d659d9f9466cd5df622506033145a9b89bc'], ['NXX', '0x7627de4b93263a6a7570b8dafa64bae812e5c394'], ['NXX OLD', '0x5c6183d10a00cd747a6dbb5f658ad514383e9419'], @@ -774,11 +885,14 @@ const VERIFIED_TOKENS = [ ['OCC', '0x0235fe624e044a05eed7a43e16e3083bc8a4287a'], ['OCN', '0x4092678e4e78230f46a1534c0fbc8fa39780892b'], ['ODE', '0xbf52f2ab39e26e0951d2a02b49b7702abe30406a'], + ['OGK', '0x5f4506db5b568e103532f84d32a285cdd5aa5751'], ['OGN', '0x8207c1ffc5b6804f6024322ccf34f29c3541ae26'], ['OHNI', '0x6f539a9456a5bcb6334a1a41207c3788f5825207'], - ['OHNI (OHNI)', '0x7f2176ceb16dcb648dc924eff617c3dc2befd30d'], + ['OHNI (1)', '0x7f2176ceb16dcb648dc924eff617c3dc2befd30d'], + ['OIKOS', '0x21e13cb3f3f26f92a62ac7adab4093e8997d1fb1'], ['OJX', '0xbeef546ac8a4e0a80dc1e2d696968ef54138f1d4'], ['OLD_MKR', '0xc66ea802717bfb9833400264dd12c2bceaa34a6d'], + ['OLDPCL', '0x3618516f45cd3c913f81f9987af41077932bc40d'], ['OLE', '0x9d9223436ddd466fc247e9dbbd20207e640fef58'], ['OLT', '0x64a60493d888728cf42616e034a0dfeae38efcf0'], ['OMG', '0xd26114cd6ee289accf82350c8d8487fedb8a0c07'], @@ -790,41 +904,48 @@ const VERIFIED_TOKENS = [ ['ONL', '0x6863be0e7cf7ce860a574760e9020d519a8bdc47'], ['ONOT', '0xb31c219959e06f9afbeb36b388a4bad13e802725'], ['OPEN', '0x69c4bb240cf05d51eeab6985bab35527d04a8c64'], - ['OPEN (OPEN)', '0xe9de1c630753a15d7021cc563429c21d4887506f'], + ['OPEN (1)', '0xe9de1c630753a15d7021cc563429c21d4887506f'], + ['OPQ', '0x77599d2c6db170224243e255e6669280f11f1473'], ['OPT', '0x4355fc160f74328f9b383df2ec589bb3dfd82ba0'], ['OPTI', '0x832904863978b94802123106e6eb491bdf0df928'], + ['OR', '0x3ff9cebbeaa7bcc48a952a011a02a22a1fdd1c62'], ['ORBS', '0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa'], ['ORCA', '0x6f59e0461ae5e2799f1fb3847f05a63b16d0dbf8'], ['ORI', '0xd2fa8f92ea72abb35dbd6deca57173d22db2ba49'], ['ORME', '0x516e5436bafdc11083654de7bb9b95382d08d5de'], ['ORME (1)', '0xc96df921009b790dffca412375251ed1a2b75c60'], ['ORS', '0xeb9a4b185816c354db92db09cc3b50be60b901b6'], + ['ORX', '0x4e84a65b5664d33b67750771f8beaec458bd6729'], ['OST', '0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca'], ['OTN', '0x881ef48211982d01e2cb7092c915e647cd40d85c'], ['OWN', '0x170b275ced089fffaebfe927f445a350ed9160dc'], ['OWT', '0xc2494604e9dcefa2a70dcebf81e6d7be064a334e'], ['Ox Fina', '0x65a15014964f2102ff58647e16a16a6b9e14bcf6'], + ['P2PS', '0x4527a3b4a8a150403090a99b87effc96f2195047'], ['PAI', '0xb9bb08ab7e9fa0a1356bd4a39ec0ca267e03b0b3'], ['PAL', '0xfedae5642668f8636a11987ff386bfd215f942ee'], ['PARETO', '0xea5f88e54d982cbb0c441cde4e79bc305e5b43bc'], - ['PASS', '0xee4458e052b533b1aabd493b5f8c4d85d7b263dc'], - ['PASS (PASS Token)', '0x77761e63c05aee6648fdaeaa9b94248351af9bcd'], + ['PASS', '0x77761e63c05aee6648fdaeaa9b94248351af9bcd'], + ['PASS (1)', '0xee4458e052b533b1aabd493b5f8c4d85d7b263dc'], ['PAT', '0xf3b3cad094b89392fce5fafd40bc03b80f2bc624'], ['PATENTS', '0x694404595e3075a942397f466aacd462ff1a7bd0'], ['PATH', '0xf813f3902bbc00a6dce378634d3b79d84f9803d7'], ['PATR', '0x9fba684d77d2d6a1408c24b60a1f5534e71f5b75'], ['PAX', '0x8e870d67f660d95d5be530380d0ec0bd388289e1'], + ['PAXG', '0x45804880de22913dafe09f4980848ece6ecbaf78'], ['PAY', '0xb97048628db6b661d4c2aa833e95dbe1a905b280'], ['PBL', '0x55648de19836338549130b1af587f16bea46f66b'], ['PBT', '0xf4c07b1865bc326a3c01339492ca7538fd038cc0'], ['PCH', '0xe3f4b4a5d91e5cb9435b947f090a319737036312'], - ['PCH (PITCH)', '0xfcac7a7515e9a9d7619fa77a1fa738111f66727e'], - ['PCL', '0x3618516f45cd3c913f81f9987af41077932bc40d'], + ['PCH (1)', '0xfcac7a7515e9a9d7619fa77a1fa738111f66727e'], + ['PCL', '0x0f02e27745e3b6e9e1310d19469e2b5d7b5ec99a'], ['PCLOLD', '0x53148bb4551707edf51a1e8d7a93698d18931225'], ['PDATA', '0x0db03b6cde0b2d427c64a04feafd825938368f1f'], ['PEG', '0x8ae56a6850a7cbeac3c3ab2cb311e7620167eac8'], ['PEP', '0xbb0ef9e617faddf54b8d16e29046f72b4d3ec77f'], + ['PESO', '0x30fef258d2728f9d1edf038059c725faf785697e'], ['PET', '0x5884969ec0480556e11d119980136a4c17edded1'], + ['PETH', '0xf53ad2c6851052a81b42133467480961b2321c09'], ['PETRO', '0xec18f898b4076a3e18f1089d33376cc380bde61d'], ['PEXT', '0x55c2a0c171d920843560594de3d6eecc09efc098'], ['PFR', '0x2fa32a39fc1c399e0cc7b2935868f5165de7ce97'], @@ -858,14 +979,16 @@ const VERIFIED_TOKENS = [ ['PRG', '0x7728dfef5abd468669eb7f9b48a7f70a501ed29d'], ['PRIX', '0x3adfc4999f77d04c8341bac5f3a76f58dff5b37a'], ['PRL', '0x1844b21593262668b7248d0f57a220caaba46ab9'], - ['PRO', '0x9041fe5b3fdea0f5e4afdc17e75180738d877a01'], - ['PRO (Propy)', '0x226bb599a12c826476e3a771454697ea52e9e220'], + ['PRO', '0x226bb599a12c826476e3a771454697ea52e9e220'], + ['PRO (1)', '0x9041fe5b3fdea0f5e4afdc17e75180738d877a01'], ['PRON', '0xa3149e0fa0061a9007faf307074cdcd290f0e2fd'], - ['PRPS', '0xd94f2778e2b3913c53637ae60647598be588c570'], + ['PROPS', '0x6fe56c0bcdd471359019fcbc48863d6c3e9d4f41'], + ['PRPS', '0x7641b2ca9ddd58addf6e3381c1f994aac5f1a32f'], ['PRPS (1)', '0xe40c374d8805b1dd58cdceff998a2f6920cb52fd'], - ['PRPS (2)', '0x7641b2ca9ddd58addf6e3381c1f994aac5f1a32f'], + ['PRPS (2)', '0xd94f2778e2b3913c53637ae60647598be588c570'], ['PRS', '0x163733bcc28dbf26b41a8cfa83e369b5b3af741b'], ['PRSP', '0x0c04d4f331da8df75f9e2e271e3f3f1494c66c36'], + ['PSDN', '0x5f85c60187ab233ca6e750731d15e7efd061fbde'], ['PST', '0x5d4abc77b8405ad177d8ac6682d584ecbfd46cec'], ['PT', '0x66497a283e0a007ba3974e837784c6ae323447de'], ['PTC', '0x2a8e98e256f32259b5e5cb55dd63c8e891950666'], @@ -880,7 +1003,8 @@ const VERIFIED_TOKENS = [ ['PYLNT', '0x7703c35cffdc5cda8d27aa3df2f9ba6964544b6e'], ['QASH', '0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6'], ['QAU', '0x671abbe5ce652491985342e85428eb1b07bc6c64'], - ['QBIT', '0xcb5ea3c190d8f82deadf7ce5af855ddbf33e3962'], + ['QBIT', '0x1602af2c782cc03f9241992e243290fccf73bb13'], + ['QBIT (Old)', '0xcb5ea3c190d8f82deadf7ce5af855ddbf33e3962'], ['QBX', '0x2467aa6b5a2351416fd4c3def8462d841feeecec'], ['QKC', '0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664'], ['QNT', '0x4a220e6096b25eadb88358cb44068a3248254675'], @@ -892,12 +1016,13 @@ const VERIFIED_TOKENS = [ ['QUN', '0x264dc2dedcdcbb897561a57cba5085ca416fb7b4'], ['QVT', '0x1183f92a5624d68e85ffb9170f16bf0443b4c242'], ['R', '0x48f775efbe4f5ece6e0df2f7b5932df56823b990'], + ['RAE', '0xe5a3229ccb22b6484594973a03a3851dcd948756'], ['RAO', '0x45edb535942a8c84d9f4b5d37e1b25f91ea4804c'], ['RATING', '0xe8663a64a96169ff4d95b4299e7ae9a76b905b31'], ['RBLX', '0xfc2c4d8f95002c14ed0a7aa65102cac9e5953b5e'], ['RCN', '0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6'], - ['RCT', '0x2a3aa9eca41e720ed46b5a70d6c37efa47f768ac'], - ['RCT (RealChain)', '0x13f25cd52b21650caa8225c9942337d914c9b030'], + ['RCT', '0x13f25cd52b21650caa8225c9942337d914c9b030'], + ['RCT (1)', '0x2a3aa9eca41e720ed46b5a70d6c37efa47f768ac'], ['RDN', '0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6'], ['REA', '0x767ba2915ec344015a7938e3eedfec2785195d05'], ['REAL', '0x9214ec02cb71cba0ada6896b8da260736a67ab10'], @@ -909,9 +1034,11 @@ const VERIFIED_TOKENS = [ ['REMI', '0x13cb85823f78cff38f0b0e90d3e975b8cb3aad64'], ['REN', '0x408e41876cccdc0f92210600ef50372656052a38'], ['REP', '0x1985365e9f78359a9b6ad760e32412f4a445e862'], + ['REP (1)', '0xe94327d07fc17907b4db788e5adf2ed424addff6'], ['REQ', '0x8f8221afbb33998d8584a2b05749ba73c37a938a'], ['REX', '0xf05a9382a4c3f29e2784502754293d88b835109c'], ['RFR', '0xd0929d411954c47438dc1d871dd6081f5c5e149c'], + ['RFX', '0xf4c571fb6dd704e58561cdd275fa4b80cfe82f76'], ['RGS', '0x4c383bdcae52a6e1cb810c76c70d6f31a249ec9b'], ['RHOC', '0x168296bb09e24a88805cb9c33356536b980d3fc5'], ['RING', '0x86e56f3c89a14528858e58b3de48c074538baf2c'], @@ -934,23 +1061,28 @@ const VERIFIED_TOKENS = [ ['ROCK2PAY', '0x0e3de3b0e3d617fd8d1d8088639ba877feb4d742'], ['ROK', '0xc9de4b7f0c3d991e967158e4d4bfa4b51ec0b114'], ['ROUND', '0x4993cb95c7443bdc06155c5f5688be9d8f6999a5'], + ['RPE', '0xccc85aa8999505d6f886a32da4a107bbe0d1de9e'], ['RPL', '0xb4efd85c19999d84251304bda99e90b92300bd93'], ['RTB', '0xec491c1088eae992b7a214efb0a266ad0927a72a'], + ['RTC', '0x7a5599b97e8c4abb5dd06eba0e9d1f75af818db9'], ['RTH', '0x3fd8f39a962efda04956981c31ab89fab5fb8bc8'], ['RTN', '0x54b293226000ccbfc04df902eec567cb4c35a903'], ['RUFF', '0xf278c1ca969095ffddded020290cf8b5c424ace2'], ['RUNE', '0xdee02d94be4929d26f67b64ada7acf1914007f10'], ['RVL', '0x41f615e24fabd2b097a320e9e6c1f448cb40521c'], ['RVT', '0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244'], + ['RYLT', '0xd30a2e9347ad48ea208ee563a9cdfd80e962a727'], ['S-A-PAT', '0x1ec8fe51a9b6a3a6c427d17d9ecc3060fbc4a45c'], ['S-ETH', '0x3eb91d237e491e0dee8582c402d85cb440fb6b54'], ['SAC', '0xabc1280a0187a2020cc675437aed400185f86db6'], + ['SAI', '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359'], ['SALT', '0x4156d3342d5c385a87d264f90653733592000581'], ['SAN', '0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098'], ['SCANDI', '0x78fe18e41f436e1981a3a60d1557c8a7a9370461'], ['SCL', '0xd7631787b4dcc87b1254cfd1e5ce48e96823dee8'], ['SCRL', '0x24dcc881e7dd730546834452f21872d5cb4b5293'], ['SEELE', '0xb1eef147028e9f480dbc5ccaa3277d417d1b85f0'], + ['SELF', '0x67ab11058ef23d0a19178f61a050d3c38f81ae21'], ['SENC', '0xa13f0743951b4f6e3e3aa039f682e17279f52bc3'], ['SenSatorI', '0x4ca74185532dc1789527194e5b9c866dd33f4e82'], ['SENSE', '0x6745fab6801e376cd24f03572b9c9b0d4edddccf'], @@ -962,30 +1094,32 @@ const VERIFIED_TOKENS = [ ['SGP', '0x33c623a2baafeb8d15dfaf3ce44095efec83d72c'], ['SGR', '0xcb5a05bef3257613e984c17dbcf039952b6d883f'], ['SGT', '0x37427576324fe1f3625c9102674772d7cf71377d'], - ['SGT (SGT)', '0xd248b0d48e44aaf9c49aea0312be7e13a6dc1468'], + ['SGT (1)', '0xd248b0d48e44aaf9c49aea0312be7e13a6dc1468'], ['SHIP', '0xe25b0bba01dc5630312b6a21927e578061a13f55'], ['SHIT', '0xef2e9966eb61bb494e5375d5df8d67b7db8a780d'], ['SHL', '0x8542325b72c6d9fc0ad2ca965a78435413a915a0'], ['SHP', '0xef2463099360a085f1f10b076ed72ef625497a06'], + ['SIBU', '0x980e45ab37c6bcaf93fe911b3e207e08a3a60b5e'], ['SIFT', '0x8a187d5285d316bcbc9adafc08b51d70a0d8e000'], ['SIG', '0x6888a16ea9792c15a4dcf2f6c623d055c8ede792'], ['SKB', '0x4af328c52921706dcb739f25786210499169afe6'], ['SKE', '0x13db74b3cf512f65c4b91683940b4f3955e05085'], ['SKIN', '0x2bdc0d42996017fce214b21607a515da41a9e0c5'], - ['SKM', '0xd99b8a7fa48e25cce83b81812220a3e03bf64e5f'], + ['SKM', '0x048fe49be32adfc9ed68c37d32b5ec9df17b3603'], + ['SKM (1)', '0xd99b8a7fa48e25cce83b81812220a3e03bf64e5f'], ['SKO1', '0x4994e81897a920c0fea235eb8cedeed3c6fff697'], ['SKR', '0x4c382f8e09615ac86e08ce58266cc227e7d4d913'], - ['SKRP', '0xfdfe8b7ab6cf1bd1e3d14538ef40686296c42052'], - ['SKRP (1)', '0x324a48ebcbb46e61993931ef9d35f6697cd2901b'], - ['SKRP (2)', '0x6e34d8d84764d40f6d7b39cd569fd017bf53177d'], + ['SKRP', '0x324a48ebcbb46e61993931ef9d35f6697cd2901b'], + ['SKRP (1)', '0x6e34d8d84764d40f6d7b39cd569fd017bf53177d'], + ['SKRP (2)', '0xfdfe8b7ab6cf1bd1e3d14538ef40686296c42052'], ['SKYM', '0x7297862b9670ff015192799cc849726c88bf1d77'], ['SLT', '0x7a5ff295dc8239d5c2374e4d894202aaf029cab6'], ['SLY', '0x7928c8abf1f74ef9f96d4d0a44e3b4209d360785'], ['SMART', '0x6f6deb5db0c4994a8283a01d6cfeeb27fc3bbe9c'], ['SMS', '0x39013f961c378f02c2b82a6e1d31e9812786fd9d'], - ['SMT', '0x78eb8dc641077f049f910659b6d580e80dc4d237'], - ['SMT (Smart Node)', '0x2dcfaac11c9eebd8c6c42103fe9e2a6ad237af27'], - ['SMT (SmartMesh)', '0x55f93985431fc9304077687a35a1ba103dc1e081'], + ['SMT', '0x2dcfaac11c9eebd8c6c42103fe9e2a6ad237af27'], + ['SMT (1)', '0x55f93985431fc9304077687a35a1ba103dc1e081'], + ['SMT (2)', '0x78eb8dc641077f049f910659b6d580e80dc4d237'], ['SNBL', '0x198a87b3114143913d4229fb0f6d4bcb44aa8aff'], ['SNC', '0xf4134146af2d511dd5ea8cdb1c4ac88c57d60404'], ['SND', '0xf333b2ace992ac2bbd8798bf57bc65a06184afba'], @@ -1005,13 +1139,17 @@ const VERIFIED_TOKENS = [ ['SPANK', '0x42d6622dece394b54999fbd73d108123806f6a18'], ['SPARC', '0x58bf7df57d9da7113c4ccb49d8463d4908c735cb'], ['SPARTA', '0x24aef3bf1a47561500f9430d74ed4097c47f51f2'], + ['SPAZ', '0x8f9bfe5b6a5c3fea8c64ad41a5cf6f60ec4aa47c'], + ['SPC', '0x8069080a922834460c3a092fb2c1510224dc066b'], ['SPD', '0x1dea979ae76f26071870f824088da78979eb91c8'], ['SPF', '0x85089389c14bd9c77fc2b8f0c3d1dc3363bf06ef'], ['SPHTX', '0x3833dda0aeb6947b98ce454d89366cba8cc55528'], ['SPICE', '0x0324dd195d0cd53f9f07bee6a48ee7a20bad738f'], + ['SPIRIT', '0x92d7a89405ea3cc605a467e834236e09df60bf16'], ['SPN', '0x20f7a3ddf244dc9299975b4da1c39f8d5d75f05a'], ['SPX', '0x05aaaa829afa407d83315cded1d45eb16025910c'], ['SRN', '0x68d57c9a1c35f63e2c83ee8e49a64e9d70528d25'], + ['SRX', '0x32f3b8a00b6912d0314be212fe9538b7b9430c12'], ['SS', '0xb15fe5a123e647ba594cea7a1e648646f95eb4aa'], ['SS (1)', '0xbbff862d906e348e9946bfb2132ecb157da3d4b4'], ['SSH', '0x6e2050cbfb3ed8a4d39b64cc9f47e711a03a5a89'], @@ -1023,6 +1161,8 @@ const VERIFIED_TOKENS = [ ['STB', '0x09bca6ebab05ee2ae945be4eda51393d94bf7b99'], ['STC', '0x629aee55ed49581c33ab27f9403f7992a289ffd5'], ['STK', '0xae73b38d1c9a8b274127ec30160a4927c4d71824'], + ['STL', '0xc1ad68c43508dd5addb8d0ac0927dbe752d149d6'], + ['STM', '0x302ce6674a16b54ba1b8a49fed64c471ede6c174'], ['STN', '0x599346779e90fc3f5f997b5ea715349820f91571'], ['STORJ', '0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac'], ['STORM', '0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433'], @@ -1037,40 +1177,53 @@ const VERIFIED_TOKENS = [ ['SUR', '0xe120c1ecbfdfea7f0a8f0ee30063491e8c26fedf'], ['sUSD', '0x57ab1e02fee23774580c119740129eac7081e9d3'], ['SVD', '0xbdeb4b83251fb146687fa19d1c660f99411eefe3'], + ['SWAP', '0xc958e9fb59724f8b0927426a8836f1158f0d03cf'], ['SWFTC', '0x0bb217e40f8a5cb79adf04e1aab60e5abd0dfc1e'], ['SWM', '0x9e88613418cf03dca54d6a2cf6ad934a78c7a17a'], ['SWT', '0xb9e7f8568e08d5659f5d29c4997173d84cdf2607'], ['SXDT', '0x12b306fa98f4cbb8d4457fdff3a0a0a56f07ccdf'], + ['SXR', '0xfcdae8771f8d28e3b9027ab58f4a20749767a097'], ['SXUT', '0x2c82c73d5b34aa015989462b2948cd616a37641f'], ['SYN', '0x10b123fddde003243199aad03522065dc05827a0'], ['TaaS', '0xe7775a6e9bcf904eb39da2b68c5efb4f9360e08c'], ['TALAO', '0x1d4ccc31dab6ea20f461d329a0562c1c58412515'], ['TAN', '0x2c36204a0712a2a50e54a62f7c4f01867e78cb53'], ['TAU', '0xc27a2f05fa577a83ba0fdb4c38443c0718356501'], + ['TAUD', '0x00006100f7090010005f1bd7ae6122c3c2cf0090'], + ['TAUR', '0x64786063a352b399d44de2875909d1229f120ebe'], + ['TBC', '0x627974847450c45b60b3fe3598f4e6e4cf945b9a'], ['TBC2', '0xfaccd5fc83c3e4c3c1ac1ef35d15adf06bcf209c'], ['TBT', '0xafe60511341a37488de25bef351952562e31fcc1'], ['TBX', '0x3a92bd396aef82af98ebc0aa9030d25a23b11c6b'], ['TCA', '0xfa0ef5e034cae1ae752d59bdb8adcde37ed7ab97'], + ['TCAD', '0x00000100f2a2bd000715001920eb70d229700085'], ['TCH', '0x9972a0f24194447e73a7e8b6cd26a52e02ddfad5'], ['TCNX', '0x28d7f432d24ba6020d1cbd4f28bedc5a82f24320'], + ['TCST', '0x9910f4aed4a7550a4120ad7da8df8b56e91197fa'], + ['TCT', '0xed82730312babb41367e060911f798002ffa445f'], ['TDH', '0x2a1dbabe65c595b0022e75208c34014139d5d357'], ['TEAM', '0x1c79ab32c66acaa1e9e81952b8aaa581b43e54e7'], + ['TECH', '0xa1ba7186eec1be5114b0cf49b95b23adc4131b51'], ['TEL', '0x85e076361cc813a908ff672f9bad1541474402b2'], - ['TEL (Meditel)', '0xec32a9725c59855d841ba7d8d9c99c84ff754688'], + ['TEL (1)', '0xec32a9725c59855d841ba7d8d9c99c84ff754688'], ['TEN', '0xdd16ec0f66e54d453e6756713e533355989040e4'], + ['TENX', '0x515ba0a2e286af10115284f151cf398688a69170'], ['TFD', '0xe5f166c0d8872b68790061317bb6cca04582c912'], ['TFL', '0xa7f976c360ebbed4465c2855684d1aae5271efa9'], ['TGAME', '0xf8e06e4e4a80287fdca5b02dccecaa9d0954840f'], + ['TGBP', '0x00000000441378008ea67f4284a57932b1c000a5'], ['TGT', '0xac3da587eac229c9896d919abc235ca4fd7f72c1'], + ['TGT (1)', '0xf96aa656ec0e0ac163590db372b430cf3c0d61ca'], ['Thar', '0x96c30d5499ef6ea96a9c221bc18bc39d29c97f27'], ['THETA', '0x3883f5e181fccaf8410fa61e12b59bad963fb645'], + ['THKD', '0x0000852600ceb001e08e00bc008be620d60031f2'], ['THR', '0x1cb3209d45b2a60b7fbca1ccdbf87f674237a4aa'], ['THRT', '0x4f27053f32eda8af84956437bc00e5ffa7003287'], ['THUG', '0xfe7b915a0baa0e79f85c5553266513f7c1c03ed0'], - ['TIC', '0x72430a612adc007c50e3b6946dbb1bb0fd3101d1'], - ['TIC (Trust Invest)', '0x614b9802d45aa1bc2282651dc1408632f9027a6e'], - ['TICO', '0xa5db1d6f7a0d5bccc17d0bfd39d7af32d5e5edc6'], - ['TICO (1)', '0x7f4b2a690605a7cbb66f7aa6885ebd906a5e2e9e'], + ['TIC', '0x614b9802d45aa1bc2282651dc1408632f9027a6e'], + ['TIC (1)', '0x72430a612adc007c50e3b6946dbb1bb0fd3101d1'], + ['TICO', '0x7f4b2a690605a7cbb66f7aa6885ebd906a5e2e9e'], + ['TICO (1)', '0xa5db1d6f7a0d5bccc17d0bfd39d7af32d5e5edc6'], ['TIE', '0x999967e2ec8a74b7c8e9db19e039d920b31d39d0'], ['TIG', '0xeee2d00eb7deb8dd6924187f5aa3496b7d06e62a'], ['TIME', '0x6531f133e6deebe7f2dce5a0441aa7ef330b4e53'], @@ -1083,6 +1236,7 @@ const VERIFIED_TOKENS = [ ['TLX', '0xb3616550abc8af79c7a5902def9efa3bc9a95200'], ['TMT', '0x3209f98bebf0149b769ce26d71f7aea8e435efea'], ['TMTG', '0x10086399dd8c1e3de736724af52587a2044c9fa2'], + ['TNB', '0xf7920b0768ecb20a123fac32311d07d193381d6f'], ['TNS', '0xb0280743b44bf7db4b6be482b2ba7b75e5da096c'], ['TNT', '0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8'], ['TOK', '0x9a49f02e128a8e989b443a8f94843c0918bf45e7'], @@ -1091,6 +1245,7 @@ const VERIFIED_TOKENS = [ ['TRAC', '0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f'], ['TRAK', '0x12759512d326303b45f1cec8f7b6fd96f387778e'], ['TRC', '0xcb3f902bf97626391bf8ba87264bbc3dc13469be'], + ['TRC (1)', '0xdb52a87cda28eda00f8add1c79c9db4a50a70457'], ['TRCN', '0x566fd7999b1fc3988022bd38507a48f0bcf22c77'], ['TRCT', '0x30cecb5461a449a90081f5a5f55db4e048397bab'], ['TRDT', '0x33f90dee07c6e8b9682dd20f73e6c358b2ed0f03'], @@ -1105,8 +1260,10 @@ const VERIFIED_TOKENS = [ ['TUSD (OLD)', '0x8dd5fbce2f6a956c3022ba3663759011dd51e73e'], ['TWN', '0x2ef1ab8a26187c58bb8aaeb11b2fc6d25c5c0716'], ['TWNKL', '0xfbd0d1c77b501796a35d86cf91d65d9778eee695'], + ['UBEX', '0x6704b673c70de9bf74c8fba4b4bd748f0e2190e1'], ['UBT', '0x8400d94a5cb0fa0d041a3788e395285d61c9ee5e'], ['UCASH', '0x92e52a1a235d9a103d970901066ce910aacefd37'], + ['UCBI', '0x2adba23cf1252de095aced801e758b369ec10426'], ['UCN', '0xaaf37055188feee4869de63464937e683d61b2a1'], ['UFR', '0xea097a2b1db00627b2fa17460ad260c016016977'], ['UKG', '0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b'], @@ -1117,14 +1274,18 @@ const VERIFIED_TOKENS = [ ['UPP', '0xc86d054809623432210c107af2e3f619dcfbf652'], ['UQC', '0xd01db73e047855efb414e6202098c4be4cd2423b'], ['URB', '0x931684139f756c24ec0731e9f74fe50e5548ddef'], + ['USD-G', '0xfb0aaa0432112779d9ac483d9d5e3961ece18eec'], ['USDC', '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], ['USDM', '0xd760addfb24d9c01fe4bfea7475c5e3636684058'], ['USDS', '0xa4bdb11dc0a2bec88d24a3aa1e6bb17201112ebe'], ['USDT', '0xdac17f958d2ee523a2206206994597c13d831ec7'], + ['USDx', '0xeb269732ab75a6fd61ea60b06fe994cd32a83549'], ['UTK', '0x70a72833d6bf7f508c8224ce59ea1ef3d0ea3a38'], ['UTNP', '0x9e3319636e2126e3c0bc9e3134aec5e1508a46c7'], ['UTT', '0x16f812be7fff02caf662b85d5d58a5da6572d4df'], ['UUU', '0x3543638ed4a9006e4840b105944271bcea15605d'], + ['VALOR', '0x297e4e5e59ad72b1b0a2fd446929e76117be0e0a'], + ['VBX', '0x6dccf9c0ab71dac26b7f7886e43a2b433806c590'], ['VD', '0x9a9bb9b4b11bf8eccff84b58a6ccccd4058a7f0d'], ['VDG', '0x57c75eccc8557136d32619a191fbcdc88560d711'], ['VDOC', '0x82bd526bdb718c6d4dd2291ed013a5186cae2dca'], @@ -1133,9 +1294,11 @@ const VERIFIED_TOKENS = [ ['VEN', '0xd850942ef8811f2a866692a623011bde52a462c1'], ['VENUS', '0xebed4ff9fe34413db8fc8294556bbd1528a4daca'], ['VERI', '0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374'], + ['VERSI', '0x1b879d3812f2ade1214264655b473910e0caf1e6'], ['VIB', '0x2c974b2d0ba1716e644c1fc59982a89ddd2ff724'], ['VIBE', '0xe8ff5c9c75deb346acac493c463c8950be03dfba'], ['VIBEX', '0x882448f83d90b2bf477af2ea79327fdea1335d93'], + ['VID', '0x2c9023bbc572ff8dc1228c7858a280046ea8c9e5'], ['VIDT', '0x445f51299ef3307dbd75036dd896565f5b4bf7a5'], ['VIEW', '0xf03f8d65bafa598611c3495124093c56e8f638f0'], ['VIKKY', '0xd2946be786f35c3cc402c29b323647abda799071'], @@ -1144,6 +1307,8 @@ const VERIFIED_TOKENS = [ ['VITE', '0x1b793e49237758dbd8b752afc9eb4b329d5da016'], ['VIU', '0x519475b31653e46d20cd09f9fdcf3b12bdacb4f5'], ['VLD', '0x922ac473a3cc241fd3a0049ed14536452d58d73c'], + ['VMC', '0xd811250b7fe83150cbb3d70a892fce6189fb3e08'], + ['VNTY', '0xc650f5514ae1a3a27930922145ce49e8a91b91ab'], ['VOC', '0xc3bc9eb71f75ec439a6b6c8e8b746fcf5b62f703'], ['VOISE', '0x83eea00d838f92dec4d1475697b9f4d3537b56e3'], ['VRE', '0xf722b01910f93b84eda9ca128b9f05821a41eae1'], @@ -1158,6 +1323,7 @@ const VERIFIED_TOKENS = [ ['WAK', '0x9f6513ed2b0de89218e97db4a5115ba04be449f1'], ['WATT', '0x829a4ca1303383f1082b6b1fb937116e4b3b5605'], ['WAX', '0x39bb259f66e1c59d5abef88375979b4d20d98022'], + ['WAY', '0x217f96737b39f9b9211767cb6aef5dbae2fe9402'], ['WBA', '0x74951b677de32d596ee851a233336926e6a2cd09'], ['WBTC', '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'], ['WCN', '0x8f936fe0faf0604c9c0ef2406bde0a65365515d6'], @@ -1177,16 +1343,18 @@ const VERIFIED_TOKENS = [ ['WMK', '0xbfbe5332f172d77811bc6c272844f3e54a7b23bb'], ['WNK', '0xd73a66b8fb26be8b0acd7c52bd325054ac7d468b'], ['WOC', '0xf9d9702d031407f425a4412682fdc56b07d05262'], - ['WOLK', '0xf6b55acbbc49f4524aa48d19281a9a77c54de10f'], - ['WOLK (WOLK)', '0x728781e75735dc0962df3a51d7ef47e798a7107e'], + ['WOLK', '0x728781e75735dc0962df3a51d7ef47e798a7107e'], + ['WOLK (1)', '0xf6b55acbbc49f4524aa48d19281a9a77c54de10f'], ['WORK', '0xa686514faf7d54289266f483d1e4852c99e13ec7'], - ['WORK (workTOKEN)', '0xd18e454d844eb0009d32e07a0cde89e18d64cfb4'], + ['WORK (1)', '0xd18e454d844eb0009d32e07a0cde89e18d64cfb4'], ['WPC', '0x62087245087125d3db5b9a3d713d78e7bbc31e54'], ['WPR', '0x4cf488387f035ff08c371515562cba712f9015d4'], ['WRC', '0x72adadb447784dd7ab1f472467750fc485e4cb2d'], ['WRK', '0x71e8d74ff1c923e369d0e70dfb09866629c4dd35'], + ['WSS', '0x1d9a3cef66b01d44003b9db0e00ec3fd44746988'], ['WTC', '0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74'], ['WTT', '0x84119cb33e8f590d75c2d6ea4e6b0741a7494eda'], + ['WWX', '0x8a91eecd3f6b6b7833fd6961e7f654c3d016a068'], ['WYS', '0xd8950fdeaa10304b7a7fd03a2fc66bc39f3c711a'], ['WYV', '0x056017c55ae7ae32d12aef7c679df83a85ca75ff'], ['X8X', '0x910dfc18d6ea3d6a7124a6f8b5458f281060fa4c'], @@ -1205,6 +1373,7 @@ const VERIFIED_TOKENS = [ ['XGM', '0x533ef0984b2faa227acc620c67cce12aa39cd8cd'], ['XGT', '0x30f4a3e0ab7a76733d8b60b89dd93c3d0b4c9e2f'], ['XID', '0xb110ec7b1dcb8fab8dedbf28f53bc63ea5bedd84'], + ['XLX', '0x1d086b868d78040635cb8600ba733f12db48cb42'], ['XMCT', '0x44449fa4d607f807d1ed4a69ad942971728391c8'], ['XMX', '0x0f8c45b896784a1e408526b9300519ef8660209c'], ['XNK', '0xbc86727e770de68b1060c91f6bb6945c73e10388'], @@ -1213,20 +1382,24 @@ const VERIFIED_TOKENS = [ ['XOV', '0x153ed9cc1b792979d2bde0bbf45cc2a7e436a5f9'], ['XPA', '0x90528aeb3a2b736b780fd1b6c478bb7e1d643170'], ['XPAT', '0xbb1fa4fdeb3459733bf67ebc6f893003fa976a82'], + ['XPAY', '0xbc7ed0c8cf986ae62337fc8df3b02c6ec87310ed'], ['XRL', '0xb24754be79281553dc1adc160ddf5cd9b74361a4'], ['XSC', '0x0f513ffb4926ff82d7f60a05069047aca295c413'], ['XYO', '0x55296f69f40ea6d20e478533c15a6b08b654e758'], ['YEE', '0x922105fad8153f516bcfb829f56dc097a0e1d705'], ['YEED', '0x6f7a4bac3315b5082f793161a22e26666d22717f'], - ['YEED (YGGDRASH)', '0xca2796f9f61dc7b238aab043971e49c6164df375'], + ['YEED (1)', '0xca2796f9f61dc7b238aab043971e49c6164df375'], ['YNN', '0x1bc7c1de0ac6ef4fdec35c053030d90cf54c7e9a'], ['YOYOW', '0xcbeaec699431857fdb4d37addbbdc20e132d4903'], + ['YTRO', '0x534546c490a4ed2a9d0c3555447bb9b4b01bcb9e'], ['YUP', '0xd9a12cde03a86e800496469858de8581d3a5353d'], ['YUPIE', '0x0f33bb20a282a7649c7b3aff644f084a9348e933'], ['ZAP', '0x6781a0f84c7e9e846dcb84a9a5bd49333067b104'], ['ZCN', '0xb9ef770b6a5e12e45983c5d80545258aa38f3b78'], ['ZCO', '0x2008e3057bd734e10ad13c9eae45ff132abc1722'], ['ZCS', '0x7a41e0517a5eca4fdbc7fbeba4d4c47b9ff6dc63'], + ['ZDC', '0x7a2810d3d859ed03ede523eb801a3b43b5e8979c'], + ['ZERA', '0x8188e51bc678f0070531f0e782718df0027452de'], ['ZEUS', '0xe7e4279b80d319ede2889855135a22021baf0907'], ['ZIL', '0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27'], ['ZINC', '0x4aac461c86abfa71e9d00d9a2cde8d74e4e1aeea'], @@ -1234,6 +1407,7 @@ const VERIFIED_TOKENS = [ ['ZIPT', '0xedd7c94fd7b4971b916d15067bc454b9e1bad980'], ['ZIX', '0xf3c092ca8cd6d3d4ca004dc1d0f1fe8ccab53599'], ['ZLA', '0xfd8971d5e8e1740ce2d0a84095fca4de729d0c16'], + ['ZMAN', '0xe25faab5821ce70ba4179a70c1d481ba45b9d0c9'], ['ZMN', '0x554ffc77f4251a9fb3c0e3590a6a205f8d4e067d'], ['ZPR', '0xb5b8f5616fe42d5ceca3e87f3fddbdd8f496d760'], ['ZRX', '0xe41d2489571d322189246dafa5ebde1f4699f498'], @@ -1243,4 +1417,6 @@ const VERIFIED_TOKENS = [ ] export const ETHER_TOKEN_VERIFIED_BY_SYMBOL = new Map(VERIFIED_TOKENS) -export const ETHER_TOKEN_VERIFIED_ADDRESSES = new Set(ETHER_TOKEN_VERIFIED_BY_SYMBOL.values()) +export const ETHER_TOKEN_VERIFIED_ADDRESSES = new Set( + ETHER_TOKEN_VERIFIED_BY_SYMBOL.values() +) From bed2a02e8a4f0bff4e6a50a25d4f4611b523f1ec Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Sat, 23 Nov 2019 13:00:23 +0100 Subject: [PATCH 26/41] Finance: ask token directly for vault balance (#1049) --- apps/finance/app/src/script.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/finance/app/src/script.js b/apps/finance/app/src/script.js index 01cd414559..5a5e922499 100644 --- a/apps/finance/app/src/script.js +++ b/apps/finance/app/src/script.js @@ -10,6 +10,7 @@ import { tokenDataOverride, } from './lib/token-utils' import { addressesEqual } from './lib/web3-utils' +import tokenBalanceOfAbi from './abi/token-balanceof.json' import tokenDecimalsAbi from './abi/token-decimals.json' import tokenNameAbi from './abi/token-name.json' import tokenSymbolAbi from './abi/token-symbol.json' @@ -17,7 +18,12 @@ import vaultBalanceAbi from './abi/vault-balance.json' import vaultGetInitializationBlockAbi from './abi/vault-getinitializationblock.json' import vaultEventAbi from './abi/vault-events.json' -const tokenAbi = [].concat(tokenDecimalsAbi, tokenNameAbi, tokenSymbolAbi) +const tokenAbi = [].concat( + tokenBalanceOfAbi, + tokenDecimalsAbi, + tokenNameAbi, + tokenSymbolAbi +) const vaultAbi = [].concat( vaultBalanceAbi, vaultGetInitializationBlockAbi, @@ -316,7 +322,7 @@ async function updateBalances( const updatedState = reloadEntireToken ? await newBalanceEntry(tokenContract, tokenAddress, settings) : { - amount: await loadTokenBalance(tokenAddress, settings), + amount: await loadTokenBalance(tokenContract, tokenAddress, settings), } newBalances[balancesIndex] = { ...newBalances[balancesIndex], @@ -354,7 +360,7 @@ function updateTransactions(transactions, transactionDetails) { async function newBalanceEntry(tokenContract, tokenAddress, settings) { const [balance, decimals, name, symbol] = await Promise.all([ - loadTokenBalance(tokenAddress, settings), + loadTokenBalance(tokenContract, tokenAddress, settings), loadTokenDecimals(tokenContract, tokenAddress, settings), loadTokenName(tokenContract, tokenAddress, settings), loadTokenSymbol(tokenContract, tokenAddress, settings), @@ -372,8 +378,15 @@ async function newBalanceEntry(tokenContract, tokenAddress, settings) { } } -function loadTokenBalance(tokenAddress, { vault }) { - return vault.contract.balance(tokenAddress).toPromise() +function loadTokenBalance(tokenContract, tokenAddress, { ethToken, vault }) { + if (addressesEqual(tokenAddress, ethToken.address)) { + return vault.contract.balance(tokenAddress).toPromise() + } else { + // Prefer using the token contract directly to ask for the Vault's balance + // Web3.js does not handle revert strings yet, so a failing call to Vault.balance() + // results in organizations looking like whales. + return tokenContract.balanceOf(vault.address).toPromise() + } } async function loadTokenDecimals(tokenContract, tokenAddress, { network }) { From 9f0c8c5adeac6c5653c7d67a679ef7637837994e Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Tue, 26 Nov 2019 18:43:30 -0300 Subject: [PATCH 27/41] Finance: app improvements (#1051) ## Panel The new SidePanel now unmounts its content when closed, so there is no need to reset the state internally anymore. Also use useLayoutEffect() rather than setTimeout() to focus the text field. ## ToggleContent - Use IconUp rather than a custom image. - Use ButtonBase rather than a button. - Move to a function component. - Add a pressed state. - Use the css prop. --- .../src/components/NewTransfer/Withdrawal.js | 49 ++++---- .../app/src/components/ToggleContent.js | 105 +++++++++--------- .../app/src/components/assets/arrow.svg | 1 - 3 files changed, 76 insertions(+), 79 deletions(-) delete mode 100644 apps/finance/app/src/components/assets/arrow.svg diff --git a/apps/finance/app/src/components/NewTransfer/Withdrawal.js b/apps/finance/app/src/components/NewTransfer/Withdrawal.js index bd4bc7467f..095b5cf6d0 100644 --- a/apps/finance/app/src/components/NewTransfer/Withdrawal.js +++ b/apps/finance/app/src/components/NewTransfer/Withdrawal.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useLayoutEffect, useState } from 'react' import styled from 'styled-components' import { Button, @@ -22,38 +22,29 @@ const DECIMALS_TOO_MANY_ERROR = Symbol('DECIMALS_TOO_MANY_ERROR') const NULL_SELECTED_TOKEN = -1 -const initialState = { - amount: { - error: NO_ERROR, - value: '', - }, - recipient: { - error: NO_ERROR, - value: '', - }, - reference: '', - selectedToken: NULL_SELECTED_TOKEN, -} - class Withdrawal extends React.Component { static defaultProps = { tokens: [], onWithdraw: () => {}, } state = { - ...initialState, + amount: { + error: NO_ERROR, + value: '', + }, + recipient: { + error: NO_ERROR, + value: '', + }, + reference: '', + selectedToken: NULL_SELECTED_TOKEN, } _recipientInput = React.createRef() - componentDidMount() { - // setTimeout is needed as a small hack to wait until the input is - // on-screen before we call focus - this._recipientInput.current && - setTimeout(() => this._recipientInput.current.focus(), 0) - } - componentWillReceiveProps({ opened }) { - if (!opened && this.props.opened) { - // Panel closing; reset state - this.setState({ ...initialState }) + componentDidUpdate(prevProps) { + const { readyToFocus } = this.props + const input = this._recipientInput.current + if (readyToFocus && !prevProps.readyToFocus && input) { + input.focus() } } nonZeroTokens() { @@ -247,4 +238,10 @@ const ValidationError = ({ message }) => { ) } -export default Withdrawal +export default props => { + const [readyToFocus, setReadyToFocus] = useState(false) + useLayoutEffect(() => { + setReadyToFocus(true) + }, []) + return +} diff --git a/apps/finance/app/src/components/ToggleContent.js b/apps/finance/app/src/components/ToggleContent.js index 059932ee10..e696e41a31 100644 --- a/apps/finance/app/src/components/ToggleContent.js +++ b/apps/finance/app/src/components/ToggleContent.js @@ -1,59 +1,60 @@ -import React from 'react' -import styled from 'styled-components' -import { springs, GU } from '@aragon/ui' +import React, { useState } from 'react' +import { ButtonBase, GU, IconUp, RADIUS, springs, useTheme } from '@aragon/ui' import { Transition, animated } from 'react-spring' -import arrow from './assets/arrow.svg' -class ToggleContent extends React.Component { - state = { opened: false } - handleClick = () => { - this.setState(({ opened }) => ({ opened: !opened })) - } - render() { - const { opened } = this.state - const { label, children } = this.props - return ( -
- +const AnimatedDiv = animated.div - - {show => - show && (props => {children}) +function ToggleContent({ label, children }) { + const theme = useTheme() + const [opened, setOpened] = useState() + return ( + + setOpened(opened => !opened)} + focusRingRadius={RADIUS} + focusRingSpacing={0.5 * GU} + css={` + display: flex; + align-items: center; + width: calc(100%); + &:active { + color: ${theme.surfaceContentSecondary}; } - -
- ) - } -} - -const Label = styled.button.attrs({ type: 'button' })` - cursor: pointer; - font-weight: 600; - background: none; - border: 0; - outline: 0; - padding: 0; - img { - margin-left: ${1 * GU}px; - } -` -const Content = styled(animated.div)` - overflow: hidden; -` + `} + > + {label}{' '} + + -const Arrow = styled.img.attrs({ src: arrow, alt: '' })` - transform-origin: 50% 50%; - transform: rotate(${p => (p.opened ? 180 : 0)}deg); - transition: transform 200ms ease-in-out; -` + + {show => + show && + (props => ( + + {children} + + )) + } + + + ) +} export default ToggleContent diff --git a/apps/finance/app/src/components/assets/arrow.svg b/apps/finance/app/src/components/assets/arrow.svg deleted file mode 100644 index aaf07eb25a..0000000000 --- a/apps/finance/app/src/components/assets/arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 449230052cd283a7e4bdacfae2f0db42076ff47a Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Tue, 26 Nov 2019 20:11:20 -0300 Subject: [PATCH 28/41] Finance: fix loading some icons on test networks (#1052) --- apps/finance/app/package.json | 2 +- apps/finance/app/src/lib/icon-utils.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/finance/app/package.json b/apps/finance/app/package.json index b112960a4e..f859b2e3fc 100644 --- a/apps/finance/app/package.json +++ b/apps/finance/app/package.json @@ -6,7 +6,7 @@ "dependencies": { "@aragon/api": "^2.0.0-beta.6", "@aragon/api-react": "^2.0.0-beta.6", - "@aragon/templates-tokens": "^1.2.0", + "@aragon/templates-tokens": "^1.3.0", "@aragon/ui": "^1.0.0", "@babel/polyfill": "^7.0.0", "bn.js": "^4.11.8", diff --git a/apps/finance/app/src/lib/icon-utils.js b/apps/finance/app/src/lib/icon-utils.js index 2bd50607af..717213837f 100644 --- a/apps/finance/app/src/lib/icon-utils.js +++ b/apps/finance/app/src/lib/icon-utils.js @@ -1,16 +1,22 @@ import { tokenIconUrl as _tokenIconUrl } from '@aragon/ui' import { getTestTokenAddresses } from '../testnet' +import { ETHER_TOKEN_FAKE_ADDRESS } from './token-utils' import { ETHER_TOKEN_VERIFIED_BY_SYMBOL } from './verified-tokens' // Small shim on top of @aragon/ui's tokenIconUrl, to handle our testnet tokens export const tokenIconUrl = (tokenAddress, tokenSymbol, networkType) => { - if (networkType === 'main') { + if (tokenAddress === ETHER_TOKEN_FAKE_ADDRESS || networkType === 'main') { return _tokenIconUrl(tokenAddress) } // On other networks, only pretend known test tokens are legit const testTokens = new Set(getTestTokenAddresses(networkType)) if (testTokens.has(tokenAddress.toLowerCase())) { + // For the memez + if (tokenSymbol === 'BCC') { + return 'https://chasing-coins.com/coin/logo/BCC' + } + const mainnetEquivalent = ETHER_TOKEN_VERIFIED_BY_SYMBOL.get(tokenSymbol) return mainnetEquivalent ? _tokenIconUrl(mainnetEquivalent) : '' } From 90ad353325fe653afe1a9fa82130dd11154229f5 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Tue, 26 Nov 2019 21:01:35 -0300 Subject: [PATCH 29/41] Tokens: refactor the side panel as a function component (#1046) * TokenPanelContent: move to a function component * UpdateTokenPanel: add more warnings * Tokens: add warning if amount field is too small or has too much precision --- apps/finance/app/src/lib/math-utils.js | 2 +- apps/token-manager/app/src/App.js | 42 +- .../components/Panels/TokenPanelContent.js | 267 ------------ .../UpdateTokenPanel/UpdateTokenPanel.js | 393 ++++++++++++++++++ apps/token-manager/app/src/utils.js | 4 +- 5 files changed, 413 insertions(+), 295 deletions(-) delete mode 100644 apps/token-manager/app/src/components/Panels/TokenPanelContent.js create mode 100644 apps/token-manager/app/src/components/UpdateTokenPanel/UpdateTokenPanel.js diff --git a/apps/finance/app/src/lib/math-utils.js b/apps/finance/app/src/lib/math-utils.js index 79a3facc0d..ba3a5e5efb 100644 --- a/apps/finance/app/src/lib/math-utils.js +++ b/apps/finance/app/src/lib/math-utils.js @@ -74,7 +74,7 @@ export function fromDecimals(num, decimals, { truncate = true } = {}) { */ export function toDecimals(num, decimals, { truncate = true } = {}) { const [whole, dec] = splitDecimalNumber(num) - if (!whole && !dec) { + if (!whole && (!dec || !decimals)) { return '0' } diff --git a/apps/token-manager/app/src/App.js b/apps/token-manager/app/src/App.js index e13054fab8..f8d1aef6ef 100644 --- a/apps/token-manager/app/src/App.js +++ b/apps/token-manager/app/src/App.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect } from 'react' import PropTypes from 'prop-types' import BN from 'bn.js' import { @@ -6,7 +6,6 @@ import { GU, Header, IconPlus, - SidePanel, SyncIndicator, Tag, textStyle, @@ -15,7 +14,7 @@ import { } from '@aragon/ui' import { useAragonApi } from '@aragon/api-react' import { IdentityProvider } from './components/IdentityManager/IdentityManager' -import TokenPanelContent from './components/Panels/TokenPanelContent' +import UpdateTokenPanel from './components/UpdateTokenPanel/UpdateTokenPanel' import EmptyState from './screens/EmptyState' import Holders from './screens/Holders' import { addressesEqual } from './web3-utils' @@ -179,28 +178,21 @@ class App extends React.PureComponent { )} - - {appStateReady && ( - - )} - + {appStateReady && ( + + )} ) } diff --git a/apps/token-manager/app/src/components/Panels/TokenPanelContent.js b/apps/token-manager/app/src/components/Panels/TokenPanelContent.js deleted file mode 100644 index 415aa05928..0000000000 --- a/apps/token-manager/app/src/components/Panels/TokenPanelContent.js +++ /dev/null @@ -1,267 +0,0 @@ -import React from 'react' -import styled from 'styled-components' -import { - Button, - Field, - IconCross, - Info, - TextInput, - GU, - textStyle, - useTheme, -} from '@aragon/ui' -import { isAddress } from '../../web3-utils' -import { fromDecimals, toDecimals, formatBalance } from '../../utils' -import LocalIdentitiesAutoComplete from '../LocalIdentitiesAutoComplete/LocalIdentitiesAutoComplete' - -// Any more and the number input field starts to put numbers in scientific notation -const MAX_INPUT_DECIMAL_BASE = 6 - -const initialState = { - mode: 'assign', - holderField: { - error: null, - warning: null, - value: '', - }, - amountField: { - error: null, - warning: null, - value: '', - max: '', - }, -} - -class TokenPanelContent extends React.Component { - static defaultProps = { - onUpdateTokens: () => {}, - } - state = { - ...initialState, - } - _holderInput = React.createRef() - componentWillReceiveProps({ opened, mode, holderAddress }) { - if (opened && !this.props.opened) { - // setTimeout is needed as a small hack to wait until the input is - // on-screen before we call focus - this._holderInput.current && - setTimeout( - () => this._holderInput.current && this._holderInput.current.focus(), - 100 // focusing too soon will cause the SidePanel's opening animation to be skipped - ) - - // Upadte holder address from the props - this.updateHolderAddress(mode, holderAddress) - } - - // Finished closing the panel, its state can be reset - if (!opened && this.props.opened) { - this.setState({ ...initialState }) - } - } - filteredHolderAddress() { - const { holderField } = this.state - return holderField.value.trim() - } - filteredAmount() { - const { tokenDecimals } = this.props - const { amountField } = this.state - return toDecimals(amountField.value.trim(), tokenDecimals) - } - updateHolderAddress(mode, value) { - const { - maxAccountTokens, - tokenDecimalsBase, - tokenDecimals, - getHolderBalance, - } = this.props - - const holderBalance = getHolderBalance(value.trim()) - const maxAmount = - mode === 'assign' ? maxAccountTokens.sub(holderBalance) : holderBalance - - this.setState(({ holderField, amountField }) => ({ - holderField: { ...holderField, value, error: null }, - amountField: { - ...amountField, - max: formatBalance(maxAmount, tokenDecimalsBase, tokenDecimals), - warning: - maxAmount.isZero() && - (mode === 'assign' - ? ` - The maximum amount of tokens that can be assigned has already been - reached - ` - : ` - This account doesn’t have any tokens to remove - `), - }, - })) - } - handleAmountChange = event => { - const { amountField } = this.state - this.setState({ - amountField: { ...amountField, value: event.target.value }, - }) - } - handleHolderChange = value => { - this.updateHolderAddress(this.props.mode, value) - } - handleSubmit = event => { - event.preventDefault() - const { mode } = this.props - const holderAddress = this.filteredHolderAddress() - - const holderError = !isAddress(holderAddress) - ? ` - ${mode === 'assign' ? 'Recipient' : 'Account'} - must be a valid Ethereum address - ` - : null - - // Error - if (holderError) { - this.setState(({ holderField }) => ({ - holderField: { ...holderField, error: holderError }, - })) - return - } - - // Update tokens - this.props.onUpdateTokens({ - mode, - amount: this.filteredAmount(), - holder: holderAddress, - }) - } - render() { - const { holderField, amountField } = this.state - const { mode, tokenDecimals } = this.props - - const minTokenStep = fromDecimals( - '1', - Math.min(MAX_INPUT_DECIMAL_BASE, tokenDecimals) - ) - - const errorMessage = holderField.error || amountField.error - const warningMessage = holderField.warning || amountField.warning - const accountMaxed = amountField.max === '0' - const disabled = Boolean( - errorMessage || - accountMaxed || - !holderField.value || - !amountField.value || - amountField.value === '0' - ) - - return ( -
-
- - - - - - - - - -
- {errorMessage && } - {warningMessage && } -
- -
- ) - } -} - -const Message = styled.div` - & + & { - margin-top: ${2 * GU}px; - } -` - -const InfoMessage = ({ title, text }) => ( -
- {text} -
-) - -const WarningMessage = ({ message }) => ( - - {message} - -) - -const ErrorMessage = ({ message }) => { - const theme = useTheme() - return ( - - - - {message} - - - ) -} - -export default TokenPanelContent diff --git a/apps/token-manager/app/src/components/UpdateTokenPanel/UpdateTokenPanel.js b/apps/token-manager/app/src/components/UpdateTokenPanel/UpdateTokenPanel.js new file mode 100644 index 0000000000..3d8a94bb3f --- /dev/null +++ b/apps/token-manager/app/src/components/UpdateTokenPanel/UpdateTokenPanel.js @@ -0,0 +1,393 @@ +import React, { useCallback, useEffect, useState } from 'react' +import PropTypes from 'prop-types' +import BN from 'bn.js' +import { + Button, + Field, + GU, + Info, + SidePanel, + TextInput, + useSidePanelFocusOnReady, +} from '@aragon/ui' +import { isAddress } from '../../web3-utils' +import { + fromDecimals, + toDecimals, + formatBalance, + splitDecimalNumber, +} from '../../utils' +import LocalIdentitiesAutoComplete from '../LocalIdentitiesAutoComplete/LocalIdentitiesAutoComplete' + +// Any more and the number input field starts to put numbers in scientific notation +const MAX_INPUT_DECIMAL_BASE = 6 + +function UpdateTokenPanel({ + getHolderBalance, + holderAddress, + maxAccountTokens, + mode, + onClose, + onTransitionEnd, + onUpdateTokens, + opened, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, +}) { + return ( + + + + ) +} + +function usePanelForm({ + getHolderBalance, + initialHolder, + maxAccountTokens, + mode, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, +}) { + const [holderField, setHolderField] = useState({ + error: null, + value: initialHolder, + warning: null, + }) + + const [amountField, setAmountField] = useState({ + error: null, + max: '', + value: '', + warning: null, + }) + + const holderBalance = + holderField.value && !holderField.error + ? getHolderBalance(holderField.value) + : new BN('0') + + const errorMessage = holderField.error || amountField.error + const warningMessage = holderField.warning || amountField.warning + + const submitDisabled = Boolean( + errorMessage || + warningMessage || + !holderField.value || + !amountField.value || + amountField.max === '0' || + amountField.value === '0' + ) + + const getMaxAmountFromBalance = useCallback( + balance => (mode === 'assign' ? maxAccountTokens.sub(balance) : balance), + [mode, maxAccountTokens] + ) + + const updateHolder = useCallback( + value => { + const maxAmount = getMaxAmountFromBalance(getHolderBalance(value.trim())) + + const maxAmountLabel = formatBalance( + maxAmount, + tokenDecimalsBase, + tokenDecimals + ) + + setHolderField(holderField => ({ + ...holderField, + error: null, + value, + warning: + maxAmount.isZero() && + (mode === 'assign' + ? `The maximum amount of tokens that can be assigned + (${maxAmountLabel} ${tokenSymbol}) has already been reached.` + : 'This account doesn’t have any tokens to remove.'), + })) + + setAmountField(amountField => ({ + ...amountField, + max: formatBalance(maxAmount, tokenDecimalsBase, tokenDecimals), + })) + }, + [ + getHolderBalance, + getMaxAmountFromBalance, + mode, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, + ] + ) + + const updateAmount = useCallback( + value => { + const formattedAmount = toDecimals(value.trim(), tokenDecimals) + if (formattedAmount === '0') { + // Given value is smaller than the accepted decimal base (e.g. gave 0.5 to a token base of 1) + setAmountField(amountField => ({ + ...amountField, + value, + warning: `You are trying to ${ + mode === 'assign' ? 'assign' : 'remove' + } an amount that is smaller than the minimum amount of tokens possible.`, + })) + return + } + + const decimals = splitDecimalNumber(value.trim())[1] + if (decimals.length > tokenDecimals) { + // Given value has more precision than we expected + setAmountField(amountField => ({ + ...amountField, + value, + warning: `You are trying to ${ + mode === 'assign' ? 'assign' : 'remove' + } an amount that includes more decimals than the token allows.`, + })) + return + } + + const amount = new BN(formattedAmount) + const maxAmount = getMaxAmountFromBalance(holderBalance) + + setAmountField(amountField => ({ + ...amountField, + value, + warning: amount.gt(maxAmount) + ? `You are trying to ${ + mode === 'assign' ? 'assign' : 'remove' + } an amount that is greater than the + maximum amount of tokens that can be ${ + mode === 'assign' ? 'assigned' : 'removed' + } (${formatBalance( + maxAmount, + tokenDecimalsBase, + tokenDecimals + )} ${tokenSymbol}).` + : null, + })) + }, + [ + mode, + holderBalance, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, + getMaxAmountFromBalance, + ] + ) + + const validateFields = useCallback(() => { + const holderAddress = holderField.value.trim() + const holderError = isAddress(holderAddress) + ? null + : mode === 'assign' + ? 'The recipient must be a valid Ethereum address.' + : 'The account must be a valid Ethereum address.' + + if (holderError) { + setHolderField({ ...holderField, error: holderError }) + return null + } + + return { + holder: holderField.value.trim(), + amount: toDecimals(amountField.value.trim(), tokenDecimals), + } + }, [mode, holderField, amountField, tokenDecimals]) + + useEffect(() => { + updateHolder(initialHolder) + }, [initialHolder, updateHolder]) + + return { + amountField, + errorMessage, + holderField, + submitDisabled, + updateAmount, + updateHolder, + validateFields, + warningMessage, + holderBalance, + } +} + +function TokenPanelContent({ + getHolderBalance, + holderAddress, + maxAccountTokens, + mode, + onUpdateTokens, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, +}) { + const holderInputRef = useSidePanelFocusOnReady() + const amountInputRef = useSidePanelFocusOnReady() + + const { + amountField, + errorMessage, + holderField, + submitDisabled, + updateAmount, + updateHolder, + validateFields, + warningMessage, + } = usePanelForm({ + getHolderBalance, + initialHolder: holderAddress, + maxAccountTokens, + mode, + onUpdateTokens, + tokenDecimals, + tokenDecimalsBase, + tokenSymbol, + }) + + const tokenStep = fromDecimals( + '1', + Math.min(MAX_INPUT_DECIMAL_BASE, tokenDecimals) + ) + + const handleAmountChange = useCallback( + event => updateAmount(event.target.value), + [updateAmount] + ) + + const handleSubmit = useCallback( + event => { + event.preventDefault() + + const fieldsData = validateFields() + + if (!fieldsData) { + return + } + + onUpdateTokens({ + amount: fieldsData.amount, + holder: fieldsData.holder, + mode, + }) + }, + [mode, validateFields, onUpdateTokens] + ) + + return ( +
+ + {mode === 'assign' + ? 'This action will create tokens and transfer them to the recipient below.' + : 'This action will remove tokens from the account below.'} + + + + + + + + + + + +
+ {errorMessage && {errorMessage}} + {warningMessage && {warningMessage}} +
+
+ ) +} + +TokenPanelContent.propTypes = { + onUpdateTokens: PropTypes.func, + mode: PropTypes.string, + holderAddress: PropTypes.string, +} + +TokenPanelContent.defaultProps = { + onUpdateTokens: () => {}, + holderAddress: '', +} + +function Message({ children, mode, title }) { + return ( +
+ + {children} + +
+ ) +} + +export default UpdateTokenPanel diff --git a/apps/token-manager/app/src/utils.js b/apps/token-manager/app/src/utils.js index 5b095dce21..a8181d505f 100644 --- a/apps/token-manager/app/src/utils.js +++ b/apps/token-manager/app/src/utils.js @@ -7,7 +7,7 @@ import BN from 'bn.js' * @param {string} num the number * @returns {Array} array with the [, ] parts of the number */ -function splitDecimalNumber(num) { +export function splitDecimalNumber(num) { const [whole = '', dec = ''] = num.split('.') return [ whole.replace(/^0*/, ''), // trim leading zeroes @@ -60,7 +60,7 @@ export function fromDecimals(num, decimals, { truncate = true } = {}) { */ export function toDecimals(num, decimals, { truncate = true } = {}) { const [whole, dec] = splitDecimalNumber(num) - if (!whole && !dec) { + if (!whole && (!dec || !decimals)) { return '0' } From d2b9dafc1dd8229c46d561c17d9fa516a99b6025 Mon Sep 17 00:00:00 2001 From: Pierre Bertet Date: Fri, 20 Dec 2019 12:10:25 -0300 Subject: [PATCH 30/41] Finance, Tokens, Voting: dark mode support (#1054) --- apps/agent/app/package.json | 6 +- apps/agent/app/src/App.js | 11 +- apps/agent/app/src/components/ComingSoon.js | 11 +- apps/agent/app/src/index.js | 5 +- apps/finance/app/package.json | 6 +- apps/finance/app/src/App.js | 20 +-- apps/finance/app/src/index.js | 5 +- apps/token-manager/app/package.json | 6 +- apps/token-manager/app/src/App.js | 10 +- apps/token-manager/app/src/index.js | 5 +- apps/voting/app/package.json | 6 +- apps/voting/app/src/App.js | 151 ++++++++++---------- apps/voting/app/src/app-logic.js | 4 +- 13 files changed, 130 insertions(+), 116 deletions(-) diff --git a/apps/agent/app/package.json b/apps/agent/app/package.json index 37a20fdc12..f650cac7a1 100644 --- a/apps/agent/app/package.json +++ b/apps/agent/app/package.json @@ -4,10 +4,10 @@ "private": true, "license": "AGPL-3.0-or-later", "dependencies": { - "@aragon/api": "^2.0.0-beta.6", - "@aragon/api-react": "^2.0.0-beta.6", + "@aragon/api": "^2.0.0-beta.9", + "@aragon/api-react": "^2.0.0-beta.9", "@aragon/templates-tokens": "^1.2.0", - "@aragon/ui": "^1.0.0", + "@aragon/ui": "^1.2.1", "@babel/polyfill": "^7.0.0", "date-fns": "2.0.0-alpha.22", "file-saver": "^2.0.2", diff --git a/apps/agent/app/src/App.js b/apps/agent/app/src/App.js index fecc103a43..bac0fdc042 100644 --- a/apps/agent/app/src/App.js +++ b/apps/agent/app/src/App.js @@ -1,5 +1,5 @@ -import React from 'react' -import { Header, Layout, SyncIndicator, useLayout } from '@aragon/ui' +import React, { useEffect } from 'react' +import { Main, Header, SyncIndicator, useLayout } from '@aragon/ui' import { useAragonApi } from '@aragon/api-react' import InstallFrame from './components/InstallFrame' import { IdentityProvider } from './components/IdentityManager/IdentityManager' @@ -32,11 +32,12 @@ function App({ api, appState, isSyncing }) { } export default () => { - const { api, appState } = useAragonApi() + const { api, appState, guiStyle } = useAragonApi() + const { appearance } = guiStyle return ( - +
- +
) } diff --git a/apps/agent/app/src/components/ComingSoon.js b/apps/agent/app/src/components/ComingSoon.js index 3e9e67358c..37ff631cf9 100644 --- a/apps/agent/app/src/components/ComingSoon.js +++ b/apps/agent/app/src/components/ComingSoon.js @@ -10,6 +10,7 @@ function ComingSoon() { css={` width: 100%; min-height: ${72 * GU}px; + text-align: center; `} >
Agent transaction list is coming soon! @@ -42,12 +44,15 @@ function ComingSoon() { max-width: ${52 * GU}px; color: ${theme.contentSecondary}; ${textStyle('body2')}; + padding: 0 ${2 * GU}px; `} > We are currently working on the full version of this app. You’ll soon be - able to browse Agent interactions with other Ethereum applications - from here. - Learn how you can start using it today + able to browse Agent interactions with other Ethereum applications from + here. + + Learn how you can start using it today +
) diff --git a/apps/agent/app/src/index.js b/apps/agent/app/src/index.js index 58eb098fa2..f9c5a81945 100644 --- a/apps/agent/app/src/index.js +++ b/apps/agent/app/src/index.js @@ -3,15 +3,12 @@ import '@babel/polyfill' import React from 'react' import ReactDOM from 'react-dom' import { AragonApi } from '@aragon/api-react' -import { Main } from '@aragon/ui' import appStateReducer from './app-state-reducer' import App from './App' ReactDOM.render( -
- -
+
, document.getElementById('root') ) diff --git a/apps/finance/app/package.json b/apps/finance/app/package.json index f859b2e3fc..245c39ffb3 100644 --- a/apps/finance/app/package.json +++ b/apps/finance/app/package.json @@ -4,10 +4,10 @@ "private": true, "license": "AGPL-3.0-or-later", "dependencies": { - "@aragon/api": "^2.0.0-beta.6", - "@aragon/api-react": "^2.0.0-beta.6", + "@aragon/api": "^2.0.0-beta.9", + "@aragon/api-react": "^2.0.0-beta.9", "@aragon/templates-tokens": "^1.3.0", - "@aragon/ui": "^1.0.0", + "@aragon/ui": "^1.2.1", "@babel/polyfill": "^7.0.0", "bn.js": "^4.11.8", "core-js": "^2.6.5", diff --git a/apps/finance/app/src/App.js b/apps/finance/app/src/App.js index 90225d7944..02a5b310bb 100644 --- a/apps/finance/app/src/App.js +++ b/apps/finance/app/src/App.js @@ -1,9 +1,10 @@ -import React from 'react' +import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Button, Header, IconPlus, + Main, SidePanel, SyncIndicator, useLayout, @@ -129,15 +130,18 @@ class App extends React.Component { } export default () => { - const { api, appState } = useAragonApi() + const { api, appState, guiStyle } = useAragonApi() const { layoutName } = useLayout() + const { appearance } = guiStyle return ( - +
+ +
) } diff --git a/apps/finance/app/src/index.js b/apps/finance/app/src/index.js index 30ce587aaf..f9c5a81945 100644 --- a/apps/finance/app/src/index.js +++ b/apps/finance/app/src/index.js @@ -2,16 +2,13 @@ import '@babel/polyfill' import React from 'react' import ReactDOM from 'react-dom' -import { Main } from '@aragon/ui' import { AragonApi } from '@aragon/api-react' import appStateReducer from './app-state-reducer' import App from './App' ReactDOM.render( -
- -
+
, document.getElementById('root') ) diff --git a/apps/token-manager/app/package.json b/apps/token-manager/app/package.json index 80a1fd0fda..39a307e4af 100644 --- a/apps/token-manager/app/package.json +++ b/apps/token-manager/app/package.json @@ -4,9 +4,9 @@ "private": true, "license": "AGPL-3.0-or-later", "dependencies": { - "@aragon/api": "^2.0.0-beta.6", - "@aragon/api-react": "^2.0.0-beta.6", - "@aragon/ui": "^1.0.0", + "@aragon/api": "^2.0.0-beta.9", + "@aragon/api-react": "^2.0.0-beta.9", + "@aragon/ui": "^1.2.1", "bn.js": "^4.11.6", "prop-types": "^15.7.2", "react": "^16.8.4", diff --git a/apps/token-manager/app/src/App.js b/apps/token-manager/app/src/App.js index f8d1aef6ef..de7956a244 100644 --- a/apps/token-manager/app/src/App.js +++ b/apps/token-manager/app/src/App.js @@ -6,6 +6,7 @@ import { GU, Header, IconPlus, + Main, SyncIndicator, Tag, textStyle, @@ -199,9 +200,14 @@ class App extends React.PureComponent { } export default () => { - const { api, appState } = useAragonApi() const theme = useTheme() + const { api, appState, guiStyle } = useAragonApi() const { layoutName } = useLayout() + const { appearance } = guiStyle - return + return ( +
+ +
+ ) } diff --git a/apps/token-manager/app/src/index.js b/apps/token-manager/app/src/index.js index 18cf4e1e87..074162ecff 100644 --- a/apps/token-manager/app/src/index.js +++ b/apps/token-manager/app/src/index.js @@ -1,15 +1,12 @@ import React from 'react' import ReactDOM from 'react-dom' import { AragonApi } from '@aragon/api-react' -import { Main } from '@aragon/ui' import appStateReducer from './app-state-reducer' import App from './App' ReactDOM.render( -
- -
+
, document.getElementById('root') ) diff --git a/apps/voting/app/package.json b/apps/voting/app/package.json index 69fe43ab5e..7f98266120 100644 --- a/apps/voting/app/package.json +++ b/apps/voting/app/package.json @@ -4,9 +4,9 @@ "private": true, "license": "AGPL-3.0-or-later", "dependencies": { - "@aragon/api": "^2.0.0-beta.8", - "@aragon/api-react": "^2.0.0-beta.8", - "@aragon/ui": "^1.0.0", + "@aragon/api": "^2.0.0-beta.9", + "@aragon/api-react": "^2.0.0-beta.9", + "@aragon/ui": "^1.2.1", "bn.js": "^4.11.8", "date-fns": "2.0.0-alpha.22", "onecolor": "^3.1.0", diff --git a/apps/voting/app/src/App.js b/apps/voting/app/src/App.js index c69f1156ed..6cbe2fa052 100644 --- a/apps/voting/app/src/App.js +++ b/apps/voting/app/src/App.js @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react' +import React, { useCallback, useEffect } from 'react' import { Button, Header, @@ -7,6 +7,7 @@ import { SyncIndicator, useLayout, } from '@aragon/ui' +import { useGuiStyle } from '@aragon/api-react' import NewVotePanel from './components/NewVotePanel' import useFilterVotes from './hooks/useFilterVotes' import useScrollTop from './hooks/useScrollTop' @@ -23,11 +24,12 @@ const App = React.memo(function App() { executionTargets, isSyncing, newVotePanel, - selectedVote, selectVote, + selectedVote, votes, } = useAppLogic() + const { appearance } = useGuiStyle() const { layoutName } = useLayout() const compactMode = layoutName === 'small' const handleBack = useCallback(() => selectVote(-1), [selectVote]) @@ -50,82 +52,87 @@ const App = React.memo(function App() { useScrollTop(selectedVote) return ( - - {votes.length === 0 && ( -
- -
- )} - {votes.length > 0 && ( - - -
} - display={compactMode ? 'icon' : 'label'} - /> - ) - } - /> - {selectedVote ? ( - + + {votes.length === 0 && ( +
+ - ) : ( - + )} + {votes.length > 0 && ( + + +
} + display={compactMode ? 'icon' : 'label'} + /> + ) + } /> - )} - - )} - - + {selectedVote ? ( + + ) : ( + + )} + + )} + + + ) }) export default function Voting() { return ( -
- - - - - - - -
+ + + + + + + ) } diff --git a/apps/voting/app/src/app-logic.js b/apps/voting/app/src/app-logic.js index 8018e11119..cac1017008 100644 --- a/apps/voting/app/src/app-logic.js +++ b/apps/voting/app/src/app-logic.js @@ -104,11 +104,11 @@ export function useAppLogic() { return { actions, executionTargets, + isSyncing: isSyncing || !ready, + newVotePanel, selectVote, selectedVote, votes, - isSyncing: isSyncing || !ready, - newVotePanel, } } From b56258a76a3aa0a711ee6ae415d119f55780283a Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Sun, 22 Dec 2019 03:14:21 +0800 Subject: [PATCH 31/41] Tokens: fix dark mode header (#1059) --- apps/token-manager/app/src/App.js | 64 ++---------------- .../app/src/components/AppHeader.js | 67 +++++++++++++++++++ .../app/src/components/InfoBoxes.js | 11 +-- 3 files changed, 81 insertions(+), 61 deletions(-) create mode 100644 apps/token-manager/app/src/components/AppHeader.js diff --git a/apps/token-manager/app/src/App.js b/apps/token-manager/app/src/App.js index de7956a244..a04618d66e 100644 --- a/apps/token-manager/app/src/App.js +++ b/apps/token-manager/app/src/App.js @@ -1,19 +1,9 @@ -import React, { useEffect } from 'react' +import React from 'react' import PropTypes from 'prop-types' import BN from 'bn.js' -import { - Button, - GU, - Header, - IconPlus, - Main, - SyncIndicator, - Tag, - textStyle, - useLayout, - useTheme, -} from '@aragon/ui' +import { Main, SyncIndicator } from '@aragon/ui' import { useAragonApi } from '@aragon/api-react' +import AppHeader from './components/AppHeader' import { IdentityProvider } from './components/IdentityManager/IdentityManager' import UpdateTokenPanel from './components/UpdateTokenPanel/UpdateTokenPanel' import EmptyState from './screens/EmptyState' @@ -97,10 +87,8 @@ class App extends React.PureComponent { groupMode, holders, isSyncing, - layoutName, maxAccountTokens, numData, - theme, tokenAddress, tokenDecimalsBase, tokenName, @@ -123,45 +111,9 @@ class App extends React.PureComponent { )} {appStateReady && holders.length !== 0 && ( -
-

- Tokens -

-
- {tokenSymbol && {tokenSymbol}} -
-
- } - secondary={ -
+ } + secondary={ +