Attestation Center

Overview

The Attestation Center is a critical system designed to ensure the integrity and efficiency of AVS operations by bridging off-chain execution with on-chain verification and maintaining a transparent history of all activities involved.

AVS Attestation center contract manages

  • Task submission and verification

  • Rewards accounting and distribution

  • Slashing & Ejection configuration and logic

  • Aggregated view of AVS activities

  • Creation of new Tasks

  • Operator interface

Write Methods

Task Submission

For Performer BLS signature type

 _submitTask(TaskInfo calldata _taskInfo, 
        BLSTaskSubmissionDetails memory _taskSubmissionDetails) 
Property
Type
Description

TaskInfo.taskDefinitionId

uint16

The ID of specific Task definition

TaskInfo.proofOfTask

string

ProofOfTask: any string that the Attesters can use to verify that the Performer has executed its task as expected

TaskInfo.data

bytes

Any auxiliary/metadata required by the AVS or the service consumer to be verified

TaskInfo.taskPerformer

address

The address of the Task Performer

TaskSubmissionDetails._isApproved

bool

Indicate if a task has been approved or rejected by the Attesters

TaskSubmissionDetails._tpSignature

uint256[2]

Task Performer BLS signature

TaskSubmissionDetails._taSignature

uint256[2]

Task Attesters BLS aggregated signature

TaskSubmissionDetails._operatorIds

uint256[]

Task Attesters IDs

For Performer ECDSA signature type

 _submitTask(TaskInfo calldata _taskInfo, 
        TaskSubmissionDetails memory _taskSubmissionDetails) 
Property
Type
Description

TaskInfo.taskDefinitionId

uint16

The ID of specific Task definition

TaskInfo.proofOfTask

string

ProofOfTask: any string that the Attesters can use to verify that the Performer has executed its task as expected

TaskInfo.data

bytes

Any auxiliary/metadata required by the AVS or the service consumer to be verified

TaskInfo.taskPerformer

address

The address of the Task Performer

TaskSubmissionDetails._isApproved

bool

Indicate if a task has been approved or rejected by the Attesters

TaskSubmissionDetails._tpSignature

bytes

Task Performer ECDSA signature

TaskSubmissionDetails._taSignature

uint256[2]

Task Attesters BLS aggregated signature

TaskSubmissionDetails._operatorIds

uint256[]

Task Attesters IDs

The submitTask function is responsible for handling the submission of tasks in a decentralized system, with multiple steps to ensure the validity and proper handling of task data, signatures, and rewards. It performs the following key actions:

  1. Pre-Processing (Optional): If an avsLogic hook is set, it calls beforeTaskSubmission for pre-processing.

  2. Task Validation: Validates the task's signature and checks if the task has already been signed.

  3. Signature Verification: Verifies the taskPerformer's signature and checks the aggregated signature.

  4. Task Definition validation: Validates the task definition and checks for any restrictions.

  5. Fee Calculation: Calculates base reward fees for attesters, performers, and aggregators using the fee calculator system. If a fee calculator is set, it computes the appropriate rewards based on the task's definition and submission details.

  6. State Update: Marks the task as "signed" and optionally calls afterTaskSubmission for post-processing.


Task Definitions

Othentic Stack enables AVS developers to configure tasks for operators to execute, each with customizable parameters, rewards, security levels, number of operators, and operator clusters.

Sets Minimum Voting power for a Task

Parameter
Type
Description

_taskDefinitionId

uint16

Task Definition ID

_minimumVotingPower

uint256

Minimum Voting Power (in wei)

  • If an operator attests to a task and has less than the minimum voting power, the task would fail with a OperatorDoesNotHaveMinimumVotingPower(operatorIndex) error.

  • The AVS Governance Multisig should not set this value too high so that no attester passes the threshold.

Sets Restricted Operator Set for a Task

Parameter
Type
Description

_taskDefinitionId

uint16

Task Definition ID

_restrictedOperatorIndexes

uint256[]

