Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions rocketpool/node/check-minipool-exit-requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,11 @@ func (t *checkMinipoolExitRequests) run(state *state.NetworkStateIndex) error {
continue
}

// Enforcing other operators' exit requests is an opt-in duty.
if !t.cfg.Smartnode.EnableEnforcerTasks.Value.(bool) {
continue
}

// Skip requests within the cooperative exit phase
deadline := time.Unix(int64(request.RequestTimestamp), 0).Add(cooperativeExitPhase)
if time.Now().Before(deadline) {
Expand Down
15 changes: 15 additions & 0 deletions shared/services/config/smartnode-config.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,9 @@ type SmartnodeConfig struct {
// The toggle for enabling pDAO proposal verification duties
VerifyProposals config.Parameter `yaml:"verifyProposals,omitempty"`

// The toggle for opting into Enforcer duties
EnableEnforcerTasks config.Parameter `yaml:"enableEnforcerTasks,omitempty"`

// Delay for automatic queue assignment
AutoAssignmentDelay config.Parameter `yaml:"autoAssignmentDelay,omitempty"`
}
Expand Down Expand Up @@ -227,6 +230,17 @@ func NewSmartnodeConfig(cfg *RocketPoolConfig) *SmartnodeConfig {
OverwriteOnUpgrade: false,
},

EnableEnforcerTasks: config.Parameter{
ID: "enableEnforcerTasks",
Name: "Enable Enforcer tasks",
Description: "Check this box to opt into Enforcer duties. Your node will enforce other operators' minipool exit requests after the cooperative exit phase by submitting forced exits or proofs that legacy minipools did not exit. These tasks spend ETH from your node wallet on transaction fees and may require CPU and memory intensive proof generation.\n\nYour own validators will continue to exit voluntarily in response to exit requests when this is disabled.",
Type: config.ParameterType_Bool,
Default: map[config.Network]interface{}{config.Network_All: false},
AffectsContainers: []config.ContainerID{config.ContainerID_Node},
CanBeBlank: false,
OverwriteOnUpgrade: false,
},

AutoAssignmentDelay: config.Parameter{
ID: "autoAssignmentDelay",
Name: "Automatic queue assignment delay",
Expand Down Expand Up @@ -327,6 +341,7 @@ func (cfg *SmartnodeConfig) GetParameters() []*config.Parameter {
&cfg.AutoTxGasThreshold,
&cfg.DistributeThreshold,
&cfg.VerifyProposals,
&cfg.EnableEnforcerTasks,
&cfg.AutoAssignmentDelay,
&cfg.RewardsTreeMode,
&cfg.PriceBalanceSubmissionReferenceTimestamp,
Expand Down
Loading