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
BLS
signature type _submitTask(TaskInfo calldata _taskInfo,
BLSTaskSubmissionDetails memory _taskSubmissionDetails)
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
ECDSA
signature type _submitTask(TaskInfo calldata _taskInfo,
TaskSubmissionDetails memory _taskSubmissionDetails)
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:
Pre-Processing (Optional): If an
avsLogic
hook is set, it callsbeforeTaskSubmission
for pre-processing.Task Validation: Validates the task's signature and checks if the task has already been signed.
Signature Verification: Verifies the
taskPerformer
's signature and checks the aggregated signature.Task Definition validation: Validates the task definition and checks for any restrictions.
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.
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
_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
_taskDefinitionId
uint16
Task Definition ID
_restrictedOperatorIndexes
uint256[]
Restricted Operator Set
setTaskDefinitionMaximumNumberOfAttesters
_taskDefinitionId
uint16
Task Definition ID
_maximumNumberOfAttesters
uint256
Maximum number of Attesters
Hooks Configuration
setAvsLogic(IAVSLogic)
Set the AVS Logic Hook contract. Learn more here.
_avsLogic
IAvsLogic
AVS Logic Hook contract address
setFeeCalculator
Sets the fee calculator hook contract. Lean more here.
_feeCalculator
IFeeCalculator
The fee calculator contract to be set
updateBLSKey
Updates the BLS key for the operator(uint256[], signature)
_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.
_oblsSharesSyncer
address
Syncer Address
Rewards functions
requestBatchPayment
Executes batch reward distribution over the entire active operator set, i.e., from 1
to numOfTotalOperators
.
_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.
_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
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
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
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.
_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.
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
)
_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
)
_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)
_challengerRewardFee
uint256
Sets the incentive (in wei units)
slashOperatorForIncorrectAttestation
function slashOperatorForIncorrectAttestation(
IncorrectAttestationSlashingDetails _details,
TaskInfo _taskInfo
)
Parameters:
_details
:IncorrectAttestationSlashingDetails
struct containingParameterTypeDescriptionoperator
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 containingParameterTypeDescriptiondata
bytes
Additional Task Data
slashOperatorForDoubleAttestation
function slashOperatorForDoubleAttestation(
DoubleAttestationSlashingDetails _details,
TaskInfo _taskInfo
)
Parameters:
_details
:DoubleAttestationSlashingDetails
struct containingParameterTypeDescriptionoperator
address
The address of the operator being accused of submitting an incorrect attestation.
trueBlsSignature
uint256[2]
The BLS signature corresponding to the
true
attestationfalseBlsSignature
uint256[2]
The BLS signature corresponding to the
false
attestation_taskInfo
:TaskInfo
struct containingParameterTypeDescriptiondata
bytes
Additional Task Data
Custom Slashing
ejectOperatorFromNetwork
Immediately removes the operator from the AVS network.
function ejectOperatorFromNetwork(address _operator) external;
_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
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