1- import { type Address } from 'viem' ;
21import { usePublicClient } from 'wagmi' ;
32import invariant from 'tiny-invariant' ;
43import { useQuery } from '@tanstack/react-query' ;
@@ -10,9 +9,97 @@ import { getStakingVaultContract } from 'modules/vaults/contracts/staking-vault'
109import { getDashboardContract } from 'modules/vaults/contracts/dashboard' ;
1110import { STRATEGY_LAZY } from 'consts/react-query-strategies' ;
1211import { getHealthScore } from 'utils/get-health-score' ;
12+ import { DEFAULT_ADMIN_ROLE , NODE_OPERATOR_MANAGER_ROLE } from 'consts/roles' ;
13+ import { bigIntMax } from 'utils/bigint-math' ;
1314
1415import type { VaultInfo } from 'types' ;
15- import { DEFAULT_ADMIN_ROLE , NODE_OPERATOR_MANAGER_ROLE } from 'consts/roles' ;
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+ } ;
16103
17104export const useSingleVaultData = ( vaultAddress : Address | undefined ) => {
18105 const { shares } = useLidoSDK ( ) ;
@@ -25,78 +112,7 @@ export const useSingleVaultData = (vaultAddress: Address | undefined) => {
25112 invariant ( publicClient , 'PublicClient is not defined' ) ;
26113 invariant ( vaultAddress , 'vaultAddress is not defined' ) ;
27114
28- const vaultHubContract = getVaultHubContract ( publicClient ) ;
29- const vaultContract = getStakingVaultContract ( vaultAddress , publicClient ) ;
30-
31- const [ owner , inOutDelta , nodeOperator , locked ] = await Promise . all ( [
32- vaultContract . read . owner ( ) ,
33- vaultContract . read . inOutDelta ( ) ,
34- vaultContract . read . nodeOperator ( ) ,
35- vaultContract . read . locked ( ) ,
36- ] ) ;
37-
38- const balance = await publicClient . getBalance ( {
39- address : vaultContract . address ,
40- } ) ;
41-
42- const vaultHubSocket = await vaultHubContract . read . vaultSocket ( [
43- vaultAddress ,
44- ] ) ;
45-
46- const dashboardContract = getDashboardContract ( owner , publicClient ) ;
47-
48- const [
49- valuation ,
50- nodeOperatorUnclaimedFee ,
51- withdrawableEther ,
52- nodeOperatorFeeBP ,
53- totalMintableShares ,
54- defaultAdmins ,
55- nodeOperatorManagers ,
56- confirmExpiry ,
57- ] = await Promise . all ( [
58- dashboardContract . read . totalValue ( ) ,
59- dashboardContract . read . nodeOperatorUnclaimedFee ( ) ,
60- dashboardContract . read . withdrawableEther ( ) ,
61- dashboardContract . read . nodeOperatorFeeBP ( ) ,
62- dashboardContract . read . totalMintingCapacity ( ) ,
63- dashboardContract . read . getRoleMembers ( [ DEFAULT_ADMIN_ROLE ] ) ,
64- dashboardContract . read . getRoleMembers ( [ NODE_OPERATOR_MANAGER_ROLE ] ) ,
65- dashboardContract . read . getConfirmExpiry ( ) ,
66- ] ) ;
67-
68- const [ mintedEth , mintableEth , ethLimit ] = await Promise . all ( [
69- shares . convertToSteth ( vaultHubSocket . liabilityShares ) ,
70- shares . convertToSteth (
71- totalMintableShares - vaultHubSocket . liabilityShares ,
72- ) ,
73- shares . convertToSteth ( vaultHubSocket . shareLimit ) ,
74- ] ) ;
75-
76- const healthScore = getHealthScore ( valuation , vaultHubSocket ) ;
77-
78- return {
79- mintable : mintableEth ,
80- minted : mintedEth ,
81- nodeOperator,
82- ethLimit,
83- valuation,
84- inOutDelta,
85- locked,
86- apr : null ,
87- healthScore,
88- address : vaultAddress ,
89- totalMintableShares,
90- nodeOperatorUnclaimedFee,
91- withdrawableEther,
92- owner,
93- balance,
94- nodeOperatorFeeBP,
95- defaultAdmins,
96- nodeOperatorManagers,
97- confirmExpiry,
98- ...vaultHubSocket ,
99- } ;
115+ return getVaultData ( { publicClient, shares, vaultAddress } ) ;
100116 } ,
101117 ...STRATEGY_LAZY ,
102118 } ) ;
@@ -116,7 +132,6 @@ export const useVaultData = (
116132 queryFn : async ( ) : Promise < VaultInfo [ ] > => {
117133 invariant ( publicClient , 'PublicClient is not ready' ) ;
118134
119- const vaultHubContract = getVaultHubContract ( publicClient ) ;
120135 const vaults : VaultInfo [ ] = [ ] ;
121136
122137 if ( vaultsAddressesList ?. length && vaultsAddressesList . length === 0 ) {
@@ -125,80 +140,13 @@ export const useVaultData = (
125140
126141 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
127142 for ( const vaultAddress of vaultsAddressesList ! ) {
128- const vaultContract = getStakingVaultContract (
129- vaultAddress ,
130- publicClient ,
143+ vaults . push (
144+ await getVaultData ( {
145+ publicClient,
146+ vaultAddress,
147+ shares,
148+ } ) ,
131149 ) ;
132-
133- const [ owner , inOutDelta , nodeOperator , locked ] = await Promise . all ( [
134- vaultContract . read . owner ( ) ,
135- vaultContract . read . inOutDelta ( ) ,
136- vaultContract . read . nodeOperator ( ) ,
137- vaultContract . read . locked ( ) ,
138- ] ) ;
139-
140- const balance = await publicClient . getBalance ( {
141- address : vaultContract . address ,
142- } ) ;
143-
144- const vaultHubSocket = await vaultHubContract . read . vaultSocket ( [
145- vaultAddress ,
146- ] ) ;
147-
148- const dashboardContract = getDashboardContract ( owner , publicClient ) ;
149-
150- const [
151- valuation ,
152- nodeOperatorUnclaimedFee ,
153- withdrawableEther ,
154- nodeOperatorFeeBP ,
155- totalMintableShares ,
156- confirmExpiry ,
157- defaultAdmins ,
158- nodeOperatorManagers ,
159- ] = await Promise . all ( [
160- dashboardContract . read . totalValue ( ) ,
161- dashboardContract . read . nodeOperatorUnclaimedFee ( ) ,
162- dashboardContract . read . withdrawableEther ( ) ,
163- dashboardContract . read . nodeOperatorFeeBP ( ) ,
164- dashboardContract . read . totalMintingCapacity ( ) ,
165- dashboardContract . read . getConfirmExpiry ( ) ,
166- dashboardContract . read . getRoleMembers ( [ DEFAULT_ADMIN_ROLE ] ) ,
167- dashboardContract . read . getRoleMembers ( [ NODE_OPERATOR_MANAGER_ROLE ] ) ,
168- ] ) ;
169-
170- const [ mintedEth , mintableEth , ethLimit ] = await Promise . all ( [
171- shares . convertToSteth ( vaultHubSocket . liabilityShares ) ,
172- shares . convertToSteth (
173- totalMintableShares - vaultHubSocket . liabilityShares ,
174- ) ,
175- shares . convertToSteth ( vaultHubSocket . shareLimit ) ,
176- ] ) ;
177-
178- const healthScore = getHealthScore ( valuation , vaultHubSocket ) ;
179-
180- vaults . push ( {
181- mintable : mintableEth ,
182- minted : mintedEth ,
183- nodeOperator,
184- ethLimit,
185- valuation,
186- inOutDelta,
187- locked,
188- apr : null ,
189- healthScore,
190- address : vaultAddress ,
191- totalMintableShares,
192- nodeOperatorUnclaimedFee,
193- withdrawableEther,
194- owner,
195- balance,
196- nodeOperatorFeeBP,
197- confirmExpiry,
198- defaultAdmins,
199- nodeOperatorManagers,
200- ...vaultHubSocket ,
201- } ) ;
202150 }
203151
204152 return vaults ;
0 commit comments