Skip to content

Commit f3cf320

Browse files
committed
Remove RocketPoolConfig dependency from treegen
1 parent bd3f1f8 commit f3cf320

22 files changed

Lines changed: 514 additions & 477 deletions

rocketpool/watchtower/generate-rewards-tree.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ func (t *generateRewardsTree) generateRewardsTree(index uint64) {
139139
generationPrefix := fmt.Sprintf("[Interval %d Tree]", index)
140140
t.log.Printlnf("%s Starting generation of Merkle rewards tree for interval %d.", generationPrefix, index)
141141

142+
// Get previous rewards pool addresses
143+
previousRewardsPoolAddresses := t.cfg.Smartnode.GetPreviousRewardsPoolAddresses()
144+
142145
// Find the event for this interval
143-
rewardsEvent, err := rprewards.GetRewardSnapshotEvent(t.rp, t.cfg, index, nil)
146+
rewardsEvent, err := rprewards.GetRewardSnapshotEvent(t.rp, previousRewardsPoolAddresses, index, nil)
144147
if err != nil {
145148
t.handleError(fmt.Errorf("%s Error getting event for interval %d: %w", generationPrefix, index, err))
146149
return

shared/services/rewards/generator-impl-v1.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,28 @@ import (
2828

2929
// Implementation for tree generator ruleset v1
3030
type treeGeneratorImpl_v1 struct {
31-
rewardsFile *RewardsFile_v1
32-
elSnapshotHeader *types.Header
33-
log *log.ColorLogger
34-
logPrefix string
35-
rp *rocketpool.RocketPool
36-
cfg *config.RocketPoolConfig
37-
bc beacon.Client
38-
opts *bind.CallOpts
39-
nodeAddresses []common.Address
40-
nodeDetails []*NodeSmoothingDetails
41-
smoothingPoolBalance *big.Int
42-
smoothingPoolAddress common.Address
43-
intervalDutiesInfo *IntervalDutiesInfo
44-
slotsPerEpoch uint64
45-
validatorIndexMap map[string]*MinipoolInfo
46-
elStartTime time.Time
47-
elEndTime time.Time
48-
validNetworkCache map[uint64]bool
49-
epsilon *big.Int
50-
intervalSeconds *big.Int
51-
beaconConfig beacon.Eth2Config
52-
invalidNetworkNodes map[common.Address]uint64
31+
rewardsFile *RewardsFile_v1
32+
elSnapshotHeader *types.Header
33+
log *log.ColorLogger
34+
logPrefix string
35+
rp *rocketpool.RocketPool
36+
previousRewardsPoolAddresses []common.Address
37+
bc beacon.Client
38+
opts *bind.CallOpts
39+
nodeAddresses []common.Address
40+
nodeDetails []*NodeSmoothingDetails
41+
smoothingPoolBalance *big.Int
42+
smoothingPoolAddress common.Address
43+
intervalDutiesInfo *IntervalDutiesInfo
44+
slotsPerEpoch uint64
45+
validatorIndexMap map[string]*MinipoolInfo
46+
elStartTime time.Time
47+
elEndTime time.Time
48+
validNetworkCache map[uint64]bool
49+
epsilon *big.Int
50+
intervalSeconds *big.Int
51+
beaconConfig beacon.Eth2Config
52+
invalidNetworkNodes map[common.Address]uint64
5353
}
5454

5555
// Get the version of the ruleset used by this generator
@@ -97,20 +97,20 @@ func newTreeGeneratorImpl_v1(log *log.ColorLogger, logPrefix string, index uint6
9797
}
9898
}
9999

100-
func (r *treeGeneratorImpl_v1) generateTree(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*GenerateTreeResult, error) {
100+
func (r *treeGeneratorImpl_v1) generateTree(rp *rocketpool.RocketPool, networkName string, previousRewardsPoolAddresses []common.Address, bc beacon.Client) (*GenerateTreeResult, error) {
101101

102102
r.log.Printlnf("%s Generating tree using Ruleset v%d.", r.logPrefix, r.rewardsFile.RulesetVersion)
103103

104104
// Provision some struct params
105105
r.rp = rp
106-
r.cfg = cfg
106+
r.previousRewardsPoolAddresses = previousRewardsPoolAddresses
107107
r.bc = bc
108108
r.validNetworkCache = map[uint64]bool{
109109
0: true,
110110
}
111111

112112
// Set the network name
113-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
113+
r.rewardsFile.Network = networkName
114114
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
115115

116116
// Get the addresses for all nodes
@@ -169,18 +169,17 @@ func (r *treeGeneratorImpl_v1) generateTree(rp *rocketpool.RocketPool, cfg *conf
169169

170170
// Quickly calculates an approximate of the staker's share of the smoothing pool balance without processing Beacon performance
171171
// Used for approximate returns in the rETH ratio update
172-
func (r *treeGeneratorImpl_v1) approximateStakerShareOfSmoothingPool(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*big.Int, error) {
172+
func (r *treeGeneratorImpl_v1) approximateStakerShareOfSmoothingPool(rp *rocketpool.RocketPool, networkName string, bc beacon.Client) (*big.Int, error) {
173173
r.log.Printlnf("%s Approximating tree using Ruleset v%d.", r.logPrefix, r.rewardsFile.RulesetVersion)
174174

175175
r.rp = rp
176-
r.cfg = cfg
177176
r.bc = bc
178177
r.validNetworkCache = map[uint64]bool{
179178
0: true,
180179
}
181180

182181
// Set the network name
183-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
182+
r.rewardsFile.Network = networkName
184183
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
185184

186185
// Get the addresses for all nodes
@@ -240,17 +239,17 @@ func (r *treeGeneratorImpl_v1) updateNetworksAndTotals() {
240239
func (r *treeGeneratorImpl_v1) calculateRplRewards() error {
241240

242241
snapshotBlockTime := time.Unix(int64(r.elSnapshotHeader.Time), 0)
243-
intervalDuration, err := state.GetClaimIntervalTime(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
242+
intervalDuration, err := state.GetClaimIntervalTime(r.rewardsFile.Index, r.rp, r.opts)
244243
if err != nil {
245244
return fmt.Errorf("error getting required registration time: %w", err)
246245
}
247246

248247
// Handle node operator rewards
249-
nodeOpPercent, err := state.GetNodeOperatorRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
248+
nodeOpPercent, err := state.GetNodeOperatorRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
250249
if err != nil {
251250
return err
252251
}
253-
pendingRewards, err := state.GetPendingRPLRewards(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
252+
pendingRewards, err := state.GetPendingRPLRewards(r.rewardsFile.Index, r.rp, r.opts)
254253
if err != nil {
255254
return err
256255
}
@@ -374,7 +373,7 @@ func (r *treeGeneratorImpl_v1) calculateRplRewards() error {
374373
r.log.Printlnf("%s Calculated rewards: %s (error = %s wei)", r.logPrefix, totalCalculatedNodeRewards.String(), delta.String())
375374

376375
// Handle Oracle DAO rewards
377-
oDaoPercent, err := state.GetTrustedNodeOperatorRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
376+
oDaoPercent, err := state.GetTrustedNodeOperatorRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
378377
if err != nil {
379378
return err
380379
}
@@ -470,7 +469,7 @@ func (r *treeGeneratorImpl_v1) calculateRplRewards() error {
470469
r.log.Printlnf("%s Calculated rewards: %s (error = %s wei)", r.logPrefix, totalCalculatedOdaoRewards.String(), delta.String())
471470

472471
// Get expected Protocol DAO rewards
473-
pDaoPercent, err := state.GetProtocolDaoRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
472+
pDaoPercent, err := state.GetProtocolDaoRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
474473
if err != nil {
475474
return err
476475
}
@@ -523,7 +522,7 @@ func (r *treeGeneratorImpl_v1) calculateEthRewards(checkBeaconPerformance bool)
523522
r.slotsPerEpoch = r.beaconConfig.SlotsPerEpoch
524523

525524
// Get the start time of this interval based on the event from the previous one
526-
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.cfg, r.rewardsFile.Index-1, r.opts)
525+
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.previousRewardsPoolAddresses, r.rewardsFile.Index-1, r.opts)
527526
if err != nil {
528527
return err
529528
}
@@ -1145,6 +1144,6 @@ func (r *treeGeneratorImpl_v1) getStartBlocksForInterval(previousIntervalEvent r
11451144
return startElHeader, nil
11461145
}
11471146

1148-
func (r *treeGeneratorImpl_v1) saveFiles(treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1149-
return saveJSONArtifacts(r.cfg.Smartnode, treeResult, nodeTrusted)
1147+
func (r *treeGeneratorImpl_v1) saveFiles(smartnode *config.SmartnodeConfig, treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1148+
return saveJSONArtifacts(smartnode, treeResult, nodeTrusted)
11501149
}

shared/services/rewards/generator-impl-v2.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,28 @@ const (
3232

3333
// Implementation for tree generator ruleset v2
3434
type treeGeneratorImpl_v2 struct {
35-
rewardsFile *RewardsFile_v1
36-
elSnapshotHeader *types.Header
37-
log *log.ColorLogger
38-
logPrefix string
39-
rp *rocketpool.RocketPool
40-
cfg *config.RocketPoolConfig
41-
bc beacon.Client
42-
opts *bind.CallOpts
43-
nodeAddresses []common.Address
44-
nodeDetails []*NodeSmoothingDetails
45-
smoothingPoolBalance *big.Int
46-
smoothingPoolAddress common.Address
47-
intervalDutiesInfo *IntervalDutiesInfo
48-
slotsPerEpoch uint64
49-
validatorIndexMap map[string]*MinipoolInfo
50-
elStartTime time.Time
51-
elEndTime time.Time
52-
validNetworkCache map[uint64]bool
53-
epsilon *big.Int
54-
intervalSeconds *big.Int
55-
beaconConfig beacon.Eth2Config
56-
invalidNetworkNodes map[common.Address]uint64
35+
rewardsFile *RewardsFile_v1
36+
elSnapshotHeader *types.Header
37+
log *log.ColorLogger
38+
logPrefix string
39+
rp *rocketpool.RocketPool
40+
previousRewardsPoolAddresses []common.Address
41+
bc beacon.Client
42+
opts *bind.CallOpts
43+
nodeAddresses []common.Address
44+
nodeDetails []*NodeSmoothingDetails
45+
smoothingPoolBalance *big.Int
46+
smoothingPoolAddress common.Address
47+
intervalDutiesInfo *IntervalDutiesInfo
48+
slotsPerEpoch uint64
49+
validatorIndexMap map[string]*MinipoolInfo
50+
elStartTime time.Time
51+
elEndTime time.Time
52+
validNetworkCache map[uint64]bool
53+
epsilon *big.Int
54+
intervalSeconds *big.Int
55+
beaconConfig beacon.Eth2Config
56+
invalidNetworkNodes map[common.Address]uint64
5757
}
5858

5959
// Create a new tree generator
@@ -101,20 +101,20 @@ func (r *treeGeneratorImpl_v2) getRulesetVersion() uint64 {
101101
return r.rewardsFile.RulesetVersion
102102
}
103103

104-
func (r *treeGeneratorImpl_v2) generateTree(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*GenerateTreeResult, error) {
104+
func (r *treeGeneratorImpl_v2) generateTree(rp *rocketpool.RocketPool, networkName string, previousRewardsPoolAddresses []common.Address, bc beacon.Client) (*GenerateTreeResult, error) {
105105

106106
r.log.Printlnf("%s Generating tree using Ruleset v%d.", r.logPrefix, r.rewardsFile.RulesetVersion)
107107

108108
// Provision some struct params
109109
r.rp = rp
110-
r.cfg = cfg
110+
r.previousRewardsPoolAddresses = previousRewardsPoolAddresses
111111
r.bc = bc
112112
r.validNetworkCache = map[uint64]bool{
113113
0: true,
114114
}
115115

116116
// Set the network name
117-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
117+
r.rewardsFile.Network = networkName
118118
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
119119

120120
// Get the addresses for all nodes
@@ -173,18 +173,17 @@ func (r *treeGeneratorImpl_v2) generateTree(rp *rocketpool.RocketPool, cfg *conf
173173

174174
// Quickly calculates an approximate of the staker's share of the smoothing pool balance without processing Beacon performance
175175
// Used for approximate returns in the rETH ratio update
176-
func (r *treeGeneratorImpl_v2) approximateStakerShareOfSmoothingPool(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*big.Int, error) {
176+
func (r *treeGeneratorImpl_v2) approximateStakerShareOfSmoothingPool(rp *rocketpool.RocketPool, networkName string, bc beacon.Client) (*big.Int, error) {
177177
r.log.Printlnf("%s Approximating tree using Ruleset v%d.", r.logPrefix, r.rewardsFile.RulesetVersion)
178178

179179
r.rp = rp
180-
r.cfg = cfg
181180
r.bc = bc
182181
r.validNetworkCache = map[uint64]bool{
183182
0: true,
184183
}
185184

186185
// Set the network name
187-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
186+
r.rewardsFile.Network = networkName
188187
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
189188

190189
// Get the addresses for all nodes
@@ -244,17 +243,17 @@ func (r *treeGeneratorImpl_v2) updateNetworksAndTotals() {
244243
func (r *treeGeneratorImpl_v2) calculateRplRewards() error {
245244

246245
snapshotBlockTime := time.Unix(int64(r.elSnapshotHeader.Time), 0)
247-
intervalDuration, err := state.GetClaimIntervalTime(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
246+
intervalDuration, err := state.GetClaimIntervalTime(r.rewardsFile.Index, r.rp, r.opts)
248247
if err != nil {
249248
return fmt.Errorf("error getting required registration time: %w", err)
250249
}
251250

252251
// Handle node operator rewards
253-
nodeOpPercent, err := state.GetNodeOperatorRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
252+
nodeOpPercent, err := state.GetNodeOperatorRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
254253
if err != nil {
255254
return err
256255
}
257-
pendingRewards, err := state.GetPendingRPLRewards(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
256+
pendingRewards, err := state.GetPendingRPLRewards(r.rewardsFile.Index, r.rp, r.opts)
258257
if err != nil {
259258
return err
260259
}
@@ -378,7 +377,7 @@ func (r *treeGeneratorImpl_v2) calculateRplRewards() error {
378377
r.log.Printlnf("%s Calculated rewards: %s (error = %s wei)", r.logPrefix, totalCalculatedNodeRewards.String(), delta.String())
379378

380379
// Handle Oracle DAO rewards
381-
oDaoPercent, err := state.GetTrustedNodeOperatorRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
380+
oDaoPercent, err := state.GetTrustedNodeOperatorRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
382381
if err != nil {
383382
return err
384383
}
@@ -474,7 +473,7 @@ func (r *treeGeneratorImpl_v2) calculateRplRewards() error {
474473
r.log.Printlnf("%s Calculated rewards: %s (error = %s wei)", r.logPrefix, totalCalculatedOdaoRewards.String(), delta.String())
475474

476475
// Get expected Protocol DAO rewards
477-
pDaoPercent, err := state.GetProtocolDaoRewardsPercent(r.cfg, r.rewardsFile.Index, r.rp, r.opts)
476+
pDaoPercent, err := state.GetProtocolDaoRewardsPercent(r.rewardsFile.Index, r.rp, r.opts)
478477
if err != nil {
479478
return err
480479
}
@@ -527,7 +526,7 @@ func (r *treeGeneratorImpl_v2) calculateEthRewards(checkBeaconPerformance bool)
527526
r.slotsPerEpoch = r.beaconConfig.SlotsPerEpoch
528527

529528
// Get the start time of this interval based on the event from the previous one
530-
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.cfg, r.rewardsFile.Index-1, r.opts)
529+
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.previousRewardsPoolAddresses, r.rewardsFile.Index-1, r.opts)
531530
if err != nil {
532531
return err
533532
}
@@ -1240,6 +1239,6 @@ func (r *treeGeneratorImpl_v2) getStartBlocksForInterval(previousIntervalEvent r
12401239
return startElHeader, nil
12411240
}
12421241

1243-
func (r *treeGeneratorImpl_v2) saveFiles(treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1244-
return saveJSONArtifacts(r.cfg.Smartnode, treeResult, nodeTrusted)
1242+
func (r *treeGeneratorImpl_v2) saveFiles(smartnode *config.SmartnodeConfig, treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1243+
return saveJSONArtifacts(smartnode, treeResult, nodeTrusted)
12451244
}

0 commit comments

Comments
 (0)