Skip to content

Commit df5b7ea

Browse files
authored
Even better balance fetching (#3820)
2 parents 7059416 + f8cfd3c commit df5b7ea

File tree

2 files changed

+44
-33
lines changed

2 files changed

+44
-33
lines changed

app/src/lib/components/TransferFrom/components/Cube/faces/Assets.svelte

+4-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ $: filteredTokens =
3131
$hideZeroBalances && intents.baseTokens
3232
? intents.baseTokens.filter(
3333
token =>
34-
token.balance?.kind === "balance" &&
35-
token.balance.amount !== null &&
36-
token.balance.amount !== "0"
34+
token.balance?.kind === "loading" ||
35+
(token.balance?.kind === "balance" &&
36+
token.balance.amount !== null &&
37+
token.balance.amount !== "0")
3738
)
3839
: (intents.baseTokens ?? [])
3940
</script>

app/src/lib/stores/balances.ts

+40-30
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
103103
toPrefix: chain.addr_prefix
104104
})
105105
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+
)
106112

107113
balances.update(val => {
108114
denoms.forEach(denom => updateBalanceObject(chain.chain_id, denom, { kind: "loading" }, val))
@@ -156,14 +162,20 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
156162
})
157163
return
158164
}
165+
159166
const rpcUrl = chain.rpcs.find(rpc => rpc.type === "rpc")?.url
160167
if (!rpcUrl) return toast.error("no rpc url found")
161168
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)
163171
updateBalanceObject(
164172
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+
},
167179
val
168180
)
169181
})
@@ -179,33 +191,31 @@ export async function updateBalancesCosmos(chain: Chain, address: string) {
179191
if (publicClient.isErr()) return err(publicClient.error)
180192

181193
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
209218
})
219+
})
210220
)
211221
}

0 commit comments

Comments
 (0)