@@ -4,21 +4,26 @@ import {
44 defaultAccountAtom ,
55 transparentBalanceAtom ,
66} from "atoms/accounts/atoms" ;
7- import { nativeTokenAddressAtom , tokenAddressesAtom } from "atoms/chain" ;
7+ import {
8+ chainParametersAtom ,
9+ nativeTokenAddressAtom ,
10+ tokenAddressesAtom ,
11+ } from "atoms/chain" ;
812import { shouldUpdateBalanceAtom } from "atoms/etc" ;
913import { availableAssetsAtom } from "atoms/integrations" ;
1014import { queryDependentFn } from "atoms/utils" ;
1115import BigNumber from "bignumber.js" ;
1216import { atomWithQuery } from "jotai-tanstack-query" ;
1317import { namadaAsset } from "registry/namadaAsset" ;
14- import { unknownAsset } from "registry/unknownAsset" ;
15- import { toDisplayAmount } from "utils" ;
16- import { findAssetByToken } from "./functions" ;
18+ import { AddressWithAssetAndBalance } from "types" ;
19+ import {
20+ findAssetByToken ,
21+ mapNamadaAddressesToAssets ,
22+ mapNamadaAssetsToTokenBalances ,
23+ } from "./functions" ;
1724import { fetchCoinPrices , fetchShieldedBalance } from "./services" ;
1825
19- export type TokenBalance = {
20- asset : Asset ;
21- balance : BigNumber ;
26+ export type TokenBalance = AddressWithAssetAndBalance & {
2227 dollar ?: BigNumber ;
2328} ;
2429
@@ -148,75 +153,88 @@ export const tokenPricesAtom = atomWithQuery((get) => {
148153 } ;
149154} ) ;
150155
151- export const shieldedTokensAtom = atomWithQuery < TokenBalance [ ] > ( ( get ) => {
152- const shieldedBalanceQuery = get ( shieldedBalanceAtom ) ;
153- const assetByAddressQuery = get ( assetByAddressAtom ) ;
154- const tokenPricesQuery = get ( tokenPricesAtom ) ;
156+ export const namadaShieldedAssetsAtom = atomWithQuery ( ( get ) => {
157+ const shieldedBalances = get ( shieldedBalanceAtom ) ;
158+ const tokenAddresses = get ( tokenAddressesAtom ) ;
159+ const chainParameters = get ( chainParametersAtom ) ;
155160
156161 return {
157162 queryKey : [
158- "shielded-tokens " ,
159- shieldedBalanceQuery . data ,
160- assetByAddressQuery . data ,
161- tokenPricesQuery . data ,
163+ "namada- shielded-assets " ,
164+ shieldedBalances . data ,
165+ tokenAddresses . data ,
166+ chainParameters . data ! . chainId ,
162167 ] ,
163168 ...queryDependentFn (
164169 async ( ) =>
165- shieldedBalanceQuery . data ?. map ( ( { address, amount } ) =>
166- formatTokenBalance (
167- address ,
168- amount ,
169- assetByAddressQuery . data ,
170- tokenPricesQuery . data
171- )
172- ) ?? [ ] ,
173- [ shieldedBalanceQuery , tokenPricesQuery , assetByAddressQuery ]
170+ await mapNamadaAddressesToAssets (
171+ shieldedBalances . data ! ,
172+ tokenAddresses . data ! ,
173+ chainParameters . data ! . chainId
174+ ) ,
175+ [ shieldedBalances , tokenAddresses , chainParameters ]
174176 ) ,
175177 } ;
176178} ) ;
177179
178- export const transparentTokensAtom = atomWithQuery < TokenBalance [ ] > ( ( get ) => {
179- const transparentBalanceQuery = get ( transparentBalanceAtom ) ;
180- const assetByAddressQuery = get ( assetByAddressAtom ) ;
181- const tokenPricesQuery = get ( tokenPricesAtom ) ;
180+ export const namadaTransparentAssetsAtom = atomWithQuery ( ( get ) => {
181+ const transparentBalances = get ( transparentBalanceAtom ) ;
182+ const tokenAddresses = get ( tokenAddressesAtom ) ;
183+ const chainParameters = get ( chainParametersAtom ) ;
182184
183185 return {
184186 queryKey : [
185- "transparent-tokens " ,
186- transparentBalanceQuery . data ,
187- assetByAddressQuery . data ,
188- tokenPricesQuery . data ,
187+ "namada- transparent-assets " ,
188+ transparentBalances . data ,
189+ tokenAddresses . data ,
190+ chainParameters . data ! . chainId ,
189191 ] ,
190192 ...queryDependentFn (
191193 async ( ) =>
192- transparentBalanceQuery . data ?. map ( ( { address, amount } ) =>
193- formatTokenBalance (
194- address ,
195- amount ,
196- assetByAddressQuery . data ,
197- tokenPricesQuery . data
198- )
199- ) ?? [ ] ,
200- [ transparentBalanceQuery , tokenPricesQuery , assetByAddressQuery ]
194+ await mapNamadaAddressesToAssets (
195+ transparentBalances . data ! ,
196+ tokenAddresses . data ! ,
197+ chainParameters . data ! . chainId
198+ ) ,
199+ [ transparentBalances , tokenAddresses , chainParameters ]
201200 ) ,
202201 } ;
203202} ) ;
204203
205- const formatTokenBalance = (
206- address : string ,
207- amount : BigNumber ,
208- assetsByAddress ?: Record < string , Asset > ,
209- tokenPrices ?: Record < string , BigNumber >
210- ) : TokenBalance => {
211- const asset = assetsByAddress ?. [ address ] ?? unknownAsset ;
212- const balance = toDisplayAmount ( asset , amount ) ;
204+ export const shieldedTokensAtom = atomWithQuery < TokenBalance [ ] > ( ( get ) => {
205+ const shieldedAssets = get ( namadaShieldedAssetsAtom ) ;
206+ const tokenPrices = get ( tokenPricesAtom ) ;
207+
208+ return {
209+ queryKey : [ "shielded-tokens" , shieldedAssets . data , tokenPrices . data ] ,
210+ ...queryDependentFn (
211+ ( ) =>
212+ Promise . resolve (
213+ mapNamadaAssetsToTokenBalances (
214+ shieldedAssets . data ! ,
215+ tokenPrices . data !
216+ )
217+ ) ,
218+ [ shieldedAssets , tokenPrices ]
219+ ) ,
220+ } ;
221+ } ) ;
213222
214- const tokenPrice = tokenPrices ?. [ address ] ;
215- const dollar = tokenPrice ? balance . multipliedBy ( tokenPrice ) : undefined ;
223+ export const transparentTokensAtom = atomWithQuery < TokenBalance [ ] > ( ( get ) => {
224+ const transparentAssets = get ( namadaTransparentAssetsAtom ) ;
225+ const tokenPrices = get ( tokenPricesAtom ) ;
216226
217227 return {
218- asset,
219- balance,
220- dollar,
228+ queryKey : [ "transparent-tokens" , transparentAssets . data , tokenPrices . data ] ,
229+ ...queryDependentFn (
230+ ( ) =>
231+ Promise . resolve (
232+ mapNamadaAssetsToTokenBalances (
233+ transparentAssets . data ! ,
234+ tokenPrices . data !
235+ )
236+ ) ,
237+ [ transparentAssets , tokenPrices ]
238+ ) ,
221239 } ;
222- } ;
240+ } ) ;
0 commit comments