@@ -32,6 +32,7 @@ import (
3232 ctypes "github.com/berachain/beacon-kit/consensus-types/types"
3333 "github.com/berachain/beacon-kit/errors"
3434 "github.com/berachain/beacon-kit/log"
35+ "github.com/berachain/beacon-kit/primitives/common"
3536 "github.com/berachain/beacon-kit/primitives/crypto"
3637 "github.com/berachain/beacon-kit/primitives/math"
3738 "github.com/berachain/beacon-kit/primitives/net/jwt"
@@ -40,7 +41,7 @@ import (
4041
4142const (
4243 // jwtValidityWindow is the time window for JWT validity (iat claim).
43- jwtValidityWindow = 60 * time .Second
44+ jwtValidityWindow = 5 * time .Minute
4445
4546 // serverShutdownTimeout is the timeout for graceful server shutdown.
4647 serverShutdownTimeout = 5 * time .Second
@@ -52,12 +53,10 @@ const (
5253 authHeaderParts = 2
5354)
5455
55- // PayloadProvider is an interface for retrieving payloads by slot.
56+ // PayloadProvider is an interface for retrieving payloads by slot and parent block root .
5657type PayloadProvider interface {
57- // GetPayloadBySlot returns the payload for the given slot if available.
58- GetPayloadBySlot (ctx context.Context , slot math.Slot ) (ctypes.BuiltExecutionPayloadEnv , error )
59- // GetExpectedProposer returns the expected proposer for the given slot.
60- GetExpectedProposer (slot math.Slot ) (crypto.BLSPubkey , bool )
58+ // GetPayloadBySlot returns the payload for the given slot and parent block root if available.
59+ GetPayloadBySlot (ctx context.Context , slot math.Slot , parentBlockRoot common.Root ) (ctypes.BuiltExecutionPayloadEnv , error )
6160}
6261
6362// Server is the preconf API server that serves GetPayload requests from validators.
@@ -110,7 +109,12 @@ func (s *Server) Start(_ context.Context) error {
110109 s .httpServer = server
111110 s .mu .Unlock ()
112111
113- s .logger .Info ("Starting preconf API server" , "address" , addr )
112+ s .logger .Info ("Starting preconf API server" , "address" , addr , "num_validator_jwts" , len (s .validatorJWTs ))
113+
114+ // Log the registered validator pubkeys for debugging
115+ for pubkey := range s .validatorJWTs {
116+ s .logger .Info ("Registered validator JWT" , "pubkey" , pubkey .String ())
117+ }
114118
115119 go func () {
116120 if err := server .ListenAndServe (); err != nil && err != http .ErrServerClosed {
@@ -169,45 +173,33 @@ func (s *Server) handleGetPayload(w http.ResponseWriter, r *http.Request) {
169173 return
170174 }
171175
172- // Validate that the requesting validator is the expected proposer for this slot
173- expectedProposer , found := s .payloadProvider .GetExpectedProposer (req .Slot )
174- if ! found {
175- s .logger .Warn ("No expected proposer found for slot" , "slot" , req .Slot )
176- s .writeError (w , http .StatusNotFound , "no payload building in progress for slot" )
177- return
178- }
179- if expectedProposer != pubkey {
180- s .logger .Warn ("Validator is not the expected proposer" ,
181- "slot" , req .Slot ,
182- "expected" , expectedProposer .String ()[:16 ]+ "..." ,
183- "actual" , pubkey .String ()[:16 ]+ "..." ,
184- )
185- s .writeError (w , http .StatusForbidden , "validator is not the expected proposer for this slot" )
186- return
187- }
176+ s .logger .Info ("Preconf server received payload request" ,
177+ "slot" , req .Slot ,
178+ "validator_pubkey" , pubkey .String (),
179+ )
188180
189181 // Get the payload from provider
190182 ctx := r .Context ()
191- envelope , err := s .payloadProvider .GetPayloadBySlot (ctx , req .Slot )
183+ startTime := time .Now ()
184+ envelope , err := s .payloadProvider .GetPayloadBySlot (ctx , req .Slot , req .ParentBlockRoot )
185+ elapsed := time .Since (startTime )
192186 if err != nil {
193- s .logger .Warn ("Failed to get payload" , "slot" , req .Slot , "error" , err )
187+ s .logger .Warn ("Failed to get payload" ,
188+ "slot" , req .Slot ,
189+ "error" , err ,
190+ "elapsed" , elapsed ,
191+ )
194192 s .writeError (w , http .StatusNotFound , "payload not available: " + err .Error ())
195193 return
196194 }
197195
198- // Convert to response
199- resp := NewGetPayloadResponseFromEnvelope (envelope )
200-
201- s .logger .Info ("Serving payload to validator" ,
202- "slot" , req .Slot ,
203- "validator" , pubkey .String ()[:16 ]+ "..." ,
204- )
205-
206196 // Write response
207197 w .Header ().Set ("Content-Type" , "application/json" )
208- if err = json .NewEncoder (w ).Encode (resp ); err != nil {
198+ if err = json .NewEncoder (w ).Encode (NewGetPayloadResponseFromEnvelope ( envelope ) ); err != nil {
209199 s .logger .Error ("Failed to encode response" , "error" , err )
210200 }
201+
202+ s .logger .Info ("GetPayloadBySlot completed" , "slot" , req .Slot , "elapsed" , elapsed )
211203}
212204
213205// validateJWT validates the JWT token from the Authorization header and returns
0 commit comments