AVS Governance

View Source Code

Overview

The AVS Governance contract acts as the interface of the AVS on Ethereum blockchain (L1).

It manages the registration and de-registration of operators, enforces governance policies, and coordinates interactions between AVS operators and various system components. The AVS Governance uses roles and access-control authorizations to manage permissions, handle operator deposits and rewards, and allow for the update of governance logic and settings.

Additionally, it interfaces with other contracts for message handling, registry management, and signature verification to maintain the integrity and functionality of the AVS.

Each AVS deploys its own AVS Governance contract, managed via multiple Governance Multisigs.

Write Methods

Operator Registration

These methods are used to manage Operator registration/de-registration.

Register to non-allowlisted AVSs. If the AVS registration is permissionless, anyone can register as long as they comply with the AVS' minimum requirements.

Parameter
Type
Description

_blsKey

uint256[4]

The operator's public BLS key

_rewardsReceiver

address

The address to which operator rewards should be sent

_blsRegistrationSignature

The operator signature required by EigenLayer

authToken

bytes

A BLS signature (see note below)

The _blsRegistrationSignature parameter is a BLS signature:

  • Domain: keccak256("OthenticBLSAuth")

  • Message: keccak256(abi.encode(msg.sender, avsGovernanceAddress, block.chainid))

registerOperatorToEigenLayer

It registers as an operator on EigenLayer using the provided signature and authentication token.

Parameter
Type
Description

_eigenSig

SignatureWithSaltAndExpiry

signature details

_authToken

bytes

authentication token

Operator De-registration

To unregister an Operator from the AVS, call the following methods:

unregisterAsOperatorFromAvs

Unregister as an operator from the AVS. This method receives no arguments.

unregisterAsOperatorFromEigenLayer

Unregister as an operator from the EigenLayer. This method receives no arguments.

Operator Rewards Receiver Update

To update rewards receiver address for an Operator, call the following methods:

queueRewardsReceiverModification

Update the rewards receiver address

Parameter
Type
Description

_newRewardsReceiver

address

New rewards receiver address

completeRewardsReceiverModification

Complete the rewards receiver address modification

General AVS Configuration

setAvsName(string)

Set a human-readable identifier for your AVS contract.

Parameter
Type
Description

_avsName

string

New AVS name

setAvsGovernanceMultisig(address)

Set the account that is authorized to invoke the governance methods.

Parameter
Type
Description

_newAvsGovernanceMultisig

address

The new governance owner

setAvsGovernanceLogic(IAvsGovernanceLogic)

Connect an AvsLogic contract to the governance contract. Learn more here.

Parameter
Type
Description

_avsGovernanceLogic

IAvsGovernanceLogic

Address of an AvsLogic contract

transferAvsGovernanceMultisig

Transfer control of the AVS governance to a new multisig wallet.

Parameter
Type
Description

_newAvsGovernanceMultisig

address

Address of the AVS governance multisig

setRewardsReceiverModificationDelay

Set the required delay before updating the rewards receiver address, by default its 7 days.

Parameter
Type
Description

_rewardsReceiverModificationDelay

uint256

delay in milliseconds

setAvsGovernanceMultiplierSyncer

Set the address responsible for syncing the AVS governance multiplier

Parameter
Type
Description

_newAvsGovernanceMultiplierSyncer

address

AVS governance multiplier syncing address


Consensus Configuration

setNumOfOperatorsLimit(uint256)

Limit the amount of active operators allowed on the AVS at any given moment.

Parameter
Type
Description

_newLimitOfNumOfOperators

uint256

The new limit for the number of operators

setMinVotingPower(uint256)

Set the Minimum Voting Power required to register an operator to the AVS.

Parameter
Type
Description

_minVotingPower

uint256

minimum voting power

setMaxEffectiveBalance(uint256)

Set the Maximum Effective Balance for the AVS.

Parameter
Type
Description

_maxBalance

uint256

maximum effective balance


Staking Configuration

setSupportedStakingContracts(StakingContractInfo[])

Set the list of EigenLayer strategies supported by the AVS.

Parameter
Type
Description

_stakingContractsDetails

StakingContractInfo[]

List of staking contracts supported by the AVS

setMinStakePerStakingContract (address, uint256)

Sets the minimum stake amount for a specified staking contract

Parameter
Type
Description

_stakingContract

address

The address of the Staking contract

_minStake

uint256

The minimum stake (in wei) required from an Operator in the given staking contract to be considered eligible.

setStakingContractMultiplier

Sets the voting power multiplier for a specified staking contract, it can only be called by Multipler syncer

multiplier is the weight assigned to a particular staking contract, which you can configure as per your requirements for each staking contract. Multipliers directly influences voting power and must be a positive integer.

