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.

Where can I find more information about the Leader Election mechanism and how it is handled?

Check out the Task Allocation section.

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

Step 1: Call setOblsSharesSyncer on the Attestation Center Contract, passing any address (address1) that will be used to sync voting power (this can be a governance multisig address).

Step 2: Run the syncer and provide the private key of address1 as PRIVATE_KEY_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: Call setOblsSharesSyncer again, this time passing the Internal Task Handler, which you can get from the internalTaskHandler read function in the Attestation center contract.

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