Skip to content

Commit 89cce7e

Browse files
committed
fix: common vault fetch
1 parent 5f7a66f commit 89cce7e

File tree

1 file changed

+96
-149
lines changed

1 file changed

+96
-149
lines changed

modules/vaults/hooks/use-vault-data.ts

Lines changed: 96 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { type Address } from 'viem';
21
import { usePublicClient } from 'wagmi';
32
import invariant from 'tiny-invariant';
43
import { useQuery } from '@tanstack/react-query';
@@ -10,11 +9,98 @@ import { getStakingVaultContract } from 'modules/vaults/contracts/staking-vault'
109
import { getDashboardContract } from 'modules/vaults/contracts/dashboard';
1110
import { STRATEGY_LAZY } from 'consts/react-query-strategies';
1211
import { getHealthScore } from 'utils/get-health-score';
13-
14-
import type { VaultInfo } from 'types';
1512
import { DEFAULT_ADMIN_ROLE, NODE_OPERATOR_MANAGER_ROLE } from 'consts/roles';
1613
import { bigIntMax } from 'utils/bigint-math';
1714

15+
import type { VaultInfo } from 'types';
16+
import type { PublicClient, Address } from 'viem';
17+
import type { LidoSDKShares } from '@lidofinance/lido-ethereum-sdk/shares';
18+
19+
type VaultDataArgs = {
20+
publicClient: PublicClient;
21+
vaultAddress: Address;
22+
shares: LidoSDKShares;
23+
};
24+
25+
const getVaultData = async ({
26+
publicClient,
27+
vaultAddress,
28+
shares,
29+
}: VaultDataArgs): Promise<VaultInfo> => {
30+
const vaultHubContract = getVaultHubContract(publicClient);
31+
const vaultContract = getStakingVaultContract(vaultAddress, publicClient);
32+
33+
const [owner, inOutDelta, nodeOperator, locked] = await Promise.all([
34+
vaultContract.read.owner(),
35+
vaultContract.read.inOutDelta(),
36+
vaultContract.read.nodeOperator(),
37+
vaultContract.read.locked(),
38+
]);
39+
40+
const balance = await publicClient.getBalance({
41+
address: vaultContract.address,
42+
});
43+
44+
const vaultHubSocket = await vaultHubContract.read.vaultSocket([
45+
vaultAddress,
46+
]);
47+
48+
const dashboardContract = getDashboardContract(owner, publicClient);
49+
50+
const [
51+
valuation,
52+
nodeOperatorUnclaimedFee,
53+
withdrawableEther,
54+
nodeOperatorFeeBP,
55+
totalMintableShares,
56+
defaultAdmins,
57+
nodeOperatorManagers,
58+
confirmExpiry,
59+
] = await Promise.all([
60+
dashboardContract.read.totalValue(),
61+
dashboardContract.read.nodeOperatorUnclaimedFee(),
62+
dashboardContract.read.withdrawableEther(),
63+
dashboardContract.read.nodeOperatorFeeBP(),
64+
dashboardContract.read.totalMintingCapacity(),
65+
dashboardContract.read.getRoleMembers([DEFAULT_ADMIN_ROLE]),
66+
dashboardContract.read.getRoleMembers([NODE_OPERATOR_MANAGER_ROLE]),
67+
dashboardContract.read.getConfirmExpiry(),
68+
]);
69+
70+
const [mintedEth, mintableEth, ethLimit] = await Promise.all([
71+
shares.convertToSteth(vaultHubSocket.liabilityShares),
72+
shares.convertToSteth(
73+
bigIntMax(totalMintableShares - vaultHubSocket.liabilityShares, 0n),
74+
),
75+
shares.convertToSteth(vaultHubSocket.shareLimit),
76+
]);
77+
78+
const healthScore = getHealthScore(valuation, vaultHubSocket);
79+
80+
return {
81+
mintable: mintableEth,
82+
minted: mintedEth,
83+
nodeOperator,
84+
ethLimit,
85+
valuation,
86+
inOutDelta,
87+
locked,
88+
apr: null,
89+
healthScore,
90+
address: vaultAddress,
91+
totalMintableShares,
92+
nodeOperatorUnclaimedFee,
93+
withdrawableEther,
94+
owner,
95+
balance,
96+
nodeOperatorFeeBP,
97+
defaultAdmins,
98+
nodeOperatorManagers,
99+
confirmExpiry,
100+
...vaultHubSocket,
101+
};
102+
};
103+
18104
export const useSingleVaultData = (vaultAddress: Address | undefined) => {
19105
const { shares } = useLidoSDK();
20106
const publicClient = usePublicClient();
@@ -26,78 +112,7 @@ export const useSingleVaultData = (vaultAddress: Address | undefined) => {
26112
invariant(publicClient, 'PublicClient is not defined');
27113
invariant(vaultAddress, 'vaultAddress is not defined');
28114

29-
const vaultHubContract = getVaultHubContract(publicClient);
30-
const vaultContract = getStakingVaultContract(vaultAddress, publicClient);
31-
32-
const [owner, inOutDelta, nodeOperator, locked] = await Promise.all([
33-
vaultContract.read.owner(),
34-
vaultContract.read.inOutDelta(),
35-
vaultContract.read.nodeOperator(),
36-
vaultContract.read.locked(),
37-
]);
38-
39-
const balance = await publicClient.getBalance({
40-
address: vaultContract.address,
41-
});
42-
43-
const vaultHubSocket = await vaultHubContract.read.vaultSocket([
44-
vaultAddress,
45-
]);
46-
47-
const dashboardContract = getDashboardContract(owner, publicClient);
48-
49-
const [
50-
valuation,
51-
nodeOperatorUnclaimedFee,
52-
withdrawableEther,
53-
nodeOperatorFeeBP,
54-
totalMintableShares,
55-
defaultAdmins,
56-
nodeOperatorManagers,
57-
confirmExpiry,
58-
] = await Promise.all([
59-
dashboardContract.read.totalValue(),
60-
dashboardContract.read.nodeOperatorUnclaimedFee(),
61-
dashboardContract.read.withdrawableEther(),
62-
dashboardContract.read.nodeOperatorFeeBP(),
63-
dashboardContract.read.totalMintingCapacity(),
64-
dashboardContract.read.getRoleMembers([DEFAULT_ADMIN_ROLE]),
65-
dashboardContract.read.getRoleMembers([NODE_OPERATOR_MANAGER_ROLE]),
66-
dashboardContract.read.getConfirmExpiry(),
67-
]);
68-
69-
const [mintedEth, mintableEth, ethLimit] = await Promise.all([
70-
shares.convertToSteth(vaultHubSocket.liabilityShares),
71-
shares.convertToSteth(
72-
totalMintableShares - vaultHubSocket.liabilityShares,
73-
),
74-
shares.convertToSteth(vaultHubSocket.shareLimit),
75-
]);
76-
77-
const healthScore = getHealthScore(valuation, vaultHubSocket);
78-
79-
return {
80-
mintable: mintableEth,
81-
minted: mintedEth,
82-
nodeOperator,
83-
ethLimit,
84-
valuation,
85-
inOutDelta,
86-
locked,
87-
apr: null,
88-
healthScore,
89-
address: vaultAddress,
90-
totalMintableShares,
91-
nodeOperatorUnclaimedFee,
92-
withdrawableEther,
93-
owner,
94-
balance,
95-
nodeOperatorFeeBP,
96-
defaultAdmins,
97-
nodeOperatorManagers,
98-
confirmExpiry,
99-
...vaultHubSocket,
100-
};
115+
return getVaultData({ publicClient, shares, vaultAddress });
101116
},
102117
...STRATEGY_LAZY,
103118
});
@@ -117,7 +132,6 @@ export const useVaultData = (
117132
queryFn: async (): Promise<VaultInfo[]> => {
118133
invariant(publicClient, 'PublicClient is not ready');
119134

120-
const vaultHubContract = getVaultHubContract(publicClient);
121135
const vaults: VaultInfo[] = [];
122136

123137
if (vaultsAddressesList?.length && vaultsAddressesList.length === 0) {
@@ -126,80 +140,13 @@ export const useVaultData = (
126140

127141
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
128142
for (const vaultAddress of vaultsAddressesList!) {
129-
const vaultContract = getStakingVaultContract(
130-
vaultAddress,
131-
publicClient,
143+
vaults.push(
144+
await getVaultData({
145+
publicClient,
146+
vaultAddress,
147+
shares,
148+
}),
132149
);
133-
134-
const [owner, inOutDelta, nodeOperator, locked] = await Promise.all([
135-
vaultContract.read.owner(),
136-
vaultContract.read.inOutDelta(),
137-
vaultContract.read.nodeOperator(),
138-
vaultContract.read.locked(),
139-
]);
140-
141-
const balance = await publicClient.getBalance({
142-
address: vaultContract.address,
143-
});
144-
145-
const vaultHubSocket = await vaultHubContract.read.vaultSocket([
146-
vaultAddress,
147-
]);
148-
149-
const dashboardContract = getDashboardContract(owner, publicClient);
150-
151-
const [
152-
valuation,
153-
nodeOperatorUnclaimedFee,
154-
withdrawableEther,
155-
nodeOperatorFeeBP,
156-
totalMintableShares,
157-
confirmExpiry,
158-
defaultAdmins,
159-
nodeOperatorManagers,
160-
] = await Promise.all([
161-
dashboardContract.read.totalValue(),
162-
dashboardContract.read.nodeOperatorUnclaimedFee(),
163-
dashboardContract.read.withdrawableEther(),
164-
dashboardContract.read.nodeOperatorFeeBP(),
165-
dashboardContract.read.totalMintingCapacity(),
166-
dashboardContract.read.getConfirmExpiry(),
167-
dashboardContract.read.getRoleMembers([DEFAULT_ADMIN_ROLE]),
168-
dashboardContract.read.getRoleMembers([NODE_OPERATOR_MANAGER_ROLE]),
169-
]);
170-
171-
const [mintedEth, mintableEth, ethLimit] = await Promise.all([
172-
shares.convertToSteth(vaultHubSocket.liabilityShares),
173-
shares.convertToSteth(
174-
bigIntMax(totalMintableShares - vaultHubSocket.liabilityShares, 0n),
175-
),
176-
shares.convertToSteth(vaultHubSocket.shareLimit),
177-
]);
178-
179-
const healthScore = getHealthScore(valuation, vaultHubSocket);
180-
181-
vaults.push({
182-
mintable: mintableEth,
183-
minted: mintedEth,
184-
nodeOperator,
185-
ethLimit,
186-
valuation,
187-
inOutDelta,
188-
locked,
189-
apr: null,
190-
healthScore,
191-
address: vaultAddress,
192-
totalMintableShares,
193-
nodeOperatorUnclaimedFee,
194-
withdrawableEther,
195-
owner,
196-
balance,
197-
nodeOperatorFeeBP,
198-
confirmExpiry,
199-
defaultAdmins,
200-
nodeOperatorManagers,
201-
...vaultHubSocket,
202-
});
203150
}
204151

205152
return vaults;

0 commit comments

Comments
 (0)