Ava Protocol EigenLayer AVS Explained
An in-depth explanation of the Ava Protocol EigenLayer AVS, covering its architecture, setup, and operational guidelines.
Overview
The Ava Protocol AVS (Actively Validated Service) can be compiled directly using Go version 1.22+. Ensure you have the appropriate version of Go installed in your development environment.
How It Works
User Wallet
For each owner, an ERC6900 wallet is deployed to schedule tasks and approve spending. Each task type has its corresponding modular code to represent its condition and actual execution.
Aggregator
The aggregator accepts RPC requests from clients to submit task payloads. Currently, the Ava Protocol team manages and runs the aggregator. Periodically, the aggregator combines task submissions, updates internal storage, and writes a zkSNARK proof back to our TaskManager contract.
The aggregator also accepts task condition check results from the operator, performs quorum and consensus checks, and flags tasks as ready to run.
Aggregator Address
The Ava Protocol team currently manages the aggregator. Depending on whether you are on the testnet or mainnet, point your operator to the appropriate address in the operator configuration file.
Holesky Testnet
- AVS node: aggregator-holesky.avaprotocol.org:2206
- API Explorer: https://api-explorer-holesky.avaprotocol.org/
Mainnet
- AVS node: aggregator.avaprotocol.org:2206
- API Explorer: https://api-explorer.avaprotocol.org/
Operators
Operators communicate with aggregators via RPC. They request task data from the aggregator, execute condition checks, and send results back to the aggregator. For tasks deemed ready to run, operators execute them. Detailed information on task execution through our ERC6900 modular wallet will be available soon.
Setting Up
Check Go Version
Verify the installed Go version:
go version
Compile Ava Protocol AVS
Compile the AVS using the following command:
go build -o ap-avs
You can then run the ap-avs binary. We strive to use pure Go, allowing cross-compilation for any architecture supported by the Go compiler.
Running the Operator
Refer to the operator documentation for detailed instructions.
Running the Aggregator
To run the aggregator, use the following command:
ap-avs aggregator
Note: The Ava Protocol team currently manages the aggregator, and the IP address for communication between the operator and the aggregator is hardcoded in the operator.
Telemetry Dashboard
Operators connected to the Ava Protocol aggregator can monitor their operations on the telemetry dashboard.
Testnet
https://aggregator-holesky.avaprotocol.org/telemetry
Mainnet
https://aggregator.avaprotocol.org/telemetry
Development Guide
Refer to the development documentation.
Dependencies
EigenLayer CLI
Install the EigenLayer CLI with the following command:
curl -sSfL https://raw.githubusercontent.com/layr-labs/eigenlayer-cli/master/scripts/install.sh | sh -s
Golang
Install Go with the following command:
brew install go
Foundry Toolchain
Install the Foundry toolchain with the following commands:
curl -L https://foundry.paradigm.xyz | bash
foundryup
Protobuf Compiler
Install the Protobuf compiler with the following command:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
Contract address
Holesky Testnet
Name | Address |
---|---|
ProxyAdmin | 0x26CF7A7DF7d1E00D83A5Ca24385f697a3ca4577d |
ServiceManager | 0xEA3E82F9Ae371A6a372A6DCffB1a9bD17e0608eF |
RegistryCoordinator | 0x90c6d6f2A78d5Ce22AB8631Ddb142C03AC87De7a |
BLSApkRegistry | 0x6752F8BeeE5BF45c9d11FDBC4F8aFfF879925585 |
IndexRegistry | 0x298a5d3C8F8Db30E8292C9e2BF92292de469C8FF |
OperatorStateRetriever | 0xb7bb920538e038DFFEfcB55caBf713652ED2031F |
PauserRegistry | 0x3A8ea6e4202CdDe4a9e0cCE19c4Dc1739ba2cF0b |
StakeRegistry | 0x7BacD5dd5A7C3acf8bf1a3c88fB0D00B68EE626A |
ApConfig | 0xb8abbb082ecaae8d1cd68378cf3b060f6f0e07eb |
Ethereum Mainnet
Name | Address |
---|---|
ProxyAdmin | 0x5989934D31f7f397511f105B7E4175a06B7A517F |
ServiceManager | 0x18343Aa10e3D2F3A861e5649627324aEAD987Adf |
RegistryCoordinator | 0x8DE3Ee0dE880161Aa0CD8Bf9F8F6a7AfEeB9A44B |
BLSApkRegistry | 0xB58687fF303C8e92C28a484342755d3228081d45 |
IndexRegistry | 0xc6A464e39d4fA5013D61295501c7cCd050d76612 |
OperatorStateRetriever | 0xb3af70D5f72C04D1f490ff49e5aB189fA7122713 |
PauserRegistry | 0xeec585186c37c517030ba371deac5c17e728c135 |
StakeRegistry | 0x363b3604fE8c2323a98c00906115c8b87a512a12 |
TaskManager | 0x940f62f75cbbbd723d37c9171dc681dfba653b49 |
ApConfig | 0x9c02dfc92eea988902a98919bf4f035e4aaefced |