-
-
Notifications
You must be signed in to change notification settings - Fork 366
/
Copy pathuseBalance.ts
71 lines (61 loc) · 1.66 KB
/
useBalance.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { balanceOf } from '@kodadot1/sub-api'
import type { Address } from 'viem'
import { getBalance as accountBalance } from '@wagmi/core'
import type { Prefix } from '@kodadot1/static'
import { useIdentityStore } from '@/stores/identity'
export default function () {
const { urlPrefix } = usePrefix()
const identityStore = useIdentityStore()
const getBalance = (_token: string) => {
switch (urlPrefix.value) {
default:
return identityStore.getAuthBalance
}
}
const balance = computed(() => getBalance('KSM'))
const getSubBalance = async (address: string, prefix: Prefix) => {
const { apiInstanceByPrefix } = useApi()
try {
const api = await apiInstanceByPrefix(prefix)
return await balanceOf(api, address)
}
catch (e) {
return null
}
}
const getEvmBalance = async (address: string, prefix: Prefix) => {
if (!address) {
return null
}
try {
const evmBalance = await accountBalance(useNuxtApp().$wagmiConfig, {
address: address as Address,
blockTag: 'latest',
chainId: PREFIX_TO_CHAIN[prefix]?.id,
})
console.log('[BALANCE::EVM] Result', evmBalance)
return BigInt(evmBalance.value).toString()
}
catch (error) {
console.log('[BALANCE::EVM] Error', error)
return null
}
}
const fetchBalance = (
address: string, prefix?: Prefix,
) => {
if (!prefix) {
prefix = urlPrefix.value
}
return execByVm({
SUB: () => getSubBalance(address, prefix),
EVM: () => getEvmBalance(address, prefix),
}, { prefix })
}
return {
balance,
getBalance,
getEvmBalance,
fetchBalance,
}
}