Implement gloas proposer preference vc duty (#9208)

Allow for the vc to submit its proposer preferences to the network


  


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
This commit is contained in:
Eitan Seri-Levi
2026-05-04 13:33:09 +02:00
committed by GitHub
parent ee61aee659
commit 9cf155a0dd
17 changed files with 694 additions and 41 deletions

View File

@@ -47,6 +47,7 @@ use validator_services::{
latency_service,
payload_attestation_service::PayloadAttestationService,
preparation_service::{PreparationService, PreparationServiceBuilder},
proposer_preferences_service::ProposerPreferencesService,
sync_committee_service::SyncCommitteeService,
};
use validator_store::ValidatorStore as ValidatorStoreTrait;
@@ -85,6 +86,8 @@ pub struct ProductionValidatorClient<E: EthSpec> {
attestation_service: AttestationService<ValidatorStore<E>, SystemTimeSlotClock>,
sync_committee_service: SyncCommitteeService<ValidatorStore<E>, SystemTimeSlotClock>,
payload_attestation_service: PayloadAttestationService<ValidatorStore<E>, SystemTimeSlotClock>,
proposer_preferences_service:
ProposerPreferencesService<ValidatorStore<E>, SystemTimeSlotClock>,
doppelganger_service: Option<Arc<DoppelgangerService>>,
preparation_service: PreparationService<ValidatorStore<E>, SystemTimeSlotClock>,
validator_store: Arc<ValidatorStore<E>>,
@@ -563,6 +566,15 @@ impl<E: EthSpec> ProductionValidatorClient<E> {
context.eth2_config.spec.clone(),
);
let proposer_preferences_service = ProposerPreferencesService::new(
duties_service.clone(),
validator_store.clone(),
slot_clock.clone(),
beacon_nodes.clone(),
context.executor.clone(),
context.eth2_config.spec.clone(),
);
Ok(Self {
context,
duties_service,
@@ -570,6 +582,7 @@ impl<E: EthSpec> ProductionValidatorClient<E> {
attestation_service,
sync_committee_service,
payload_attestation_service,
proposer_preferences_service,
doppelganger_service,
preparation_service,
validator_store,
@@ -646,6 +659,11 @@ impl<E: EthSpec> ProductionValidatorClient<E> {
.clone()
.start_update_service()
.map_err(|e| format!("Unable to start payload attestation service: {}", e))?;
self.proposer_preferences_service
.clone()
.start_update_service()
.map_err(|e| format!("Unable to start proposer preferences service: {}", e))?;
}
self.preparation_service