From 6638e8f474c369fd4b4b4391da4a54f7497da792 Mon Sep 17 00:00:00 2001 From: yqrashawn Date: Tue, 18 May 2021 14:16:42 +0800 Subject: [PATCH 1/3] fix: block adding tokens without decimal() method (#338) --- app/_locales/en/messages.json | 3 ++ app/_locales/zh_CN/messages.json | 3 ++ ui/app/helpers/utils/token-util.js | 47 ++++++++++++------- ui/app/pages/add-token/add-token.component.js | 5 ++ 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 55c8e7991949..07075713649e 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -396,6 +396,9 @@ "dataBackupFoundInfo": { "message": "Some of your account data was backed up during a previous installation of ConfluxPortal. This could include your settings, contacts, and tokens. Would you like to restore this data now?" }, + "decimalMethodNotFound": { + "message": "Don't support token without decimal() method" + }, "decimalsMustZerotoTen": { "message": "Decimals must be at least 0, and not over 36." }, diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index 0a259ff7d2cf..f56c2a803228 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -350,6 +350,9 @@ "data": { "message": "数据" }, + "decimalMethodNotFound": { + "message": " 钱包目前不支持没有 decimal() 方法的代币" + }, "decimalsMustZerotoTen": { "message": "小数位最小为0并且不超过36位." }, diff --git a/ui/app/helpers/utils/token-util.js b/ui/app/helpers/utils/token-util.js index 1c555a30f2aa..15c8f9f36f07 100644 --- a/ui/app/helpers/utils/token-util.js +++ b/ui/app/helpers/utils/token-util.js @@ -5,7 +5,7 @@ import BigNumber from 'bignumber.js' const DEFAULT_SYMBOL = '' const DEFAULT_DECIMALS = '0' -async function getSymbolFromContract (tokenAddress) { +async function getSymbolFromContract(tokenAddress) { const token = util.getContractAtAddress(tokenAddress) try { @@ -19,7 +19,7 @@ async function getSymbolFromContract (tokenAddress) { } } -async function getDecimalsFromContract (tokenAddress) { +async function getDecimalsFromContract(tokenAddress) { const token = util.getContractAtAddress(tokenAddress) try { @@ -34,11 +34,11 @@ async function getDecimalsFromContract (tokenAddress) { } } -function getContractMetadata (tokenAddress, casedContractMap) { +function getContractMetadata(tokenAddress, casedContractMap) { return tokenAddress && casedContractMap[tokenAddress.toLowerCase()] } -async function getSymbol (tokenAddress, contractMap) { +async function getSymbol(tokenAddress, contractMap) { let symbol = await getSymbolFromContract(tokenAddress) if (!symbol) { @@ -52,7 +52,7 @@ async function getSymbol (tokenAddress, contractMap) { return symbol } -async function getDecimals (tokenAddress, contractMap) { +async function getDecimals(tokenAddress, contractMap) { let decimals = await getDecimalsFromContract(tokenAddress) if (!decimals || decimals === '0') { @@ -66,7 +66,7 @@ async function getDecimals (tokenAddress, contractMap) { return decimals } -export async function fetchSymbolAndDecimals (tokenAddress, contractMap) { +export async function fetchSymbolAndDecimals(tokenAddress, contractMap) { let symbol, decimals try { @@ -85,7 +85,11 @@ export async function fetchSymbolAndDecimals (tokenAddress, contractMap) { } } -export async function getSymbolAndDecimals (tokenAddress, contractMap, existingTokens = []) { +export async function getSymbolAndDecimals( + tokenAddress, + contractMap, + existingTokens = [] +) { const existingToken = existingTokens.find( ({ address }) => tokenAddress === address ) @@ -101,10 +105,21 @@ export async function getSymbolAndDecimals (tokenAddress, contractMap, existingT try { symbol = await getSymbol(tokenAddress, contractMap) + } catch (error) { + log.warn( + `symbol() calls for token at address ${tokenAddress} resulted in error:`, + error + ) + } + + try { decimals = await getDecimals(tokenAddress, contractMap) + if (decimals === undefined) { + decimals = 'FAILED' +} } catch (error) { log.warn( - `symbol() and decimal() calls for token at address ${tokenAddress} resulted in error:`, + `decimal() calls for token at address ${tokenAddress} resulted in error:`, error ) } @@ -115,10 +130,10 @@ export async function getSymbolAndDecimals (tokenAddress, contractMap, existingT } } -export function tokenInfoGetter (contractMap) { +export function tokenInfoGetter(contractMap) { const tokens = {} - return async (address) => { + return async address => { if (tokens[address]) { return tokens[address] } @@ -129,22 +144,22 @@ export function tokenInfoGetter (contractMap) { } } -export function calcTokenAmount (value, decimals) { +export function calcTokenAmount(value, decimals) { const multiplier = Math.pow(10, Number(decimals || 0)) return new BigNumber(String(value)).div(multiplier) } -export function calcTokenValue (value, decimals) { +export function calcTokenValue(value, decimals) { const multiplier = Math.pow(10, Number(decimals || 0)) return new BigNumber(String(value)).times(multiplier) } -export function getTokenValue (tokenParams = []) { - const valueData = tokenParams.find((param) => param.name === '_value') +export function getTokenValue(tokenParams = []) { + const valueData = tokenParams.find(param => param.name === '_value') return valueData && valueData.value } -export function getTokenToAddress (tokenParams = []) { - const toAddressData = tokenParams.find((param) => param.name === '_to') +export function getTokenToAddress(tokenParams = []) { + const toAddressData = tokenParams.find(param => param.name === '_to') return toAddressData ? toAddressData.value : tokenParams[0].value } diff --git a/ui/app/pages/add-token/add-token.component.js b/ui/app/pages/add-token/add-token.component.js index d68a5b44abe2..33a7527f4ab8 100644 --- a/ui/app/pages/add-token/add-token.component.js +++ b/ui/app/pages/add-token/add-token.component.js @@ -159,6 +159,11 @@ class AddToken extends Component { async attemptToAutoFillTokenParams(address) { const { symbol = '', decimals = 0 } = await this.tokenInfoGetter(address) + if (decimals === 'FAILED') { + return this.setState({ + customDecimalsError: this.context.t('decimalMethodNotFound'), + }) +} const autoFilled = Boolean(symbol && decimals) this.setState({ autoFilled }) From 3c7eb08767930524a647454dc3b3df3fea304046 Mon Sep 17 00:00:00 2001 From: yqrashawn Date: Tue, 18 May 2021 14:17:13 +0800 Subject: [PATCH 2/3] docs: update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66458e2b5e93..17f139ef3384 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Current Develop Branch +- fix: block adding tokens without decimal() method (#338) + ## 0.6.5 Wed May 12 2021 - fix: internal contract get code (#335) From cd3cf80b0cc821212744b52a4dd6918284fff765 Mon Sep 17 00:00:00 2001 From: Conflux Bot Date: Tue, 18 May 2021 06:17:55 +0000 Subject: [PATCH 3/3] Version v0.6.6 --- CHANGELOG.md | 2 ++ app/manifest.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17f139ef3384..4c5606692993 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Current Develop Branch +## 0.6.6 Tue May 18 2021 + - fix: block adding tokens without decimal() method (#338) ## 0.6.5 Wed May 12 2021 diff --git a/app/manifest.json b/app/manifest.json index a7288e47b51f..27202aaa2c11 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "ConfluxPortal", "short_name": "ConfluxPortal", - "version": "0.6.5", + "version": "0.6.6", "manifest_version": 2, "author": "https://conflux-chain.org", "description": "__MSG_appDescription__",