package deneb import ( "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/time" "github.com/prysmaticlabs/prysm/v4/beacon-chain/state" state_native "github.com/prysmaticlabs/prysm/v4/beacon-chain/state/state-native" "github.com/prysmaticlabs/prysm/v4/config/params" enginev1 "github.com/prysmaticlabs/prysm/v4/proto/engine/v1" ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" ) // UpgradeToDeneb updates inputs a generic state to return the version Deneb state. func UpgradeToDeneb(state state.BeaconState) (state.BeaconState, error) { epoch := time.CurrentEpoch(state) currentSyncCommittee, err := state.CurrentSyncCommittee() if err != nil { return nil, err } nextSyncCommittee, err := state.NextSyncCommittee() if err != nil { return nil, err } prevEpochParticipation, err := state.PreviousEpochParticipation() if err != nil { return nil, err } currentEpochParticipation, err := state.CurrentEpochParticipation() if err != nil { return nil, err } inactivityScores, err := state.InactivityScores() if err != nil { return nil, err } payloadHeader, err := state.LatestExecutionPayloadHeader() if err != nil { return nil, err } txRoot, err := payloadHeader.TransactionsRoot() if err != nil { return nil, err } wdRoot, err := payloadHeader.WithdrawalsRoot() if err != nil { return nil, err } wi, err := state.NextWithdrawalIndex() if err != nil { return nil, err } vi, err := state.NextWithdrawalValidatorIndex() if err != nil { return nil, err } summaries, err := state.HistoricalSummaries() if err != nil { return nil, err } s := ðpb.BeaconStateDeneb{ GenesisTime: state.GenesisTime(), GenesisValidatorsRoot: state.GenesisValidatorsRoot(), Slot: state.Slot(), Fork: ðpb.Fork{ PreviousVersion: state.Fork().CurrentVersion, CurrentVersion: params.BeaconConfig().DenebForkVersion, Epoch: epoch, }, LatestBlockHeader: state.LatestBlockHeader(), BlockRoots: state.BlockRoots(), StateRoots: state.StateRoots(), HistoricalRoots: [][]byte{}, Eth1Data: state.Eth1Data(), Eth1DataVotes: state.Eth1DataVotes(), Eth1DepositIndex: state.Eth1DepositIndex(), Validators: state.Validators(), Balances: state.Balances(), RandaoMixes: state.RandaoMixes(), Slashings: state.Slashings(), PreviousEpochParticipation: prevEpochParticipation, CurrentEpochParticipation: currentEpochParticipation, JustificationBits: state.JustificationBits(), PreviousJustifiedCheckpoint: state.PreviousJustifiedCheckpoint(), CurrentJustifiedCheckpoint: state.CurrentJustifiedCheckpoint(), FinalizedCheckpoint: state.FinalizedCheckpoint(), InactivityScores: inactivityScores, CurrentSyncCommittee: currentSyncCommittee, NextSyncCommittee: nextSyncCommittee, LatestExecutionPayloadHeader: &enginev1.ExecutionPayloadHeaderDeneb{ ParentHash: payloadHeader.ParentHash(), FeeRecipient: payloadHeader.FeeRecipient(), StateRoot: payloadHeader.StateRoot(), ReceiptsRoot: payloadHeader.ReceiptsRoot(), LogsBloom: payloadHeader.LogsBloom(), PrevRandao: payloadHeader.PrevRandao(), BlockNumber: payloadHeader.BlockNumber(), GasLimit: payloadHeader.GasLimit(), GasUsed: payloadHeader.GasUsed(), Timestamp: payloadHeader.Timestamp(), ExtraData: payloadHeader.ExtraData(), BaseFeePerGas: payloadHeader.BaseFeePerGas(), BlockHash: payloadHeader.BlockHash(), ExcessBlobGas: 0, BlobGasUsed: 0, TransactionsRoot: txRoot, WithdrawalsRoot: wdRoot, }, NextWithdrawalIndex: wi, NextWithdrawalValidatorIndex: vi, HistoricalSummaries: summaries, } return state_native.InitializeFromProtoUnsafeDeneb(s) }