diff --git a/CHANGELOG.md b/CHANGELOG.md index b747f49c866e..2bf522c3fe54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve - Added support to update target and max blob count to different values per hard fork config. - Log before blob filesystem cache warm-up. - New design for the attestation pool. [PR](https://github.com/prysmaticlabs/prysm/pull/14324) +- Add field param placeholder for Electra blob target and max to pass spec tests. ### Changed @@ -24,6 +25,9 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve - Go deps upgrade, from `ioutil` to `io` - Move successfully registered validator(s) on builder log to debug. - Update some test files to use `crypto/rand` instead of `math/rand` +- Enforce Compound prefix (0x02) for target when processing pending consolidation request. +- Limit consolidating by validator's effective balance. +- Use 16-bit random value for proposer and sync committee selection filter. ### Deprecated diff --git a/WORKSPACE b/WORKSPACE index 3bc439a7e785..8575c6896a31 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -227,7 +227,7 @@ filegroup( url = "https://github.com/ethereum/EIPs/archive/5480440fe51742ed23342b68cf106cefd427e39d.tar.gz", ) -consensus_spec_version = "v1.5.0-alpha.9" +consensus_spec_version = "v1.5.0-alpha.10" bls_test_version = "v0.1.1" @@ -243,7 +243,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - integrity = "sha256-gHbvlnErUeJGWzW8/8JiVlk28JwmXSMhOzkynEIz+8g=", + integrity = "sha256-NtWIhbO/mVMb1edq5jqABL0o8R1tNFiuG8PCMAsUHcs=", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/general.tar.gz" % consensus_spec_version, ) @@ -259,7 +259,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - integrity = "sha256-hQkQdpm5ng4miGYa5WsOKWa0q8WtZu99Oqbv9QtBeJM=", + integrity = "sha256-DFlFlnzls1bBrDm+/xD8NK2ivvkhxR+rSNVLLqScVKc=", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/minimal.tar.gz" % consensus_spec_version, ) @@ -275,7 +275,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - integrity = "sha256-33sBsmApnJpcyYfR3olKaPB+WC1q00ZKNzHa2TczIxk=", + integrity = "sha256-G9ENPF8udZL/BqRHbi60GhFPnZDPZAH6UjcjRiOlvbk=", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/mainnet.tar.gz" % consensus_spec_version, ) @@ -290,7 +290,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - integrity = "sha256-GQulBKLc2khpql2K/MxV+NG/d2kAhLXl+gLnKIg7rt4=", + integrity = "sha256-ClOLKkmAcEi8/uKi6LDeqthask5+E3sgxVoA0bqmQ0c=", strip_prefix = "consensus-specs-" + consensus_spec_version[1:], url = "https://github.com/ethereum/consensus-specs/archive/refs/tags/%s.tar.gz" % consensus_spec_version, ) diff --git a/beacon-chain/core/altair/sync_committee.go b/beacon-chain/core/altair/sync_committee.go index 88ef8650763d..ee89c1755421 100644 --- a/beacon-chain/core/altair/sync_committee.go +++ b/beacon-chain/core/altair/sync_committee.go @@ -2,6 +2,7 @@ package altair import ( "context" + "encoding/binary" goErrors "errors" "fmt" "time" @@ -22,8 +23,6 @@ import ( "github.com/prysmaticlabs/prysm/v5/time/slots" ) -const maxRandomByte = uint64(1<<8 - 1) - var ( ErrTooLate = errors.New("sync message is too late") ) @@ -91,19 +90,22 @@ func NextSyncCommittee(ctx context.Context, s state.BeaconState) (*ethpb.SyncCom // """ // epoch = Epoch(get_current_epoch(state) + 1) // -// MAX_RANDOM_BYTE = 2**8 - 1 +// MAX_RANDOM_VALUE = 2**16 - 1 # [Modified in Electra] // active_validator_indices = get_active_validator_indices(state, epoch) // active_validator_count = uint64(len(active_validator_indices)) // seed = get_seed(state, epoch, DOMAIN_SYNC_COMMITTEE) -// i = 0 +// i = uint64(0) // sync_committee_indices: List[ValidatorIndex] = [] // while len(sync_committee_indices) < SYNC_COMMITTEE_SIZE: // shuffled_index = compute_shuffled_index(uint64(i % active_validator_count), active_validator_count, seed) // candidate_index = active_validator_indices[shuffled_index] -// random_byte = hash(seed + uint_to_bytes(uint64(i // 32)))[i % 32] +// # [Modified in Electra] +// random_bytes = hash(seed + uint_to_bytes(i // 16)) +// offset = i % 16 * 2 +// random_value = bytes_to_uint64(random_bytes[offset:offset + 2]) // effective_balance = state.validators[candidate_index].effective_balance // # [Modified in Electra:EIP7251] -// if effective_balance * MAX_RANDOM_BYTE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_byte: +// if effective_balance * MAX_RANDOM_VALUE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_value: // sync_committee_indices.append(candidate_index) // i += 1 // return sync_committee_indices @@ -123,12 +125,11 @@ func NextSyncCommitteeIndices(ctx context.Context, s state.BeaconState) ([]primi cIndices := make([]primitives.ValidatorIndex, 0, syncCommitteeSize) hashFunc := hash.CustomSHA256Hasher() - maxEB := cfg.MaxEffectiveBalanceElectra - if s.Version() < version.Electra { - maxEB = cfg.MaxEffectiveBalance - } + // Preallocate buffers to avoid repeated allocations + seedBuffer := make([]byte, len(seed)+8) + copy(seedBuffer, seed[:]) - for i := primitives.ValidatorIndex(0); uint64(len(cIndices)) < params.BeaconConfig().SyncCommitteeSize; i++ { + for i := primitives.ValidatorIndex(0); uint64(len(cIndices)) < syncCommitteeSize; i++ { if ctx.Err() != nil { return nil, ctx.Err() } @@ -137,18 +138,30 @@ func NextSyncCommitteeIndices(ctx context.Context, s state.BeaconState) ([]primi if err != nil { return nil, err } - - b := append(seed[:], bytesutil.Bytes8(uint64(i.Div(32)))...) - randomByte := hashFunc(b)[i%32] cIndex := indices[sIndex] v, err := s.ValidatorAtIndexReadOnly(cIndex) if err != nil { return nil, err } - effectiveBal := v.EffectiveBalance() - if effectiveBal*maxRandomByte >= maxEB*uint64(randomByte) { - cIndices = append(cIndices, cIndex) + + if s.Version() >= version.Electra { + // Use the preallocated seed buffer + binary.LittleEndian.PutUint64(seedBuffer[len(seed):], uint64(i/16)) + randomByte := hashFunc(seedBuffer) + offset := (i % 16) * 2 + randomValue := uint64(randomByte[offset]) | uint64(randomByte[offset+1])<<8 + + if effectiveBal*fieldparams.MaxRandomValueElectra >= cfg.MaxEffectiveBalanceElectra*randomValue { + cIndices = append(cIndices, cIndex) + } + } else { + // Use the preallocated seed buffer + binary.LittleEndian.PutUint64(seedBuffer[len(seed):], uint64(i/32)) + randomByte := hashFunc(seedBuffer)[i%32] + if effectiveBal*fieldparams.MaxRandomByte >= cfg.MaxEffectiveBalance*uint64(randomByte) { + cIndices = append(cIndices, cIndex) + } } } diff --git a/beacon-chain/core/electra/churn_test.go b/beacon-chain/core/electra/churn_test.go index 4ce1731e7293..477e82214df1 100644 --- a/beacon-chain/core/electra/churn_test.go +++ b/beacon-chain/core/electra/churn_test.go @@ -20,7 +20,7 @@ func createValidatorsWithTotalActiveBalance(totalBal primitives.Gwei) []*eth.Val vals := make([]*eth.Validator, num) for i := range vals { wd := make([]byte, 32) - wd[0] = params.BeaconConfig().ETH1AddressWithdrawalPrefixByte + wd[0] = params.BeaconConfig().CompoundingWithdrawalPrefixByte wd[31] = byte(i) vals[i] = ð.Validator{ diff --git a/beacon-chain/core/electra/consolidations.go b/beacon-chain/core/electra/consolidations.go index b2ddd2e49748..5dd6581e4839 100644 --- a/beacon-chain/core/electra/consolidations.go +++ b/beacon-chain/core/electra/consolidations.go @@ -37,8 +37,7 @@ import ( // break // // # Calculate the consolidated balance -// max_effective_balance = get_max_effective_balance(source_validator) -// source_effective_balance = min(state.balances[pending_consolidation.source_index], max_effective_balance) +// source_effective_balance = min(state.balances[pending_consolidation.source_index], source_validator.effective_balance) // // # Move active balance to target. Excess balance is withdrawable. // decrease_balance(state, pending_consolidation.source_index, source_effective_balance) @@ -78,7 +77,7 @@ func ProcessPendingConsolidations(ctx context.Context, st state.BeaconState) err if err != nil { return err } - b := min(validatorBalance, helpers.ValidatorMaxEffectiveBalance(sourceValidator)) + b := min(validatorBalance, sourceValidator.EffectiveBalance()) if err := helpers.DecreaseBalance(st, pc.SourceIndex, b); err != nil { return err @@ -141,8 +140,8 @@ func ProcessPendingConsolidations(ctx context.Context, st state.BeaconState) err // if not (has_correct_credential and is_correct_source_address): // return // -// # Verify that target has execution withdrawal credentials -// if not has_execution_withdrawal_credential(target_validator): +// # Verify that target has compounding withdrawal credentials +// if not has_compounding_withdrawal_credential(target_validator): // return // // # Verify the source and the target are active @@ -175,10 +174,6 @@ func ProcessPendingConsolidations(ctx context.Context, st state.BeaconState) err // source_index=source_index, // target_index=target_index // )) -// -// # Churn any target excess active balance of target and raise its max -// if has_eth1_withdrawal_credential(target_validator): -// switch_to_compounding_validator(state, target_index) func ProcessConsolidationRequests(ctx context.Context, st state.BeaconState, reqs []*enginev1.ConsolidationRequest) error { if len(reqs) == 0 || st == nil { return nil @@ -253,7 +248,7 @@ func ProcessConsolidationRequests(ctx context.Context, st state.BeaconState, req } // Target validator must have their withdrawal credentials set appropriately. - if !helpers.HasExecutionWithdrawalCredentials(tgtV) { + if !helpers.HasCompoundingWithdrawalCredential(tgtV) { continue } @@ -298,13 +293,6 @@ func ProcessConsolidationRequests(ctx context.Context, st state.BeaconState, req if err := st.AppendPendingConsolidation(ð.PendingConsolidation{SourceIndex: srcIdx, TargetIndex: tgtIdx}); err != nil { return fmt.Errorf("failed to append pending consolidation: %w", err) // This should never happen. } - - if helpers.HasETH1WithdrawalCredential(tgtV) { - if err := SwitchToCompoundingValidator(st, tgtIdx); err != nil { - log.WithError(err).Error("failed to switch to compounding validator") - continue - } - } } return nil diff --git a/beacon-chain/core/electra/consolidations_test.go b/beacon-chain/core/electra/consolidations_test.go index 0a565aedfc87..09db720b043a 100644 --- a/beacon-chain/core/electra/consolidations_test.go +++ b/beacon-chain/core/electra/consolidations_test.go @@ -46,6 +46,7 @@ func TestProcessPendingConsolidations(t *testing.T) { Validators: []*eth.Validator{ { WithdrawalCredentials: []byte{0x01, 0xFF}, + EffectiveBalance: params.BeaconConfig().MinActivationBalance, }, { WithdrawalCredentials: []byte{0x01, 0xAB}, @@ -218,7 +219,7 @@ func TestProcessConsolidationRequests(t *testing.T) { } // Validator scenario setup. See comments in reqs section. st.Validators[3].WithdrawalCredentials = bytesutil.Bytes32(0) - st.Validators[8].WithdrawalCredentials = bytesutil.Bytes32(0) + st.Validators[8].WithdrawalCredentials = bytesutil.Bytes32(1) st.Validators[9].ActivationEpoch = params.BeaconConfig().FarFutureEpoch st.Validators[12].ActivationEpoch = params.BeaconConfig().FarFutureEpoch st.Validators[13].ExitEpoch = 10 @@ -246,7 +247,7 @@ func TestProcessConsolidationRequests(t *testing.T) { SourcePubkey: []byte("val_5"), TargetPubkey: []byte("val_6"), }, - // Target does not have their withdrawal credentials set appropriately. + // Target does not have their withdrawal credentials set appropriately. (Using eth1 address prefix) { SourceAddress: append(bytesutil.PadTo(nil, 19), byte(7)), SourcePubkey: []byte("val_7"), diff --git a/beacon-chain/core/helpers/validators.go b/beacon-chain/core/helpers/validators.go index d86180b4e5e0..6c5c1e6a1ea5 100644 --- a/beacon-chain/core/helpers/validators.go +++ b/beacon-chain/core/helpers/validators.go @@ -3,6 +3,7 @@ package helpers import ( "bytes" "context" + "encoding/binary" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" @@ -11,6 +12,7 @@ import ( "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/time" forkchoicetypes "github.com/prysmaticlabs/prysm/v5/beacon-chain/forkchoice/types" "github.com/prysmaticlabs/prysm/v5/beacon-chain/state" + fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams" "github.com/prysmaticlabs/prysm/v5/config/params" "github.com/prysmaticlabs/prysm/v5/consensus-types/interfaces" "github.com/prysmaticlabs/prysm/v5/consensus-types/primitives" @@ -347,27 +349,33 @@ func BeaconProposerIndexAtSlot(ctx context.Context, state state.ReadOnlyBeaconSt // Spec pseudocode definition: // // def compute_proposer_index(state: BeaconState, indices: Sequence[ValidatorIndex], seed: Bytes32) -> ValidatorIndex: -// """ -// Return from ``indices`` a random index sampled by effective balance. -// """ -// assert len(indices) > 0 -// MAX_RANDOM_BYTE = 2**8 - 1 -// i = uint64(0) -// total = uint64(len(indices)) -// while True: -// candidate_index = indices[compute_shuffled_index(i % total, total, seed)] -// random_byte = hash(seed + uint_to_bytes(uint64(i // 32)))[i % 32] -// effective_balance = state.validators[candidate_index].effective_balance -// if effective_balance * MAX_RANDOM_BYTE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_byte: #[Modified in Electra:EIP7251] -// return candidate_index -// i += 1 +// """ +// Return from ``indices`` a random index sampled by effective balance. +// """ +// assert len(indices) > 0 +// MAX_RANDOM_VALUE = 2**16 - 1 # [Modified in Electra] +// i = uint64(0) +// total = uint64(len(indices)) +// while True: +// candidate_index = indices[compute_shuffled_index(i % total, total, seed)] +// # [Modified in Electra] +// random_bytes = hash(seed + uint_to_bytes(i // 16)) +// offset = i % 16 * 2 +// random_value = bytes_to_uint64(random_bytes[offset:offset + 2]) +// effective_balance = state.validators[candidate_index].effective_balance +// # [Modified in Electra:EIP7251] +// if effective_balance * MAX_RANDOM_VALUE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_value: +// return candidate_index +// i += 1 func ComputeProposerIndex(bState state.ReadOnlyBeaconState, activeIndices []primitives.ValidatorIndex, seed [32]byte) (primitives.ValidatorIndex, error) { length := uint64(len(activeIndices)) if length == 0 { return 0, errors.New("empty active indices list") } - maxRandomByte := uint64(1<<8 - 1) hashFunc := hash.CustomSHA256Hasher() + beaconConfig := params.BeaconConfig() + seedBuffer := make([]byte, len(seed)+8) + copy(seedBuffer, seed[:]) for i := uint64(0); ; i++ { candidateIndex, err := ComputeShuffledIndex(primitives.ValidatorIndex(i%length), length, seed, true /* shuffle */) @@ -378,21 +386,28 @@ func ComputeProposerIndex(bState state.ReadOnlyBeaconState, activeIndices []prim if uint64(candidateIndex) >= uint64(bState.NumValidators()) { return 0, errors.New("active index out of range") } - b := append(seed[:], bytesutil.Bytes8(i/32)...) - randomByte := hashFunc(b)[i%32] + v, err := bState.ValidatorAtIndexReadOnly(candidateIndex) if err != nil { return 0, err } effectiveBal := v.EffectiveBalance() - - maxEB := params.BeaconConfig().MaxEffectiveBalance if bState.Version() >= version.Electra { - maxEB = params.BeaconConfig().MaxEffectiveBalanceElectra - } + binary.LittleEndian.PutUint64(seedBuffer[len(seed):], i/16) + randomByte := hashFunc(seedBuffer) + offset := (i % 16) * 2 + randomValue := uint64(randomByte[offset]) | uint64(randomByte[offset+1])<<8 + + if effectiveBal*fieldparams.MaxRandomValueElectra >= beaconConfig.MaxEffectiveBalanceElectra*randomValue { + return candidateIndex, nil + } + } else { + binary.LittleEndian.PutUint64(seedBuffer[len(seed):], i/32) + randomByte := hashFunc(seedBuffer)[i%32] - if effectiveBal*maxRandomByte >= maxEB*uint64(randomByte) { - return candidateIndex, nil + if effectiveBal*fieldparams.MaxRandomByte >= beaconConfig.MaxEffectiveBalance*uint64(randomByte) { + return candidateIndex, nil + } } } } diff --git a/beacon-chain/core/helpers/validators_test.go b/beacon-chain/core/helpers/validators_test.go index 0cae1cb09aae..e1c3dceb27f6 100644 --- a/beacon-chain/core/helpers/validators_test.go +++ b/beacon-chain/core/helpers/validators_test.go @@ -841,7 +841,6 @@ func computeProposerIndexWithValidators(validators []*ethpb.Validator, activeInd if length == 0 { return 0, errors.New("empty active indices list") } - maxRandomByte := uint64(1<<8 - 1) hashFunc := hash.CustomSHA256Hasher() for i := uint64(0); ; i++ { @@ -860,7 +859,7 @@ func computeProposerIndexWithValidators(validators []*ethpb.Validator, activeInd if v != nil { effectiveBal = v.EffectiveBalance } - if effectiveBal*maxRandomByte >= params.BeaconConfig().MaxEffectiveBalance*uint64(randomByte) { + if effectiveBal*fieldparams.MaxRandomByte >= params.BeaconConfig().MaxEffectiveBalance*uint64(randomByte) { return candidateIndex, nil } } diff --git a/beacon-chain/core/validators/validator_test.go b/beacon-chain/core/validators/validator_test.go index 3a3a8b35a25b..3c05b0599e1a 100644 --- a/beacon-chain/core/validators/validator_test.go +++ b/beacon-chain/core/validators/validator_test.go @@ -217,6 +217,7 @@ func TestSlashValidator_OK(t *testing.T) { } func TestSlashValidator_Electra(t *testing.T) { + helpers.ClearCache() validatorCount := 100 registry := make([]*ethpb.Validator, 0, validatorCount) balances := make([]uint64, 0, validatorCount) diff --git a/beacon-chain/rpc/eth/events/BUILD.bazel b/beacon-chain/rpc/eth/events/BUILD.bazel index d2a1e918b025..9bbea34e1c06 100644 --- a/beacon-chain/rpc/eth/events/BUILD.bazel +++ b/beacon-chain/rpc/eth/events/BUILD.bazel @@ -53,6 +53,7 @@ go_test( "//beacon-chain/core/feed/state:go_default_library", "//beacon-chain/state:go_default_library", "//config/fieldparams:go_default_library", + "//config/params:go_default_library", "//consensus-types/blocks:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/payload-attribute:go_default_library", diff --git a/beacon-chain/rpc/eth/events/events_test.go b/beacon-chain/rpc/eth/events/events_test.go index 80f1b0bb3f21..98259a5b1b05 100644 --- a/beacon-chain/rpc/eth/events/events_test.go +++ b/beacon-chain/rpc/eth/events/events_test.go @@ -19,6 +19,7 @@ import ( statefeed "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/feed/state" "github.com/prysmaticlabs/prysm/v5/beacon-chain/state" fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams" + "github.com/prysmaticlabs/prysm/v5/config/params" "github.com/prysmaticlabs/prysm/v5/consensus-types/blocks" "github.com/prysmaticlabs/prysm/v5/consensus-types/interfaces" payloadattribute "github.com/prysmaticlabs/prysm/v5/consensus-types/payload-attribute" @@ -460,7 +461,7 @@ func TestStreamEvents_OperationsEvents(t *testing.T) { defer testSync.cleanup() st := tc.getState() - v := ð.Validator{ExitEpoch: math.MaxUint64} + v := ð.Validator{ExitEpoch: math.MaxUint64, EffectiveBalance: params.BeaconConfig().MinActivationBalance} require.NoError(t, st.SetValidators([]*eth.Validator{v})) currentSlot := primitives.Slot(0) // to avoid slot processing diff --git a/config/fieldparams/mainnet.go b/config/fieldparams/mainnet.go index 6877d789671e..5b04c4bac279 100644 --- a/config/fieldparams/mainnet.go +++ b/config/fieldparams/mainnet.go @@ -4,51 +4,53 @@ package field_params const ( Preset = "mainnet" - BlockRootsLength = 8192 // SLOTS_PER_HISTORICAL_ROOT - StateRootsLength = 8192 // SLOTS_PER_HISTORICAL_ROOT - RandaoMixesLength = 65536 // EPOCHS_PER_HISTORICAL_VECTOR - HistoricalRootsLength = 16777216 // HISTORICAL_ROOTS_LIMIT - ValidatorRegistryLimit = 1099511627776 // VALIDATOR_REGISTRY_LIMIT - Eth1DataVotesLength = 2048 // SLOTS_PER_ETH1_VOTING_PERIOD - PreviousEpochAttestationsLength = 4096 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH - CurrentEpochAttestationsLength = 4096 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH - SlashingsLength = 8192 // EPOCHS_PER_SLASHINGS_VECTOR - SyncCommitteeLength = 512 // SYNC_COMMITTEE_SIZE - RootLength = 32 // RootLength defines the byte length of a Merkle root. - BLSSignatureLength = 96 // BLSSignatureLength defines the byte length of a BLSSignature. - BLSPubkeyLength = 48 // BLSPubkeyLength defines the byte length of a BLSSignature. - MaxTxsPerPayloadLength = 1048576 // MaxTxsPerPayloadLength defines the maximum number of transactions that can be included in a payload. - MaxBytesPerTxLength = 1073741824 // MaxBytesPerTxLength defines the maximum number of bytes that can be included in a transaction. - FeeRecipientLength = 20 // FeeRecipientLength defines the byte length of a fee recipient. - LogsBloomLength = 256 // LogsBloomLength defines the byte length of a logs bloom. - VersionLength = 4 // VersionLength defines the byte length of a fork version number. - SlotsPerEpoch = 32 // SlotsPerEpoch defines the number of slots per epoch. - SyncCommitteeAggregationBytesLength = 16 // SyncCommitteeAggregationBytesLength defines the length of sync committee aggregate bytes. - SyncAggregateSyncCommitteeBytesLength = 64 // SyncAggregateSyncCommitteeBytesLength defines the length of sync committee bytes in a sync aggregate. - MaxWithdrawalsPerPayload = 16 // MaxWithdrawalsPerPayloadLength defines the maximum number of withdrawals that can be included in a payload. - MaxBlobCommitmentsPerBlock = 4096 // MaxBlobCommitmentsPerBlock defines the theoretical limit of blobs can be included in a block. - LogMaxBlobCommitments = 12 // Log_2 of MaxBlobCommitmentsPerBlock - BlobLength = 131072 // BlobLength defines the byte length of a blob. - BlobSize = 131072 // defined to match blob.size in bazel ssz codegen - BlobSidecarSize = 131928 // defined to match blob sidecar size in bazel ssz codegen - KzgCommitmentInclusionProofDepth = 17 // Merkle proof depth for blob_kzg_commitments list item - ExecutionBranchDepth = 4 // ExecutionBranchDepth defines the number of leaves in a merkle proof of the execution payload header. - SyncCommitteeBranchDepth = 5 // SyncCommitteeBranchDepth defines the number of leaves in a merkle proof of a sync committee. - SyncCommitteeBranchDepthElectra = 6 // SyncCommitteeBranchDepthElectra defines the number of leaves in a merkle proof of a sync committee. - FinalityBranchDepth = 6 // FinalityBranchDepth defines the number of leaves in a merkle proof of the finalized checkpoint root. - FinalityBranchDepthElectra = 7 // FinalityBranchDepthElectra defines the number of leaves in a merkle proof of the finalized checkpoint root. - PendingDepositsLimit = 134217728 // Maximum number of pending balance deposits in the beacon state. - PendingPartialWithdrawalsLimit = 134217728 // Maximum number of pending partial withdrawals in the beacon state. - PendingConsolidationsLimit = 262144 // Maximum number of pending consolidations in the beacon state. - MaxDepositRequestsPerPayload = 8192 // Maximum number of deposit requests in an execution payload. - MaxWithdrawalRequestsPerPayload = 16 // Maximum number of execution layer withdrawal requests in an execution payload. - MaxConsolidationRequestsPerPayload = 1 // Maximum number of consolidation requests in an execution payload. - MaxProposerSlashings = 16 // Maximum number of proposer slashings in a block. - MaxAttesterSlashings = 2 // Maximum number of attester slashings in a block. - MaxAttesterSlashingsElectra = 1 // Maximum number of attester slashings in a block. - MaxAttestations = 128 // Maximum number of attestations in a block. - MaxAttestationsElectra = 8 // Maximum number of attestations in a block. - MaxDeposits = 16 // Maximum number of deposits in a block. - MaxVoluntaryExits = 16 // Maximum number of voluntary exits in a block. - MaxBlsToExecutionChanges = 16 // Maximum number of bls to execution changes in a block. + BlockRootsLength = 8192 // SLOTS_PER_HISTORICAL_ROOT + StateRootsLength = 8192 // SLOTS_PER_HISTORICAL_ROOT + RandaoMixesLength = 65536 // EPOCHS_PER_HISTORICAL_VECTOR + HistoricalRootsLength = 16777216 // HISTORICAL_ROOTS_LIMIT + ValidatorRegistryLimit = 1099511627776 // VALIDATOR_REGISTRY_LIMIT + Eth1DataVotesLength = 2048 // SLOTS_PER_ETH1_VOTING_PERIOD + PreviousEpochAttestationsLength = 4096 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH + CurrentEpochAttestationsLength = 4096 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH + SlashingsLength = 8192 // EPOCHS_PER_SLASHINGS_VECTOR + SyncCommitteeLength = 512 // SYNC_COMMITTEE_SIZE + RootLength = 32 // RootLength defines the byte length of a Merkle root. + BLSSignatureLength = 96 // BLSSignatureLength defines the byte length of a BLSSignature. + BLSPubkeyLength = 48 // BLSPubkeyLength defines the byte length of a BLSSignature. + MaxTxsPerPayloadLength = 1048576 // MaxTxsPerPayloadLength defines the maximum number of transactions that can be included in a payload. + MaxBytesPerTxLength = 1073741824 // MaxBytesPerTxLength defines the maximum number of bytes that can be included in a transaction. + FeeRecipientLength = 20 // FeeRecipientLength defines the byte length of a fee recipient. + LogsBloomLength = 256 // LogsBloomLength defines the byte length of a logs bloom. + VersionLength = 4 // VersionLength defines the byte length of a fork version number. + SlotsPerEpoch = 32 // SlotsPerEpoch defines the number of slots per epoch. + SyncCommitteeAggregationBytesLength = 16 // SyncCommitteeAggregationBytesLength defines the length of sync committee aggregate bytes. + SyncAggregateSyncCommitteeBytesLength = 64 // SyncAggregateSyncCommitteeBytesLength defines the length of sync committee bytes in a sync aggregate. + MaxWithdrawalsPerPayload = 16 // MaxWithdrawalsPerPayloadLength defines the maximum number of withdrawals that can be included in a payload. + MaxBlobCommitmentsPerBlock = 4096 // MaxBlobCommitmentsPerBlock defines the theoretical limit of blobs can be included in a block. + LogMaxBlobCommitments = 12 // Log_2 of MaxBlobCommitmentsPerBlock + BlobLength = 131072 // BlobLength defines the byte length of a blob. + BlobSize = 131072 // defined to match blob.size in bazel ssz codegen + BlobSidecarSize = 131928 // defined to match blob sidecar size in bazel ssz codegen + KzgCommitmentInclusionProofDepth = 17 // Merkle proof depth for blob_kzg_commitments list item + ExecutionBranchDepth = 4 // ExecutionBranchDepth defines the number of leaves in a merkle proof of the execution payload header. + SyncCommitteeBranchDepth = 5 // SyncCommitteeBranchDepth defines the number of leaves in a merkle proof of a sync committee. + SyncCommitteeBranchDepthElectra = 6 // SyncCommitteeBranchDepthElectra defines the number of leaves in a merkle proof of a sync committee. + FinalityBranchDepth = 6 // FinalityBranchDepth defines the number of leaves in a merkle proof of the finalized checkpoint root. + FinalityBranchDepthElectra = 7 // FinalityBranchDepthElectra defines the number of leaves in a merkle proof of the finalized checkpoint root. + PendingDepositsLimit = 134217728 // Maximum number of pending balance deposits in the beacon state. + PendingPartialWithdrawalsLimit = 134217728 // Maximum number of pending partial withdrawals in the beacon state. + PendingConsolidationsLimit = 262144 // Maximum number of pending consolidations in the beacon state. + MaxDepositRequestsPerPayload = 8192 // Maximum number of deposit requests in an execution payload. + MaxWithdrawalRequestsPerPayload = 16 // Maximum number of execution layer withdrawal requests in an execution payload. + MaxConsolidationRequestsPerPayload = 1 // Maximum number of consolidation requests in an execution payload. + MaxProposerSlashings = 16 // Maximum number of proposer slashings in a block. + MaxAttesterSlashings = 2 // Maximum number of attester slashings in a block. + MaxAttesterSlashingsElectra = 1 // Maximum number of attester slashings in a block. + MaxAttestations = 128 // Maximum number of attestations in a block. + MaxAttestationsElectra = 8 // Maximum number of attestations in a block. + MaxDeposits = 16 // Maximum number of deposits in a block. + MaxVoluntaryExits = 16 // Maximum number of voluntary exits in a block. + MaxBlsToExecutionChanges = 16 // Maximum number of bls to execution changes in a block. + MaxRandomByte = uint64(1<<8 - 1) // MaxRandomByte defines max for a random byte using for proposer and sync committee sampling. + MaxRandomValueElectra = uint64(1<<16 - 1) // MaxRandomValueElectra defines max for a random value using for proposer and sync committee sampling. ) diff --git a/config/fieldparams/minimal.go b/config/fieldparams/minimal.go index e308834e8459..8f8f650a7349 100644 --- a/config/fieldparams/minimal.go +++ b/config/fieldparams/minimal.go @@ -4,51 +4,53 @@ package field_params const ( Preset = "minimal" - BlockRootsLength = 64 // SLOTS_PER_HISTORICAL_ROOT - StateRootsLength = 64 // SLOTS_PER_HISTORICAL_ROOT - RandaoMixesLength = 64 // EPOCHS_PER_HISTORICAL_VECTOR - HistoricalRootsLength = 16777216 // HISTORICAL_ROOTS_LIMIT - ValidatorRegistryLimit = 1099511627776 // VALIDATOR_REGISTRY_LIMIT - Eth1DataVotesLength = 32 // SLOTS_PER_ETH1_VOTING_PERIOD - PreviousEpochAttestationsLength = 1024 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH - CurrentEpochAttestationsLength = 1024 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH - SlashingsLength = 64 // EPOCHS_PER_SLASHINGS_VECTOR - SyncCommitteeLength = 32 // SYNC_COMMITTEE_SIZE - RootLength = 32 // RootLength defines the byte length of a Merkle root. - BLSSignatureLength = 96 // BLSSignatureLength defines the byte length of a BLSSignature. - BLSPubkeyLength = 48 // BLSPubkeyLength defines the byte length of a BLSSignature. - MaxTxsPerPayloadLength = 1048576 // MaxTxsPerPayloadLength defines the maximum number of transactions that can be included in a payload. - MaxBytesPerTxLength = 1073741824 // MaxBytesPerTxLength defines the maximum number of bytes that can be included in a transaction. - FeeRecipientLength = 20 // FeeRecipientLength defines the byte length of a fee recipient. - LogsBloomLength = 256 // LogsBloomLength defines the byte length of a logs bloom. - VersionLength = 4 // VersionLength defines the byte length of a fork version number. - SlotsPerEpoch = 8 // SlotsPerEpoch defines the number of slots per epoch. - SyncCommitteeAggregationBytesLength = 1 // SyncCommitteeAggregationBytesLength defines the sync committee aggregate bytes. - SyncAggregateSyncCommitteeBytesLength = 4 // SyncAggregateSyncCommitteeBytesLength defines the length of sync committee bytes in a sync aggregate. - MaxWithdrawalsPerPayload = 4 // MaxWithdrawalsPerPayloadLength defines the maximum number of withdrawals that can be included in a payload. - MaxBlobCommitmentsPerBlock = 16 // MaxBlobCommitmentsPerBlock defines the theoretical limit of blobs can be included in a block. - LogMaxBlobCommitments = 4 // Log_2 of MaxBlobCommitmentsPerBlock - BlobLength = 131072 // BlobLength defines the byte length of a blob. - BlobSize = 131072 // defined to match blob.size in bazel ssz codegen - BlobSidecarSize = 131928 // defined to match blob sidecar size in bazel ssz codegen - KzgCommitmentInclusionProofDepth = 17 // Merkle proof depth for blob_kzg_commitments list item - ExecutionBranchDepth = 4 // ExecutionBranchDepth defines the number of leaves in a merkle proof of the execution payload header. - SyncCommitteeBranchDepth = 5 // SyncCommitteeBranchDepth defines the number of leaves in a merkle proof of a sync committee. - SyncCommitteeBranchDepthElectra = 6 // SyncCommitteeBranchDepthElectra defines the number of leaves in a merkle proof of a sync committee. - FinalityBranchDepth = 6 // FinalityBranchDepth defines the number of leaves in a merkle proof of the finalized checkpoint root. - FinalityBranchDepthElectra = 7 // FinalityBranchDepthElectra defines the number of leaves in a merkle proof of the finalized checkpoint root. - PendingDepositsLimit = 134217728 // Maximum number of pending balance deposits in the beacon state. - PendingPartialWithdrawalsLimit = 64 // Maximum number of pending partial withdrawals in the beacon state. - PendingConsolidationsLimit = 64 // Maximum number of pending consolidations in the beacon state. - MaxDepositRequestsPerPayload = 4 // Maximum number of deposit requests in an execution payload. - MaxWithdrawalRequestsPerPayload = 2 // Maximum number of execution layer withdrawal requests in an execution payload. - MaxConsolidationRequestsPerPayload = 1 // Maximum number of consolidation requests in an execution payload. - MaxProposerSlashings = 16 // Maximum number of proposer slashings in a block. - MaxAttesterSlashings = 2 // Maximum number of attester slashings in a block. - MaxAttesterSlashingsElectra = 1 // Maximum number of attester slashings in a block. - MaxAttestations = 128 // Maximum number of attestations in a block. - MaxAttestationsElectra = 8 // Maximum number of attestations in a block. - MaxDeposits = 16 // Maximum number of deposits in a block. - MaxVoluntaryExits = 16 // Maximum number of voluntary exits in a block. - MaxBlsToExecutionChanges = 16 // Maximum number of bls to execution changes in a block. + BlockRootsLength = 64 // SLOTS_PER_HISTORICAL_ROOT + StateRootsLength = 64 // SLOTS_PER_HISTORICAL_ROOT + RandaoMixesLength = 64 // EPOCHS_PER_HISTORICAL_VECTOR + HistoricalRootsLength = 16777216 // HISTORICAL_ROOTS_LIMIT + ValidatorRegistryLimit = 1099511627776 // VALIDATOR_REGISTRY_LIMIT + Eth1DataVotesLength = 32 // SLOTS_PER_ETH1_VOTING_PERIOD + PreviousEpochAttestationsLength = 1024 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH + CurrentEpochAttestationsLength = 1024 // MAX_ATTESTATIONS * SLOTS_PER_EPOCH + SlashingsLength = 64 // EPOCHS_PER_SLASHINGS_VECTOR + SyncCommitteeLength = 32 // SYNC_COMMITTEE_SIZE + RootLength = 32 // RootLength defines the byte length of a Merkle root. + BLSSignatureLength = 96 // BLSSignatureLength defines the byte length of a BLSSignature. + BLSPubkeyLength = 48 // BLSPubkeyLength defines the byte length of a BLSSignature. + MaxTxsPerPayloadLength = 1048576 // MaxTxsPerPayloadLength defines the maximum number of transactions that can be included in a payload. + MaxBytesPerTxLength = 1073741824 // MaxBytesPerTxLength defines the maximum number of bytes that can be included in a transaction. + FeeRecipientLength = 20 // FeeRecipientLength defines the byte length of a fee recipient. + LogsBloomLength = 256 // LogsBloomLength defines the byte length of a logs bloom. + VersionLength = 4 // VersionLength defines the byte length of a fork version number. + SlotsPerEpoch = 8 // SlotsPerEpoch defines the number of slots per epoch. + SyncCommitteeAggregationBytesLength = 1 // SyncCommitteeAggregationBytesLength defines the sync committee aggregate bytes. + SyncAggregateSyncCommitteeBytesLength = 4 // SyncAggregateSyncCommitteeBytesLength defines the length of sync committee bytes in a sync aggregate. + MaxWithdrawalsPerPayload = 4 // MaxWithdrawalsPerPayloadLength defines the maximum number of withdrawals that can be included in a payload. + MaxBlobCommitmentsPerBlock = 32 // MaxBlobCommitmentsPerBlock defines the theoretical limit of blobs can be included in a block. + LogMaxBlobCommitments = 5 // Log_2 of MaxBlobCommitmentsPerBlock + BlobLength = 131072 // BlobLength defines the byte length of a blob. + BlobSize = 131072 // defined to match blob.size in bazel ssz codegen + BlobSidecarSize = 131928 // defined to match blob sidecar size in bazel ssz codegen + KzgCommitmentInclusionProofDepth = 17 // Merkle proof depth for blob_kzg_commitments list item + ExecutionBranchDepth = 4 // ExecutionBranchDepth defines the number of leaves in a merkle proof of the execution payload header. + SyncCommitteeBranchDepth = 5 // SyncCommitteeBranchDepth defines the number of leaves in a merkle proof of a sync committee. + SyncCommitteeBranchDepthElectra = 6 // SyncCommitteeBranchDepthElectra defines the number of leaves in a merkle proof of a sync committee. + FinalityBranchDepth = 6 // FinalityBranchDepth defines the number of leaves in a merkle proof of the finalized checkpoint root. + FinalityBranchDepthElectra = 7 // FinalityBranchDepthElectra defines the number of leaves in a merkle proof of the finalized checkpoint root. + PendingDepositsLimit = 134217728 // Maximum number of pending balance deposits in the beacon state. + PendingPartialWithdrawalsLimit = 64 // Maximum number of pending partial withdrawals in the beacon state. + PendingConsolidationsLimit = 64 // Maximum number of pending consolidations in the beacon state. + MaxDepositRequestsPerPayload = 4 // Maximum number of deposit requests in an execution payload. + MaxWithdrawalRequestsPerPayload = 2 // Maximum number of execution layer withdrawal requests in an execution payload. + MaxConsolidationRequestsPerPayload = 1 // Maximum number of consolidation requests in an execution payload. + MaxProposerSlashings = 16 // Maximum number of proposer slashings in a block. + MaxAttesterSlashings = 2 // Maximum number of attester slashings in a block. + MaxAttesterSlashingsElectra = 1 // Maximum number of attester slashings in a block. + MaxAttestations = 128 // Maximum number of attestations in a block. + MaxAttestationsElectra = 8 // Maximum number of attestations in a block. + MaxDeposits = 16 // Maximum number of deposits in a block. + MaxVoluntaryExits = 16 // Maximum number of voluntary exits in a block. + MaxBlsToExecutionChanges = 16 // Maximum number of bls to execution changes in a block. + MaxRandomByte = uint64(1<<8 - 1) // Maximum value for a random value using for proposer and sync committee sampling. + MaxRandomValueElectra = uint64(1<<16 - 1) // Maximum value for a random value using for proposer and sync committee sampling. ) diff --git a/config/params/loader_test.go b/config/params/loader_test.go index 0fc161bf6d45..c6639d31f3e0 100644 --- a/config/params/loader_test.go +++ b/config/params/loader_test.go @@ -25,6 +25,7 @@ import ( // IMPORTANT: Use one field per line and sort these alphabetically to reduce conflicts. var placeholderFields = []string{ "BLOB_SIDECAR_SUBNET_COUNT_EIP7594", + "BLOB_SIDECAR_SUBNET_COUNT_ELECTRA", "BYTES_PER_LOGS_BLOOM", // Compile time constant on ExecutionPayload.logs_bloom. "EIP6110_FORK_EPOCH", "EIP6110_FORK_VERSION", @@ -33,15 +34,21 @@ var placeholderFields = []string{ "EIP7594_FORK_VERSION", "EIP7732_FORK_EPOCH", "EIP7732_FORK_VERSION", - "FIELD_ELEMENTS_PER_BLOB", // Compile time constant. + "FIELD_ELEMENTS_PER_BLOB", // Compile time constant. + "FULU_FORK_EPOCH", + "FULU_FORK_VERSION", "KZG_COMMITMENT_INCLUSION_PROOF_DEPTH", // Compile time constant on BlobSidecar.commitment_inclusion_proof. "MAX_BLOBS_PER_BLOCK_EIP7594", + "MAX_BLOBS_PER_BLOCK_FULU", "MAX_BLOB_COMMITMENTS_PER_BLOCK", // Compile time constant on BeaconBlockBodyDeneb.blob_kzg_commitments. "MAX_BYTES_PER_TRANSACTION", // Used for ssz of EL transactions. Unused in Prysm. "MAX_EXTRA_DATA_BYTES", // Compile time constant on ExecutionPayload.extra_data. "MAX_REQUEST_BLOB_SIDECARS_EIP7594", + "MAX_REQUEST_BLOB_SIDECARS_ELECTRA", + "MAX_REQUEST_BLOB_SIDECARS_FULU", "MAX_REQUEST_PAYLOADS", // Compile time constant on BeaconBlockBody.ExecutionRequests "MAX_TRANSACTIONS_PER_PAYLOAD", // Compile time constant on ExecutionPayload.transactions. + "NUMBER_OF_CUSTODY_GROUPS", "REORG_HEAD_WEIGHT_THRESHOLD", "TARGET_NUMBER_OF_PEERS", "UPDATE_TIMEOUT", diff --git a/config/params/mainnet_config.go b/config/params/mainnet_config.go index 5b48204a0816..d2afff414953 100644 --- a/config/params/mainnet_config.go +++ b/config/params/mainnet_config.go @@ -287,7 +287,7 @@ var mainnetBeaconConfig = &BeaconChainConfig{ PendingPartialWithdrawalsLimit: 134_217_728, PendingConsolidationsLimit: 262_144, MinActivationBalance: 32_000_000_000, - MaxConsolidationsRequestsPerPayload: 1, + MaxConsolidationsRequestsPerPayload: 2, MaxPendingPartialsPerWithdrawalsSweep: 8, MaxPendingDepositsPerEpoch: 16, FullExitRequestAmount: 0, diff --git a/proto/engine/v1/electra.pb.go b/proto/engine/v1/electra.pb.go index aa0e0809d7a1..706aa466e082 100755 --- a/proto/engine/v1/electra.pb.go +++ b/proto/engine/v1/electra.pb.go @@ -234,7 +234,7 @@ type ExecutionRequests struct { Deposits []*DepositRequest `protobuf:"bytes,1,rep,name=deposits,proto3" json:"deposits,omitempty" ssz-max:"8192"` Withdrawals []*WithdrawalRequest `protobuf:"bytes,2,rep,name=withdrawals,proto3" json:"withdrawals,omitempty" ssz-max:"16"` - Consolidations []*ConsolidationRequest `protobuf:"bytes,3,rep,name=consolidations,proto3" json:"consolidations,omitempty" ssz-max:"1"` + Consolidations []*ConsolidationRequest `protobuf:"bytes,3,rep,name=consolidations,proto3" json:"consolidations,omitempty" ssz-max:"2"` } func (x *ExecutionRequests) Reset() { @@ -426,7 +426,7 @@ var file_proto_engine_v1_electra_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x42, 0x05, 0x92, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x74, 0x42, 0x05, 0x92, 0xb5, 0x18, 0x01, 0x32, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9e, 0x02, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, diff --git a/proto/engine/v1/engine.ssz.go b/proto/engine/v1/engine.ssz.go index 010bcef6856f..ccf0212506d3 100644 --- a/proto/engine/v1/engine.ssz.go +++ b/proto/engine/v1/engine.ssz.go @@ -1,5 +1,5 @@ // Code generated by fastssz. DO NOT EDIT. -// Hash: 8a6de344d09e1816df88ecbd15d95382cdc9872ebae99c397396da1ed2c83688 +// Hash: dfb7f78543ce7294636fd17455b09e2220fe944af918e21f7d89189d590738d7 package enginev1 import ( @@ -365,8 +365,8 @@ func (e *ExecutionRequests) MarshalSSZTo(buf []byte) (dst []byte, err error) { } // Field (2) 'Consolidations' - if size := len(e.Consolidations); size > 1 { - err = ssz.ErrListTooBigFn("--.Consolidations", size, 1) + if size := len(e.Consolidations); size > 2 { + err = ssz.ErrListTooBigFn("--.Consolidations", size, 2) return } for ii := 0; ii < len(e.Consolidations); ii++ { @@ -447,7 +447,7 @@ func (e *ExecutionRequests) UnmarshalSSZ(buf []byte) error { // Field (2) 'Consolidations' { buf = tail[o2:] - num, err := ssz.DivideInt2(len(buf), 116, 1) + num, err := ssz.DivideInt2(len(buf), 116, 2) if err != nil { return err } @@ -525,7 +525,7 @@ func (e *ExecutionRequests) HashTreeRootWith(hh *ssz.Hasher) (err error) { { subIndx := hh.Index() num := uint64(len(e.Consolidations)) - if num > 1 { + if num > 2 { err = ssz.ErrIncorrectListSize return } @@ -534,7 +534,7 @@ func (e *ExecutionRequests) HashTreeRootWith(hh *ssz.Hasher) (err error) { return } } - hh.MerkleizeWithMixin(subIndx, num, 1) + hh.MerkleizeWithMixin(subIndx, num, 2) } hh.Merkleize(indx) diff --git a/proto/ssz_proto_library.bzl b/proto/ssz_proto_library.bzl index 0fcb9197100a..ba845c6caeb4 100644 --- a/proto/ssz_proto_library.bzl +++ b/proto/ssz_proto_library.bzl @@ -35,7 +35,7 @@ mainnet = { "pending_deposits_limit": "134217728", "pending_partial_withdrawals_limit": "134217728", "pending_consolidations_limit": "262144", - "max_consolidation_requests_per_payload.size": "1", + "max_consolidation_requests_per_payload.size": "2", "field_elements_per_cell.size": "64", "field_elements_per_ext_blob.size": "8192", "bytes_per_cell.size": "2048", # FIELD_ELEMENTS_PER_CELL * BYTES_PER_FIELD_ELEMENT @@ -61,8 +61,8 @@ minimal = { "logs_bloom.size": "256", "extra_data.size": "32", "max_blobs_per_block.size": "6", - "max_blob_commitments.size": "16", - "kzg_commitment_inclusion_proof_depth.size": "9", + "max_blob_commitments.size": "32", + "kzg_commitment_inclusion_proof_depth.size": "10", "max_withdrawal_requests_per_payload.size":"2", "max_deposit_requests_per_payload.size": "4", "max_attesting_indices.size": "8192", @@ -72,7 +72,7 @@ minimal = { "pending_deposits_limit": "134217728", "pending_partial_withdrawals_limit": "64", "pending_consolidations_limit": "64", - "max_consolidation_requests_per_payload.size": "1", + "max_consolidation_requests_per_payload.size": "2", "field_elements_per_cell.size": "64", "field_elements_per_ext_blob.size": "8192", "bytes_per_cell.size": "2048", # FIELD_ELEMENTS_PER_CELL * BYTES_PER_FIELD_ELEMENT diff --git a/testing/spectest/shared/electra/sanity/BUILD.bazel b/testing/spectest/shared/electra/sanity/BUILD.bazel index f284008577af..59bfab587672 100644 --- a/testing/spectest/shared/electra/sanity/BUILD.bazel +++ b/testing/spectest/shared/electra/sanity/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//beacon-chain/core/transition:go_default_library", "//beacon-chain/state:go_default_library", "//beacon-chain/state/state-native:go_default_library", + "//config/params:go_default_library", "//consensus-types/blocks:go_default_library", "//proto/prysm/v1alpha1:go_default_library", "//testing/require:go_default_library", diff --git a/testing/spectest/shared/electra/sanity/block_processing.go b/testing/spectest/shared/electra/sanity/block_processing.go index d7fb00c6213a..ab37ce3360a0 100644 --- a/testing/spectest/shared/electra/sanity/block_processing.go +++ b/testing/spectest/shared/electra/sanity/block_processing.go @@ -15,6 +15,7 @@ import ( "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/transition" "github.com/prysmaticlabs/prysm/v5/beacon-chain/state" state_native "github.com/prysmaticlabs/prysm/v5/beacon-chain/state/state-native" + "github.com/prysmaticlabs/prysm/v5/config/params" "github.com/prysmaticlabs/prysm/v5/consensus-types/blocks" ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v5/testing/require" @@ -35,6 +36,11 @@ func RunBlockProcessingTest(t *testing.T, config, folderPath string) { testFolders, testsFolderPath := utils.TestFolders(t, config, "electra", folderPath) for _, folder := range testFolders { t.Run(folder.Name(), func(t *testing.T) { + params.SetupTestConfigCleanup(t) + cfg := params.BeaconConfig().Copy() + cfg.ElectraForkEpoch = 0 + params.OverrideBeaconConfig(cfg) + helpers.ClearCache() preBeaconStateFile, err := util.BazelFileBytes(testsFolderPath, folder.Name(), "pre.ssz_snappy") require.NoError(t, err)