Skip to content

Commit

Permalink
fix - non-spendable balance
Browse files Browse the repository at this point in the history
  • Loading branch information
Lyncee59 committed Jun 20, 2018
1 parent 512cb6a commit bed21ee
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 49 deletions.
@@ -1,18 +1,16 @@
import { selectors } from 'data'
import { createDeepEqualSelector } from 'services/ReselectHelper'
import { add, contains, filter, reduce, prop, values } from 'ramda'
import { add, reduce, lift, path } from 'ramda'
import { Remote } from 'blockchain-wallet-v4/src'

export const getData = createDeepEqualSelector(
[
selectors.core.kvStore.bch.getUnspendableContext,
selectors.core.data.bch.getAddresses
],
(context, addressesR) => {
const transform = addresses => {
const filteredAddresses = filter(x => contains(prop('address', x), context), values(addresses))
const filteredBalances = filteredAddresses.map(prop('final_balance'))
return reduce(add, 0, filteredBalances)
}
return addressesR.map(transform)
const contextToBalances = (context, balances) => context.map(a => path([a, 'final_balance'], balances) || 0)
const balancesR = lift(contextToBalances)(Remote.of(context), addressesR)
return balancesR.map(reduce(add, 0))
}
)
@@ -1,18 +1,16 @@
import { add, lift, path, reduce } from 'ramda'
import { selectors } from 'data'
import { createDeepEqualSelector } from 'services/ReselectHelper'
import { add, contains, filter, reduce, prop, values } from 'ramda'
import { Remote } from 'blockchain-wallet-v4/src'

export const getData = createDeepEqualSelector(
[
selectors.core.wallet.getUnspendableContext,
selectors.core.data.bitcoin.getAddresses
],
(context, addressesR) => {
const transform = addresses => {
const filteredAddresses = filter(x => contains(prop('address', x), context), values(addresses))
const filteredBalances = filteredAddresses.map(prop('final_balance'))
return reduce(add, 0, filteredBalances)
}
return addressesR.map(transform)
const contextToBalances = (context, balances) => context.map(a => path([a, 'final_balance'], balances) || 0)
const balancesR = lift(contextToBalances)(Remote.of(context), addressesR)
return balancesR.map(reduce(add, 0))
}
)
@@ -1,19 +1,17 @@
import { add, contains, filter, prop, reduce, values } from 'ramda'
import { add, lift, path, reduce } from 'ramda'
import { selectors } from 'data'
import { createDeepEqualSelector } from 'services/ReselectHelper'
import { Remote } from 'blockchain-wallet-v4/src'

export const getBtcBalance = createDeepEqualSelector(
[
selectors.core.wallet.getSpendableContext,
selectors.core.data.bitcoin.getAddresses
],
(context, addressesR) => {
const transform = addresses => {
const filteredAddresses = filter(x => contains(prop('address', x), context), values(addresses))
const filteredBalances = filteredAddresses.map(prop('final_balance'))
return reduce(add, 0, filteredBalances)
}
return addressesR.map(transform)
const contextToBalances = (context, balances) => context.map(a => path([a, 'final_balance'], balances) || 0)
const balancesR = lift(contextToBalances)(Remote.of(context), addressesR)
return balancesR.map(reduce(add, 0))
}
)

Expand All @@ -23,12 +21,9 @@ export const getBchBalance = createDeepEqualSelector(
selectors.core.data.bch.getAddresses
],
(context, addressesR) => {
const transform = addresses => {
const filteredAddresses = filter(x => contains(prop('address', x), context), values(addresses))
const filteredBalances = filteredAddresses.map(prop('final_balance'))
return reduce(add, 0, filteredBalances)
}
return addressesR.map(transform)
const contextToBalances = (context, balances) => context.map(a => path([a, 'final_balance'], balances) || 0)
const balancesR = lift(contextToBalances)(Remote.of(context), addressesR)
return balancesR.map(reduce(add, 0))
}
)

