LogoLogo
  • Introduction
    • Introducing Othentic Stack
    • Use Cases
  • AVS Framework
    • Abstract
    • Quick Start
    • Othentic CLI
      • Key Management
      • Contracts Deployment
      • Operator Registration
      • AVS Logic Implementation
      • Operator Deposit
      • Node Operators
      • Rewards Distribution
      • P2P Config
        • Custom P2P Messaging
        • P2P Auth Layer
        • Metrics and Monitoring
        • Logging
        • Persistent storage
        • Latency
      • CLI Command Reference
    • Smart Contracts
      • AVS Governance
      • Attestation Center
      • Hooks
        • Task Logic
        • Operator Management
        • Rewards Fee Calculator
      • OBLS
      • Internal Task Handler
      • Othentic Registry
      • Message Handlers
    • Othentic Consensus
      • Abstract
      • Task & Task Definitions
      • Leader Election
      • Proof of Task
      • Execution Service
      • Validation Service
      • Voting Power
      • Rewards
      • Internal Tasks
      • Slashing & Ejection
        • Slashing Modules
        • Custom Slashing
    • FAQ
    • Supported Networks
    • Explainers
      • Networking
      • Multichain
      • Production Guidelines
      • Operator Allowlisting
      • Governance Multisig
  • External
    • AVS Examples
  • GitHub
  • Othentic Hub
Powered by GitBook
On this page
  • Overview
  • Contract Address
  • Features
  • Core Functions
  • Task Submission
  • Task Definitions
  • Hooks Configuration
  • View Functions
  • AVS Contracts
  • Tasks
  • Hooks
  • Operators
  • Slashing Functions
  • Roles Configuration
  • Task-Specific Slashing Configuration
  • Challenger System
  • Custom Slashing
  1. AVS Framework
  2. Smart Contracts

Attestation Center

PreviousAVS GovernanceNextHooks

Last updated 9 days ago

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 Operators attest to the execution and validity of tasks through the consensus process. Operators claims are being recorded when the network comes to a consensus on arbitrary compute and auxiliary datasets, which allows the AVS to perform various functionalities on top of the verified results.

Contract Address

Run the othentic-cli network contracts command in your project folder to get the deployed Attestation Center contract address. The same address can also be obtained from the AttestationCenterDeployed event, emitted in the contracts deployment transaction on L2.

Features

Task submission and verification - allows AVS Operators to submit their off-chain tasks and verify them on-chain, ensuring that the tasks lifecycle can be tracked, recorded, and validated.

Rewards and penalties distribution - stores detailed information about individual Operator work, which allows the AVS protocol to calculate and distribute rewards, slashing, and penalties.

Aggregated view of AVS activities - maintains a comprehensive view and historical data of the AVS footprint, including all activities and tasks performed by the AVS.

Verified auxiliary datasets - As part of the task submission, Operators also agree on auxiliary info about the task and make it available on-chain (via the TaskInfo.data property). These datasets could be used to trigger AVS logic and complex mechanisms.

  • For example, zk proofs can use the proofOfTask field for SNARK proofs while using the TaskInfo.data for public inputs and outputs to the circuit.

  • For example, price oracle can be used TaskInfo.data as a timestamp for fetched data feeds.

Creation of new Tasks - configure diverse types of tasks with different corresponding rewards and penalties. You can also define a policy of bare requirements for specific clusters of operators.

Operator interface - interface for AVS Operators, facilitating their interaction with the system and allowing Operators to manage tasks, view history, and interact efficiently with the AVS.

Core Functions

Task Submission

  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. State Update: Marks the task as "signed" and optionally calls afterTaskSubmission for post-processing.

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

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

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

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.


Hooks Configuration

setAvsLogic(IAVSLogic)

Property
Type
Description

_avsLogic

IAvsLogic

AVS Logic Hook contract address

setFeeCalculator

Property
Type
Description

_feeCalculator

IFeeCalculator

The fee calculator contract to be set


updateBLSKey

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


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)

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

function setIsRejectedTaskSlashingEnabled(
    uint16 _taskDefinitionId,
    bool _enabled
)

setIsIncorrectAttestationSlashingEnabled


function setIsIncorrectAttestationSlashingEnabled(
    uint16 _taskDefinitionId,
    bool _enabled
)

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

    taskDefinitionId

    uint16

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

    taskDefinitionId

    uint16


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).

The 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:

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

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

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

Attestation Center contract is used to create and update Task Definitions. Find more details in the .

Set the AVS Logic Hook contract. Learn more .

Sets the fee calculator hook contract. Lean more .

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

Get Voting Power for an Operator. Learn more

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

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

Address of the Task

(to check if slashing is enabled)

Address of the Task

(to check if slashing is enabled)

submitTask
here
here
BLS key
ProofOfTask
ProofOfTask
here
Proof Of Task
Proof Of Task
Task and Task Definition section
Task definition ID
Task definition ID
fee calculator
Performer
Performer
Parameter
Type
Description
Parameter
Type
Description

_taskDefinitionId

uint16

_enabled

bool

Enable/ disable this slashing condition

_taskDefinitionId

uint16

_enabled

bool

Enable/ disable this slashing condition

Task Definition Id
Task Definition Id
Rejected Task
Incorrect Attestation
Challenger System