Compare commits

...

1 Commits

Author SHA1 Message Date
james-prysm
edefc10a47 updating errors 2026-02-09 11:48:23 -06:00
2 changed files with 12 additions and 3 deletions

View File

@@ -163,7 +163,11 @@ func (s *Server) GetBlockV2(w http.ResponseWriter, r *http.Request) {
if blk.Version() >= version.Bellatrix && blk.IsBlinded() {
blk, err = s.ExecutionReconstructor.ReconstructFullBlock(ctx, blk)
if err != nil {
httputil.HandleError(w, errors.Wrapf(err, "could not reconstruct full execution payload to create signed beacon block").Error(), http.StatusBadRequest)
if errors.Is(err, blocks.ErrNonCanonicalBlock) {
httputil.HandleError(w, fmt.Sprintf("no canonical block found for block %s: execution payload is unavailable (block may have been orphaned)", blockId), http.StatusNotFound)
} else {
httputil.HandleError(w, errors.Wrapf(err, "could not reconstruct full execution payload to create signed beacon block").Error(), http.StatusInternalServerError)
}
return
}
}

View File

@@ -27,6 +27,11 @@ var (
// ErrNilBeaconBlock is returned when a nil beacon block is received.
ErrNilBeaconBlock = errors.New("beacon block can't be nil")
errNonBlindedSignedBeaconBlock = errors.New("can only build signed beacon block from blinded format")
// ErrNonCanonicalBlock is returned when a reconstructed execution payload does
// not match the expected payload header. This occurs when the execution layer
// returns the canonical block's payload at the same height instead of the
// requested (orphaned/reorged) block's payload.
ErrNonCanonicalBlock = errors.New("no canonical block found for payload header")
)
// NewSignedBeaconBlock creates a signed beacon block from a protobuf signed beacon block.
@@ -308,11 +313,11 @@ func checkPayloadAgainstHeader(wrappedPayload, payloadHeader interfaces.Executio
return errors.Wrap(err, "could not hash tree root payload header")
}
if payloadRoot != payloadHeaderRoot {
return fmt.Errorf(
return errors.Wrap(ErrNonCanonicalBlock, fmt.Sprintf(
"payload %#x and header %#x roots do not match",
payloadRoot,
payloadHeaderRoot,
)
))
}
return nil
}