@mezo-org/passport 0.7.1 → 0.7.2-dev.2
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 +2 -57
- package/dist/src/hooks/useBorrowData.d.ts.map +1 -1
- package/dist/src/hooks/useBorrowData.js +61 -56
- 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 +2 -2
- package/src/api/portal.ts +1 -1
- package/src/hooks/useAssetsConversionRates.ts +31 -16
- package/src/hooks/useBorrowData.ts +81 -61
- 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"}
|
|
@@ -3,62 +3,7 @@
|
|
|
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("
|
|
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, {
|
|
6
|
+
export declare function useBorrowData(queryOptions?: {}): import("@tanstack/react-query").UseQueryResult<{
|
|
62
7
|
collateral: {
|
|
63
8
|
value: bigint;
|
|
64
9
|
decimals: number;
|
|
@@ -73,7 +18,7 @@ export declare function useBorrowData(queryOptions?: {}): import("wagmi").UseRea
|
|
|
73
18
|
value: bigint;
|
|
74
19
|
formatted: string;
|
|
75
20
|
};
|
|
76
|
-
}>;
|
|
21
|
+
}, Error>;
|
|
77
22
|
/**
|
|
78
23
|
* Hook for for invalidating current user's borrow data. Can be used to
|
|
79
24
|
* 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":"AAyFA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,KAAK;;;;;;;;;;;;;;;UAoH9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB;;EAWtC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB;;EAWjC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useConfig } from "wagmi";
|
|
2
|
+
import { readContracts } from "wagmi/actions";
|
|
2
3
|
import { useCallback, useMemo } from "react";
|
|
3
|
-
import { useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
5
|
import { formatUnits } from "viem";
|
|
5
6
|
import { mainnetBorrowContracts, testnetBorrowContracts, } from "../lib/contracts";
|
|
6
7
|
import { usePassportContext } from "./usePassportContext";
|
|
@@ -11,6 +12,7 @@ import { getAsset } from "../utils/assets";
|
|
|
11
12
|
import { convertToUsd } from "../utils/currency";
|
|
12
13
|
import { useCollateralPrice } from "./useCollateralPrice";
|
|
13
14
|
const DEBT_AND_COLL_PRECISION = 18;
|
|
15
|
+
const BORROW_DATA_QUERY_KEY = "passport.borrowData";
|
|
14
16
|
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
15
17
|
// support importing JSON as const yet so types cannot be inferred from the
|
|
16
18
|
// imported contract. As a workaround there is minimal ABI definition that can
|
|
@@ -86,6 +88,7 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
86
88
|
const { environment = "mainnet", borrowDataRefetchInterval } = usePassportContext();
|
|
87
89
|
const walletAccount = useWalletAccount();
|
|
88
90
|
const { data: collateralPrice } = useCollateralPrice();
|
|
91
|
+
const config = useConfig();
|
|
89
92
|
const contractAddress = useMemo(() => {
|
|
90
93
|
if (environment === "mainnet") {
|
|
91
94
|
return {
|
|
@@ -99,57 +102,61 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
99
102
|
};
|
|
100
103
|
}, [environment]);
|
|
101
104
|
const chainId = CHAIN_ID[environment];
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
refetchInterval: borrowDataRefetchInterval,
|
|
151
|
-
...queryOptions,
|
|
105
|
+
const contracts = useMemo(() => [
|
|
106
|
+
{
|
|
107
|
+
abi: TROVE_MANAGER_ABI,
|
|
108
|
+
address: contractAddress.troveManager,
|
|
109
|
+
functionName: "getEntireDebtAndColl",
|
|
110
|
+
args: walletAccount.accountAddress
|
|
111
|
+
? [walletAccount.accountAddress]
|
|
112
|
+
: ["0x"],
|
|
113
|
+
chainId,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
abi: BORROWER_OPERATIONS_ABI,
|
|
117
|
+
address: contractAddress.borrowerOperations,
|
|
118
|
+
functionName: "MUSD_GAS_COMPENSATION",
|
|
119
|
+
chainId,
|
|
120
|
+
},
|
|
121
|
+
], [chainId, contractAddress, walletAccount.accountAddress]);
|
|
122
|
+
const selectBorrowData = useCallback((data) => {
|
|
123
|
+
if (!data || data.some((item) => !item.result))
|
|
124
|
+
throw new Error("No borrow data available");
|
|
125
|
+
if (!collateralPrice)
|
|
126
|
+
throw new Error("Collateral price not available");
|
|
127
|
+
const [rawCollateral, principal, interest] = data[0].result;
|
|
128
|
+
const gasCompensation = data[1].result;
|
|
129
|
+
const btcDetails = getAsset("BTC");
|
|
130
|
+
const collateral = {
|
|
131
|
+
value: rawCollateral,
|
|
132
|
+
decimals: btcDetails.decimals,
|
|
133
|
+
symbol: btcDetails.symbol,
|
|
134
|
+
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
135
|
+
usd: convertToUsd(rawCollateral, DEBT_AND_COLL_PRECISION, collateralPrice, DEBT_AND_COLL_PRECISION),
|
|
136
|
+
};
|
|
137
|
+
const debtInUsdValue = bigIntMax(normalizePrecision(principal + interest - gasCompensation, DEBT_AND_COLL_PRECISION), 0n);
|
|
138
|
+
const formattedDebtInUsd = formatUnits(debtInUsdValue, DEBT_AND_COLL_PRECISION);
|
|
139
|
+
const debtInUsd = {
|
|
140
|
+
value: debtInUsdValue,
|
|
141
|
+
formatted: formattedDebtInUsd,
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
collateral,
|
|
145
|
+
debtInUsd,
|
|
146
|
+
};
|
|
147
|
+
}, [collateralPrice]);
|
|
148
|
+
return useQuery({
|
|
149
|
+
queryKey: [BORROW_DATA_QUERY_KEY, walletAccount.accountAddress],
|
|
150
|
+
queryFn: async () => {
|
|
151
|
+
const borrowData = await readContracts(config, { contracts });
|
|
152
|
+
return borrowData;
|
|
152
153
|
},
|
|
154
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
155
|
+
retry: 1,
|
|
156
|
+
select: selectBorrowData,
|
|
157
|
+
staleTime: borrowDataRefetchInterval,
|
|
158
|
+
refetchInterval: borrowDataRefetchInterval,
|
|
159
|
+
...queryOptions,
|
|
153
160
|
});
|
|
154
161
|
}
|
|
155
162
|
/**
|
|
@@ -159,8 +166,7 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
159
166
|
*/
|
|
160
167
|
export function useInvalidateBorrowData() {
|
|
161
168
|
const queryClient = useQueryClient();
|
|
162
|
-
const { queryKey }
|
|
163
|
-
const invalidateBorrowDataHandler = useCallback(() => queryClient.invalidateQueries({ queryKey }), [queryClient, queryKey]);
|
|
169
|
+
const invalidateBorrowDataHandler = useCallback(() => queryClient.invalidateQueries({ queryKey: [BORROW_DATA_QUERY_KEY] }), [queryClient]);
|
|
164
170
|
return {
|
|
165
171
|
invalidateBorrowData: invalidateBorrowDataHandler,
|
|
166
172
|
};
|
|
@@ -172,8 +178,7 @@ export function useInvalidateBorrowData() {
|
|
|
172
178
|
*/
|
|
173
179
|
export function useResetBorrowData() {
|
|
174
180
|
const queryClient = useQueryClient();
|
|
175
|
-
const { queryKey }
|
|
176
|
-
const resetBorrowDataHandler = useCallback(() => queryClient.resetQueries({ queryKey }), [queryClient, queryKey]);
|
|
181
|
+
const resetBorrowDataHandler = useCallback(() => queryClient.resetQueries({ queryKey: [BORROW_DATA_QUERY_KEY] }), [queryClient]);
|
|
177
182
|
return {
|
|
178
183
|
resetBorrowData: resetBorrowDataHandler,
|
|
179
184
|
};
|
|
@@ -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;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":"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,EAAwB,aAAa,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EACL,qBAAqB,EAErB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAEL,wBAAwB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,yEAAyE;AACzE,2EAA2E;AAC3E,8EAA8E;AAC9E,0BAA0B;AAC1B,qEAAqE;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;QACE,MAAM,EAAE;YACN;gBACE,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;aAChB;SACF;QACD,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP;gBACE,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;aAChB;SACF;QACD,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;CACqB,CAAA;AAExB,MAAM,cAAc,GAAqB;IACvC,QAAQ;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,QAAQ;IACR,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM;CACP,CAAA;AAqBD,MAAM,wBAAwB,GAAG,wBAAwB,CAAA;AAEzD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAgD,EAAE;IAElD,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAA;IAEhE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IAExC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAEhE,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAExD,MAAM,OAAO,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAA;IAE3E,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,CAe3C,EAAE,EAAE;QACH,MAAM,gBAAgB,GAAG;YACvB,GAAG,UAAU;YACb,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM;YAC9B,GAAG,EAAE,YAAY,CACf,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,KAAK,CAAC,GAAG,EACpB,UAAU,CAAC,QAAQ,CACpB;SACF,CAAA;QAED,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAE5C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,QAAQ,aAAa,EAAE,cAAc,GAAG,CAC5E,CAAA;YACH,CAAC;YAED,MAAM,YAAY,GAA8B;gBAC9C,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,QAAQ;gBACR,MAAM;gBACN,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC9C,CAAA;YAED,IAAI,GAAG,GAAG;gBACR,KAAK,EAAE,kBAAkB,CACvB,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,QAAQ,EACrB,UAAU,CAAC,QAAQ,CACpB;gBACD,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC;aAClE,CAAA;YACD,IAAI,wBAAwB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,GAAG,GAAG,YAAY,CAChB,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,QAAQ,EACrB,UAAU,CAAC,KAAK,CAAC,GAAG,EACpB,UAAU,CAAC,QAAQ,CACpB,CAAA;YACH,CAAC;YACD,IAAI,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,GAAG,GAAG,YAAY,CAChB,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,QAAQ,EACrB,UAAU,CAAC,KAAK,CAAC,EAAE,EACnB,UAAU,CAAC,QAAQ,CACpB,CAAA;YACH,CAAC;YAED,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,gBAAgB,EAAE,GAAG,oBAAoB,CAAC,CAAC,MAAM,CACvD,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,GAAG;YACN,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK;SACtB,CAAC,EACF,EAA6C,CAC9C,CAAA;IACH,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CACvC,CAAA;IAED,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE;YACR,wBAAwB;YACxB,aAAa,EAAE,cAAc;YAC7B,OAAO,CAAC,MAAM;YACd,OAAO;SACR;QACD,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,cAAc,IAAI,CAAC,CAAC,mBAAmB;QACjE,eAAe,EAAE,gBAAgB;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,SAAS,GAAG,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAA;YAC9C,MAAM,YAAY,GAAG,SAAS;gBAC5B,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,qBAAqB,CAAA;YAEzB,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACtD,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;gBACvC,OAAO;oBACL,OAAO;oBACP,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,WAAoB;oBAClC,IAAI,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;oBACrC,OAAO;iBACR,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;YAC5D,CAAC;YAED,OAAO,OAAO,CAAC,GAAG,CAAC;gBACjB,UAAU,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;gBACvE,aAAa,CAAC,MAAM,EAAE;oBACpB,SAAS,EAAE,cAAc;iBAC1B,CAAC;gBACF,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACtB,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBAC9B,CAAC,CAAwC;aAC1C,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,EAAE,cAAc;QACtB,GAAG,gBAAgB;KACpB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,+BAA+B,GAAG,WAAW,CACjD,GAAG,EAAE,CACH,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,EACzE,CAAC,WAAW,CAAC,CACd,CAAA;IAED,OAAO;QACL,wBAAwB,EAAE,+BAA+B;KAC1D,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,yBAAyB,GAAG,WAAW,CAC3C,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,EACxE,CAAC,WAAW,CAAC,CACd,CAAA;IAED,OAAO;QACL,kBAAkB,EAAE,yBAAyB;KAC9C,CAAA;AACH,CAAC"}
|
|
@@ -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,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useConfig, UseReadContractsReturnType } from "wagmi"
|
|
2
|
+
import { readContracts } from "wagmi/actions"
|
|
2
3
|
import { useCallback, useMemo } from "react"
|
|
3
|
-
import { useQueryClient } from "@tanstack/react-query"
|
|
4
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query"
|
|
4
5
|
import { formatUnits } from "viem"
|
|
5
6
|
import {
|
|
6
7
|
mainnetBorrowContracts,
|
|
@@ -15,6 +16,7 @@ import { convertToUsd } from "../utils/currency"
|
|
|
15
16
|
import { useCollateralPrice } from "./useCollateralPrice"
|
|
16
17
|
|
|
17
18
|
const DEBT_AND_COLL_PRECISION = 18
|
|
19
|
+
const BORROW_DATA_QUERY_KEY = "passport.borrowData"
|
|
18
20
|
|
|
19
21
|
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
20
22
|
// support importing JSON as const yet so types cannot be inferred from the
|
|
@@ -96,6 +98,7 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
96
98
|
const walletAccount = useWalletAccount()
|
|
97
99
|
|
|
98
100
|
const { data: collateralPrice } = useCollateralPrice()
|
|
101
|
+
const config = useConfig()
|
|
99
102
|
|
|
100
103
|
const contractAddress = useMemo(() => {
|
|
101
104
|
if (environment === "mainnet") {
|
|
@@ -112,8 +115,8 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
112
115
|
|
|
113
116
|
const chainId = CHAIN_ID[environment]
|
|
114
117
|
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
const contracts = useMemo(
|
|
119
|
+
() => [
|
|
117
120
|
{
|
|
118
121
|
abi: TROVE_MANAGER_ABI,
|
|
119
122
|
address: contractAddress.troveManager,
|
|
@@ -130,59 +133,80 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
130
133
|
chainId,
|
|
131
134
|
},
|
|
132
135
|
],
|
|
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
|
-
DEBT_AND_COLL_PRECISION,
|
|
164
|
-
),
|
|
165
|
-
0n, // Ensure that debt is not negative
|
|
166
|
-
)
|
|
167
|
-
const formattedDebtInUsd = formatUnits(
|
|
168
|
-
debtInUsdValue,
|
|
136
|
+
[chainId, contractAddress, walletAccount.accountAddress],
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
const selectBorrowData = useCallback(
|
|
140
|
+
(data: UseReadContractsReturnType<typeof contracts>["data"]) => {
|
|
141
|
+
if (!data || data.some((item) => !item.result))
|
|
142
|
+
throw new Error("No borrow data available")
|
|
143
|
+
|
|
144
|
+
if (!collateralPrice) throw new Error("Collateral price not available")
|
|
145
|
+
|
|
146
|
+
const [rawCollateral, principal, interest] = data[0].result! as readonly [
|
|
147
|
+
bigint,
|
|
148
|
+
bigint,
|
|
149
|
+
bigint,
|
|
150
|
+
bigint,
|
|
151
|
+
bigint,
|
|
152
|
+
bigint,
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
const gasCompensation = data[1].result! as bigint
|
|
156
|
+
|
|
157
|
+
const btcDetails = getAsset("BTC")
|
|
158
|
+
|
|
159
|
+
const collateral = {
|
|
160
|
+
value: rawCollateral,
|
|
161
|
+
decimals: btcDetails.decimals,
|
|
162
|
+
symbol: btcDetails.symbol,
|
|
163
|
+
formatted: formatUnits(rawCollateral, DEBT_AND_COLL_PRECISION),
|
|
164
|
+
usd: convertToUsd(
|
|
165
|
+
rawCollateral,
|
|
169
166
|
DEBT_AND_COLL_PRECISION,
|
|
170
|
-
|
|
167
|
+
collateralPrice,
|
|
168
|
+
DEBT_AND_COLL_PRECISION,
|
|
169
|
+
),
|
|
170
|
+
}
|
|
171
171
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
const debtInUsdValue = bigIntMax(
|
|
173
|
+
normalizePrecision(
|
|
174
|
+
principal + interest - gasCompensation,
|
|
175
|
+
DEBT_AND_COLL_PRECISION,
|
|
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
|
+
}
|
|
176
188
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
},
|
|
182
|
-
staleTime: borrowDataRefetchInterval,
|
|
183
|
-
refetchInterval: borrowDataRefetchInterval,
|
|
184
|
-
...queryOptions,
|
|
189
|
+
return {
|
|
190
|
+
collateral,
|
|
191
|
+
debtInUsd,
|
|
192
|
+
}
|
|
185
193
|
},
|
|
194
|
+
[collateralPrice],
|
|
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
|
|
203
|
+
},
|
|
204
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice,
|
|
205
|
+
retry: 1,
|
|
206
|
+
select: selectBorrowData,
|
|
207
|
+
staleTime: borrowDataRefetchInterval,
|
|
208
|
+
refetchInterval: borrowDataRefetchInterval,
|
|
209
|
+
...queryOptions,
|
|
186
210
|
})
|
|
187
211
|
}
|
|
188
212
|
|
|
@@ -194,11 +218,9 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
194
218
|
export function useInvalidateBorrowData() {
|
|
195
219
|
const queryClient = useQueryClient()
|
|
196
220
|
|
|
197
|
-
const { queryKey } = useBorrowData()
|
|
198
|
-
|
|
199
221
|
const invalidateBorrowDataHandler = useCallback(
|
|
200
|
-
() => queryClient.invalidateQueries({ queryKey }),
|
|
201
|
-
[queryClient
|
|
222
|
+
() => queryClient.invalidateQueries({ queryKey: [BORROW_DATA_QUERY_KEY] }),
|
|
223
|
+
[queryClient],
|
|
202
224
|
)
|
|
203
225
|
|
|
204
226
|
return {
|
|
@@ -214,11 +236,9 @@ export function useInvalidateBorrowData() {
|
|
|
214
236
|
export function useResetBorrowData() {
|
|
215
237
|
const queryClient = useQueryClient()
|
|
216
238
|
|
|
217
|
-
const { queryKey } = useBorrowData()
|
|
218
|
-
|
|
219
239
|
const resetBorrowDataHandler = useCallback(
|
|
220
|
-
() => queryClient.resetQueries({ queryKey }),
|
|
221
|
-
[queryClient
|
|
240
|
+
() => queryClient.resetQueries({ queryKey: [BORROW_DATA_QUERY_KEY] }),
|
|
241
|
+
[queryClient],
|
|
222
242
|
)
|
|
223
243
|
|
|
224
244
|
return {
|
|
@@ -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
|