@exodus/balances
This Exodus SDK feature tracks the crypto-denominated balances for all enabled wallet accounts. For fiat-denominated balances, check out @exodus/fiat-balances.
Install
yarn add @exodus/balances
Usage
This feature is designed to be used together with @exodus/headless
. See using the sdk.
Play with it
- Open the playground https://exodus-hydra.pages.dev/
- Run
selectors.balances.byAsset(store.getState())
in the Dev Tools Console to get balances by asset aggregated across enabled wallet accounts. - Try out some other selectors from
selectors.balances
. See example usage in tests. - Mock an address with a balance, tick the blockchain monitor and check your balance.
await exodus.debug.addressProvider.mockAddress({
assetName: 'ethereum',
walletAccount: 'exodus_0',
address: '0x1111111111111111111111111111111111111111',
})
await exodus.txLogMonitors.update({ assetName: 'ethereum', refresh: true })
selectors.balances
.createTotal({ assetName: 'ethereum', walletAccount: 'exodus_0' })(store.getState())
.toString()
API Side
See using the sdk for more details on how features plug into the SDK. Note that the balances feature currently doesn't provide a top level API and is meant to be used purely through selectors.
If you're building a feature that requires balances, add a dependency on the balancesAtom
as below. See also the available balance fields.
const myModuleDefinition = {
id: 'myModule',
type: 'module',
factory: ({ balancesAtom }) => {
const doSomethingSpecial = async () => {
const { balances } = await balancesAtom.get()
}
return {
doSomethingSpecial,
}
},
dependencies: ['balancesAtom'],
}
UI Side
See using the sdk for more details on basic UI-side setup.
import { selectors } from '~/ui/flux'
const MyComponent = () => {
const bitcoinBalance = useSelector(
selectors.balances.createSpendable({
assetName: 'bitcoin',
walletAccount: 'exodus_0',
})
)
}
Contributing
WARNING: no asset specifics!
Do NOT introduce any asset specifics like if (assetName === 'dogicorn') balance = balance.mul(2)
. All asset-specifics belong in asset.api.getBalances
or other APIs inside the asset libraries.