From b0bf402469baf5d2e1b99d53f158b365557fe535 Mon Sep 17 00:00:00 2001 From: james-prysm <90280386+james-prysm@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:55:36 -0500 Subject: [PATCH] version check to blinded block (#12305) --- api/client/builder/client.go | 6 ++++++ api/client/builder/client_test.go | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/api/client/builder/client.go b/api/client/builder/client.go index 2462431db7..ee377593ea 100644 --- a/api/client/builder/client.go +++ b/api/client/builder/client.go @@ -307,6 +307,9 @@ func (c *Client) SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlyS if err := json.Unmarshal(rb, ep); err != nil { return nil, errors.Wrap(err, "error unmarshaling the builder SubmitBlindedBlock response") } + if strings.ToLower(ep.Version) != version.String(version.Bellatrix) { + return nil, errors.New("not a bellatrix payload") + } p, err := ep.ToProto() if err != nil { return nil, errors.Wrapf(err, "could not extract proto message from payload") @@ -337,6 +340,9 @@ func (c *Client) SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlyS if err := json.Unmarshal(rb, ep); err != nil { return nil, errors.Wrap(err, "error unmarshaling the builder SubmitBlindedBlockCapella response") } + if strings.ToLower(ep.Version) != version.String(version.Capella) { + return nil, errors.New("not a capella payload") + } p, err := ep.ToProto() if err != nil { return nil, errors.Wrapf(err, "could not extract proto message from payload") diff --git a/api/client/builder/client_test.go b/api/client/builder/client_test.go index 4788298eba..0a4fb62ad4 100644 --- a/api/client/builder/client_test.go +++ b/api/client/builder/client_test.go @@ -313,6 +313,26 @@ func TestSubmitBlindedBlock(t *testing.T) { assert.DeepEqual(t, ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943"), withdrawals[0].Address) assert.Equal(t, uint64(1), withdrawals[0].Amount) }) + t.Run("mismatched versions, expected bellatrix got capella", func(t *testing.T) { + hc := &http.Client{ + Transport: roundtrip(func(r *http.Request) (*http.Response, error) { + require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path) + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayloadCapella)), // send a Capella payload + Request: r.Clone(ctx), + }, nil + }), + } + c := &Client{ + hc: hc, + baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"}, + } + sbbb, err := blocks.NewSignedBeaconBlock(testSignedBlindedBeaconBlockBellatrix(t)) + require.NoError(t, err) + _, err = c.SubmitBlindedBlock(ctx, sbbb) + require.ErrorContains(t, "not a bellatrix payload", err) + }) t.Run("not blinded", func(t *testing.T) { sbb, err := blocks.NewSignedBeaconBlock(ð.SignedBeaconBlockBellatrix{Block: ð.BeaconBlockBellatrix{Body: ð.BeaconBlockBodyBellatrix{}}}) require.NoError(t, err)