From 85498041f95c3c745f9740d0eb29134036b3a093 Mon Sep 17 00:00:00 2001 From: Maxwell Lasky Date: Fri, 8 Feb 2019 13:03:23 -0700 Subject: [PATCH 1/2] fixes several defects associated with pending tx UX --- app/actions/dashboardActions.js | 2 ++ app/actions/pendingTransactionActions.js | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/actions/dashboardActions.js b/app/actions/dashboardActions.js index df702f2b3..57b6c92c7 100644 --- a/app/actions/dashboardActions.js +++ b/app/actions/dashboardActions.js @@ -5,6 +5,7 @@ import balancesActions from './balancesActions' import claimsActions from './claimsActions' import pricesActions from './pricesActions' import priceHistoryActions from './priceHistoryActions' +import { getPendingTransactionInfo } from './pendingTransactionActions' export const ID = 'dashboard' @@ -13,4 +14,5 @@ export default createBatchActions(ID, { claims: claimsActions, prices: pricesActions, priceHistory: priceHistoryActions, + getPendingTransactionInfo, }) diff --git a/app/actions/pendingTransactionActions.js b/app/actions/pendingTransactionActions.js index 603882624..f66393c16 100644 --- a/app/actions/pendingTransactionActions.js +++ b/app/actions/pendingTransactionActions.js @@ -13,7 +13,7 @@ import { export const ID = 'pendingTransactions' const STORAGE_KEY = 'pendingTransactions' -const MINIMUM_CONFIRMATIONS = 10 +const MINIMUM_CONFIRMATIONS = 3 const INVALID_TX_ERROR_MESSAGE = 'Unknown transaction' export const parseContractTransaction = async ( @@ -24,6 +24,7 @@ export const parseContractTransaction = async ( // eslint-disable-next-line camelcase const { confirmations, txid, net_fee, blocktime = 0 } = transaction transaction.vout.pop() + console.log({ transaction }) for (const send of transaction.vout) { parsedData.push({ confirmations, @@ -170,8 +171,10 @@ export const addPendingTransaction = createActions( Array, > => { const transactions = await getPendingTransactions() - - if (Array.isArray(transactions[address])) { + if ( + Array.isArray(transactions[address]) && + !transactions[address].find(pendingTx => pendingTx.hash === tx.hash) + ) { transactions[address].push(tx) } else { transactions[address] = [tx] From 356c2dbed95adc4d50c667529bc4653f84cae7ff Mon Sep 17 00:00:00 2001 From: Maxwell Lasky Date: Mon, 11 Feb 2019 19:22:07 -0700 Subject: [PATCH 2/2] fixes issue with parsing of transaction --- app/actions/pendingTransactionActions.js | 21 +++++++++++------- app/util/findAndReturnTokenInfo.js | 28 ++++++++++++++---------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/actions/pendingTransactionActions.js b/app/actions/pendingTransactionActions.js index f66393c16..2eda2ab4a 100644 --- a/app/actions/pendingTransactionActions.js +++ b/app/actions/pendingTransactionActions.js @@ -1,7 +1,7 @@ // @flow import { createActions } from 'spunky' import Neon from '@cityofzion/neon-js' -import { isEmpty } from 'lodash-es' +import { isEmpty, cloneDeep } from 'lodash-es' import { toBigNumber } from '../core/math' import { getStorage, setStorage } from '../core/storage' @@ -13,7 +13,7 @@ import { export const ID = 'pendingTransactions' const STORAGE_KEY = 'pendingTransactions' -const MINIMUM_CONFIRMATIONS = 3 +const MINIMUM_CONFIRMATIONS = 2 const INVALID_TX_ERROR_MESSAGE = 'Unknown transaction' export const parseContractTransaction = async ( @@ -22,18 +22,23 @@ export const parseContractTransaction = async ( ): Promise> => { const parsedData = [] // eslint-disable-next-line camelcase - const { confirmations, txid, net_fee, blocktime = 0 } = transaction - transaction.vout.pop() - console.log({ transaction }) - for (const send of transaction.vout) { + const { + confirmations, + txid, + net_fee, // eslint-disable-line camelcase + blocktime = 0, + sendEntries, + } = transaction + + for (const send of sendEntries) { parsedData.push({ confirmations, txid: txid.substring(2), net_fee, blocktime, - amount: toBigNumber(send.value).toString(), + amount: toBigNumber(send.amount).toString(), to: send.address, - asset: await findAndReturnTokenInfo(send.asset, net), + asset: await findAndReturnTokenInfo('', net, send.symbol), }) } return parsedData diff --git a/app/util/findAndReturnTokenInfo.js b/app/util/findAndReturnTokenInfo.js index 299147083..4b29db952 100644 --- a/app/util/findAndReturnTokenInfo.js +++ b/app/util/findAndReturnTokenInfo.js @@ -11,22 +11,26 @@ export const getImageBySymbol = (symbol: string) => imageMap[symbol] export const findAndReturnTokenInfo = async ( scriptHash: string, net: string, + symbol?: string, ): Promise => { + const NEO = { + symbol: ASSETS.NEO, + image: getImageBySymbol(ASSETS.NEO), + } + const GAS = { + symbol: ASSETS.GAS, + image: getImageBySymbol(ASSETS.GAS), + } + + if (symbol === ASSETS.NEO || scriptHash.includes(NEO_ID)) return NEO + if (symbol === ASSETS.GAS || scriptHash.includes(GAS_ID)) return GAS + const tokens = await getDefaultTokens() + // if token is found in our list return it const token = tokens.find(token => token.scriptHash.includes(scriptHash)) if (token) return token - if (scriptHash.includes(NEO_ID)) { - return { - symbol: ASSETS.NEO, - image: getImageBySymbol(ASSETS.NEO), - } - } - if (scriptHash.includes(GAS_ID)) { - return { - symbol: ASSETS.GAS, - image: getImageBySymbol(ASSETS.GAS), - } - } + + // if token is unknown to application query neoscan const endpoint = await getRPCEndpoint(net) const tokenInfo = await api.nep5.getToken(endpoint, scriptHash).catch(e => { console.error(e)