@xyo-network/react-chain-provider 1.5.7 → 1.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.mjs +70 -10
- package/dist/browser/index.mjs.map +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/useAddressBalance.d.ts +11 -0
- package/dist/types/hooks/useAddressBalance.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAddressBalance.ts +61 -0
package/dist/browser/index.mjs
CHANGED
|
@@ -1,16 +1,75 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
|
-
// src/hooks/
|
|
4
|
+
// src/hooks/useAddressBalance.ts
|
|
5
5
|
import { usePromise } from "@xylabs/react-promise";
|
|
6
|
+
import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
|
|
7
|
+
import { ShiftedBigInt } from "@xyo-network/chain-wrappers";
|
|
8
|
+
import { useMemo, useState } from "react";
|
|
9
|
+
var useAddressBalance = /* @__PURE__ */ __name((address, viewer, networkId) => {
|
|
10
|
+
const [balancesResult, setBalancesResult] = useState();
|
|
11
|
+
const [loading, setLoading] = useState(false);
|
|
12
|
+
const [, balancesError] = usePromise(async () => {
|
|
13
|
+
if (isUndefined(viewer) || isUndefined(address)) return;
|
|
14
|
+
setLoading(true);
|
|
15
|
+
setBalancesResult(void 0);
|
|
16
|
+
const balance = await viewer.accountBalance(address);
|
|
17
|
+
setBalancesResult(balance);
|
|
18
|
+
setLoading(false);
|
|
19
|
+
}, [
|
|
20
|
+
address,
|
|
21
|
+
viewer,
|
|
22
|
+
networkId
|
|
23
|
+
]);
|
|
24
|
+
useMemo(() => {
|
|
25
|
+
if (balancesError) {
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
}, [
|
|
29
|
+
balancesError
|
|
30
|
+
]);
|
|
31
|
+
const shiftedBigInt = useMemo(() => {
|
|
32
|
+
if (typeof balancesResult !== "bigint") return;
|
|
33
|
+
return new ShiftedBigInt(balancesResult, {
|
|
34
|
+
places: 18,
|
|
35
|
+
maxDecimal: 18,
|
|
36
|
+
maxCharacters: 9,
|
|
37
|
+
minDecimals: 1,
|
|
38
|
+
locale: navigator.language
|
|
39
|
+
});
|
|
40
|
+
}, [
|
|
41
|
+
balancesResult
|
|
42
|
+
]);
|
|
43
|
+
const balanceIntlFriendly = useMemo(() => {
|
|
44
|
+
return shiftedBigInt?.toFullString();
|
|
45
|
+
}, [
|
|
46
|
+
shiftedBigInt
|
|
47
|
+
]);
|
|
48
|
+
const shortBalanceIntlFriendly = useMemo(() => {
|
|
49
|
+
return isUndefinedOrNull(balancesResult) ? void 0 : balancesResult < 1000000000000n && balancesResult > 0n ? "<0.00001" : shiftedBigInt?.toShortString();
|
|
50
|
+
}, [
|
|
51
|
+
shiftedBigInt
|
|
52
|
+
]);
|
|
53
|
+
return {
|
|
54
|
+
address,
|
|
55
|
+
balanceForAddress: balancesResult,
|
|
56
|
+
balanceIntlFriendly,
|
|
57
|
+
shortBalanceIntlFriendly,
|
|
58
|
+
error: balancesError,
|
|
59
|
+
loading
|
|
60
|
+
};
|
|
61
|
+
}, "useAddressBalance");
|
|
62
|
+
|
|
63
|
+
// src/hooks/useCurrentBlock.ts
|
|
64
|
+
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
6
65
|
|
|
7
66
|
// src/hooks/useViewer.ts
|
|
8
67
|
import { useChainNetwork } from "@xyo-network/react-chain-network";
|
|
9
68
|
import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer } from "@xyo-network/xl1-rpc";
|
|
10
|
-
import { useMemo } from "react";
|
|
69
|
+
import { useMemo as useMemo2 } from "react";
|
|
11
70
|
var useViewer = /* @__PURE__ */ __name((_provider) => {
|
|
12
71
|
const { activeNetwork } = useChainNetwork();
|
|
13
|
-
return
|
|
72
|
+
return useMemo2(() => {
|
|
14
73
|
if (!activeNetwork) {
|
|
15
74
|
return;
|
|
16
75
|
}
|
|
@@ -24,7 +83,7 @@ var useViewer = /* @__PURE__ */ __name((_provider) => {
|
|
|
24
83
|
// src/hooks/useCurrentBlock.ts
|
|
25
84
|
var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
|
|
26
85
|
const viewer = useViewer();
|
|
27
|
-
return
|
|
86
|
+
return usePromise2(async () => {
|
|
28
87
|
if (viewer && refresh > 0) {
|
|
29
88
|
const block = await viewer.currentBlock();
|
|
30
89
|
return block;
|
|
@@ -38,10 +97,10 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
|
|
|
38
97
|
// src/hooks/useNetwork.ts
|
|
39
98
|
import { useChainNetwork as useChainNetwork2 } from "@xyo-network/react-chain-network";
|
|
40
99
|
import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
|
|
41
|
-
import { useMemo as
|
|
100
|
+
import { useMemo as useMemo3 } from "react";
|
|
42
101
|
var useNetwork = /* @__PURE__ */ __name(() => {
|
|
43
102
|
const { activeNetwork } = useChainNetwork2();
|
|
44
|
-
return
|
|
103
|
+
return useMemo3(() => {
|
|
45
104
|
if (!activeNetwork) return;
|
|
46
105
|
return new MemoryXyoNetwork(activeNetwork.id);
|
|
47
106
|
}, [
|
|
@@ -52,10 +111,10 @@ var useNetwork = /* @__PURE__ */ __name(() => {
|
|
|
52
111
|
// src/hooks/useRunner.ts
|
|
53
112
|
import { useChainNetwork as useChainNetwork3 } from "@xyo-network/react-chain-network";
|
|
54
113
|
import { AllRpcSchemas as AllRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
|
|
55
|
-
import { useMemo as
|
|
114
|
+
import { useMemo as useMemo4 } from "react";
|
|
56
115
|
var useRunner = /* @__PURE__ */ __name((_provider) => {
|
|
57
116
|
const { activeNetwork } = useChainNetwork3();
|
|
58
|
-
return
|
|
117
|
+
return useMemo4(() => {
|
|
59
118
|
if (!activeNetwork) {
|
|
60
119
|
return;
|
|
61
120
|
}
|
|
@@ -68,13 +127,14 @@ var useRunner = /* @__PURE__ */ __name((_provider) => {
|
|
|
68
127
|
|
|
69
128
|
// src/hooks/useSigner.ts
|
|
70
129
|
import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
|
|
71
|
-
import { useMemo as
|
|
130
|
+
import { useMemo as useMemo5 } from "react";
|
|
72
131
|
var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
73
|
-
return
|
|
132
|
+
return useMemo5(() => account ? new MemoryXyoSigner(account) : void 0, [
|
|
74
133
|
account
|
|
75
134
|
]);
|
|
76
135
|
}, "useSigner");
|
|
77
136
|
export {
|
|
137
|
+
useAddressBalance,
|
|
78
138
|
useCurrentBlock,
|
|
79
139
|
useNetwork,
|
|
80
140
|
useRunner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.ts"],"sourcesContent":["import { usePromise } from '@xylabs/react-promise'\n\nimport { useViewer } from './useViewer.ts'\n\nexport const useCurrentBlock = (refresh = 1) => {\n const viewer = useViewer()\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useViewer = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) return\n return new MemoryXyoNetwork(activeNetwork.id)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunner = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [activeNetwork])\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":";;;;
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type {\n AttoXL1, NetworkId, XyoViewer,\n} from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // network ID to trigger a balance refresh\n networkId?: NetworkId,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\n }, [address, viewer, networkId])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\n\nimport { useViewer } from './useViewer.ts'\n\nexport const useCurrentBlock = (refresh = 1) => {\n const viewer = useViewer()\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useViewer = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) return\n return new MemoryXyoNetwork(activeNetwork.id)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunner = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [activeNetwork])\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":"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","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","networkId","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","usePromise","isUndefined","undefined","balance","accountBalance","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","error","usePromise","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","useViewer","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoViewer","useCurrentBlock","refresh","viewer","useViewer","usePromise","block","currentBlock","useChainNetwork","MemoryXyoNetwork","useMemo","useNetwork","activeNetwork","useChainNetwork","useMemo","MemoryXyoNetwork","id","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useRunner","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoRunner","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { AttoXL1, NetworkId, XyoViewer } from '@xyo-network/xl1-protocol';
|
|
3
|
+
export declare const useAddressBalance: (address?: Address, viewer?: XyoViewer, networkId?: NetworkId) => {
|
|
4
|
+
address: Lowercase<string> | undefined;
|
|
5
|
+
balanceForAddress: AttoXL1 | null | undefined;
|
|
6
|
+
balanceIntlFriendly: string | undefined;
|
|
7
|
+
shortBalanceIntlFriendly: string | undefined;
|
|
8
|
+
error: Error | undefined;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useAddressBalance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EACV,OAAO,EAAE,SAAS,EAAE,SAAS,EAC9B,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,YAAY,SAAS;;;;;;;CA6CtB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/react-chain-provider",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.9",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@xylabs/react-promise": "^6.3.4",
|
|
38
38
|
"@xyo-network/account-model": "^3.18.0",
|
|
39
|
-
"@xyo-network/react-chain-network": "^1.5.
|
|
39
|
+
"@xyo-network/react-chain-network": "^1.5.9",
|
|
40
40
|
"@xyo-network/xl1-protocol": "^1.4.14",
|
|
41
|
-
"@xyo-network/xl1-rpc": "^1.5.
|
|
41
|
+
"@xyo-network/xl1-rpc": "^1.5.9",
|
|
42
42
|
"react": "^19.1.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex'
|
|
2
|
+
import { usePromise } from '@xylabs/react-promise'
|
|
3
|
+
import { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'
|
|
4
|
+
import { ShiftedBigInt } from '@xyo-network/chain-wrappers'
|
|
5
|
+
import type {
|
|
6
|
+
AttoXL1, NetworkId, XyoViewer,
|
|
7
|
+
} from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { useMemo, useState } from 'react'
|
|
9
|
+
|
|
10
|
+
export const useAddressBalance = (
|
|
11
|
+
// address to get balance for
|
|
12
|
+
address?: Address,
|
|
13
|
+
// viewer to use for fetching balance
|
|
14
|
+
viewer?: XyoViewer,
|
|
15
|
+
// network ID to trigger a balance refresh
|
|
16
|
+
networkId?: NetworkId,
|
|
17
|
+
) => {
|
|
18
|
+
const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()
|
|
19
|
+
const [loading, setLoading] = useState(false)
|
|
20
|
+
|
|
21
|
+
const [, balancesError] = usePromise(async () => {
|
|
22
|
+
if (isUndefined(viewer) || isUndefined(address)) return
|
|
23
|
+
setLoading(true)
|
|
24
|
+
setBalancesResult(undefined)
|
|
25
|
+
const balance = await viewer.accountBalance(address)
|
|
26
|
+
setBalancesResult(balance as AttoXL1)
|
|
27
|
+
setLoading(false)
|
|
28
|
+
}, [address, viewer, networkId])
|
|
29
|
+
|
|
30
|
+
useMemo(() => {
|
|
31
|
+
if (balancesError) {
|
|
32
|
+
setLoading(false)
|
|
33
|
+
}
|
|
34
|
+
}, [balancesError])
|
|
35
|
+
|
|
36
|
+
const shiftedBigInt = useMemo(() => {
|
|
37
|
+
if (typeof balancesResult !== 'bigint') return
|
|
38
|
+
return new ShiftedBigInt(balancesResult, {
|
|
39
|
+
places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,
|
|
40
|
+
})
|
|
41
|
+
}, [balancesResult])
|
|
42
|
+
|
|
43
|
+
const balanceIntlFriendly = useMemo(() => {
|
|
44
|
+
return shiftedBigInt?.toFullString()
|
|
45
|
+
}, [shiftedBigInt])
|
|
46
|
+
|
|
47
|
+
const shortBalanceIntlFriendly = useMemo(() => {
|
|
48
|
+
return isUndefinedOrNull(balancesResult)
|
|
49
|
+
? undefined
|
|
50
|
+
: (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()
|
|
51
|
+
}, [shiftedBigInt])
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
address,
|
|
55
|
+
balanceForAddress: balancesResult,
|
|
56
|
+
balanceIntlFriendly,
|
|
57
|
+
shortBalanceIntlFriendly,
|
|
58
|
+
error: balancesError,
|
|
59
|
+
loading,
|
|
60
|
+
}
|
|
61
|
+
}
|