@@ -103,6 +103,12 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
103
103
toPrefix : chain . addr_prefix
104
104
} )
105
105
const denoms = chain . tokens . map ( token => token . denom . toLowerCase ( ) )
106
+ const bankDenoms = denoms . filter (
107
+ denom => ! isValidBech32ContractAddress ( fromHex ( denom as Address , "string" ) )
108
+ )
109
+ const cw20Denoms = denoms . filter ( denom =>
110
+ isValidBech32ContractAddress ( fromHex ( denom as Address , "string" ) )
111
+ )
106
112
107
113
balances . update ( val => {
108
114
denoms . forEach ( denom => updateBalanceObject ( chain . chain_id , denom , { kind : "loading" } , val ) )
@@ -156,14 +162,20 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
156
162
} )
157
163
return
158
164
}
165
+
159
166
const rpcUrl = chain . rpcs . find ( rpc => rpc . type === "rpc" ) ?. url
160
167
if ( ! rpcUrl ) return toast . error ( "no rpc url found" )
161
168
balances . update ( val => {
162
- response . value . balances . forEach ( ( { denom, amount } ) => {
169
+ bankDenoms . forEach ( bankDenom => {
170
+ const bankBalance = response . value . balances . find ( b => toHex ( b . denom ) === bankDenom )
163
171
updateBalanceObject (
164
172
chain . chain_id ,
165
- toHex ( denom ) ,
166
- { kind : "balance" , amount, timestamp : Date . now ( ) } ,
173
+ bankDenom ,
174
+ {
175
+ kind : "balance" ,
176
+ amount : bankBalance ?. amount ? bankBalance . amount : "0" ,
177
+ timestamp : Date . now ( )
178
+ } ,
167
179
val
168
180
)
169
181
} )
@@ -179,33 +191,31 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
179
191
if ( publicClient . isErr ( ) ) return err ( publicClient . error )
180
192
181
193
const cw20Balances = await Promise . all (
182
- denoms
183
- . filter ( denom => isValidBech32ContractAddress ( fromHex ( denom as Address , "string" ) ) )
184
- . map ( async denom => {
185
- const balance = await ResultAsync . fromPromise (
186
- publicClient . value . queryContractSmart ( fromHex ( denom as Address , "string" ) , {
187
- balance : { address }
188
- } ) ,
189
- error => {
190
- return new Error ( `failed to query balance for contract ${ denom } ` , { cause : error } )
191
- }
192
- ) . andThen ( balance => ok ( balance . balance ) )
193
-
194
- balances . update ( val => {
195
- updateBalanceObject (
196
- chain . chain_id ,
197
- denom ,
198
- balance . isErr ( )
199
- ? {
200
- kind : "error" ,
201
- error : `${ balance . error . message } , cause: ${ balance . error . cause } ` ,
202
- timestamp : Date . now ( )
203
- }
204
- : { kind : "balance" , amount : balance . value , timestamp : Date . now ( ) } ,
205
- val
206
- )
207
- return val
208
- } )
194
+ cw20Denoms . map ( async denom => {
195
+ const balance = await ResultAsync . fromPromise (
196
+ publicClient . value . queryContractSmart ( fromHex ( denom as Address , "string" ) , {
197
+ balance : { address : addr }
198
+ } ) ,
199
+ error => {
200
+ return new Error ( `failed to query balance for contract ${ denom } ` , { cause : error } )
201
+ }
202
+ ) . andThen ( balance => ok ( balance . balance ) )
203
+
204
+ balances . update ( val => {
205
+ updateBalanceObject (
206
+ chain . chain_id ,
207
+ denom ,
208
+ balance . isErr ( )
209
+ ? {
210
+ kind : "error" ,
211
+ error : `${ balance . error . message } , cause: ${ balance . error . cause } ` ,
212
+ timestamp : Date . now ( )
213
+ }
214
+ : { kind : "balance" , amount : balance . value , timestamp : Date . now ( ) } ,
215
+ val
216
+ )
217
+ return val
209
218
} )
219
+ } )
210
220
)
211
221
}
0 commit comments