mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-24 11:01:41 +01:00
f0f5554846
The `metamask.send.from` field was assumed by various selectors to be an object, but instead it was recently set to a string. The selectors have been updated to assume it's a string, and to fetch the full account object explicitly. The selector `getSendFromObject` was repurposed for this, as that's basically what it already did. The optional address parameter was removed though, as that was only used to fetch the `from` address in cases where the `send` state was set without there being a `from` address set. That case is no longer possible, as the `from` address is always set upon the initialization of the `send` state. The `getSendFromObject` selector no longer fetches the 'name' of that address from the address book state either. This property was not used in either of the cases this selector was used.
197 lines
5.1 KiB
JavaScript
197 lines
5.1 KiB
JavaScript
import abi from 'human-standard-token-abi'
|
|
import { multiplyCurrencies } from '../../helpers/utils/conversion-util'
|
|
import {
|
|
accountsWithSendEtherInfoSelector,
|
|
getAddressBook,
|
|
getSelectedAccount,
|
|
getTargetAccount,
|
|
getSelectedAddress,
|
|
} from '../../selectors/selectors'
|
|
import { estimateGasPriceFromRecentBlocks, calcGasTotal } from './send.utils'
|
|
import {
|
|
getAveragePriceEstimateInHexWEI,
|
|
} from '../../selectors/custom-gas'
|
|
|
|
export function getAmountConversionRate (state) {
|
|
return getSelectedToken(state)
|
|
? getSelectedTokenToFiatRate(state)
|
|
: getConversionRate(state)
|
|
}
|
|
|
|
export function getBlockGasLimit (state) {
|
|
return state.metamask.currentBlockGasLimit
|
|
}
|
|
|
|
export function getConversionRate (state) {
|
|
return state.metamask.conversionRate
|
|
}
|
|
|
|
export function getCurrentCurrency (state) {
|
|
return state.metamask.currentCurrency
|
|
}
|
|
|
|
export function getNativeCurrency (state) {
|
|
return state.metamask.nativeCurrency
|
|
}
|
|
|
|
export function getCurrentNetwork (state) {
|
|
return state.metamask.network
|
|
}
|
|
|
|
export function getForceGasMin (state) {
|
|
return state.metamask.send.forceGasMin
|
|
}
|
|
|
|
export function getGasLimit (state) {
|
|
return state.metamask.send.gasLimit || '0'
|
|
}
|
|
|
|
export function getGasPrice (state) {
|
|
return state.metamask.send.gasPrice || getAveragePriceEstimateInHexWEI(state)
|
|
}
|
|
|
|
export function getGasPriceFromRecentBlocks (state) {
|
|
return estimateGasPriceFromRecentBlocks(state.metamask.recentBlocks)
|
|
}
|
|
|
|
export function getGasTotal (state) {
|
|
return calcGasTotal(getGasLimit(state), getGasPrice(state))
|
|
}
|
|
|
|
export function getPrimaryCurrency (state) {
|
|
const selectedToken = getSelectedToken(state)
|
|
return selectedToken && selectedToken.symbol
|
|
}
|
|
|
|
export function getRecentBlocks (state) {
|
|
return state.metamask.recentBlocks
|
|
}
|
|
|
|
export function getSelectedIdentity (state) {
|
|
const selectedAddress = getSelectedAddress(state)
|
|
const identities = state.metamask.identities
|
|
|
|
return identities[selectedAddress]
|
|
}
|
|
|
|
export function getSelectedToken (state) {
|
|
const tokens = state.metamask.tokens || []
|
|
const selectedTokenAddress = state.metamask.selectedTokenAddress
|
|
const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
|
|
const sendToken = state.metamask.send.token
|
|
|
|
return selectedToken || sendToken || null
|
|
}
|
|
|
|
export function getSelectedTokenContract (state) {
|
|
const selectedToken = getSelectedToken(state)
|
|
|
|
return selectedToken
|
|
? global.eth.contract(abi).at(selectedToken.address)
|
|
: null
|
|
}
|
|
|
|
export function getSelectedTokenExchangeRate (state) {
|
|
const tokenExchangeRates = state.metamask.tokenExchangeRates
|
|
const selectedToken = getSelectedToken(state) || {}
|
|
const { symbol = '' } = selectedToken
|
|
const pair = `${symbol.toLowerCase()}_eth`
|
|
const { rate: tokenExchangeRate = 0 } = (tokenExchangeRates && tokenExchangeRates[pair]) || {}
|
|
|
|
return tokenExchangeRate
|
|
}
|
|
|
|
export function getSelectedTokenToFiatRate (state) {
|
|
const selectedTokenExchangeRate = getSelectedTokenExchangeRate(state)
|
|
const conversionRate = getConversionRate(state)
|
|
|
|
const tokenToFiatRate = multiplyCurrencies(
|
|
conversionRate,
|
|
selectedTokenExchangeRate,
|
|
{ toNumericBase: 'dec' }
|
|
)
|
|
|
|
return tokenToFiatRate
|
|
}
|
|
|
|
export function getSendAmount (state) {
|
|
return state.metamask.send.amount
|
|
}
|
|
|
|
export function getSendHexData (state) {
|
|
return state.metamask.send.data
|
|
}
|
|
|
|
export function getSendHexDataFeatureFlagState (state) {
|
|
return state.metamask.featureFlags.sendHexData
|
|
}
|
|
|
|
export function getSendEditingTransactionId (state) {
|
|
return state.metamask.send.editingTransactionId
|
|
}
|
|
|
|
export function getSendErrors (state) {
|
|
return state.send.errors
|
|
}
|
|
|
|
export function getSendFrom (state) {
|
|
return state.metamask.send.from
|
|
}
|
|
|
|
export function getSendFromBalance (state) {
|
|
const fromAccount = getSendFromObject(state)
|
|
return fromAccount.balance
|
|
}
|
|
|
|
export function getSendFromObject (state) {
|
|
const fromAddress = getSendFrom(state)
|
|
return fromAddress
|
|
? getTargetAccount(state, fromAddress)
|
|
: getSelectedAccount(state)
|
|
}
|
|
|
|
export function getSendMaxModeState (state) {
|
|
return state.metamask.send.maxModeOn
|
|
}
|
|
|
|
export function getSendTo (state) {
|
|
return state.metamask.send.to
|
|
}
|
|
|
|
export function getSendToNickname (state) {
|
|
return state.metamask.send.toNickname
|
|
}
|
|
|
|
export function getSendToAccounts (state) {
|
|
const fromAccounts = accountsWithSendEtherInfoSelector(state)
|
|
const addressBookAccounts = getAddressBook(state)
|
|
return [...fromAccounts, ...addressBookAccounts]
|
|
}
|
|
export function getTokenBalance (state) {
|
|
return state.metamask.send.tokenBalance
|
|
}
|
|
|
|
export function getSendEnsResolution (state) {
|
|
return state.metamask.send.ensResolution
|
|
}
|
|
|
|
export function getSendEnsResolutionError (state) {
|
|
return state.metamask.send.ensResolutionError
|
|
}
|
|
|
|
export function getTokenExchangeRate (state, tokenSymbol) {
|
|
const pair = `${tokenSymbol.toLowerCase()}_eth`
|
|
const tokenExchangeRates = state.metamask.tokenExchangeRates
|
|
const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {}
|
|
|
|
return tokenExchangeRate
|
|
}
|
|
|
|
export function getUnapprovedTxs (state) {
|
|
return state.metamask.unapprovedTxs
|
|
}
|
|
|
|
export function getQrCodeData (state) {
|
|
return state.appState.qrCodeData
|
|
}
|