Skip to content

Commit

Permalink
feat(dynamic custodial): initial work to set up dynamic custodial
Browse files Browse the repository at this point in the history
  • Loading branch information
plondon committed Jul 26, 2021
1 parent 8ef9ddf commit 3935d08
Show file tree
Hide file tree
Showing 28 changed files with 397 additions and 496 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -128,15 +128,18 @@ export const getErc20Balance = (coin: string) =>
}
)

export const getDotBalance = createDeepEqualSelector(
[selectors.components.simpleBuy.getSBBalances],
(sbBalancesR: RemoteDataType<string, SBBalancesType>) => {
const sbDotBalance = sbBalancesR.getOrElse({ DOT: DEFAULT_SB_BALANCE }).DOT
const sbBalance = sbDotBalance ? sbDotBalance.available : '0'
export const getCoinBalance = (coin: string) =>
createDeepEqualSelector(
[selectors.components.simpleBuy.getSBBalances],
(sbBalancesR: RemoteDataType<string, SBBalancesType>) => {
const sbCoinBalance = sbBalancesR.getOrElse({
[coin]: DEFAULT_SB_BALANCE
})[coin]
const sbBalance = sbCoinBalance ? sbCoinBalance.available : '0'

return Remote.of(new BigNumber(sbBalance))
}
)
return Remote.of(new BigNumber(sbBalance))
}
)

