Files
prysm/testing/spectest/shared/electra/ssz_static/ssz_static.go
terence a9862f32f3 Protobufs for Electra devnet-0 (#13905)
* block protos

* proto and ssz

* stubs

* Enable Electra spec test

* Pull in EIP-7251 protobuf changes

From: https://github.com/prysmaticlabs/prysm/pull/13903

* All EIP7549 containers are passing

* All EIP7251 containers passing

* including changes from eip7002

* Everything passing except for beacon state hash tree root

* fixing eletra state to use electra payload

* Fix minimal test. Skip beacon state test

* Perston's feedback

---------

Co-authored-by: rkapka <radoslaw.kapka@gmail.com>
Co-authored-by: james-prysm <james@prysmaticlabs.com>
2024-04-24 21:38:03 +00:00

171 lines
5.3 KiB
Go

package ssz_static
import (
"errors"
"testing"
fssz "github.com/prysmaticlabs/fastssz"
enginev1 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1"
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
common "github.com/prysmaticlabs/prysm/v5/testing/spectest/shared/common/ssz_static"
)
// RunSSZStaticTests executes "ssz_static" tests.
func RunSSZStaticTests(t *testing.T, config string) {
common.RunSSZStaticTests(t, config, "electra", UnmarshalledSSZ, customHtr)
}
func customHtr(t *testing.T, htrs []common.HTR, object interface{}) []common.HTR {
// TODO: Replace BeaconStateDeneb with BeaconStateElectra below and uncomment the code
//_, ok := object.(*ethpb.BeaconStateDeneb)
//if !ok {
// return htrs
//}
//
//htrs = append(htrs, func(s interface{}) ([32]byte, error) {
// beaconState, err := state_native.InitializeFromProtoDeneb(s.(*ethpb.BeaconStateDeneb))
// require.NoError(t, err)
// return beaconState.HashTreeRoot(context.Background())
//})
return htrs
}
// UnmarshalledSSZ unmarshalls serialized input.
func UnmarshalledSSZ(t *testing.T, serializedBytes []byte, folderName string) (interface{}, error) {
// TODO: Remove this check once BeaconState custom HTR function is ready
if folderName == "BeaconState" {
t.Skip("BeaconState is not ready")
}
var obj interface{}
switch folderName {
case "ExecutionPayload":
obj = &enginev1.ExecutionPayloadElectra{}
case "ExecutionPayloadHeader":
obj = &enginev1.ExecutionPayloadHeaderElectra{}
case "Attestation":
obj = &ethpb.AttestationElectra{}
case "AttestationData":
obj = &ethpb.AttestationData{}
case "AttesterSlashing":
obj = &ethpb.AttesterSlashingElectra{}
case "AggregateAndProof":
obj = &ethpb.AggregateAttestationAndProofElectra{}
case "BeaconBlock":
obj = &ethpb.BeaconBlockElectra{}
case "BeaconBlockBody":
obj = &ethpb.BeaconBlockBodyElectra{}
case "BeaconBlockHeader":
obj = &ethpb.BeaconBlockHeader{}
case "BeaconState":
obj = &ethpb.BeaconStateElectra{}
case "Checkpoint":
obj = &ethpb.Checkpoint{}
case "Deposit":
obj = &ethpb.Deposit{}
case "DepositMessage":
obj = &ethpb.DepositMessage{}
case "DepositData":
obj = &ethpb.Deposit_Data{}
case "Eth1Data":
obj = &ethpb.Eth1Data{}
case "Eth1Block":
t.Skip("Unused type")
return nil, nil
case "Fork":
obj = &ethpb.Fork{}
case "ForkData":
obj = &ethpb.ForkData{}
case "HistoricalBatch":
obj = &ethpb.HistoricalBatch{}
case "IndexedAttestation":
obj = &ethpb.IndexedAttestationElectra{}
case "PendingAttestation":
obj = &ethpb.PendingAttestation{}
case "ProposerSlashing":
obj = &ethpb.ProposerSlashing{}
case "SignedAggregateAndProof":
obj = &ethpb.SignedAggregateAttestationAndProofElectra{}
case "SignedBeaconBlock":
obj = &ethpb.SignedBeaconBlockElectra{}
case "SignedBeaconBlockHeader":
obj = &ethpb.SignedBeaconBlockHeader{}
case "SignedVoluntaryExit":
obj = &ethpb.SignedVoluntaryExit{}
case "SigningData":
obj = &ethpb.SigningData{}
case "Validator":
obj = &ethpb.Validator{}
case "VoluntaryExit":
obj = &ethpb.VoluntaryExit{}
case "SyncCommitteeMessage":
obj = &ethpb.SyncCommitteeMessage{}
case "SyncCommitteeContribution":
obj = &ethpb.SyncCommitteeContribution{}
case "ContributionAndProof":
obj = &ethpb.ContributionAndProof{}
case "SignedContributionAndProof":
obj = &ethpb.SignedContributionAndProof{}
case "SyncAggregate":
obj = &ethpb.SyncAggregate{}
case "SyncAggregatorSelectionData":
obj = &ethpb.SyncAggregatorSelectionData{}
case "SyncCommittee":
obj = &ethpb.SyncCommittee{}
case "LightClientOptimisticUpdate":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "LightClientFinalityUpdate":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "LightClientBootstrap":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "LightClientSnapshot":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "LightClientUpdate":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "LightClientHeader":
t.Skip("not a beacon node type, this is a light node type")
return nil, nil
case "BlobIdentifier":
obj = &ethpb.BlobIdentifier{}
case "BlobSidecar":
obj = &ethpb.BlobSidecar{}
case "PowBlock":
obj = &ethpb.PowBlock{}
case "Withdrawal":
obj = &enginev1.Withdrawal{}
case "HistoricalSummary":
obj = &ethpb.HistoricalSummary{}
case "BLSToExecutionChange":
obj = &ethpb.BLSToExecutionChange{}
case "SignedBLSToExecutionChange":
obj = &ethpb.SignedBLSToExecutionChange{}
case "PendingBalanceDeposit":
obj = &ethpb.PendingBalanceDeposit{}
case "PendingPartialWithdrawal":
obj = &ethpb.PendingPartialWithdrawal{}
case "Consolidation":
obj = &ethpb.Consolidation{}
case "SignedConsolidation":
obj = &ethpb.SignedConsolidation{}
case "PendingConsolidation":
obj = &ethpb.PendingConsolidation{}
case "ExecutionLayerWithdrawalRequest":
obj = &enginev1.ExecutionLayerWithdrawalRequest{}
case "DepositReceipt":
obj = &enginev1.DepositReceipt{}
default:
return nil, errors.New("type not found")
}
var err error
if o, ok := obj.(fssz.Unmarshaler); ok {
err = o.UnmarshalSSZ(serializedBytes)
} else {
err = errors.New("could not unmarshal object, not a fastssz compatible object")
}
return obj, err
}