@mezo-org/passport 0.7.2-dev.2 → 0.7.2-dev.4
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 +7 -8
- package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -1
- package/dist/src/hooks/useAssetsConversionRates.js +11 -13
- package/dist/src/hooks/useAssetsConversionRates.js.map +1 -1
- package/dist/src/hooks/useBorrowData.d.ts +57 -2
- package/dist/src/hooks/useBorrowData.d.ts.map +1 -1
- package/dist/src/hooks/useBorrowData.js +56 -61
- 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 +5 -7
- package/dist/src/hooks/useValidateMezoId.js.map +1 -1
- package/package.json +3 -3
- package/src/api/portal.ts +1 -1
- package/src/hooks/useAssetsConversionRates.ts +16 -31
- package/src/hooks/useBorrowData.ts +61 -81
- package/src/hooks/useTokensBalances.ts +49 -70
- package/src/hooks/useValidateMezoId.ts +6 -13
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,KAAK,gBAAgB,GAAG;IACtB,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,10 +1,3 @@
|
|
|
1
|
-
export type AssetConversion = {
|
|
2
|
-
rates: {
|
|
3
|
-
mT: bigint;
|
|
4
|
-
BTC: bigint;
|
|
5
|
-
};
|
|
6
|
-
decimals: number;
|
|
7
|
-
};
|
|
8
1
|
export declare const CONVERSION_RATE_DECIMALS = 18;
|
|
9
2
|
export declare const QUERY_KEY = "passport.assetsConversionRates";
|
|
10
3
|
/**
|
|
@@ -15,5 +8,11 @@ export declare const QUERY_KEY = "passport.assetsConversionRates";
|
|
|
15
8
|
* @returns {}.isPending - Whether the request is pending.
|
|
16
9
|
* @returns {}.isError - Whether there was an error fetching the price.
|
|
17
10
|
*/
|
|
18
|
-
export declare function useAssetsConversionRates(): import("@tanstack/react-query").UseQueryResult<
|
|
11
|
+
export declare function useAssetsConversionRates(): import("@tanstack/react-query").UseQueryResult<{
|
|
12
|
+
rates: {
|
|
13
|
+
mT: bigint;
|
|
14
|
+
BTC: bigint;
|
|
15
|
+
};
|
|
16
|
+
decimals: number;
|
|
17
|
+
}, Error>;
|
|
19
18
|
//# 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":"AAMA,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAK1C,eAAO,MAAM,SAAS,mCAAmC,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB;;;;;;UAuCvC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
1
|
import { useQuery } from "@tanstack/react-query";
|
|
3
2
|
import { parseUnits } from "viem";
|
|
4
3
|
import { ONE_SECOND_MS } from "../utils/time";
|
|
@@ -20,17 +19,6 @@ export function useAssetsConversionRates() {
|
|
|
20
19
|
const portalApiClient = usePortalApiClient();
|
|
21
20
|
const { data: collateralPriceData } = useCollateralPrice();
|
|
22
21
|
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
|
-
}, []);
|
|
34
22
|
return useQuery({
|
|
35
23
|
queryKey: [QUERY_KEY, collateralPrice],
|
|
36
24
|
queryFn: () => {
|
|
@@ -45,7 +33,17 @@ export function useAssetsConversionRates() {
|
|
|
45
33
|
]);
|
|
46
34
|
},
|
|
47
35
|
enabled: !!collateralPrice,
|
|
48
|
-
select,
|
|
36
|
+
select: ([portalStatistics, btcPrice]) => {
|
|
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
|
+
},
|
|
49
47
|
refetchInterval: MAX_PRICE_DELAY,
|
|
50
48
|
});
|
|
51
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAssetsConversionRates.js","sourceRoot":"","sources":["../../../src/hooks/useAssetsConversionRates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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;AAEzD,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,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,EAAE,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,EAAE;YACvC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAA;YAEzD,MAAM,MAAM,GAAG,UAAU,CACvB,oBAAoB,CAAC,QAAQ,EAAE,EAC/B,wBAAwB,CACzB,CAAA;YAED,OAAO;gBACL,KAAK,EAAE;oBACL,EAAE,EAAE,MAAM;oBACV,GAAG,EAAE,QAAQ;iBACd;gBACD,QAAQ,EAAE,wBAAwB;aACnC,CAAA;QACH,CAAC;QACD,eAAe,EAAE,eAAe;KACjC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -3,7 +3,62 @@
|
|
|
3
3
|
* connected account, based on it's evm address.
|
|
4
4
|
* @param queryOptions Query options passed to the underlying `useQuery` hook.
|
|
5
5
|
*/
|
|
6
|
-
export declare function useBorrowData(queryOptions?: {}): import("
|
|
6
|
+
export declare function useBorrowData(queryOptions?: {}): import("wagmi").UseReadContractsReturnType<readonly [{
|
|
7
|
+
readonly abi: readonly [{
|
|
8
|
+
readonly inputs: readonly [{
|
|
9
|
+
readonly internalType: "address";
|
|
10
|
+
readonly name: "_borrower";
|
|
11
|
+
readonly type: "address";
|
|
12
|
+
}];
|
|
13
|
+
readonly name: "getEntireDebtAndColl";
|
|
14
|
+
readonly outputs: readonly [{
|
|
15
|
+
readonly internalType: "uint256";
|
|
16
|
+
readonly name: "coll";
|
|
17
|
+
readonly type: "uint256";
|
|
18
|
+
}, {
|
|
19
|
+
readonly internalType: "uint256";
|
|
20
|
+
readonly name: "principal";
|
|
21
|
+
readonly type: "uint256";
|
|
22
|
+
}, {
|
|
23
|
+
readonly internalType: "uint256";
|
|
24
|
+
readonly name: "interest";
|
|
25
|
+
readonly type: "uint256";
|
|
26
|
+
}, {
|
|
27
|
+
readonly internalType: "uint256";
|
|
28
|
+
readonly name: "pendingCollateral";
|
|
29
|
+
readonly type: "uint256";
|
|
30
|
+
}, {
|
|
31
|
+
readonly internalType: "uint256";
|
|
32
|
+
readonly name: "pendingPrincipal";
|
|
33
|
+
readonly type: "uint256";
|
|
34
|
+
}, {
|
|
35
|
+
readonly internalType: "uint256";
|
|
36
|
+
readonly name: "pendingInterest";
|
|
37
|
+
readonly type: "uint256";
|
|
38
|
+
}];
|
|
39
|
+
readonly stateMutability: "view";
|
|
40
|
+
readonly type: "function";
|
|
41
|
+
}];
|
|
42
|
+
readonly address: `0x${string}`;
|
|
43
|
+
readonly functionName: "getEntireDebtAndColl";
|
|
44
|
+
readonly args: [`0x${string}`];
|
|
45
|
+
readonly chainId: number;
|
|
46
|
+
}, {
|
|
47
|
+
readonly abi: readonly [{
|
|
48
|
+
readonly inputs: readonly [];
|
|
49
|
+
readonly name: "MUSD_GAS_COMPENSATION";
|
|
50
|
+
readonly outputs: readonly [{
|
|
51
|
+
readonly internalType: "uint256";
|
|
52
|
+
readonly name: "";
|
|
53
|
+
readonly type: "uint256";
|
|
54
|
+
}];
|
|
55
|
+
readonly stateMutability: "view";
|
|
56
|
+
readonly type: "function";
|
|
57
|
+
}];
|
|
58
|
+
readonly address: `0x${string}`;
|
|
59
|
+
readonly functionName: "MUSD_GAS_COMPENSATION";
|
|
60
|
+
readonly chainId: number;
|
|
61
|
+
}], true, {
|
|
7
62
|
collateral: {
|
|
8
63
|
value: bigint;
|
|
9
64
|
decimals: number;
|
|
@@ -18,7 +73,7 @@ export declare function useBorrowData(queryOptions?: {}): import("@tanstack/reac
|
|
|
18
73
|
value: bigint;
|
|
19
74
|
formatted: string;
|
|
20
75
|
};
|
|
21
|
-
}
|
|
76
|
+
}>;
|
|
22
77
|
/**
|
|
23
78
|
* Hook for for invalidating current user's borrow data. Can be used to
|
|
24
79
|
* invalidate borrow data manually, which forces the data to be re-fetched.
|
|
@@ -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":"AAuFA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8F9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB;;EAatC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB;;EAajC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { readContracts } from "wagmi/actions";
|
|
1
|
+
import { useReadContracts } from "wagmi";
|
|
3
2
|
import { useCallback, useMemo } from "react";
|
|
4
|
-
import {
|
|
3
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
5
4
|
import { formatUnits } from "viem";
|
|
6
5
|
import { mainnetBorrowContracts, testnetBorrowContracts, } from "../lib/contracts";
|
|
7
6
|
import { usePassportContext } from "./usePassportContext";
|
|
@@ -12,7 +11,6 @@ import { getAsset } from "../utils/assets";
|
|
|
12
11
|
import { convertToUsd } from "../utils/currency";
|
|
13
12
|
import { useCollateralPrice } from "./useCollateralPrice";
|
|
14
13
|
const DEBT_AND_COLL_PRECISION = 18;
|
|
15
|
-
const BORROW_DATA_QUERY_KEY = "passport.borrowData";
|
|
16
14
|
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
17
15
|
// support importing JSON as const yet so types cannot be inferred from the
|
|
18
16
|
// imported contract. As a workaround there is minimal ABI definition that can
|
|
@@ -88,7 +86,6 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
88
86
|
const { environment = "mainnet", borrowDataRefetchInterval } = usePassportContext();
|
|
89
87
|
const walletAccount = useWalletAccount();
|
|
90
88
|
const { data: collateralPrice } = useCollateralPrice();
|
|
91
|
-
const config = useConfig();
|
|
92
89
|
const contractAddress = useMemo(() => {
|
|
93
90
|
if (environment === "mainnet") {
|
|
94
91
|
return {
|
|
@@ -102,61 +99,57 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
102
99
|
};
|
|
103
100
|
}, [environment]);
|
|
104
101
|
const chainId = CHAIN_ID[environment];
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
102
|
+
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
|
+
],
|
|
120
|
+
query: {
|
|
121
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
122
|
+
retry: 1,
|
|
123
|
+
select: (data) => {
|
|
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
|
+
},
|
|
149
|
+
staleTime: borrowDataRefetchInterval,
|
|
150
|
+
refetchInterval: borrowDataRefetchInterval,
|
|
151
|
+
...queryOptions,
|
|
153
152
|
},
|
|
154
|
-
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
155
|
-
retry: 1,
|
|
156
|
-
select: selectBorrowData,
|
|
157
|
-
staleTime: borrowDataRefetchInterval,
|
|
158
|
-
refetchInterval: borrowDataRefetchInterval,
|
|
159
|
-
...queryOptions,
|
|
160
153
|
});
|
|
161
154
|
}
|
|
162
155
|
/**
|
|
@@ -166,7 +159,8 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
166
159
|
*/
|
|
167
160
|
export function useInvalidateBorrowData() {
|
|
168
161
|
const queryClient = useQueryClient();
|
|
169
|
-
const
|
|
162
|
+
const { queryKey } = useBorrowData();
|
|
163
|
+
const invalidateBorrowDataHandler = useCallback(() => queryClient.invalidateQueries({ queryKey }), [queryClient, queryKey]);
|
|
170
164
|
return {
|
|
171
165
|
invalidateBorrowData: invalidateBorrowDataHandler,
|
|
172
166
|
};
|
|
@@ -178,7 +172,8 @@ export function useInvalidateBorrowData() {
|
|
|
178
172
|
*/
|
|
179
173
|
export function useResetBorrowData() {
|
|
180
174
|
const queryClient = useQueryClient();
|
|
181
|
-
const
|
|
175
|
+
const { queryKey } = useBorrowData();
|
|
176
|
+
const resetBorrowDataHandler = useCallback(() => queryClient.resetQueries({ queryKey }), [queryClient, queryKey]);
|
|
182
177
|
return {
|
|
183
178
|
resetBorrowData: resetBorrowDataHandler,
|
|
184
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBorrowData.js","sourceRoot":"","sources":["../../../src/hooks/useBorrowData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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;AAmBzB,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,kGA+HnD;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
|
|
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,41 +75,6 @@ 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]);
|
|
113
78
|
return useQuery({
|
|
114
79
|
queryKey: [
|
|
115
80
|
TOKEN_BALANCES_QUERY_KEY,
|
|
@@ -150,7 +115,42 @@ export function useTokensBalances(options = {}) {
|
|
|
150
115
|
}),
|
|
151
116
|
]);
|
|
152
117
|
},
|
|
153
|
-
select:
|
|
118
|
+
select: (data) => {
|
|
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
|
+
},
|
|
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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAkB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAqBxC,cAAc,CAAC;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAC,CACH"}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
1
|
import { validateMezoId } from "../utils/mezoId";
|
|
3
2
|
import { useGetAccountByMezoId } from "./useGetAccountByMezoId";
|
|
4
3
|
export function useValidateMezoId(mezoId) {
|
|
5
4
|
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]);
|
|
11
5
|
return useGetAccountByMezoId(mezoId, {
|
|
12
6
|
placeholderData: {
|
|
13
7
|
// @ts-expect-error TODO: Couldn't fix type for placeholderData which for
|
|
@@ -20,7 +14,11 @@ export function useValidateMezoId(mezoId) {
|
|
|
20
14
|
enabled: validationErrors.length === 0,
|
|
21
15
|
// @ts-expect-error TODO: Couldn't fix type for select which for some reason
|
|
22
16
|
// should return the same data as the data returned in queryFn.
|
|
23
|
-
select
|
|
17
|
+
select: (data) => {
|
|
18
|
+
const isValid = validationErrors.length === 0;
|
|
19
|
+
const isAvailable = isValid ? !data : false;
|
|
20
|
+
return { isValid, isAvailable, errors: validationErrors };
|
|
21
|
+
},
|
|
24
22
|
});
|
|
25
23
|
}
|
|
26
24
|
//# 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":"AACA,OAAO,EAAE,cAAc,EAAU,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAE/C,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,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAA;YAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;YAE3C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;QAC3D,CAAC;KACF,CAIC,CAAA;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mezo-org/passport",
|
|
3
|
-
"version": "0.7.2-dev.
|
|
3
|
+
"version": "0.7.2-dev.4",
|
|
4
4
|
"main": "dist/src/index.js",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"scripts": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@mezo-org/mezo-clay": "0.1.0-dev.33",
|
|
41
41
|
"@mezo-org/mezod-contracts": "^1.0.0",
|
|
42
42
|
"@mezo-org/musd-contracts": "^1.0.1",
|
|
43
|
-
"@mezo-org/orangekit": "1.0.0-beta.40-dev.
|
|
43
|
+
"@mezo-org/orangekit": "1.0.0-beta.40-dev.21",
|
|
44
44
|
"@mezo-org/sign-in-with-wallet": "1.0.0-beta.8",
|
|
45
45
|
"qrcode.react": "^4.2.0",
|
|
46
46
|
"styletron-engine-monolithic": "^1.0.0",
|
|
@@ -55,4 +55,4 @@
|
|
|
55
55
|
"viem": "2.22.8",
|
|
56
56
|
"wagmi": "2.5.12"
|
|
57
57
|
}
|
|
58
|
-
}
|
|
58
|
+
}
|
package/src/api/portal.ts
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import { useCallback } from "react"
|
|
2
1
|
import { useQuery } from "@tanstack/react-query"
|
|
3
2
|
import { parseUnits } from "viem"
|
|
4
3
|
import { ONE_SECOND_MS } from "../utils/time"
|
|
5
4
|
import { usePortalApiClient } from "./usePortalApiClient"
|
|
6
5
|
import { useCollateralPrice } from "./useCollateralPrice"
|
|
7
|
-
import { PortalStatistics } from "../api"
|
|
8
|
-
|
|
9
|
-
export type AssetConversion = {
|
|
10
|
-
rates: { mT: bigint; BTC: bigint }
|
|
11
|
-
decimals: number
|
|
12
|
-
}
|
|
13
6
|
|
|
14
7
|
export const CONVERSION_RATE_DECIMALS = 18
|
|
15
8
|
|
|
@@ -32,29 +25,6 @@ export function useAssetsConversionRates() {
|
|
|
32
25
|
|
|
33
26
|
const collateralPrice = collateralPriceData?.toString()
|
|
34
27
|
|
|
35
|
-
const select = useCallback(
|
|
36
|
-
([portalStatistics, btcPrice]: [
|
|
37
|
-
PortalStatistics,
|
|
38
|
-
bigint,
|
|
39
|
-
]): AssetConversion => {
|
|
40
|
-
const tTokenConversionRate = portalStatistics.tTokenPrice
|
|
41
|
-
|
|
42
|
-
const tPrice = parseUnits(
|
|
43
|
-
tTokenConversionRate.toString(),
|
|
44
|
-
CONVERSION_RATE_DECIMALS,
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
return {
|
|
48
|
-
rates: {
|
|
49
|
-
mT: tPrice,
|
|
50
|
-
BTC: btcPrice,
|
|
51
|
-
},
|
|
52
|
-
decimals: CONVERSION_RATE_DECIMALS,
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
[],
|
|
56
|
-
)
|
|
57
|
-
|
|
58
28
|
return useQuery({
|
|
59
29
|
queryKey: [QUERY_KEY, collateralPrice],
|
|
60
30
|
queryFn: () => {
|
|
@@ -70,7 +40,22 @@ export function useAssetsConversionRates() {
|
|
|
70
40
|
])
|
|
71
41
|
},
|
|
72
42
|
enabled: !!collateralPrice,
|
|
73
|
-
select,
|
|
43
|
+
select: ([portalStatistics, btcPrice]) => {
|
|
44
|
+
const tTokenConversionRate = portalStatistics.tTokenPrice
|
|
45
|
+
|
|
46
|
+
const tPrice = parseUnits(
|
|
47
|
+
tTokenConversionRate.toString(),
|
|
48
|
+
CONVERSION_RATE_DECIMALS,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
rates: {
|
|
53
|
+
mT: tPrice,
|
|
54
|
+
BTC: btcPrice,
|
|
55
|
+
},
|
|
56
|
+
decimals: CONVERSION_RATE_DECIMALS,
|
|
57
|
+
}
|
|
58
|
+
},
|
|
74
59
|
refetchInterval: MAX_PRICE_DELAY,
|
|
75
60
|
})
|
|
76
61
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { readContracts } from "wagmi/actions"
|
|
1
|
+
import { useReadContracts } from "wagmi"
|
|
3
2
|
import { useCallback, useMemo } from "react"
|
|
4
|
-
import {
|
|
3
|
+
import { useQueryClient } from "@tanstack/react-query"
|
|
5
4
|
import { formatUnits } from "viem"
|
|
6
5
|
import {
|
|
7
6
|
mainnetBorrowContracts,
|
|
@@ -16,7 +15,6 @@ import { convertToUsd } from "../utils/currency"
|
|
|
16
15
|
import { useCollateralPrice } from "./useCollateralPrice"
|
|
17
16
|
|
|
18
17
|
const DEBT_AND_COLL_PRECISION = 18
|
|
19
|
-
const BORROW_DATA_QUERY_KEY = "passport.borrowData"
|
|
20
18
|
|
|
21
19
|
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
22
20
|
// support importing JSON as const yet so types cannot be inferred from the
|
|
@@ -98,7 +96,6 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
98
96
|
const walletAccount = useWalletAccount()
|
|
99
97
|
|
|
100
98
|
const { data: collateralPrice } = useCollateralPrice()
|
|
101
|
-
const config = useConfig()
|
|
102
99
|
|
|
103
100
|
const contractAddress = useMemo(() => {
|
|
104
101
|
if (environment === "mainnet") {
|
|
@@ -115,8 +112,8 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
115
112
|
|
|
116
113
|
const chainId = CHAIN_ID[environment]
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
return useReadContracts({
|
|
116
|
+
contracts: [
|
|
120
117
|
{
|
|
121
118
|
abi: TROVE_MANAGER_ABI,
|
|
122
119
|
address: contractAddress.troveManager,
|
|
@@ -133,80 +130,59 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
133
130
|
chainId,
|
|
134
131
|
},
|
|
135
132
|
],
|
|
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
|
-
|
|
133
|
+
query: {
|
|
134
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
135
|
+
retry: 1,
|
|
136
|
+
select: (data) => {
|
|
137
|
+
if (!data || data.some((item) => !item.result))
|
|
138
|
+
throw new Error("No borrow data available")
|
|
139
|
+
|
|
140
|
+
if (!collateralPrice) throw new Error("Collateral price not available")
|
|
141
|
+
|
|
142
|
+
const [rawCollateral, principal, interest] = data[0].result!
|
|
143
|
+
const gasCompensation = data[1].result!
|
|
144
|
+
|
|
145
|
+
const btcDetails = getAsset("BTC")
|
|
146
|
+
|
|
147
|
+
const collateral = {
|
|
148
|
+
value: rawCollateral,
|
|
149
|
+
decimals: btcDetails.decimals,
|
|
150
|
+
symbol: btcDetails.symbol,
|
|
151
|
+
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
152
|
+
usd: convertToUsd(
|
|
153
|
+
rawCollateral,
|
|
154
|
+
DEBT_AND_COLL_PRECISION,
|
|
155
|
+
collateralPrice,
|
|
156
|
+
DEBT_AND_COLL_PRECISION,
|
|
157
|
+
),
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const debtInUsdValue = bigIntMax(
|
|
161
|
+
normalizePrecision(
|
|
162
|
+
principal + interest - gasCompensation,
|
|
163
|
+
DEBT_AND_COLL_PRECISION,
|
|
164
|
+
),
|
|
165
|
+
0n, // Ensure that debt is not negative
|
|
166
|
+
)
|
|
167
|
+
const formattedDebtInUsd = formatUnits(
|
|
168
|
+
debtInUsdValue,
|
|
166
169
|
DEBT_AND_COLL_PRECISION,
|
|
167
|
-
|
|
168
|
-
DEBT_AND_COLL_PRECISION,
|
|
169
|
-
),
|
|
170
|
-
}
|
|
170
|
+
)
|
|
171
171
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
),
|
|
177
|
-
0n, // Ensure that debt is not negative
|
|
178
|
-
)
|
|
179
|
-
const formattedDebtInUsd = formatUnits(
|
|
180
|
-
debtInUsdValue,
|
|
181
|
-
DEBT_AND_COLL_PRECISION,
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
const debtInUsd = {
|
|
185
|
-
value: debtInUsdValue,
|
|
186
|
-
formatted: formattedDebtInUsd,
|
|
187
|
-
}
|
|
172
|
+
const debtInUsd = {
|
|
173
|
+
value: debtInUsdValue,
|
|
174
|
+
formatted: formattedDebtInUsd,
|
|
175
|
+
}
|
|
188
176
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return useQuery({
|
|
198
|
-
queryKey: [BORROW_DATA_QUERY_KEY, walletAccount.accountAddress],
|
|
199
|
-
queryFn: async () => {
|
|
200
|
-
const borrowData = await readContracts(config, { contracts })
|
|
201
|
-
|
|
202
|
-
return borrowData
|
|
177
|
+
return {
|
|
178
|
+
collateral,
|
|
179
|
+
debtInUsd,
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
staleTime: borrowDataRefetchInterval,
|
|
183
|
+
refetchInterval: borrowDataRefetchInterval,
|
|
184
|
+
...queryOptions,
|
|
203
185
|
},
|
|
204
|
-
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
205
|
-
retry: 1,
|
|
206
|
-
select: selectBorrowData,
|
|
207
|
-
staleTime: borrowDataRefetchInterval,
|
|
208
|
-
refetchInterval: borrowDataRefetchInterval,
|
|
209
|
-
...queryOptions,
|
|
210
186
|
})
|
|
211
187
|
}
|
|
212
188
|
|
|
@@ -218,9 +194,11 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
218
194
|
export function useInvalidateBorrowData() {
|
|
219
195
|
const queryClient = useQueryClient()
|
|
220
196
|
|
|
197
|
+
const { queryKey } = useBorrowData()
|
|
198
|
+
|
|
221
199
|
const invalidateBorrowDataHandler = useCallback(
|
|
222
|
-
() => queryClient.invalidateQueries({ queryKey
|
|
223
|
-
[queryClient],
|
|
200
|
+
() => queryClient.invalidateQueries({ queryKey }),
|
|
201
|
+
[queryClient, queryKey],
|
|
224
202
|
)
|
|
225
203
|
|
|
226
204
|
return {
|
|
@@ -236,9 +214,11 @@ export function useInvalidateBorrowData() {
|
|
|
236
214
|
export function useResetBorrowData() {
|
|
237
215
|
const queryClient = useQueryClient()
|
|
238
216
|
|
|
217
|
+
const { queryKey } = useBorrowData()
|
|
218
|
+
|
|
239
219
|
const resetBorrowDataHandler = useCallback(
|
|
240
|
-
() => queryClient.resetQueries({ queryKey
|
|
241
|
-
[queryClient],
|
|
220
|
+
() => queryClient.resetQueries({ queryKey }),
|
|
221
|
+
[queryClient, queryKey],
|
|
242
222
|
)
|
|
243
223
|
|
|
244
224
|
return {
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
useQueryClient,
|
|
7
7
|
UseQueryOptions,
|
|
8
8
|
} from "@tanstack/react-query"
|
|
9
|
-
import { getBalance,
|
|
9
|
+
import { getBalance, readContracts } from "wagmi/actions"
|
|
10
10
|
import { useCallback } from "react"
|
|
11
11
|
import {
|
|
12
12
|
mainnetTokenContracts,
|
|
@@ -21,10 +21,7 @@ import {
|
|
|
21
21
|
} from "../utils/assets"
|
|
22
22
|
import { convertToUsd } from "../utils/currency"
|
|
23
23
|
import { CHAIN_ID, mezoMainnet, mezoTestnet } from "../constants"
|
|
24
|
-
import {
|
|
25
|
-
AssetConversion,
|
|
26
|
-
useAssetsConversionRates,
|
|
27
|
-
} from "./useAssetsConversionRates"
|
|
24
|
+
import { useAssetsConversionRates } from "./useAssetsConversionRates"
|
|
28
25
|
import { normalizePrecision } from "../utils/numbers"
|
|
29
26
|
import { usePassportContext } from "./usePassportContext"
|
|
30
27
|
|
|
@@ -123,23 +120,53 @@ export function useTokensBalances<T extends MezoChainToken[]>(
|
|
|
123
120
|
|
|
124
121
|
const chainId = environment === "testnet" ? mezoTestnet.id : mezoMainnet.id
|
|
125
122
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
123
|
+
return useQuery({
|
|
124
|
+
queryKey: [
|
|
125
|
+
TOKEN_BALANCES_QUERY_KEY,
|
|
126
|
+
walletAccount?.accountAddress,
|
|
127
|
+
options.tokens,
|
|
128
|
+
chainId,
|
|
129
|
+
],
|
|
130
|
+
enabled: !!walletAccount?.accountAddress && !!conversionRatesData,
|
|
131
|
+
placeholderData: keepPreviousData,
|
|
132
|
+
queryFn: async () => {
|
|
133
|
+
const isMainnet = chainId === CHAIN_ID.mainnet
|
|
134
|
+
const contractsMap = isMainnet
|
|
135
|
+
? mainnetTokenContracts
|
|
136
|
+
: testnetTokenContracts
|
|
137
|
+
|
|
138
|
+
if (!walletAccount?.accountAddress) {
|
|
139
|
+
throw new Error("Account address is not available.")
|
|
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
|
+
|
|
143
170
|
const parsedBtcBalance = {
|
|
144
171
|
...btcBalance,
|
|
145
172
|
symbol: getAsset("BTC").symbol,
|
|
@@ -204,54 +231,6 @@ export function useTokensBalances<T extends MezoChainToken[]>(
|
|
|
204
231
|
{} as Record<T[number] | "BTC", TokenBalance>,
|
|
205
232
|
)
|
|
206
233
|
},
|
|
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,
|
|
255
234
|
...restQueryOptions,
|
|
256
235
|
})
|
|
257
236
|
}
|
|
@@ -1,22 +1,10 @@
|
|
|
1
|
-
import { useCallback } from "react"
|
|
2
1
|
import { UseQueryResult } from "@tanstack/react-query"
|
|
3
2
|
import { validateMezoId, MezoId } from "../utils/mezoId"
|
|
4
3
|
import { useGetAccountByMezoId } from "./useGetAccountByMezoId"
|
|
5
|
-
import { GetAccountByMezoIdOrAddressResponse } from "../api"
|
|
6
4
|
|
|
7
5
|
export function useValidateMezoId(mezoId: MezoId) {
|
|
8
6
|
const validationErrors = validateMezoId(mezoId)
|
|
9
7
|
|
|
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
|
-
|
|
20
8
|
return useGetAccountByMezoId(mezoId, {
|
|
21
9
|
placeholderData: {
|
|
22
10
|
// @ts-expect-error TODO: Couldn't fix type for placeholderData which for
|
|
@@ -29,7 +17,12 @@ export function useValidateMezoId(mezoId: MezoId) {
|
|
|
29
17
|
enabled: validationErrors.length === 0,
|
|
30
18
|
// @ts-expect-error TODO: Couldn't fix type for select which for some reason
|
|
31
19
|
// should return the same data as the data returned in queryFn.
|
|
32
|
-
select
|
|
20
|
+
select: (data) => {
|
|
21
|
+
const isValid = validationErrors.length === 0
|
|
22
|
+
const isAvailable = isValid ? !data : false
|
|
23
|
+
|
|
24
|
+
return { isValid, isAvailable, errors: validationErrors }
|
|
25
|
+
},
|
|
33
26
|
}) as UseQueryResult<{
|
|
34
27
|
isValid: boolean
|
|
35
28
|
isAvailable: boolean
|