-
Notifications
You must be signed in to change notification settings - Fork 904
Description
After a validator exits, the Lighthouse VC still tries to send registrations to the builder here:
lighthouse/validator_client/validator_services/src/preparation_service.rs
Lines 276 to 297 in 54f7bc5
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:
lighthouse/beacon_node/http_api/src/lib.rs
Lines 3913 to 3927 in 54f7bc5
// 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.