Posting at the pre-draft stage to test whether this idea has merit before considering whether to develop a full EIP draft.
Background. Since EIP-4788, EVM contracts can verify dynamic BeaconState fields via SSZ proofs against the beacon block root. They cannot verify the protocol presets themselves (MIN_SLASHING_PENALTY_QUOTIENT, BASE_REWARD_FACTOR, EPOCHS_PER_SLASHINGS_VECTOR, and so on) because those values exist only in CL client source code, not in any state field. Any contract that needs them today either hardcodes them or maintains a fork-keyed table updated by governance (EigenLayer’s BeaconChainProofs is the canonical example). Both options reintroduce a trusted party. Removing it requires redeploying the contract at every fork that touches a referenced value, which fragments liquidity and breaks integrations. For protocols holding staked collateral this is not a viable path.
My question. Has there been discussion of adding a small commitment to BeaconState so that contracts could verify presets the same way they verify any other state field? Something like:
class BeaconState(Container):
# ... existing fields ...
preset_root: Root # hash_tree_root of the active Preset container
In consensus-specs terminology, “preset” refers to the layer of penalty/reward/churn parameters, as distinct from per-network config values. The field would be updated atomically at fork transitions inside process_fork and appended at the end of BeaconState to preserve existing generalized indices.
CL-only change. No execution-layer changes are required. Contracts verify preset_root against the beacon block root exposed by EIP-4788 using the same SSZ proof pattern used for any other BeaconState field.
The motivation. I ran into this trying to build a trustless dapp that needs to subtract a validator’s maximum possible penalty over a given time window from their effective balance. Without access to the relevant presets, there is no way to compute that bound on-chain without hardcoding the parameters or introducing governance, both of which break the trustlessness of the dapp. An on-chain light client that needs SYNC_COMMITTEE_SIZE to verify sync aggregates has the same trust surface.
EIP-8198 (Quick Slots), currently drafted, is a recent example: a single slot-duration change rescales BASE_REWARD_FACTOR, INACTIVITY_PENALTY_QUOTIENT_BELLATRIX, and several other presets. Every contract that hardcodes any of these values must be redeployed.
More broadly, Ethereum’s most defensible advantage is that staked capital can be used as trust-minimized collateral for slashing insurance, lending against validator yield, issuance of treasury-like products, and similar applications. No other chain can offer this natively, because no other chain has both a large native staked base and the EVM-level expressiveness to build against it. Closing this specific gap removes a trust surface from validator-collateral applications specifically, and is the kind of small, well-scoped change that unlocks application-layer progress without requiring further protocol-layer redesign.
I’d like to know whether this has been proposed before, and if not, whether there is a reason experienced CL researchers would consider it disqualifying.