1- import { type Address } from 'viem' ;
21import { usePublicClient } from 'wagmi' ;
32import invariant from 'tiny-invariant' ;
43import { useQuery } from '@tanstack/react-query' ;
@@ -10,11 +9,98 @@ 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' ;
13-
14- import type { VaultInfo } from 'types' ;
1512import { DEFAULT_ADMIN_ROLE , NODE_OPERATOR_MANAGER_ROLE } from 'consts/roles' ;
1613import { 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+
18104export 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