Skip to main content

CSVerifier

CSVerifier.sol is a utility contract responsible for validating the CL data proofs using EIP-4788. It accepts proof of the validator withdrawals and reports these facts to the CSModule.sol if the proof is valid.

Changes in v2:

  • The slashing reporting method is removed;
  • Pause methods added;
  • Historical proof processing improved;

Upgradability

The contract is immutable.

State Variables

PAUSE_ROLE

bytes32 public constant PAUSE_ROLE = keccak256("PAUSE_ROLE");

RESUME_ROLE

bytes32 public constant RESUME_ROLE = keccak256("RESUME_ROLE");

BEACON_ROOTS

address public constant BEACON_ROOTS = 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02;

SLOTS_PER_EPOCH

uint64 public immutable SLOTS_PER_EPOCH;

SLOTS_PER_HISTORICAL_ROOT

Count of historical roots per accumulator.

See https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#time-parameters

uint64 public immutable SLOTS_PER_HISTORICAL_ROOT;

GI_FIRST_WITHDRAWAL_PREV

This index is relative to a state like: BeaconState.latest_execution_payload_header.withdrawals[0].

GIndex public immutable GI_FIRST_WITHDRAWAL_PREV;

GI_FIRST_WITHDRAWAL_CURR

This index is relative to a state like: BeaconState.latest_execution_payload_header.withdrawals[0].

GIndex public immutable GI_FIRST_WITHDRAWAL_CURR;

GI_FIRST_VALIDATOR_PREV

This index is relative to a state like: BeaconState.validators[0].

GIndex public immutable GI_FIRST_VALIDATOR_PREV;

GI_FIRST_VALIDATOR_CURR

This index is relative to a state like: BeaconState.validators[0].

GIndex public immutable GI_FIRST_VALIDATOR_CURR;

GI_FIRST_HISTORICAL_SUMMARY_PREV

This index is relative to a state like: BeaconState.historical_summaries[0].

GIndex public immutable GI_FIRST_HISTORICAL_SUMMARY_PREV;

GI_FIRST_HISTORICAL_SUMMARY_CURR

This index is relative to a state like: BeaconState.historical_summaries[0].

GIndex public immutable GI_FIRST_HISTORICAL_SUMMARY_CURR;

GI_FIRST_BLOCK_ROOT_IN_SUMMARY_PREV

This index is relative to HistoricalSummary like: HistoricalSummary.blockRoots[0].

GIndex public immutable GI_FIRST_BLOCK_ROOT_IN_SUMMARY_PREV;

GI_FIRST_BLOCK_ROOT_IN_SUMMARY_CURR

This index is relative to HistoricalSummary like: HistoricalSummary.blockRoots[0].

GIndex public immutable GI_FIRST_BLOCK_ROOT_IN_SUMMARY_CURR;

FIRST_SUPPORTED_SLOT

The very first slot the verifier is supposed to accept proofs for.

Slot public immutable FIRST_SUPPORTED_SLOT;

PIVOT_SLOT

The first slot of the currently compatible fork.

Slot public immutable PIVOT_SLOT;

CAPELLA_SLOT

Historical summaries started accumulating from the slot of Capella fork.

Slot public immutable CAPELLA_SLOT;

WITHDRAWAL_ADDRESS

An address withdrawals are supposed to happen to (Lido withdrawal credentials).

address public immutable WITHDRAWAL_ADDRESS;

MODULE

Staking module contract

ICSModule public immutable MODULE;

Functions

constructor

The previous and current forks can be essentially the same.

constructor(
address withdrawalAddress,
address module,
uint64 slotsPerEpoch,
GIndices memory gindices,
Slot firstSupportedSlot,
Slot pivotSlot,
address admin
);

resume

Resume write methods calls

function resume() external onlyRole(RESUME_ROLE);

pauseFor

Pause write methods calls for duration seconds

function pauseFor(uint256 duration) external onlyRole(PAUSE_ROLE);

Parameters

NameTypeDescription
durationuint256Duration of the pause in seconds

processWithdrawalProof

Verify withdrawal proof and report withdrawal to the module for valid proofs

function processWithdrawalProof(
ProvableBeaconBlockHeader calldata beaconBlock,
WithdrawalWitness calldata witness,
uint256 nodeOperatorId,
uint256 keyIndex
) external whenResumed;

Parameters

NameTypeDescription
beaconBlockProvableBeaconBlockHeaderBeacon block header
witnessWithdrawalWitnessWithdrawal witness against the beaconBlock's state root.
nodeOperatorIduint256ID of the Node Operator
keyIndexuint256Index of the validator key in the Node Operator's key storage

processHistoricalWithdrawalProof

Verify withdrawal proof against historical summaries data and report withdrawal to the module for valid proofs

function processHistoricalWithdrawalProof(
ProvableBeaconBlockHeader calldata beaconBlock,
HistoricalHeaderWitness calldata oldBlock,
WithdrawalWitness calldata witness,
uint256 nodeOperatorId,
uint256 keyIndex
) external whenResumed;

Parameters

NameTypeDescription
beaconBlockProvableBeaconBlockHeaderBeacon block header
oldBlockHistoricalHeaderWitnessHistorical block header witness
witnessWithdrawalWitnessWithdrawal witness
nodeOperatorIduint256ID of the Node Operator
keyIndexuint256Index of the validator key in the Node Operator's key storage