Restricted Operator Set

setTaskDefinitionMaximumNumberOfAttesters

Parameter
Type
Description

_taskDefinitionId

uint16

Task Definition ID

_maximumNumberOfAttesters

uint256

Maximum number of Attesters


Hooks Configuration

setAvsLogic(IAVSLogic)

Set the AVS Logic Hook contract. Learn more here.

Property
Type
Description

_avsLogic

IAvsLogic

AVS Logic Hook contract address

setFeeCalculator

Sets the fee calculator hook contract. Lean more here.

Property
Type
Description

_feeCalculator

IFeeCalculator

The fee calculator contract to be set


updateBLSKey

Updates the BLS key for the operator(uint256[], signature)

Property
Type
Description

_blsKey

uint256[]

The new BLS key to be set for the operator

_authSignature

BLSAuthLibrary.Signature

The authentication signature used to verify the update request

setOblsSharesSyncer(address)

Set OBLS shares syncer address.

Property
Type
Description

_oblsSharesSyncer

address

Syncer Address


Rewards functions

requestBatchPayment

Executes batch reward distribution over the entire active operator set, i.e., from 1 to numOfTotalOperators.

Property
Type
Description

_submissionType

SubmissionType

Distribution method as defined by IRewardsDistributor

_distributionData

bytes

Custom reward data payload

requestBatchPayment (Operator subset)

Executes batch reward distribution to a subset of the operator list.

Property
Type
Description

_from

uint256

Starting operator index (inclusive)

_to

uint256

Ending operator index (inclusive)

_submissionType

SubmissionType

Distribution method as defined by IRewardsDistributor

_distributionData

bytes

Custom reward data payload


View Functions

AVS Contracts

function
description

internalTaskHandler()

Returns the address of the internal task handler contract

obls()

Returns the address of the on-chain BLS contract

avsTreasury()

Returns the address of the AVS treasury

EXTENSION_IMPLEMENTATION

Returns the address of the extension contract exposing additional functions.

Tasks

function
description

taskNumber()

Returns the total number of tasks

numOfTaskDefinitions()

Returns the total number of task definitions

getTaskDefinitionMinimumVotingPower()

Returns the minimum voting power required for a given task definition

getTaskDefinitionRestrictedAttesters()

Returns the list of restricted attester IDs for a given task definition

getTaskDefinitionMaximumNumberOfAttesters()

Returns the maximum number of attesters allowed for a given task definition

Hooks

avsLogic()

Returns the address of the AVS logic contract

beforePaymentsLogic()

Returns the address of the before-payments logic contract

Operators

function
description

numOfTotalOperators

Returns the total number of operators, including unregistered ones

numOfActiveOperators

Returns the number of currently active operators

getActiveOperatorsDetails

Returns an array containing details of all active operators, including their address, ID, and voting power

operatorsIdsByAddress

Returns the operator ID associated with the given operator address

getOperatorPaymentDetail

Returns the payment details for a given operator ID

votingPower(address)

Get Voting Power for an Operator.

verifyOperatorValidForTaskDefinition

Verifies whether an operator meets the requirements for a given task definition, including minimum voting power.

Property
Type
Description

_operator

address

The address of the operator

_taskDefinitionId

uint16

The ID of the task definition to validate against


Slashing Functions

Roles Configuration

These functions are only callable by the governance multisig AVS_GOVERNANCE_MULTISIG role.

Function
Description

setEjector(address _ejector)

Set EJECTOR role

revokeEjector(address _ejector)

Revoke EJECTOR role

setSlasher(address _slasher)

Set SLASHER role

revokeSlasher(address _slasher)

Revoke SLASHER role


Task-Specific Slashing Configuration

If a Task's execution or validation logic is still being tested or isn't fully deterministic, slashing should be disabled until it's production-ready.

setIsRejectedTaskSlashingEnabled

Enable or disable Rejected Task slashing condition for a given task definition Id.