Parameter
Type
Description

_votingPowerMultiplier

VotingPowerMultiplier

Voting power multiplier

setStakingContractMultiplierBatch

Sets the voting power multipliers for multiple staking contracts, it can only be called by Multipler syncer

Parameter
Type
Description

_votingPowerMultipliers

VotingPowerMultiplier[]

Voting power multipliers


Rewards Configuration

createEigenRewardsSubmission

Distribute a fixed amount of rewards to the Operators

Parameter
Type
Description

startTimestamp

uint32

Timestamp (in seconds) indicating from when to start calculating which Operators and Stakers are eligible to claim rewards.

duration

uint32

Duration in seconds to define the Operators and Staker actively participating in the AVS (e.g., 604800 for 7 days).

amount

uint256

Total amount of tokens in wei


P2P and Authentication Settings

setIsAllowlisted

Set allow list functionality

Parameter
Type
Description

_isAllowlisted

boolean

is allowed boolean value

setP2pAuthenticationEnabled(bool)

Enable p2p authentication for the AVS network. Learn more here.

Parameter
Type
Description

_p2pAuthenticationEnabled

bool

value to set


External Functions

registerAvsToEigenLayer(string)

Register AVS to EigenLayer dashboard. Learn more here.

Parameter
Type
Description

metadataURI

string

The metadataURI format

rescueFunds

Withdraw stuck funds from the AVS Governance contract to the AVS governance multisig.

Slashing Module Configuration

In this context, slashingCondition corresponds to Slashing Modules.

updateSlashingConfig

Create or update the configuration for a specific slashing module.

See Slashing Modules and Enable Slashing pages to learn more.

function updateSlashingConfig(
    SlashingCondition _condition,
    SlashingConfig _config
) external;

enum SlashingCondition {
    None, // 0
    DoubleAttestations, // 1
    RejectedTask, // 2
    IncorrectAttestations // 3
}

Parameters

  • _condition: The specific SlashingCondition enum value (i.e. 1/2/3) you want to update (e.g., DoubleAttestations, IncorrectAttestations).

  • _config: SlashingConfig struct containing.

Parameter
Type
Description

activated

bool

Enable/ disable this slashing condition

ejectOperator

bool

Auto-eject operator on violation

stakeSlashedPercentage

uint24

% of unique stake to slash

getSlashingConfig

Returns the current slashing configuration for a given condition.

function getSlashingConfig(
    SlashingCondition _condition
) external view returns (SlashingConfig);
Parameter
Type
Description

_condition

SlashingCondition

SlashingCondition enum value specifying the slashing condition to query (e.g., DoubleAttestations, IncorrectAttestations).

setMinSlashableStakePerStakingContract

This function specifies the minimum slashable stake required in a given staking contract. Operators who have staked less than the defined threshold will be considered inactive.

function setMinSlashableStakePerStakingContract(
    address _stakingContract, 
    uint256 _minSlashableStake)

Parameters

Parameter
Type
Description

_stakingContract

address

The address of the staking contract to configure.

_minSlashableStake

uint256

The minimum amount of required stake (in wei)


View Methods

General AVS Configuration

Function
Description

avsName

Returns the name of the AVS

avsTreasury

Returns the address of the AVS treasury contract

getL1MessageHandler

Returns the address of the L1 message handler contract

avsDirectory

Returns the address of the AVS directory contract

EXTENSION_IMPLEMENTATION

Returns the address of the extension contract exposing additional functions.

Consensus Configuration

minVotingPower

Returns the minimum voting power required

maxEffectiveBalance

Returns the maximum effective balance allowed

getNumOfOperatorsLimit

Returns the maximum number of operators allowed

Operator Status

Function
Description

isOperatorRegistered(address)

Checks whether a given operator address is registered

getRewardsReceiver(address)

Returns rewards receiver address for the Operator

votingPower(address)

Returns voting power of the Operator

getOperatorRestakedStrategies(address)

Returns the strategies restaked by the Operator

votingPowerPerStakingContracts(address, address[])

Returns Voting power for the specified Staking contracts

getIsOperatorEjected(address)

Returns whether an operator is blacklisted

Authentication Configuration

function
description

p2pAuthenticationEnabled

Returns a boolean value indicating whether P2P authentication is enabled

getIsAllowlisted

Returns a boolean indicating whether Operator allowlisting is enabled

Staking Configuration

function
description

getRestakeableStrategies

Returns restakable strategies for the AVS

minStakeAmountPerStakingContract

Returns the minimum stake amount required for a given staking contract

stakingContracts

Returns an array of registered staking contract addresses

Last updated