Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/headers.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const (
ExecutionPayloadValueHeader = "Eth-Execution-Payload-Value"
ConsensusBlockValueHeader = "Eth-Consensus-Block-Value"
ExecutionPayloadIncludedHeader = "Eth-Execution-Payload-Included"
BlobDataIncludedHeader = "Eth-Blob-Data-Included"
JsonMediaType = "application/json"
OctetStreamMediaType = "application/octet-stream"
EventStreamMediaType = "text/event-stream"
Expand Down
14 changes: 0 additions & 14 deletions api/server/structs/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -614,17 +614,3 @@ type SignedExecutionPayloadEnvelopeContents struct {
KzgProofs []string `json:"kzg_proofs"`
Blobs []string `json:"blobs"`
}

// BlindedExecutionPayloadEnvelope replaces the full payload with payload_root so its HTR matches the full envelope.
type BlindedExecutionPayloadEnvelope struct {
PayloadRoot string `json:"payload_root"`
ExecutionRequests *ExecutionRequestsGloas `json:"execution_requests"`
BuilderIndex string `json:"builder_index"`
BeaconBlockRoot string `json:"beacon_block_root"`
ParentBeaconBlockRoot string `json:"parent_beacon_block_root"`
}

type SignedBlindedExecutionPayloadEnvelope struct {
Message *BlindedExecutionPayloadEnvelope `json:"message"`
Signature string `json:"signature"`
}
71 changes: 0 additions & 71 deletions api/server/structs/conversions_block_gloas.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,77 +127,6 @@ func (e *SignedExecutionPayloadEnvelope) ToConsensus() (*eth.SignedExecutionPayl
}, nil
}

func BlindedExecutionPayloadEnvelopeFromConsensus(b *eth.WireBlindedExecutionPayloadEnvelope) (*BlindedExecutionPayloadEnvelope, error) {
if b == nil {
return nil, errNilValue
}
var requests *ExecutionRequestsGloas
if b.ExecutionRequests != nil {
requests = ExecutionRequestsGloasFromConsensus(b.ExecutionRequests)
}
return &BlindedExecutionPayloadEnvelope{
PayloadRoot: hexutil.Encode(b.PayloadRoot),
ExecutionRequests: requests,
BuilderIndex: fmt.Sprintf("%d", b.BuilderIndex),
BeaconBlockRoot: hexutil.Encode(b.BeaconBlockRoot),
ParentBeaconBlockRoot: hexutil.Encode(b.ParentBeaconBlockRoot),
}, nil
}

func (b *BlindedExecutionPayloadEnvelope) ToConsensus() (*eth.WireBlindedExecutionPayloadEnvelope, error) {
if b == nil {
return nil, server.NewDecodeError(errNilValue, "BlindedExecutionPayloadEnvelope")
}
payloadRoot, err := bytesutil.DecodeHexWithLength(b.PayloadRoot, fieldparams.RootLength)
if err != nil {
return nil, server.NewDecodeError(err, "PayloadRoot")
}
var requests *enginev1.ExecutionRequestsGloas
if b.ExecutionRequests != nil {
requests, err = b.ExecutionRequests.ToConsensus()
if err != nil {
return nil, server.NewDecodeError(err, "ExecutionRequests")
}
}
builderIndex, err := strconv.ParseUint(b.BuilderIndex, 10, 64)
if err != nil {
return nil, server.NewDecodeError(err, "BuilderIndex")
}
beaconBlockRoot, err := bytesutil.DecodeHexWithLength(b.BeaconBlockRoot, fieldparams.RootLength)
if err != nil {
return nil, server.NewDecodeError(err, "BeaconBlockRoot")
}
parentBeaconBlockRoot, err := bytesutil.DecodeHexWithLength(b.ParentBeaconBlockRoot, fieldparams.RootLength)
if err != nil {
return nil, server.NewDecodeError(err, "ParentBeaconBlockRoot")
}
return &eth.WireBlindedExecutionPayloadEnvelope{
PayloadRoot: payloadRoot,
ExecutionRequests: requests,
BuilderIndex: primitives.BuilderIndex(builderIndex),
BeaconBlockRoot: beaconBlockRoot,
ParentBeaconBlockRoot: parentBeaconBlockRoot,
}, nil
}

