diff --git a/beacon-chain/rpc/eth/validator/handlers_block.go b/beacon-chain/rpc/eth/validator/handlers_block.go index 14f59ac555..15d54873cd 100644 --- a/beacon-chain/rpc/eth/validator/handlers_block.go +++ b/beacon-chain/rpc/eth/validator/handlers_block.go @@ -18,7 +18,6 @@ import ( http2 "github.com/prysmaticlabs/prysm/v4/network/http" eth "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v4/runtime/version" - log "github.com/sirupsen/logrus" "go.opencensus.io/trace" ) @@ -79,9 +78,6 @@ func (s *Server) ProduceBlockV3(w http.ResponseWriter, r *http.Request) { func (s *Server) produceBlockV3(ctx context.Context, w http.ResponseWriter, r *http.Request, v1alpha1req *eth.BlockRequest) { isSSZ := http2.SszRequested(r) - if !isSSZ { - log.Error("Checking for SSZ failed, defaulting to JSON") - } v1alpha1resp, err := s.V1Alpha1Server.GetBeaconBlock(ctx, v1alpha1req) if err != nil { http2.HandleError(w, err.Error(), http.StatusInternalServerError) @@ -100,12 +96,14 @@ func (s *Server) produceBlockV3(ctx context.Context, w http.ResponseWriter, r *h phase0Block, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Phase0) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Phase0)) // rewards aren't used in phase 0 handleProducePhase0V3(ctx, w, isSSZ, phase0Block, v1alpha1resp.PayloadValue) return } altairBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Altair) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Altair)) handleProduceAltairV3(ctx, w, isSSZ, altairBlock, v1alpha1resp.PayloadValue, consensusBlockValue) return } @@ -120,31 +118,37 @@ func (s *Server) produceBlockV3(ctx context.Context, w http.ResponseWriter, r *h } blindedBellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedBellatrix) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Bellatrix)) handleProduceBlindedBellatrixV3(ctx, w, isSSZ, blindedBellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue) return } bellatrixBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Bellatrix) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Bellatrix)) handleProduceBellatrixV3(ctx, w, isSSZ, bellatrixBlock, v1alpha1resp.PayloadValue, consensusBlockValue) return } blindedCapellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedCapella) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Capella)) handleProduceBlindedCapellaV3(ctx, w, isSSZ, blindedCapellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue) return } capellaBlock, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Capella) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Capella)) handleProduceCapellaV3(ctx, w, isSSZ, capellaBlock, v1alpha1resp.PayloadValue, consensusBlockValue) return } blindedDenebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_BlindedDeneb) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Deneb)) handleProduceBlindedDenebV3(ctx, w, isSSZ, blindedDenebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) return } denebBlockContents, ok := v1alpha1resp.Block.(*eth.GenericBeaconBlock_Deneb) if ok { + w.Header().Set(api.VersionHeader, version.String(version.Deneb)) handleProduceDenebV3(ctx, w, isSSZ, denebBlockContents, v1alpha1resp.PayloadValue, consensusBlockValue) return } diff --git a/beacon-chain/rpc/eth/validator/handlers_block_test.go b/beacon-chain/rpc/eth/validator/handlers_block_test.go index 861af5bb5f..722b480a6f 100644 --- a/beacon-chain/rpc/eth/validator/handlers_block_test.go +++ b/beacon-chain/rpc/eth/validator/handlers_block_test.go @@ -51,9 +51,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"phase0","execution_payload_blinded":false,"execution_payload_value":"0","consensus_block_value":"","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "phase0", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Altair", func(t *testing.T) { var block *shared.SignedBeaconBlockAltair @@ -84,9 +85,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"altair","execution_payload_blinded":false,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "altair", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Bellatrix", func(t *testing.T) { var block *shared.SignedBeaconBlockBellatrix @@ -117,9 +119,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":false,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("BlindedBellatrix", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockBellatrix @@ -150,9 +153,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"bellatrix","execution_payload_blinded":true,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Capella", func(t *testing.T) { var block *shared.SignedBeaconBlockCapella @@ -183,9 +187,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":false,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Blinded Capella", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockCapella @@ -219,9 +224,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"capella","execution_payload_blinded":true,"execution_payload_value":"2000","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "2000", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Deneb", func(t *testing.T) { var block *shared.SignedBeaconBlockContentsDeneb @@ -252,9 +258,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":false,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Blinded Deneb", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockContentsDeneb @@ -285,9 +292,10 @@ func TestProduceBlockV3(t *testing.T) { want := fmt.Sprintf(`{"version":"deneb","execution_payload_blinded":true,"execution_payload_value":"0","consensus_block_value":"10","data":%s}`, string(jsonBytes)) body := strings.ReplaceAll(writer.Body.String(), "\n", "") require.Equal(t, want, body) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("invalid query parameter slot empty", func(t *testing.T) { v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) @@ -376,9 +384,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.Phase0.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "phase0", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Altair", func(t *testing.T) { var block *shared.SignedBeaconBlockAltair @@ -410,9 +419,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.Altair.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "altair", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Bellatrix", func(t *testing.T) { var block *shared.SignedBeaconBlockBellatrix @@ -445,9 +455,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.Bellatrix.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("BlindedBellatrix", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockBellatrix @@ -480,9 +491,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.BlindedBellatrix.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "bellatrix", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Capella", func(t *testing.T) { var block *shared.SignedBeaconBlockCapella @@ -515,9 +527,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.Capella.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Blinded Capella", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockCapella @@ -553,9 +566,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.BlindedCapella.Block.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "2000", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "2000", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "capella", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Deneb", func(t *testing.T) { var block *shared.SignedBeaconBlockContentsDeneb @@ -588,9 +602,10 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.Deneb.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "false", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "false", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) t.Run("Blinded Deneb", func(t *testing.T) { var block *shared.SignedBlindedBeaconBlockContentsDeneb @@ -623,8 +638,9 @@ func TestProduceBlockV3SSZ(t *testing.T) { ssz, err := bl.BlindedDeneb.MarshalSSZ() require.NoError(t, err) require.Equal(t, string(ssz), writer.Body.String()) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadBlindedHeader) == "true", true) - require.Equal(t, writer.Header().Get(api.ExecutionPayloadValueHeader) == "0", true) - require.Equal(t, writer.Header().Get(api.ConsensusBlockValueHeader) == "10", true) + require.Equal(t, "true", writer.Header().Get(api.ExecutionPayloadBlindedHeader)) + require.Equal(t, "0", writer.Header().Get(api.ExecutionPayloadValueHeader)) + require.Equal(t, "deneb", writer.Header().Get(api.VersionHeader)) + require.Equal(t, "10", writer.Header().Get(api.ConsensusBlockValueHeader)) }) }