Expand Down
23 changes: 2 additions & 21 deletions packages/blockchain-wallet-v4/src/redux/kvStore/bch/selectors.js
Expand Up @@ -45,7 +45,7 @@ export const getContext = createDeepEqualSelector(
export const getSpendableContext = createDeepEqualSelector(
[
walletSelectors.getHDAccounts,
walletSelectors.getSpendableAddresses,
walletSelectors.getActiveSpendableAddresses,
getAccounts
],
(btcHDAccounts, spendableAddresses, metadataAccountsR) => {
Expand All @@ -63,26 +63,7 @@ export const getSpendableContext = createDeepEqualSelector(
}
)

export const getUnspendableContext = createDeepEqualSelector(
[
walletSelectors.getHDAccounts,
walletSelectors.getUnspendableAddresses,
getAccounts
],
(btcHDAccounts, unspendableAddresses, metadataAccountsR) => {
const transform = metadataAccounts => {
const activeAccounts = filter(account => {
const index = prop('index', account)
const metadataAccount = metadataAccounts[index]
return not(prop('archived', metadataAccount))
}, btcHDAccounts)
return map(prop('xpub'), activeAccounts)
}
const activeAccounts = metadataAccountsR.map(transform).getOrElse([])
const addresses = keysIn(unspendableAddresses)
return concat(activeAccounts, addresses)
}
)
export const getUnspendableContext = state => keys(walletSelectors.getActiveUnspendableAddresses(state))

export const getDefaultAccountIndex = state => getMetadata(state).map(path(['value', 'default_account_idx']))

Expand Down
2 changes: 2 additions & 0 deletions packages/blockchain-wallet-v4/src/redux/wallet/selectors.js
Expand Up @@ -27,6 +27,8 @@ export const getActiveAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.
export const getArchivedAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.selectArchived, Wallet.selectAddresses, getWallet)
export const getSpendableAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.selectSpendable, Wallet.selectAddresses, getWallet)
export const getUnspendableAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.selectUnspendable, Wallet.selectAddresses, getWallet)
export const getActiveSpendableAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.selectActiveSpendable, Wallet.selectAddresses, getWallet)
export const getActiveUnspendableAddresses = compose(ImtoJS, map(Address.toJS), AddressMap.selectActiveUnspendable, Wallet.selectAddresses, getWallet)
export const getHDAccounts = compose(ImtoJS, map(HDAccount.toJSwithIndex), Wallet.selectHDAccounts, getWallet)
export const getSeedHex = curry((state, password) => compose(Wallet.getSeedHex(password), getWallet)(state))
export const getMnemonic = curry((state, password) => compose(Wallet.getMnemonic(password), getWallet)(state))
Expand Down
1 change: 1 addition & 0 deletions packages/blockchain-wallet-v4/src/types/Address.js
Expand Up @@ -46,6 +46,7 @@ export const selectCreatedDeviceVersion = view(createdDeviceVersion)
export const isArchived = compose(equals(2), view(tag))
export const isActive = compose(not, isArchived)
export const isWatchOnly = compose(isNil, view(priv))
export const isNotWatchOnly = compose(not, isWatchOnly)

export const fromJS = (x) => is(Address, x) ? x : new Address(x)

Expand Down
4 changes: 3 additions & 1 deletion packages/blockchain-wallet-v4/src/types/AddressMap.js
@@ -1,4 +1,4 @@
import { indexBy, map, prop, compose, is, pipe, curry, filter, reject } from 'ramda'
import { allPass, indexBy, map, prop, compose, is, pipe, curry, filter, reject } from 'ramda'
import { view } from 'ramda-lens'
import Type from './Type'
import * as Address from './Address'
Expand All @@ -20,6 +20,8 @@ export const selectActive = pipe(AddressMap.guard, filter(Address.isActive))
export const selectArchived = pipe(AddressMap.guard, filter(Address.isArchived))
export const selectSpendable = pipe(AddressMap.guard, reject(Address.isWatchOnly))
export const selectUnspendable = pipe(AddressMap.guard, filter(Address.isWatchOnly))
export const selectActiveSpendable = pipe(AddressMap.guard, filter(allPass([Address.isActive, Address.isNotWatchOnly])))
export const selectActiveUnspendable = pipe(AddressMap.guard, filter(allPass([Address.isActive, Address.isWatchOnly])))

export const deleteAddress = curry((string, addressMap) =>
pipe(AddressMap.guard, amap => amap.delete(string))(addressMap)
Expand Down

0 comments on commit bed21ee

Please sign in to comment.