func (s *SignedBlindedExecutionPayloadEnvelope) ToConsensus() (*eth.SignedWireBlindedExecutionPayloadEnvelope, error) {
if s == nil {
return nil, server.NewDecodeError(errNilValue, "SignedBlindedExecutionPayloadEnvelope")
}
msg, err := s.Message.ToConsensus()
if err != nil {
return nil, server.NewDecodeError(err, "Message")
}
sig, err := bytesutil.DecodeHexWithLength(s.Signature, fieldparams.BLSSignatureLength)
if err != nil {
return nil, server.NewDecodeError(err, "Signature")
}
return &eth.SignedWireBlindedExecutionPayloadEnvelope{
Message: msg,
Signature: sig,
}, nil
}

// SignedExecutionPayloadEnvelopeContentsFromConsensus builds the API struct
// used for stateless envelope publishing from native components.
func SignedExecutionPayloadEnvelopeContentsFromConsensus(signed *eth.SignedExecutionPayloadEnvelope, kzgProofs [][]byte, blobs [][]byte) (*SignedExecutionPayloadEnvelopeContents, error) {
Expand Down
113 changes: 0 additions & 113 deletions api/server/structs/conversions_block_gloas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"testing"

fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams"
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
eth "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/OffchainLabs/prysm/v7/testing/require"
Expand Down Expand Up @@ -55,118 +54,6 @@ func TestExecutionPayloadEnvelopeFromConsensus_NilRequests(t *testing.T) {
require.Equal(t, (*ExecutionRequestsGloas)(nil), result.ExecutionRequests)
}

func testWireBlindedProto() *eth.WireBlindedExecutionPayloadEnvelope {
return &eth.WireBlindedExecutionPayloadEnvelope{
PayloadRoot: fillByteSlice(32, 0x55),
ExecutionRequests: &enginev1.ExecutionRequestsGloas{},
BuilderIndex: 7,
BeaconBlockRoot: fillByteSlice(32, 0x33),
ParentBeaconBlockRoot: fillByteSlice(32, 0x44),
}
}

// HTR(blinded) must equal HTR(full) so the validator signature stays valid against either form.
func TestWireBlindedHTRMatchesFull(t *testing.T) {
full := &eth.ExecutionPayloadEnvelope{
Payload: &enginev1.ExecutionPayloadGloas{
ParentHash: fillByteSlice(32, 0x01),
FeeRecipient: fillByteSlice(20, 0x02),
StateRoot: fillByteSlice(32, 0x03),
ReceiptsRoot: fillByteSlice(32, 0x04),
LogsBloom: fillByteSlice(256, 0x05),
PrevRandao: fillByteSlice(32, 0x06),
BaseFeePerGas: fillByteSlice(32, 0x07),
BlockHash: fillByteSlice(32, 0x08),
Transactions: [][]byte{[]byte("tx1"), []byte("tx2")},
Withdrawals: []*enginev1.Withdrawal{},
SlotNumber: primitives.Slot(100),
},
ExecutionRequests: &enginev1.ExecutionRequestsGloas{},
BuilderIndex: primitives.BuilderIndex(42),
BeaconBlockRoot: fillByteSlice(32, 0x09),
ParentBeaconBlockRoot: fillByteSlice(32, 0x0a),
}

blinded, err := full.WireBlinded()
require.NoError(t, err)
fullHTR, err := full.HashTreeRoot()
require.NoError(t, err)
blindedHTR, err := blinded.HashTreeRoot()
require.NoError(t, err)
require.Equal(t, fullHTR, blindedHTR)

// SSZ roundtrip.
enc, err := blinded.MarshalSSZ()
require.NoError(t, err)
decoded := &eth.WireBlindedExecutionPayloadEnvelope{}
require.NoError(t, decoded.UnmarshalSSZ(enc))
rtHTR, err := decoded.HashTreeRoot()
require.NoError(t, err)
require.Equal(t, fullHTR, rtHTR)

// Signed wrapper SSZ roundtrip.
signedBlinded, err := (&eth.SignedExecutionPayloadEnvelope{
Message: full,
Signature: fillByteSlice(96, 0x0b),
}).WireBlinded()
require.NoError(t, err)
signedEnc, err := signedBlinded.MarshalSSZ()
require.NoError(t, err)
decodedSigned := &eth.SignedWireBlindedExecutionPayloadEnvelope{}
require.NoError(t, decodedSigned.UnmarshalSSZ(signedEnc))
rtBlindedHTR, err := decodedSigned.Message.HashTreeRoot()
require.NoError(t, err)
require.Equal(t, fullHTR, rtBlindedHTR)
}

func TestBlindedExecutionPayloadEnvelopeFromConsensus(t *testing.T) {
b := testWireBlindedProto()
result, err := BlindedExecutionPayloadEnvelopeFromConsensus(b)
require.NoError(t, err)
require.Equal(t, hexutil.Encode(b.PayloadRoot), result.PayloadRoot)
require.Equal(t, "7", result.BuilderIndex)
require.Equal(t, hexutil.Encode(b.BeaconBlockRoot), result.BeaconBlockRoot)
require.Equal(t, hexutil.Encode(b.ParentBeaconBlockRoot), result.ParentBeaconBlockRoot)
require.NotNil(t, result.ExecutionRequests)
}

func TestBlindedExecutionPayloadEnvelopeFromConsensus_Nil(t *testing.T) {
_, err := BlindedExecutionPayloadEnvelopeFromConsensus(nil)
require.NotNil(t, err)
}

func TestBlindedExecutionPayloadEnvelope_ToConsensusRoundTrip(t *testing.T) {
b := testWireBlindedProto()
api, err := BlindedExecutionPayloadEnvelopeFromConsensus(b)
require.NoError(t, err)
back, err := api.ToConsensus()
require.NoError(t, err)
require.DeepEqual(t, b.PayloadRoot, back.PayloadRoot)
require.Equal(t, b.BuilderIndex, back.BuilderIndex)
require.DeepEqual(t, b.BeaconBlockRoot, back.BeaconBlockRoot)
require.DeepEqual(t, b.ParentBeaconBlockRoot, back.ParentBeaconBlockRoot)
require.NotNil(t, back.ExecutionRequests)
}

func TestSignedBlindedExecutionPayloadEnvelope_ToConsensus(t *testing.T) {
msg, err := BlindedExecutionPayloadEnvelopeFromConsensus(testWireBlindedProto())
require.NoError(t, err)
sig := fillByteSlice(96, 0x66)
signed := &SignedBlindedExecutionPayloadEnvelope{Message: msg, Signature: hexutil.Encode(sig)}
result, err := signed.ToConsensus()
require.NoError(t, err)
require.NotNil(t, result.Message)
require.DeepEqual(t, sig, result.Signature)
}

func TestSignedBlindedExecutionPayloadEnvelope_ToConsensus_BadSignature(t *testing.T) {
msg, err := BlindedExecutionPayloadEnvelopeFromConsensus(testWireBlindedProto())
require.NoError(t, err)
signed := &SignedBlindedExecutionPayloadEnvelope{Message: msg, Signature: "0xdead"}
_, err = signed.ToConsensus()
require.NotNil(t, err)
}

func TestBlockContentsGloasFromConsensus(t *testing.T) {
block := util.NewBeaconBlockGloas().Block
env := testEnvelopeProto()
Expand Down
6 changes: 3 additions & 3 deletions api/server/structs/endpoints_validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,9 @@ type ValidatorParticipation struct {
PreviousEpochHeadAttestingGwei string `json:"previous_epoch_head_attesting_gwei"`
}

type GetValidatorBlindedExecutionPayloadEnvelopeResponse struct {
Version string `json:"version"`
Data *BlindedExecutionPayloadEnvelope `json:"data"`
type GetValidatorExecutionPayloadEnvelopeResponse struct {
Version string `json:"version"`
Data *ExecutionPayloadEnvelope `json:"data"`
}

type ActiveSetChanges struct {
Expand Down
104 changes: 51 additions & 53 deletions beacon-chain/rpc/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,28 +204,27 @@ func (s *Service) validatorEndpoints(
rewardFetcher rewards.BlockRewardsFetcher,
) []endpoint {
server := &validator.Server{
HeadFetcher: s.cfg.HeadFetcher,
TimeFetcher: s.cfg.GenesisTimeFetcher,
SyncChecker: s.cfg.SyncService,
OptimisticModeFetcher: s.cfg.OptimisticModeFetcher,
AttestationCache: s.cfg.AttestationCache,
AttestationsPool: s.cfg.AttestationsPool,
PeerManager: s.cfg.PeerManager,
Broadcaster: s.cfg.Broadcaster,
V1Alpha1Server: validatorServer,
ExecutionPayloadEnvelopeCache: s.cfg.ExecutionPayloadEnvelopeCache,
Stater: stater,
SyncCommitteePool: s.cfg.SyncCommitteeObjectPool,
ChainInfoFetcher: s.cfg.ChainInfoFetcher,
BeaconDB: s.cfg.BeaconDB,
BlockBuilder: s.cfg.BlockBuilder,
OperationNotifier: s.cfg.OperationNotifier,
ProposerPreferencesCache: s.cfg.ProposerPreferencesCache,
SubscribedValidatorsCache: s.cfg.SubscribedValidatorsCache,
PayloadIDCache: s.cfg.PayloadIDCache,
PayloadAttestationPool: s.cfg.PayloadAttestationPool,
CoreService: coreService,
BlockRewardFetcher: rewardFetcher,
HeadFetcher: s.cfg.HeadFetcher,
TimeFetcher: s.cfg.GenesisTimeFetcher,
SyncChecker: s.cfg.SyncService,
OptimisticModeFetcher: s.cfg.OptimisticModeFetcher,
AttestationCache: s.cfg.AttestationCache,
AttestationsPool: s.cfg.AttestationsPool,
PeerManager: s.cfg.PeerManager,
Broadcaster: s.cfg.Broadcaster,
V1Alpha1Server: validatorServer,
Stater: stater,
SyncCommitteePool: s.cfg.SyncCommitteeObjectPool,
ChainInfoFetcher: s.cfg.ChainInfoFetcher,
BeaconDB: s.cfg.BeaconDB,
BlockBuilder: s.cfg.BlockBuilder,
OperationNotifier: s.cfg.OperationNotifier,
ProposerPreferencesCache: s.cfg.ProposerPreferencesCache,
SubscribedValidatorsCache: s.cfg.SubscribedValidatorsCache,
PayloadIDCache: s.cfg.PayloadIDCache,
PayloadAttestationPool: s.cfg.PayloadAttestationPool,
CoreService: coreService,
BlockRewardFetcher: rewardFetcher,
}

const namespace = "validator"
Expand Down Expand Up @@ -569,37 +568,36 @@ func (s *Service) beaconEndpoints(
coreService *core.Service,
) []endpoint {
server := &beacon.Server{
CanonicalHistory: ch,
BeaconDB: s.cfg.BeaconDB,
AttestationCache: s.cfg.AttestationCache,
AttestationsPool: s.cfg.AttestationsPool,
SlashingsPool: s.cfg.SlashingsPool,
ChainInfoFetcher: s.cfg.ChainInfoFetcher,
GenesisTimeFetcher: s.cfg.GenesisTimeFetcher,
BlockNotifier: s.cfg.BlockNotifier,
OperationNotifier: s.cfg.OperationNotifier,
Broadcaster: s.cfg.Broadcaster,
BlockReceiver: s.cfg.BlockReceiver,
StateGenService: s.cfg.StateGen,
Stater: stater,
Blocker: blocker,
OptimisticModeFetcher: s.cfg.OptimisticModeFetcher,
HeadFetcher: s.cfg.HeadFetcher,
TimeFetcher: s.cfg.GenesisTimeFetcher,
VoluntaryExitsPool: s.cfg.ExitPool,
V1Alpha1ValidatorServer: validatorServer,
DataColumnReceiver: s.cfg.DataColumnReceiver,
SyncChecker: s.cfg.SyncService,
ExecutionReconstructor: s.cfg.ExecutionReconstructor,
BLSChangesPool: s.cfg.BLSChangesPool,
PayloadAttestationPool: s.cfg.PayloadAttestationPool,
PayloadAttestationReceiver: s.cfg.PayloadAttestationReceiver,
FinalizationFetcher: s.cfg.FinalizationFetcher,
ForkchoiceFetcher: s.cfg.ForkchoiceFetcher,
CoreService: coreService,
AttestationStateFetcher: s.cfg.AttestationReceiver,
ExecutionPayloadEnvelopeCache: s.cfg.ExecutionPayloadEnvelopeCache,
PayloadEnvelopeVerifier: verification.NewEnvelopeVerifier,
CanonicalHistory: ch,
BeaconDB: s.cfg.BeaconDB,
AttestationCache: s.cfg.AttestationCache,
AttestationsPool: s.cfg.AttestationsPool,
SlashingsPool: s.cfg.SlashingsPool,
ChainInfoFetcher: s.cfg.ChainInfoFetcher,
GenesisTimeFetcher: s.cfg.GenesisTimeFetcher,
BlockNotifier: s.cfg.BlockNotifier,
OperationNotifier: s.cfg.OperationNotifier,
Broadcaster: s.cfg.Broadcaster,
BlockReceiver: s.cfg.BlockReceiver,
StateGenService: s.cfg.StateGen,
Stater: stater,
Blocker: blocker,
OptimisticModeFetcher: s.cfg.OptimisticModeFetcher,
HeadFetcher: s.cfg.HeadFetcher,
TimeFetcher: s.cfg.GenesisTimeFetcher,
VoluntaryExitsPool: s.cfg.ExitPool,
V1Alpha1ValidatorServer: validatorServer,
DataColumnReceiver: s.cfg.DataColumnReceiver,
SyncChecker: s.cfg.SyncService,
ExecutionReconstructor: s.cfg.ExecutionReconstructor,
BLSChangesPool: s.cfg.BLSChangesPool,
PayloadAttestationPool: s.cfg.PayloadAttestationPool,
PayloadAttestationReceiver: s.cfg.PayloadAttestationReceiver,
FinalizationFetcher: s.cfg.FinalizationFetcher,
ForkchoiceFetcher: s.cfg.ForkchoiceFetcher,
CoreService: coreService,
AttestationStateFetcher: s.cfg.AttestationReceiver,
PayloadEnvelopeVerifier: verification.NewEnvelopeVerifier,
}

const namespace = "beacon"
Expand Down
1 change: 0 additions & 1 deletion beacon-chain/rpc/eth/beacon/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ go_test(
"//api/server/structs:go_default_library",
"//beacon-chain/blockchain/kzg:go_default_library",
"//beacon-chain/blockchain/testing:go_default_library",
"//beacon-chain/cache:go_default_library",
"//beacon-chain/core/signing:go_default_library",
"//beacon-chain/core/time:go_default_library",
"//beacon-chain/core/transition:go_default_library",
Expand Down
Loading
Loading