Othentic
  • 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
      • Othentic Registry
      • Message Handlers
    • Othentic Consensus
      • Abstract
      • Task & Task Definitions
      • Leader Election
      • Proof of Task
      • Execution Service
      • Validation Service
      • Voting Power
      • Rewards and Penalties
      • Internal Tasks
    • FAQ
    • Supported Networks
    • Explainers
      • Networking
      • Multichain
      • Production Guidelines
      • Operator Allowlisting
      • Governance Multisig
  • External
    • AVS Examples
  • GitHub
  • Othentic Hub
Powered by GitBook
On this page
  • Troubleshooting Checklist
  • General
  • Who runs and maintains all three role nodes: Performer, Attester and Aggregator nodes?
  • How do I view all the deployed contract addresses, such as AVS Governance and Attestation Center?
  • How do I get the voting power of an operator?
  • How do I get OBLS contract address?
  • How do I ensure the attesters have 66% of the voting power?
  • How do I gain exposure to node operators?
  • What happens when I unregister an operator? And when should one unregister an operator?
  • How can an operator claim rewards?
  • How can I pause/ unpause any flow such as payments?
  • How can I integrate my custom smart contract or logic with the AttestationCenter contract?
  • How to enable debug mode?
  • Do you have source code published for AVSGovernance or other contracts?
  • The tasks are not being submitted. What should I do?
  • Can an operator's "Signing Key" be the same key used for registration?
  • Facing any specific errors?
  • Why am I seeing "Operator inactive, ignoring...."?
  • Can not find module 'nest-commander'
  • ERR_BUFFER_OUT_OF_BOUNDS('length')
  • TypeError: invalid value for Contract target (when running nodes)
  • Operator registration is not working
  • Cannot read properties of undefined (reading 'connect')
  • Error: could not decode result data (value="0x", info={ "method": "obls", "signature": "obls()" }
  • Error: network does not support ENS
  1. AVS Framework

FAQ

This page provides debugging assistance and answers to frequently asked questions.

PreviousInternal TasksNextSupported Networks

Last updated 1 month ago

If running one of the example repos, make sure to rebuild the docker images with docker-compose build --no-cache

Troubleshooting Checklist

Here are preliminary steps to ensure everything is set up correctly:

  • Set the L1_RPC and L2_RPC environment variables using private, reliable RPC endpoints to avoid any errors.

  • Make sure you are using the latest version of Othentic-cli. Use npm update othentic-cli command or docker-compose build --no-cache to directly update inside docker images.

  • Make sure all your containers for operators, attesters, execution service and validation service are up and running.

  • Make sure Operators have enough funds on L1 and staked tokens on Eigen layer as per the funds requirements mentioned in .

  • Verify that .env file contains all required environment variables, and ensure private keys are not prefixed with 0x .

  • Run othentic-cli network contracts in the root directory and cross-check all the contract addresses in your .env file.

  • Verify that attesters, aggregator, and performers are registered as operators with the AVS. Did you run the command for each operator?

  • Make sure that attesters in the p2p networks have more than 66% of the voting power. You can check the total voting power and individual voting power of the attesters and verify, if necessary, additional funds to help them reach the 66% threshold.

  • Make sure you are using the correct taskDefinitionId and the corresponding task definitions are created.


General

Who runs and maintains all three role nodes: Performer, Attester and Aggregator nodes?

In principle, each node can perform any single role or combination of roles. Initially, the AVS developers choose to bootstrap the network with Performers and Aggregators maintained internally, with Attester nodes run by external Operators. Over time, the developer may choose to open up the Performer and Aggregator roles for external Operators as well.

AVS may configure a policy of requirements to be eligible for a specific role; for example, an AVS may choose to grant a Performer role only to nodes with a certain reputation score or ones that staked a certain amount of the AVS native token.

How do I view all the deployed contract addresses, such as AVS Governance and Attestation Center?

Run othentic-cli network contracts in the avs-samples (root) directory.

How do I get the voting power of an operator?

How do I get OBLS contract address?

How do I ensure the attesters have 66% of the voting power?

How do I gain exposure to node operators?

{
    "name": "K3 AVS",
    "website": "<https://www.k3-labs.com>",
    "description": "K3 Labs allows users to easily design and deploy business workflows and applications that utilize the power of decentralized compute, storage, and execution.",
    "logo": "<https://app.k3-labs.com/k3-rec.png>",
    "twitter": "<https://twitter.com/k3_labs>"
}

What happens when I unregister an operator? And when should one unregister an operator?

How can an operator claim rewards?

How can I pause/ unpause any flow such as payments?

How can I integrate my custom smart contract or logic with the AttestationCenter contract?

How to enable debug mode?

To enable debug mode, set DEBUG=* in your .env file or directly in the terminal before running commands. For example:

DEBUG=* othentic-cli …  

Do you have source code published for AVSGovernance or other contracts?

The tasks are not being submitted. What should I do?

For tasks to be successfully submitted, operators holding at least 66% of the voting power within the AVS must act as attesters. Please ensure that this condition is met.

Can an operator's "Signing Key" be the same key used for registration?

Yes. The "Signing Key" can be the same as the "Delegate" key that you used for registering with the shared security provider.


Facing any specific errors?

Why am I seeing "Operator inactive, ignoring...."?

Verify the voting power of the operator using the votingPower method on the Attestation center contract. This message usually appears when the operator has zero voting power. To resolve:

  • Check Voting Power Sync: If the deposit has been made but voting power is still not reflected, the Voting power sync may not be working. Look for any relevant logs in the Aggregator related to Internal tasks.

  • Check If Operator is using the correct chain with --l2-chain parameter and the rpc.

  • Manually Sync Voting Power: If internal tasks are functioning correctly but voting power is still not synced, you may need to manually sync it.

Sync Voting Power using syncer

⚠️ Important: You can either use Internal Tasks or Syncer, but not both at the same time. If you are already using Internal Tasks, remove --internal-tasks from the Aggregator when running the syncer.

The OBLS shares syncer is responsible for keeping voting power in sync. When syncing manually, you need to assign the syncer role to a new address temporarily and then run the syncer. Follow these steps:

Step 1: Assign a New Syncer Address

Call setOblsSharesSyncer on the Attestation Center Contract, passing any temporary address (0xabc) that will be used to sync voting power (this can be AVS governance multisig address).

Step 2: Run the Syncer

Provide the private key of 0xabc as PRIVATE_KEY_SYNCER in the environment variables and run the syncer.

syncer:
    <<: *othentic-cli
    command:
      [
        "node",
        "sync",
        "--sync-interval",
        "12h",
        "--l1-chain",
        "mainnet",
        "--l2-chain",
        "base",
      ]
    environment:
      - PRIVATE_KEY=${PRIVATE_KEY_SYNCER}
      - ATTESTATION_CENTER_ADDRESS=${ATTESTATION_CENTER_ADDRESS}
      - AVS_GOVERNANCE_ADDRESS=${AVS_GOVERNANCE_ADDRESS}
    networks:
      p2p:
        ipv4_address: 10.8.0.6

Step 3: Revert Syncer Role to the Internal Task Handler

Once the manual sync is complete, you need to restore the syncer role back to the Internal Task Handler.

  • Fetch the Internal Task Handler address by calling the internalTaskHandler read function on the Attestation Center Contract.

  • Call setOblsSharesSyncer again, but this time, pass the Internal Task Handler address instead of 0xabc.

Can not find module 'nest-commander'

sudo docker compose up
WARN[0000] docker-compose.yml: version is obsolete 
[+] Running 2/0
 ✔️ Container infini-route-attestators-public-avs-webapi-1  Created                                                                                                                                     0.0s 
 ✔️ Container infini-route-attestators-public-attester-1    Created                                                                                                                                     0.0s 
Attaching to attester-1, avs-webapi-1
attester-1    | node:internal/modules/cjs/loader:1251
attester-1    |   throw err;
attester-1    |   ^
attester-1    | 
attester-1    | Error: Cannot find module 'nest-commander'
attester-1    | Require stack:
attester-1    | - /usr/local/bin/othentic-cli
attester-1    |     at Module._resolveFilename (node:internal/modules/cjs/loader:1248:15)
attester-1    |     at Module._load (node:internal/modules/cjs/loader:1074:27)
attester-1    |     at TracingChannel.traceSync (node:diagnostics_channel:315:14)
attester-1    |     at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
attester-1    |     at Module.require (node:internal/modules/cjs/loader:1339:12)
attester-1    |     at require (node:internal/modules/helpers:125:16)
attester-1    |     at Object.<anonymous> (/usr/local/bin/othentic-cli:57:18)
attester-1    |     at webpack_require (/usr/local/bin/othentic-cli:5198:42)
attester-1    |     at Object.<anonymous> (/usr/local/bin/othentic-cli:20:26)
attester-1    |     at webpack_require (/usr/local/bin/othentic-cli:5198:42) {
attester-1    |   code: 'MODULE_NOT_FOUND',
attester-1    |   requireStack: [ '/usr/local/bin/othentic-cli' ]
attester-1    | }
attester-1    | 
attester-1    | Node.js v22.6.0
avs-webapi-1  | Server started on port: 4002
attester-1 exited with code 1

Please avoid using sudo when working with the Othentic CLI. Reinstall the CLI without sudo to ensure proper permissions.

ERR_BUFFER_OUT_OF_BOUNDS('length')

hrow new ERR_BUFFER_OUT_OF_BOUNDS('length');
            ^
RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: "length" is outside of buffer bounds
    at proto.utf8Write (node:internal/buffer:1066:13)
    at p8e.zAo [as fn] (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:866549)
    at Uq.e [as finish] (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:865725)
    at yWo.sendTask (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:1119964)
    at yWo.handleRpcRequest (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:1118981)
    at /usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:1118528
    at Array.map (<anonymous>)
    at /usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:1118516
    at O_e.e [as handle_request] (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:120:874618)
    at f (/usr/local/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:120:876800) {
  code: 'ERR_BUFFER_OUT_OF_BOUNDS'
}

Node.js v22.7.0

TypeError: invalid value for Contract target (when running nodes)

TypeError: invalid value for Contract target (argument="target", value=null, code=INVALID_ARGUMENT, version=6.8.1)
    at l$r (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:644:253521)
    at Eye (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:644:253827)
    at mno (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:644:253875)
    at new e (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:644:513082)
    at new kFt (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:644:518004)
    at b$o.setObls (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:647:1905)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async b$o.onModuleInit (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:645:1033488)
    at async Promise.all (index 0)
    at async D6i (/Users/user/.nvm/versions/node/v22.6.0/lib/node_modules/@othentic/othentic-cli/dist/othentic-cli:119:23099) {
  code: 'INVALID_ARGUMENT',
  argument: 'target',
  value: undefined,
  shortMessage: 'invalid value for Contract target'
}

Node.js v22.6.0

This indicates you are not passing the proper --l2-chain flag when running the node.

Operator registration is not working

othentic-cli operator register

Unknown error occurred
ERROR [AvsService] Error: missing revert data (action="estimateGas", data=null, reason=null, transaction={ "data": "0x226...)

The Operator registration function is using cross-chain capabilities. Please make sure that the L1MessageHandler smart contract holds enough funds, for the cross-chain messaging fees.

Cannot read properties of undefined (reading 'connect')

This error indicates one or more of AVS_GOVERNANCE_ADDRESS or ATTESTATION_CENTER_ADDRESS is missing from your .env file

Error: could not decode result data (value="0x", info={ "method": "obls", "signature": "obls()" }

This error could have several causes:

  1. Your AttestationCenter address is incorrect

  2. You are passing the wrong --l2-chain flag

  3. You are using an L2_RPC in your .env which is pointing to the wrong chain

Error: network does not support ENS

You've either input an address in an incorrect format, or either of AVS_GOVERNANCE_ADDRESS or ATTESTATION_CENTER_ADDRESS in your .env file are in an incorrect format

You can query the method in the Attestation Center contract using the operator's address. Alternatively, you can use the method in the OBLS contract by querying with the operator ID. The Attestation Center contract is your go-to for details about operators and task definitions.

Use method in the AttestationCenter contract.

Query the method on the OBLS contract. Check each attester's individual voting power and ensure they have 66% of the total voting power.

Create a simple document for operators with instructions like . To make your AVS visible on eigen UI, create a JSON file like this:

Execute the command with above details. Once completed, your AVS will be visible on

Operators can use the to remove themselves from the AVS. When this happens, the operator exits the system, which results in a reduction of the total voting power of the AVS by the amount of that individual operator’ voting power.

Refer to the for this.

You can any flow using the cli by running othentic-cli network pause-flow command. It shows the list of all the flows. You can also use the and contract functions in the AVS governance contract. You can find the exact byte code of the flows by using the .

The Othentic Stack enables developers to create an contract, which includes pre and post-execution hooks. For more details, refer to the .

Refer to the repository on github.

Check Internal Tasks: Ensure that internal tasks are running. If not, start them according to the configuration .

Verify Operator's Deposit: Confirm that the operator has deposited funds into the Eigen strategy as outlined in the of the Quickstart guide.

You can verify this by checking the Operator transactions for deposit Into Strategy transactions, similar to this .

Please make sure to use Node v22.6.0⚠️,

votingPower
votingPower
obls
totalVotingPower
this
Rewards Distribution
AVSLogic
Hooks
core-contracts
Setup Operator Voting Power Step
example deposit
via NVM
othentic-cli operator register
deposit
Eigen Dashboard.
pause
unpause
PauserRolesLibrary
network register
pause or unpause
quickstart
here
unregister command