Skip to content

Commit 19ca26b

Browse files
committed
Remove RocketPoolConfig dependency from treegen
1 parent 400edce commit 19ca26b

13 files changed

Lines changed: 207 additions & 161 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-v8-rolling.go

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,28 @@ import (
2525

2626
// Implementation for tree generator ruleset v8 with rolling record support
2727
type treeGeneratorImpl_v8_rolling struct {
28-
networkState *state.NetworkState
29-
rewardsFile *RewardsFile_v3
30-
elSnapshotHeader *types.Header
31-
log *log.ColorLogger
32-
logPrefix string
33-
rp *rocketpool.RocketPool
34-
cfg *config.RocketPoolConfig
35-
bc beacon.Client
36-
opts *bind.CallOpts
37-
smoothingPoolBalance *big.Int
38-
intervalDutiesInfo *IntervalDutiesInfo
39-
slotsPerEpoch uint64
40-
validatorIndexMap map[string]*MinipoolInfo
41-
elStartTime time.Time
42-
elEndTime time.Time
43-
validNetworkCache map[uint64]bool
44-
epsilon *big.Int
45-
intervalSeconds *big.Int
46-
beaconConfig beacon.Eth2Config
47-
rollingRecord *RollingRecord
48-
nodeDetails map[common.Address]*NodeSmoothingDetails
49-
invalidNetworkNodes map[common.Address]uint64
28+
networkState *state.NetworkState
29+
rewardsFile *RewardsFile_v3
30+
elSnapshotHeader *types.Header
31+
log *log.ColorLogger
32+
logPrefix string
33+
rp *rocketpool.RocketPool
34+
previousRewardsPoolAddresses []common.Address
35+
bc beacon.Client
36+
opts *bind.CallOpts
37+
smoothingPoolBalance *big.Int
38+
intervalDutiesInfo *IntervalDutiesInfo
39+
slotsPerEpoch uint64
40+
validatorIndexMap map[string]*MinipoolInfo
41+
elStartTime time.Time
42+
elEndTime time.Time
43+
validNetworkCache map[uint64]bool
44+
epsilon *big.Int
45+
intervalSeconds *big.Int
46+
beaconConfig beacon.Eth2Config
47+
rollingRecord *RollingRecord
48+
nodeDetails map[common.Address]*NodeSmoothingDetails
49+
invalidNetworkNodes map[common.Address]uint64
5050
}
5151

5252
// Create a new tree generator
@@ -97,20 +97,20 @@ func (r *treeGeneratorImpl_v8_rolling) getRulesetVersion() uint64 {
9797
return r.rewardsFile.RulesetVersion
9898
}
9999

100-
func (r *treeGeneratorImpl_v8_rolling) generateTree(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*GenerateTreeResult, error) {
100+
func (r *treeGeneratorImpl_v8_rolling) 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
r.rewardsFile.MinipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
116116
r.rewardsFile.MinipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
@@ -173,18 +173,17 @@ func (r *treeGeneratorImpl_v8_rolling) generateTree(rp *rocketpool.RocketPool, c
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_v8_rolling) approximateStakerShareOfSmoothingPool(rp *rocketpool.RocketPool, cfg *config.RocketPoolConfig, bc beacon.Client) (*big.Int, error) {
176+
func (r *treeGeneratorImpl_v8_rolling) 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
r.rewardsFile.MinipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
190189
r.rewardsFile.MinipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
@@ -812,6 +811,6 @@ func (r *treeGeneratorImpl_v8_rolling) getCheaters() map[common.Address]bool {
812811
return cheatingNodes
813812
}
814813

815-
func (r *treeGeneratorImpl_v8_rolling) saveFiles(treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
816-
return saveJSONArtifacts(r.cfg.Smartnode, treeResult, nodeTrusted)
814+
func (r *treeGeneratorImpl_v8_rolling) saveFiles(smartnode *config.SmartnodeConfig, treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
815+
return saveJSONArtifacts(smartnode, treeResult, nodeTrusted)
817816
}

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

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,31 @@ var six = big.NewInt(6)
2828

2929
// Implementation for tree generator ruleset v8
3030
type treeGeneratorImpl_v8 struct {
31-
networkState *state.NetworkState
32-
rewardsFile *RewardsFile_v3
33-
elSnapshotHeader *types.Header
34-
log *log.ColorLogger
35-
logPrefix string
36-
rp *rocketpool.RocketPool
37-
cfg *config.RocketPoolConfig
38-
bc beacon.Client
39-
opts *bind.CallOpts
40-
nodeDetails []*NodeSmoothingDetails
41-
smoothingPoolBalance *big.Int
42-
intervalDutiesInfo *IntervalDutiesInfo
43-
slotsPerEpoch uint64
44-
validatorIndexMap map[string]*MinipoolInfo
45-
elStartTime time.Time
46-
elEndTime time.Time
47-
validNetworkCache map[uint64]bool
48-
epsilon *big.Int
49-
intervalSeconds *big.Int
50-
beaconConfig beacon.Eth2Config
51-
validatorStatusMap map[rptypes.ValidatorPubkey]beacon.ValidatorStatus
52-
totalAttestationScore *big.Int
53-
successfulAttestations uint64
54-
genesisTime time.Time
55-
invalidNetworkNodes map[common.Address]uint64
31+
networkState *state.NetworkState
32+
rewardsFile *RewardsFile_v3
33+
elSnapshotHeader *types.Header
34+
log *log.ColorLogger
35+
logPrefix string
36+
rp *rocketpool.RocketPool
37+
previousRewardsPoolAddresses []common.Address
38+
bc beacon.Client
39+
opts *bind.CallOpts
40+
nodeDetails []*NodeSmoothingDetails
41+
smoothingPoolBalance *big.Int
42+
intervalDutiesInfo *IntervalDutiesInfo
43+
slotsPerEpoch uint64
44+
validatorIndexMap map[string]*MinipoolInfo
45+
elStartTime time.Time
46+
elEndTime time.Time
47+
validNetworkCache map[uint64]bool
48+
epsilon *big.Int
49+
intervalSeconds *big.Int
50+
beaconConfig beacon.Eth2Config
51+
validatorStatusMap map[rptypes.ValidatorPubkey]beacon.ValidatorStatus
52+
totalAttestationScore *big.Int
53+
successfulAttestations uint64
54+
genesisTime time.Time
55+
invalidNetworkNodes map[common.Address]uint64
5656
}
5757

5858
// Create a new tree generator
@@ -104,20 +104,20 @@ func (r *treeGeneratorImpl_v8) getRulesetVersion() uint64 {
104104
return r.rewardsFile.RulesetVersion
105105
}
106106

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

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

111111
// Provision some struct params
112112
r.rp = rp
113-
r.cfg = cfg
113+
r.previousRewardsPoolAddresses = previousRewardsPoolAddresses
114114
r.bc = bc
115115
r.validNetworkCache = map[uint64]bool{
116116
0: true,
117117
}
118118

119119
// Set the network name
120-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
120+
r.rewardsFile.Network = networkName
121121
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
122122
r.rewardsFile.MinipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
123123
r.rewardsFile.MinipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
@@ -181,18 +181,17 @@ func (r *treeGeneratorImpl_v8) generateTree(rp *rocketpool.RocketPool, cfg *conf
181181

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

187187
r.rp = rp
188-
r.cfg = cfg
189188
r.bc = bc
190189
r.validNetworkCache = map[uint64]bool{
191190
0: true,
192191
}
193192

194193
// Set the network name
195-
r.rewardsFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
194+
r.rewardsFile.Network = networkName
196195
r.rewardsFile.MinipoolPerformanceFile.Network = r.rewardsFile.Network
197196
r.rewardsFile.MinipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
198197
r.rewardsFile.MinipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
@@ -536,7 +535,7 @@ func (r *treeGeneratorImpl_v8) calculateEthRewards(checkBeaconPerformance bool)
536535

537536
// Get the start time of this interval based on the event from the previous one
538537
//previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.cfg, r.rewardsFile.Index-1, r.opts) // This is immutable so querying at the head is fine and mitigates issues around calls for pruned EL state
539-
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.cfg, r.rewardsFile.Index-1, nil)
538+
previousIntervalEvent, err := GetRewardSnapshotEvent(r.rp, r.previousRewardsPoolAddresses, r.rewardsFile.Index-1, nil)
540539
if err != nil {
541540
return err
542541
}
@@ -1207,6 +1206,6 @@ func (r *treeGeneratorImpl_v8) getMinipoolBondAndNodeFee(details *rpstate.Native
12071206
return currentBond, currentFee
12081207
}
12091208

1210-
func (r *treeGeneratorImpl_v8) saveFiles(treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1211-
return saveJSONArtifacts(r.cfg.Smartnode, treeResult, nodeTrusted)
1209+
func (r *treeGeneratorImpl_v8) saveFiles(smartnode *config.SmartnodeConfig, treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
1210+
return saveJSONArtifacts(smartnode, treeResult, nodeTrusted)
12121211
}

shared/services/rewards/generator-impl-v9-rolling.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,32 @@ import (
2424

2525
// Implementation for tree generator ruleset v9 with rolling record support
2626
type treeGeneratorImpl_v9_rolling struct {
27-
networkState *state.NetworkState
28-
rewardsFile *ssz_types.SSZFile_v1
29-
elSnapshotHeader *types.Header
30-
snapshotEnd *SnapshotEnd
31-
log *log.ColorLogger
32-
logPrefix string
33-
rp *rocketpool.RocketPool
34-
cfg *config.RocketPoolConfig
35-
bc beacon.Client
36-
opts *bind.CallOpts
37-
smoothingPoolBalance *big.Int
38-
intervalDutiesInfo *IntervalDutiesInfo
39-
slotsPerEpoch uint64
40-
validatorIndexMap map[string]*MinipoolInfo
41-
elStartTime time.Time
42-
elEndTime time.Time
43-
validNetworkCache map[uint64]bool
44-
epsilon *big.Int
45-
intervalSeconds *big.Int
46-
beaconConfig beacon.Eth2Config
47-
rollingRecord *RollingRecord
48-
nodeDetails map[common.Address]*NodeSmoothingDetails
49-
invalidNetworkNodes map[common.Address]uint64
50-
minipoolPerformanceFile *MinipoolPerformanceFile_v2
51-
nodeRewards map[common.Address]*ssz_types.NodeReward
52-
networkRewards map[ssz_types.Layer]*ssz_types.NetworkReward
27+
networkState *state.NetworkState
28+
rewardsFile *ssz_types.SSZFile_v1
29+
elSnapshotHeader *types.Header
30+
snapshotEnd *SnapshotEnd
31+
log *log.ColorLogger
32+
logPrefix string
33+
rp *rocketpool.RocketPool
34+
previousRewardsPoolAddresses []common.Address
35+
bc beacon.Client
36+
opts *bind.CallOpts
37+
smoothingPoolBalance *big.Int
38+
intervalDutiesInfo *IntervalDutiesInfo
39+
slotsPerEpoch uint64
40+
validatorIndexMap map[string]*MinipoolInfo
41+
elStartTime time.Time
42+
elEndTime time.Time
43+
validNetworkCache map[uint64]bool
44+
epsilon *big.Int
45+
intervalSeconds *big.Int
46+
beaconConfig beacon.Eth2Config
47+
rollingRecord *RollingRecord
48+
nodeDetails map[common.Address]*NodeSmoothingDetails
49+
invalidNetworkNodes map[common.Address]uint64
50+
minipoolPerformanceFile *MinipoolPerformanceFile_v2
51+
nodeRewards map[common.Address]*ssz_types.NodeReward
52+
networkRewards map[ssz_types.Layer]*ssz_types.NetworkReward
5353
}
5454

5555
// Create a new tree generator
@@ -94,21 +94,21 @@ func (r *treeGeneratorImpl_v9_rolling) getRulesetVersion() uint64 {
9494
return r.rewardsFile.RulesetVersion
9595
}
9696

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

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

101101
// Provision some struct params
102102
r.rp = rp
103-
r.cfg = cfg
103+
r.previousRewardsPoolAddresses = previousRewardsPoolAddresses
104104
r.bc = bc
105105
r.validNetworkCache = map[uint64]bool{
106106
0: true,
107107
}
108108

109109
// Set the network name
110-
r.rewardsFile.Network, _ = ssz_types.NetworkFromString(fmt.Sprint(cfg.Smartnode.Network.Value))
111-
r.minipoolPerformanceFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
110+
r.rewardsFile.Network, _ = ssz_types.NetworkFromString(networkName)
111+
r.minipoolPerformanceFile.Network = networkName
112112
r.minipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
113113
r.minipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
114114

@@ -178,19 +178,18 @@ func (r *treeGeneratorImpl_v9_rolling) generateTree(rp *rocketpool.RocketPool, c
178178

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

184184
r.rp = rp
185-
r.cfg = cfg
186185
r.bc = bc
187186
r.validNetworkCache = map[uint64]bool{
188187
0: true,
189188
}
190189

191190
// Set the network name
192-
r.rewardsFile.Network, _ = ssz_types.NetworkFromString(fmt.Sprint(cfg.Smartnode.Network.Value))
193-
r.minipoolPerformanceFile.Network = fmt.Sprint(cfg.Smartnode.Network.Value)
191+
r.rewardsFile.Network, _ = ssz_types.NetworkFromString(networkName)
192+
r.minipoolPerformanceFile.Network = networkName
194193
r.minipoolPerformanceFile.RewardsFileVersion = r.rewardsFile.RewardsFileVersion
195194
r.minipoolPerformanceFile.RulesetVersion = r.rewardsFile.RulesetVersion
196195

@@ -719,6 +718,6 @@ func (r *treeGeneratorImpl_v9_rolling) getCheaters() map[common.Address]bool {
719718
return cheatingNodes
720719
}
721720

722-
func (r *treeGeneratorImpl_v9_rolling) saveFiles(treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
723-
return saveRewardsArtifacts(r.cfg.Smartnode, treeResult, nodeTrusted)
721+
func (r *treeGeneratorImpl_v9_rolling) saveFiles(smartnode *config.SmartnodeConfig, treeResult *GenerateTreeResult, nodeTrusted bool) (cid.Cid, map[string]cid.Cid, error) {
722+
return saveRewardsArtifacts(smartnode, treeResult, nodeTrusted)
724723
}

0 commit comments

Comments
 (0)