@@ -33,7 +33,7 @@ Validators request a [`SignedExecutionPayloadBid`][signed-execution-payload-bid]
3333from the external builder network to put it in their ` SignedBeaconBlock ` . The
3434external builder network broadcasts the
3535[ ` SignedExecutionPayloadEnvelope ` ] [ signed-execution-payload-envelope ]
36- corresponding to the bid to the PTC committee.
36+ corresponding to the included bid to the PTC committee.
3737
3838## Containers
3939
@@ -46,7 +46,8 @@ that other builders do not DDOS or run replay attacks on the builder.
4646
4747``` python
4848class RequestAuth (Container ):
49- builder_index: BuilderIndex
49+ builder_pubkey: BLSPubkey
50+ slot: Slot
5051```
5152
5253#### ` SignedRequestAuth `
@@ -63,43 +64,42 @@ class SignedRequestAuth(Container):
6364
6465To construct the ` RequestAuth ` , we need to fill the following information:
6566
66- - ` builder_index ` : This is the on-chain index associated with the builder.
67+ - ` builder_pubkey ` : The BLS public key of the builder the request is intended for.
68+ - ` slot ` : The slot for which the bid is being requested.
6769
6870The validator constructs the ` SignedRequestAuth ` by signing the ` RequestAuth ` .
6971It sends the ` SignedRequestAuth ` in the request body along with the request to
7072get the bid in the [ ` getExecutionPayloadBid ` ] [ get-execution-payload-bid-api ] API
71- call. It also sends the ` SignedRequestAuth ` in the
72- [ ` submitBuilderPreferences ` ] [ submit-builder-preferences-api ] to avoid replay
73- attacks. A builder could send the preferences to another builder and make them do
74- unnecessary work.
73+ call.
7574
7675## Proposer Preferences
7776
78- * Note* : Validator registrations (` ValidatorRegistrationV2 ` ) are ** deprecated** in
79- favour of [ ` ProposerPreferences ` ] [ proposer-preferences ] from the consensus specs.
77+ * Note* : Validator registrations (` ValidatorRegistrationV1 ` ) are ** deprecated**
78+ in favour of [ ` ProposerPreferences ` ] [ proposer-preferences ] from the consensus
79+ specs.
8080
8181General validator preferences are now communicated via the
8282[ ` proposer_preferences ` ] [ proposer-preferences-topic ] gossip topic defined in the
83- [ Gloas consensus specs] [ gloas-consensus-specs ] . Validators broadcast
84- [ ` SignedProposerPreferences ` ] [ proposer-preferences ] messages at the beginning of
85- each epoch containing:
83+ [ Gloas consensus specs] [ gloas-consensus-specs ] . At the beginning of each epoch,
84+ validators broadcast [ ` SignedProposerPreferences ` ] [ proposer-preferences ] messages
85+ for their proposal slots in the next epoch containing:
8686
8787- ` fee_recipient ` : An execution layer address where fees for the validator
8888 should go.
8989- ` gas_limit ` : The value a validator prefers for the execution block gas limit.
9090- ` validator_index ` : The validator's index.
91- - ` proposal_slot ` : The slot in which the validator will be proposing. This can be
92- looked up in ` state.proposer_lookahead ` .
91+ - ` proposal_slot ` : The slot in which the validator will be proposing. This can
92+ be looked up in ` state.proposer_lookahead ` .
9393
9494Builders SHOULD subscribe to this gossip topic to learn about proposer
9595preferences for upcoming slots.
9696
9797## Builder Preferences
9898
9999For per-builder preferences that cannot be communicated via a global gossip
100- topic, validators send [ ` SignedBuilderPreferences ` ] [ builder-preferences ] directly
101- to the builder via the [ ` submitBuilderPreferences ` ] [ submit-builder-preferences-api ]
102- API call.
100+ topic, validators send [ ` SignedBuilderPreferences ` ] [ builder-preferences ]
101+ directly to the builder via the
102+ [ ` submitBuilderPreferences ` ] [ submit-builder-preferences-api ] API call.
103103
104104### Constructing the ` BuilderPreferences `
105105
@@ -108,23 +108,28 @@ To construct the `BuilderPreferences`, the validator client assembles a
108108
109109- ` builder_pubkey ` : The BLS public key of the builder that these preferences are
110110 intended for.
111+ - ` slot ` : The proposal slot of the validator. This can be looked up in
112+ ` state.proposer_lookahead ` .
111113- ` max_trusted_bid ` : The amount (in Gwei) the proposer is willing to accept as a
112114 trusted execution layer payment from the builder.
113115
114116### Builder Preferences dissemination
115117
116118Validators send builder preferences to each builder they wish to interact with
117- for their upcoming proposal slots. Validators run
118- ` create_builder_preferences ` at every epoch boundary to create builder
119- preferences for all the builders they trust.
119+ for their upcoming proposal slots. Validators run ` create_builder_preferences `
120+ in the epoch prior to the epoch in which the validator will become a proposer,
121+ using the ` proposer_lookahead ` in the beacon state to determine their proposal
122+ slots.
120123
121124``` python
122125def create_builder_preferences (
123126 builder_pubkey : BLSPubkey,
127+ slot : Slot,
124128 max_trusted_bid : uint64,
125129) -> BuilderPreferences:
126130 return BuilderPreferences(
127131 builder_pubkey = builder_pubkey,
132+ slot = slot,
128133 max_trusted_bid = max_trusted_bid,
129134 )
130135```
@@ -175,9 +180,9 @@ builder pays the validator via execution layer payments, we require that the
175180bid's fee recipient matches the validators expected fee recipient and not the
176181builder's fee recipient.
177182
178- To express per-builder preferences we need validators to remember which
179- builder preferences they have sent to each builder, so that they can validate
180- whether the bid conforms to the preferences expressed by the validators.
183+ To express per-builder preferences we need validators to remember which builder
184+ preferences they have sent to each builder, so that they can validate whether
185+ the bid conforms to the preferences expressed by the validators.
181186
182187## Block proposal
183188
@@ -200,10 +205,8 @@ block on top of a beacon `state` must take the following actions:
2002053 . The proposer returns the ` SignedBeaconBlock ` back to the upstream block
201206 building software via [ ` submitSignedBeaconBlock ` ] [ submit-signed-beacon-block ]
202207 API call.
203- 4 . The upstream block building software constructs the
204- [ ` SignedExecutionPayloadEnvelope ` ] [ signed-execution-payload-envelope ]
205- corresponding to the
206- [ ` SignedExecutionPayloadBid ` ] [ signed-execution-payload-bid ] and broadcasts it
208+ 4 . The upstream block building software constructs the corresponding
209+ [ ` SignedExecutionPayloadEnvelope ` ] [ signed-execution-payload-envelope ] and broadcasts it
207210 to the PTC committee.
208211
209212## Liveness failsafe
0 commit comments