Cambrian CLI

Prerequisites

  • node.js >= 22.0.0

  • docker >= 20.0.0

Installing Cambrian utility

npm i --global @cambrianone/camb-client@latest

Initialization

Scaffold AVS and initialize PoA onchain

camb init -t avs <AVS directory>

Explaining wizard:

  • Enter AVS IP address to bind to - provide an IP address to bind to, it should be reachable from all the operators

  • Enter AVS HTTP port to bind to - provide an HTTP port to bind to, it should be reachable from all the operators

  • Enter AVS WS port to bind to - provide a WebSockers port to bind to, it should be reachable from all the operators

  • Enter admin private key or press enter to generate a new one - admin private key / keypair as array of uint8 or as base58-encoded string

  • Enter Solana API URL or press enter to use default - Solana JSON RPC endpoint

  • Enter Solana API WS URL or press enter to use default - Solana WebSockets endpoint

  • Enter Cambrian Consensus Program name or press enter to generate a new one - string identifier (name) of the Cambrian Consensus Program (CCP) instance (aka PoA name)

  • Enter proposal storage key or press enter to generate a new one - unique string key for the proposal storage

  • Enter storage space - common oracle storage space, in bytes

  • Enter consensus threshold - The minimum number of operators required to approve a proposal before execution

  • Enter stake threshold - The minimum stake required for an operator to participate in CCP

List installed AVS instances

Start AVS:

AVS is stated for:

  • Distributing payload between the operators

  • Checking vault state and it's updating when needed (once in an epoch)

Scaffold operators and initialize them onchain

Scaffolding operators

Before scaffolding the operators make sure instance of AVS is already running.

Explaining wizard:

  • Enter AVS HTTP URL - AVS HTTP endpoint

  • Enter AVS WS URL - AVS WebSockets endpoint

After initialization of AVS and operators you can optionally add an external service to run it alongside with AVS or operator instances:

This command will create a boilerplate section for external service in AVS/operator docker-compose file. You can customize it later.

Running components

List installed operator nodes (outputs voter public keys)

Start operators:

Each operator waits for the command from the AVS to store data to oracle storage and execute the proposal.

Executing proposal

Running payload

Payload container holds data for oracle storage and execution instructions for the proposal.

Container receives a parameter (in CAMB_MVP environment variable) serialized as JSON-object.

It's type is:

extraSigners represents an optional array of serialized private keys used for signing transaction.

Container should write a JSON-stringified object. It's type is:

where proposal instructions data is base58-serialized data (or array of uint8) buffer and account role is the following enum:

This type could be represented as JSON-schema:

Example of running payload container:

Build payload container image

Run payload

Send image name of payload container from the previous step (payload-check-oracle) to the AVS instance

  • AVS broadcasts payload container image name to running operators

  • Operators run payload containers

  • Payload containers return data to store in oracle storage and proposal instructions

  • Operators invoke store_to_storage instruction in PoA program to store data in oracle storage

  • Operators invoke handle_proposal instruction in PoA program with proposal instructions

Last updated