FAQ

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

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:

  • 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 quickstart.

  • 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 othentic-cli operator register 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, deposit 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?

You can query the votingPower method in the Attestation Center contract using the operator's address. Alternatively, you can use the votingPower 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.

How do I get OBLS contract address?

Use obls method in the AttestationCenter contract.

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

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

How do I gain exposure to node operators?

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

{
    "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>"
}

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

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

Operators can use the unregister command 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.

How can an operator claim rewards?

Refer to the Rewards Distribution for this.

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

You can pause or unpause 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 pause and unpause contract functions in the AVS governance contract. You can find the exact byte code of the flows by using the PauserRolesLibrary.

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

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

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?

Refer to the core-contracts repository on github.

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 Internal Tasks: Ensure that internal tasks are running. If not, start them according to the configuration here.

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

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

  • 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

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

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

Last updated