Files
prysm/beacon-chain/state/state-native/setters_payload_header_test.go
Preston Van Loon 9b2934f1f6 Electra: BeaconState implementation (#13919)
* Electra: Beacon State

* Electra: Beacon state fixes from PR 13919

* Add missing tests - part 1

* Split eip_7251_root.go into different files and reuse/share code with historical state summaries root. It's identical!

* Add missing tests - part 2

* deposit receipts start index getters and setters (#13947)

* adding in getters and setters for deposit receipts start index

* adding tests

* gaz

* Add missing tests - part 3 of 3

Update the electra withdrawal example with a ssz state containing pending partial withdrawals

* add tests for beacon-chain/state/state-native/getters_balance_deposits.go

* Add electra field to testing/util/block.go execution payload

* godoc commentary on public methods

* Fix failing test

* Add balances index out of bounds check and relevant tests.

* Revert switch case electra

* Instead of copying spectest data into testdata, use the spectest dependency

* Deepsource fixes

* Address @rkapka PR feedback

* s/MaxPendingPartialsPerWithdrawalSweep/MaxPendingPartialsPerWithdrawalsSweep/

* Use multivalue slice compatible accessors for validator and balance in ActiveBalanceAtIndex

* More @rkapka feedback. What a great reviewer!

* More tests for branching logic in ExitEpochAndUpdateChurn

* fix build

---------

Co-authored-by: james-prysm <90280386+james-prysm@users.noreply.github.com>
2024-05-06 18:04:33 +00:00

108 lines
3.6 KiB
Go

package state_native_test
import (
"fmt"
"testing"
state_native "github.com/prysmaticlabs/prysm/v5/beacon-chain/state/state-native"
"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
"github.com/prysmaticlabs/prysm/v5/consensus-types/interfaces"
"github.com/prysmaticlabs/prysm/v5/runtime/version"
"github.com/prysmaticlabs/prysm/v5/testing/require"
"github.com/prysmaticlabs/prysm/v5/testing/util"
)
func TestSetLatestExecutionPayloadHeader(t *testing.T) {
versionOffset := version.Bellatrix // PayloadHeader only applies in Bellatrix and beyond.
payloads := []interfaces.ExecutionData{
func() interfaces.ExecutionData {
e := util.NewBeaconBlockBellatrix().Block.Body.ExecutionPayload
ee, err := blocks.WrappedExecutionPayload(e)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBeaconBlockCapella().Block.Body.ExecutionPayload
ee, err := blocks.WrappedExecutionPayloadCapella(e, nil)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBeaconBlockDeneb().Block.Body.ExecutionPayload
ee, err := blocks.WrappedExecutionPayloadDeneb(e, nil)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBeaconBlockElectra().Block.Body.ExecutionPayload
ee, err := blocks.WrappedExecutionPayloadElectra(e, nil)
require.NoError(t, err)
return ee
}(),
}
payloadHeaders := []interfaces.ExecutionData{
func() interfaces.ExecutionData {
e := util.NewBlindedBeaconBlockBellatrix().Block.Body.ExecutionPayloadHeader
ee, err := blocks.WrappedExecutionPayloadHeader(e)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBlindedBeaconBlockCapella().Block.Body.ExecutionPayloadHeader
ee, err := blocks.WrappedExecutionPayloadHeaderCapella(e, nil)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBlindedBeaconBlockDeneb().Message.Body.ExecutionPayloadHeader
ee, err := blocks.WrappedExecutionPayloadHeaderDeneb(e, nil)
require.NoError(t, err)
return ee
}(),
func() interfaces.ExecutionData {
e := util.NewBlindedBeaconBlockElectra().Message.Body.ExecutionPayloadHeader
ee, err := blocks.WrappedExecutionPayloadHeaderElectra(e, nil)
require.NoError(t, err)
return ee
}(),
}
t.Run("can set payload", func(t *testing.T) {
for i, p := range payloads {
t.Run(version.String(i+versionOffset), func(t *testing.T) {
s := state_native.EmptyStateFromVersion(t, i+versionOffset)
require.NoError(t, s.SetLatestExecutionPayloadHeader(p))
})
}
})
t.Run("can set payload header", func(t *testing.T) {
for i, ph := range payloadHeaders {
t.Run(version.String(i+versionOffset), func(t *testing.T) {
s := state_native.EmptyStateFromVersion(t, i+versionOffset)
require.NoError(t, s.SetLatestExecutionPayloadHeader(ph))
})
}
})
t.Run("mismatched type version returns error", func(t *testing.T) {
require.Equal(t, len(payloads), len(payloadHeaders), "This test will fail if the payloads and payload headers are not same length")
for i := 0; i < len(payloads); i++ {
for j := 0; j < len(payloads); j++ {
if i == j {
continue
}
t.Run(fmt.Sprintf("%s state with %s payload", version.String(i+versionOffset), version.String(j+versionOffset)), func(t *testing.T) {
s := state_native.EmptyStateFromVersion(t, i+versionOffset)
p := payloads[j]
require.ErrorContains(t, "wrong state version", s.SetLatestExecutionPayloadHeader(p))
ph := payloadHeaders[j]
require.ErrorContains(t, "wrong state version", s.SetLatestExecutionPayloadHeader(ph))
})
}
}
})
}