From 146bbac48ea25238f7082829cf0f0bad8b9870ce Mon Sep 17 00:00:00 2001 From: terence Date: Wed, 19 Aug 2026 08:43:08 -0700 Subject: [PATCH] Explicitly set bid fields when upgrading to Gloas --- beacon-chain/core/gloas/upgrade.go | 14 +++++++++----- beacon-chain/core/gloas/upgrade_test.go | 13 +++++++++---- changelog/terence_gloas-fork-bid-fields.md | 3 +++ 3 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 changelog/terence_gloas-fork-bid-fields.md diff --git a/beacon-chain/core/gloas/upgrade.go b/beacon-chain/core/gloas/upgrade.go index 4a51e562a693..1fb6d72e3c81 100644 --- a/beacon-chain/core/gloas/upgrade.go +++ b/beacon-chain/core/gloas/upgrade.go @@ -264,6 +264,8 @@ func upgradeToGloas(beaconState state.BeaconState) (state.BeaconState, error) { return nil, errors.Wrap(err, "could not compute empty execution requests root") } + latestBlockHeader := beaconState.LatestBlockHeader() + s := ðpb.BeaconStateGloas{ GenesisTime: uint64(beaconState.GenesisTime().Unix()), GenesisValidatorsRoot: beaconState.GenesisValidatorsRoot(), @@ -273,7 +275,7 @@ func upgradeToGloas(beaconState state.BeaconState) (state.BeaconState, error) { CurrentVersion: params.BeaconConfig().GloasForkVersion, Epoch: time.CurrentEpoch(beaconState), }, - LatestBlockHeader: beaconState.LatestBlockHeader(), + LatestBlockHeader: latestBlockHeader, BlockRoots: beaconState.BlockRoots(), StateRoots: beaconState.StateRoots(), HistoricalRoots: beaconState.HistoricalRoots(), @@ -294,12 +296,14 @@ func upgradeToGloas(beaconState state.BeaconState) (state.BeaconState, error) { CurrentSyncCommittee: currentSyncCommittee, NextSyncCommittee: nextSyncCommittee, LatestExecutionPayloadBid: ðpb.ExecutionPayloadBid{ + ParentBlockHash: payloadHeader.ParentHash(), + ParentBlockRoot: latestBlockHeader.ParentRoot, BlockHash: payloadHeader.BlockHash(), - GasLimit: payloadHeader.GasLimit(), + PrevRandao: payloadHeader.PrevRandao(), FeeRecipient: make([]byte, fieldparams.FeeRecipientLength), - ParentBlockHash: make([]byte, fieldparams.RootLength), - ParentBlockRoot: make([]byte, fieldparams.RootLength), - PrevRandao: make([]byte, fieldparams.RootLength), + GasLimit: payloadHeader.GasLimit(), + BuilderIndex: params.BeaconConfig().BuilderIndexSelfBuild, + Slot: latestBlockHeader.Slot, ExecutionRequestsRoot: emptyExecutionRequestsRoot[:], }, NextWithdrawalIndex: wi, diff --git a/beacon-chain/core/gloas/upgrade_test.go b/beacon-chain/core/gloas/upgrade_test.go index 193d41f9b102..9dfd70982ef1 100644 --- a/beacon-chain/core/gloas/upgrade_test.go +++ b/beacon-chain/core/gloas/upgrade_test.go @@ -12,6 +12,7 @@ import ( consensusblocks "github.com/OffchainLabs/prysm/v7/consensus-types/blocks" "github.com/OffchainLabs/prysm/v7/consensus-types/primitives" "github.com/OffchainLabs/prysm/v7/crypto/bls" + "github.com/OffchainLabs/prysm/v7/encoding/bytesutil" enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1" ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1" "github.com/OffchainLabs/prysm/v7/testing/require" @@ -35,7 +36,9 @@ func TestUpgradeToGloas_Basic(t *testing.T) { require.NoError(t, st.SetPendingConsolidations([]*ethpb.PendingConsolidation{{SourceIndex: 3, TargetIndex: 4}})) blockHash := bytes.Repeat([]byte{0xAB}, 32) - header := &enginev1.ExecutionPayloadHeaderDeneb{BlockHash: blockHash} + parentHash := bytes.Repeat([]byte{0xCD}, 32) + prevRandao := bytes.Repeat([]byte{0xEF}, 32) + header := &enginev1.ExecutionPayloadHeaderDeneb{BlockHash: blockHash, ParentHash: parentHash, PrevRandao: prevRandao} wrappedHeader, err := consensusblocks.WrappedExecutionPayloadHeaderDeneb(header) require.NoError(t, err) require.NoError(t, st.SetLatestExecutionPayloadHeader(wrappedHeader)) @@ -60,9 +63,11 @@ func TestUpgradeToGloas_Basic(t *testing.T) { copy(wantBlockHash[:], blockHash) require.DeepSSZEqual(t, wantBlockHash, bid.BlockHash()) require.DeepSSZEqual(t, [20]byte{}, bid.FeeRecipient()) - require.DeepSSZEqual(t, [32]byte{}, bid.ParentBlockHash()) - require.DeepSSZEqual(t, [32]byte{}, bid.ParentBlockRoot()) - require.DeepSSZEqual(t, [32]byte{}, bid.PrevRandao()) + require.DeepSSZEqual(t, bytesutil.ToBytes32(parentHash), bid.ParentBlockHash()) + require.DeepSSZEqual(t, bytesutil.ToBytes32(preForkState.LatestBlockHeader().ParentRoot), bid.ParentBlockRoot()) + require.DeepSSZEqual(t, bytesutil.ToBytes32(prevRandao), bid.PrevRandao()) + require.Equal(t, params.BeaconConfig().BuilderIndexSelfBuild, bid.BuilderIndex()) + require.Equal(t, preForkState.LatestBlockHeader().Slot, bid.Slot()) latestBlockHash, err := mSt.LatestBlockHash() require.NoError(t, err) diff --git a/changelog/terence_gloas-fork-bid-fields.md b/changelog/terence_gloas-fork-bid-fields.md new file mode 100644 index 000000000000..aea729dc4ccd --- /dev/null +++ b/changelog/terence_gloas-fork-bid-fields.md @@ -0,0 +1,3 @@ +### Changed + +- Explicitly set execution payload bid fields when upgrading to Gloas per consensus-specs#5553.