export const getXlmBalance = createDeepEqualSelector(
[
Expand Down Expand Up @@ -164,36 +167,6 @@ export const getXlmBalance = createDeepEqualSelector(
}
)

export const getAlgoBalance = createDeepEqualSelector(
[selectors.components.simpleBuy.getSBBalances],
(sbBalancesR: RemoteDataType<string, SBBalancesType>) => {
const sbAlgoBalance = sbBalancesR.getOrElse({ ALGO: DEFAULT_SB_BALANCE }).ALGO
const sbBalance = sbAlgoBalance ? sbAlgoBalance.available : '0'

return Remote.of(new BigNumber(sbBalance))
}
)

export const getCloutBalance = createDeepEqualSelector(
[selectors.components.simpleBuy.getSBBalances],
(sbBalancesR: RemoteDataType<string, SBBalancesType>) => {
const sbCloutBalance = sbBalancesR.getOrElse({ CLOUT: DEFAULT_SB_BALANCE }).CLOUT
const sbBalance = sbCloutBalance ? sbCloutBalance.available : '0'

return Remote.of(new BigNumber(sbBalance))
}
)

export const getDogeBalance = createDeepEqualSelector(
[selectors.components.simpleBuy.getSBBalances],
(sbBalancesR: RemoteDataType<string, SBBalancesType>) => {
const sbDogeBalance = sbBalancesR.getOrElse({ DOGE: DEFAULT_SB_BALANCE }).DOGE
const sbBalance = sbDogeBalance ? sbDogeBalance.available : '0'

return Remote.of(new BigNumber(sbBalance))
}
)

export const getFiatBalance = curry(
(
currency: WalletFiatType,
Expand Down Expand Up @@ -251,17 +224,6 @@ export const getEthBalanceInfo = createDeepEqualSelector(
}
)

export const getDotBalanceInfo = createDeepEqualSelector(
[getDotBalance, selectors.core.data.dot.getRates, selectors.core.settings.getCurrency],
(dotBalanceR, dotRatesR, currencyR) => {
const transform = (value, rates, toCurrency) => {
return Exchange.convertCoinToFiat({ coin: 'DOT', currency: toCurrency, rates, value })
}

return lift(transform)(dotBalanceR, dotRatesR, currencyR)
}
)

export const getXlmBalanceInfo = createDeepEqualSelector(
[getXlmBalance, selectors.core.data.xlm.getRates, selectors.core.settings.getCurrency],
(xlmBalanceR, xlmRatesR, currencyR) => {
Expand All @@ -271,33 +233,6 @@ export const getXlmBalanceInfo = createDeepEqualSelector(
}
)

export const getAlgoBalanceInfo = createDeepEqualSelector(
[getAlgoBalance, selectors.core.data.algo.getRates, selectors.core.settings.getCurrency],
(algoBalanceR, algoRatesR, currencyR) => {
const transform = (value, rates, toCurrency) =>
Exchange.convertCoinToFiat({ coin: 'ALGO', currency: toCurrency, rates, value })
return lift(transform)(algoBalanceR, algoRatesR, currencyR)
}
)

export const getCloutBalanceInfo = createDeepEqualSelector(
[getCloutBalance, selectors.core.data.clout.getRates, selectors.core.settings.getCurrency],
(cloutBalanceR, cloutRatesR, currencyR) => {
const transform = (value, rates, toCurrency) =>
Exchange.convertCoinToFiat({ coin: 'CLOUT', currency: toCurrency, rates, value })
return lift(transform)(cloutBalanceR, cloutRatesR, currencyR)
}
)

export const getDogeBalanceInfo = createDeepEqualSelector(
[getDogeBalance, selectors.core.data.doge.getRates, selectors.core.settings.getCurrency],
(dogeBalanceR, dogeRatesR, currencyR) => {
const transform = (value, rates, toCurrency) =>
Exchange.convertCoinToFiat({ coin: 'DOGE', currency: toCurrency, rates, value })
return lift(transform)(dogeBalanceR, dogeRatesR, currencyR)
}
)

export const getFiatBalanceInfo = createDeepEqualSelector(
[
selectors.core.data.btc.getRates,
Expand Down Expand Up @@ -337,18 +272,10 @@ export const getFiatBalanceInfo = createDeepEqualSelector(

export const getBalanceSelector = (coin: string) => {
switch (coin) {
case 'ALGO':
return getAlgoBalance
case 'BCH':
return getBchBalance
case 'BTC':
return getBtcBalance
case 'CLOUT':
return getCloutBalance
case 'DOGE':
return getDogeBalance
case 'DOT':
return getDotBalance
case 'ETH':
return getEthBalance
case 'XLM':
Expand All @@ -357,9 +284,13 @@ export const getBalanceSelector = (coin: string) => {
case 'GBP':
case 'USD':
return getFiatBalance(coin)
// TODO: FIX erc20 is default
default:
return getErc20Balance(coin)
switch (true) {
case selectors.core.data.coins.getCoins().includes(coin):
return getCoinBalance(coin)
default:
return getErc20Balance(coin)
}
}
}

Expand All @@ -372,15 +303,17 @@ export const getAllCoinsBalancesSelector = (state) => {
[curr]: getErc20Balance(curr)(state).getOrElse(new BigNumber(0)).valueOf()
}
}
if (selectors.core.data.coins.getCoins().includes(curr)) {
return {
...acc,
[curr]: getCoinBalance(curr)(state).getOrElse(new BigNumber(0)).valueOf()
}
}
return { ...acc }
},
{
ALGO: getAlgoBalance(state).getOrElse(new BigNumber(0)).valueOf(),
BCH: new BigNumber(getBchBalance(state).getOrElse(0)).valueOf(),
BTC: new BigNumber(getBtcBalance(state).getOrElse(0)).valueOf(),
CLOUT: getCloutBalance(state).getOrElse(new BigNumber(0)).valueOf(),
DOGE: getDogeBalance(state).getOrElse(new BigNumber(0)).valueOf(),
DOT: getDotBalance(state).getOrElse(new BigNumber(0)).valueOf(),
ETH: getEthBalance(state).getOrElse(new BigNumber(0)).valueOf(),
XLM: getXlmBalance(state).getOrElse(new BigNumber(0)).valueOf()
}
Expand Down Expand Up @@ -411,3 +344,23 @@ export const getErc20BalancesInfoV2 = createDeepEqualSelector(
return lift(transform)(erc20CoinsR, currencyR)
}
)

export const getCoinsBalanceInfo = createDeepEqualSelector(
[selectors.core.data.coins.getCoins, selectors.core.settings.getCurrency, (state) => state],
(coins, currencyR, state) => {
const transform = (currency) => {
return coins.map((coin, balance) => {
const transform2 = (rates) => {
return Exchange.convertCoinToFiat({ coin, currency, rates, value: balance })
}

const balanceR = getCoinBalance(coin)(state)
// @ts-ignore
const ratesR = selectors.core.data.coins.getRates(coin, state)
return ratesR ? lift(transform2)(ratesR, balanceR) : Remote.of('0')
})
}

return lift(transform)(currencyR)
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,76 +8,60 @@ import * as S from '../selectors'

export const getTotalBalance = createDeepEqualSelector(
[
S.getAlgoBalanceInfo,
S.getBchBalanceInfo,
S.getBtcBalanceInfo,
S.getCloutBalanceInfo,
S.getDogeBalanceInfo,
S.getDotBalanceInfo,
S.getEthBalanceInfo,
S.getXlmBalanceInfo,
S.getFiatBalanceInfo,
S.getErc20BalancesInfoV2,
S.getCoinsBalanceInfo,
selectors.core.settings.getCurrency,
selectors.router.getPathname
],
(
algoBalanceInfoR,
bchBalanceInfoR,
btcBalanceInfoR,
dotBalanceInfoR,
cloutBalanceInfoR,
dogeBalanceInfoR,
ethBalanceInfoR,
xlmBalanceInfoR,
fiatBalanceInfoR,
erc20BalancesInfoV2,
coinsBalanceInfo,
currency,
path
) => {
const transform = (
algoBalance,
bchBalance,
btcBalance,
// cloutBalance,
// dogeBalance,
// dotBalance,
ethBalance,
xlmBalance,
fiatBalance,
erc20BalancesInfoV2,
coinsBalanceInfo,
currency
) => {
const erc20Balance = erc20BalancesInfoV2.reduce(
(acc, cur) => (acc += Number(cur.getOrElse('0'))),
0
)
const balanceReducer = (acc, cur) => acc + Number(cur.getOrElse('0'))
const erc20Balance = erc20BalancesInfoV2.reduce(balanceReducer, 0)
const coinsBalance = coinsBalanceInfo.reduce(balanceReducer, 0)
const total =
Number(algoBalance) +
Number(bchBalance) +
Number(btcBalance) +
Number(ethBalance) +
Number(cloutBalanceInfoR.getOrElse('0')) +
Number(dogeBalanceInfoR.getOrElse('0')) +
Number(dotBalanceInfoR.getOrElse('0')) +
Number(xlmBalance) +
Number(fiatBalance) +
erc20Balance
erc20Balance +
coinsBalance
const totalBalance = `${fiatToString({ unit: currency, value: total })}`
return { path, totalBalance }
}

return lift(transform)(
algoBalanceInfoR,
bchBalanceInfoR,
btcBalanceInfoR,
// cloutBalanceInfoR,
// dogeBalanceInfoR,
// dotBalanceInfoR,
ethBalanceInfoR,
xlmBalanceInfoR,
fiatBalanceInfoR,
erc20BalancesInfoV2,
coinsBalanceInfo,
currency
)
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { bindActionCreators } from 'redux'

import { Remote } from 'blockchain-wallet-v4/src'
import { CoinType } from 'blockchain-wallet-v4/src/types'
import { actions } from 'data'
import { actions, selectors } from 'data'

import { getData } from './selectors'
import Error from './template.error'
Expand All @@ -23,6 +23,9 @@ class FiatDisplayContainer extends React.PureComponent<Props> {
if (coinfig.type.erc20Address) {
return
}
if (selectors.core.data.coins.getCoins().includes(coin)) {
return
}
return this.props[`${toLower(coin)}Actions`].fetchRates()
}
}
Expand All @@ -43,12 +46,8 @@ const mapStateToProps = (state, ownProps) => ({
})

const mapDispatchToProps = (dispatch) => ({
algoActions: bindActionCreators(actions.core.data.algo, dispatch),
bchActions: bindActionCreators(actions.core.data.bch, dispatch),
btcActions: bindActionCreators(actions.core.data.btc, dispatch),
cloutActions: bindActionCreators(actions.core.data.clout, dispatch),
dogeActions: bindActionCreators(actions.core.data.doge, dispatch),
dotActions: bindActionCreators(actions.core.data.dot, dispatch),
ethActions: bindActionCreators(actions.core.data.eth, dispatch),
xlmActions: bindActionCreators(actions.core.data.xlm, dispatch)
})
Expand Down

0 comments on commit 3935d08

Please sign in to comment.