@mezo-org/passport 0.7.1-dev.1 → 0.7.2-dev.1
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/src/api/portal.d.ts +1 -1
- package/dist/src/api/portal.d.ts.map +1 -1
- package/dist/src/hooks/useAssetsConversionRates.d.ts +8 -7
- package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -1
- package/dist/src/hooks/useAssetsConversionRates.js +13 -11
- package/dist/src/hooks/useAssetsConversionRates.js.map +1 -1
- package/dist/src/hooks/useBorrowData.d.ts +14 -12
- package/dist/src/hooks/useBorrowData.d.ts.map +1 -1
- package/dist/src/hooks/useBorrowData.js +45 -43
- package/dist/src/hooks/useBorrowData.js.map +1 -1
- package/dist/src/hooks/useTokensBalances.d.ts.map +1 -1
- package/dist/src/hooks/useTokensBalances.js +37 -37
- package/dist/src/hooks/useTokensBalances.js.map +1 -1
- package/dist/src/hooks/useValidateMezoId.d.ts.map +1 -1
- package/dist/src/hooks/useValidateMezoId.js +7 -5
- package/dist/src/hooks/useValidateMezoId.js.map +1 -1
- package/package.json +1 -1
- package/src/api/portal.ts +1 -1
- package/src/hooks/useAssetsConversionRates.ts +31 -16
- package/src/hooks/useBorrowData.ts +67 -49
- package/src/hooks/useTokensBalances.ts +70 -49
- package/src/hooks/useValidateMezoId.ts +13 -6
package/dist/src/api/portal.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/api/portal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,
|
|
1
|
+
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/api/portal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,2BAA2B;;;CAGvC,CAAA;AAED,qBAAa,eAAgB,SAAQ,SAAS;gBAE1C,WAAW,GAAE,MAAM,OAAO,2BAAuC,EACjE,MAAM,CAAC,EAAE,MAAM;IAQX,mBAAmB;IAQnB,aAAa,CAAC,OAAO,EAAE,MAAM;CAUpC"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export type AssetConversion = {
|
|
2
|
+
rates: {
|
|
3
|
+
mT: bigint;
|
|
4
|
+
BTC: bigint;
|
|
5
|
+
};
|
|
6
|
+
decimals: number;
|
|
7
|
+
};
|
|
1
8
|
export declare const CONVERSION_RATE_DECIMALS = 18;
|
|
2
9
|
export declare const QUERY_KEY = "passport.assetsConversionRates";
|
|
3
10
|
/**
|
|
@@ -8,11 +15,5 @@ export declare const QUERY_KEY = "passport.assetsConversionRates";
|
|
|
8
15
|
* @returns {}.isPending - Whether the request is pending.
|
|
9
16
|
* @returns {}.isError - Whether there was an error fetching the price.
|
|
10
17
|
*/
|
|
11
|
-
export declare function useAssetsConversionRates(): import("@tanstack/react-query").UseQueryResult<
|
|
12
|
-
rates: {
|
|
13
|
-
mT: bigint;
|
|
14
|
-
BTC: bigint;
|
|
15
|
-
};
|
|
16
|
-
decimals: number;
|
|
17
|
-
}, Error>;
|
|
18
|
+
export declare function useAssetsConversionRates(): import("@tanstack/react-query").UseQueryResult<AssetConversion, Error>;
|
|
18
19
|
//# sourceMappingURL=useAssetsConversionRates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAssetsConversionRates.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAssetsConversionRates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAssetsConversionRates.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAssetsConversionRates.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAK1C,eAAO,MAAM,SAAS,mCAAmC,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,2EA+CvC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
1
2
|
import { useQuery } from "@tanstack/react-query";
|
|
2
3
|
import { parseUnits } from "viem";
|
|
3
4
|
import { ONE_SECOND_MS } from "../utils/time";
|
|
@@ -19,6 +20,17 @@ export function useAssetsConversionRates() {
|
|
|
19
20
|
const portalApiClient = usePortalApiClient();
|
|
20
21
|
const { data: collateralPriceData } = useCollateralPrice();
|
|
21
22
|
const collateralPrice = collateralPriceData?.toString();
|
|
23
|
+
const select = useCallback(([portalStatistics, btcPrice]) => {
|
|
24
|
+
const tTokenConversionRate = portalStatistics.tTokenPrice;
|
|
25
|
+
const tPrice = parseUnits(tTokenConversionRate.toString(), CONVERSION_RATE_DECIMALS);
|
|
26
|
+
return {
|
|
27
|
+
rates: {
|
|
28
|
+
mT: tPrice,
|
|
29
|
+
BTC: btcPrice,
|
|
30
|
+
},
|
|
31
|
+
decimals: CONVERSION_RATE_DECIMALS,
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
22
34
|
return useQuery({
|
|
23
35
|
queryKey: [QUERY_KEY, collateralPrice],
|
|
24
36
|
queryFn: () => {
|
|
@@ -33,17 +45,7 @@ export function useAssetsConversionRates() {
|
|
|
33
45
|
]);
|
|
34
46
|
},
|
|
35
47
|
enabled: !!collateralPrice,
|
|
36
|
-
select
|
|
37
|
-
const tTokenConversionRate = portalStatistics.tTokenPrice;
|
|
38
|
-
const tPrice = parseUnits(tTokenConversionRate.toString(), CONVERSION_RATE_DECIMALS);
|
|
39
|
-
return {
|
|
40
|
-
rates: {
|
|
41
|
-
mT: tPrice,
|
|
42
|
-
BTC: btcPrice,
|
|
43
|
-
},
|
|
44
|
-
decimals: CONVERSION_RATE_DECIMALS,
|
|
45
|
-
};
|
|
46
|
-
},
|
|
48
|
+
select,
|
|
47
49
|
refetchInterval: MAX_PRICE_DELAY,
|
|
48
50
|
});
|
|
49
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAssetsConversionRates.js","sourceRoot":"","sources":["../../../src/hooks/useAssetsConversionRates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"useAssetsConversionRates.js","sourceRoot":"","sources":["../../../src/hooks/useAssetsConversionRates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAQzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAE1C,0EAA0E;AAC1E,MAAM,eAAe,GAAG,EAAE,GAAG,aAAa,CAAA;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,gCAAgC,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAC5C,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAE1D,MAAM,eAAe,GAAG,mBAAmB,EAAE,QAAQ,EAAE,CAAA;IAEvD,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAG3B,EAAmB,EAAE;QACpB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAA;QAEzD,MAAM,MAAM,GAAG,UAAU,CACvB,oBAAoB,CAAC,QAAQ,EAAE,EAC/B,wBAAwB,CACzB,CAAA;QAED,OAAO;YACL,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;gBACV,GAAG,EAAE,QAAQ;aACd;YACD,QAAQ,EAAE,wBAAwB;SACnC,CAAA;IACH,CAAC,EACD,EAAE,CACH,CAAA;IAED,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACvD,CAAC;YAED,OAAO,OAAO,CAAC,GAAG,CAAC;gBACjB,eAAe,CAAC,mBAAmB,EAAE;gBACrC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACtB,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBAC9B,CAAC,CAAwC;aAC1C,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,eAAe;QAC1B,MAAM;QACN,eAAe,EAAE,eAAe;KACjC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { UseReadContractsReturnType } from "wagmi";
|
|
1
2
|
/**
|
|
2
3
|
* Query hook for getting borrow data. Returns collateral and trove debt for the
|
|
3
4
|
* connected account, based on it's evm address.
|
|
4
5
|
* @param queryOptions Query options passed to the underlying `useQuery` hook.
|
|
5
6
|
*/
|
|
6
|
-
export declare function useBorrowData(queryOptions?: {}):
|
|
7
|
-
|
|
7
|
+
export declare function useBorrowData(queryOptions?: {}): UseReadContractsReturnType<({
|
|
8
|
+
abi: readonly [{
|
|
8
9
|
readonly inputs: readonly [{
|
|
9
10
|
readonly internalType: "address";
|
|
10
11
|
readonly name: "_borrower";
|
|
@@ -39,12 +40,12 @@ export declare function useBorrowData(queryOptions?: {}): import("wagmi").UseRea
|
|
|
39
40
|
readonly stateMutability: "view";
|
|
40
41
|
readonly type: "function";
|
|
41
42
|
}];
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
43
|
+
address: `0x${string}`;
|
|
44
|
+
functionName: string;
|
|
45
|
+
args: `0x${string}`[];
|
|
46
|
+
chainId: number;
|
|
47
|
+
} | {
|
|
48
|
+
abi: readonly [{
|
|
48
49
|
readonly inputs: readonly [];
|
|
49
50
|
readonly name: "MUSD_GAS_COMPENSATION";
|
|
50
51
|
readonly outputs: readonly [{
|
|
@@ -55,10 +56,11 @@ export declare function useBorrowData(queryOptions?: {}): import("wagmi").UseRea
|
|
|
55
56
|
readonly stateMutability: "view";
|
|
56
57
|
readonly type: "function";
|
|
57
58
|
}];
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
address: `0x${string}`;
|
|
60
|
+
functionName: string;
|
|
61
|
+
chainId: number;
|
|
62
|
+
args?: undefined;
|
|
63
|
+
})[], true, {
|
|
62
64
|
collateral: {
|
|
63
65
|
value: bigint;
|
|
64
66
|
decimals: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBorrowData.d.ts","sourceRoot":"","sources":["../../../src/hooks/useBorrowData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBorrowData.d.ts","sourceRoot":"","sources":["../../../src/hooks/useBorrowData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,0BAA0B,EAAE,MAAM,OAAO,CAAA;AAuFpE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgH9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB;;EAatC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB;;EAajC"}
|
|
@@ -99,53 +99,55 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
99
99
|
};
|
|
100
100
|
}, [environment]);
|
|
101
101
|
const chainId = CHAIN_ID[environment];
|
|
102
|
+
const contracts = useMemo(() => [
|
|
103
|
+
{
|
|
104
|
+
abi: TROVE_MANAGER_ABI,
|
|
105
|
+
address: contractAddress.troveManager,
|
|
106
|
+
functionName: "getEntireDebtAndColl",
|
|
107
|
+
args: walletAccount.accountAddress
|
|
108
|
+
? [walletAccount.accountAddress]
|
|
109
|
+
: ["0x"],
|
|
110
|
+
chainId,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
abi: BORROWER_OPERATIONS_ABI,
|
|
114
|
+
address: contractAddress.borrowerOperations,
|
|
115
|
+
functionName: "MUSD_GAS_COMPENSATION",
|
|
116
|
+
chainId,
|
|
117
|
+
},
|
|
118
|
+
], [chainId, contractAddress, walletAccount.accountAddress]);
|
|
119
|
+
const selectBorrowData = useCallback((data) => {
|
|
120
|
+
if (!data || data.some((item) => !item.result))
|
|
121
|
+
throw new Error("No borrow data available");
|
|
122
|
+
if (!collateralPrice)
|
|
123
|
+
throw new Error("Collateral price not available");
|
|
124
|
+
const [rawCollateral, principal, interest] = data[0].result;
|
|
125
|
+
const gasCompensation = data[1].result;
|
|
126
|
+
const btcDetails = getAsset("BTC");
|
|
127
|
+
const collateral = {
|
|
128
|
+
value: rawCollateral,
|
|
129
|
+
decimals: btcDetails.decimals,
|
|
130
|
+
symbol: btcDetails.symbol,
|
|
131
|
+
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
132
|
+
usd: convertToUsd(rawCollateral, DEBT_AND_COLL_PRECISION, collateralPrice, DEBT_AND_COLL_PRECISION),
|
|
133
|
+
};
|
|
134
|
+
const debtInUsdValue = bigIntMax(normalizePrecision(principal + interest - gasCompensation, DEBT_AND_COLL_PRECISION), 0n);
|
|
135
|
+
const formattedDebtInUsd = formatUnits(debtInUsdValue, DEBT_AND_COLL_PRECISION);
|
|
136
|
+
const debtInUsd = {
|
|
137
|
+
value: debtInUsdValue,
|
|
138
|
+
formatted: formattedDebtInUsd,
|
|
139
|
+
};
|
|
140
|
+
return {
|
|
141
|
+
collateral,
|
|
142
|
+
debtInUsd,
|
|
143
|
+
};
|
|
144
|
+
}, [collateralPrice]);
|
|
102
145
|
return useReadContracts({
|
|
103
|
-
contracts
|
|
104
|
-
{
|
|
105
|
-
abi: TROVE_MANAGER_ABI,
|
|
106
|
-
address: contractAddress.troveManager,
|
|
107
|
-
functionName: "getEntireDebtAndColl",
|
|
108
|
-
args: walletAccount.accountAddress
|
|
109
|
-
? [walletAccount.accountAddress]
|
|
110
|
-
: ["0x"],
|
|
111
|
-
chainId,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
abi: BORROWER_OPERATIONS_ABI,
|
|
115
|
-
address: contractAddress.borrowerOperations,
|
|
116
|
-
functionName: "MUSD_GAS_COMPENSATION",
|
|
117
|
-
chainId,
|
|
118
|
-
},
|
|
119
|
-
],
|
|
146
|
+
contracts,
|
|
120
147
|
query: {
|
|
121
148
|
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
122
149
|
retry: 1,
|
|
123
|
-
select:
|
|
124
|
-
if (!data || data.some((item) => !item.result))
|
|
125
|
-
throw new Error("No borrow data available");
|
|
126
|
-
if (!collateralPrice)
|
|
127
|
-
throw new Error("Collateral price not available");
|
|
128
|
-
const [rawCollateral, principal, interest] = data[0].result;
|
|
129
|
-
const gasCompensation = data[1].result;
|
|
130
|
-
const btcDetails = getAsset("BTC");
|
|
131
|
-
const collateral = {
|
|
132
|
-
value: rawCollateral,
|
|
133
|
-
decimals: btcDetails.decimals,
|
|
134
|
-
symbol: btcDetails.symbol,
|
|
135
|
-
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
136
|
-
usd: convertToUsd(rawCollateral, DEBT_AND_COLL_PRECISION, collateralPrice, DEBT_AND_COLL_PRECISION),
|
|
137
|
-
};
|
|
138
|
-
const debtInUsdValue = bigIntMax(normalizePrecision(principal + interest - gasCompensation, DEBT_AND_COLL_PRECISION), 0n);
|
|
139
|
-
const formattedDebtInUsd = formatUnits(debtInUsdValue, DEBT_AND_COLL_PRECISION);
|
|
140
|
-
const debtInUsd = {
|
|
141
|
-
value: debtInUsdValue,
|
|
142
|
-
formatted: formattedDebtInUsd,
|
|
143
|
-
};
|
|
144
|
-
return {
|
|
145
|
-
collateral,
|
|
146
|
-
debtInUsd,
|
|
147
|
-
};
|
|
148
|
-
},
|
|
150
|
+
select: selectBorrowData,
|
|
149
151
|
staleTime: borrowDataRefetchInterval,
|
|
150
152
|
refetchInterval: borrowDataRefetchInterval,
|
|
151
153
|
...queryOptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBorrowData.js","sourceRoot":"","sources":["../../../src/hooks/useBorrowData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"useBorrowData.js","sourceRoot":"","sources":["../../../src/hooks/useBorrowData.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokensBalances.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokensBalances.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAEL,cAAc,EAEf,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"useTokensBalances.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokensBalances.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAEL,cAAc,EAEf,MAAM,kBAAkB,CAAA;AAsBzB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;EAoBH,CAAA;AAgBxB,KAAK,iCAAiC,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI;IACnE,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,YAAY,CAAC,EAAE,IAAI,CACjB,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAChD,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAC9C,CAAA;CACF,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF,CAAA;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,EAAE,EAC1D,OAAO,GAAE,iCAAiC,CAAC,CAAC,CAAM,kGAiJnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B;;EAY1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB;;EAWrC"}
|
|
@@ -8,7 +8,7 @@ import useWalletAccount from "./useWalletAccount";
|
|
|
8
8
|
import { getAsset, isBitcoinLikeCryptoAsset, isTTokenCryptoAsset, } from "../utils/assets";
|
|
9
9
|
import { convertToUsd } from "../utils/currency";
|
|
10
10
|
import { CHAIN_ID, mezoMainnet, mezoTestnet } from "../constants";
|
|
11
|
-
import { useAssetsConversionRates } from "./useAssetsConversionRates";
|
|
11
|
+
import { useAssetsConversionRates, } from "./useAssetsConversionRates";
|
|
12
12
|
import { normalizePrecision } from "../utils/numbers";
|
|
13
13
|
import { usePassportContext } from "./usePassportContext";
|
|
14
14
|
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
@@ -75,6 +75,41 @@ export function useTokensBalances(options = {}) {
|
|
|
75
75
|
const { data: conversionRatesData } = useAssetsConversionRates();
|
|
76
76
|
const { environment = "mainnet" } = usePassportContext();
|
|
77
77
|
const chainId = environment === "testnet" ? mezoTestnet.id : mezoMainnet.id;
|
|
78
|
+
const selectBalances = useCallback(([btcBalance, tokensBalancesData, conversion]) => {
|
|
79
|
+
const parsedBtcBalance = {
|
|
80
|
+
...btcBalance,
|
|
81
|
+
symbol: getAsset("BTC").symbol,
|
|
82
|
+
usd: convertToUsd(btcBalance.value, btcBalance.decimals, conversion.rates.BTC, conversion.decimals),
|
|
83
|
+
};
|
|
84
|
+
const parsedTokensBalances = tokensBalancesData.map((item, index) => {
|
|
85
|
+
const token = tokens[index];
|
|
86
|
+
const { decimals, symbol } = getAsset(token);
|
|
87
|
+
if (item.status === "failure") {
|
|
88
|
+
throw new Error(`Failed to fetch balance of ${token} for ${walletAccount?.accountAddress}.`);
|
|
89
|
+
}
|
|
90
|
+
const tokenBalance = {
|
|
91
|
+
value: item.result,
|
|
92
|
+
decimals,
|
|
93
|
+
symbol,
|
|
94
|
+
formatted: formatUnits(item.result, decimals),
|
|
95
|
+
};
|
|
96
|
+
let usd = {
|
|
97
|
+
value: normalizePrecision(tokenBalance.value, tokenBalance.decimals, conversion.decimals),
|
|
98
|
+
formatted: formatUnits(tokenBalance.value, tokenBalance.decimals),
|
|
99
|
+
};
|
|
100
|
+
if (isBitcoinLikeCryptoAsset(tokenBalance.symbol)) {
|
|
101
|
+
usd = convertToUsd(tokenBalance.value, tokenBalance.decimals, conversion.rates.BTC, conversion.decimals);
|
|
102
|
+
}
|
|
103
|
+
if (isTTokenCryptoAsset(tokenBalance.symbol)) {
|
|
104
|
+
usd = convertToUsd(tokenBalance.value, tokenBalance.decimals, conversion.rates.mT, conversion.decimals);
|
|
105
|
+
}
|
|
106
|
+
return { ...tokenBalance, usd };
|
|
107
|
+
});
|
|
108
|
+
return [parsedBtcBalance, ...parsedTokensBalances].reduce((acc, token) => ({
|
|
109
|
+
...acc,
|
|
110
|
+
[token.symbol]: token,
|
|
111
|
+
}), {});
|
|
112
|
+
}, [tokens, walletAccount.accountAddress]);
|
|
78
113
|
return useQuery({
|
|
79
114
|
queryKey: [
|
|
80
115
|
TOKEN_BALANCES_QUERY_KEY,
|
|
@@ -115,42 +150,7 @@ export function useTokensBalances(options = {}) {
|
|
|
115
150
|
}),
|
|
116
151
|
]);
|
|
117
152
|
},
|
|
118
|
-
select:
|
|
119
|
-
const [btcBalance, tokensBalancesData, conversion] = data;
|
|
120
|
-
const parsedBtcBalance = {
|
|
121
|
-
...btcBalance,
|
|
122
|
-
symbol: getAsset("BTC").symbol,
|
|
123
|
-
usd: convertToUsd(btcBalance.value, btcBalance.decimals, conversion.rates.BTC, conversion.decimals),
|
|
124
|
-
};
|
|
125
|
-
const parsedTokensBalances = tokensBalancesData.map((item, index) => {
|
|
126
|
-
const token = tokens[index];
|
|
127
|
-
const { decimals, symbol } = getAsset(token);
|
|
128
|
-
if (item.status === "failure") {
|
|
129
|
-
throw new Error(`Failed to fetch balance of ${token} for ${walletAccount?.accountAddress}.`);
|
|
130
|
-
}
|
|
131
|
-
const tokenBalance = {
|
|
132
|
-
value: item.result,
|
|
133
|
-
decimals,
|
|
134
|
-
symbol,
|
|
135
|
-
formatted: formatUnits(item.result, decimals),
|
|
136
|
-
};
|
|
137
|
-
let usd = {
|
|
138
|
-
value: normalizePrecision(tokenBalance.value, tokenBalance.decimals, conversion.decimals),
|
|
139
|
-
formatted: formatUnits(tokenBalance.value, tokenBalance.decimals),
|
|
140
|
-
};
|
|
141
|
-
if (isBitcoinLikeCryptoAsset(tokenBalance.symbol)) {
|
|
142
|
-
usd = convertToUsd(tokenBalance.value, tokenBalance.decimals, conversion.rates.BTC, conversion.decimals);
|
|
143
|
-
}
|
|
144
|
-
if (isTTokenCryptoAsset(tokenBalance.symbol)) {
|
|
145
|
-
usd = convertToUsd(tokenBalance.value, tokenBalance.decimals, conversion.rates.mT, conversion.decimals);
|
|
146
|
-
}
|
|
147
|
-
return { ...tokenBalance, usd };
|
|
148
|
-
});
|
|
149
|
-
return [parsedBtcBalance, ...parsedTokensBalances].reduce((acc, token) => ({
|
|
150
|
-
...acc,
|
|
151
|
-
[token.symbol]: token,
|
|
152
|
-
}), {});
|
|
153
|
-
},
|
|
153
|
+
select: selectBalances,
|
|
154
154
|
...restQueryOptions,
|
|
155
155
|
});
|
|
156
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokensBalances.js","sourceRoot":"","sources":["../../../src/hooks/useTokensBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAO,WAAW,EAAE,MAAM,MAAM,CAAA;AACvC,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,cAAc,GAEf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"useTokensBalances.js","sourceRoot":"","sources":["../../../src/hooks/useTokensBalances.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useValidateMezoId.d.ts","sourceRoot":"","sources":["../../../src/hooks/useValidateMezoId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useValidateMezoId.d.ts","sourceRoot":"","sources":["../../../src/hooks/useValidateMezoId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAkB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAIxD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GA0BxC,cAAc,CAAC;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAC,CACH"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
1
2
|
import { validateMezoId } from "../utils/mezoId";
|
|
2
3
|
import { useGetAccountByMezoId } from "./useGetAccountByMezoId";
|
|
3
4
|
export function useValidateMezoId(mezoId) {
|
|
4
5
|
const validationErrors = validateMezoId(mezoId);
|
|
6
|
+
const select = useCallback((data) => {
|
|
7
|
+
const isValid = validationErrors.length === 0;
|
|
8
|
+
const isAvailable = isValid ? !data : false;
|
|
9
|
+
return { isValid, isAvailable, errors: validationErrors };
|
|
10
|
+
}, [validationErrors]);
|
|
5
11
|
return useGetAccountByMezoId(mezoId, {
|
|
6
12
|
placeholderData: {
|
|
7
13
|
// @ts-expect-error TODO: Couldn't fix type for placeholderData which for
|
|
@@ -14,11 +20,7 @@ export function useValidateMezoId(mezoId) {
|
|
|
14
20
|
enabled: validationErrors.length === 0,
|
|
15
21
|
// @ts-expect-error TODO: Couldn't fix type for select which for some reason
|
|
16
22
|
// should return the same data as the data returned in queryFn.
|
|
17
|
-
select
|
|
18
|
-
const isValid = validationErrors.length === 0;
|
|
19
|
-
const isAvailable = isValid ? !data : false;
|
|
20
|
-
return { isValid, isAvailable, errors: validationErrors };
|
|
21
|
-
},
|
|
23
|
+
select,
|
|
22
24
|
});
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=useValidateMezoId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useValidateMezoId.js","sourceRoot":"","sources":["../../../src/hooks/useValidateMezoId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useValidateMezoId.js","sourceRoot":"","sources":["../../../src/hooks/useValidateMezoId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAU,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAE/C,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAgD,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAA;QAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;QAE3C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC3D,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAA;IAED,OAAO,qBAAqB,CAAC,MAAM,EAAE;QACnC,eAAe,EAAE;YACf,yEAAyE;YACzE,kEAAkE;YAClE,WAAW;YACX,OAAO,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;YACtC,WAAW,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC1C,MAAM,EAAE,gBAAgB;SACzB;QACD,OAAO,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACtC,4EAA4E;QAC5E,+DAA+D;QAC/D,MAAM;KACP,CAIC,CAAA;AACJ,CAAC"}
|
package/package.json
CHANGED
package/src/api/portal.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
1
2
|
import { useQuery } from "@tanstack/react-query"
|
|
2
3
|
import { parseUnits } from "viem"
|
|
3
4
|
import { ONE_SECOND_MS } from "../utils/time"
|
|
4
5
|
import { usePortalApiClient } from "./usePortalApiClient"
|
|
5
6
|
import { useCollateralPrice } from "./useCollateralPrice"
|
|
7
|
+
import { PortalStatistics } from "../api"
|
|
8
|
+
|
|
9
|
+
export type AssetConversion = {
|
|
10
|
+
rates: { mT: bigint; BTC: bigint }
|
|
11
|
+
decimals: number
|
|
12
|
+
}
|
|
6
13
|
|
|
7
14
|
export const CONVERSION_RATE_DECIMALS = 18
|
|
8
15
|
|
|
@@ -25,22 +32,11 @@ export function useAssetsConversionRates() {
|
|
|
25
32
|
|
|
26
33
|
const collateralPrice = collateralPriceData?.toString()
|
|
27
34
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return Promise.all([
|
|
36
|
-
portalApiClient.getPortalStatistics(),
|
|
37
|
-
new Promise((resolve) => {
|
|
38
|
-
resolve(collateralPriceData)
|
|
39
|
-
}) as Promise<typeof collateralPriceData>,
|
|
40
|
-
])
|
|
41
|
-
},
|
|
42
|
-
enabled: !!collateralPrice,
|
|
43
|
-
select: ([portalStatistics, btcPrice]) => {
|
|
35
|
+
const select = useCallback(
|
|
36
|
+
([portalStatistics, btcPrice]: [
|
|
37
|
+
PortalStatistics,
|
|
38
|
+
bigint,
|
|
39
|
+
]): AssetConversion => {
|
|
44
40
|
const tTokenConversionRate = portalStatistics.tTokenPrice
|
|
45
41
|
|
|
46
42
|
const tPrice = parseUnits(
|
|
@@ -56,6 +52,25 @@ export function useAssetsConversionRates() {
|
|
|
56
52
|
decimals: CONVERSION_RATE_DECIMALS,
|
|
57
53
|
}
|
|
58
54
|
},
|
|
55
|
+
[],
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return useQuery({
|
|
59
|
+
queryKey: [QUERY_KEY, collateralPrice],
|
|
60
|
+
queryFn: () => {
|
|
61
|
+
if (!collateralPriceData) {
|
|
62
|
+
throw new Error("Collateral price is not available.")
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return Promise.all([
|
|
66
|
+
portalApiClient.getPortalStatistics(),
|
|
67
|
+
new Promise((resolve) => {
|
|
68
|
+
resolve(collateralPriceData)
|
|
69
|
+
}) as Promise<typeof collateralPriceData>,
|
|
70
|
+
])
|
|
71
|
+
},
|
|
72
|
+
enabled: !!collateralPrice,
|
|
73
|
+
select,
|
|
59
74
|
refetchInterval: MAX_PRICE_DELAY,
|
|
60
75
|
})
|
|
61
76
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useReadContracts } from "wagmi"
|
|
1
|
+
import { useReadContracts, UseReadContractsReturnType } from "wagmi"
|
|
2
2
|
import { useCallback, useMemo } from "react"
|
|
3
3
|
import { useQueryClient } from "@tanstack/react-query"
|
|
4
4
|
import { formatUnits } from "viem"
|
|
@@ -112,8 +112,8 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
112
112
|
|
|
113
113
|
const chainId = CHAIN_ID[environment]
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
const contracts = useMemo(
|
|
116
|
+
() => [
|
|
117
117
|
{
|
|
118
118
|
abi: TROVE_MANAGER_ABI,
|
|
119
119
|
address: contractAddress.troveManager,
|
|
@@ -130,55 +130,73 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
130
130
|
chainId,
|
|
131
131
|
},
|
|
132
132
|
],
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
)
|
|
167
|
-
|
|
168
|
-
|
|
133
|
+
[chainId, contractAddress, walletAccount.accountAddress],
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
const selectBorrowData = useCallback(
|
|
137
|
+
(data: UseReadContractsReturnType<typeof contracts>["data"]) => {
|
|
138
|
+
if (!data || data.some((item) => !item.result))
|
|
139
|
+
throw new Error("No borrow data available")
|
|
140
|
+
|
|
141
|
+
if (!collateralPrice) throw new Error("Collateral price not available")
|
|
142
|
+
|
|
143
|
+
const [rawCollateral, principal, interest] = data[0].result! as readonly [
|
|
144
|
+
bigint,
|
|
145
|
+
bigint,
|
|
146
|
+
bigint,
|
|
147
|
+
bigint,
|
|
148
|
+
bigint,
|
|
149
|
+
bigint,
|
|
150
|
+
]
|
|
151
|
+
|
|
152
|
+
const gasCompensation = data[1].result! as bigint
|
|
153
|
+
|
|
154
|
+
const btcDetails = getAsset("BTC")
|
|
155
|
+
|
|
156
|
+
const collateral = {
|
|
157
|
+
value: rawCollateral,
|
|
158
|
+
decimals: btcDetails.decimals,
|
|
159
|
+
symbol: btcDetails.symbol,
|
|
160
|
+
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
161
|
+
usd: convertToUsd(
|
|
162
|
+
rawCollateral,
|
|
163
|
+
DEBT_AND_COLL_PRECISION,
|
|
164
|
+
collateralPrice,
|
|
165
|
+
DEBT_AND_COLL_PRECISION,
|
|
166
|
+
),
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const debtInUsdValue = bigIntMax(
|
|
170
|
+
normalizePrecision(
|
|
171
|
+
principal + interest - gasCompensation,
|
|
169
172
|
DEBT_AND_COLL_PRECISION,
|
|
170
|
-
)
|
|
173
|
+
),
|
|
174
|
+
0n, // Ensure that debt is not negative
|
|
175
|
+
)
|
|
176
|
+
const formattedDebtInUsd = formatUnits(
|
|
177
|
+
debtInUsdValue,
|
|
178
|
+
DEBT_AND_COLL_PRECISION,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
const debtInUsd = {
|
|
182
|
+
value: debtInUsdValue,
|
|
183
|
+
formatted: formattedDebtInUsd,
|
|
184
|
+
}
|
|
171
185
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
186
|
+
return {
|
|
187
|
+
collateral,
|
|
188
|
+
debtInUsd,
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
[collateralPrice],
|
|
192
|
+
)
|
|
176
193
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
194
|
+
return useReadContracts({
|
|
195
|
+
contracts,
|
|
196
|
+
query: {
|
|
197
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
198
|
+
retry: 1,
|
|
199
|
+
select: selectBorrowData,
|
|
182
200
|
staleTime: borrowDataRefetchInterval,
|
|
183
201
|
refetchInterval: borrowDataRefetchInterval,
|
|
184
202
|
...queryOptions,
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
useQueryClient,
|
|
7
7
|
UseQueryOptions,
|
|
8
8
|
} from "@tanstack/react-query"
|
|
9
|
-
import { getBalance, readContracts } from "wagmi/actions"
|
|
9
|
+
import { getBalance, GetBalanceReturnType, readContracts } from "wagmi/actions"
|
|
10
10
|
import { useCallback } from "react"
|
|
11
11
|
import {
|
|
12
12
|
mainnetTokenContracts,
|
|
@@ -21,7 +21,10 @@ import {
|
|
|
21
21
|
} from "../utils/assets"
|
|
22
22
|
import { convertToUsd } from "../utils/currency"
|
|
23
23
|
import { CHAIN_ID, mezoMainnet, mezoTestnet } from "../constants"
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
AssetConversion,
|
|
26
|
+
useAssetsConversionRates,
|
|
27
|
+
} from "./useAssetsConversionRates"
|
|
25
28
|
import { normalizePrecision } from "../utils/numbers"
|
|
26
29
|
import { usePassportContext } from "./usePassportContext"
|
|
27
30
|
|
|
@@ -120,53 +123,23 @@ export function useTokensBalances<T extends MezoChainToken[]>(
|
|
|
120
123
|
|
|
121
124
|
const chainId = environment === "testnet" ? mezoTestnet.id : mezoMainnet.id
|
|
122
125
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const tokenContracts = tokens.map((token) => {
|
|
143
|
-
const { address } = contractsMap[token]
|
|
144
|
-
return {
|
|
145
|
-
address,
|
|
146
|
-
abi: BALANCE_OF_ABI,
|
|
147
|
-
functionName: "balanceOf" as const,
|
|
148
|
-
args: [walletAccount?.accountAddress],
|
|
149
|
-
chainId,
|
|
150
|
-
}
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
if (!conversionRatesData) {
|
|
154
|
-
throw new Error("Conversion rates data is not available.")
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return Promise.all([
|
|
158
|
-
getBalance(config, { address: walletAccount?.accountAddress, chainId }),
|
|
159
|
-
readContracts(config, {
|
|
160
|
-
contracts: tokenContracts,
|
|
161
|
-
}),
|
|
162
|
-
new Promise((resolve) => {
|
|
163
|
-
resolve(conversionRatesData)
|
|
164
|
-
}) as Promise<typeof conversionRatesData>,
|
|
165
|
-
])
|
|
166
|
-
},
|
|
167
|
-
select: (data) => {
|
|
168
|
-
const [btcBalance, tokensBalancesData, conversion] = data
|
|
169
|
-
|
|
126
|
+
const selectBalances = useCallback(
|
|
127
|
+
([btcBalance, tokensBalancesData, conversion]: [
|
|
128
|
+
GetBalanceReturnType,
|
|
129
|
+
(
|
|
130
|
+
| {
|
|
131
|
+
error?: undefined
|
|
132
|
+
result: bigint
|
|
133
|
+
status: "success"
|
|
134
|
+
}
|
|
135
|
+
| {
|
|
136
|
+
error: Error
|
|
137
|
+
result?: undefined
|
|
138
|
+
status: "failure"
|
|
139
|
+
}
|
|
140
|
+
)[],
|
|
141
|
+
AssetConversion,
|
|
142
|
+
]) => {
|
|
170
143
|
const parsedBtcBalance = {
|
|
171
144
|
...btcBalance,
|
|
172
145
|
symbol: getAsset("BTC").symbol,
|
|
@@ -231,6 +204,54 @@ export function useTokensBalances<T extends MezoChainToken[]>(
|
|
|
231
204
|
{} as Record<T[number] | "BTC", TokenBalance>,
|
|
232
205
|
)
|
|
233
206
|
},
|
|
207
|
+
[tokens, walletAccount.accountAddress],
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
return useQuery({
|
|
211
|
+
queryKey: [
|
|
212
|
+
TOKEN_BALANCES_QUERY_KEY,
|
|
213
|
+
walletAccount?.accountAddress,
|
|
214
|
+
options.tokens,
|
|
215
|
+
chainId,
|
|
216
|
+
],
|
|
217
|
+
enabled: !!walletAccount?.accountAddress && !!conversionRatesData,
|
|
218
|
+
placeholderData: keepPreviousData,
|
|
219
|
+
queryFn: async () => {
|
|
220
|
+
const isMainnet = chainId === CHAIN_ID.mainnet
|
|
221
|
+
const contractsMap = isMainnet
|
|
222
|
+
? mainnetTokenContracts
|
|
223
|
+
: testnetTokenContracts
|
|
224
|
+
|
|
225
|
+
if (!walletAccount?.accountAddress) {
|
|
226
|
+
throw new Error("Account address is not available.")
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const tokenContracts = tokens.map((token) => {
|
|
230
|
+
const { address } = contractsMap[token]
|
|
231
|
+
return {
|
|
232
|
+
address,
|
|
233
|
+
abi: BALANCE_OF_ABI,
|
|
234
|
+
functionName: "balanceOf" as const,
|
|
235
|
+
args: [walletAccount?.accountAddress],
|
|
236
|
+
chainId,
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
if (!conversionRatesData) {
|
|
241
|
+
throw new Error("Conversion rates data is not available.")
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return Promise.all([
|
|
245
|
+
getBalance(config, { address: walletAccount?.accountAddress, chainId }),
|
|
246
|
+
readContracts(config, {
|
|
247
|
+
contracts: tokenContracts,
|
|
248
|
+
}),
|
|
249
|
+
new Promise((resolve) => {
|
|
250
|
+
resolve(conversionRatesData)
|
|
251
|
+
}) as Promise<typeof conversionRatesData>,
|
|
252
|
+
])
|
|
253
|
+
},
|
|
254
|
+
select: selectBalances,
|
|
234
255
|
...restQueryOptions,
|
|
235
256
|
})
|
|
236
257
|
}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
1
2
|
import { UseQueryResult } from "@tanstack/react-query"
|
|
2
3
|
import { validateMezoId, MezoId } from "../utils/mezoId"
|
|
3
4
|
import { useGetAccountByMezoId } from "./useGetAccountByMezoId"
|
|
5
|
+
import { GetAccountByMezoIdOrAddressResponse } from "../api"
|
|
4
6
|
|
|
5
7
|
export function useValidateMezoId(mezoId: MezoId) {
|
|
6
8
|
const validationErrors = validateMezoId(mezoId)
|
|
7
9
|
|
|
10
|
+
const select = useCallback(
|
|
11
|
+
(data: GetAccountByMezoIdOrAddressResponse | null) => {
|
|
12
|
+
const isValid = validationErrors.length === 0
|
|
13
|
+
const isAvailable = isValid ? !data : false
|
|
14
|
+
|
|
15
|
+
return { isValid, isAvailable, errors: validationErrors }
|
|
16
|
+
},
|
|
17
|
+
[validationErrors],
|
|
18
|
+
)
|
|
19
|
+
|
|
8
20
|
return useGetAccountByMezoId(mezoId, {
|
|
9
21
|
placeholderData: {
|
|
10
22
|
// @ts-expect-error TODO: Couldn't fix type for placeholderData which for
|
|
@@ -17,12 +29,7 @@ export function useValidateMezoId(mezoId: MezoId) {
|
|
|
17
29
|
enabled: validationErrors.length === 0,
|
|
18
30
|
// @ts-expect-error TODO: Couldn't fix type for select which for some reason
|
|
19
31
|
// should return the same data as the data returned in queryFn.
|
|
20
|
-
select
|
|
21
|
-
const isValid = validationErrors.length === 0
|
|
22
|
-
const isAvailable = isValid ? !data : false
|
|
23
|
-
|
|
24
|
-
return { isValid, isAvailable, errors: validationErrors }
|
|
25
|
-
},
|
|
32
|
+
select,
|
|
26
33
|
}) as UseQueryResult<{
|
|
27
34
|
isValid: boolean
|
|
28
35
|
isAvailable: boolean
|