Skip to content

Gloas/SIP-94: pick a current default for ProposerPreferences target_gas_limit; DefaultGasLimit (30M) is stale and diverges from the node (36M) #634

Description

@shane-moore

Context

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 ProposerPreferences runner 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.
  • When the types: ePBS (Gloas / SIP-94) reference implementation — WIP #633 ProposerPreferences runner lands it needs a TargetGasLimit default for the operator-unset case, and there is no spec constant sized for current mainnet.
  • 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.

Ask

  1. Set the ProposerPreferences target_gas_limit default (operator-unset case) to 60M when the types: ePBS (Gloas / SIP-94) reference implementation — WIP #633 runner lands, sourced from a spec constant.
  2. 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.
  3. 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.

Refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions