You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SIP-94 (§5) deprecates the ValidatorRegistration duty at the Gloas fork and replaces it with ProposerPreferences, which carries a TargetGasLimit field (#632 constants, #633 implementation). The ProposerPreferencesrunner is not implemented in ssv-spec yet (only the types/gloas type has landed in #633), so nothing populates TargetGasLimit on the spec side today.
Problem
The default gas-limit values are stale and fragmented:
types.DefaultGasLimit = 30_000_000 (types/beacon_types.go:37) is two generations behind mainnet: the network gas limit has been 60M since 2025-11-25 (30M → 45M → 60M). It is the default for the RoleValidatorRegistration runner (types/testingutils/runner.go), the duty SIP-94 deprecates at Gloas.
The node (ePBS (EIP-7732 / Gloas) — SIP-94 ssv#2901) already implements the runner: it defaults TargetGasLimit to operator config (opts.GasLimit) with a fallback to a node-side DefaultGasLimit = 36_000_000 (protocol/v2/ssv/runner/validator_registration.go:35, reused at proposer_preferences.go:379). That is a separate constant from the spec's 30M, so spec and node disagree, and 36M is itself stale vs 60M.
Decide the fate of types.DefaultGasLimit: bump to 60M so the spec tracks mainnet and both runners share one current value, or leave it frozen as the pre-Gloas ValidatorRegistration default. A bump changes ValidatorRegistration signing roots, so it requires regenerating the spec-test JSON fixtures.
Reconcile the value with the node's 36M so spec and node agree on the default a cluster applies when an operator does not override.
Context
SIP-94 (§5) deprecates the
ValidatorRegistrationduty at the Gloas fork and replaces it withProposerPreferences, which carries aTargetGasLimitfield (#632 constants, #633 implementation). TheProposerPreferencesrunner is not implemented in ssv-spec yet (only thetypes/gloastype has landed in #633), so nothing populatesTargetGasLimiton the spec side today.Problem
The default gas-limit values are stale and fragmented:
types.DefaultGasLimit = 30_000_000(types/beacon_types.go:37) is two generations behind mainnet: the network gas limit has been 60M since 2025-11-25 (30M → 45M → 60M). It is the default for theRoleValidatorRegistrationrunner (types/testingutils/runner.go), the duty SIP-94 deprecates at Gloas.ProposerPreferencesrunner lands it needs aTargetGasLimitdefault for the operator-unset case, and there is no spec constant sized for current mainnet.TargetGasLimitto operator config (opts.GasLimit) with a fallback to a node-sideDefaultGasLimit = 36_000_000(protocol/v2/ssv/runner/validator_registration.go:35, reused atproposer_preferences.go:379). That is a separate constant from the spec's 30M, so spec and node disagree, and 36M is itself stale vs 60M.Ask
ProposerPreferencestarget_gas_limitdefault (operator-unset case) to 60M when the types: ePBS (Gloas / SIP-94) reference implementation — WIP #633 runner lands, sourced from a spec constant.types.DefaultGasLimit: bump to 60M so the spec tracks mainnet and both runners share one current value, or leave it frozen as the pre-GloasValidatorRegistrationdefault. A bump changesValidatorRegistrationsigning roots, so it requires regenerating the spec-test JSON fixtures.Refs