ProposerPreferencesService and BuilderPreferencesService share the same structure, both submit ahead of upcoming proposals using the same submission window, track submissions per epoch keyed by the proposer shuffling dependent root and resubmit when it shifts. They only differ in what they sign and where they submit, SignedProposerPreferences broadcast via the beacon node vs BuilderPreferencesRequest submitted to each configured builder.
The shared duty window and dependent root tracking could be extracted, or the two services combined into one.
See #9832 (comment)
ProposerPreferencesServiceandBuilderPreferencesServiceshare the same structure, both submit ahead of upcoming proposals using the same submission window, track submissions per epoch keyed by the proposer shuffling dependent root and resubmit when it shifts. They only differ in what they sign and where they submit,SignedProposerPreferencesbroadcast via the beacon node vsBuilderPreferencesRequestsubmitted to each configured builder.The shared duty window and dependent root tracking could be extracted, or the two services combined into one.
See #9832 (comment)