Architecture Overview

Comparison of AVS Types

FeatureValidatorAVSGatewayAVS
PurposeFor validators to opt in to expose their slots for preconfirmation dutiesFor operators handling preconfirmations
DutiesBasic block proposalPreconfirmation tasks
RewardsShared with GatewayAVSShared with ValidatorAVS
Slashing ConditionsAccepting blocks from non-opt in relaysReneging on preconfirmation commitments
Software RequirementsBasic ETH client + Commit-boostAdvanced pricing & preconf off-chain services

EigenLayer Integration

Both ValidatorAVS and GatewayAVS inherit from EigenLayerMiddleware, which implements the IServiceManager interface required by EigenLayer. This integration enables our AVSs to participate in EigenLayer’s ecosystem.

Registration Workflows

Operators have three options for registration, each with its own workflow and requirements:

1. Validator AVS Only (For Passive Stakers)

2. Gateway AVS Only (For Preconfirmation Specialists)

3. Both AVSs via Self-Delegation (Full Participation)

ValidatorAVS External Functions

Registration Functions

registerOperatorToAVS

function registerOperatorToAVS(
    address operator,
    ISignatureUtils.SignatureWithSaltAndExpiry calldata operatorSignature
) external

Registers an operator in the ValidatorAVS. The operator must already be registered in EigenLayer.

Parameters:

NameTypeDescription
operatoraddressThe address of the operator to register
operatorSignatureISignatureUtils.SignatureWithSaltAndExpirySignature proving operator control

registerValidators

function _registerValidators(
    bytes[] calldata valPubKeys,
    address podOwner,
    bytes calldata delegatedGatewayPubKey
) internal

Registers multiple validators for a pod owner. Enforces that validators are active in EigenLayer and the operator is properly registered.

Parameters:

NameTypeDescription
valPubKeysbytes[]Array of validator BLS public keys
podOwneraddressAddress of the EigenPod owner
delegatedGatewayPubKeybytesThe delegated gateway public key (cannot be empty)

Opt-Out Functions

function initiateValidatorOptOut(
    bytes32 pubkey,
    uint256 signatureExpiry
) external

Initiates the opt-out process for a validator. Only registered operators can call this function. Starts the cooldown period before the validator can fully opt out.

function confirmValidatorOptOut(
    bytes32 pubkey
) external

Confirms a validator’s opt-out after the cooldown period has elapsed. Can be called by anyone once the cooldown is complete.

Batch Operations

function batchInitiateValidatorOptOut(
    bytes32[] calldata pubkeys,
    uint256 signatureExpiry
) external

Batch version of initiateValidatorOptOut for multiple validators. Requires caller to be a registered operator.

function batchConfirmValidatorOptOut(
    bytes32[] calldata pubkeys
) external

Batch version of confirmValidatorOptOut for multiple validators. Can be called after cooldown period.

Reward Management

handleValidatorRewards

function handleValidatorRewards(
    IRewardsCoordinator.OperatorDirectedRewardsSubmission calldata submission,
    uint256 validatorAmount
) external

Handles validator-based reward distribution. Can only be invoked by the gateway AVS during reward distribution.

Parameters:

NameTypeDescription
submissionIRewardsCoordinator.OperatorDirectedRewardsSubmissionThe reward submission info
validatorAmountuint256Total amount allocated to validators

GatewayAVS External Functions

Registration Functions

registerOperatorToAVSWithPubKey

function registerOperatorToAVSWithPubKey(
    address operator,
    ISignatureUtils.SignatureWithSaltAndExpiry calldata operatorSignature,
    bytes calldata operatorBLSPubKey
) external

Special registration function for operators to register with GatewayAVS. This is the only way to register since it requires a BLS key.

Parameters:

NameTypeDescription
operatoraddressThe address of the operator to register
operatorSignatureISignatureUtils.SignatureWithSaltAndExpiryThe operator’s signature for AVS registration
operatorBLSPubKeybytesThe operator’s BLS public key

Reward Management

createOperatorDirectedAVSRewardsSubmission

function _createOperatorDirectedAVSRewardsSubmission(
    IRewardsCoordinator.OperatorDirectedRewardsSubmission[] calldata submissions
) internal

Processes operator rewards for both Gateway and Validator AVS components. Expects exactly 2 submissions in a specific order.

Parameters:

NameTypeDescription
submissionsIRewardsCoordinator.OperatorDirectedRewardsSubmission[]Array containing reward submissions for Gateway and Validator

handleGatewaySubmission

function _handleGatewaySubmission(
    IRewardsCoordinator.OperatorDirectedRewardsSubmission calldata submission
) private returns (uint256 validatorAmount)

Handles the gateway portion of rewards, calculating and distributing shares between gateway operators.

Parameters:

NameTypeDescription
submissionIRewardsCoordinator.OperatorDirectedRewardsSubmissionThe gateway reward submission

Returns:

TypeDescription
uint256The amount allocated to validators