Skip to content

Lighthouse VC sends validator registrations for exited validators #7342

Open
@michaelsproul

Description

@michaelsproul

After a validator exits, the Lighthouse VC still tries to send registrations to the builder here:

fn collect_preparation_data(&self, spec: &ChainSpec) -> Vec<ProposerPreparationData> {
let log = self.context.log();
self.collect_proposal_data(|pubkey, proposal_data| {
if let Some(fee_recipient) = proposal_data.fee_recipient {
Some(ProposerPreparationData {
// Ignore fee recipients for keys without indices, they are inactive.
validator_index: proposal_data.validator_index?,
fee_recipient,
})
} else {
if spec.bellatrix_fork_epoch.is_some() {
error!(
log,
"Validator is missing fee recipient";
"msg" => "update validator_definitions.yml",
"pubkey" => ?pubkey
);
}
None
}
})
}

The attempted activity filtering there only works when the validator has no validator index.

However this works fine if the BN is Lighthouse, because Lighthouse BN filters out the registrations for inactive validators here:

// Filter out validators who are not 'active' or 'pending'.
is_active_or_pending.then_some({
(
(
ProposerPreparationData {
validator_index: validator_index as u64,
fee_recipient: register_data
.message
.fee_recipient,
},
Some(register_data.message.gas_limit),
),
register_data,
)
})

I'm not sure what other BNs do, except for Caplin which reportedly does no filtering and triggers errors on mev-boost as a result.

To fix this we would need to make Lighthouse VC a bit smarter. It currently does no tracking of exit status for validators.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestval-clientRelates to the validator client binary

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions