Compare commits

...

4 Commits

Author SHA1 Message Date
Radosław Kapka
73d278bdde Merge branch 'develop' into header-consts 2025-10-29 18:01:00 +01:00
rkapka
608fa30c95 build fix 2025-10-10 17:50:33 +02:00
rkapka
012dbba2e0 changelog <3 2025-10-10 17:49:21 +02:00
rkapka
2c56d9e0db Always use constants for API headers 2025-10-10 17:41:17 +02:00
84 changed files with 832 additions and 747 deletions

View File

@@ -10,7 +10,10 @@ go_library(
], ],
importpath = "github.com/OffchainLabs/prysm/v6/api/client", importpath = "github.com/OffchainLabs/prysm/v6/api/client",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = ["@com_github_pkg_errors//:go_default_library"], deps = [
"//api:go_default_library",
"@com_github_pkg_errors//:go_default_library",
],
) )
go_test( go_test(

View File

@@ -11,6 +11,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/api/client/beacon", importpath = "github.com/OffchainLabs/prysm/v6/api/client/beacon",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//api/client:go_default_library", "//api/client:go_default_library",
"//api/server:go_default_library", "//api/server:go_default_library",
"//api/server/structs:go_default_library", "//api/server/structs:go_default_library",

View File

@@ -11,6 +11,7 @@ import (
"regexp" "regexp"
"strconv" "strconv"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/client" "github.com/OffchainLabs/prysm/v6/api/client"
"github.com/OffchainLabs/prysm/v6/api/server" "github.com/OffchainLabs/prysm/v6/api/server"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
@@ -273,7 +274,7 @@ func (c *Client) SubmitChangeBLStoExecution(ctx context.Context, request []*stru
if err != nil { if err != nil {
return errors.Wrap(err, "invalid format, failed to create new POST request object") return errors.Wrap(err, "invalid format, failed to create new POST request object")
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
resp, err := c.Do(req) resp, err := c.Do(req)
if err != nil { if err != nil {
return err return err

View File

@@ -171,7 +171,7 @@ func (c *Client) do(ctx context.Context, method string, path string, body io.Rea
if err != nil { if err != nil {
return return
} }
req.Header.Add("User-Agent", version.BuildData()) req.Header.Add(api.UserAgentHeader, version.BuildData())
for _, o := range opts { for _, o := range opts {
o(req) o(req)
} }
@@ -232,11 +232,11 @@ func (c *Client) GetHeader(ctx context.Context, slot primitives.Slot, parentHash
var getOpts reqOption var getOpts reqOption
if c.sszEnabled { if c.sszEnabled {
getOpts = func(r *http.Request) { getOpts = func(r *http.Request) {
r.Header.Set("Accept", api.OctetStreamMediaType) r.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
} }
} else { } else {
getOpts = func(r *http.Request) { getOpts = func(r *http.Request) {
r.Header.Set("Accept", api.JsonMediaType) r.Header.Set(api.AcceptHeader, api.JsonMediaType)
} }
} }
data, header, err := c.do(ctx, http.MethodGet, path, nil, http.StatusOK, getOpts) data, header, err := c.do(ctx, http.MethodGet, path, nil, http.StatusOK, getOpts)
@@ -259,8 +259,8 @@ func (c *Client) GetHeader(ctx context.Context, slot primitives.Slot, parentHash
func (c *Client) parseHeaderResponse(data []byte, header http.Header, slot primitives.Slot) (SignedBid, error) { func (c *Client) parseHeaderResponse(data []byte, header http.Header, slot primitives.Slot) (SignedBid, error) {
var versionHeader string var versionHeader string
if c.sszEnabled || header.Get(api.VersionHeader) != "" { if c.sszEnabled || header.Get(api.EthConsensusVersionHeader) != "" {
versionHeader = header.Get(api.VersionHeader) versionHeader = header.Get(api.EthConsensusVersionHeader)
} else { } else {
// If we don't have a version header, attempt to parse JSON for version // If we don't have a version header, attempt to parse JSON for version
v := &VersionResponse{} v := &VersionResponse{}
@@ -390,8 +390,8 @@ func (c *Client) RegisterValidator(ctx context.Context, svr []*ethpb.SignedValid
) )
if c.sszEnabled { if c.sszEnabled {
postOpts = func(r *http.Request) { postOpts = func(r *http.Request) {
r.Header.Set("Content-Type", api.OctetStreamMediaType) r.Header.Set(api.ContentTypeHeader, api.OctetStreamMediaType)
r.Header.Set("Accept", api.OctetStreamMediaType) r.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
} }
body, err = sszValidatorRegisterRequest(svr) body, err = sszValidatorRegisterRequest(svr)
if err != nil { if err != nil {
@@ -401,8 +401,8 @@ func (c *Client) RegisterValidator(ctx context.Context, svr []*ethpb.SignedValid
} }
} else { } else {
postOpts = func(r *http.Request) { postOpts = func(r *http.Request) {
r.Header.Set("Content-Type", api.JsonMediaType) r.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
r.Header.Set("Accept", api.JsonMediaType) r.Header.Set(api.AcceptHeader, api.JsonMediaType)
} }
body, err = jsonValidatorRegisterRequest(svr) body, err = jsonValidatorRegisterRequest(svr)
if err != nil { if err != nil {
@@ -446,7 +446,7 @@ func sszValidatorRegisterRequest(svr []*ethpb.SignedValidatorRegistrationV1) ([]
return ssz, nil return ssz, nil
} }
var errResponseVersionMismatch = errors.New("builder API response uses a different version than requested in " + api.VersionHeader + " header") var errResponseVersionMismatch = errors.New("builder API response uses a different version than requested in " + api.EthConsensusVersionHeader + " header")
func getVersionsBlockToPayload(blockVersion int) (int, error) { func getVersionsBlockToPayload(blockVersion int) (int, error) {
if blockVersion >= version.Fulu { if blockVersion >= version.Fulu {
@@ -525,7 +525,7 @@ func (c *Client) SubmitBlindedBlockPostFulu(ctx context.Context, sb interfaces.R
func (c *Client) checkBlockVersion(respBytes []byte, header http.Header) (int, error) { func (c *Client) checkBlockVersion(respBytes []byte, header http.Header) (int, error) {
var versionHeader string var versionHeader string
if c.sszEnabled { if c.sszEnabled {
versionHeader = strings.ToLower(header.Get(api.VersionHeader)) versionHeader = strings.ToLower(header.Get(api.EthConsensusVersionHeader))
} else { } else {
// fallback to JSON-based version extraction // fallback to JSON-based version extraction
v := &VersionResponse{} v := &VersionResponse{}
@@ -555,9 +555,9 @@ func (c *Client) buildBlindedBlockRequest(sb interfaces.ReadOnlySignedBeaconBloc
return nil, nil, errors.Wrap(err, "could not marshal SSZ for blinded block") return nil, nil, errors.Wrap(err, "could not marshal SSZ for blinded block")
} }
opt := func(r *http.Request) { opt := func(r *http.Request) {
r.Header.Set(api.VersionHeader, version.String(sb.Version())) r.Header.Set(api.EthConsensusVersionHeader, version.String(sb.Version()))
r.Header.Set("Content-Type", api.OctetStreamMediaType) r.Header.Set(api.ContentTypeHeader, api.OctetStreamMediaType)
r.Header.Set("Accept", api.OctetStreamMediaType) r.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
} }
return body, opt, nil return body, opt, nil
} }
@@ -571,9 +571,9 @@ func (c *Client) buildBlindedBlockRequest(sb interfaces.ReadOnlySignedBeaconBloc
return nil, nil, errors.Wrap(err, "error marshaling blinded block to JSON") return nil, nil, errors.Wrap(err, "error marshaling blinded block to JSON")
} }
opt := func(r *http.Request) { opt := func(r *http.Request) {
r.Header.Set(api.VersionHeader, version.String(sb.Version())) r.Header.Set(api.EthConsensusVersionHeader, version.String(sb.Version()))
r.Header.Set("Content-Type", api.JsonMediaType) r.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
r.Header.Set("Accept", api.JsonMediaType) r.Header.Set(api.AcceptHeader, api.JsonMediaType)
} }
return body, opt, nil return body, opt, nil
} }
@@ -676,7 +676,7 @@ func (c *Client) parseBlindedBlockResponseJSON(
// happy path, and an error with information about the server response body for a non-200 response. // happy path, and an error with information about the server response body for a non-200 response.
func (c *Client) Status(ctx context.Context) error { func (c *Client) Status(ctx context.Context) error {
getOpts := func(r *http.Request) { getOpts := func(r *http.Request) {
r.Header.Set("Accept", api.JsonMediaType) r.Header.Set(api.AcceptHeader, api.JsonMediaType)
} }
_, _, err := c.do(ctx, http.MethodGet, getStatus, nil, http.StatusOK, getOpts) _, _, err := c.do(ctx, http.MethodGet, getStatus, nil, http.StatusOK, getOpts)
return err return err

View File

@@ -92,8 +92,8 @@ func TestClient_RegisterValidator(t *testing.T) {
t.Run("JSON success", func(t *testing.T) { t.Run("JSON success", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
body, err := io.ReadAll(r.Body) body, err := io.ReadAll(r.Body)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
@@ -127,8 +127,8 @@ func TestClient_RegisterValidator(t *testing.T) {
t.Run("SSZ success", func(t *testing.T) { t.Run("SSZ success", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
body, err := io.ReadAll(r.Body) body, err := io.ReadAll(r.Body)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
@@ -225,7 +225,7 @@ func TestClient_GetHeader(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewBufferString(testExampleHeaderResponse)), Body: io.NopCloser(bytes.NewBufferString(testExampleHeaderResponse)),
@@ -260,7 +260,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("bellatrix ssz", func(t *testing.T) { t.Run("bellatrix ssz", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
epr := &ExecHeaderResponse{} epr := &ExecHeaderResponse{}
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponse), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponse), epr))
@@ -269,7 +269,7 @@ func TestClient_GetHeader(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "bellatrix") header.Set(api.EthConsensusVersionHeader, "bellatrix")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -306,7 +306,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("capella", func(t *testing.T) { t.Run("capella", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
@@ -338,7 +338,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("capella ssz", func(t *testing.T) { t.Run("capella ssz", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
epr := &ExecHeaderResponseCapella{} epr := &ExecHeaderResponseCapella{}
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseCapella), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseCapella), epr))
@@ -347,7 +347,7 @@ func TestClient_GetHeader(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "capella") header.Set(api.EthConsensusVersionHeader, "capella")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -380,7 +380,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("deneb", func(t *testing.T) { t.Run("deneb", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
@@ -420,7 +420,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("deneb ssz", func(t *testing.T) { t.Run("deneb ssz", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
epr := &ExecHeaderResponseDeneb{} epr := &ExecHeaderResponseDeneb{}
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseDeneb), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseDeneb), epr))
@@ -429,7 +429,7 @@ func TestClient_GetHeader(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "deneb") header.Set(api.EthConsensusVersionHeader, "deneb")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -488,7 +488,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("electra", func(t *testing.T) { t.Run("electra", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
@@ -533,7 +533,7 @@ func TestClient_GetHeader(t *testing.T) {
t.Run("electra ssz", func(t *testing.T) { t.Run("electra ssz", func(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
require.Equal(t, expectedPath, r.URL.Path) require.Equal(t, expectedPath, r.URL.Path)
epr := &ExecHeaderResponseElectra{} epr := &ExecHeaderResponseElectra{}
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseElectra), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponseElectra), epr))
@@ -542,7 +542,7 @@ func TestClient_GetHeader(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "electra") header.Set(api.EthConsensusVersionHeader, "electra")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -612,9 +612,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "bellatrix", r.Header.Get("Eth-Consensus-Version")) require.Equal(t, "bellatrix", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayload)), Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayload)),
@@ -640,9 +640,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "bellatrix", r.Header.Get(api.VersionHeader)) require.Equal(t, "bellatrix", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
epr := &ExecutionPayloadResponse{} epr := &ExecutionPayloadResponse{}
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayload), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayload), epr))
ep := &structs.ExecutionPayload{} ep := &structs.ExecutionPayload{}
@@ -652,7 +652,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "bellatrix") header.Set(api.EthConsensusVersionHeader, "bellatrix")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -680,9 +680,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "capella", r.Header.Get(api.VersionHeader)) require.Equal(t, "capella", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayloadCapella)), Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayloadCapella)),
@@ -710,9 +710,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "capella", r.Header.Get(api.VersionHeader)) require.Equal(t, "capella", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
epr := &ExecutionPayloadResponse{} epr := &ExecutionPayloadResponse{}
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadCapella), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadCapella), epr))
ep := &structs.ExecutionPayloadCapella{} ep := &structs.ExecutionPayloadCapella{}
@@ -722,7 +722,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
ssz, err := pro.MarshalSSZ() ssz, err := pro.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "capella") header.Set(api.EthConsensusVersionHeader, "capella")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -753,9 +753,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "deneb", r.Header.Get(api.VersionHeader)) require.Equal(t, "deneb", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
var req structs.SignedBlindedBeaconBlockDeneb var req structs.SignedBlindedBeaconBlockDeneb
err := json.NewDecoder(r.Body).Decode(&req) err := json.NewDecoder(r.Body).Decode(&req)
require.NoError(t, err) require.NoError(t, err)
@@ -793,9 +793,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "deneb", r.Header.Get(api.VersionHeader)) require.Equal(t, "deneb", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
epr := &ExecPayloadResponseDeneb{} epr := &ExecPayloadResponseDeneb{}
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadDeneb), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadDeneb), epr))
pro, blob, err := epr.ToProto() pro, blob, err := epr.ToProto()
@@ -807,7 +807,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
ssz, err := combined.MarshalSSZ() ssz, err := combined.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "deneb") header.Set(api.EthConsensusVersionHeader, "deneb")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -840,9 +840,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "electra", r.Header.Get(api.VersionHeader)) require.Equal(t, "electra", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
var req structs.SignedBlindedBeaconBlockElectra var req structs.SignedBlindedBeaconBlockElectra
err := json.NewDecoder(r.Body).Decode(&req) err := json.NewDecoder(r.Body).Decode(&req)
require.NoError(t, err) require.NoError(t, err)
@@ -880,9 +880,9 @@ func TestSubmitBlindedBlock(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
require.Equal(t, "electra", r.Header.Get(api.VersionHeader)) require.Equal(t, "electra", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
epr := &ExecPayloadResponseDeneb{} epr := &ExecPayloadResponseDeneb{}
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadDeneb), epr)) require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayloadDeneb), epr))
pro, blob, err := epr.ToProto() pro, blob, err := epr.ToProto()
@@ -894,7 +894,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
ssz, err := combined.MarshalSSZ() ssz, err := combined.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
header := http.Header{} header := http.Header{}
header.Set(api.VersionHeader, "electra") header.Set(api.EthConsensusVersionHeader, "electra")
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Header: header, Header: header,
@@ -1566,9 +1566,9 @@ func TestSubmitBlindedBlockPostFulu(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path) require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path)
require.Equal(t, "bellatrix", r.Header.Get("Eth-Consensus-Version")) require.Equal(t, "bellatrix", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.JsonMediaType, r.Header.Get("Accept")) require.Equal(t, api.JsonMediaType, r.Header.Get(api.AcceptHeader))
// Post-Fulu: only return status code, no payload // Post-Fulu: only return status code, no payload
return &http.Response{ return &http.Response{
StatusCode: http.StatusAccepted, StatusCode: http.StatusAccepted,
@@ -1591,9 +1591,9 @@ func TestSubmitBlindedBlockPostFulu(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path) require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path)
require.Equal(t, "bellatrix", r.Header.Get(api.VersionHeader)) require.Equal(t, "bellatrix", r.Header.Get(api.EthConsensusVersionHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Content-Type")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.ContentTypeHeader))
require.Equal(t, api.OctetStreamMediaType, r.Header.Get("Accept")) require.Equal(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
// Post-Fulu: only return status code, no payload // Post-Fulu: only return status code, no payload
return &http.Response{ return &http.Response{
StatusCode: http.StatusAccepted, StatusCode: http.StatusAccepted,
@@ -1617,7 +1617,7 @@ func TestSubmitBlindedBlockPostFulu(t *testing.T) {
hc := &http.Client{ hc := &http.Client{
Transport: roundtrip(func(r *http.Request) (*http.Response, error) { Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path) require.Equal(t, postBlindedBeaconBlockV2Path, r.URL.Path)
require.Equal(t, "bellatrix", r.Header.Get("Eth-Consensus-Version")) require.Equal(t, "bellatrix", r.Header.Get(api.EthConsensusVersionHeader))
message := ErrorMessage{ message := ErrorMessage{
Code: 400, Code: 400,
Message: "Bad Request", Message: "Bad Request",

View File

@@ -73,8 +73,8 @@ func (h *EventStream) Subscribe(eventsChannel chan<- *Event) {
Data: []byte(errors.Wrap(err, "failed to create HTTP request").Error()), Data: []byte(errors.Wrap(err, "failed to create HTTP request").Error()),
} }
} }
req.Header.Set("Accept", api.EventStreamMediaType) req.Header.Set(api.AcceptHeader, api.EventStreamMediaType)
req.Header.Set("Connection", api.KeepAlive) req.Header.Set(api.ConnectionHeader, api.KeepAlive)
resp, err := h.httpClient.Do(req) resp, err := h.httpClient.Do(req)
if err != nil { if err != nil {
eventsChannel <- &Event{ eventsChannel <- &Event{

View File

@@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
) )
// ReqOption is a request functional option. // ReqOption is a request functional option.
@@ -12,14 +14,14 @@ type ReqOption func(*http.Request)
// WithSSZEncoding is a request functional option that adds SSZ encoding header. // WithSSZEncoding is a request functional option that adds SSZ encoding header.
func WithSSZEncoding() ReqOption { func WithSSZEncoding() ReqOption {
return func(req *http.Request) { return func(req *http.Request) {
req.Header.Set("Accept", "application/octet-stream") req.Header.Set(api.AcceptEncodingHeader, api.OctetStreamMediaType)
} }
} }
// WithAuthorizationToken is a request functional option that adds header for authorization token. // WithAuthorizationToken is a request functional option that adds header for authorization token.
func WithAuthorizationToken(token string) ReqOption { func WithAuthorizationToken(token string) ReqOption {
return func(req *http.Request) { return func(req *http.Request) {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) req.Header.Set(api.AuthorizationHeader, fmt.Sprintf("%s %s", api.BearerAuthorization, token))
} }
} }

View File

@@ -3,18 +3,38 @@ package api
import "net/http" import "net/http"
const ( const (
VersionHeader = "Eth-Consensus-Version" // Headers
ExecutionPayloadBlindedHeader = "Eth-Execution-Payload-Blinded" EthConsensusVersionHeader = "Eth-Consensus-Version"
ExecutionPayloadValueHeader = "Eth-Execution-Payload-Value" EthExecutionPayloadBlindedHeader = "Eth-Execution-Payload-Blinded"
ConsensusBlockValueHeader = "Eth-Consensus-Block-Value" EthExecutionPayloadValueHeader = "Eth-Execution-Payload-Value"
JsonMediaType = "application/json" EthConsensusBlockValueHeader = "Eth-Consensus-Block-Value"
OctetStreamMediaType = "application/octet-stream" AcceptEncodingHeader = "Accept-Encoding"
EventStreamMediaType = "text/event-stream" AcceptHeader = "Accept"
KeepAlive = "keep-alive" AccessControlAllowOriginHeader = "Access-Control-Allow-Origin"
AuthorizationHeader = "Authorization"
CacheControlHeader = "Cache-Control"
ConnectionHeader = "Connection"
ContentEncodingHeader = "Content-Encoding"
ContentLengthHeader = "Content-Length"
ContentTypeHeader = "Content-Type"
HostHeader = "Host"
OriginHeader = "Origin"
UserAgentHeader = "User-Agent"
// Header values
JsonMediaType = "application/json"
OctetStreamMediaType = "application/octet-stream"
PlainMediaType = "text/plain"
EventStreamMediaType = "text/event-stream"
KeepAlive = "keep-alive"
GzipEncoding = "gzip"
BasicAuthorization = "Basic"
BearerAuthorization = "Bearer"
NoCache = "no-cache"
) )
// SetSSEHeaders sets the headers needed for a server-sent event response. // SetSSEHeaders sets the headers needed for a server-sent event response.
func SetSSEHeaders(w http.ResponseWriter) { func SetSSEHeaders(w http.ResponseWriter) {
w.Header().Set("Content-Type", EventStreamMediaType) w.Header().Set(ContentTypeHeader, EventStreamMediaType)
w.Header().Set("Connection", KeepAlive) w.Header().Set(ConnectionHeader, KeepAlive)
} }

View File

@@ -47,7 +47,7 @@ func ContentTypeHandler(acceptedMediaTypes []string) Middleware {
next.ServeHTTP(w, r) next.ServeHTTP(w, r)
return return
} }
contentType := r.Header.Get("Content-Type") contentType := r.Header.Get(api.ContentTypeHeader)
if contentType == "" { if contentType == "" {
http.Error(w, "Content-Type header is missing", http.StatusUnsupportedMediaType) http.Error(w, "Content-Type header is missing", http.StatusUnsupportedMediaType)
return return
@@ -75,7 +75,7 @@ func ContentTypeHandler(acceptedMediaTypes []string) Middleware {
func AcceptHeaderHandler(serverAcceptedTypes []string) Middleware { func AcceptHeaderHandler(serverAcceptedTypes []string) Middleware {
return func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if _, ok := apiutil.Negotiate(r.Header.Get("Accept"), serverAcceptedTypes); !ok { if _, ok := apiutil.Negotiate(r.Header.Get(api.AcceptHeader), serverAcceptedTypes); !ok {
http.Error(w, "Not Acceptable", http.StatusNotAcceptable) http.Error(w, "Not Acceptable", http.StatusNotAcceptable)
return return
} }
@@ -88,7 +88,7 @@ func AcceptHeaderHandler(serverAcceptedTypes []string) Middleware {
func AcceptEncodingHeaderHandler() Middleware { func AcceptEncodingHeaderHandler() Middleware {
return func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { if !strings.Contains(r.Header.Get(api.AcceptEncodingHeader), api.GzipEncoding) {
next.ServeHTTP(w, r) next.ServeHTTP(w, r)
return return
} }
@@ -116,10 +116,10 @@ type gzipResponseWriter struct {
} }
func (g *gzipResponseWriter) WriteHeader(statusCode int) { func (g *gzipResponseWriter) WriteHeader(statusCode int) {
if strings.Contains(g.Header().Get("Content-Type"), api.JsonMediaType) { if strings.Contains(g.Header().Get(api.ContentTypeHeader), api.JsonMediaType) {
// Removing the current Content-Length because zipping will change it. // Removing the current Content-Length because zipping will change it.
g.Header().Del("Content-Length") g.Header().Del(api.ContentLengthHeader)
g.Header().Set("Content-Encoding", "gzip") g.Header().Set(api.ContentEncodingHeader, api.GzipEncoding)
g.zip = true g.zip = true
} }

View File

@@ -132,7 +132,7 @@ func TestContentTypeHandler(t *testing.T) {
} }
req := httptest.NewRequest(httpMethod, "/", nil) req := httptest.NewRequest(httpMethod, "/", nil)
if tt.contentType != "" { if tt.contentType != "" {
req.Header.Set("Content-Type", tt.contentType) req.Header.Set(api.ContentTypeHeader, tt.contentType)
} }
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
@@ -148,7 +148,7 @@ func TestContentTypeHandler(t *testing.T) {
func TestAcceptEncodingHeaderHandler(t *testing.T) { func TestAcceptEncodingHeaderHandler(t *testing.T) {
dummyContent := "Test gzip middleware content" dummyContent := "Test gzip middleware content"
nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", r.Header.Get("Accept")) w.Header().Set(api.ContentTypeHeader, r.Header.Get(api.AcceptHeader))
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(dummyContent)) _, err := w.Write([]byte(dummyContent))
require.NoError(t, err) require.NoError(t, err)
@@ -165,7 +165,7 @@ func TestAcceptEncodingHeaderHandler(t *testing.T) {
{ {
name: "Accept gzip", name: "Accept gzip",
accept: api.JsonMediaType, accept: api.JsonMediaType,
acceptEncoding: "gzip", acceptEncoding: api.GzipEncoding,
expectCompressed: true, expectCompressed: true,
}, },
{ {
@@ -189,7 +189,7 @@ func TestAcceptEncodingHeaderHandler(t *testing.T) {
{ {
name: "SSZ", name: "SSZ",
accept: api.OctetStreamMediaType, accept: api.OctetStreamMediaType,
acceptEncoding: "gzip", acceptEncoding: api.GzipEncoding,
expectCompressed: false, expectCompressed: false,
}, },
} }
@@ -197,16 +197,16 @@ func TestAcceptEncodingHeaderHandler(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest("GET", "/", nil) req := httptest.NewRequest("GET", "/", nil)
req.Header.Set("Accept", tt.accept) req.Header.Set(api.AcceptHeader, tt.accept)
if tt.acceptEncoding != "" { if tt.acceptEncoding != "" {
req.Header.Set("Accept-Encoding", tt.acceptEncoding) req.Header.Set(api.AcceptEncodingHeader, tt.acceptEncoding)
} }
rr := &frozenHeaderRecorder{ResponseRecorder: httptest.NewRecorder()} rr := &frozenHeaderRecorder{ResponseRecorder: httptest.NewRecorder()}
handler.ServeHTTP(rr, req) handler.ServeHTTP(rr, req)
if tt.expectCompressed { if tt.expectCompressed {
require.Equal(t, "gzip", rr.frozenHeader.Get("Content-Encoding"), "Expected Content-Encoding header to be 'gzip'") require.Equal(t, api.GzipEncoding, rr.frozenHeader.Get(api.ContentEncodingHeader), "Expected Content-Encoding header to be 'gzip'")
compressedBody := rr.Body.Bytes() compressedBody := rr.Body.Bytes()
require.NotEqual(t, dummyContent, string(compressedBody), "Response body should be compressed and differ from the original") require.NotEqual(t, dummyContent, string(compressedBody), "Response body should be compressed and differ from the original")
@@ -230,7 +230,7 @@ func TestAcceptEncodingHeaderHandler(t *testing.T) {
} }
func TestAcceptHeaderHandler(t *testing.T) { func TestAcceptHeaderHandler(t *testing.T) {
acceptedTypes := []string{"application/json", "application/octet-stream"} acceptedTypes := []string{api.JsonMediaType, api.OctetStreamMediaType}
nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, err := w.Write([]byte("next handler")) _, err := w.Write([]byte("next handler"))
@@ -295,7 +295,7 @@ func TestAcceptHeaderHandler(t *testing.T) {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest("GET", "/", nil) req := httptest.NewRequest("GET", "/", nil)
if tt.acceptHeader != "" { if tt.acceptHeader != "" {
req.Header.Set("Accept", tt.acceptHeader) req.Header.Set(api.AcceptHeader, tt.acceptHeader)
} }
rr := httptest.NewRecorder() rr := httptest.NewRecorder()

View File

@@ -25,6 +25,7 @@ go_library(
"//testing/spectest:__subpackages__", "//testing/spectest:__subpackages__",
], ],
deps = [ deps = [
"//api:go_default_library",
"//beacon-chain/blockchain/kzg:go_default_library", "//beacon-chain/blockchain/kzg:go_default_library",
"//beacon-chain/cache:go_default_library", "//beacon-chain/cache:go_default_library",
"//beacon-chain/cache/depositsnapshot:go_default_library", "//beacon-chain/cache/depositsnapshot:go_default_library",
@@ -98,6 +99,7 @@ go_test(
data = glob(["testdata/**"]), data = glob(["testdata/**"]),
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//async/event:go_default_library", "//async/event:go_default_library",
"//beacon-chain/blockchain/kzg:go_default_library", "//beacon-chain/blockchain/kzg:go_default_library",
"//beacon-chain/cache/depositsnapshot:go_default_library", "//beacon-chain/cache/depositsnapshot:go_default_library",

View File

@@ -13,6 +13,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/kzg" "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/kzg"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/peerdas" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/peerdas"
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/filesystem" "github.com/OffchainLabs/prysm/v6/beacon-chain/db/filesystem"
@@ -177,7 +178,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionPayload"].(*pb.ExecutionPayload) want, ok := fix["ExecutionPayload"].(*pb.ExecutionPayload)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -223,7 +224,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionPayloadCapellaWithValue"].(*pb.GetPayloadV2ResponseJson) want, ok := fix["ExecutionPayloadCapellaWithValue"].(*pb.GetPayloadV2ResponseJson)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -276,7 +277,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionPayloadDenebWithValue"].(*pb.GetPayloadV3ResponseJson) want, ok := fix["ExecutionPayloadDenebWithValue"].(*pb.GetPayloadV3ResponseJson)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -331,7 +332,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionBundleElectra"].(*pb.GetPayloadV4ResponseJson) want, ok := fix["ExecutionBundleElectra"].(*pb.GetPayloadV4ResponseJson)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -413,7 +414,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionBundleFulu"].(*pb.GetPayloadV5ResponseJson) want, ok := fix["ExecutionBundleFulu"].(*pb.GetPayloadV5ResponseJson)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -935,7 +936,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock) want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -966,7 +967,7 @@ func TestClient_HTTP(t *testing.T) {
want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock) want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock)
require.Equal(t, true, ok) require.Equal(t, true, ok)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -1060,7 +1061,7 @@ func TestReconstructFullBellatrixBlock(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -1163,7 +1164,7 @@ func TestReconstructFullBellatrixBlockBatch(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -1236,7 +1237,7 @@ func TestReconstructFullBellatrixBlockBatch(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2153,7 +2154,7 @@ func (*testEngineService) NewPayloadV2(
func forkchoiceUpdateSetup(t *testing.T, fcs *pb.ForkchoiceState, att *pb.PayloadAttributes, res *ForkchoiceUpdatedResponse) *Service { func forkchoiceUpdateSetup(t *testing.T, fcs *pb.ForkchoiceState, att *pb.PayloadAttributes, res *ForkchoiceUpdatedResponse) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2192,7 +2193,7 @@ func forkchoiceUpdateSetup(t *testing.T, fcs *pb.ForkchoiceState, att *pb.Payloa
func forkchoiceUpdateSetupV2(t *testing.T, fcs *pb.ForkchoiceState, att *pb.PayloadAttributesV2, res *ForkchoiceUpdatedResponse) *Service { func forkchoiceUpdateSetupV2(t *testing.T, fcs *pb.ForkchoiceState, att *pb.PayloadAttributesV2, res *ForkchoiceUpdatedResponse) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2231,7 +2232,7 @@ func forkchoiceUpdateSetupV2(t *testing.T, fcs *pb.ForkchoiceState, att *pb.Payl
func newPayloadSetup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayload) *Service { func newPayloadSetup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayload) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2265,7 +2266,7 @@ func newPayloadSetup(t *testing.T, status *pb.PayloadStatus, payload *pb.Executi
func newPayloadV2Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadCapella) *Service { func newPayloadV2Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadCapella) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2299,7 +2300,7 @@ func newPayloadV2Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.Execu
func newPayloadV3Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadDeneb) *Service { func newPayloadV3Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadDeneb) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2333,7 +2334,7 @@ func newPayloadV3Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.Execu
func newPayloadV4Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadDeneb, requests *pb.ExecutionRequests) *Service { func newPayloadV4Setup(t *testing.T, status *pb.PayloadStatus, payload *pb.ExecutionPayloadDeneb, requests *pb.ExecutionRequests) *Service {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2414,7 +2415,7 @@ func TestReconstructBlindedBlockBatch(t *testing.T) {
func Test_ExchangeCapabilities(t *testing.T) { func Test_ExchangeCapabilities(t *testing.T) {
t.Run("empty response works", func(t *testing.T) { t.Run("empty response works", func(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2446,7 +2447,7 @@ func Test_ExchangeCapabilities(t *testing.T) {
}) })
t.Run("list of items", func(t *testing.T) { t.Run("list of items", func(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2641,7 +2642,7 @@ func createRandomKzgCommitments(t *testing.T, num int) [][]byte {
func createBlobServer(t *testing.T, numBlobs int, callbackFuncs ...func()) *httptest.Server { func createBlobServer(t *testing.T, numBlobs int, callbackFuncs ...func()) *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()
@@ -2666,7 +2667,7 @@ func createBlobServer(t *testing.T, numBlobs int, callbackFuncs ...func()) *http
func createBlobServerV2(t *testing.T, numBlobs int, blobMasks []bool) *httptest.Server { func createBlobServerV2(t *testing.T, numBlobs int, blobMasks []bool) *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()

View File

@@ -6,6 +6,7 @@ import (
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
pb "github.com/OffchainLabs/prysm/v6/proto/engine/v1" pb "github.com/OffchainLabs/prysm/v6/proto/engine/v1"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
@@ -54,7 +55,7 @@ func (s *mockEngine) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.Error(w, "failed to decode request: "+err.Error(), http.StatusBadRequest) http.Error(w, "failed to decode request: "+err.Error(), http.StatusBadRequest)
return return
} }
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(s.t, r.Body.Close()) require.NoError(s.t, r.Body.Close())
}() }()

View File

@@ -7,6 +7,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/config/params" "github.com/OffchainLabs/prysm/v6/config/params"
contracts "github.com/OffchainLabs/prysm/v6/contracts/deposit" contracts "github.com/OffchainLabs/prysm/v6/contracts/deposit"
"github.com/OffchainLabs/prysm/v6/io/logs" "github.com/OffchainLabs/prysm/v6/io/logs"
@@ -120,7 +121,7 @@ func (s *Service) newRPCClientWithAuth(ctx context.Context, endpoint network.End
if err != nil { if err != nil {
return nil, err return nil, err
} }
headers.Set("Authorization", header) headers.Set(api.AuthorizationHeader, header)
} }
for _, h := range s.cfg.headers { for _, h := range s.cfg.headers {
if h == "" { if h == "" {

View File

@@ -81,6 +81,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//api/server/middleware:go_default_library", "//api/server/middleware:go_default_library",
"//beacon-chain/blockchain:go_default_library", "//beacon-chain/blockchain:go_default_library",
"//beacon-chain/builder:go_default_library", "//beacon-chain/builder:go_default_library",

View File

@@ -10,6 +10,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/middleware" "github.com/OffchainLabs/prysm/v6/api/server/middleware"
"github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain" "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain"
"github.com/OffchainLabs/prysm/v6/beacon-chain/builder" "github.com/OffchainLabs/prysm/v6/beacon-chain/builder"
@@ -249,18 +250,18 @@ func TestCORS(t *testing.T) {
// Create a request and response recorder // Create a request and response recorder
req := httptest.NewRequest("GET", "http://example.com/some-path", nil) req := httptest.NewRequest("GET", "http://example.com/some-path", nil)
req.Header.Set("Origin", tc.origin) req.Header.Set(api.OriginHeader, tc.origin)
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
// Serve HTTP // Serve HTTP
handler.ServeHTTP(rr, req) handler.ServeHTTP(rr, req)
// Check the CORS headers based on the expected outcome // Check the CORS headers based on the expected outcome
if tc.expectAllow && rr.Header().Get("Access-Control-Allow-Origin") != tc.origin { if tc.expectAllow && rr.Header().Get(api.AccessControlAllowOriginHeader) != tc.origin {
t.Errorf("Expected Access-Control-Allow-Origin header to be %v, got %v", tc.origin, rr.Header().Get("Access-Control-Allow-Origin")) t.Errorf("Expected Access-Control-Allow-Origin header to be %v, got %v", tc.origin, rr.Header().Get(api.AccessControlAllowOriginHeader))
} }
if !tc.expectAllow && rr.Header().Get("Access-Control-Allow-Origin") != "" { if !tc.expectAllow && rr.Header().Get(api.AccessControlAllowOriginHeader) != "" {
t.Errorf("Expected Access-Control-Allow-Origin header to be empty for disallowed origin, got %v", rr.Header().Get("Access-Control-Allow-Origin")) t.Errorf("Expected Access-Control-Allow-Origin header to be empty for disallowed origin, got %v", rr.Header().Get(api.AccessControlAllowOriginHeader))
} }
}) })
} }

View File

@@ -101,9 +101,9 @@ func versionHeaderFromRequest(body []byte) (string, error) {
// from the request. If the version header is not provided and not required, it attempts // from the request. If the version header is not provided and not required, it attempts
// to derive it from the request body. // to derive it from the request body.
func validateVersionHeader(r *http.Request, body []byte, versionRequired bool) (string, error) { func validateVersionHeader(r *http.Request, body []byte, versionRequired bool) (string, error) {
versionHeader := r.Header.Get(api.VersionHeader) versionHeader := r.Header.Get(api.EthConsensusVersionHeader)
if versionRequired && versionHeader == "" { if versionRequired && versionHeader == "" {
return "", fmt.Errorf("%s header is required", api.VersionHeader) return "", fmt.Errorf("%s header is required", api.EthConsensusVersionHeader)
} }
if !versionRequired && versionHeader == "" { if !versionRequired && versionHeader == "" {
@@ -219,7 +219,7 @@ func (s *Server) getBlockV2Ssz(w http.ResponseWriter, blk interfaces.ReadOnlySig
httputil.HandleError(w, fmt.Sprintf("Unknown block type %T", blk), http.StatusInternalServerError) httputil.HandleError(w, fmt.Sprintf("Unknown block type %T", blk), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteSsz(w, result) httputil.WriteSsz(w, result)
} }
@@ -254,7 +254,7 @@ func (s *Server) getBlockV2Json(ctx context.Context, w http.ResponseWriter, blk
httputil.HandleError(w, fmt.Sprintf("Unknown block type %T", blk), http.StatusInternalServerError) httputil.HandleError(w, fmt.Sprintf("Unknown block type %T", blk), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, result.Version) w.Header().Set(api.EthConsensusVersionHeader, result.Version)
httputil.WriteJson(w, result) httputil.WriteJson(w, result)
} }
@@ -368,7 +368,7 @@ func (s *Server) GetBlockAttestationsV2(w http.ResponseWriter, r *http.Request)
Finalized: s.FinalizationFetcher.IsFinalized(ctx, root), Finalized: s.FinalizationFetcher.IsFinalized(ctx, root),
Data: attBytes, Data: attBytes,
} }
w.Header().Set(api.VersionHeader, version.String(v)) w.Header().Set(api.EthConsensusVersionHeader, version.String(v))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }
@@ -1693,7 +1693,7 @@ func (s *Server) GetPendingConsolidations(w http.ResponseWriter, r *http.Request
httputil.HandleError(w, "Could not get pending consolidations: "+err.Error(), http.StatusInternalServerError) httputil.HandleError(w, "Could not get pending consolidations: "+err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(st.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(st.Version()))
if httputil.RespondWithSsz(r) { if httputil.RespondWithSsz(r) {
sszData, err := serializeItems(pd) sszData, err := serializeItems(pd)
if err != nil { if err != nil {
@@ -1749,7 +1749,7 @@ func (s *Server) GetPendingDeposits(w http.ResponseWriter, r *http.Request) {
httputil.HandleError(w, "Could not get pending deposits: "+err.Error(), http.StatusInternalServerError) httputil.HandleError(w, "Could not get pending deposits: "+err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(st.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(st.Version()))
if httputil.RespondWithSsz(r) { if httputil.RespondWithSsz(r) {
sszData, err := serializeItems(pd) sszData, err := serializeItems(pd)
if err != nil { if err != nil {
@@ -1805,7 +1805,7 @@ func (s *Server) GetPendingPartialWithdrawals(w http.ResponseWriter, r *http.Req
httputil.HandleError(w, "Could not get pending partial withdrawals: "+err.Error(), http.StatusInternalServerError) httputil.HandleError(w, "Could not get pending partial withdrawals: "+err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(st.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(st.Version()))
if httputil.RespondWithSsz(r) { if httputil.RespondWithSsz(r) {
sszData, err := serializeItems(ppw) sszData, err := serializeItems(ppw)
if err != nil { if err != nil {
@@ -1858,7 +1858,7 @@ func (s *Server) GetProposerLookahead(w http.ResponseWriter, r *http.Request) {
httputil.HandleError(w, "Could not get proposer look ahead: "+err.Error(), http.StatusInternalServerError) httputil.HandleError(w, "Could not get proposer look ahead: "+err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(st.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(st.Version()))
if httputil.RespondWithSsz(r) { if httputil.RespondWithSsz(r) {
sszLen := (*primitives.ValidatorIndex)(nil).SizeSSZ() sszLen := (*primitives.ValidatorIndex)(nil).SizeSSZ()
sszData := make([]byte, len(pl)*sszLen) sszData := make([]byte, len(pl)*sszLen)

View File

@@ -150,7 +150,7 @@ func (s *Server) ListAttestationsV2(w http.ResponseWriter, r *http.Request) {
return return
} }
w.Header().Set(api.VersionHeader, version.String(v)) w.Header().Set(api.EthConsensusVersionHeader, version.String(v))
httputil.WriteJson(w, &structs.ListAttestationsResponse{ httputil.WriteJson(w, &structs.ListAttestationsResponse{
Version: version.String(v), Version: version.String(v),
Data: attsData, Data: attsData,
@@ -225,9 +225,9 @@ func (s *Server) SubmitAttestationsV2(w http.ResponseWriter, r *http.Request) {
ctx, span := trace.StartSpan(r.Context(), "beacon.SubmitAttestationsV2") ctx, span := trace.StartSpan(r.Context(), "beacon.SubmitAttestationsV2")
defer span.End() defer span.End()
versionHeader := r.Header.Get(api.VersionHeader) versionHeader := r.Header.Get(api.EthConsensusVersionHeader)
if versionHeader == "" { if versionHeader == "" {
httputil.HandleError(w, api.VersionHeader+" header is required", http.StatusBadRequest) httputil.HandleError(w, api.EthConsensusVersionHeader+" header is required", http.StatusBadRequest)
return return
} }
v, err := version.FromString(versionHeader) v, err := version.FromString(versionHeader)
@@ -826,7 +826,7 @@ func (s *Server) GetAttesterSlashingsV2(w http.ResponseWriter, r *http.Request)
Version: version.String(v), Version: version.String(v),
Data: attBytes, Data: attBytes,
} }
w.Header().Set(api.VersionHeader, version.String(v)) w.Header().Set(api.EthConsensusVersionHeader, version.String(v))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }
@@ -861,9 +861,9 @@ func (s *Server) SubmitAttesterSlashingsV2(w http.ResponseWriter, r *http.Reques
ctx, span := trace.StartSpan(r.Context(), "beacon.SubmitAttesterSlashingsV2") ctx, span := trace.StartSpan(r.Context(), "beacon.SubmitAttesterSlashingsV2")
defer span.End() defer span.End()
versionHeader := r.Header.Get(api.VersionHeader) versionHeader := r.Header.Get(api.EthConsensusVersionHeader)
if versionHeader == "" { if versionHeader == "" {
httputil.HandleError(w, api.VersionHeader+" header is required", http.StatusBadRequest) httputil.HandleError(w, api.EthConsensusVersionHeader+" header is required", http.StatusBadRequest)
} }
v, err := version.FromString(versionHeader) v, err := version.FromString(versionHeader)
if err != nil { if err != nil {

View File

@@ -656,7 +656,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(singleAtt) _, err := body.WriteString(singleAtt)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -685,7 +685,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(multipleAtts) _, err := body.WriteString(multipleAtts)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -705,7 +705,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(singleAtt) _, err := body.WriteString(singleAtt)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -721,7 +721,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(singleAttElectra) _, err := body.WriteString(singleAttElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -734,7 +734,7 @@ func TestSubmitAttestations(t *testing.T) {
}) })
t.Run("no body", func(t *testing.T) { t.Run("no body", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) request := httptest.NewRequest(http.MethodPost, "http://example.com", nil)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -750,7 +750,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString("[]") _, err := body.WriteString("[]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -766,7 +766,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(invalidAtt) _, err := body.WriteString(invalidAtt)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -794,7 +794,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(singleAttElectra) _, err := body.WriteString(singleAttElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -823,7 +823,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(multipleAttsElectra) _, err := body.WriteString(multipleAttsElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -835,7 +835,7 @@ func TestSubmitAttestations(t *testing.T) {
}) })
t.Run("no body", func(t *testing.T) { t.Run("no body", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) request := httptest.NewRequest(http.MethodPost, "http://example.com", nil)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -851,7 +851,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString("[]") _, err := body.WriteString("[]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -867,7 +867,7 @@ func TestSubmitAttestations(t *testing.T) {
_, err := body.WriteString(invalidAttElectra) _, err := body.WriteString(invalidAttElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -2168,7 +2168,7 @@ func TestSubmitAttesterSlashings(t *testing.T) {
_, err = body.Write(b) _, err = body.Write(b)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_electras", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_electras", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -2232,7 +2232,7 @@ func TestSubmitAttesterSlashings(t *testing.T) {
_, err = body.Write(b) _, err = body.Write(b)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_slashings", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_slashings", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -2262,7 +2262,7 @@ func TestSubmitAttesterSlashings(t *testing.T) {
_, err = body.WriteString(invalidAttesterSlashing) _, err = body.WriteString(invalidAttesterSlashing)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_slashings", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/beacon/pool/attester_slashings", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}

File diff suppressed because it is too large Load Diff

View File

@@ -1442,7 +1442,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString("[]") _, err := body.WriteString("[]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1466,7 +1466,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString("[\"0\",\"1\"]") _, err := body.WriteString("[\"0\",\"1\"]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1494,7 +1494,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString(fmt.Sprintf("[\"%s\",\"%s\"]", hexPubkey1, hexPubkey2)) _, err := body.WriteString(fmt.Sprintf("[\"%s\",\"%s\"]", hexPubkey1, hexPubkey2))
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1521,7 +1521,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString(fmt.Sprintf("[\"%s\",\"1\"]", hexPubkey)) _, err := body.WriteString(fmt.Sprintf("[\"%s\",\"1\"]", hexPubkey))
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1548,7 +1548,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString(fmt.Sprintf("[\"%s\",\"%s\"]", hexPubkey, hexutil.Encode([]byte(strings.Repeat("x", fieldparams.BLSPubkeyLength))))) _, err := body.WriteString(fmt.Sprintf("[\"%s\",\"%s\"]", hexPubkey, hexutil.Encode([]byte(strings.Repeat("x", fieldparams.BLSPubkeyLength)))))
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1572,7 +1572,7 @@ func TestGetValidatorIdentities(t *testing.T) {
_, err := body.WriteString("[\"1\",\"99999\"]") _, err := body.WriteString("[\"1\",\"99999\"]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com/eth/v1/beacon/states/{state_id}/validator_identities", &body)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}

View File

@@ -68,7 +68,7 @@ func (s *Server) Blobs(w http.ResponseWriter, r *http.Request) {
httputil.HandleError(w, err.Error(), http.StatusInternalServerError) httputil.HandleError(w, err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteSsz(w, sszResp) httputil.WriteSsz(w, sszResp)
return return
} }
@@ -91,7 +91,7 @@ func (s *Server) Blobs(w http.ResponseWriter, r *http.Request) {
ExecutionOptimistic: isOptimistic, ExecutionOptimistic: isOptimistic,
Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot), Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot),
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }
@@ -180,7 +180,7 @@ func (s *Server) GetBlobs(w http.ResponseWriter, r *http.Request) {
copy(sszData[i*sszLen:(i+1)*sszLen], verifiedBlobs[i].Blob) copy(sszData[i*sszLen:(i+1)*sszLen], verifiedBlobs[i].Blob)
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteSsz(w, sszData) httputil.WriteSsz(w, sszData)
return return
} }
@@ -205,7 +205,7 @@ func (s *Server) GetBlobs(w http.ResponseWriter, r *http.Request) {
ExecutionOptimistic: isOptimistic, ExecutionOptimistic: isOptimistic,
Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot), Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot),
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }

View File

@@ -227,7 +227,7 @@ func TestBlobs(t *testing.T) {
} }
s.Blobs(writer, request) s.Blobs(writer, request)
assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.SidecarsResponse{} resp := &structs.SidecarsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
@@ -381,7 +381,7 @@ func TestBlobs(t *testing.T) {
t.Run("ssz", func(t *testing.T) { t.Run("ssz", func(t *testing.T) {
u := "http://foo.example/finalized?indices=0" u := "http://foo.example/finalized?indices=0"
request := httptest.NewRequest("GET", u, nil) request := httptest.NewRequest("GET", u, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.Blocker = &lookup.BeaconDbBlocker{ s.Blocker = &lookup.BeaconDbBlocker{
@@ -393,7 +393,7 @@ func TestBlobs(t *testing.T) {
BlobStorage: bs, BlobStorage: bs,
} }
s.Blobs(writer, request) s.Blobs(writer, request)
assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
require.Equal(t, len(writer.Body.Bytes()), fieldparams.BlobSidecarSize) // size of each sidecar require.Equal(t, len(writer.Body.Bytes()), fieldparams.BlobSidecarSize) // size of each sidecar
// can directly unmarshal to sidecar since there's only 1 // can directly unmarshal to sidecar since there's only 1
@@ -404,7 +404,7 @@ func TestBlobs(t *testing.T) {
t.Run("ssz multiple blobs", func(t *testing.T) { t.Run("ssz multiple blobs", func(t *testing.T) {
u := "http://foo.example/finalized" u := "http://foo.example/finalized"
request := httptest.NewRequest("GET", u, nil) request := httptest.NewRequest("GET", u, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.Blocker = &lookup.BeaconDbBlocker{ s.Blocker = &lookup.BeaconDbBlocker{
@@ -467,7 +467,7 @@ func TestBlobs_Electra(t *testing.T) {
} }
s.Blobs(writer, request) s.Blobs(writer, request)
assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.SidecarsResponse{} resp := &structs.SidecarsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
@@ -499,7 +499,7 @@ func TestBlobs_Electra(t *testing.T) {
} }
s.Blobs(writer, request) s.Blobs(writer, request)
assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.SidecarsResponse{} resp := &structs.SidecarsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
@@ -867,7 +867,7 @@ func TestGetBlobs(t *testing.T) {
t.Run("ssz", func(t *testing.T) { t.Run("ssz", func(t *testing.T) {
u := "http://foo.example/finalized" u := "http://foo.example/finalized"
request := httptest.NewRequest("GET", u, nil) request := httptest.NewRequest("GET", u, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.Blocker = &lookup.BeaconDbBlocker{ s.Blocker = &lookup.BeaconDbBlocker{
@@ -879,7 +879,7 @@ func TestGetBlobs(t *testing.T) {
BlobStorage: bs, BlobStorage: bs,
} }
s.GetBlobs(writer, request) s.GetBlobs(writer, request)
assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
require.Equal(t, fieldparams.BlobSize*4, len(writer.Body.Bytes())) // size of 4 sidecars require.Equal(t, fieldparams.BlobSize*4, len(writer.Body.Bytes())) // size of 4 sidecars
// unmarshal all 4 blobs // unmarshal all 4 blobs
@@ -889,7 +889,7 @@ func TestGetBlobs(t *testing.T) {
t.Run("ssz multiple blobs", func(t *testing.T) { t.Run("ssz multiple blobs", func(t *testing.T) {
u := "http://foo.example/finalized" u := "http://foo.example/finalized"
request := httptest.NewRequest("GET", u, nil) request := httptest.NewRequest("GET", u, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.Blocker = &lookup.BeaconDbBlocker{ s.Blocker = &lookup.BeaconDbBlocker{
@@ -1038,7 +1038,7 @@ func TestGetBlobs(t *testing.T) {
} }
s.GetBlobs(writer, request) s.GetBlobs(writer, request)
assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Electra), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.GetBlobsResponse{} resp := &structs.GetBlobsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
@@ -1078,7 +1078,7 @@ func TestGetBlobs(t *testing.T) {
} }
s.GetBlobs(writer, request) s.GetBlobs(writer, request)
assert.Equal(t, version.String(version.Fulu), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Fulu), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.GetBlobsResponse{} resp := &structs.GetBlobsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
@@ -1132,7 +1132,7 @@ func TestGetBlobs(t *testing.T) {
} }
s.GetBlobs(writer, request) s.GetBlobs(writer, request)
assert.Equal(t, version.String(version.Fulu), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Fulu), writer.Header().Get(api.EthConsensusVersionHeader))
assert.Equal(t, http.StatusOK, writer.Code) assert.Equal(t, http.StatusOK, writer.Code)
resp := &structs.GetBlobsResponse{} resp := &structs.GetBlobsResponse{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))

View File

@@ -129,7 +129,7 @@ func (s *Server) getBeaconStateV2(ctx context.Context, w http.ResponseWriter, id
Finalized: isFinalized, Finalized: isFinalized,
Data: jsonBytes, Data: jsonBytes,
} }
w.Header().Set(api.VersionHeader, ver) w.Header().Set(api.EthConsensusVersionHeader, ver)
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }
@@ -145,7 +145,7 @@ func (s *Server) getBeaconStateSSZV2(ctx context.Context, w http.ResponseWriter,
httputil.HandleError(w, "Could not marshal state into SSZ: "+err.Error(), http.StatusInternalServerError) httputil.HandleError(w, "Could not marshal state into SSZ: "+err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(st.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(st.Version()))
httputil.WriteSsz(w, sszState) httputil.WriteSsz(w, sszState)
} }
@@ -279,7 +279,7 @@ func (s *Server) DataColumnSidecars(w http.ResponseWriter, r *http.Request) {
httputil.HandleError(w, err.Error(), http.StatusInternalServerError) httputil.HandleError(w, err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteSsz(w, sszResp) httputil.WriteSsz(w, sszResp)
return return
} }
@@ -302,7 +302,7 @@ func (s *Server) DataColumnSidecars(w http.ResponseWriter, r *http.Request) {
ExecutionOptimistic: isOptimistic, ExecutionOptimistic: isOptimistic,
Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot), Finalized: s.FinalizationFetcher.IsFinalized(ctx, blkRoot),
} }
w.Header().Set(api.VersionHeader, version.String(blk.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(blk.Version()))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }

View File

@@ -320,13 +320,13 @@ func TestGetBeaconStateSSZV2(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil) request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetBeaconStateV2(writer, request) s.GetBeaconStateV2(writer, request)
require.Equal(t, http.StatusOK, writer.Code) require.Equal(t, http.StatusOK, writer.Code)
assert.Equal(t, version.String(version.Phase0), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Phase0), writer.Header().Get(api.EthConsensusVersionHeader))
sszExpected, err := fakeState.MarshalSSZ() sszExpected, err := fakeState.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, sszExpected, writer.Body.Bytes()) assert.DeepEqual(t, sszExpected, writer.Body.Bytes())
@@ -344,13 +344,13 @@ func TestGetBeaconStateSSZV2(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil) request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetBeaconStateV2(writer, request) s.GetBeaconStateV2(writer, request)
require.Equal(t, http.StatusOK, writer.Code) require.Equal(t, http.StatusOK, writer.Code)
assert.Equal(t, version.String(version.Altair), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Altair), writer.Header().Get(api.EthConsensusVersionHeader))
sszExpected, err := fakeState.MarshalSSZ() sszExpected, err := fakeState.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, sszExpected, writer.Body.Bytes()) assert.DeepEqual(t, sszExpected, writer.Body.Bytes())
@@ -368,13 +368,13 @@ func TestGetBeaconStateSSZV2(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil) request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetBeaconStateV2(writer, request) s.GetBeaconStateV2(writer, request)
require.Equal(t, http.StatusOK, writer.Code) require.Equal(t, http.StatusOK, writer.Code)
assert.Equal(t, version.String(version.Bellatrix), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Bellatrix), writer.Header().Get(api.EthConsensusVersionHeader))
sszExpected, err := fakeState.MarshalSSZ() sszExpected, err := fakeState.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, sszExpected, writer.Body.Bytes()) assert.DeepEqual(t, sszExpected, writer.Body.Bytes())
@@ -392,13 +392,13 @@ func TestGetBeaconStateSSZV2(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil) request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetBeaconStateV2(writer, request) s.GetBeaconStateV2(writer, request)
require.Equal(t, http.StatusOK, writer.Code) require.Equal(t, http.StatusOK, writer.Code)
assert.Equal(t, version.String(version.Capella), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Capella), writer.Header().Get(api.EthConsensusVersionHeader))
sszExpected, err := fakeState.MarshalSSZ() sszExpected, err := fakeState.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, sszExpected, writer.Body.Bytes()) assert.DeepEqual(t, sszExpected, writer.Body.Bytes())
@@ -416,13 +416,13 @@ func TestGetBeaconStateSSZV2(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil) request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/debug/beacon/states/{state_id}", nil)
request.SetPathValue("state_id", "head") request.SetPathValue("state_id", "head")
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetBeaconStateV2(writer, request) s.GetBeaconStateV2(writer, request)
require.Equal(t, http.StatusOK, writer.Code) require.Equal(t, http.StatusOK, writer.Code)
assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.VersionHeader)) assert.Equal(t, version.String(version.Deneb), writer.Header().Get(api.EthConsensusVersionHeader))
sszExpected, err := fakeState.MarshalSSZ() sszExpected, err := fakeState.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, sszExpected, writer.Body.Bytes()) assert.DeepEqual(t, sszExpected, writer.Body.Bytes())

View File

@@ -101,7 +101,7 @@ func (w *StreamingResponseWriterRecorder) RequireStatus(t *testing.T, status int
} }
func (w *StreamingResponseWriterRecorder) Flush() { func (w *StreamingResponseWriterRecorder) Flush() {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
fw, ok := w.ResponseWriter.(http.Flusher) fw, ok := w.ResponseWriter.(http.Flusher)
if ok { if ok {
fw.Flush() fw.Flush()

View File

@@ -31,6 +31,7 @@ go_test(
srcs = ["handlers_test.go"], srcs = ["handlers_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//api/server/structs:go_default_library", "//api/server/structs:go_default_library",
"//async/event:go_default_library", "//async/event:go_default_library",
"//beacon-chain/blockchain/testing:go_default_library", "//beacon-chain/blockchain/testing:go_default_library",

View File

@@ -43,7 +43,7 @@ func (s *Server) GetLightClientBootstrap(w http.ResponseWriter, req *http.Reques
return return
} }
w.Header().Set(api.VersionHeader, version.String(bootstrap.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(bootstrap.Version()))
if httputil.RespondWithSsz(req) { if httputil.RespondWithSsz(req) {
ssz, err := bootstrap.MarshalSSZ() ssz, err := bootstrap.MarshalSSZ()
@@ -111,7 +111,7 @@ func (s *Server) GetLightClientUpdatesByRange(w http.ResponseWriter, req *http.R
} }
if httputil.RespondWithSsz(req) { if httputil.RespondWithSsz(req) {
w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set(api.ContentTypeHeader, api.OctetStreamMediaType)
for _, update := range updates { for _, update := range updates {
if ctx.Err() != nil { if ctx.Err() != nil {
@@ -174,7 +174,7 @@ func (s *Server) GetLightClientFinalityUpdate(w http.ResponseWriter, req *http.R
return return
} }
w.Header().Set(api.VersionHeader, version.String(update.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(update.Version()))
if httputil.RespondWithSsz(req) { if httputil.RespondWithSsz(req) {
data, err := update.MarshalSSZ() data, err := update.MarshalSSZ()
if err != nil { if err != nil {
@@ -207,7 +207,7 @@ func (s *Server) GetLightClientOptimisticUpdate(w http.ResponseWriter, req *http
return return
} }
w.Header().Set(api.VersionHeader, version.String(update.Version())) w.Header().Set(api.EthConsensusVersionHeader, version.String(update.Version()))
if httputil.RespondWithSsz(req) { if httputil.RespondWithSsz(req) {
data, err := update.MarshalSSZ() data, err := update.MarshalSSZ()
if err != nil { if err != nil {

View File

@@ -11,6 +11,7 @@ import (
"strconv" "strconv"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
"github.com/OffchainLabs/prysm/v6/async/event" "github.com/OffchainLabs/prysm/v6/async/event"
blockchainTest "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing" blockchainTest "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing"
@@ -114,7 +115,7 @@ func TestLightClientHandler_GetLightClientBootstrap(t *testing.T) {
} }
request := httptest.NewRequest("GET", "http://foo.com/", nil) request := httptest.NewRequest("GET", "http://foo.com/", nil)
request.SetPathValue("block_root", hexutil.Encode(blockRoot[:])) request.SetPathValue("block_root", hexutil.Encode(blockRoot[:]))
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -235,7 +236,7 @@ func TestLightClientHandler_GetLightClientByRange(t *testing.T) {
t.Run("single update ssz", func(t *testing.T) { t.Run("single update ssz", func(t *testing.T) {
url := fmt.Sprintf("http://foo.com/?count=1&start_period=%d", startPeriod) url := fmt.Sprintf("http://foo.com/?count=1&start_period=%d", startPeriod)
request := httptest.NewRequest("GET", url, nil) request := httptest.NewRequest("GET", url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -290,7 +291,7 @@ func TestLightClientHandler_GetLightClientByRange(t *testing.T) {
t.Run("multiple updates ssz", func(t *testing.T) { t.Run("multiple updates ssz", func(t *testing.T) {
url := fmt.Sprintf("http://foo.com/?count=100&start_period=%d", startPeriod) url := fmt.Sprintf("http://foo.com/?count=100&start_period=%d", startPeriod)
request := httptest.NewRequest("GET", url, nil) request := httptest.NewRequest("GET", url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -405,7 +406,7 @@ func TestLightClientHandler_GetLightClientByRange(t *testing.T) {
t.Run("ssz", func(t *testing.T) { t.Run("ssz", func(t *testing.T) {
url := fmt.Sprintf("http://foo.com/?count=100&start_period=%d", startPeriod) url := fmt.Sprintf("http://foo.com/?count=100&start_period=%d", startPeriod)
request := httptest.NewRequest("GET", url, nil) request := httptest.NewRequest("GET", url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -777,7 +778,7 @@ func TestLightClientHandler_GetLightClientFinalityUpdate(t *testing.T) {
s.LCStore.SetLastFinalityUpdate(update, false) s.LCStore.SetLastFinalityUpdate(update, false)
request := httptest.NewRequest("GET", "http://foo.com", nil) request := httptest.NewRequest("GET", "http://foo.com", nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetLightClientFinalityUpdate(writer, request) s.GetLightClientFinalityUpdate(writer, request)
@@ -870,7 +871,7 @@ func TestLightClientHandler_GetLightClientOptimisticUpdate(t *testing.T) {
s.LCStore.SetLastOptimisticUpdate(update, false) s.LCStore.SetLastOptimisticUpdate(update, false)
request := httptest.NewRequest("GET", "http://foo.com", nil) request := httptest.NewRequest("GET", "http://foo.com", nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
s.GetLightClientOptimisticUpdate(writer, request) s.GetLightClientOptimisticUpdate(writer, request)

View File

@@ -127,7 +127,7 @@ func (s *Server) GetAggregateAttestationV2(w http.ResponseWriter, r *http.Reques
} }
} }
w.Header().Set(api.VersionHeader, version.String(v)) w.Header().Set(api.EthConsensusVersionHeader, version.String(v))
httputil.WriteSsz(w, data) httputil.WriteSsz(w, data)
return return
} }
@@ -160,7 +160,7 @@ func (s *Server) GetAggregateAttestationV2(w http.ResponseWriter, r *http.Reques
} }
resp.Data = data resp.Data = data
} }
w.Header().Set(api.VersionHeader, version.String(v)) w.Header().Set(api.EthConsensusVersionHeader, version.String(v))
httputil.WriteJson(w, resp) httputil.WriteJson(w, resp)
} }
@@ -397,9 +397,9 @@ func (s *Server) SubmitAggregateAndProofsV2(w http.ResponseWriter, r *http.Reque
return return
} }
versionHeader := r.Header.Get(api.VersionHeader) versionHeader := r.Header.Get(api.EthConsensusVersionHeader)
if versionHeader == "" { if versionHeader == "" {
httputil.HandleError(w, api.VersionHeader+" header is required", http.StatusBadRequest) httputil.HandleError(w, api.EthConsensusVersionHeader+" header is required", http.StatusBadRequest)
return return
} }
v, err := version.FromString(versionHeader) v, err := version.FromString(versionHeader)

View File

@@ -123,20 +123,20 @@ func (s *Server) produceBlockV3(ctx context.Context, w http.ResponseWriter, r *h
consensusBlockValue = "0" consensusBlockValue = "0"
} }
w.Header().Set(api.ExecutionPayloadBlindedHeader, fmt.Sprintf("%v", v1alpha1resp.IsBlinded)) w.Header().Set(api.EthExecutionPayloadBlindedHeader, fmt.Sprintf("%v", v1alpha1resp.IsBlinded))
w.Header().Set(api.ExecutionPayloadValueHeader, v1alpha1resp.PayloadValue) w.Header().Set(api.EthExecutionPayloadValueHeader, v1alpha1resp.PayloadValue)
w.Header().Set(api.ConsensusBlockValueHeader, consensusBlockValue) w.Header().Set(api.EthConsensusBlockValueHeader, consensusBlockValue)
phase0Block, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Phase0) phase0Block, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Phase0)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Phase0)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
// rewards aren't used in phase 0 // rewards aren't used in phase 0
handleProducePhase0V3(w, isSSZ, phase0Block, v1alpha1resp.PayloadValue) handleProducePhase0V3(w, isSSZ, phase0Block, v1alpha1resp.PayloadValue)
return return
} }
altairBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Altair) altairBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Altair)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Altair)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Altair))
handleProduceAltairV3(w, isSSZ, altairBlock, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceAltairV3(w, isSSZ, altairBlock, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
@@ -151,61 +151,61 @@ func (s *Server) produceBlockV3(ctx context.Context, w http.ResponseWriter, r *h
} }
blindedBellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedBellatrix) blindedBellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedBellatrix)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Bellatrix)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Bellatrix))
handleProduceBlindedBellatrixV3(w, isSSZ, blindedBellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBlindedBellatrixV3(w, isSSZ, blindedBellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
bellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Bellatrix) bellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Bellatrix)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Bellatrix)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Bellatrix))
handleProduceBellatrixV3(w, isSSZ, bellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBellatrixV3(w, isSSZ, bellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
blindedCapellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedCapella) blindedCapellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedCapella)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Capella)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Capella))
handleProduceBlindedCapellaV3(w, isSSZ, blindedCapellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBlindedCapellaV3(w, isSSZ, blindedCapellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
capellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Capella) capellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Capella)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Capella)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Capella))
handleProduceCapellaV3(w, isSSZ, capellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceCapellaV3(w, isSSZ, capellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
blindedDenebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedDeneb) blindedDenebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedDeneb)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Deneb)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Deneb))
handleProduceBlindedDenebV3(w, isSSZ, blindedDenebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBlindedDenebV3(w, isSSZ, blindedDenebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
denebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Deneb) denebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Deneb)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Deneb)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Deneb))
handleProduceDenebV3(w, isSSZ, denebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceDenebV3(w, isSSZ, denebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
blindedElectraBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedElectra) blindedElectraBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedElectra)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Electra)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Electra))
handleProduceBlindedElectraV3(w, isSSZ, blindedElectraBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBlindedElectraV3(w, isSSZ, blindedElectraBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
electraBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Electra) electraBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Electra)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Electra)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Electra))
handleProduceElectraV3(w, isSSZ, electraBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceElectraV3(w, isSSZ, electraBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
blindedFuluBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedFulu) blindedFuluBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedFulu)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Fulu)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Fulu))
handleProduceBlindedFuluV3(w, isSSZ, blindedFuluBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceBlindedFuluV3(w, isSSZ, blindedFuluBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }
fuluBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Fulu) fuluBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Fulu)
if ok { if ok {
w.Header().Set(api.VersionHeader, version.String(version.Fulu)) w.Header().Set(api.EthConsensusVersionHeader, version.String(version.Fulu))
handleProduceFuluV3(w, isSSZ, fuluBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) handleProduceFuluV3(w, isSSZ, fuluBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue)
return return
} }

View File

@@ -64,10 +64,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"phase0","execution_payload_blinded":false,"execution_payload_value":"","consensus_block_value":"","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"phase0","execution_payload_blinded":false,"execution_payload_value":"","consensus_block_value":"","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "phase0", writer.Header().Get(api.VersionHeader)) require.Equal(t, "phase0", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Altair", func(t *testing.T) { t.Run("Altair", func(t *testing.T) {
var block *structs.SignedBeaconBlockAltair var block *structs.SignedBeaconBlockAltair
@@ -100,10 +100,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"altair","execution_payload_blinded":false,"execution_payload_value":"","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"altair","execution_payload_blinded":false,"execution_payload_value":"","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "altair", writer.Header().Get(api.VersionHeader)) require.Equal(t, "altair", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Bellatrix", func(t *testing.T) { t.Run("Bellatrix", func(t *testing.T) {
var block *structs.SignedBeaconBlockBellatrix var block *structs.SignedBeaconBlockBellatrix
@@ -138,10 +138,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) require.Equal(t, "bellatrix", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("BlindedBellatrix", func(t *testing.T) { t.Run("BlindedBellatrix", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockBellatrix var block *structs.SignedBlindedBeaconBlockBellatrix
@@ -176,10 +176,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) require.Equal(t, "bellatrix", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Capella", func(t *testing.T) { t.Run("Capella", func(t *testing.T) {
var block *structs.SignedBeaconBlockCapella var block *structs.SignedBeaconBlockCapella
@@ -214,10 +214,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) require.Equal(t, "capella", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Capella", func(t *testing.T) { t.Run("Blinded Capella", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockCapella var block *structs.SignedBlindedBeaconBlockCapella
@@ -252,10 +252,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) require.Equal(t, "capella", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Deneb", func(t *testing.T) { t.Run("Deneb", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsDeneb var block *structs.SignedBeaconBlockContentsDeneb
@@ -290,10 +290,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) require.Equal(t, "deneb", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Deneb", func(t *testing.T) { t.Run("Blinded Deneb", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockDeneb var block *structs.SignedBlindedBeaconBlockDeneb
@@ -328,10 +328,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) require.Equal(t, "deneb", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Electra", func(t *testing.T) { t.Run("Electra", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsElectra var block *structs.SignedBeaconBlockContentsElectra
@@ -366,10 +366,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"electra","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"electra","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "electra", writer.Header().Get(api.VersionHeader)) require.Equal(t, "electra", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Electra", func(t *testing.T) { t.Run("Blinded Electra", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockElectra var block *structs.SignedBlindedBeaconBlockElectra
@@ -404,10 +404,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"electra","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"electra","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "electra", writer.Header().Get(api.VersionHeader)) require.Equal(t, "electra", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Fulu", func(t *testing.T) { t.Run("Fulu", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsFulu var block *structs.SignedBeaconBlockContentsFulu
@@ -442,10 +442,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Fulu", func(t *testing.T) { t.Run("Blinded Fulu", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockFulu var block *structs.SignedBlindedBeaconBlockFulu
@@ -480,10 +480,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10000000000","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("invalid query parameter slot empty", func(t *testing.T) { t.Run("invalid query parameter slot empty", func(t *testing.T) {
v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl)
@@ -573,10 +573,10 @@ func TestProduceBlockV3(t *testing.T) {
want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"0","data":%s}`, string(jsonBytes)) want := fmt.Sprintf(`{"version":"fulu","execution_payload_blinded":false,"execution_payload_value":"2000","consensus_block_value":"0","data":%s}`, string(jsonBytes))
body := strings.ReplaceAll(writer.Body.String(), "\n", "") body := strings.ReplaceAll(writer.Body.String(), "\n", "")
require.Equal(t, want, body) require.Equal(t, want, body)
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "0", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "0", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
} }
@@ -611,7 +611,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
SyncChecker: syncChecker, SyncChecker: syncChecker,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -623,10 +623,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Phase0.Block.MarshalSSZ() ssz, err := bl.Phase0.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "phase0", writer.Header().Get(api.VersionHeader)) require.Equal(t, "phase0", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Altair", func(t *testing.T) { t.Run("Altair", func(t *testing.T) {
var block *structs.SignedBeaconBlockAltair var block *structs.SignedBeaconBlockAltair
@@ -649,7 +649,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -661,10 +661,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Altair.Block.MarshalSSZ() ssz, err := bl.Altair.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "altair", writer.Header().Get(api.VersionHeader)) require.Equal(t, "altair", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Bellatrix", func(t *testing.T) { t.Run("Bellatrix", func(t *testing.T) {
var block *structs.SignedBeaconBlockBellatrix var block *structs.SignedBeaconBlockBellatrix
@@ -691,7 +691,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -703,10 +703,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Bellatrix.Block.MarshalSSZ() ssz, err := bl.Bellatrix.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) require.Equal(t, "bellatrix", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("BlindedBellatrix", func(t *testing.T) { t.Run("BlindedBellatrix", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockBellatrix var block *structs.SignedBlindedBeaconBlockBellatrix
@@ -732,7 +732,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -744,10 +744,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.BlindedBellatrix.Block.MarshalSSZ() ssz, err := bl.BlindedBellatrix.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) require.Equal(t, "bellatrix", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Capella", func(t *testing.T) { t.Run("Capella", func(t *testing.T) {
var block *structs.SignedBeaconBlockCapella var block *structs.SignedBeaconBlockCapella
@@ -773,7 +773,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -785,10 +785,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Capella.Block.MarshalSSZ() ssz, err := bl.Capella.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) require.Equal(t, "capella", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Capella", func(t *testing.T) { t.Run("Blinded Capella", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockCapella var block *structs.SignedBlindedBeaconBlockCapella
@@ -814,7 +814,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -826,10 +826,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.BlindedCapella.Block.MarshalSSZ() ssz, err := bl.BlindedCapella.Block.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) require.Equal(t, "capella", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Deneb", func(t *testing.T) { t.Run("Deneb", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsDeneb var block *structs.SignedBeaconBlockContentsDeneb
@@ -855,7 +855,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -867,10 +867,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Deneb.MarshalSSZ() ssz, err := bl.Deneb.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) require.Equal(t, "deneb", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Deneb", func(t *testing.T) { t.Run("Blinded Deneb", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockDeneb var block *structs.SignedBlindedBeaconBlockDeneb
@@ -896,7 +896,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -908,10 +908,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.BlindedDeneb.MarshalSSZ() ssz, err := bl.BlindedDeneb.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) require.Equal(t, "deneb", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Electra", func(t *testing.T) { t.Run("Electra", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsElectra var block *structs.SignedBeaconBlockContentsElectra
@@ -937,7 +937,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -949,10 +949,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Electra.MarshalSSZ() ssz, err := bl.Electra.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "electra", writer.Header().Get(api.VersionHeader)) require.Equal(t, "electra", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Electra", func(t *testing.T) { t.Run("Blinded Electra", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockElectra var block *structs.SignedBlindedBeaconBlockElectra
@@ -978,7 +978,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -990,10 +990,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.BlindedElectra.MarshalSSZ() ssz, err := bl.BlindedElectra.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "electra", writer.Header().Get(api.VersionHeader)) require.Equal(t, "electra", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Fulu", func(t *testing.T) { t.Run("Fulu", func(t *testing.T) {
var block *structs.SignedBeaconBlockContentsFulu var block *structs.SignedBeaconBlockContentsFulu
@@ -1019,7 +1019,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -1031,10 +1031,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Fulu.MarshalSSZ() ssz, err := bl.Fulu.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("Blinded Fulu", func(t *testing.T) { t.Run("Blinded Fulu", func(t *testing.T) {
var block *structs.SignedBlindedBeaconBlockFulu var block *structs.SignedBlindedBeaconBlockFulu
@@ -1060,7 +1060,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -1072,10 +1072,10 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.BlindedFulu.MarshalSSZ() ssz, err := bl.BlindedFulu.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "true", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "10000000000", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "10000000000", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
t.Run("0 block value is returned on error", func(t *testing.T) { t.Run("0 block value is returned on error", func(t *testing.T) {
rewardFetcher := &rewardtesting.MockBlockRewardFetcher{Error: &httputil.DefaultJsonError{}} rewardFetcher := &rewardtesting.MockBlockRewardFetcher{Error: &httputil.DefaultJsonError{}}
@@ -1103,7 +1103,7 @@ func TestProduceBlockV3SSZ(t *testing.T) {
BlockRewardFetcher: rewardFetcher, BlockRewardFetcher: rewardFetcher,
} }
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil) request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://foo.example/eth/v3/validator/blocks/1?randao_reveal=%s&graffiti=%s", randao, graffiti), nil)
request.Header.Set("Accept", api.OctetStreamMediaType) request.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
server.ProduceBlockV3(writer, request) server.ProduceBlockV3(writer, request)
@@ -1115,9 +1115,9 @@ func TestProduceBlockV3SSZ(t *testing.T) {
ssz, err := bl.Fulu.MarshalSSZ() ssz, err := bl.Fulu.MarshalSSZ()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, string(ssz), writer.Body.String()) require.Equal(t, string(ssz), writer.Body.String())
require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) require.Equal(t, "false", writer.Header().Get(api.EthExecutionPayloadBlindedHeader))
require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) require.Equal(t, "2000", writer.Header().Get(api.EthExecutionPayloadValueHeader))
require.Equal(t, "fulu", writer.Header().Get(api.VersionHeader)) require.Equal(t, "fulu", writer.Header().Get(api.EthConsensusVersionHeader))
require.Equal(t, "0", writer.Header().Get(api.ConsensusBlockValueHeader)) require.Equal(t, "0", writer.Header().Get(api.EthConsensusBlockValueHeader))
}) })
} }

View File

@@ -312,7 +312,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=2" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=2" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -349,7 +349,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=1" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=1" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -460,7 +460,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=2" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=2" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -497,7 +497,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=1" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=1" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -533,7 +533,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=4" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=4" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -574,7 +574,7 @@ func TestGetAggregateAttestation(t *testing.T) {
attDataRoot := hexutil.Encode(reqRoot[:]) attDataRoot := hexutil.Encode(reqRoot[:])
url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=3" + "&committee_index=0" url := "http://example.com?attestation_data_root=" + attDataRoot + "&slot=3" + "&committee_index=0"
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
s.GetAggregateAttestationV2(writer, request) s.GetAggregateAttestationV2(writer, request)
@@ -819,7 +819,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(singleAggregateElectra) _, err := body.WriteString(singleAggregateElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -835,7 +835,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(singleAggregate) _, err := body.WriteString(singleAggregate)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -857,7 +857,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(multipleAggregatesElectra) _, err := body.WriteString(multipleAggregatesElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -874,7 +874,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(multipleAggregates) _, err := body.WriteString(multipleAggregates)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -892,7 +892,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(singleAggregate) _, err := body.WriteString(singleAggregate)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Phase0)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Phase0))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -907,7 +907,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(singleAggregateElectra) _, err := body.WriteString(singleAggregateElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -919,7 +919,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
}) })
t.Run("no body", func(t *testing.T) { t.Run("no body", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) request := httptest.NewRequest(http.MethodPost, "http://example.com", nil)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -932,7 +932,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
}) })
t.Run("no body-pre-electra", func(t *testing.T) { t.Run("no body-pre-electra", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) request := httptest.NewRequest(http.MethodPost, "http://example.com", nil)
request.Header.Set(api.VersionHeader, version.String(version.Bellatrix)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Bellatrix))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -948,7 +948,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString("[]") _, err := body.WriteString("[]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -964,7 +964,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString("[]") _, err := body.WriteString("[]")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Altair)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Altair))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -980,7 +980,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(invalidAggregateElectra) _, err := body.WriteString(invalidAggregateElectra)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Electra)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Electra))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -995,7 +995,7 @@ func TestSubmitAggregateAndProofs(t *testing.T) {
_, err := body.WriteString(invalidAggregate) _, err := body.WriteString(invalidAggregate)
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) request := httptest.NewRequest(http.MethodPost, "http://example.com", &body)
request.Header.Set(api.VersionHeader, version.String(version.Deneb)) request.Header.Set(api.EthConsensusVersionHeader, version.String(version.Deneb))
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1460,7 +1460,7 @@ func TestGetAttestationData(t *testing.T) {
url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0) url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0)
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1779,7 +1779,7 @@ func TestGetAttestationData(t *testing.T) {
url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0) url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0)
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}
@@ -1968,7 +1968,7 @@ func TestGetAttestationData(t *testing.T) {
url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0) url := fmt.Sprintf("http://example.com?slot=%d&committee_index=%d", slot, 0)
request := httptest.NewRequest(http.MethodGet, url, nil) request := httptest.NewRequest(http.MethodGet, url, nil)
request.Header.Add("Accept", "application/octet-stream") request.Header.Add(api.AcceptHeader, api.OctetStreamMediaType)
writer := httptest.NewRecorder() writer := httptest.NewRecorder()
writer.Body = &bytes.Buffer{} writer.Body = &bytes.Buffer{}

View File

@@ -10,6 +10,7 @@ import (
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
chainMock "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing" chainMock "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers"
@@ -49,7 +50,7 @@ func individualVotesHelper(t *testing.T, request *structs.GetIndividualVotesRequ
&buf, &buf,
) )
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {

View File

@@ -34,6 +34,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//api/server/structs:go_default_library", "//api/server/structs:go_default_library",
"//beacon-chain/blockchain/testing:go_default_library", "//beacon-chain/blockchain/testing:go_default_library",
"//beacon-chain/core/altair:go_default_library", "//beacon-chain/core/altair:go_default_library",

View File

@@ -9,6 +9,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
mock "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing" mock "github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/testing"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/epoch/precompute" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/epoch/precompute"
@@ -38,7 +39,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
req := httptest.NewRequest("POST", "/foo", nil) req := httptest.NewRequest("POST", "/foo", nil)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, rawResp.StatusCode) require.Equal(t, http.StatusBadRequest, rawResp.StatusCode)
}) })
@@ -88,7 +89,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {
@@ -153,7 +154,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {
@@ -218,7 +219,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {
@@ -280,7 +281,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {
@@ -342,7 +343,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {
@@ -404,7 +405,7 @@ func TestServer_GetValidatorPerformance(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance)) srv := httptest.NewServer(http.HandlerFunc(vs.GetPerformance))
req := httptest.NewRequest("POST", "/foo", &buf) req := httptest.NewRequest("POST", "/foo", &buf)
client := &http.Client{} client := &http.Client{}
rawResp, err := client.Post(srv.URL, "application/json", req.Body) rawResp, err := client.Post(srv.URL, api.JsonMediaType, req.Body)
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
if err := rawResp.Body.Close(); err != nil { if err := rawResp.Body.Close(); err != nil {

View File

@@ -0,0 +1,3 @@
### Ignored
- Always use constants for API headers.

View File

@@ -46,6 +46,7 @@ go_test(
data = glob(["testdata/**"]), data = glob(["testdata/**"]),
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//api/server:go_default_library", "//api/server:go_default_library",
"//api/server/structs:go_default_library", "//api/server/structs:go_default_library",
"//config/params:go_default_library", "//config/params:go_default_library",

View File

@@ -11,6 +11,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/testing/assert" "github.com/OffchainLabs/prysm/v6/testing/assert"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
"github.com/OffchainLabs/prysm/v6/validator/rpc" "github.com/OffchainLabs/prysm/v6/validator/rpc"
@@ -23,8 +24,8 @@ func getValidatorHappyPathTestServer(t *testing.T) *httptest.Server {
key2 := "0x844ae9c6184d6edd46351b375f16f541b2d33b0ed0da9be4571b13938588aee840ba606a946f0e8023ae3a4b2a43b4d4" key2 := "0x844ae9c6184d6edd46351b375f16f541b2d33b0ed0da9be4571b13938588aee840ba606a946f0e8023ae3a4b2a43b4d4"
address1 := "0xb698D697092822185bF0311052215d5B5e1F3944" address1 := "0xb698D697092822185bF0311052215d5B5e1F3944"
return httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
if r.RequestURI == "/eth/v1/keystores" { if r.RequestURI == "/eth/v1/keystores" {
err := json.NewEncoder(w).Encode(&rpc.ListKeystoresResponse{ err := json.NewEncoder(w).Encode(&rpc.ListKeystoresResponse{

View File

@@ -11,6 +11,7 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server" "github.com/OffchainLabs/prysm/v6/api/server"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
"github.com/OffchainLabs/prysm/v6/config/params" "github.com/OffchainLabs/prysm/v6/config/params"
@@ -23,8 +24,8 @@ import (
func getHappyPathTestServer(file string, t *testing.T) *httptest.Server { func getHappyPathTestServer(file string, t *testing.T) *httptest.Server {
return httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
fmt.Println(r.RequestURI) fmt.Println(r.RequestURI)
if r.RequestURI == "/eth/v1/beacon/pool/bls_to_execution_changes" { if r.RequestURI == "/eth/v1/beacon/pool/bls_to_execution_changes" {
@@ -217,8 +218,8 @@ func TestCallWithdrawalEndpoint_Errors(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost && r.RequestURI == "/eth/v1/beacon/pool/bls_to_execution_changes" { if r.Method == http.MethodPost && r.RequestURI == "/eth/v1/beacon/pool/bls_to_execution_changes" {
w.WriteHeader(400) w.WriteHeader(http.StatusBadRequest)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
err = json.NewEncoder(w).Encode(&server.IndexedErrorContainer{ err = json.NewEncoder(w).Encode(&server.IndexedErrorContainer{
Failures: []*server.IndexedError{ Failures: []*server.IndexedError{
{Index: 0, Message: "Could not validate SignedBLSToExecutionChange"}, {Index: 0, Message: "Could not validate SignedBLSToExecutionChange"},
@@ -227,8 +228,8 @@ func TestCallWithdrawalEndpoint_Errors(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} else if r.Method == http.MethodGet { } else if r.Method == http.MethodGet {
if r.RequestURI == "/eth/v1/beacon/states/head/fork" { if r.RequestURI == "/eth/v1/beacon/states/head/fork" {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
err := json.NewEncoder(w).Encode(&structs.GetStateForkResponse{ err := json.NewEncoder(w).Encode(&structs.GetStateForkResponse{
Data: &structs.Fork{ Data: &structs.Fork{
PreviousVersion: hexutil.Encode(params.BeaconConfig().CapellaForkVersion), PreviousVersion: hexutil.Encode(params.BeaconConfig().CapellaForkVersion),
@@ -240,8 +241,8 @@ func TestCallWithdrawalEndpoint_Errors(t *testing.T) {
}) })
require.NoError(t, err) require.NoError(t, err)
} else if r.RequestURI == "/eth/v1/config/spec" { } else if r.RequestURI == "/eth/v1/config/spec" {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
m := make(map[string]string) m := make(map[string]string)
m["CAPELLA_FORK_EPOCH"] = "1350" m["CAPELLA_FORK_EPOCH"] = "1350"
err := json.NewEncoder(w).Encode(&structs.GetSpecResponse{ err := json.NewEncoder(w).Encode(&structs.GetSpecResponse{
@@ -249,8 +250,8 @@ func TestCallWithdrawalEndpoint_Errors(t *testing.T) {
}) })
require.NoError(t, err) require.NoError(t, err)
} else { } else {
w.WriteHeader(400) w.WriteHeader(http.StatusBadRequest)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
} }
} }
})) }))
@@ -283,8 +284,8 @@ func TestCallWithdrawalEndpoint_ForkBeforeCapella(t *testing.T) {
l, err := net.Listen("tcp", baseurl) l, err := net.Listen("tcp", baseurl)
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
if r.RequestURI == "/eth/v1/beacon/states/head/fork" { if r.RequestURI == "/eth/v1/beacon/states/head/fork" {
err := json.NewEncoder(w).Encode(&structs.GetStateForkResponse{ err := json.NewEncoder(w).Encode(&structs.GetStateForkResponse{
@@ -332,8 +333,8 @@ func TestVerifyWithdrawal_Multiple(t *testing.T) {
l, err := net.Listen("tcp", baseurl) l, err := net.Listen("tcp", baseurl)
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
b, err := os.ReadFile(filepath.Clean(file)) b, err := os.ReadFile(filepath.Clean(file))
require.NoError(t, err) require.NoError(t, err)

View File

@@ -20,6 +20,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/config", importpath = "github.com/OffchainLabs/prysm/v6/config",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"@com_github_ethereum_go_ethereum//common:go_default_library", "@com_github_ethereum_go_ethereum//common:go_default_library",
"@com_github_pkg_errors//:go_default_library", "@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",

View File

@@ -7,6 +7,7 @@ go_test(
data = glob(["testdata/**"]), data = glob(["testdata/**"]),
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//cmd/validator/flags:go_default_library", "//cmd/validator/flags:go_default_library",
"//config/fieldparams:go_default_library", "//config/fieldparams:go_default_library",
"//config/params:go_default_library", "//config/params:go_default_library",

View File

@@ -8,6 +8,7 @@ import (
"os" "os"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/cmd/validator/flags" "github.com/OffchainLabs/prysm/v6/cmd/validator/flags"
fieldparams "github.com/OffchainLabs/prysm/v6/config/fieldparams" fieldparams "github.com/OffchainLabs/prysm/v6/config/fieldparams"
"github.com/OffchainLabs/prysm/v6/config/params" "github.com/OffchainLabs/prysm/v6/config/params"
@@ -907,8 +908,8 @@ func TestProposerSettingsLoader(t *testing.T) {
content, err := os.ReadFile(tt.args.proposerSettingsFlagValues.url) content, err := os.ReadFile(tt.args.proposerSettingsFlagValues.url)
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
_, err := fmt.Fprintf(w, "%s", content) _, err := fmt.Fprintf(w, "%s", content)
require.NoError(t, err) require.NoError(t, err)
})) }))

View File

@@ -10,6 +10,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/pkg/errors" "github.com/pkg/errors"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@@ -28,7 +29,7 @@ func UnmarshalFromURL(ctx context.Context, from string, to interface{}) error {
if err != nil { if err != nil {
return errors.Wrap(err, "failed to create http request") return errors.Wrap(err, "failed to create http request")
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
return errors.Wrap(err, "failed to send http request") return errors.Wrap(err, "failed to send http request")

View File

@@ -11,6 +11,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/monitoring/clientstats", importpath = "github.com/OffchainLabs/prysm/v6/monitoring/clientstats",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//proto/prysm/v1alpha1:go_default_library", "//proto/prysm/v1alpha1:go_default_library",
"@com_github_prometheus_client_model//go:go_default_library", "@com_github_prometheus_client_model//go:go_default_library",
"@com_github_prometheus_prom2json//:go_default_library", "@com_github_prometheus_prom2json//:go_default_library",

View File

@@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"github.com/OffchainLabs/prysm/v6/api"
) )
type genericWriter struct { type genericWriter struct {
@@ -30,7 +32,7 @@ type httpPoster struct {
} }
func (gw *httpPoster) Update(r io.Reader) error { func (gw *httpPoster) Update(r io.Reader) error {
resp, err := gw.client.Post(gw.url, "application/json", r) resp, err := gw.client.Post(gw.url, api.JsonMediaType, r)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -11,6 +11,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/monitoring/prometheus", importpath = "github.com/OffchainLabs/prysm/v6/monitoring/prometheus",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//runtime:go_default_library", "//runtime:go_default_library",
"@com_github_golang_gddo//httputil:go_default_library", "@com_github_golang_gddo//httputil:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library",
@@ -29,6 +30,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//runtime:go_default_library", "//runtime:go_default_library",
"//testing/assert:go_default_library", "//testing/assert:go_default_library",
"//testing/require:go_default_library", "//testing/require:go_default_library",

View File

@@ -6,14 +6,10 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/golang/gddo/httputil" "github.com/golang/gddo/httputil"
) )
const (
contentTypePlainText = "text/plain"
contentTypeJSON = "application/json"
)
// generatedResponse is a container for response output. // generatedResponse is a container for response output.
type generatedResponse struct { type generatedResponse struct {
// Err is protocol error, if any. // Err is protocol error, if any.
@@ -26,16 +22,16 @@ type generatedResponse struct {
// negotiateContentType parses "Accept:" header and returns preferred content type string. // negotiateContentType parses "Accept:" header and returns preferred content type string.
func negotiateContentType(r *http.Request) string { func negotiateContentType(r *http.Request) string {
contentTypes := []string{ contentTypes := []string{
contentTypePlainText, api.PlainMediaType,
contentTypeJSON, api.JsonMediaType,
} }
return httputil.NegotiateContentType(r, contentTypes, contentTypePlainText) return httputil.NegotiateContentType(r, contentTypes, api.PlainMediaType)
} }
// writeResponse is content-type aware response writer. // writeResponse is content-type aware response writer.
func writeResponse(w http.ResponseWriter, r *http.Request, response generatedResponse) error { func writeResponse(w http.ResponseWriter, r *http.Request, response generatedResponse) error {
switch negotiateContentType(r) { switch negotiateContentType(r) {
case contentTypePlainText: case api.PlainMediaType:
buf, ok := response.Data.(bytes.Buffer) buf, ok := response.Data.(bytes.Buffer)
if !ok { if !ok {
return fmt.Errorf("unexpected data: %v", response.Data) return fmt.Errorf("unexpected data: %v", response.Data)
@@ -43,8 +39,8 @@ func writeResponse(w http.ResponseWriter, r *http.Request, response generatedRes
if _, err := w.Write(buf.Bytes()); err != nil { if _, err := w.Write(buf.Bytes()); err != nil {
return fmt.Errorf("could not write response body: %w", err) return fmt.Errorf("could not write response body: %w", err)
} }
case contentTypeJSON: case api.JsonMediaType:
w.Header().Set("Content-Type", contentTypeJSON) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
if err := json.NewEncoder(w).Encode(response); err != nil { if err := json.NewEncoder(w).Encode(response); err != nil {
return err return err
} }

View File

@@ -12,6 +12,7 @@ import (
"runtime/pprof" "runtime/pprof"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/runtime" "github.com/OffchainLabs/prysm/v6/runtime"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
@@ -91,7 +92,7 @@ func (s *Service) healthzHandler(w http.ResponseWriter, r *http.Request) {
} }
// Handle plain text content. // Handle plain text content.
if contentType := negotiateContentType(r); contentType == contentTypePlainText { if contentType := negotiateContentType(r); contentType == api.PlainMediaType {
var buf bytes.Buffer var buf bytes.Buffer
for _, s := range statuses { for _, s := range statuses {
var status string var status string

View File

@@ -11,6 +11,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/runtime" "github.com/OffchainLabs/prysm/v6/runtime"
"github.com/OffchainLabs/prysm/v6/testing/assert" "github.com/OffchainLabs/prysm/v6/testing/assert"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
@@ -130,7 +131,7 @@ func TestContentNegotiation(t *testing.T) {
} }
// Request response as JSON. // Request response as JSON.
req.Header.Add("Accept", "application/json, */*;q=0.5") req.Header.Add(api.AcceptHeader, "application/json, */*;q=0.5")
rr = httptest.NewRecorder() rr = httptest.NewRecorder()
handler.ServeHTTP(rr, req) handler.ServeHTTP(rr, req)
@@ -161,7 +162,7 @@ func TestContentNegotiation(t *testing.T) {
} }
// Request response as JSON. // Request response as JSON.
req.Header.Add("Accept", "application/json, */*;q=0.5") req.Header.Add(api.AcceptHeader, "application/json, */*;q=0.5")
rr = httptest.NewRecorder() rr = httptest.NewRecorder()
handler.ServeHTTP(rr, req) handler.ServeHTTP(rr, req)

View File

@@ -10,6 +10,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/network", importpath = "github.com/OffchainLabs/prysm/v6/network",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//network/authorization:go_default_library", "//network/authorization:go_default_library",
"@com_github_ethereum_go_ethereum//rpc:go_default_library", "@com_github_ethereum_go_ethereum//rpc:go_default_library",
"@com_github_golang_jwt_jwt_v4//:go_default_library", "@com_github_golang_jwt_jwt_v4//:go_default_library",
@@ -28,6 +29,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//encoding/bytesutil:go_default_library", "//encoding/bytesutil:go_default_library",
"//network/authorization:go_default_library", "//network/authorization:go_default_library",
"//testing/assert:go_default_library", "//testing/assert:go_default_library",

View File

@@ -1,9 +1,11 @@
package network package network
import ( import (
"fmt"
"net/http" "net/http"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/golang-jwt/jwt/v4" "github.com/golang-jwt/jwt/v4"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@@ -47,6 +49,6 @@ func (t *jwtTransport) RoundTrip(req *http.Request) (*http.Response, error) {
if err != nil { if err != nil {
return nil, errors.Wrap(err, "could not produce signed JWT token") return nil, errors.Wrap(err, "could not produce signed JWT token")
} }
req.Header.Set("Authorization", "Bearer "+tokenString) req.Header.Set(api.AuthorizationHeader, fmt.Sprintf("%s %s", api.BearerAuthorization, tokenString))
return t.underlyingTransport.RoundTrip(req) return t.underlyingTransport.RoundTrip(req)
} }

View File

@@ -7,6 +7,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/encoding/bytesutil" "github.com/OffchainLabs/prysm/v6/encoding/bytesutil"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
"github.com/golang-jwt/jwt/v4" "github.com/golang-jwt/jwt/v4"
@@ -23,8 +24,8 @@ func TestJWTAuthTransport(t *testing.T) {
Transport: authTransport, Transport: authTransport,
} }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
reqToken := r.Header.Get("Authorization") reqToken := r.Header.Get(api.AuthorizationHeader)
splitToken := strings.Split(reqToken, "Bearer") splitToken := strings.Split(reqToken, api.BearerAuthorization)
// The format should be `Bearer ${token}`. // The format should be `Bearer ${token}`.
require.Equal(t, 2, len(splitToken)) require.Equal(t, 2, len(splitToken))
reqToken = strings.TrimSpace(splitToken[1]) reqToken = strings.TrimSpace(splitToken[1])
@@ -65,8 +66,8 @@ func TestJWTWithId(t *testing.T) {
Transport: authTransport, Transport: authTransport,
} }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
reqToken := r.Header.Get("Authorization") reqToken := r.Header.Get(api.AuthorizationHeader)
splitToken := strings.Split(reqToken, "Bearer") splitToken := strings.Split(reqToken, api.BearerAuthorization)
// The format should be `Bearer ${token}`. // The format should be `Bearer ${token}`.
require.Equal(t, 2, len(splitToken)) require.Equal(t, 2, len(splitToken))
reqToken = strings.TrimSpace(splitToken[1]) reqToken = strings.TrimSpace(splitToken[1])
@@ -109,8 +110,8 @@ func TestJWTWithoutId(t *testing.T) {
Transport: authTransport, Transport: authTransport,
} }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
reqToken := r.Header.Get("Authorization") reqToken := r.Header.Get(api.AuthorizationHeader)
splitToken := strings.Split(reqToken, "Bearer") splitToken := strings.Split(reqToken, api.BearerAuthorization)
// The format should be `Bearer ${token}`. // The format should be `Bearer ${token}`.
require.Equal(t, 2, len(splitToken)) require.Equal(t, 2, len(splitToken))
reqToken = strings.TrimSpace(splitToken[1]) reqToken = strings.TrimSpace(splitToken[1])

View File

@@ -9,6 +9,7 @@ import (
"net/url" "net/url"
"strings" "strings"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/network/authorization" "github.com/OffchainLabs/prysm/v6/network/authorization"
gethRPC "github.com/ethereum/go-ethereum/rpc" gethRPC "github.com/ethereum/go-ethereum/rpc"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@@ -51,9 +52,9 @@ func (d *AuthorizationData) Equals(other AuthorizationData) bool {
func (d *AuthorizationData) ToHeaderValue() (string, error) { func (d *AuthorizationData) ToHeaderValue() (string, error) {
switch d.Method { switch d.Method {
case authorization.Basic: case authorization.Basic:
return "Basic " + d.Value, nil return fmt.Sprintf("%s %s", api.BasicAuthorization, d.Value), nil
case authorization.Bearer: case authorization.Bearer:
return "Bearer " + d.Value, nil return fmt.Sprintf("%s %s", api.BearerAuthorization, d.Value), nil
case authorization.None: case authorization.None:
return "", nil return "", nil
} }
@@ -103,10 +104,10 @@ func HttpEndpoint(eth1Provider string) Endpoint {
// Method returns the authorizationmethod.AuthorizationMethod corresponding with the parameter value. // Method returns the authorizationmethod.AuthorizationMethod corresponding with the parameter value.
func Method(auth string) authorization.Method { func Method(auth string) authorization.Method {
if strings.HasPrefix(strings.ToLower(auth), "basic") { if strings.HasPrefix(strings.ToLower(auth), strings.ToLower(api.BasicAuthorization)) {
return authorization.Basic return authorization.Basic
} }
if strings.HasPrefix(strings.ToLower(auth), "bearer") { if strings.HasPrefix(strings.ToLower(auth), strings.ToLower(api.BearerAuthorization)) {
return authorization.Bearer return authorization.Bearer
} }
return authorization.None return authorization.None

View File

@@ -14,7 +14,7 @@ var priorityRegex = regexp.MustCompile(`q=(\d+(?:\.\d+)?)`)
// RespondWithSsz takes a http request and checks to see if it should be requesting a ssz response. // RespondWithSsz takes a http request and checks to see if it should be requesting a ssz response.
func RespondWithSsz(req *http.Request) bool { func RespondWithSsz(req *http.Request) bool {
accept := req.Header.Values("Accept") accept := req.Header.Values(api.AcceptHeader)
if len(accept) == 0 { if len(accept) == 0 {
return false return false
} }
@@ -54,5 +54,5 @@ func RespondWithSsz(req *http.Request) bool {
// IsRequestSsz checks if the request object should be interpreted as ssz // IsRequestSsz checks if the request object should be interpreted as ssz
func IsRequestSsz(req *http.Request) bool { func IsRequestSsz(req *http.Request) bool {
return req.Header.Get("Content-Type") == api.OctetStreamMediaType return req.Header.Get(api.ContentTypeHeader) == api.OctetStreamMediaType
} }

View File

@@ -15,42 +15,42 @@ import (
func TestRespondWithSsz(t *testing.T) { func TestRespondWithSsz(t *testing.T) {
t.Run("ssz_requested", func(t *testing.T) { t.Run("ssz_requested", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{api.OctetStreamMediaType} request.Header[api.AcceptHeader] = []string{api.OctetStreamMediaType}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, true, result) assert.Equal(t, true, result)
}) })
t.Run("ssz_content_type_first", func(t *testing.T) { t.Run("ssz_content_type_first", func(t *testing.T) {
request := httptest.NewRequest("GET", "http://foo.example", nil) request := httptest.NewRequest("GET", "http://foo.example", nil)
request.Header["Accept"] = []string{fmt.Sprintf("%s,%s", api.OctetStreamMediaType, api.JsonMediaType)} request.Header[api.AcceptHeader] = []string{fmt.Sprintf("%s,%s", api.OctetStreamMediaType, api.JsonMediaType)}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, true, result) assert.Equal(t, true, result)
}) })
t.Run("ssz_content_type_preferred_1", func(t *testing.T) { t.Run("ssz_content_type_preferred_1", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.9,%s", api.JsonMediaType, api.OctetStreamMediaType)} request.Header[api.AcceptHeader] = []string{fmt.Sprintf("%s;q=0.9,%s", api.JsonMediaType, api.OctetStreamMediaType)}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, true, result) assert.Equal(t, true, result)
}) })
t.Run("ssz_content_type_preferred_2", func(t *testing.T) { t.Run("ssz_content_type_preferred_2", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.95,%s;q=0.9", api.OctetStreamMediaType, api.JsonMediaType)} request.Header[api.AcceptHeader] = []string{fmt.Sprintf("%s;q=0.95,%s;q=0.9", api.OctetStreamMediaType, api.JsonMediaType)}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, true, result) assert.Equal(t, true, result)
}) })
t.Run("other_content_type_preferred", func(t *testing.T) { t.Run("other_content_type_preferred", func(t *testing.T) {
request := httptest.NewRequest("GET", "http://foo.example", nil) request := httptest.NewRequest("GET", "http://foo.example", nil)
request.Header["Accept"] = []string{fmt.Sprintf("%s,%s;q=0.9", api.JsonMediaType, api.OctetStreamMediaType)} request.Header[api.AcceptHeader] = []string{fmt.Sprintf("%s,%s;q=0.9", api.JsonMediaType, api.OctetStreamMediaType)}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
t.Run("other_params", func(t *testing.T) { t.Run("other_params", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{fmt.Sprintf("%s,%s;q=0.9,otherparam=xyz", api.JsonMediaType, api.OctetStreamMediaType)} request.Header[api.AcceptHeader] = []string{fmt.Sprintf("%s,%s;q=0.9,otherparam=xyz", api.JsonMediaType, api.OctetStreamMediaType)}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
@@ -63,28 +63,28 @@ func TestRespondWithSsz(t *testing.T) {
t.Run("empty_header", func(t *testing.T) { t.Run("empty_header", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{} request.Header[api.AcceptHeader] = []string{}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
t.Run("empty_header_value", func(t *testing.T) { t.Run("empty_header_value", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{""} request.Header[api.AcceptHeader] = []string{""}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
t.Run("other_content_type", func(t *testing.T) { t.Run("other_content_type", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{"application/other"} request.Header[api.AcceptHeader] = []string{"application/other"}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
t.Run("garbage", func(t *testing.T) { t.Run("garbage", func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil) request := httptest.NewRequest(http.MethodGet, "http://foo.example", nil)
request.Header["Accept"] = []string{"This is Sparta!!!"} request.Header[api.AcceptHeader] = []string{"This is Sparta!!!"}
result := RespondWithSsz(request) result := RespondWithSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
@@ -96,7 +96,7 @@ func TestIsRequestSsz(t *testing.T) {
_, err := body.WriteString("something") _, err := body.WriteString("something")
require.NoError(t, err) require.NoError(t, err)
request := httptest.NewRequest(http.MethodPost, "http://foo.example", &body) request := httptest.NewRequest(http.MethodPost, "http://foo.example", &body)
request.Header["Content-Type"] = []string{api.OctetStreamMediaType} request.Header[api.ContentTypeHeader] = []string{api.OctetStreamMediaType}
result := IsRequestSsz(request) result := IsRequestSsz(request)
assert.Equal(t, true, result) assert.Equal(t, true, result)
}) })
@@ -109,14 +109,14 @@ func TestIsRequestSsz(t *testing.T) {
t.Run("ssz Post wrong content type", func(t *testing.T) { t.Run("ssz Post wrong content type", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://foo.example", nil) request := httptest.NewRequest(http.MethodPost, "http://foo.example", nil)
request.Header["Content-Type"] = []string{"application/other"} request.Header[api.ContentTypeHeader] = []string{"application/other"}
result := IsRequestSsz(request) result := IsRequestSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })
t.Run("ssz Post json content type", func(t *testing.T) { t.Run("ssz Post json content type", func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "http://foo.example", nil) request := httptest.NewRequest(http.MethodPost, "http://foo.example", nil)
request.Header["Content-Type"] = []string{api.JsonMediaType} request.Header[api.ContentTypeHeader] = []string{api.JsonMediaType}
result := IsRequestSsz(request) result := IsRequestSsz(request)
assert.Equal(t, false, result) assert.Equal(t, false, result)
}) })

View File

@@ -32,7 +32,7 @@ func (e *DefaultJsonError) Error() string {
// WriteJson writes the response message in JSON format. // WriteJson writes the response message in JSON format.
func WriteJson(w http.ResponseWriter, v any) { func WriteJson(w http.ResponseWriter, v any) {
w.Header().Set("Content-Type", api.JsonMediaType) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
if err := json.NewEncoder(w).Encode(v); err != nil { if err := json.NewEncoder(w).Encode(v); err != nil {
log.WithError(err).Error("Could not write response message") log.WithError(err).Error("Could not write response message")
@@ -41,8 +41,8 @@ func WriteJson(w http.ResponseWriter, v any) {
// WriteSsz writes the response message in ssz format // WriteSsz writes the response message in ssz format
func WriteSsz(w http.ResponseWriter, respSsz []byte) { func WriteSsz(w http.ResponseWriter, respSsz []byte) {
w.Header().Set("Content-Length", strconv.Itoa(len(respSsz))) w.Header().Set(api.ContentLengthHeader, strconv.Itoa(len(respSsz)))
w.Header().Set("Content-Type", api.OctetStreamMediaType) w.Header().Set(api.ContentTypeHeader, api.OctetStreamMediaType)
if _, err := io.Copy(w, io.NopCloser(bytes.NewReader(respSsz))); err != nil { if _, err := io.Copy(w, io.NopCloser(bytes.NewReader(respSsz))); err != nil {
log.WithError(err).Error("Could not write response message") log.WithError(err).Error("Could not write response message")
} }
@@ -55,8 +55,8 @@ func WriteError(w http.ResponseWriter, errJson HasStatusCode) {
log.WithError(err).Error("Could not marshal error message") log.WithError(err).Error("Could not marshal error message")
return return
} }
w.Header().Set("Content-Length", strconv.Itoa(len(j))) w.Header().Set(api.ContentLengthHeader, strconv.Itoa(len(j)))
w.Header().Set("Content-Type", api.JsonMediaType) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
w.WriteHeader(errJson.StatusCode()) w.WriteHeader(errJson.StatusCode())
if _, err := io.Copy(w, io.NopCloser(bytes.NewReader(j))); err != nil { if _, err := io.Copy(w, io.NopCloser(bytes.NewReader(j))); err != nil {
log.WithError(err).Error("Could not write error message") log.WithError(err).Error("Could not write error message")

View File

@@ -48,7 +48,7 @@ func doJSONGETRequest(template, requestPath string, beaconNodeIdx int, resp inte
var body interface{} var body interface{}
if httpResp.StatusCode != http.StatusOK { if httpResp.StatusCode != http.StatusOK {
if httpResp.Header.Get("Content-Type") == api.JsonMediaType { if httpResp.Header.Get(api.ContentTypeHeader) == api.JsonMediaType {
if err = json.NewDecoder(httpResp.Body).Decode(&body); err != nil { if err = json.NewDecoder(httpResp.Body).Decode(&body); err != nil {
return errors.Wrap(err, "failed to decode response body") return errors.Wrap(err, "failed to decode response body")
} }
@@ -89,7 +89,7 @@ func doSSZGETRequest(template, requestPath string, beaconNodeIdx int, bnType ...
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to build request") return nil, errors.Wrap(err, "failed to build request")
} }
req.Header.Set("Accept", "application/octet-stream") req.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "request failed") return nil, errors.Wrap(err, "request failed")
@@ -132,7 +132,7 @@ func doJSONPOSTRequest(template, requestPath string, beaconNodeIdx int, postObj,
} }
httpResp, err := http.Post( httpResp, err := http.Post(
basePath+requestPath, basePath+requestPath,
"application/json", api.JsonMediaType,
bytes.NewBuffer(b), bytes.NewBuffer(b),
) )
if err != nil { if err != nil {
@@ -141,7 +141,7 @@ func doJSONPOSTRequest(template, requestPath string, beaconNodeIdx int, postObj,
var body interface{} var body interface{}
if httpResp.StatusCode != http.StatusOK { if httpResp.StatusCode != http.StatusOK {
if httpResp.Header.Get("Content-Type") == api.JsonMediaType { if httpResp.Header.Get(api.ContentTypeHeader) == api.JsonMediaType {
if err = json.NewDecoder(httpResp.Body).Decode(&body); err != nil { if err = json.NewDecoder(httpResp.Body).Decode(&body); err != nil {
return errors.Wrap(err, "failed to decode response body") return errors.Wrap(err, "failed to decode response body")
} }
@@ -186,8 +186,8 @@ func doSSZPOSTRequest(template, requestPath string, beaconNodeIdx int, postObj i
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to build request") return nil, errors.Wrap(err, "failed to build request")
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
req.Header.Set("Accept", "application/octet-stream") req.Header.Set(api.AcceptHeader, api.OctetStreamMediaType)
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "request failed") return nil, errors.Wrap(err, "request failed")

View File

@@ -9,6 +9,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/testing/middleware/builder", importpath = "github.com/OffchainLabs/prysm/v6/testing/middleware/builder",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//api/client/builder:go_default_library", "//api/client/builder:go_default_library",
"//api/server/structs:go_default_library", "//api/server/structs:go_default_library",
"//beacon-chain/core/signing:go_default_library", "//beacon-chain/core/signing:go_default_library",

View File

@@ -14,6 +14,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
builderAPI "github.com/OffchainLabs/prysm/v6/api/client/builder" builderAPI "github.com/OffchainLabs/prysm/v6/api/client/builder"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/signing" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/signing"
@@ -884,9 +885,9 @@ func (p *Builder) sendHttpRequest(req *http.Request, requestBytes []byte) (*http
proxyReq.Body = io.NopCloser(bytes.NewBuffer(requestBytes)) proxyReq.Body = io.NopCloser(bytes.NewBuffer(requestBytes))
// Required proxy headers for forwarding JSON-RPC requests to the execution client. // Required proxy headers for forwarding JSON-RPC requests to the execution client.
proxyReq.Header.Set("Host", req.Host) proxyReq.Header.Set(api.HostHeader, req.Host)
proxyReq.Header.Set("X-Forwarded-For", req.RemoteAddr) proxyReq.Header.Set("X-Forwarded-For", req.RemoteAddr)
proxyReq.Header.Set("Content-Type", "application/json") proxyReq.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
client := &http.Client{} client := &http.Client{}
if p.cfg.secret != "" { if p.cfg.secret != "" {

View File

@@ -9,6 +9,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/testing/middleware/engine-api-proxy", importpath = "github.com/OffchainLabs/prysm/v6/testing/middleware/engine-api-proxy",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//api:go_default_library",
"//network:go_default_library", "//network:go_default_library",
"@com_github_pkg_errors//:go_default_library", "@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",
@@ -20,6 +21,7 @@ go_test(
srcs = ["proxy_test.go"], srcs = ["proxy_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//crypto/rand:go_default_library", "//crypto/rand:go_default_library",
"//proto/engine/v1:go_default_library", "//proto/engine/v1:go_default_library",
"//testing/require:go_default_library", "//testing/require:go_default_library",

View File

@@ -15,6 +15,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/network" "github.com/OffchainLabs/prysm/v6/network"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@@ -242,9 +243,9 @@ func (p *Proxy) sendHttpRequest(req *http.Request, requestBytes []byte) (*http.R
proxyReq.Body = io.NopCloser(bytes.NewBuffer(requestBytes)) proxyReq.Body = io.NopCloser(bytes.NewBuffer(requestBytes))
// Required proxy headers for forwarding JSON-RPC requests to the execution client. // Required proxy headers for forwarding JSON-RPC requests to the execution client.
proxyReq.Header.Set("Host", req.Host) proxyReq.Header.Set(api.HostHeader, req.Host)
proxyReq.Header.Set("X-Forwarded-For", req.RemoteAddr) proxyReq.Header.Set("X-Forwarded-For", req.RemoteAddr)
proxyReq.Header.Set("Content-Type", "application/json") proxyReq.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
client := &http.Client{} client := &http.Client{}
if p.cfg.secret != "" { if p.cfg.secret != "" {

View File

@@ -7,6 +7,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/crypto/rand" "github.com/OffchainLabs/prysm/v6/crypto/rand"
pb "github.com/OffchainLabs/prysm/v6/proto/engine/v1" pb "github.com/OffchainLabs/prysm/v6/proto/engine/v1"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
@@ -297,7 +298,7 @@ func Test_isEngineAPICall(t *testing.T) {
func destinationServerSetup(t *testing.T, response interface{}) *httptest.Server { func destinationServerSetup(t *testing.T, response interface{}) *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
defer func() { defer func() {
require.NoError(t, r.Body.Close()) require.NoError(t, r.Body.Close())
}() }()

View File

@@ -30,12 +30,12 @@ func (c *beaconApiValidatorClient) beaconBlock(ctx context.Context, slot primiti
if err != nil { if err != nil {
return nil, err return nil, err
} }
if strings.Contains(header.Get("Content-Type"), api.OctetStreamMediaType) { if strings.Contains(header.Get(api.ContentTypeHeader), api.OctetStreamMediaType) {
ver, err := version.FromString(header.Get(api.VersionHeader)) ver, err := version.FromString(header.Get(api.EthConsensusVersionHeader))
if err != nil { if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("unsupported header version %s", header.Get(api.VersionHeader))) return nil, errors.Wrap(err, fmt.Sprintf("unsupported header version %s", header.Get(api.EthConsensusVersionHeader)))
} }
isBlindedRaw := header.Get(api.ExecutionPayloadBlindedHeader) isBlindedRaw := header.Get(api.EthExecutionPayloadBlindedHeader)
isBlinded, err := strconv.ParseBool(isBlindedRaw) isBlinded, err := strconv.ParseBool(isBlindedRaw)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -155,7 +155,7 @@ func TestGetBeaconBlock_Error(t *testing.T) {
gomock.Any(), gomock.Any(),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -191,7 +191,7 @@ func TestGetBeaconBlock_Phase0Valid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -231,9 +231,9 @@ func TestGetBeaconBlock_SSZ_BellatrixValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"bellatrix"}, api.EthConsensusVersionHeader: []string{"bellatrix"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -273,9 +273,9 @@ func TestGetBeaconBlock_SSZ_BlindedBellatrixValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"bellatrix"}, api.EthConsensusVersionHeader: []string{"bellatrix"},
api.ExecutionPayloadBlindedHeader: []string{"true"}, api.EthExecutionPayloadBlindedHeader: []string{"true"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -315,9 +315,9 @@ func TestGetBeaconBlock_SSZ_CapellaValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"capella"}, api.EthConsensusVersionHeader: []string{"capella"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -357,9 +357,9 @@ func TestGetBeaconBlock_SSZ_BlindedCapellaValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"capella"}, api.EthConsensusVersionHeader: []string{"capella"},
api.ExecutionPayloadBlindedHeader: []string{"true"}, api.EthExecutionPayloadBlindedHeader: []string{"true"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -399,9 +399,9 @@ func TestGetBeaconBlock_SSZ_DenebValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"deneb"}, api.EthConsensusVersionHeader: []string{"deneb"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -441,9 +441,9 @@ func TestGetBeaconBlock_SSZ_BlindedDenebValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"deneb"}, api.EthConsensusVersionHeader: []string{"deneb"},
api.ExecutionPayloadBlindedHeader: []string{"true"}, api.EthExecutionPayloadBlindedHeader: []string{"true"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -483,9 +483,9 @@ func TestGetBeaconBlock_SSZ_ElectraValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"electra"}, api.EthConsensusVersionHeader: []string{"electra"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -525,9 +525,9 @@ func TestGetBeaconBlock_SSZ_BlindedElectraValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"electra"}, api.EthConsensusVersionHeader: []string{"electra"},
api.ExecutionPayloadBlindedHeader: []string{"true"}, api.EthExecutionPayloadBlindedHeader: []string{"true"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -563,9 +563,9 @@ func TestGetBeaconBlock_SSZ_UnsupportedVersion(t *testing.T) {
).Return( ).Return(
[]byte{}, []byte{},
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"unsupported"}, api.EthConsensusVersionHeader: []string{"unsupported"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -596,9 +596,9 @@ func TestGetBeaconBlock_SSZ_InvalidBlindedHeader(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"bellatrix"}, api.EthConsensusVersionHeader: []string{"bellatrix"},
api.ExecutionPayloadBlindedHeader: []string{"invalid"}, api.EthExecutionPayloadBlindedHeader: []string{"invalid"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -629,9 +629,9 @@ func TestGetBeaconBlock_SSZ_InvalidVersionHeader(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"invalid"}, api.EthConsensusVersionHeader: []string{"invalid"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -687,9 +687,9 @@ func TestGetBeaconBlock_SSZ_Phase0Valid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"phase0"}, api.EthConsensusVersionHeader: []string{"phase0"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -729,9 +729,9 @@ func TestGetBeaconBlock_SSZ_AltairValid(t *testing.T) {
).Return( ).Return(
bytes, bytes,
http.Header{ http.Header{
"Content-Type": []string{api.OctetStreamMediaType}, api.ContentTypeHeader: []string{api.OctetStreamMediaType},
api.VersionHeader: []string{"altair"}, api.EthConsensusVersionHeader: []string{"altair"},
api.ExecutionPayloadBlindedHeader: []string{"false"}, api.EthExecutionPayloadBlindedHeader: []string{"false"},
}, },
nil, nil,
).Times(1) ).Times(1)
@@ -776,7 +776,7 @@ func TestGetBeaconBlock_AltairValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -820,7 +820,7 @@ func TestGetBeaconBlock_BellatrixValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -865,7 +865,7 @@ func TestGetBeaconBlock_BlindedBellatrixValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -910,7 +910,7 @@ func TestGetBeaconBlock_CapellaValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -955,7 +955,7 @@ func TestGetBeaconBlock_BlindedCapellaValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -1000,7 +1000,7 @@ func TestGetBeaconBlock_DenebValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -1045,7 +1045,7 @@ func TestGetBeaconBlock_BlindedDenebValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -1090,7 +1090,7 @@ func TestGetBeaconBlock_ElectraValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)
@@ -1135,7 +1135,7 @@ func TestGetBeaconBlock_BlindedElectraValid(t *testing.T) {
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)), fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
).Return( ).Return(
b, b,
http.Header{"Content-Type": []string{"application/json"}}, http.Header{api.ContentTypeHeader: []string{api.JsonMediaType}},
nil, nil,
).Times(1) ).Times(1)

View File

@@ -6,6 +6,7 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers"
"github.com/OffchainLabs/prysm/v6/network/httputil" "github.com/OffchainLabs/prysm/v6/network/httputil"
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1" ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
@@ -22,7 +23,7 @@ func (c *beaconApiValidatorClient) proposeAttestation(ctx context.Context, attes
return nil, err return nil, err
} }
headers := map[string]string{"Eth-Consensus-Version": version.String(attestation.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(attestation.Version())}
err = c.jsonRestHandler.Post( err = c.jsonRestHandler.Post(
ctx, ctx,
"/eth/v2/beacon/pool/attestations", "/eth/v2/beacon/pool/attestations",
@@ -67,7 +68,7 @@ func (c *beaconApiValidatorClient) proposeAttestationElectra(ctx context.Context
if err != nil { if err != nil {
return nil, err return nil, err
} }
headers := map[string]string{"Eth-Consensus-Version": version.String(attestation.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(attestation.Version())}
if err = c.jsonRestHandler.Post( if err = c.jsonRestHandler.Post(
ctx, ctx,
"/eth/v2/beacon/pool/attestations", "/eth/v2/beacon/pool/attestations",

View File

@@ -7,6 +7,7 @@ import (
"net/http" "net/http"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers" "github.com/OffchainLabs/prysm/v6/beacon-chain/core/helpers"
"github.com/OffchainLabs/prysm/v6/network/httputil" "github.com/OffchainLabs/prysm/v6/network/httputil"
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1" ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
@@ -117,7 +118,7 @@ func TestProposeAttestation(t *testing.T) {
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(test.attestation.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(test.attestation.Version())}
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
"/eth/v2/beacon/pool/attestations", "/eth/v2/beacon/pool/attestations",
@@ -177,7 +178,7 @@ func TestProposeAttestationFallBack(t *testing.T) {
} }
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(attestation.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(attestation.Version())}
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
"/eth/v2/beacon/pool/attestations", "/eth/v2/beacon/pool/attestations",
@@ -304,7 +305,7 @@ func TestProposeAttestationElectra(t *testing.T) {
} }
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(test.attestation.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(test.attestation.Version())}
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
"/eth/v2/beacon/pool/attestations", "/eth/v2/beacon/pool/attestations",

View File

@@ -7,6 +7,7 @@ import (
"net/http" "net/http"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
rpctesting "github.com/OffchainLabs/prysm/v6/beacon-chain/rpc/eth/shared/testing" rpctesting "github.com/OffchainLabs/prysm/v6/beacon-chain/rpc/eth/shared/testing"
"github.com/OffchainLabs/prysm/v6/network/httputil" "github.com/OffchainLabs/prysm/v6/network/httputil"
@@ -107,7 +108,7 @@ func TestProposeBeaconBlock_SSZ_Error(t *testing.T) {
// Expect PostSSZ to be called first with SSZ data // Expect PostSSZ to be called first with SSZ data
headers := map[string]string{ headers := map[string]string{
"Eth-Consensus-Version": testCase.consensusVersion, api.EthConsensusVersionHeader: testCase.consensusVersion,
} }
jsonRestHandler.EXPECT().PostSSZ( jsonRestHandler.EXPECT().PostSSZ(
gomock.Any(), gomock.Any(),
@@ -169,7 +170,7 @@ func TestProposeBeaconBlock_SSZSuccess_NoFallback(t *testing.T) {
// Expect PostSSZ to be called and succeed // Expect PostSSZ to be called and succeed
headers := map[string]string{ headers := map[string]string{
"Eth-Consensus-Version": testCase.consensusVersion, api.EthConsensusVersionHeader: testCase.consensusVersion,
} }
jsonRestHandler.EXPECT().PostSSZ( jsonRestHandler.EXPECT().PostSSZ(
gomock.Any(), gomock.Any(),
@@ -647,7 +648,7 @@ func TestProposeBeaconBlock_SSZFails_Non406_NoFallback(t *testing.T) {
// Expect PostSSZ to be called first and fail with non-406 error // Expect PostSSZ to be called first and fail with non-406 error
sszHeaders := map[string]string{ sszHeaders := map[string]string{
"Eth-Consensus-Version": testCase.consensusVersion, api.EthConsensusVersionHeader: testCase.consensusVersion,
} }
jsonRestHandler.EXPECT().PostSSZ( jsonRestHandler.EXPECT().PostSSZ(
gomock.Any(), gomock.Any(),

View File

@@ -53,7 +53,7 @@ func NewBeaconApiRestHandler(client http.Client, host string) RestHandler {
func (c *BeaconApiRestHandler) appendAcceptOverride() { func (c *BeaconApiRestHandler) appendAcceptOverride() {
if accept := os.Getenv(params.EnvNameOverrideAccept); accept != "" { if accept := os.Getenv(params.EnvNameOverrideAccept); accept != "" {
c.reqOverrides = append(c.reqOverrides, func(req *http.Request) { c.reqOverrides = append(c.reqOverrides, func(req *http.Request) {
req.Header.Set("Accept", accept) req.Header.Set(api.AcceptHeader, accept)
}) })
} }
} }
@@ -76,7 +76,7 @@ func (c *BeaconApiRestHandler) Get(ctx context.Context, endpoint string, resp in
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to create request for endpoint %s", url) return errors.Wrapf(err, "failed to create request for endpoint %s", url)
} }
req.Header.Set("User-Agent", version.BuildData()) req.Header.Set(api.UserAgentHeader, version.BuildData())
httpResp, err := c.client.Do(req) httpResp, err := c.client.Do(req)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to perform request for endpoint %s", url) return errors.Wrapf(err, "failed to perform request for endpoint %s", url)
@@ -100,13 +100,13 @@ func (c *BeaconApiRestHandler) GetSSZ(ctx context.Context, endpoint string) ([]b
primaryAcceptType := fmt.Sprintf("%s;q=%s", api.OctetStreamMediaType, "0.95") primaryAcceptType := fmt.Sprintf("%s;q=%s", api.OctetStreamMediaType, "0.95")
secondaryAcceptType := fmt.Sprintf("%s;q=%s", api.JsonMediaType, "0.9") secondaryAcceptType := fmt.Sprintf("%s;q=%s", api.JsonMediaType, "0.9")
acceptHeaderString := fmt.Sprintf("%s,%s", primaryAcceptType, secondaryAcceptType) acceptHeaderString := fmt.Sprintf("%s,%s", primaryAcceptType, secondaryAcceptType)
req.Header.Set("Accept", acceptHeaderString) req.Header.Set(api.AcceptHeader, acceptHeaderString)
for _, o := range c.reqOverrides { for _, o := range c.reqOverrides {
o(req) o(req)
} }
req.Header.Set("User-Agent", version.BuildData()) req.Header.Set(api.UserAgentHeader, version.BuildData())
httpResp, err := c.client.Do(req) httpResp, err := c.client.Do(req)
if err != nil { if err != nil {
return nil, nil, errors.Wrapf(err, "failed to perform request for endpoint %s", url) return nil, nil, errors.Wrapf(err, "failed to perform request for endpoint %s", url)
@@ -116,8 +116,8 @@ func (c *BeaconApiRestHandler) GetSSZ(ctx context.Context, endpoint string) ([]b
return return
} }
}() }()
accept := req.Header.Get("Accept") accept := req.Header.Get(api.AcceptHeader)
contentType := httpResp.Header.Get("Content-Type") contentType := httpResp.Header.Get(api.ContentTypeHeader)
body, err := io.ReadAll(httpResp.Body) body, err := io.ReadAll(httpResp.Body)
if err != nil { if err != nil {
return nil, nil, errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL) return nil, nil, errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL)
@@ -125,8 +125,8 @@ func (c *BeaconApiRestHandler) GetSSZ(ctx context.Context, endpoint string) ([]b
if !apiutil.PrimaryAcceptMatches(accept, contentType) { if !apiutil.PrimaryAcceptMatches(accept, contentType) {
log.WithFields(logrus.Fields{ log.WithFields(logrus.Fields{
"Accept": accept, api.AcceptHeader: accept,
"Content-Type": contentType, api.ContentTypeHeader: contentType,
}).Debug("Server responded with non primary accept type") }).Debug("Server responded with non primary accept type")
} }
@@ -165,8 +165,8 @@ func (c *BeaconApiRestHandler) Post(
for headerKey, headerValue := range headers { for headerKey, headerValue := range headers {
req.Header.Set(headerKey, headerValue) req.Header.Set(headerKey, headerValue)
} }
req.Header.Set("Content-Type", api.JsonMediaType) req.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
req.Header.Set("User-Agent", version.BuildData()) req.Header.Set(api.UserAgentHeader, version.BuildData())
httpResp, err := c.client.Do(req) httpResp, err := c.client.Do(req)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to perform request for endpoint %s", url) return errors.Wrapf(err, "failed to perform request for endpoint %s", url)
@@ -200,7 +200,7 @@ func (c *BeaconApiRestHandler) PostSSZ(
primaryAcceptType := fmt.Sprintf("%s;q=%s", api.OctetStreamMediaType, "0.95") primaryAcceptType := fmt.Sprintf("%s;q=%s", api.OctetStreamMediaType, "0.95")
secondaryAcceptType := fmt.Sprintf("%s;q=%s", api.JsonMediaType, "0.9") secondaryAcceptType := fmt.Sprintf("%s;q=%s", api.JsonMediaType, "0.9")
acceptHeaderString := fmt.Sprintf("%s,%s", primaryAcceptType, secondaryAcceptType) acceptHeaderString := fmt.Sprintf("%s,%s", primaryAcceptType, secondaryAcceptType)
req.Header.Set("Accept", acceptHeaderString) req.Header.Set(api.AcceptHeader, acceptHeaderString)
// User-supplied headers // User-supplied headers
for headerKey, headerValue := range headers { for headerKey, headerValue := range headers {
@@ -210,8 +210,8 @@ func (c *BeaconApiRestHandler) PostSSZ(
for _, o := range c.reqOverrides { for _, o := range c.reqOverrides {
o(req) o(req)
} }
req.Header.Set("Content-Type", api.OctetStreamMediaType) req.Header.Set(api.ContentTypeHeader, api.OctetStreamMediaType)
req.Header.Set("User-Agent", version.BuildData()) req.Header.Set(api.UserAgentHeader, version.BuildData())
httpResp, err := c.client.Do(req) httpResp, err := c.client.Do(req)
if err != nil { if err != nil {
return nil, nil, errors.Wrapf(err, "failed to perform request for endpoint %s", url) return nil, nil, errors.Wrapf(err, "failed to perform request for endpoint %s", url)
@@ -222,8 +222,8 @@ func (c *BeaconApiRestHandler) PostSSZ(
} }
}() }()
accept := req.Header.Get("Accept") accept := req.Header.Get(api.AcceptHeader)
contentType := httpResp.Header.Get("Content-Type") contentType := httpResp.Header.Get(api.ContentTypeHeader)
body, err := io.ReadAll(httpResp.Body) body, err := io.ReadAll(httpResp.Body)
if err != nil { if err != nil {
return nil, nil, errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL) return nil, nil, errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL)
@@ -231,8 +231,8 @@ func (c *BeaconApiRestHandler) PostSSZ(
if !apiutil.PrimaryAcceptMatches(accept, contentType) { if !apiutil.PrimaryAcceptMatches(accept, contentType) {
log.WithFields(logrus.Fields{ log.WithFields(logrus.Fields{
"Accept": accept, api.AcceptHeader: accept,
"Content-Type": contentType, api.ContentTypeHeader: contentType,
}).Debug("Server responded with non primary accept type") }).Debug("Server responded with non primary accept type")
} }
@@ -255,7 +255,7 @@ func decodeResp(httpResp *http.Response, resp interface{}) error {
return errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL) return errors.Wrapf(err, "failed to read response body for %s", httpResp.Request.URL)
} }
if !strings.Contains(httpResp.Header.Get("Content-Type"), api.JsonMediaType) { if !strings.Contains(httpResp.Header.Get(api.ContentTypeHeader), api.JsonMediaType) {
// 2XX codes are a success // 2XX codes are a success
if strings.HasPrefix(httpResp.Status, "2") { if strings.HasPrefix(httpResp.Status, "2") {
return nil return nil

View File

@@ -37,8 +37,8 @@ func TestGet(t *testing.T) {
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
marshalledJson, err := json.Marshal(genesisJson) marshalledJson, err := json.Marshal(genesisJson)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, version.BuildData(), r.Header.Get("User-Agent")) assert.Equal(t, version.BuildData(), r.Header.Get(api.UserAgentHeader))
w.Header().Set("Content-Type", api.JsonMediaType) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
_, err = w.Write(marshalledJson) _, err = w.Write(marshalledJson)
require.NoError(t, err) require.NoError(t, err)
}) })
@@ -70,9 +70,9 @@ func TestGetSSZ(t *testing.T) {
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get("Accept")) assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
assert.Equal(t, version.BuildData(), r.Header.Get("User-Agent")) assert.Equal(t, version.BuildData(), r.Header.Get(api.UserAgentHeader))
w.Header().Set("Content-Type", api.OctetStreamMediaType) w.Header().Set(api.ContentTypeHeader, api.OctetStreamMediaType)
_, err := w.Write(expectedBody) _, err := w.Write(expectedBody)
require.NoError(t, err) require.NoError(t, err)
}) })
@@ -87,7 +87,7 @@ func TestGetSSZ(t *testing.T) {
body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint) body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint)
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, expectedBody, body) assert.DeepEqual(t, expectedBody, body)
require.StringContains(t, api.OctetStreamMediaType, header.Get("Content-Type")) require.StringContains(t, api.OctetStreamMediaType, header.Get(api.ContentTypeHeader))
}) })
t.Run("Json Content-Type response", func(t *testing.T) { t.Run("Json Content-Type response", func(t *testing.T) {
@@ -96,8 +96,8 @@ func TestGetSSZ(t *testing.T) {
logHook := test.NewGlobal() logHook := test.NewGlobal()
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get("Accept")) assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
w.Header().Set("Content-Type", api.JsonMediaType) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
marshalledJson, err := json.Marshal(genesisJson) marshalledJson, err := json.Marshal(genesisJson)
require.NoError(t, err) require.NoError(t, err)
@@ -116,7 +116,7 @@ func TestGetSSZ(t *testing.T) {
body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint) body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint)
require.NoError(t, err) require.NoError(t, err)
assert.LogsContain(t, logHook, "Server responded with non primary accept type") assert.LogsContain(t, logHook, "Server responded with non primary accept type")
require.Equal(t, api.JsonMediaType, header.Get("Content-Type")) require.Equal(t, api.JsonMediaType, header.Get(api.ContentTypeHeader))
resp := &structs.GetGenesisResponse{} resp := &structs.GetGenesisResponse{}
require.NoError(t, json.Unmarshal(body, resp)) require.NoError(t, json.Unmarshal(body, resp))
require.Equal(t, "123", resp.Data.GenesisTime) require.Equal(t, "123", resp.Data.GenesisTime)
@@ -128,8 +128,8 @@ func TestGetSSZ(t *testing.T) {
logHook := test.NewGlobal() logHook := test.NewGlobal()
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get("Accept")) assert.StringContains(t, api.OctetStreamMediaType, r.Header.Get(api.AcceptHeader))
w.Header().Set("Content-Type", "text/plain") // Invalid content type w.Header().Set(api.ContentTypeHeader, api.PlainMediaType) // Invalid content type
_, err := w.Write([]byte("some text")) _, err := w.Write([]byte("some text"))
require.NoError(t, err) require.NoError(t, err)
}) })
@@ -155,8 +155,8 @@ func TestAcceptOverrideSSZ(t *testing.T) {
}() }()
require.NoError(t, os.Setenv(params.EnvNameOverrideAccept, name)) require.NoError(t, os.Setenv(params.EnvNameOverrideAccept, name))
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
require.Equal(t, name, r.Header.Get("Accept")) require.Equal(t, name, r.Header.Get(api.AcceptHeader))
w.WriteHeader(200) w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte("ok")) _, err := w.Write([]byte("ok"))
require.NoError(t, err) require.NoError(t, err)
})) }))
@@ -184,8 +184,8 @@ func TestPost(t *testing.T) {
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
// Make sure the request headers have been set // Make sure the request headers have been set
assert.Equal(t, "bar", r.Header.Get("foo")) assert.Equal(t, "bar", r.Header.Get("foo"))
assert.Equal(t, version.BuildData(), r.Header.Get("User-Agent")) assert.Equal(t, version.BuildData(), r.Header.Get(api.UserAgentHeader))
assert.Equal(t, api.JsonMediaType, r.Header.Get("Content-Type")) assert.Equal(t, api.JsonMediaType, r.Header.Get(api.ContentTypeHeader))
// Make sure the data matches // Make sure the data matches
receivedBytes := make([]byte, len(dataBytes)) receivedBytes := make([]byte, len(dataBytes))
@@ -197,7 +197,7 @@ func TestPost(t *testing.T) {
marshalledJson, err := json.Marshal(genesisJson) marshalledJson, err := json.Marshal(genesisJson)
require.NoError(t, err) require.NoError(t, err)
w.Header().Set("Content-Type", api.JsonMediaType) w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
_, err = w.Write(marshalledJson) _, err = w.Write(marshalledJson)
require.NoError(t, err) require.NoError(t, err)
}) })
@@ -223,7 +223,7 @@ func Test_decodeResp(t *testing.T) {
Status: "200", Status: "200",
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {"application/json; charset=utf-8"}}, Header: map[string][]string{api.ContentTypeHeader: {"application/json; charset=utf-8"}},
} }
require.NoError(t, decodeResp(r, nil)) require.NoError(t, decodeResp(r, nil))
}) })
@@ -233,7 +233,7 @@ func Test_decodeResp(t *testing.T) {
Status: "200", Status: "200",
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.OctetStreamMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.OctetStreamMediaType}},
} }
require.NoError(t, decodeResp(r, nil)) require.NoError(t, decodeResp(r, nil))
}) })
@@ -243,7 +243,7 @@ func Test_decodeResp(t *testing.T) {
Status: "204", Status: "204",
StatusCode: http.StatusNoContent, StatusCode: http.StatusNoContent,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.OctetStreamMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.OctetStreamMediaType}},
} }
require.NoError(t, decodeResp(r, nil)) require.NoError(t, decodeResp(r, nil))
}) })
@@ -255,7 +255,7 @@ func Test_decodeResp(t *testing.T) {
Status: "500", Status: "500",
StatusCode: http.StatusInternalServerError, StatusCode: http.StatusInternalServerError,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.OctetStreamMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.OctetStreamMediaType}},
} }
err = decodeResp(r, nil) err = decodeResp(r, nil)
errJson := &httputil.DefaultJsonError{} errJson := &httputil.DefaultJsonError{}
@@ -272,7 +272,7 @@ func Test_decodeResp(t *testing.T) {
Status: "200", Status: "200",
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
} }
resp := &j{} resp := &j{}
require.NoError(t, decodeResp(r, resp)) require.NoError(t, decodeResp(r, resp))
@@ -284,7 +284,7 @@ func Test_decodeResp(t *testing.T) {
Status: "200", Status: "200",
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
} }
require.NoError(t, decodeResp(r, nil)) require.NoError(t, decodeResp(r, nil))
}) })
@@ -294,7 +294,7 @@ func Test_decodeResp(t *testing.T) {
Status: "204", Status: "204",
StatusCode: http.StatusNoContent, StatusCode: http.StatusNoContent,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
} }
require.NoError(t, decodeResp(r, nil)) require.NoError(t, decodeResp(r, nil))
}) })
@@ -307,7 +307,7 @@ func Test_decodeResp(t *testing.T) {
Status: "500", Status: "500",
StatusCode: http.StatusInternalServerError, StatusCode: http.StatusInternalServerError,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
} }
err = decodeResp(r, nil) err = decodeResp(r, nil)
errJson := &httputil.DefaultJsonError{} errJson := &httputil.DefaultJsonError{}
@@ -323,7 +323,7 @@ func Test_decodeResp(t *testing.T) {
Status: "200", Status: "200",
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
Request: &http.Request{}, Request: &http.Request{},
} }
resp := &j{} resp := &j{}
@@ -338,7 +338,7 @@ func Test_decodeResp(t *testing.T) {
Status: "500", Status: "500",
StatusCode: http.StatusInternalServerError, StatusCode: http.StatusInternalServerError,
Body: io.NopCloser(&body), Body: io.NopCloser(&body),
Header: map[string][]string{"Content-Type": {api.JsonMediaType}}, Header: map[string][]string{api.ContentTypeHeader: {api.JsonMediaType}},
Request: &http.Request{}, Request: &http.Request{},
} }
err = decodeResp(r, nil) err = decodeResp(r, nil)

View File

@@ -6,6 +6,7 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
"github.com/OffchainLabs/prysm/v6/network/httputil" "github.com/OffchainLabs/prysm/v6/network/httputil"
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1" ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
@@ -18,7 +19,7 @@ func (c *beaconApiValidatorClient) submitSignedAggregateSelectionProof(ctx conte
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProof") return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProof")
} }
headers := map[string]string{"Eth-Consensus-Version": version.String(in.SignedAggregateAndProof.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(in.SignedAggregateAndProof.Version())}
err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil) err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil)
errJson := &httputil.DefaultJsonError{} errJson := &httputil.DefaultJsonError{}
if err != nil { if err != nil {
@@ -54,7 +55,7 @@ func (c *beaconApiValidatorClient) submitSignedAggregateSelectionProofElectra(ct
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProofElectra") return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProofElectra")
} }
headers := map[string]string{"Eth-Consensus-Version": version.String(in.SignedAggregateAndProof.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(in.SignedAggregateAndProof.Version())}
if err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil); err != nil { if err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil); err != nil {
return nil, err return nil, err
} }

View File

@@ -6,6 +6,7 @@ import (
"net/http" "net/http"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/api/server/structs" "github.com/OffchainLabs/prysm/v6/api/server/structs"
"github.com/OffchainLabs/prysm/v6/network/httputil" "github.com/OffchainLabs/prysm/v6/network/httputil"
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1" ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
@@ -27,7 +28,7 @@ func TestSubmitSignedAggregateSelectionProof_Valid(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(signedAggregateAndProof.Message.Version())}
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl) jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
@@ -59,7 +60,7 @@ func TestSubmitSignedAggregateSelectionProof_BadRequest(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(signedAggregateAndProof.Message.Version())}
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl) jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
@@ -89,7 +90,7 @@ func TestSubmitSignedAggregateSelectionProof_Fallback(t *testing.T) {
ctx := t.Context() ctx := t.Context()
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl) jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(signedAggregateAndProof.Message.Version())}
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
"/eth/v2/validator/aggregate_and_proofs", "/eth/v2/validator/aggregate_and_proofs",
@@ -131,7 +132,7 @@ func TestSubmitSignedAggregateSelectionProofElectra_Valid(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProofElectra.Message.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(signedAggregateAndProofElectra.Message.Version())}
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl) jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),
@@ -163,7 +164,7 @@ func TestSubmitSignedAggregateSelectionProofElectra_BadRequest(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
ctx := t.Context() ctx := t.Context()
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProofElectra.Message.Version())} headers := map[string]string{api.EthConsensusVersionHeader: version.String(signedAggregateAndProofElectra.Message.Version())}
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl) jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
jsonRestHandler.EXPECT().Post( jsonRestHandler.EXPECT().Post(
gomock.Any(), gomock.Any(),

View File

@@ -41,6 +41,7 @@ go_test(
srcs = ["keymanager_test.go"], srcs = ["keymanager_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//api:go_default_library",
"//crypto/bls:go_default_library", "//crypto/bls:go_default_library",
"//encoding/bytesutil:go_default_library", "//encoding/bytesutil:go_default_library",
"//io/file:go_default_library", "//io/file:go_default_library",

View File

@@ -10,6 +10,7 @@ go_library(
importpath = "github.com/OffchainLabs/prysm/v6/validator/keymanager/remote-web3signer/internal", importpath = "github.com/OffchainLabs/prysm/v6/validator/keymanager/remote-web3signer/internal",
visibility = ["//validator/keymanager/remote-web3signer:__subpackages__"], visibility = ["//validator/keymanager/remote-web3signer:__subpackages__"],
deps = [ deps = [
"//api:go_default_library",
"//config/fieldparams:go_default_library", "//config/fieldparams:go_default_library",
"//crypto/bls:go_default_library", "//crypto/bls:go_default_library",
"//monitoring/tracing:go_default_library", "//monitoring/tracing:go_default_library",
@@ -28,6 +29,7 @@ go_test(
srcs = ["client_test.go"], srcs = ["client_test.go"],
deps = [ deps = [
":go_default_library", ":go_default_library",
"//api:go_default_library",
"//testing/require:go_default_library", "//testing/require:go_default_library",
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library", "@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
"@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//assert:go_default_library",

View File

@@ -13,6 +13,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
fieldparams "github.com/OffchainLabs/prysm/v6/config/fieldparams" fieldparams "github.com/OffchainLabs/prysm/v6/config/fieldparams"
"github.com/OffchainLabs/prysm/v6/crypto/bls" "github.com/OffchainLabs/prysm/v6/crypto/bls"
"github.com/OffchainLabs/prysm/v6/monitoring/tracing" "github.com/OffchainLabs/prysm/v6/monitoring/tracing"
@@ -74,8 +75,8 @@ func (client *ApiClient) Sign(ctx context.Context, pubKey string, request SignRe
if resp.StatusCode == http.StatusPreconditionFailed { if resp.StatusCode == http.StatusPreconditionFailed {
return nil, fmt.Errorf("signing operation failed due to slashing protection rules, Signing Request URL: %v, Status: %v", client.BaseURL.String()+requestPath, resp.StatusCode) return nil, fmt.Errorf("signing operation failed due to slashing protection rules, Signing Request URL: %v, Status: %v", client.BaseURL.String()+requestPath, resp.StatusCode)
} }
contentType := resp.Header.Get("Content-Type") contentType := resp.Header.Get(api.ContentTypeHeader)
if strings.HasPrefix(contentType, "application/json") { if strings.HasPrefix(contentType, api.JsonMediaType) {
var sigResp SignatureResponse var sigResp SignatureResponse
if err := unmarshalResponse(resp.Body, &sigResp); err != nil { if err := unmarshalResponse(resp.Body, &sigResp); err != nil {
return nil, err return nil, err
@@ -148,7 +149,7 @@ func (client *ApiClient) doRequest(ctx context.Context, httpMethod, fullPath str
if err != nil { if err != nil {
return nil, errors.Wrap(err, "invalid format, failed to create new Post Request Object") return nil, errors.Wrap(err, "invalid format, failed to create new Post Request Object")
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set(api.ContentTypeHeader, api.JsonMediaType)
start := time.Now() start := time.Now()
resp, err := client.RestClient.Do(req) resp, err := client.RestClient.Do(req)

View File

@@ -9,6 +9,7 @@ import (
"net/url" "net/url"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/require"
"github.com/OffchainLabs/prysm/v6/validator/keymanager/remote-web3signer/internal" "github.com/OffchainLabs/prysm/v6/validator/keymanager/remote-web3signer/internal"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
@@ -61,7 +62,7 @@ func TestClient_Sign_HappyPath_Jsontype(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// create a new reader with that JSON // create a new reader with that JSON
header := http.Header{} header := http.Header{}
header.Set("Content-Type", "application/json; charset=UTF-8") header.Set(api.ContentTypeHeader, "application/json; charset=UTF-8")
r := io.NopCloser(bytes.NewReader(jsonBytes)) r := io.NopCloser(bytes.NewReader(jsonBytes))
mock := &mockTransport{mockResponse: &http.Response{ mock := &mockTransport{mockResponse: &http.Response{
StatusCode: 200, StatusCode: 200,

View File

@@ -14,6 +14,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/crypto/bls" "github.com/OffchainLabs/prysm/v6/crypto/bls"
"github.com/OffchainLabs/prysm/v6/encoding/bytesutil" "github.com/OffchainLabs/prysm/v6/encoding/bytesutil"
"github.com/OffchainLabs/prysm/v6/io/file" "github.com/OffchainLabs/prysm/v6/io/file"
@@ -47,7 +48,7 @@ func (mc *MockClient) GetPublicKeys(_ context.Context, _ string) ([]string, erro
func TestNewKeymanager(t *testing.T) { func TestNewKeymanager(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
err := json.NewEncoder(w).Encode([]string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"}) err := json.NewEncoder(w).Encode([]string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"})
require.NoError(t, err) require.NoError(t, err)
})) }))
@@ -517,7 +518,7 @@ func TestKeymanager_FetchValidatingPublicKeys_HappyPath_WithExternalURL(t *testi
require.NoError(t, err) require.NoError(t, err)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
err = json.NewEncoder(w).Encode([]string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"}) err = json.NewEncoder(w).Encode([]string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"})
require.NoError(t, err) require.NoError(t, err)
})) }))
@@ -539,7 +540,7 @@ func TestKeymanager_FetchValidatingPublicKeys_WithExternalURL_ThrowsError(t *tes
ctx := t.Context() ctx := t.Context()
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set(api.ContentTypeHeader, api.JsonMediaType)
http.Error(w, "mock error", http.StatusInternalServerError) http.Error(w, "mock error", http.StatusInternalServerError)
})) }))
defer srv.Close() defer srv.Close()

View File

@@ -40,9 +40,9 @@ func (s *Server) StreamBeaconLogs(w http.ResponseWriter, r *http.Request) {
ctx, span := trace.StartSpan(r.Context(), "validator.web.health.StreamBeaconLogs") ctx, span := trace.StartSpan(r.Context(), "validator.web.health.StreamBeaconLogs")
defer span.End() defer span.End()
// Set up SSE response headers // Set up SSE response headers
w.Header().Set("Content-Type", api.EventStreamMediaType) w.Header().Set(api.ContentTypeHeader, api.EventStreamMediaType)
w.Header().Set("Cache-Control", "no-cache") w.Header().Set(api.CacheControlHeader, api.NoCache)
w.Header().Set("Connection", api.KeepAlive) w.Header().Set(api.ConnectionHeader, api.KeepAlive)
// Flush helper function to ensure data is sent to client // Flush helper function to ensure data is sent to client
flusher, ok := w.(http.Flusher) flusher, ok := w.(http.Flusher)
@@ -109,9 +109,9 @@ func (s *Server) StreamValidatorLogs(w http.ResponseWriter, r *http.Request) {
close(ch) close(ch)
}() }()
// Set up SSE response headers // Set up SSE response headers
w.Header().Set("Content-Type", api.EventStreamMediaType) w.Header().Set(api.ContentTypeHeader, api.EventStreamMediaType)
w.Header().Set("Cache-Control", "no-cache") w.Header().Set(api.CacheControlHeader, api.NoCache)
w.Header().Set("Connection", api.KeepAlive) w.Header().Set(api.ConnectionHeader, api.KeepAlive)
recentLogs := s.logStreamer.GetLastFewLogs() recentLogs := s.logStreamer.GetLastFewLogs()
logStrings := make([]string, len(recentLogs)) logStrings := make([]string, len(recentLogs))

View File

@@ -90,10 +90,10 @@ func TestStreamBeaconLogs(t *testing.T) {
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
t.Fatalf("Expected status OK but got %v", resp.StatusCode) t.Fatalf("Expected status OK but got %v", resp.StatusCode)
} }
ct, ok := resp.Header["Content-Type"] ct, ok := resp.Header[api.ContentTypeHeader]
require.Equal(t, ok, true) require.Equal(t, ok, true)
require.Equal(t, ct[0], api.EventStreamMediaType) require.Equal(t, ct[0], api.EventStreamMediaType)
cn, ok := resp.Header["Connection"] cn, ok := resp.Header[api.ConnectionHeader]
require.Equal(t, ok, true) require.Equal(t, ok, true)
require.Equal(t, cn[0], api.KeepAlive) require.Equal(t, cn[0], api.KeepAlive)
body, err := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
@@ -141,10 +141,10 @@ func TestStreamValidatorLogs(t *testing.T) {
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
t.Fatalf("Expected status OK but got %v", resp.StatusCode) t.Fatalf("Expected status OK but got %v", resp.StatusCode)
} }
ct, ok := resp.Header["Content-Type"] ct, ok := resp.Header[api.ContentTypeHeader]
require.Equal(t, ok, true) require.Equal(t, ok, true)
require.Equal(t, ct[0], api.EventStreamMediaType) require.Equal(t, ct[0], api.EventStreamMediaType)
cn, ok := resp.Header["Connection"] cn, ok := resp.Header[api.ConnectionHeader]
require.Equal(t, ok, true) require.Equal(t, ok, true)
require.Equal(t, cn[0], api.KeepAlive) require.Equal(t, cn[0], api.KeepAlive)
// Check if data was written // Check if data was written

View File

@@ -2,6 +2,7 @@ package rpc
import ( import (
"context" "context"
"fmt"
"net/http" "net/http"
"strings" "strings"
@@ -40,12 +41,12 @@ func (s *Server) AuthTokenHandler(next http.Handler) http.Handler {
// if it's not initialize or has a web prefix // if it's not initialize or has a web prefix
if (strings.Contains(r.URL.Path, api.WebApiUrlPrefix) || strings.Contains(r.URL.Path, api.KeymanagerApiPrefix)) && !strings.Contains(r.URL.Path, api.SystemLogsPrefix) { if (strings.Contains(r.URL.Path, api.WebApiUrlPrefix) || strings.Contains(r.URL.Path, api.KeymanagerApiPrefix)) && !strings.Contains(r.URL.Path, api.SystemLogsPrefix) {
// ignore some routes // ignore some routes
reqToken := r.Header.Get("Authorization") reqToken := r.Header.Get(api.AuthorizationHeader)
if reqToken == "" { if reqToken == "" {
httputil.HandleError(w, "Unauthorized: no Authorization header passed. Please use an Authorization header with the jwt created in the prysm wallet", http.StatusUnauthorized) httputil.HandleError(w, "Unauthorized: no Authorization header passed. Please use an Authorization header with the jwt created in the prysm wallet", http.StatusUnauthorized)
return return
} }
tokenParts := strings.Split(reqToken, "Bearer ") tokenParts := strings.Split(reqToken, fmt.Sprintf("%s ", api.BearerAuthorization))
if len(tokenParts) != 2 { if len(tokenParts) != 2 {
httputil.HandleError(w, "Invalid token format", http.StatusBadRequest) httputil.HandleError(w, "Invalid token format", http.StatusBadRequest)
return return
@@ -72,10 +73,10 @@ func (s *Server) authorize(ctx context.Context) error {
if !ok { if !ok {
return status.Errorf(codes.Unauthenticated, "Authorization token could not be found") return status.Errorf(codes.Unauthenticated, "Authorization token could not be found")
} }
if len(authHeader) < 1 || !strings.Contains(authHeader[0], "Bearer ") { if len(authHeader) < 1 || !strings.Contains(authHeader[0], fmt.Sprintf("%s ", api.BearerAuthorization)) {
return status.Error(codes.Unauthenticated, "Invalid auth header, needs Bearer {token}") return status.Error(codes.Unauthenticated, "Invalid auth header, needs Bearer {token}")
} }
token := strings.Split(authHeader[0], "Bearer ")[1] token := strings.Split(authHeader[0], fmt.Sprintf("%s ", api.BearerAuthorization))[1]
if strings.TrimSpace(token) != s.authToken || strings.TrimSpace(s.authToken) == "" { if strings.TrimSpace(token) != s.authToken || strings.TrimSpace(s.authToken) == "" {
return status.Errorf(codes.Unauthenticated, "Forbidden: token value is invalid") return status.Errorf(codes.Unauthenticated, "Forbidden: token value is invalid")
} }

View File

@@ -82,7 +82,7 @@ func TestServer_AuthTokenHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody) req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody)
require.NoError(t, err) require.NoError(t, err)
req.Header.Set("Authorization", "Bearer YOUR_JWT_TOKEN") // Replace with a valid JWT token req.Header.Set(api.AuthorizationHeader, "Bearer YOUR_JWT_TOKEN") // Replace with a valid JWT token
testHandler.ServeHTTP(rr, req) testHandler.ServeHTTP(rr, req)
require.Equal(t, http.StatusForbidden, rr.Code) require.Equal(t, http.StatusForbidden, rr.Code)
errJson := &httputil.DefaultJsonError{} errJson := &httputil.DefaultJsonError{}
@@ -93,7 +93,7 @@ func TestServer_AuthTokenHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody) req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody)
require.NoError(t, err) require.NoError(t, err)
req.Header.Set("Authorization", "Bearer "+token) // Replace with a valid JWT token req.Header.Set(api.AuthorizationHeader, "Bearer "+token) // Replace with a valid JWT token
testHandler.ServeHTTP(rr, req) testHandler.ServeHTTP(rr, req)
require.Equal(t, http.StatusOK, rr.Code) require.Equal(t, http.StatusOK, rr.Code)
}) })

View File

@@ -13,12 +13,18 @@ go_library(
visibility = [ visibility = [
"//validator:__subpackages__", "//validator:__subpackages__",
], ],
deps = ["@com_github_sirupsen_logrus//:go_default_library"], deps = [
"//api:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
],
) )
go_test( go_test(
name = "go_default_test", name = "go_default_test",
srcs = ["handler_test.go"], srcs = ["handler_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = ["//testing/assert:go_default_library"], deps = [
"//api:go_default_library",
"//testing/assert:go_default_library",
],
) )

View File

@@ -5,6 +5,8 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"path" "path"
"github.com/OffchainLabs/prysm/v6/api"
) )
const prefix = "prysm-web-ui" const prefix = "prysm-web-ui"
@@ -25,7 +27,7 @@ var Handler = func(res http.ResponseWriter, req *http.Request) {
if d, ok := _bindata[p]; ok { if d, ok := _bindata[p]; ok {
m := mime.TypeByExtension(path.Ext(p)) m := mime.TypeByExtension(path.Ext(p))
res.Header().Add("Content-Type", m) res.Header().Add(api.ContentTypeHeader, m)
res.WriteHeader(http.StatusOK) res.WriteHeader(http.StatusOK)
asset, err := d() asset, err := d()
if err != nil { if err != nil {
@@ -38,7 +40,7 @@ var Handler = func(res http.ResponseWriter, req *http.Request) {
// Angular routing expects that routes are rewritten to serve index.html. For example, if // Angular routing expects that routes are rewritten to serve index.html. For example, if
// requesting /login, this should serve the single page app index.html. // requesting /login, this should serve the single page app index.html.
m := mime.TypeByExtension(".html") m := mime.TypeByExtension(".html")
res.Header().Add("Content-Type", m) res.Header().Add(api.ContentTypeHeader, m)
res.WriteHeader(http.StatusOK) res.WriteHeader(http.StatusOK)
asset, err := d() asset, err := d()
if err != nil { if err != nil {

View File

@@ -5,6 +5,7 @@ import (
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"github.com/OffchainLabs/prysm/v6/api"
"github.com/OffchainLabs/prysm/v6/testing/assert" "github.com/OffchainLabs/prysm/v6/testing/assert"
) )
@@ -48,7 +49,7 @@ func TestHandler(t *testing.T) {
Handler(res, req) Handler(res, req)
assert.Equal(t, tt.wantStatus, res.Result().StatusCode) assert.Equal(t, tt.wantStatus, res.Result().StatusCode)
if tt.wantContentType != "" { if tt.wantContentType != "" {
assert.Equal(t, tt.wantContentType, res.Result().Header.Get("Content-Type")) assert.Equal(t, tt.wantContentType, res.Result().Header.Get(api.ContentTypeHeader))
} }
}) })
} }