function setIsRejectedTaskSlashingEnabled(
    uint16 _taskDefinitionId,
    bool _enabled
)
Parameter
Type
Description

_taskDefinitionId

uint16

_enabled

bool

Enable/ disable this slashing condition

setIsIncorrectAttestationSlashingEnabled

Enable or disable Incorrect Attestation slashing condition for a given task definition Id.


function setIsIncorrectAttestationSlashingEnabled(
    uint16 _taskDefinitionId,
    bool _enabled
)
Parameter
Type
Description

_taskDefinitionId

uint16

_enabled

bool

Enable/ disable this slashing condition


setChallengerRewardFee

This function is used to configure reward amount that a successful challenger receives when they submit a valid slashing proof.

function setChallengerRewardFee(uint256 _challengerRewardFee)
Parameter
Type
Description

_challengerRewardFee

uint256

Sets the incentive (in wei units)

slashOperatorForIncorrectAttestation

function slashOperatorForIncorrectAttestation(
    IncorrectAttestationSlashingDetails _details,
    TaskInfo _taskInfo
)

Parameters:

  • _details: IncorrectAttestationSlashingDetails struct containing

    Parameter
    Type
    Description

    operator

    address

    The address of the operator being accused of submitting an incorrect attestation.

    isApproved

    bool

    The final consensus result for the task — true if the task was approved, false if rejected. Used to validate that the operator’s attestation contradicts this result.

    incorrectSignature

    uint256[2]

    The signature submitted by the operator in their attestation (typically an ECDSA signature, broken into 2 parts: r and s).

    taSignature

    uint256[2]

    The signature from the Task Authority or consensus verifier confirming the final result (isApproved). Serves as the deterministic proof of what the correct attestation should have been.

    attesterIds

    uint256[]

    A list of attester IDs who participated in the consensus. Used to verify that a consensus was properly formed and that the operator's attestation deviates from it.

  • _taskInfo: TaskInfo Struct containing

    Parameter
    Type
    Description

    proofOfTask

    string

    data

    bytes

    Additional Task Data

    taskPerformer

    address

    Address of the Task Performer

    taskDefinitionId

    uint16

    Task definition ID (to check if slashing is enabled)

slashOperatorForDoubleAttestation

function slashOperatorForDoubleAttestation(
    DoubleAttestationSlashingDetails _details,
    TaskInfo _taskInfo
)

Parameters:

  • _details: DoubleAttestationSlashingDetails struct containing

    Parameter
    Type
    Description

    operator

    address

    The address of the operator being accused of submitting an incorrect attestation.

    trueBlsSignature

    uint256[2]

    The BLS signature corresponding to the true attestation

    falseBlsSignature

    uint256[2]

    The BLS signature corresponding to the false attestation

  • _taskInfo: TaskInfo struct containing

    Parameter
    Type
    Description

    proofOfTask

    string

    data

    bytes

    Additional Task Data

    taskPerformer

    address

    Address of the Task Performer

    taskDefinitionId

    uint16

    Task definition ID (to check if slashing is enabled)


Custom Slashing

ejectOperatorFromNetwork

Immediately removes the operator from the AVS network.

function ejectOperatorFromNetwork(address _operator) external;
Parameter
Type
Description

_operator

address

The address of the operator to be ejected from the AVS.

applyCustomSlashing

Directly slashes a custom amount of stake from the operator across one more staking contracts.

function applyCustomSlashing(address _operator,
    SlashingContractInfo[] memory _slashingContractInfos) 

Parameters:

  • _operator (address) - the address of the operator to be slashed

  • _slashingContractInfos (SlashingContractInfo[]) - a list of structs defining how much stake to slash from which staking contracts

Parameter
Type
Description

stakingContract

address

The staking contract from which stake will be slashed.

sharedSecurityProvider

SharedSecurityProvider

Use 0 for Eigen Layer

wadsToSlash

uint256

The amount of stake to slash, denominated in 18 decimals (e.g., 1e18 represents 1 token).

Last updated