@@ -9,13 +9,10 @@ import (
99 "github.com/ethereum/go-ethereum/accounts/abi/bind"
1010 "github.com/ethereum/go-ethereum/common"
1111 "github.com/rocket-pool/smartnode/bindings/dao/protocol"
12- "github.com/rocket-pool/smartnode/bindings/rocketpool"
1312 "github.com/rocket-pool/smartnode/bindings/types"
1413 "github.com/rocket-pool/smartnode/bindings/utils/eth"
1514 rpstate "github.com/rocket-pool/smartnode/bindings/utils/state"
1615 "github.com/rocket-pool/smartnode/shared/services/beacon"
17- "github.com/rocket-pool/smartnode/shared/services/config"
18- "github.com/rocket-pool/smartnode/shared/utils/log"
1916 "golang.org/x/sync/errgroup"
2017)
2118
@@ -96,9 +93,6 @@ type NetworkState struct {
9693
9794 // Protocol DAO proposals
9895 ProtocolDaoProposalDetails []protocol.ProtocolDaoProposalDetails `json:"protocol_dao_proposal_details,omitempty"`
99-
100- // Internal fields
101- log * log.ColorLogger
10296}
10397
10498func (ns NetworkState ) MarshalJSON () ([]byte , error ) {
@@ -159,10 +153,10 @@ func (ns *NetworkState) UnmarshalJSON(data []byte) error {
159153}
160154
161155// Creates a snapshot of the entire Rocket Pool network state, on both the Execution and Consensus layers
162- func createNetworkState ( batchContracts config. StateManagerContracts , rp * rocketpool. RocketPool , bc beacon. Client , log * log. ColorLogger , slotNumber uint64 , beaconConfig * beacon. Eth2Config ) (* NetworkState , error ) {
156+ func ( m * NetworkStateManager ) createNetworkState ( slotNumber uint64 ) (* NetworkState , error ) {
163157
164158 // Get the execution block for the given slot
165- beaconBlock , exists , err := bc .GetBeaconBlock (fmt .Sprintf ("%d" , slotNumber ))
159+ beaconBlock , exists , err := m . bc .GetBeaconBlock (fmt .Sprintf ("%d" , slotNumber ))
166160 if err != nil {
167161 return nil , fmt .Errorf ("error getting Beacon block for slot %d: %w" , slotNumber , err )
168162 }
@@ -176,6 +170,11 @@ func createNetworkState(batchContracts config.StateManagerContracts, rp *rocketp
176170 BlockNumber : big .NewInt (0 ).SetUint64 (elBlockNumber ),
177171 }
178172
173+ beaconConfig , err := m .getBeaconConfig ()
174+ if err != nil {
175+ return nil , fmt .Errorf ("error getting Beacon config: %w" , err )
176+ }
177+
179178 // Create the state wrapper
180179 state := & NetworkState {
181180 NodeDetailsByAddress : map [common.Address ]* rpstate.NativeNodeDetails {},
@@ -184,36 +183,35 @@ func createNetworkState(batchContracts config.StateManagerContracts, rp *rocketp
184183 BeaconSlotNumber : slotNumber ,
185184 ElBlockNumber : elBlockNumber ,
186185 BeaconConfig : * beaconConfig ,
187- log : log ,
188186 }
189187
190- state .logLine ("Getting network state for EL block %d, Beacon slot %d" , elBlockNumber , slotNumber )
188+ m .logLine ("Getting network state for EL block %d, Beacon slot %d" , elBlockNumber , slotNumber )
191189 start := time .Now ()
192190
193191 // Network contracts and details
194- contracts , err := rpstate .NewNetworkContracts (rp , batchContracts . Multicaller , batchContracts . BalanceBatcher , opts )
192+ contracts , err := rpstate .NewNetworkContracts (m . rp , m . multicaller , m . balanceBatcher , opts )
195193 if err != nil {
196194 return nil , fmt .Errorf ("error getting network contracts: %w" , err )
197195 }
198- state .NetworkDetails , err = rpstate .NewNetworkDetails (rp , contracts )
196+ state .NetworkDetails , err = rpstate .NewNetworkDetails (m . rp , contracts )
199197 if err != nil {
200198 return nil , fmt .Errorf ("error getting network details: %w" , err )
201199 }
202- state .logLine ("1/6 - Retrieved network details (%s so far)" , time .Since (start ))
200+ m .logLine ("1/6 - Retrieved network details (%s so far)" , time .Since (start ))
203201
204202 // Node details
205- state .NodeDetails , err = rpstate .GetAllNativeNodeDetails (rp , contracts )
203+ state .NodeDetails , err = rpstate .GetAllNativeNodeDetails (m . rp , contracts )
206204 if err != nil {
207205 return nil , fmt .Errorf ("error getting all node details: %w" , err )
208206 }
209- state .logLine ("2/6 - Retrieved node details (%s so far)" , time .Since (start ))
207+ m .logLine ("2/6 - Retrieved node details (%s so far)" , time .Since (start ))
210208
211209 // Minipool details
212- state .MinipoolDetails , err = rpstate .GetAllNativeMinipoolDetails (rp , contracts )
210+ state .MinipoolDetails , err = rpstate .GetAllNativeMinipoolDetails (m . rp , contracts )
213211 if err != nil {
214212 return nil , fmt .Errorf ("error getting all minipool details: %w" , err )
215213 }
216- state .logLine ("3/6 - Retrieved minipool details (%s so far)" , time .Since (start ))
214+ m .logLine ("3/6 - Retrieved minipool details (%s so far)" , time .Since (start ))
217215
218216 // Create the node lookup
219217 for i , details := range state .NodeDetails {
@@ -244,21 +242,21 @@ func createNetworkState(batchContracts config.StateManagerContracts, rp *rocketp
244242 }
245243
246244 // Oracle DAO member details
247- state .OracleDaoMemberDetails , err = rpstate .GetAllOracleDaoMemberDetails (rp , contracts )
245+ state .OracleDaoMemberDetails , err = rpstate .GetAllOracleDaoMemberDetails (m . rp , contracts )
248246 if err != nil {
249247 return nil , fmt .Errorf ("error getting Oracle DAO details: %w" , err )
250248 }
251- state .logLine ("4/6 - Retrieved Oracle DAO details (%s so far)" , time .Since (start ))
249+ m .logLine ("4/6 - Retrieved Oracle DAO details (%s so far)" , time .Since (start ))
252250
253251 // Get the validator stats from Beacon
254- statusMap , err := bc .GetValidatorStatuses (pubkeys , & beacon.ValidatorStatusOptions {
252+ statusMap , err := m . bc .GetValidatorStatuses (pubkeys , & beacon.ValidatorStatusOptions {
255253 Slot : & slotNumber ,
256254 })
257255 if err != nil {
258256 return nil , err
259257 }
260258 state .ValidatorDetails = statusMap
261- state .logLine ("5/6 - Retrieved validator details (total time: %s)" , time .Since (start ))
259+ m .logLine ("5/6 - Retrieved validator details (total time: %s)" , time .Since (start ))
262260
263261 // Get the complete node and user shares
264262 mpds := make ([]* rpstate.NativeMinipoolDetails , len (state .MinipoolDetails ))
@@ -272,26 +270,26 @@ func createNetworkState(batchContracts config.StateManagerContracts, rp *rocketp
272270 beaconBalances [i ] = eth .GweiToWei (float64 (validator .Balance ))
273271 }
274272 }
275- err = rpstate .CalculateCompleteMinipoolShares (rp , contracts , mpds , beaconBalances )
273+ err = rpstate .CalculateCompleteMinipoolShares (m . rp , contracts , mpds , beaconBalances )
276274 if err != nil {
277275 return nil , err
278276 }
279277 state .ValidatorDetails = statusMap
280- state .logLine ("6/6 - Calculated complete node and user balance shares (total time: %s)" , time .Since (start ))
278+ m .logLine ("6/6 - Calculated complete node and user balance shares (total time: %s)" , time .Since (start ))
281279
282280 return state , nil
283281}
284282
285283// Creates a snapshot of the Rocket Pool network, but only for a single node
286284// Also gets the total effective RPL stake of the network for convenience since this is required by several node routines
287- func createNetworkStateForNode ( batchContracts config. StateManagerContracts , rp * rocketpool. RocketPool , bc beacon. Client , log * log. ColorLogger , slotNumber uint64 , beaconConfig * beacon. Eth2Config , nodeAddress common.Address , calculateTotalEffectiveStake bool ) (* NetworkState , * big.Int , error ) {
285+ func ( m * NetworkStateManager ) createNetworkStateForNode ( slotNumber uint64 , nodeAddress common.Address , calculateTotalEffectiveStake bool ) (* NetworkState , * big.Int , error ) {
288286 steps := 5
289287 if calculateTotalEffectiveStake {
290288 steps ++
291289 }
292290
293291 // Get the execution block for the given slot
294- beaconBlock , exists , err := bc .GetBeaconBlock (fmt .Sprintf ("%d" , slotNumber ))
292+ beaconBlock , exists , err := m . bc .GetBeaconBlock (fmt .Sprintf ("%d" , slotNumber ))
295293 if err != nil {
296294 return nil , nil , fmt .Errorf ("error getting Beacon block for slot %d: %w" , slotNumber , err )
297295 }
@@ -305,6 +303,11 @@ func createNetworkStateForNode(batchContracts config.StateManagerContracts, rp *
305303 BlockNumber : big .NewInt (0 ).SetUint64 (elBlockNumber ),
306304 }
307305
306+ beaconConfig , err := m .getBeaconConfig ()
307+ if err != nil {
308+ return nil , nil , fmt .Errorf ("error getting Beacon config: %w" , err )
309+ }
310+
308311 // Create the state wrapper
309312 state := & NetworkState {
310313 NodeDetailsByAddress : map [common.Address ]* rpstate.NativeNodeDetails {},
@@ -313,37 +316,36 @@ func createNetworkStateForNode(batchContracts config.StateManagerContracts, rp *
313316 BeaconSlotNumber : slotNumber ,
314317 ElBlockNumber : elBlockNumber ,
315318 BeaconConfig : * beaconConfig ,
316- log : log ,
317319 }
318320
319- state .logLine ("Getting network state for EL block %d, Beacon slot %d" , elBlockNumber , slotNumber )
321+ m .logLine ("Getting network state for EL block %d, Beacon slot %d" , elBlockNumber , slotNumber )
320322 start := time .Now ()
321323
322324 // Network contracts and details
323- contracts , err := rpstate .NewNetworkContracts (rp , batchContracts . Multicaller , batchContracts . BalanceBatcher , opts )
325+ contracts , err := rpstate .NewNetworkContracts (m . rp , m . multicaller , m . balanceBatcher , opts )
324326 if err != nil {
325327 return nil , nil , fmt .Errorf ("error getting network contracts: %w" , err )
326328 }
327- state .NetworkDetails , err = rpstate .NewNetworkDetails (rp , contracts )
329+ state .NetworkDetails , err = rpstate .NewNetworkDetails (m . rp , contracts )
328330 if err != nil {
329331 return nil , nil , fmt .Errorf ("error getting network details: %w" , err )
330332 }
331- state .logLine ("1/%d - Retrieved network details (%s so far)" , steps , time .Since (start ))
333+ m .logLine ("1/%d - Retrieved network details (%s so far)" , steps , time .Since (start ))
332334
333335 // Node details
334- nodeDetails , err := rpstate .GetNativeNodeDetails (rp , contracts , nodeAddress )
336+ nodeDetails , err := rpstate .GetNativeNodeDetails (m . rp , contracts , nodeAddress )
335337 if err != nil {
336338 return nil , nil , fmt .Errorf ("error getting node details: %w" , err )
337339 }
338340 state .NodeDetails = []rpstate.NativeNodeDetails {nodeDetails }
339- state .logLine ("2/%d - Retrieved node details (%s so far)" , steps , time .Since (start ))
341+ m .logLine ("2/%d - Retrieved node details (%s so far)" , steps , time .Since (start ))
340342
341343 // Minipool details
342- state .MinipoolDetails , err = rpstate .GetNodeNativeMinipoolDetails (rp , contracts , nodeAddress )
344+ state .MinipoolDetails , err = rpstate .GetNodeNativeMinipoolDetails (m . rp , contracts , nodeAddress )
343345 if err != nil {
344346 return nil , nil , fmt .Errorf ("error getting all minipool details: %w" , err )
345347 }
346- state .logLine ("3/%d - Retrieved minipool details (%s so far)" , steps , time .Since (start ))
348+ m .logLine ("3/%d - Retrieved minipool details (%s so far)" , steps , time .Since (start ))
347349
348350 // Create the node lookup
349351 for i , details := range state .NodeDetails {
@@ -377,23 +379,23 @@ func createNetworkStateForNode(batchContracts config.StateManagerContracts, rp *
377379 currentStep := 4
378380 var totalEffectiveStake * big.Int
379381 if calculateTotalEffectiveStake {
380- totalEffectiveStake , err = rpstate .GetTotalEffectiveRplStake (rp , contracts )
382+ totalEffectiveStake , err = rpstate .GetTotalEffectiveRplStake (m . rp , contracts )
381383 if err != nil {
382384 return nil , nil , fmt .Errorf ("error calculating total effective RPL stake for the network: %w" , err )
383385 }
384- state .logLine ("%d/%d - Calculated total effective stake (total time: %s)" , currentStep , steps , time .Since (start ))
386+ m .logLine ("%d/%d - Calculated total effective stake (total time: %s)" , currentStep , steps , time .Since (start ))
385387 currentStep ++
386388 }
387389
388390 // Get the validator stats from Beacon
389- statusMap , err := bc .GetValidatorStatuses (pubkeys , & beacon.ValidatorStatusOptions {
391+ statusMap , err := m . bc .GetValidatorStatuses (pubkeys , & beacon.ValidatorStatusOptions {
390392 Slot : & slotNumber ,
391393 })
392394 if err != nil {
393395 return nil , nil , err
394396 }
395397 state .ValidatorDetails = statusMap
396- state .logLine ("%d/%d - Retrieved validator details (total time: %s)" , currentStep , steps , time .Since (start ))
398+ m .logLine ("%d/%d - Retrieved validator details (total time: %s)" , currentStep , steps , time .Since (start ))
397399 currentStep ++
398400
399401 // Get the complete node and user shares
@@ -408,20 +410,20 @@ func createNetworkStateForNode(batchContracts config.StateManagerContracts, rp *
408410 beaconBalances [i ] = eth .GweiToWei (float64 (validator .Balance ))
409411 }
410412 }
411- err = rpstate .CalculateCompleteMinipoolShares (rp , contracts , mpds , beaconBalances )
413+ err = rpstate .CalculateCompleteMinipoolShares (m . rp , contracts , mpds , beaconBalances )
412414 if err != nil {
413415 return nil , nil , err
414416 }
415417 state .ValidatorDetails = statusMap
416- state .logLine ("%d/%d - Calculated complete node and user balance shares (total time: %s)" , currentStep , steps , time .Since (start ))
418+ m .logLine ("%d/%d - Calculated complete node and user balance shares (total time: %s)" , currentStep , steps , time .Since (start ))
417419 currentStep ++
418420
419421 // Get the protocol DAO proposals
420- state .ProtocolDaoProposalDetails , err = rpstate .GetAllProtocolDaoProposalDetails (rp , contracts )
422+ state .ProtocolDaoProposalDetails , err = rpstate .GetAllProtocolDaoProposalDetails (m . rp , contracts )
421423 if err != nil {
422424 return nil , nil , fmt .Errorf ("error getting Protocol DAO proposal details: %w" , err )
423425 }
424- state .logLine ("%d/%d - Retrieved Protocol DAO proposals (total time: %s)" , currentStep , steps , time .Since (start ))
426+ m .logLine ("%d/%d - Retrieved Protocol DAO proposals (total time: %s)" , currentStep , steps , time .Since (start ))
425427 currentStep ++
426428
427429 return state , totalEffectiveStake , nil
@@ -681,10 +683,3 @@ func (s *NetworkState) CalculateTrueEffectiveStakes(scaleByParticipation bool, a
681683 return effectiveStakes , totalEffectiveStake , nil
682684
683685}
684-
685- // Logs a line if the logger is specified
686- func (s * NetworkState ) logLine (format string , v ... interface {}) {
687- if s .log != nil {
688- s .log .Printlnf (format , v ... )
689- }
690- }
0 commit comments